diff options
author | Jakub Jelinek <jakub@redhat.com> | 2011-02-04 16:50:51 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2011-02-04 16:50:51 +0100 |
commit | dcde5957ce2d3465028da302a878d93bea9fc41f (patch) | |
tree | 414dfa9293092030de0a06170c839b69d92e5b67 /gcc/expr.c | |
parent | a64a8e5a1375676bad507dd424e0a1c4850a525b (diff) | |
download | gcc-dcde5957ce2d3465028da302a878d93bea9fc41f.zip gcc-dcde5957ce2d3465028da302a878d93bea9fc41f.tar.gz gcc-dcde5957ce2d3465028da302a878d93bea9fc41f.tar.bz2 |
re PR inline-asm/23200 (rejects "i"(&var + 1))
PR inline-asm/23200
* tree-ssa-ter.c (is_replaceable_p): Add TER argument. Don't
do bb, locus and block comparison and disallow loads if it is
not set.
(stmt_is_replaceable_p): New function.
(process_replaceable, find_replaceable_in_bb): Adjust is_replaceable_p
callers.
* expr.c (expand_expr_real_1) <case SSA_NAME>: If
get_gimple_for_ssa_name try for EXPAND_INITIALIZER harder to use
SSA_NAME_DEF_STMT.
* tree-flow.h (stmt_is_replaceable_p): New prototype.
* gcc.dg/pr23200.c: New test.
From-SVN: r169831
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 7 |
1 files changed, 7 insertions, 0 deletions
@@ -8387,6 +8387,13 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode, NULL); g = get_gimple_for_ssa_name (exp); + /* For EXPAND_INITIALIZER try harder to get something simpler. */ + if (g == NULL + && modifier == EXPAND_INITIALIZER + && !SSA_NAME_IS_DEFAULT_DEF (exp) + && (optimize || DECL_IGNORED_P (SSA_NAME_VAR (exp))) + && stmt_is_replaceable_p (SSA_NAME_DEF_STMT (exp))) + g = SSA_NAME_DEF_STMT (exp); if (g) return expand_expr_real (gimple_assign_rhs_to_tree (g), target, tmode, modifier, NULL); |