tree-cfgcleanup.c (cleanup_tree_cfg): Verify dominance info if it claims to be available.
* tree-cfgcleanup.c (cleanup_tree_cfg): Verify dominance info if it claims to be available. * tree-ssa-dce.c (remove_dead_stmt): Mark cfg as altered when edge is redirected. (perform_tree_ssa_dce): Always free postdominators. From-SVN: r124236
This commit is contained in:
parent
e1535fe0c5
commit
30251f7a3a
|
@ -1,3 +1,11 @@
|
||||||
|
2007-04-27 Zdenek Dvorak <dvorakz@suse.cz>
|
||||||
|
|
||||||
|
* tree-cfgcleanup.c (cleanup_tree_cfg): Verify dominance info
|
||||||
|
if it claims to be available.
|
||||||
|
* tree-ssa-dce.c (remove_dead_stmt): Mark cfg as altered when
|
||||||
|
edge is redirected.
|
||||||
|
(perform_tree_ssa_dce): Always free postdominators.
|
||||||
|
|
||||||
2007-04-27 Richard Henderson <rth@redhat.com>
|
2007-04-27 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* config/alpha/predicates.md (aligned_memory_operand): Mark
|
* config/alpha/predicates.md (aligned_memory_operand): Mark
|
||||||
|
|
|
@ -615,7 +615,12 @@ cleanup_tree_cfg (void)
|
||||||
calculate_dominance_info (CDI_DOMINATORS);
|
calculate_dominance_info (CDI_DOMINATORS);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
#ifdef ENABLE_CHECKING
|
||||||
|
verify_dominators (CDI_DOMINATORS);
|
||||||
|
#endif
|
||||||
changed = false;
|
changed = false;
|
||||||
|
}
|
||||||
|
|
||||||
changed |= cleanup_tree_cfg_1 ();
|
changed |= cleanup_tree_cfg_1 ();
|
||||||
|
|
||||||
|
|
|
@ -607,7 +607,6 @@ remove_dead_stmt (block_stmt_iterator *i, basic_block bb)
|
||||||
3. If the post dominator has PHI nodes we may be able to compute
|
3. If the post dominator has PHI nodes we may be able to compute
|
||||||
the right PHI args for them.
|
the right PHI args for them.
|
||||||
|
|
||||||
|
|
||||||
In each of these cases we must remove the control statement
|
In each of these cases we must remove the control statement
|
||||||
as it may reference SSA_NAMEs which are going to be removed and
|
as it may reference SSA_NAMEs which are going to be removed and
|
||||||
we remove all but one outgoing edge from the block. */
|
we remove all but one outgoing edge from the block. */
|
||||||
|
@ -620,6 +619,11 @@ remove_dead_stmt (block_stmt_iterator *i, basic_block bb)
|
||||||
/* Redirect the first edge out of BB to reach POST_DOM_BB. */
|
/* Redirect the first edge out of BB to reach POST_DOM_BB. */
|
||||||
redirect_edge_and_branch (EDGE_SUCC (bb, 0), post_dom_bb);
|
redirect_edge_and_branch (EDGE_SUCC (bb, 0), post_dom_bb);
|
||||||
PENDING_STMT (EDGE_SUCC (bb, 0)) = NULL;
|
PENDING_STMT (EDGE_SUCC (bb, 0)) = NULL;
|
||||||
|
|
||||||
|
/* It is not sufficient to set cfg_altered below during edge
|
||||||
|
removal, in case BB has two successors and one of them
|
||||||
|
is POST_DOM_BB. */
|
||||||
|
cfg_altered = true;
|
||||||
}
|
}
|
||||||
EDGE_SUCC (bb, 0)->probability = REG_BR_PROB_BASE;
|
EDGE_SUCC (bb, 0)->probability = REG_BR_PROB_BASE;
|
||||||
EDGE_SUCC (bb, 0)->count = bb->count;
|
EDGE_SUCC (bb, 0)->count = bb->count;
|
||||||
|
@ -718,6 +722,7 @@ eliminate_unnecessary_stmts (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return something_changed;
|
return something_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -837,7 +842,7 @@ perform_tree_ssa_dce (bool aggressive)
|
||||||
something_changed |= eliminate_unnecessary_stmts ();
|
something_changed |= eliminate_unnecessary_stmts ();
|
||||||
something_changed |= cfg_altered;
|
something_changed |= cfg_altered;
|
||||||
|
|
||||||
if (aggressive && something_changed)
|
/* We do not update postdominators, so free them unconditionally. */
|
||||||
free_dominance_info (CDI_POST_DOMINATORS);
|
free_dominance_info (CDI_POST_DOMINATORS);
|
||||||
|
|
||||||
/* If we removed paths in the CFG, then we need to update
|
/* If we removed paths in the CFG, then we need to update
|
||||||
|
|
Loading…
Reference in New Issue