From 9dd58aa41c1bde5bce9959c1453af4e790564073 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 14 Oct 2011 14:05:43 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/gimple.c | 21 ++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d9cfc339c2b..c3bc276ce2e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-10-14 Jakub Jelinek + + * 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 PR tree-optimization/50723 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)) { -- 2.30.2