Commit 30251f7a by Zdenek Dvorak Committed by Zdenek Dvorak

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
parent e1535fe0
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) ...@@ -615,7 +615,12 @@ cleanup_tree_cfg (void)
calculate_dominance_info (CDI_DOMINATORS); calculate_dominance_info (CDI_DOMINATORS);
} }
else else
changed = false; {
#ifdef ENABLE_CHECKING
verify_dominators (CDI_DOMINATORS);
#endif
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) ...@@ -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) ...@@ -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) ...@@ -718,6 +722,7 @@ eliminate_unnecessary_stmts (void)
} }
} }
} }
return something_changed; return something_changed;
} }
...@@ -837,8 +842,8 @@ perform_tree_ssa_dce (bool aggressive) ...@@ -837,8 +842,8 @@ 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
dominators as well. I haven't investigated the possibility dominators as well. I haven't investigated the possibility
......
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