summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
diff options
context:
space:
mode:
authorMichael Zolotukhin <mzolotukhin@apple.com>2016-08-02 19:19:31 +0000
committerMichael Zolotukhin <mzolotukhin@apple.com>2016-08-02 19:19:31 +0000
commitd9b6ad3c0193b5b7a92a9d7391c10c3294bd3711 (patch)
treed26cab74f54e381c9f702955123772c3a52438d3 /llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
parent9263ae3b5ac8be8fc6e6011b4e36b2faf372520f (diff)
downloadbcm5719-llvm-d9b6ad3c0193b5b7a92a9d7391c10c3294bd3711.tar.gz
bcm5719-llvm-d9b6ad3c0193b5b7a92a9d7391c10c3294bd3711.zip
[LoopUnroll] Ensure we create prolog loops in simplified form.
llvm-svn: 277502
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp b/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
index 861a50cf354..16197a9206e 100644
--- a/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
+++ b/llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp
@@ -112,6 +112,18 @@ static void ConnectProlog(Loop *L, Value *BECount, unsigned Count,
}
}
+ // Make sure that created prolog loop is in simplified form
+ SmallVector<BasicBlock *, 4> PrologExitPreds;
+ Loop *PrologLoop = LI->getLoopFor(PrologLatch);
+ if (PrologLoop) {
+ for (BasicBlock *PredBB : predecessors(PrologExit))
+ if (PrologLoop->contains(PredBB))
+ PrologExitPreds.push_back(PredBB);
+
+ SplitBlockPredecessors(PrologExit, PrologExitPreds, ".unr-lcssa", DT, LI,
+ PreserveLCSSA);
+ }
+
// Create a branch around the original loop, which is taken if there are no
// iterations remaining to be executed after running the prologue.
Instruction *InsertPt = PrologExit->getTerminator();
OpenPOWER on IntegriCloud