aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-07-04 10:52:43 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-07-04 10:52:43 +0000
commit4fa4929ea861d9d61f9121f6fe1023b1edaaa538 (patch)
treeb94daf9d7c0a50945bc7fa49b7d1a0f9ecff3c77 /gcc
parent720f52395d60fe525773c89d5ef5af1a9d9f8775 (diff)
downloadgcc-4fa4929ea861d9d61f9121f6fe1023b1edaaa538.zip
gcc-4fa4929ea861d9d61f9121f6fe1023b1edaaa538.tar.gz
gcc-4fa4929ea861d9d61f9121f6fe1023b1edaaa538.tar.bz2
re PR tree-optimization/44656 (VN should value-replace operands during alias-oracle walk)
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. * gcc.dg/tree-ssa/loadpre6.c: Remove XFAIL. From-SVN: r161798
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c5
-rw-r--r--gcc/tree-ssa-sccvn.c17
4 files changed, 30 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c69bc6c..fb54865 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+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>
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5ae6c6e..fe74d60 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+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>
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c
index 4b8239e..242727d 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c
@@ -73,8 +73,7 @@ main (void)
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" } } */
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index cc66720..cca1941 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -1212,6 +1212,23 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_)
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;