summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LoopUnroll.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopUnroll.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopUnroll.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopUnroll.cpp b/llvm/lib/Transforms/Scalar/LoopUnroll.cpp
index 266afbbe9b3..90de9e946da 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnroll.cpp
+++ b/llvm/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;
OpenPOWER on IntegriCloud