OSDN Git Service

2010-07-04 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 Jul 2010 10:52:43 +0000 (10:52 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 Jul 2010 10:52:43 +0000 (10:52 +0000)
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

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/loadpre6.c
gcc/tree-ssa-sccvn.c

index c69bc6c..fb54865 100644 (file)
@@ -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>
 
index 5ae6c6e..fe74d60 100644 (file)
@@ -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>
 
index 4b8239e..242727d 100644 (file)
@@ -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" } } */
index cc66720..cca1941 100644 (file)
@@ -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;