aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/LoopUnroll.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Transforms/Scalar/LoopUnroll.cpp')
-rw-r--r--lib/Transforms/Scalar/LoopUnroll.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Transforms/Scalar/LoopUnroll.cpp b/lib/Transforms/Scalar/LoopUnroll.cpp
index 266afbbe9b..90de9e946d 100644
--- a/lib/Transforms/Scalar/LoopUnroll.cpp
+++ b/lib/Transforms/Scalar/LoopUnroll.cpp
@@ -300,10 +300,15 @@ bool LoopUnroll::visitLoop(Loop *L) {
ChangeExitBlocksFromTo(LI->begin(), LI->end(),
Preheader, LoopExit);
+ // If the preheader was the entry block of this function, move the exit block
+ // to be the new entry of the loop.
+ Function *F = LoopExit->getParent();
+ if (Preheader == &F->front())
+ F->getBasicBlockList().splice(F->begin(), F->getBasicBlockList(), LoopExit);
// Actually delete the blocks now.
- LoopExit->getParent()->getBasicBlockList().erase(Preheader);
- LoopExit->getParent()->getBasicBlockList().erase(BB);
+ F->getBasicBlockList().erase(Preheader);
+ F->getBasicBlockList().erase(BB);
++NumUnrolled;
return true;