diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-10-14 12:05:43 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2011-10-14 12:05:43 +0000 |
commit | 052a463de96fd964837b17b5ce4bb7e077a7faee (patch) | |
tree | f3787af36c0768d6230a44b826c991a52ee7c1f5 /gcc/gimple.c | |
parent | cdc5f5171f6f4e63a0905f84ef3040b9cf586e52 (diff) |
* 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.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@179969 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gimple.c')
-rw-r--r-- | gcc/gimple.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/gcc/gimple.c b/gcc/gimple.c index 19f02dc9cd1..b2874bb071b 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)) { |