diff options
author | Michael Zolotukhin <mzolotukhin@apple.com> | 2016-08-02 19:19:31 +0000 |
---|---|---|
committer | Michael Zolotukhin <mzolotukhin@apple.com> | 2016-08-02 19:19:31 +0000 |
commit | d9b6ad3c0193b5b7a92a9d7391c10c3294bd3711 (patch) | |
tree | d26cab74f54e381c9f702955123772c3a52438d3 /llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp | |
parent | 9263ae3b5ac8be8fc6e6011b4e36b2faf372520f (diff) | |
download | bcm5719-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.cpp | 12 |
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(); |