aboutsummaryrefslogtreecommitdiff
path: root/gcc/loop-init.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/loop-init.c')
-rw-r--r--gcc/loop-init.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/loop-init.c b/gcc/loop-init.c
index 92d621e..664ff29 100644
--- a/gcc/loop-init.c
+++ b/gcc/loop-init.c
@@ -91,16 +91,27 @@ loop_optimizer_init (unsigned flags)
}
else
{
+ bool recorded_exits = loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS);
+
gcc_assert (cfun->curr_properties & PROP_loops);
/* Ensure that the dominators are computed, like flow_loops_find does. */
calculate_dominance_info (CDI_DOMINATORS);
+ if (loops_state_satisfies_p (LOOPS_NEED_FIXUP))
+ {
+ loops_state_clear (~0U);
+ fix_loop_structure (NULL);
+ }
+
#ifdef ENABLE_CHECKING
- verify_loop_structure ();
+ else
+ verify_loop_structure ();
#endif
/* Clear all flags. */
+ if (recorded_exits)
+ release_recorded_exits ();
loops_state_clear (~0U);
}