diff options
author | Richard Guenther <rguenther@suse.de> | 2012-02-21 12:37:33 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-02-21 12:37:33 +0000 |
commit | 01718e96e798e62564e8aa3e4496e78441811c71 (patch) | |
tree | a608d53ad0ae105cb54069a711fc6c63a367c516 /gcc/gimplify.c | |
parent | 305406d3e1e585ec8dc1eedbaf757148f6034119 (diff) | |
download | gcc-01718e96e798e62564e8aa3e4496e78441811c71.zip gcc-01718e96e798e62564e8aa3e4496e78441811c71.tar.gz gcc-01718e96e798e62564e8aa3e4496e78441811c71.tar.bz2 |
re PR tree-optimization/52324 (Store motion no longer performed)
2012-02-21 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52324
* gimplify.c (gimplify_expr): When re-gimplifying expressions
do not gimplify a MEM_REF address operand if it is already
in suitable form.
* gcc.dg/tree-ssa/ssa-lim-10.c: New testcase.
From-SVN: r184435
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r-- | gcc/gimplify.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 782adc3..a214134 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -7061,15 +7061,23 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, ret = GS_OK; break; } - ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, - is_gimple_mem_ref_addr, fb_rvalue); - if (ret == GS_ERROR) - break; + /* Avoid re-gimplifying the address operand if it is already + in suitable form. Re-gimplifying would mark the address + operand addressable. Always gimplify when not in SSA form + as we still may have to gimplify decls with value-exprs. */ + if (!gimplify_ctxp || !gimplify_ctxp->into_ssa + || !is_gimple_mem_ref_addr (TREE_OPERAND (*expr_p, 0))) + { + ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, + is_gimple_mem_ref_addr, fb_rvalue); + if (ret == GS_ERROR) + break; + } recalculate_side_effects (*expr_p); ret = GS_ALL_DONE; break; - /* Constants need not be gimplified. */ + /* Constants need not be gimplified. */ case INTEGER_CST: case REAL_CST: case FIXED_CST: |