Lines Matching defs:ExitingBB
156 bool linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB,
699 static bool isLoopExitTestBasedOn(Value *V, BasicBlock *ExitingBB) {
700 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
712 static bool needsLFTR(Loop *L, BasicBlock *ExitingBB) {
719 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
833 static PHINode *FindLoopCounter(Loop *L, BasicBlock *ExitingBB,
838 Value *Cond = cast<BranchInst>(ExitingBB->getTerminator())->getCondition();
868 if (!isLoopExitTestBasedOn(Phi, ExitingBB) &&
869 !isLoopExitTestBasedOn(IncPhi, ExitingBB))
882 !mustExecuteUBIfPoisonOnPathTo(Phi, ExitingBB->getTerminator(), DT))
913 static Value *genLoopLimit(PHINode *IndVar, BasicBlock *ExitingBB,
939 ExitingBB->getTerminator());
948 linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB,
963 if (ExitingBB == L->getLoopLatch()) {
970 isLoopExitTestBasedOn(IncVar, ExitingBB) ||
971 mustExecuteUBIfPoisonOnPathTo(IncVar, ExitingBB->getTerminator(), DT);
999 IndVar, ExitingBB, ExitCount, UsePostInc, L, Rewriter, SE);
1005 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
1188 static Constant *createFoldedExitCond(const Loop *L, BasicBlock *ExitingBB,
1190 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
1191 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB));
1197 static void foldExit(const Loop *L, BasicBlock *ExitingBB, bool IsTaken,
1199 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
1200 auto *NewCond = createFoldedExitCond(L, ExitingBB, IsTaken);
1243 createInvariantCond(const Loop *L, BasicBlock *ExitingBB,
1252 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB));
1256 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator());
1262 createReplacement(ICmpInst *ICmp, const Loop *L, BasicBlock *ExitingBB,
1270 auto *BI = cast<BranchInst>(ExitingBB->getTerminator());
1278 return createFoldedExitCond(L, ExitingBB, /*IsTaken*/ !*EV);
1314 return createFoldedExitCond(L, ExitingBB, /*IsTaken*/ false);
1316 return createInvariantCond(L, ExitingBB, *LIP, Rewriter);
1320 const Loop *L, BranchInst *BI, BasicBlock *ExitingBB, const SCEV *MaxIter,
1370 SE->getExitCount(L, ExitingBB,
1403 createReplacement(OldCond, L, ExitingBB, MaxIter, Inverted,
1436 for (auto *ExitingBB : ExitingBlocks) {
1437 auto *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator());
1463 const DataLayout &DL = ExitingBB->getDataLayout();
1482 for (auto *ExitingBB : ExitingBlocks) {
1483 auto *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator());
1540 const DataLayout &DL = ExitingBB->getDataLayout();
1565 llvm::erase_if(ExitingBlocks, [&](BasicBlock *ExitingBB) {
1569 if (LI->getLoopFor(ExitingBB) != L)
1573 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator());
1578 if (!DT->dominates(ExitingBB, L->getLoopLatch()))
1638 for (BasicBlock *ExitingBB : ExitingBlocks) {
1639 const SCEV *ExactExitCount = SE->getExitCount(L, ExitingBB);
1641 L, ExitingBB, ScalarEvolution::ExitCountKind::SymbolicMaximum);
1645 auto *BI = cast<BranchInst>(ExitingBB->getTerminator());
1647 return optimizeLoopExitWithUnknownExitCount(L, BI, ExitingBB,
1684 foldExit(L, ExitingBB, true, DeadInsts);
1704 foldExit(L, ExitingBB, false, DeadInsts);
1714 foldExit(L, ExitingBB, false, DeadInsts);
1755 auto BadExit = [&](BasicBlock *ExitingBB) {
1759 if (LI->getLoopFor(ExitingBB) != L)
1763 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator());
1779 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB);
1793 for (BasicBlock *ExitingBB : ExitingBlocks)
1794 if (!DT->dominates(ExitingBB, Latch))
1861 for (BasicBlock *ExitingBB : ExitingBlocks) {
1862 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB);
1864 auto *BI = cast<BranchInst>(ExitingBB->getTerminator());
1978 for (BasicBlock *ExitingBB : ExitingBlocks) {
1980 if (!isa<BranchInst>(ExitingBB->getTerminator()))
1986 if (LI->getLoopFor(ExitingBB) != L)
1989 if (!needsLFTR(L, ExitingBB))
1992 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB);
2003 PHINode *IndVar = FindLoopCounter(L, ExitingBB, ExitCount, SE, DT);
2016 Changed |= linearFunctionTestReplace(L, ExitingBB,