Lines Matching refs:ExitingBB
159 bool linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB,
702 static bool isLoopExitTestBasedOn(Value *V, BasicBlock *ExitingBB) { in isLoopExitTestBasedOn() argument
703 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in isLoopExitTestBasedOn()
715 static bool needsLFTR(Loop *L, BasicBlock *ExitingBB) { in needsLFTR() argument
722 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in needsLFTR()
836 static PHINode *FindLoopCounter(Loop *L, BasicBlock *ExitingBB, in FindLoopCounter() argument
841 Value *Cond = cast<BranchInst>(ExitingBB->getTerminator())->getCondition(); in FindLoopCounter()
871 if (!isLoopExitTestBasedOn(Phi, ExitingBB) && in FindLoopCounter()
872 !isLoopExitTestBasedOn(IncPhi, ExitingBB)) in FindLoopCounter()
885 !mustExecuteUBIfPoisonOnPathTo(Phi, ExitingBB->getTerminator(), DT)) in FindLoopCounter()
916 static Value *genLoopLimit(PHINode *IndVar, BasicBlock *ExitingBB, in genLoopLimit() argument
942 ExitingBB->getTerminator()); in genLoopLimit()
951 linearFunctionTestReplace(Loop *L, BasicBlock *ExitingBB, in linearFunctionTestReplace() argument
966 if (ExitingBB == L->getLoopLatch()) { in linearFunctionTestReplace()
973 isLoopExitTestBasedOn(IncVar, ExitingBB) || in linearFunctionTestReplace()
974 mustExecuteUBIfPoisonOnPathTo(IncVar, ExitingBB->getTerminator(), DT); in linearFunctionTestReplace()
1002 IndVar, ExitingBB, ExitCount, UsePostInc, L, Rewriter, SE); in linearFunctionTestReplace()
1008 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in linearFunctionTestReplace()
1191 static Constant *createFoldedExitCond(const Loop *L, BasicBlock *ExitingBB, in createFoldedExitCond() argument
1193 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in createFoldedExitCond()
1194 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB)); in createFoldedExitCond()
1200 static void foldExit(const Loop *L, BasicBlock *ExitingBB, bool IsTaken, in foldExit() argument
1202 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in foldExit()
1203 auto *NewCond = createFoldedExitCond(L, ExitingBB, IsTaken); in foldExit()
1246 createInvariantCond(const Loop *L, BasicBlock *ExitingBB, in createInvariantCond() argument
1255 bool ExitIfTrue = !L->contains(*succ_begin(ExitingBB)); in createInvariantCond()
1259 BranchInst *BI = cast<BranchInst>(ExitingBB->getTerminator()); in createInvariantCond()
1265 createReplacement(ICmpInst *ICmp, const Loop *L, BasicBlock *ExitingBB, in createReplacement() argument
1273 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in createReplacement()
1281 return createFoldedExitCond(L, ExitingBB, /*IsTaken*/ !*EV); in createReplacement()
1317 return createFoldedExitCond(L, ExitingBB, /*IsTaken*/ false); in createReplacement()
1319 return createInvariantCond(L, ExitingBB, *LIP, Rewriter); in createReplacement()
1323 const Loop *L, BranchInst *BI, BasicBlock *ExitingBB, const SCEV *MaxIter, in optimizeLoopExitWithUnknownExitCount() argument
1373 SE->getExitCount(L, ExitingBB, in optimizeLoopExitWithUnknownExitCount()
1406 createReplacement(OldCond, L, ExitingBB, MaxIter, Inverted, in optimizeLoopExitWithUnknownExitCount()
1439 for (auto *ExitingBB : ExitingBlocks) { in canonicalizeExitCondition() local
1440 auto *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in canonicalizeExitCondition()
1466 const DataLayout &DL = ExitingBB->getDataLayout(); in canonicalizeExitCondition()
1485 for (auto *ExitingBB : ExitingBlocks) { in canonicalizeExitCondition() local
1486 auto *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in canonicalizeExitCondition()
1541 const DataLayout &DL = ExitingBB->getDataLayout(); in canonicalizeExitCondition()
1566 llvm::erase_if(ExitingBlocks, [&](BasicBlock *ExitingBB) { in optimizeLoopExits() argument
1570 if (LI->getLoopFor(ExitingBB) != L) in optimizeLoopExits()
1574 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in optimizeLoopExits()
1579 if (!DT->dominates(ExitingBB, L->getLoopLatch())) in optimizeLoopExits()
1639 for (BasicBlock *ExitingBB : ExitingBlocks) { in optimizeLoopExits()
1640 const SCEV *ExactExitCount = SE->getExitCount(L, ExitingBB); in optimizeLoopExits()
1642 L, ExitingBB, ScalarEvolution::ExitCountKind::SymbolicMaximum); in optimizeLoopExits()
1646 auto *BI = cast<BranchInst>(ExitingBB->getTerminator()); in optimizeLoopExits()
1648 return optimizeLoopExitWithUnknownExitCount(L, BI, ExitingBB, in optimizeLoopExits()
1685 foldExit(L, ExitingBB, true, DeadInsts); in optimizeLoopExits()
1705 foldExit(L, ExitingBB, false, DeadInsts); in optimizeLoopExits()
1715 foldExit(L, ExitingBB, false, DeadInsts); in optimizeLoopExits()
1756 auto BadExit = [&](BasicBlock *ExitingBB) { in predicateLoopExits() argument
1760 if (LI->getLoopFor(ExitingBB) != L) in predicateLoopExits()
1764 BranchInst *BI = dyn_cast<BranchInst>(ExitingBB->getTerminator()); in predicateLoopExits()
1780 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in predicateLoopExits()
1829 assert(llvm::all_of(ExitingBlocks, [&](BasicBlock *ExitingBB) { in predicateLoopExits() argument
1830 return DT->dominates(ExitingBB, L->getLoopLatch()); in predicateLoopExits()
1861 for (BasicBlock *ExitingBB : ExitingBlocks) { in predicateLoopExits()
1862 const SCEV *ExitCount = SE->getExitCount(L, ExitingBB); in predicateLoopExits()
1864 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()
2016 Changed |= linearFunctionTestReplace(L, ExitingBB, in run()