Fix PR43464: copyprop should maintain loop close phi nodes with multiple arguments.
2010-03-30 Richard Guenther <rguenther@suse.de> Zdenek Dvorak <ook@ucw.cz> Sebastian Pop <sebastian.pop@amd.com> PR middle-end/43464 * tree-ssa-copy.c (init_copy_prop): Handle loop close phi nodes with multiple arguments. (execute_copy_prop): Remove call to rewrite_into_loop_closed_ssa. Co-Authored-By: Sebastian Pop <sebastian.pop@amd.com> Co-Authored-By: Zdenek Dvorak <ook@ucw.cz> From-SVN: r157889
This commit is contained in:
parent
40bf935e85
commit
3cbf7085c3
@ -1,3 +1,12 @@
|
||||
2010-03-30 Richard Guenther <rguenther@suse.de>
|
||||
Zdenek Dvorak <ook@ucw.cz>
|
||||
Sebastian Pop <sebastian.pop@amd.com>
|
||||
|
||||
PR middle-end/43464
|
||||
* tree-ssa-copy.c (init_copy_prop): Handle loop close phi nodes
|
||||
with multiple arguments.
|
||||
(execute_copy_prop): Remove call to rewrite_into_loop_closed_ssa.
|
||||
|
||||
2010-03-23 Sebastian Pop <sebastian.pop@amd.com>
|
||||
|
||||
* graphite-dependences.c (print_pddr): Call print_pdr with an
|
||||
|
@ -749,6 +749,7 @@ init_copy_prop (void)
|
||||
{
|
||||
gimple_stmt_iterator si;
|
||||
int depth = bb->loop_depth;
|
||||
bool loop_exit_p = false;
|
||||
|
||||
for (si = gsi_start_bb (bb); !gsi_end_p (si); gsi_next (&si))
|
||||
{
|
||||
@ -786,6 +787,18 @@ init_copy_prop (void)
|
||||
cached_last_copy_of[SSA_NAME_VERSION (def)] = def;
|
||||
}
|
||||
|
||||
/* In loop-closed SSA form do not copy-propagate through
|
||||
PHI nodes in blocks with a loop exit edge predecessor. */
|
||||
if (current_loops
|
||||
&& loops_state_satisfies_p (LOOP_CLOSED_SSA))
|
||||
{
|
||||
edge_iterator ei;
|
||||
edge e;
|
||||
FOR_EACH_EDGE (e, ei, bb->preds)
|
||||
if (loop_exit_edge_p (e->src->loop_father, e))
|
||||
loop_exit_p = true;
|
||||
}
|
||||
|
||||
for (si = gsi_start_phis (bb); !gsi_end_p (si); gsi_next (&si))
|
||||
{
|
||||
gimple phi = gsi_stmt (si);
|
||||
@ -793,12 +806,7 @@ init_copy_prop (void)
|
||||
|
||||
def = gimple_phi_result (phi);
|
||||
if (!is_gimple_reg (def)
|
||||
/* In loop-closed SSA form do not copy-propagate through
|
||||
PHI nodes. Technically this is only needed for loop
|
||||
exit PHIs, but this is difficult to query. */
|
||||
|| (current_loops
|
||||
&& gimple_phi_num_args (phi) == 1
|
||||
&& loops_state_satisfies_p (LOOP_CLOSED_SSA)))
|
||||
|| loop_exit_p)
|
||||
prop_set_simulate_again (phi, false);
|
||||
else
|
||||
prop_set_simulate_again (phi, true);
|
||||
|
Loading…
Reference in New Issue
Block a user