diff options
author | Richard Biener <rguenther@suse.de> | 2022-01-04 11:59:35 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-01-04 13:17:14 +0100 |
commit | ebc853deb7cc0487de9ef6e891a007ba853d1933 (patch) | |
tree | ff4a9fa8eb5948ec31be0b09adfaa64f9746c5be /gcc/tree-ssa-tail-merge.c | |
parent | beed3f8f60492289ca6211d86c54a2254a642035 (diff) | |
download | gcc-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.c | 14 |
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)) { |