summaryrefslogtreecommitdiff
path: root/gcc/cfgloopmanip.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/cfgloopmanip.c')
-rw-r--r--gcc/cfgloopmanip.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c
index 92ab088ea40..83c4c570c5a 100644
--- a/gcc/cfgloopmanip.c
+++ b/gcc/cfgloopmanip.c
@@ -411,6 +411,8 @@ add_loop (struct loop *loop, struct loop *outer)
basic_block *bbs;
int i, n;
struct loop *subloop;
+ edge e;
+ edge_iterator ei;
/* Add it to loop structure. */
place_new_loop (loop);
@@ -441,6 +443,15 @@ add_loop (struct loop *loop, struct loop *outer)
}
}
+ /* Update the information about loop exit edges. */
+ for (i = 0; i < n; i++)
+ {
+ FOR_EACH_EDGE (e, ei, bbs[i]->succs)
+ {
+ rescan_loop_exit (e, false, false);
+ }
+ }
+
free (bbs);
}
@@ -1283,10 +1294,6 @@ loop_version (struct loop *loop,
struct loop *nloop;
basic_block cond_bb;
- /* CHECKME: Loop versioning does not handle nested loop at this point. */
- if (loop->inner)
- return NULL;
-
/* Record entry and latch edges for the loop */
entry = loop_preheader_edge (loop);
irred_flag = entry->flags & EDGE_IRREDUCIBLE_LOOP;