Lines Matching refs:ExitingBB
169 bool linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB,
703 static bool isLoopExitTestBasedOn(Value *V, BasicBlock *ExitingBB) { in isLoopExitTestBasedOn() argument
704 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in isLoopExitTestBasedOn()
716 static bool needsLFTR(Loop *L, BasicBlock *ExitingBB) { in needsLFTR() argument
723 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in needsLFTR()
893 static PHINode *FindLoopCounter(Loop *L, BasicBlock *ExitingBB, in FindLoopCounter() argument
898 Value *Cond = cast<BranchInst>(ExitingBB->getTerminator())->getCondition(); in FindLoopCounter()
932 if (!isLoopExitTestBasedOn(Phi, ExitingBB) && in FindLoopCounter()
933 !isLoopExitTestBasedOn(IncPhi, ExitingBB)) in FindLoopCounter()
946 !mustExecuteUBIfPoisonOnPathTo(Phi, ExitingBB->getTerminator(), DT)) in FindLoopCounter()
977 static Value *genLoopLimit(PHINode *IndVar, BasicBlock *ExitingBB, in genLoopLimit() argument
1007 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in genLoopLimit()
1050 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in genLoopLimit()
1061 linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB, in linearFunctionTestReplace() argument
1076 if (ExitingBB == L->getLoopLatch()) { in linearFunctionTestReplace()
1083 isLoopExitTestBasedOn(IncVar, ExitingBB) || in linearFunctionTestReplace()
1084 mustExecuteUBIfPoisonOnPathTo(IncVar, ExitingBB->getTerminator(), DT); in linearFunctionTestReplace()
1112 IndVar, ExitingBB, ExitCount, UsePostInc, L, Rewriter, SE); in linearFunctionTestReplace()
1118 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in linearFunctionTestReplace()
1299 static void foldExit(const Loop *L, BasicBlock *ExitingBB, bool IsTaken, in foldExit() argument
1301 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in foldExit()
1302 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB)); in foldExit()
1346 const Loop *L, BasicBlock *ExitingBB, ICmpInst::Predicate InvariantPred, in replaceWithInvariantCond() argument
1349 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in replaceWithInvariantCond()
1353 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB)); in replaceWithInvariantCond()
1363 const Loop *L, BranchInst *BI, BasicBlock *ExitingBB, in optimizeLoopExitWithUnknownExitCount() argument
1389 foldExit(L, ExitingBB, Inverted, DeadInsts); in optimizeLoopExitWithUnknownExitCount()
1421 foldExit(L, ExitingBB, Inverted, DeadInsts); in optimizeLoopExitWithUnknownExitCount()
1423 replaceWithInvariantCond(L, ExitingBB, LIP->Pred, LIP->LHS, LIP->RHS, in optimizeLoopExitWithUnknownExitCount()
1442 for (auto *ExitingBB : ExitingBlocks) { in canonicalizeExitCondition() local
1443 auto *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in canonicalizeExitCondition()
1469 const DataLayout &DL = ExitingBB->getModule()->getDataLayout(); in canonicalizeExitCondition()
1488 for (auto *ExitingBB : ExitingBlocks) { in canonicalizeExitCondition() local
1489 auto *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in canonicalizeExitCondition()
1544 const DataLayout &DL = ExitingBB->getModule()->getDataLayout(); in canonicalizeExitCondition()
1569 llvm::erase_if(ExitingBlocks, [&](BasicBlock *ExitingBB) { in optimizeLoopExits() argument
1573 if (LI->getLoopFor(ExitingBB) != L) in optimizeLoopExits()
1577 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in optimizeLoopExits()
1582 if (!DT->dominates(ExitingBB, L->getLoopLatch())) in optimizeLoopExits()
1629 for (BasicBlock *ExitingBB : ExitingBlocks) { in optimizeLoopExits()
1630 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in optimizeLoopExits()
1634 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in optimizeLoopExits()
1637 L, BI, ExitingBB, MaxExitCount, Inverted, SkipLastIter, SE, in optimizeLoopExits()
1676 foldExit(L, ExitingBB, true, DeadInsts); in optimizeLoopExits()
1696 foldExit(L, ExitingBB, false, DeadInsts); in optimizeLoopExits()
1706 foldExit(L, ExitingBB, false, DeadInsts); in optimizeLoopExits()
1747 auto BadExit = [&](BasicBlock *ExitingBB) { in predicateLoopExits() argument
1751 if (LI->getLoopFor(ExitingBB) != L) in predicateLoopExits()
1755 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in predicateLoopExits()
1771 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in predicateLoopExits()
1820 assert(llvm::all_of(ExitingBlocks, [&](BasicBlock *ExitingBB) { in predicateLoopExits() argument
1821 return DT->dominates(ExitingBB, L->getLoopLatch()); in predicateLoopExits()
1852 for (BasicBlock *ExitingBB : ExitingBlocks) { in predicateLoopExits()
1853 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in predicateLoopExits()
1855 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in predicateLoopExits()
1978 for (BasicBlock *ExitingBB : ExitingBlocks) { in run()
1980 if (!isa<BranchInst>(ExitingBB->getTerminator())) in run()
1986 if (LI->getLoopFor(ExitingBB) != L) in run()
1989 if (!needsLFTR(L, ExitingBB)) in run()
1992 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in run()
2003 PHINode *IndVar = FindLoopCounter(L, ExitingBB, ExitCount, SE, DT); in run()
2024 Changed |= linearFunctionTestReplace(L, ExitingBB, in run()