Lines Matching refs:Loop
193 collectHomogenousInstGraphLoopInvariants(const Loop &L, Instruction &Root, in collectHomogenousInstGraphLoopInvariants()
235 static void replaceLoopInvariantUses(const Loop &L, Value *Invariant, in replaceLoopInvariantUses()
252 static bool areLoopExitPHIsLoopInvariant(const Loop &L, in areLoopExitPHIsLoopInvariant()
294 BasicBlock &UnswitchedSucc, BasicBlock &NormalSucc, Loop &L, in buildPartialInvariantUnswitchConditionalBranch()
409 static void hoistLoopToNewParent(Loop &L, BasicBlock &Preheader, in hoistLoopToNewParent()
413 Loop *OldParentL = L.getParentLoop(); in hoistLoopToNewParent()
419 Loop *NewParentL = nullptr; in hoistLoopToNewParent()
421 if (Loop *ExitL = LI.getLoopFor(ExitBB)) in hoistLoopToNewParent()
451 for (Loop *OldContainingL = OldParentL; OldContainingL != NewParentL; in hoistLoopToNewParent()
480 static Loop *getTopMostExitingLoop(const BasicBlock *ExitBB, in getTopMostExitingLoop()
482 Loop *TopMost = LI.getLoopFor(ExitBB); in getTopMostExitingLoop()
483 Loop *Current = TopMost; in getTopMostExitingLoop()
509 static bool unswitchTrivialBranch(Loop &L, BranchInst &BI, DominatorTree &DT, in unswitchTrivialBranch()
584 if (const Loop *ExitL = getTopMostExitingLoop(LoopExitBB, LI)) in unswitchTrivialBranch()
743 static bool unswitchTrivialSwitch(Loop &L, SwitchInst &SI, DominatorTree &DT, in unswitchTrivialSwitch()
796 Loop *OuterL = &L; in unswitchTrivialSwitch()
800 Loop *ExitL = getTopMostExitingLoop(DefaultExitBB, LI); in unswitchTrivialSwitch()
807 Loop *ExitL = getTopMostExitingLoop(CaseI->getCaseSuccessor(), LI); in unswitchTrivialSwitch()
1048 static bool unswitchAllTrivialConditions(Loop &L, DominatorTree &DT, in unswitchAllTrivialConditions()
1168 Loop &L, BasicBlock *LoopPH, BasicBlock *SplitBB, in buildClonedLoopBlocks()
1364 static Loop *cloneLoopNest(Loop &OrigRootL, Loop *RootParentL, in cloneLoopNest()
1366 auto AddClonedBlocksToLoop = [&](Loop &OrigL, Loop &ClonedL) { in cloneLoopNest()
1379 Loop *ClonedRootL = LI.AllocateLoop(); in cloneLoopNest()
1392 SmallVector<std::pair<Loop *, Loop *>, 16> LoopsToClone; in cloneLoopNest()
1395 for (Loop *ChildL : llvm::reverse(OrigRootL)) in cloneLoopNest()
1398 Loop *ClonedParentL, *L; in cloneLoopNest()
1400 Loop *ClonedL = LI.AllocateLoop(); in cloneLoopNest()
1403 for (Loop *ChildL : llvm::reverse(*L)) in cloneLoopNest()
1423 static void buildClonedLoops(Loop &OrigL, ArrayRef<BasicBlock *> ExitBlocks, in buildClonedLoops()
1425 SmallVectorImpl<Loop *> &NonChildClonedLoops) { in buildClonedLoops()
1426 Loop *ClonedL = nullptr; in buildClonedLoops()
1438 Loop *ParentL = nullptr; in buildClonedLoops()
1440 SmallDenseMap<BasicBlock *, Loop *, 16> ExitLoopMap; in buildClonedLoops()
1444 if (Loop *ExitL = LI.getLoopFor(ExitBB)) { in buildClonedLoops()
1540 for (Loop *PL = ClonedL; PL; PL = PL->getParentLoop()) in buildClonedLoops()
1548 for (Loop *ChildL : OrigL) { in buildClonedLoops()
1598 Loop *ExitL = ExitLoopMap.lookup(ExitBB); in buildClonedLoops()
1640 if (Loop *OuterL = ExitLoopMap.lookup(BB)) in buildClonedLoops()
1655 for (Loop *ChildL : OrigL) { in buildClonedLoops()
1673 deleteDeadClonedBlocks(Loop &L, ArrayRef<BasicBlock *> ExitBlocks, in deleteDeadClonedBlocks()
1702 static void deleteDeadBlocksFromLoop(Loop &L, in deleteDeadBlocksFromLoop()
1738 for (Loop *ParentL = &L; ParentL; ParentL = ParentL->getParentLoop()) { in deleteDeadBlocksFromLoop()
1747 llvm::erase_if(L.getSubLoopsVector(), [&](Loop *ChildL) { in deleteDeadBlocksFromLoop()
1796 static SmallPtrSet<const BasicBlock *, 16> recomputeLoopBlockSet(Loop &L, in recomputeLoopBlockSet()
1843 if (Loop *InnerL = LI.getLoopFor(BB)) in recomputeLoopBlockSet()
1907 static bool rebuildLoopAfterUnswitch(Loop &L, ArrayRef<BasicBlock *> ExitBlocks, in rebuildLoopAfterUnswitch()
1909 SmallVectorImpl<Loop *> &HoistedLoops, in rebuildLoopAfterUnswitch()
1915 Loop *ParentL = nullptr; in rebuildLoopAfterUnswitch()
1916 SmallVector<Loop *, 4> ExitLoops; in rebuildLoopAfterUnswitch()
1920 if (Loop *ExitL = LI.getLoopFor(ExitBB)) { in rebuildLoopAfterUnswitch()
1937 for (Loop *IL = L.getParentLoop(); IL != ParentL; in rebuildLoopAfterUnswitch()
1982 Loop *PrevExitL = L.getParentLoop(); // The deepest possible exit loop. in rebuildLoopAfterUnswitch()
1985 [](Loop &L, SmallPtrSetImpl<BasicBlock *> &UnloopedBlocks) { in rebuildLoopAfterUnswitch()
2000 Loop &ExitL = *LI.getLoopFor(ExitBB); in rebuildLoopAfterUnswitch()
2045 if (Loop *BBL = LI.getLoopFor(BB)) in rebuildLoopAfterUnswitch()
2059 if (Loop *BBL = LI.getLoopFor(BB)) in rebuildLoopAfterUnswitch()
2071 SubLoops.begin(), SubLoops.end(), [&](Loop *SubL) { in rebuildLoopAfterUnswitch()
2097 if (Loop *ParentL = L.getParentLoop()) in rebuildLoopAfterUnswitch()
2139 void postUnswitch(Loop &L, LPMUpdater &U, StringRef LoopName, in postUnswitch()
2141 bool InjectedCondition, ArrayRef<Loop *> NewLoops) { in postUnswitch()
2177 Loop &L, Instruction &TI, ArrayRef<Value *> Invariants, in unswitchNontrivialInvariants()
2252 Loop *ParentL = L.getParentLoop(); in unswitchNontrivialInvariants()
2261 Loop *OuterExitL = &L; in unswitchNontrivialInvariants()
2267 Loop *NewOuterExitL = getTopMostExitingLoop(ExitBB, LI); in unswitchNontrivialInvariants()
2500 SmallVector<Loop *, 4> NonChildClonedLoops; in unswitchNontrivialInvariants()
2512 SmallVector<Loop *, 4> HoistedLoops; in unswitchNontrivialInvariants()
2585 auto UpdateLoop = [&](Loop &UpdateL) { in unswitchNontrivialInvariants()
2588 for (Loop *ChildL : UpdateL) { in unswitchNontrivialInvariants()
2611 for (Loop *UpdatedL : in unswitchNontrivialInvariants()
2612 llvm::concat<Loop *>(NonChildClonedLoops, HoistedLoops)) { in unswitchNontrivialInvariants()
2626 for (Loop *OuterL = ParentL; OuterL != OuterExitL; in unswitchNontrivialInvariants()
2639 SmallVector<Loop *, 4> SibLoops; in unswitchNontrivialInvariants()
2640 for (Loop *UpdatedL : llvm::concat<Loop *>(NonChildClonedLoops, HoistedLoops)) in unswitchNontrivialInvariants()
2763 static BranchInst *turnGuardIntoBranch(IntrinsicInst *GI, Loop &L, in turnGuardIntoBranch()
2820 const Instruction &TI, const Loop &L, const LoopInfo &LI, in CalculateUnswitchCostMultiplier()
2901 const Loop &L, const LoopInfo &LI, AAResults &AA, in collectUnswitchCandidates()
2996 BasicBlock *&IfFalse, const Loop &L) { in canonicalizeForInvariantConditionInjection()
3022 const BasicBlock *IfTrue, const BasicBlock *IfFalse, const Loop &L) { in shouldTryInjectInvariantCondition()
3082 injectPendingInvariantConditions(NonTrivialUnswitchCandidate Candidate, Loop &L, in injectPendingInvariantConditions()
3181 SmallVectorImpl<NonTrivialUnswitchCandidate> &UnswitchCandidates, Loop &L, in insertCandidatesWithPendingInjections()
3220 IVConditionInfo &PartialIVInfo, Instruction *&PartialIVCondBranch, Loop &L, in collectUnswitchCandidatesWithInjections()
3273 static bool isSafeForNoNTrivialUnswitching(Loop &L, LoopInfo &LI) { in isSafeForNoNTrivialUnswitching()
3317 ArrayRef<NonTrivialUnswitchCandidate> UnswitchCandidates, const Loop &L, in findBestNonTrivialUnswitchCandidate()
3473 static bool shouldInsertFreeze(Loop &L, Instruction &TI, DominatorTree &DT, in shouldInsertFreeze()
3493 static bool unswitchBestCondition(Loop &L, DominatorTree &DT, LoopInfo &LI, in unswitchBestCondition()
3586 static bool unswitchLoop(Loop &L, DominatorTree &DT, LoopInfo &LI, in unswitchLoop()
3633 auto IsLoopNestCold = [&](const Loop *L) { in unswitchLoop()
3642 SmallVector<const Loop *, 4> Worklist; in unswitchLoop()
3681 PreservedAnalyses SimpleLoopUnswitchPass::run(Loop &L, LoopAnalysisManager &AM, in run()