summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Analysis/LoopInfo.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/llvm/lib/Analysis/LoopInfo.cpp b/llvm/lib/Analysis/LoopInfo.cpp
index 5d481a4131a..c37a5c48e50 100644
--- a/llvm/lib/Analysis/LoopInfo.cpp
+++ b/llvm/lib/Analysis/LoopInfo.cpp
@@ -369,18 +369,16 @@ bool Loop::isAuxiliaryInductionVariable(PHINode &AuxIndVar,
BranchInst *Loop::getLoopGuardBranch() const {
assert(isLoopSimplifyForm() && "Only valid for loop in simplify form");
BasicBlock *Preheader = getLoopPreheader();
- BasicBlock *Latch = getLoopLatch();
- assert(Preheader && Latch &&
+ assert(Preheader && getLoopLatch() &&
"Expecting a loop with valid preheader and latch");
- assert(isLoopExiting(Latch) && "Only valid for rotated loop");
+ assert(isLoopExiting(getLoopLatch()) && "Only valid for rotated loop");
- Instruction *LatchTI = Latch->getTerminator();
- if (!LatchTI || LatchTI->getNumSuccessors() != 2)
+ // Disallow loops with more than one unique exit block, as we do not verify
+ // that GuardOtherSucc post dominates all exit blocks.
+ BasicBlock *ExitFromLatch = getUniqueExitBlock();
+ if (!ExitFromLatch)
return nullptr;
- BasicBlock *ExitFromLatch = (LatchTI->getSuccessor(0) == getHeader())
- ? LatchTI->getSuccessor(1)
- : LatchTI->getSuccessor(0);
BasicBlock *ExitFromLatchSucc = ExitFromLatch->getUniqueSuccessor();
if (!ExitFromLatchSucc)
return nullptr;
OpenPOWER on IntegriCloud