Lines Matching refs:ExitingBB
166 bool linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB,
699 static bool isLoopExitTestBasedOn(Value *V, BasicBlock *ExitingBB) { in isLoopExitTestBasedOn() argument
700 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in isLoopExitTestBasedOn()
712 static bool needsLFTR(Loop *L, BasicBlock *ExitingBB) { in needsLFTR() argument
719 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in needsLFTR()
889 static PHINode *FindLoopCounter(Loop *L, BasicBlock *ExitingBB, in FindLoopCounter() argument
894 Value *Cond = cast<BranchInst>(ExitingBB->getTerminator())->getCondition(); in FindLoopCounter()
928 if (!isLoopExitTestBasedOn(Phi, ExitingBB) && in FindLoopCounter()
929 !isLoopExitTestBasedOn(IncPhi, ExitingBB)) in FindLoopCounter()
942 !mustExecuteUBIfPoisonOnPathTo(Phi, ExitingBB->getTerminator(), DT)) in FindLoopCounter()
973 static Value *genLoopLimit(PHINode *IndVar, BasicBlock *ExitingBB, in genLoopLimit() argument
1009 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in genLoopLimit()
1053 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in genLoopLimit()
1064 linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB, in linearFunctionTestReplace() argument
1079 if (ExitingBB == L->getLoopLatch()) { in linearFunctionTestReplace()
1086 isLoopExitTestBasedOn(IncVar, ExitingBB) || in linearFunctionTestReplace()
1087 mustExecuteUBIfPoisonOnPathTo(IncVar, ExitingBB->getTerminator(), DT); in linearFunctionTestReplace()
1115 IndVar, ExitingBB, ExitCount, UsePostInc, L, Rewriter, SE); in linearFunctionTestReplace()
1121 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in linearFunctionTestReplace()
1302 static void foldExit(const Loop *L, BasicBlock *ExitingBB, bool IsTaken, in foldExit() argument
1304 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in foldExit()
1305 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB)); in foldExit()
1313 const Loop *L, BasicBlock *ExitingBB, ICmpInst::Predicate InvariantPred, in replaceWithInvariantCond() argument
1316 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in replaceWithInvariantCond()
1320 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB)); in replaceWithInvariantCond()
1330 const Loop *L, BranchInst *BI, BasicBlock *ExitingBB, in optimizeLoopExitWithUnknownExitCount() argument
1357 foldExit(L, ExitingBB, Inverted, DeadInsts); in optimizeLoopExitWithUnknownExitCount()
1389 foldExit(L, ExitingBB, Inverted, DeadInsts); in optimizeLoopExitWithUnknownExitCount()
1391 replaceWithInvariantCond(L, ExitingBB, LIP->Pred, LIP->LHS, LIP->RHS, in optimizeLoopExitWithUnknownExitCount()
1403 llvm::erase_if(ExitingBlocks, [&](BasicBlock *ExitingBB) { in optimizeLoopExits() argument
1407 if (LI->getLoopFor(ExitingBB) != L) in optimizeLoopExits()
1411 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in optimizeLoopExits()
1420 if (!DT->dominates(ExitingBB, L->getLoopLatch())) in optimizeLoopExits()
1458 for (BasicBlock *ExitingBB : ExitingBlocks) { in optimizeLoopExits()
1459 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in optimizeLoopExits()
1463 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in optimizeLoopExits()
1466 L, BI, ExitingBB, MaxExitCount, Inverted, SkipLastIter, SE, in optimizeLoopExits()
1505 foldExit(L, ExitingBB, true, DeadInsts); in optimizeLoopExits()
1527 foldExit(L, ExitingBB, false, DeadInsts); in optimizeLoopExits()
1537 foldExit(L, ExitingBB, false, DeadInsts); in optimizeLoopExits()
1581 auto BadExit = [&](BasicBlock *ExitingBB) { in predicateLoopExits() argument
1585 if (LI->getLoopFor(ExitingBB) != L) in predicateLoopExits()
1589 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in predicateLoopExits()
1605 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in predicateLoopExits()
1656 assert(llvm::all_of(ExitingBlocks, [&](BasicBlock *ExitingBB) { in predicateLoopExits() argument
1657 return DT->dominates(ExitingBB, L->getLoopLatch()); in predicateLoopExits()
1688 for (BasicBlock *ExitingBB : ExitingBlocks) { in predicateLoopExits()
1689 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in predicateLoopExits()
1691 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in predicateLoopExits()
1811 for (BasicBlock *ExitingBB : ExitingBlocks) { in run()
1813 if (!isa<BranchInst>(ExitingBB->getTerminator())) in run()
1819 if (LI->getLoopFor(ExitingBB) != L) in run()
1822 if (!needsLFTR(L, ExitingBB)) in run()
1825 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in run()
1836 PHINode *IndVar = FindLoopCounter(L, ExitingBB, ExitCount, SE, DT); in run()
1857 Changed |= linearFunctionTestReplace(L, ExitingBB, in run()