aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-dom.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2007-05-07 11:42:21 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2007-05-07 11:42:21 +0000
commit8d9d65619c4ed9bad4171a6cbc6919e074825760 (patch)
tree6875876f67a8868c139f99ccb0d56a375a8baec6 /gcc/tree-ssa-dom.c
parent2cb7995f0758c4863805c4f8320d918373ef0bb8 (diff)
downloadgcc-8d9d65619c4ed9bad4171a6cbc6919e074825760.zip
gcc-8d9d65619c4ed9bad4171a6cbc6919e074825760.tar.gz
gcc-8d9d65619c4ed9bad4171a6cbc6919e074825760.tar.bz2
tree-ssa-dom.c (tree_ssa_dominator_optimize): Reset cfg_altered.
* tree-ssa-dom.c (tree_ssa_dominator_optimize): Reset cfg_altered. Free dominance info before purging EH edges as well as after. (eliminate_degenerate_phis): Likewise. (propagate_rhs_into_lhs): Set cfg_altered to true instead of 1. From-SVN: r124498
Diffstat (limited to 'gcc/tree-ssa-dom.c')
-rw-r--r--gcc/tree-ssa-dom.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c
index 6e1387f..d76c2a34 100644
--- a/gcc/tree-ssa-dom.c
+++ b/gcc/tree-ssa-dom.c
@@ -275,6 +275,7 @@ tree_ssa_dominator_optimize (void)
init_walk_dominator_tree (&walk_data);
calculate_dominance_info (CDI_DOMINATORS);
+ cfg_altered = false;
/* We need to know which edges exit loops so that we can
aggressively thread through loop headers to an exit
@@ -320,17 +321,18 @@ tree_ssa_dominator_optimize (void)
/* Thread jumps, creating duplicate blocks as needed. */
cfg_altered |= thread_through_all_blocks ();
+ if (cfg_altered)
+ free_dominance_info (CDI_DOMINATORS);
+
/* Removal of statements may make some EH edges dead. Purge
such edges from the CFG as needed. */
if (!bitmap_empty_p (need_eh_cleanup))
{
- cfg_altered |= tree_purge_all_dead_eh_edges (need_eh_cleanup);
+ if (tree_purge_all_dead_eh_edges (need_eh_cleanup))
+ free_dominance_info (CDI_DOMINATORS);
bitmap_zero (need_eh_cleanup);
}
- if (cfg_altered)
- free_dominance_info (CDI_DOMINATORS);
-
/* Finally, remove everything except invariants in SSA_NAME_VALUE.
Long term we will be able to let everything in SSA_NAME_VALUE
@@ -2336,7 +2338,7 @@ propagate_rhs_into_lhs (tree stmt, tree lhs, tree rhs, bitmap interesting_names)
te->count += e->count;
remove_edge (e);
- cfg_altered = 1;
+ cfg_altered = true;
}
else
ei_next (&ei);
@@ -2485,6 +2487,9 @@ eliminate_degenerate_phis (void)
interesting_names = BITMAP_ALLOC (NULL);
interesting_names1 = BITMAP_ALLOC (NULL);
+ calculate_dominance_info (CDI_DOMINATORS);
+ cfg_altered = false;
+
/* First phase. Eliminate degenerate PHIs via a dominator
walk of the CFG.
@@ -2493,7 +2498,6 @@ eliminate_degenerate_phis (void)
phase in dominator order. Presumably this is because walking
in dominator order leaves fewer PHIs for later examination
by the worklist phase. */
- calculate_dominance_info (CDI_DOMINATORS);
eliminate_degenerate_phis_1 (ENTRY_BLOCK_PTR, interesting_names);
/* Second phase. Eliminate second order degenerate PHIs as well
@@ -2522,18 +2526,20 @@ eliminate_degenerate_phis (void)
}
}
+ if (cfg_altered)
+ free_dominance_info (CDI_DOMINATORS);
+
/* Propagation of const and copies may make some EH edges dead. Purge
such edges from the CFG as needed. */
if (!bitmap_empty_p (need_eh_cleanup))
{
- cfg_altered |= tree_purge_all_dead_eh_edges (need_eh_cleanup);
+ if (tree_purge_all_dead_eh_edges (need_eh_cleanup))
+ free_dominance_info (CDI_DOMINATORS);
BITMAP_FREE (need_eh_cleanup);
}
BITMAP_FREE (interesting_names);
BITMAP_FREE (interesting_names1);
- if (cfg_altered)
- free_dominance_info (CDI_DOMINATORS);
return 0;
}