aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2011-10-14 14:05:43 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2011-10-14 14:05:43 +0200
commit9dd58aa41c1bde5bce9959c1453af4e790564073 (patch)
treef3787af36c0768d6230a44b826c991a52ee7c1f5
parent9918dc0f9985b9bf08b81652fd7073826658cdda (diff)
downloadgcc-9dd58aa41c1bde5bce9959c1453af4e790564073.zip
gcc-9dd58aa41c1bde5bce9959c1453af4e790564073.tar.gz
gcc-9dd58aa41c1bde5bce9959c1453af4e790564073.tar.bz2
gimple.c (walk_stmt_load_store_addr_ops): Call visit_addr also on COND_EXPR/VEC_COND_EXPR comparison operands if...
* 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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimple.c21
2 files changed, 24 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d9cfc33..c3bc276 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 19f02dc..b2874bb 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -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))
{