[llvm] r302058 - [RuntimeLoopUnroller] Add assert that we dont unroll non-rotated loops
Anna Thomas via llvm-commits
llvm-commits at lists.llvm.org
Wed May 3 10:44:00 PDT 2017
Author: annat
Date: Wed May 3 12:43:59 2017
New Revision: 302058
URL: http://llvm.org/viewvc/llvm-project?rev=302058&view=rev
Log:
[RuntimeLoopUnroller] Add assert that we dont unroll non-rotated loops
Summary:
Cloning basic blocks in the loop for runtime loop unroller depends on loop being
in rotated form (i.e. loop latch target is the exit block).
Assert that this is true, so that callers of runtime loop unroller pass in
canonical loops.
The single caller of this function has that check recently added:
https://reviews.llvm.org/rL301239
Reviewers: davide
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D32801
Modified:
llvm/trunk/lib/Transforms/Utils/LoopUnrollRuntime.cpp
Modified: llvm/trunk/lib/Transforms/Utils/LoopUnrollRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LoopUnrollRuntime.cpp?rev=302058&r1=302057&r2=302058&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/LoopUnrollRuntime.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/LoopUnrollRuntime.cpp Wed May 3 12:43:59 2017
@@ -512,6 +512,13 @@ bool llvm::UnrollRuntimeLoopRemainder(Lo
BasicBlock *Latch = L->getLoopLatch();
+ // Cloning the loop basic blocks (`CloneLoopBlocks`) requires that one of the
+ // targets of the Latch be the single exit block out of the loop. This needs
+ // to be guaranteed by the callers of UnrollRuntimeLoopRemainder.
+ BranchInst *LatchBR = cast<BranchInst>(Latch->getTerminator());
+ assert(LatchBR->getSuccessor(0) == Exit ||
+ LatchBR->getSuccessor(1) == Exit && "loop latch successor should be "
+ "exit block!");
// Loop structure is the following:
//
// PreHeader
More information about the llvm-commits
mailing list