PR tree-optimization/44656
* tree-ssa-sccvn.c (vn_reference_lookup_3): Try disambiguation
again after value-replacing in the defintions lhs.
* gcc.dg/tree-ssa/loadpre6.c: Remove XFAIL.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161798
138bc75d-0d04-0410-961f-
82ee72b054a4
+2010-07-04 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44656
+ * tree-ssa-sccvn.c (vn_reference_lookup_3): Try disambiguation
+ again after value-replacing in the defintions lhs.
+
2010-07-04 Ira Rosen <irar@il.ibm.com>
Revital Eres <eres@il.ibm.com>
+2010-07-04 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/44656
+ * gcc.dg/tree-ssa/loadpre6.c: Remove XFAIL.
+
2010-07-04 Ira Rosen <irar@il.ibm.com>
Revital Eres <eres@il.ibm.com>
return 0;
}
-/* See PR44656. The last elimination is only done by PRE. */
-/* { dg-final { scan-tree-dump-not "= unexpanded_var_list;" "fre" { xfail *-*-* } } } */
-/* { dg-final { scan-tree-dump-times "Eliminated: 1" 2 "pre" } } */
+/* { dg-final { scan-tree-dump-not "= unexpanded_var_list;" "fre" } } */
+/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" } } */
/* { dg-final { scan-tree-dump-times "Insertions: 2" 1 "pre" } } */
/* { dg-final { cleanup-tree-dump "pre" } } */
tree base;
HOST_WIDE_INT offset, maxsize;
+ /* First try to disambiguate after value-replacing in the definitions LHS. */
+ if (is_gimple_assign (def_stmt))
+ {
+ tree lhs = gimple_assign_lhs (def_stmt);
+ ao_ref ref1;
+ VEC (vn_reference_op_s, heap) *operands = NULL;
+ bool res;
+ copy_reference_ops_from_ref (lhs, &operands);
+ operands = valueize_refs (operands);
+ ao_ref_init_from_vn_reference (&ref1, get_alias_set (lhs),
+ TREE_TYPE (lhs), operands);
+ res = refs_may_alias_p_1 (ref, &ref1, true);
+ VEC_free (vn_reference_op_s, heap, operands);
+ if (!res)
+ return NULL;
+ }
+
base = ao_ref_base (ref);
offset = ref->offset;
maxsize = ref->max_size;