tree-ssa-sccvn.h (vn_reference_lookup): Adjust prototype.
authorRichard Guenther <rguenther@suse.de>
Tue, 15 Apr 2008 13:28:08 +0000 (13:28 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 15 Apr 2008 13:28:08 +0000 (13:28 +0000)
2008-04-15  Richard Guenther  <rguenther@suse.de>

* tree-ssa-sccvn.h (vn_reference_lookup): Adjust prototype.
* tree-ssa-sccvn.c (vn_reference_lookup): New parameter maywalk.
(visit_reference_op_load): Do walk vuse-vdef chains on
vn_reference_lookup.
(visit_reference_op_store): But do not here.
* tree-vn.c (vn_lookup): Do not walk vuse-vdef chains on
vn_reference_lookup.
(vn_lookup_with_vuses): But do so here.

From-SVN: r134314

gcc/ChangeLog
gcc/tree-ssa-sccvn.c
gcc/tree-ssa-sccvn.h
gcc/tree-vn.c

index 90a088f25fcf9525a326e98e0f9965b5e88b6467..b00f53d6085f9aa6c06ca2d80ac42e0816fb1035 100644 (file)
@@ -1,3 +1,14 @@
+2008-04-15  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-sccvn.h (vn_reference_lookup): Adjust prototype.
+       * tree-ssa-sccvn.c (vn_reference_lookup): New parameter maywalk.
+       (visit_reference_op_load): Do walk vuse-vdef chains on
+       vn_reference_lookup.
+       (visit_reference_op_store): But do not here.
+       * tree-vn.c (vn_lookup): Do not walk vuse-vdef chains on
+       vn_reference_lookup.
+       (vn_lookup_with_vuses): But do so here.
+
 2008-04-14  Ian Lance Taylor  <iant@google.com>
 
        * fold-const.c (fold_overflow_warning): Remove assertion.
index b613b2ba21fbecaa765e5548208568404801b49b..849eade1d210c3b3322daa9f304c4eecb44ca101 100644 (file)
@@ -735,7 +735,7 @@ vn_reference_lookup_1 (vn_reference_t vr)
    it does not exist in the hash table. */
 
 tree
-vn_reference_lookup (tree op, VEC (tree, gc) *vuses)
+vn_reference_lookup (tree op, VEC (tree, gc) *vuses, bool maywalk)
 {
   struct vn_reference_s vr1;
   tree result, def_stmt;
@@ -748,6 +748,7 @@ vn_reference_lookup (tree op, VEC (tree, gc) *vuses)
   /* If there is a single defining statement for all virtual uses, we can
      use that, following virtual use-def chains.  */
   if (!result
+      && maywalk
       && vr1.vuses
       && VEC_length (tree, vr1.vuses) >= 1
       && !get_call_expr_in (op)
@@ -1188,7 +1189,7 @@ static bool
 visit_reference_op_load (tree lhs, tree op, tree stmt)
 {
   bool changed = false;
-  tree result = vn_reference_lookup (op, shared_vuses_from_stmt (stmt));
+  tree result = vn_reference_lookup (op, shared_vuses_from_stmt (stmt), true);
 
   /* We handle type-punning through unions by value-numbering based
      on offset and size of the access.  Be prepared to handle a
@@ -1294,7 +1295,7 @@ visit_reference_op_store (tree lhs, tree op, tree stmt)
      Otherwise, the vdefs for the store are used when inserting into
      the table, since the store generates a new memory state.  */
 
-  result = vn_reference_lookup (lhs, shared_vuses_from_stmt (stmt));
+  result = vn_reference_lookup (lhs, shared_vuses_from_stmt (stmt), false);
 
   if (result)
     {
index 55d9831f504be1a18cbb085487a76f757f4a599e..ecc3297af429db928104277973cdfc56fbf0fad0 100644 (file)
@@ -59,7 +59,7 @@ void free_scc_vn (void);
 void switch_to_PRE_table (void);
 tree vn_nary_op_lookup (tree);
 void vn_nary_op_insert (tree, tree);
-tree vn_reference_lookup (tree, VEC (tree, gc) *);
+tree vn_reference_lookup (tree, VEC (tree, gc) *, bool);
 void vn_reference_insert (tree, tree, VEC (tree, gc) *);
 VEC (tree, gc) *shared_vuses_from_stmt (tree);
 VEC (tree, gc) *copy_vuses_from_stmt (tree);
index 2122a7e432ecdeaccd4390b42f96b599c99d33ad..c09dfb762849e80429c083c1a42e1fa9df879f3b 100644 (file)
@@ -255,7 +255,7 @@ vn_lookup (tree expr)
       /* In the case of array-refs of constants, for example, we can
         end up with no vuses.  */
     case tcc_reference:
-      return vn_reference_lookup (expr, NULL);
+      return vn_reference_lookup (expr, NULL, false);
       break;
       /* It is possible to have CALL_EXPR with no vuses for things
         like "cos", and these will fall into vn_lookup.   */
@@ -264,7 +264,7 @@ vn_lookup (tree expr)
     case tcc_expression:
     case tcc_declaration:
       if (TREE_CODE (expr) == CALL_EXPR || DECL_P (expr))
-       return vn_reference_lookup (expr, NULL);
+       return vn_reference_lookup (expr, NULL, false);
       else if (TREE_CODE (expr) == SSA_NAME)
        return SSA_NAME_VALUE (expr);
       else if (TREE_CODE (expr) == ADDR_EXPR)
@@ -308,7 +308,7 @@ vn_lookup_with_vuses (tree expr, VEC (tree, gc) *vuses)
   if (is_gimple_min_invariant (expr) || TREE_CODE (expr) == FIELD_DECL)
     return expr;
 
-  return vn_reference_lookup (expr, vuses);
+  return vn_reference_lookup (expr, vuses, true);
 }
 
 static tree