diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Analysis/LoopInfo.cpp | 14 |
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; |

