Commit 01718e96 by Richard Guenther Committed by Richard Biener

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
parent 305406d3
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.
2012-02-21 Andreas Krebbel <Andreas.Krebbel@de.ibm.com> 2012-02-21 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
* config/s390/s390.md ("fixuns_trunc<mode>si2"): Replace * config/s390/s390.md ("fixuns_trunc<mode>si2"): Replace
......
...@@ -7061,15 +7061,23 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p, ...@@ -7061,15 +7061,23 @@ gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
ret = GS_OK; ret = GS_OK;
break; break;
} }
ret = gimplify_expr (&TREE_OPERAND (*expr_p, 0), pre_p, post_p, /* Avoid re-gimplifying the address operand if it is already
is_gimple_mem_ref_addr, fb_rvalue); in suitable form. Re-gimplifying would mark the address
if (ret == GS_ERROR) operand addressable. Always gimplify when not in SSA form
break; 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); recalculate_side_effects (*expr_p);
ret = GS_ALL_DONE; ret = GS_ALL_DONE;
break; break;
/* Constants need not be gimplified. */ /* Constants need not be gimplified. */
case INTEGER_CST: case INTEGER_CST:
case REAL_CST: case REAL_CST:
case FIXED_CST: case FIXED_CST:
......
2012-02-21 Richard Guenther <rguenther@suse.de>
PR tree-optimization/52324
* gcc.dg/tree-ssa/ssa-lim-10.c: New testcase.
2012-02-21 Georg-Johann Lay <avr@gjlay.de> 2012-02-21 Georg-Johann Lay <avr@gjlay.de>
PR middle-end/51782 PR middle-end/51782
......
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-lim1-details" } */
int *l, *r;
int test_func(void)
{
int i;
int direction;
static int pos;
pos = 0;
direction = 1;
for ( i = 0; i <= 400; i++ )
{
if ( direction == 0 )
pos = l[pos];
else
pos = r[pos];
if ( pos == -1 )
{
pos = 0;
direction = !direction;
}
}
return i;
}
/* { dg-final { scan-tree-dump "Executing store motion of pos" "lim1" } } */
/* { dg-final { cleanup-tree-dump "lim1" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment