OSDN Git Service

* tree-ssa-forwprop.c (forward_propagate_addr_expr):
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 May 2005 21:07:38 +0000 (21:07 +0000)
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 May 2005 21:07:38 +0000 (21:07 +0000)
        See through ADDR_EXPR in finding place to propagate into.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@100223 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/tree-ssa-forwprop.c

index bc7e8f9..1657e7d 100644 (file)
@@ -1,3 +1,8 @@
+2005-05-26  Richard Guenther  <rguenth@gcc.gnu.org>
+
+       * tree-ssa-forwprop.c (forward_propagate_addr_expr):
+       See through ADDR_EXPR in finding place to propagate into.
+
 2005-05-26  Kazu Hirata  <kazu@cs.umass.edu>
 
        * c-common.c, c-parser.c, cfgbuild.c, cfghooks.c, cfghooks.h,
index 17da0f1..de85b7c 100644 (file)
@@ -560,7 +560,8 @@ forward_propagate_addr_expr (tree stmt)
   if (bb_for_stmt (use_stmt)->loop_depth > stmt_loop_depth)
     return false;
 
-  /* Strip away any outer COMPONENT_REF/ARRAY_REF nodes from the LHS.  */
+  /* Strip away any outer COMPONENT_REF/ARRAY_REF nodes from the LHS. 
+     ADDR_EXPR will not appear on the LHS.  */
   lhs = TREE_OPERAND (use_stmt, 0);
   while (TREE_CODE (lhs) == COMPONENT_REF || TREE_CODE (lhs) == ARRAY_REF)
     lhs = TREE_OPERAND (lhs, 0);
@@ -591,9 +592,12 @@ forward_propagate_addr_expr (tree stmt)
       return true;
     }
 
-  /* Strip away any outer COMPONENT_REF/ARRAY_REF nodes from the RHS.  */
+  /* Strip away any outer COMPONENT_REF, ARRAY_REF or ADDR_EXPR
+     nodes from the RHS.  */
   rhs = TREE_OPERAND (use_stmt, 1);
-  while (TREE_CODE (rhs) == COMPONENT_REF || TREE_CODE (rhs) == ARRAY_REF)
+  while (TREE_CODE (rhs) == COMPONENT_REF
+        || TREE_CODE (rhs) == ARRAY_REF
+        || TREE_CODE (rhs) == ADDR_EXPR)
     rhs = TREE_OPERAND (rhs, 0);
 
   /* Now see if the RHS node is an INDIRECT_REF using NAME.  If so,