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>
* tree.h (error_operand_p): Add.
......
......@@ -2212,7 +2212,8 @@ ssa_forward_propagate_and_combine (void)
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.
Note we update GSI within the loop as necessary. */
......@@ -2304,7 +2305,8 @@ ssa_forward_propagate_and_combine (void)
/* Combine stmts with the stmts defining their operands.
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);
bool changed = false;
......@@ -2386,9 +2388,24 @@ ssa_forward_propagate_and_combine (void)
default:;
}
/* If the stmt changed try combining it again. */
if (!changed)
gsi_prev (&gsi);
if (changed)
{
/* 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