diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-10-14 14:05:43 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-10-14 14:05:43 +0200 |
commit | 9dd58aa41c1bde5bce9959c1453af4e790564073 (patch) | |
tree | f3787af36c0768d6230a44b826c991a52ee7c1f5 | |
parent | 9918dc0f9985b9bf08b81652fd7073826658cdda (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/gimple.c | 21 |
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)) { |