Commit c1ae3ca5 by Richard Guenther Committed by Richard Biener

tree-ssa-forwprop.c (ssa_forward_propagate_and_combine): Scan stmts forward when…

tree-ssa-forwprop.c (ssa_forward_propagate_and_combine): Scan stmts forward when combining, visit inserted stmts when a stmt was changed.

2011-06-10  Richard Guenther  <rguenther@suse.de>

	* tree-ssa-forwprop.c (ssa_forward_propagate_and_combine):
	Scan stmts forward when combining, visit inserted stmts when
	a stmt was changed.

From-SVN: r174900
parent b504a918
2011-06-10 Richard Guenther <rguenther@suse.de>
* tree-ssa-forwprop.c (ssa_forward_propagate_and_combine):
Scan stmts forward when combining, visit inserted stmts when
a stmt was changed.
2011-06-10 Paolo Carlini <paolo.carlini@oracle.com> 2011-06-10 Paolo Carlini <paolo.carlini@oracle.com>
* tree.h (error_operand_p): Add. * tree.h (error_operand_p): Add.
......
...@@ -2212,7 +2212,8 @@ ssa_forward_propagate_and_combine (void) ...@@ -2212,7 +2212,8 @@ ssa_forward_propagate_and_combine (void)
FOR_EACH_BB (bb) FOR_EACH_BB (bb)
{ {
gimple_stmt_iterator gsi; gimple_stmt_iterator gsi, prev;
bool prev_initialized;
/* Apply forward propagation to all stmts in the basic-block. /* Apply forward propagation to all stmts in the basic-block.
Note we update GSI within the loop as necessary. */ Note we update GSI within the loop as necessary. */
...@@ -2304,7 +2305,8 @@ ssa_forward_propagate_and_combine (void) ...@@ -2304,7 +2305,8 @@ ssa_forward_propagate_and_combine (void)
/* Combine stmts with the stmts defining their operands. /* Combine stmts with the stmts defining their operands.
Note we update GSI within the loop as necessary. */ Note we update GSI within the loop as necessary. */
for (gsi = gsi_last_bb (bb); !gsi_end_p (gsi);) prev_initialized = false;
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi);)
{ {
gimple stmt = gsi_stmt (gsi); gimple stmt = gsi_stmt (gsi);
bool changed = false; bool changed = false;
...@@ -2386,9 +2388,24 @@ ssa_forward_propagate_and_combine (void) ...@@ -2386,9 +2388,24 @@ ssa_forward_propagate_and_combine (void)
default:; default:;
} }
/* If the stmt changed try combining it again. */ if (changed)
if (!changed) {
gsi_prev (&gsi); /* If the stmt changed then re-visit it and the statements
inserted before it. */
if (!prev_initialized)
gsi = gsi_start_bb (bb);
else
{
gsi = prev;
gsi_next (&gsi);
}
}
else
{
prev = gsi;
prev_initialized = true;
gsi_next (&gsi);
}
} }
} }
......
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