diff options
author | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-27 20:40:26 +0000 |
---|---|---|
committer | rakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-04-27 20:40:26 +0000 |
commit | 72e1a42b5d19652e77e37936ed5cdf619d76a08f (patch) | |
tree | 087570880b62309f6060a8d11007bfeccdbbb2b6 /gcc/tree-ssa-dce.c | |
parent | ae1ebe4a5293683ca104797a9f3ef3027d58ba36 (diff) | |
download | gcc-72e1a42b5d19652e77e37936ed5cdf619d76a08f.tar.gz |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@124236 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-ssa-dce.c')
-rw-r--r-- | gcc/tree-ssa-dce.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/tree-ssa-dce.c b/gcc/tree-ssa-dce.c index 3631add456f..7da5cdffbb0 100644 --- a/gcc/tree-ssa-dce.c +++ b/gcc/tree-ssa-dce.c @@ -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 the right PHI args for them. - In each of these cases we must remove the control statement as it may reference SSA_NAMEs which are going to be removed and 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_edge_and_branch (EDGE_SUCC (bb, 0), post_dom_bb); 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)->count = bb->count; @@ -718,6 +722,7 @@ eliminate_unnecessary_stmts (void) } } } + return something_changed; } @@ -837,8 +842,8 @@ perform_tree_ssa_dce (bool aggressive) something_changed |= eliminate_unnecessary_stmts (); something_changed |= cfg_altered; - if (aggressive && something_changed) - free_dominance_info (CDI_POST_DOMINATORS); + /* We do not update postdominators, so free them unconditionally. */ + free_dominance_info (CDI_POST_DOMINATORS); /* If we removed paths in the CFG, then we need to update dominators as well. I haven't investigated the possibility |