]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gimple.c (walk_stmt_load_store_addr_ops): Call visit_addr also on COND_EXPR/VEC_COND_...
authorJakub Jelinek <jakub@redhat.com>
Fri, 14 Oct 2011 12:05:43 +0000 (14:05 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 14 Oct 2011 12:05:43 +0000 (14:05 +0200)
* gimple.c (walk_stmt_load_store_addr_ops): Call visit_addr
also on COND_EXPR/VEC_COND_EXPR comparison operands if they are
ADDR_EXPRs.

From-SVN: r179969

gcc/ChangeLog
gcc/gimple.c

index d9cfc339c2b39291aec46ed3b8c47e417393d0cc..c3bc276ce2ec4ab7a9722091c64cddbe22e197df 100644 (file)
@@ -1,3 +1,9 @@
+2011-10-14  Jakub Jelinek  <jakub@redhat.com>
+
+       * gimple.c (walk_stmt_load_store_addr_ops): Call visit_addr
+       also on COND_EXPR/VEC_COND_EXPR comparison operands if they are
+       ADDR_EXPRs.
+
 2011-10-14  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/50723
index 19f02dc9cd17dd9a2c1ec8f935e1c81e49acf063..b2874bb071bf30ad6854e3ce467c92d2193deae0 100644 (file)
@@ -5313,9 +5313,24 @@ walk_stmt_load_store_addr_ops (gimple stmt, void *data,
               || gimple_code (stmt) == GIMPLE_COND))
     {
       for (i = 0; i < gimple_num_ops (stmt); ++i)
-       if (gimple_op (stmt, i)
-           && TREE_CODE (gimple_op (stmt, i)) == ADDR_EXPR)
-         ret |= visit_addr (stmt, TREE_OPERAND (gimple_op (stmt, i), 0), data);
+       {
+         tree op = gimple_op (stmt, i);
+         if (op == NULL_TREE)
+           ;
+         else if (TREE_CODE (op) == ADDR_EXPR)
+           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
+         /* COND_EXPR and VCOND_EXPR rhs1 argument is a comparison
+            tree with two operands.  */
+         else if (i == 1 && COMPARISON_CLASS_P (op))
+           {
+             if (TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR)
+               ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 0),
+                                                      0), data);
+             if (TREE_CODE (TREE_OPERAND (op, 1)) == ADDR_EXPR)
+               ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 1),
+                                                      0), data);
+           }
+       }
     }
   else if (is_gimple_call (stmt))
     {