aboutsummaryrefslogtreecommitdiff
path: root/gcc/cfgcleanup.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cfgcleanup.c')
-rw-r--r--gcc/cfgcleanup.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c
index 7139e3a..67e5632 100644
--- a/gcc/cfgcleanup.c
+++ b/gcc/cfgcleanup.c
@@ -2367,7 +2367,13 @@ cleanup_cfg (int mode)
break;
else if ((mode & CLEANUP_CROSSJUMP)
&& crossjumps_occured)
- run_fast_dce ();
+ {
+ /* Fast DCE is expensive, we really want to be sure we don't
+ re-run it just because crossjumping cascade. */
+ while (try_optimize_cfg (mode))
+ delete_unreachable_blocks ();
+ run_fast_dce ();
+ }
}
else
break;