aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-tail-merge.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2022-01-04 11:59:35 +0100
committerRichard Biener <rguenther@suse.de>2022-01-04 13:17:14 +0100
commitebc853deb7cc0487de9ef6e891a007ba853d1933 (patch)
treeff4a9fa8eb5948ec31be0b09adfaa64f9746c5be /gcc/tree-ssa-tail-merge.c
parentbeed3f8f60492289ca6211d86c54a2254a642035 (diff)
downloadgcc-ebc853deb7cc0487de9ef6e891a007ba853d1933.zip
gcc-ebc853deb7cc0487de9ef6e891a007ba853d1933.tar.gz
gcc-ebc853deb7cc0487de9ef6e891a007ba853d1933.tar.bz2
tree-optimization/103690 - not up-to-date SSA and PRE DCE
This avoids running simple_dce_from_worklist on partially not up-to-date SSA form (in unreachable code regions) by scheduling CFG cleanup manually as is done anyway when tail-merging runs. 2022-01-04 Richard Biener <rguenther@suse.de> PR tree-optimization/103690 * tree-pass.h (tail_merge_optimize): Adjust. * tree-ssa-tail-merge.c (tail_merge_optimize): Pass in whether to re-split critical edges, move CFG cleanup ... * tree-ssa-pre.c (pass_pre::execute): ... here, before simple_dce_from_worklist and delay freeing inserted_exprs from ... (fini_pre): .. here.
Diffstat (limited to 'gcc/tree-ssa-tail-merge.c')
-rw-r--r--gcc/tree-ssa-tail-merge.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/gcc/tree-ssa-tail-merge.c b/gcc/tree-ssa-tail-merge.c
index f717bb2..fd33380 100644
--- a/gcc/tree-ssa-tail-merge.c
+++ b/gcc/tree-ssa-tail-merge.c
@@ -1724,7 +1724,7 @@ update_debug_stmts (void)
/* Runs tail merge optimization. */
unsigned int
-tail_merge_optimize (unsigned int todo)
+tail_merge_optimize (unsigned int todo, bool need_crit_edge_split)
{
int nr_bbs_removed_total = 0;
int nr_bbs_removed;
@@ -1738,15 +1738,9 @@ tail_merge_optimize (unsigned int todo)
timevar_push (TV_TREE_TAIL_MERGE);
- /* We enter from PRE which has critical edges split. Elimination
- does not process trivially dead code so cleanup the CFG if we
- are told so. And re-split critical edges then. */
- if (todo & TODO_cleanup_cfg)
- {
- cleanup_tree_cfg ();
- todo &= ~TODO_cleanup_cfg;
- split_edges_for_insertion ();
- }
+ /* Re-split critical edges when PRE did a CFG cleanup. */
+ if (need_crit_edge_split)
+ split_edges_for_insertion ();
if (!dom_info_available_p (CDI_DOMINATORS))
{