Lines Matching refs:ExitingBB

156   bool linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB,
690 static bool isLoopExitTestBasedOn(Value *V, BasicBlock *ExitingBB) { in isLoopExitTestBasedOn() argument
691 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in isLoopExitTestBasedOn()
703 static bool needsLFTR(Loop *L, BasicBlock *ExitingBB) { in needsLFTR() argument
710 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in needsLFTR()
824 static PHINode *FindLoopCounter(Loop *L, BasicBlock *ExitingBB, in FindLoopCounter() argument
829 Value *Cond = cast<BranchInst>(ExitingBB->getTerminator())->getCondition(); in FindLoopCounter()
859 if (!isLoopExitTestBasedOn(Phi, ExitingBB) && in FindLoopCounter()
860 !isLoopExitTestBasedOn(IncPhi, ExitingBB)) in FindLoopCounter()
873 !mustExecuteUBIfPoisonOnPathTo(Phi, ExitingBB->getTerminator(), DT)) in FindLoopCounter()
904 static Value *genLoopLimit(PHINode *IndVar, BasicBlock *ExitingBB, in genLoopLimit() argument
930 ExitingBB->getTerminator()); in genLoopLimit()
939 linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB, in linearFunctionTestReplace() argument
954 if (ExitingBB == L->getLoopLatch()) { in linearFunctionTestReplace()
961 isLoopExitTestBasedOn(IncVar, ExitingBB) || in linearFunctionTestReplace()
962 mustExecuteUBIfPoisonOnPathTo(IncVar, ExitingBB->getTerminator(), DT); in linearFunctionTestReplace()
990 IndVar, ExitingBB, ExitCount, UsePostInc, L, Rewriter, SE); in linearFunctionTestReplace()
996 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in linearFunctionTestReplace()
1179 static Constant *createFoldedExitCond(const Loop *L, BasicBlock *ExitingBB, in createFoldedExitCond() argument
1181 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in createFoldedExitCond()
1182 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB)); in createFoldedExitCond()
1188 static void foldExit(const Loop *L, BasicBlock *ExitingBB, bool IsTaken, in foldExit() argument
1190 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in foldExit()
1191 auto *NewCond = createFoldedExitCond(L, ExitingBB, IsTaken); in foldExit()
1234 createInvariantCond(const Loop *L, BasicBlock *ExitingBB, in createInvariantCond() argument
1243 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB)); in createInvariantCond()
1247 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in createInvariantCond()
1253 createReplacement(ICmpInst *ICmp, const Loop *L, BasicBlock *ExitingBB, in createReplacement() argument
1261 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in createReplacement()
1269 return createFoldedExitCond(L, ExitingBB, /*IsTaken*/ !*EV); in createReplacement()
1305 return createFoldedExitCond(L, ExitingBB, /*IsTaken*/ false); in createReplacement()
1307 return createInvariantCond(L, ExitingBB, *LIP, Rewriter); in createReplacement()
1311 const Loop *L, BranchInst *BI, BasicBlock *ExitingBB, const SCEV *MaxIter, in optimizeLoopExitWithUnknownExitCount() argument
1361 SE->getExitCount(L, ExitingBB, in optimizeLoopExitWithUnknownExitCount()
1394 createReplacement(OldCond, L, ExitingBB, MaxIter, Inverted, in optimizeLoopExitWithUnknownExitCount()
1427 for (auto *ExitingBB : ExitingBlocks) { in canonicalizeExitCondition() local
1428 auto *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in canonicalizeExitCondition()
1454 const DataLayout &DL = ExitingBB->getModule()->getDataLayout(); in canonicalizeExitCondition()
1473 for (auto *ExitingBB : ExitingBlocks) { in canonicalizeExitCondition() local
1474 auto *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in canonicalizeExitCondition()
1529 const DataLayout &DL = ExitingBB->getModule()->getDataLayout(); in canonicalizeExitCondition()
1554 llvm::erase_if(ExitingBlocks, [&](BasicBlock *ExitingBB) { in optimizeLoopExits() argument
1558 if (LI->getLoopFor(ExitingBB) != L) in optimizeLoopExits()
1562 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in optimizeLoopExits()
1567 if (!DT->dominates(ExitingBB, L->getLoopLatch())) in optimizeLoopExits()
1627 for (BasicBlock *ExitingBB : ExitingBlocks) { in optimizeLoopExits()
1628 const SCEV *ExactExitCount = SE->getExitCount(L, ExitingBB); in optimizeLoopExits()
1630 L, ExitingBB, ScalarEvolution::ExitCountKind::SymbolicMaximum); in optimizeLoopExits()
1634 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in optimizeLoopExits()
1636 return optimizeLoopExitWithUnknownExitCount(L, BI, ExitingBB, in optimizeLoopExits()
1673 foldExit(L, ExitingBB, true, DeadInsts); in optimizeLoopExits()
1693 foldExit(L, ExitingBB, false, DeadInsts); in optimizeLoopExits()
1703 foldExit(L, ExitingBB, false, DeadInsts); in optimizeLoopExits()
1744 auto BadExit = [&](BasicBlock *ExitingBB) { in predicateLoopExits() argument
1748 if (LI->getLoopFor(ExitingBB) != L) in predicateLoopExits()
1752 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in predicateLoopExits()
1768 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in predicateLoopExits()
1817 assert(llvm::all_of(ExitingBlocks, [&](BasicBlock *ExitingBB) { in predicateLoopExits() argument
1818 return DT->dominates(ExitingBB, L->getLoopLatch()); in predicateLoopExits()
1849 for (BasicBlock *ExitingBB : ExitingBlocks) { in predicateLoopExits()
1850 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in predicateLoopExits()
1852 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in predicateLoopExits()
1965 for (BasicBlock *ExitingBB : ExitingBlocks) { in run()
1967 if (!isa<BranchInst>(ExitingBB->getTerminator())) in run()
1973 if (LI->getLoopFor(ExitingBB) != L) in run()
1976 if (!needsLFTR(L, ExitingBB)) in run()
1979 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in run()
1990 PHINode *IndVar = FindLoopCounter(L, ExitingBB, ExitCount, SE, DT); in run()
2003 Changed |= linearFunctionTestReplace(L, ExitingBB, in run()