Lines Matching refs:Loop
191 collectHomogenousInstGraphLoopInvariants(const Loop &L, Instruction &Root, in collectHomogenousInstGraphLoopInvariants()
233 static void replaceLoopInvariantUses(const Loop &L, Value *Invariant, in replaceLoopInvariantUses()
250 static bool areLoopExitPHIsLoopInvariant(const Loop &L, in areLoopExitPHIsLoopInvariant()
292 BasicBlock &UnswitchedSucc, BasicBlock &NormalSucc, Loop &L, in buildPartialInvariantUnswitchConditionalBranch()
407 static void hoistLoopToNewParent(Loop &L, BasicBlock &Preheader, in hoistLoopToNewParent()
411 Loop *OldParentL = L.getParentLoop(); in hoistLoopToNewParent()
417 Loop *NewParentL = nullptr; in hoistLoopToNewParent()
419 if (Loop *ExitL = LI.getLoopFor(ExitBB)) in hoistLoopToNewParent()
449 for (Loop *OldContainingL = OldParentL; OldContainingL != NewParentL; in hoistLoopToNewParent()
478 static Loop *getTopMostExitingLoop(const BasicBlock *ExitBB, in getTopMostExitingLoop()
480 Loop *TopMost = LI.getLoopFor(ExitBB); in getTopMostExitingLoop()
481 Loop *Current = TopMost; in getTopMostExitingLoop()
507 static bool unswitchTrivialBranch(Loop &L, BranchInst &BI, DominatorTree &DT, in unswitchTrivialBranch()
582 if (const Loop *ExitL = getTopMostExitingLoop(LoopExitBB, LI)) in unswitchTrivialBranch()
738 static bool unswitchTrivialSwitch(Loop &L, SwitchInst &SI, DominatorTree &DT, in unswitchTrivialSwitch()
791 Loop *OuterL = &L; in unswitchTrivialSwitch()
795 Loop *ExitL = getTopMostExitingLoop(DefaultExitBB, LI); in unswitchTrivialSwitch()
802 Loop *ExitL = getTopMostExitingLoop(CaseI->getCaseSuccessor(), LI); in unswitchTrivialSwitch()
1039 static bool unswitchAllTrivialConditions(Loop &L, DominatorTree &DT, in unswitchAllTrivialConditions()
1159 Loop &L, BasicBlock *LoopPH, BasicBlock *SplitBB, in buildClonedLoopBlocks()
1350 static Loop *cloneLoopNest(Loop &OrigRootL, Loop *RootParentL, in cloneLoopNest()
1352 auto AddClonedBlocksToLoop = [&](Loop &OrigL, Loop &ClonedL) { in cloneLoopNest()
1365 Loop *ClonedRootL = LI.AllocateLoop(); in cloneLoopNest()
1378 SmallVector<std::pair<Loop *, Loop *>, 16> LoopsToClone; in cloneLoopNest()
1381 for (Loop *ChildL : llvm::reverse(OrigRootL)) in cloneLoopNest()
1384 Loop *ClonedParentL, *L; in cloneLoopNest()
1386 Loop *ClonedL = LI.AllocateLoop(); in cloneLoopNest()
1389 for (Loop *ChildL : llvm::reverse(*L)) in cloneLoopNest()
1409 static void buildClonedLoops(Loop &OrigL, ArrayRef<BasicBlock *> ExitBlocks, in buildClonedLoops()
1411 SmallVectorImpl<Loop *> &NonChildClonedLoops) { in buildClonedLoops()
1412 Loop *ClonedL = nullptr; in buildClonedLoops()
1424 Loop *ParentL = nullptr; in buildClonedLoops()
1426 SmallDenseMap<BasicBlock *, Loop *, 16> ExitLoopMap; in buildClonedLoops()
1430 if (Loop *ExitL = LI.getLoopFor(ExitBB)) { in buildClonedLoops()
1526 for (Loop *PL = ClonedL; PL; PL = PL->getParentLoop()) in buildClonedLoops()
1534 for (Loop *ChildL : OrigL) { in buildClonedLoops()
1584 Loop *ExitL = ExitLoopMap.lookup(ExitBB); in buildClonedLoops()
1626 if (Loop *OuterL = ExitLoopMap.lookup(BB)) in buildClonedLoops()
1641 for (Loop *ChildL : OrigL) { in buildClonedLoops()
1659 deleteDeadClonedBlocks(Loop &L, ArrayRef<BasicBlock *> ExitBlocks, in deleteDeadClonedBlocks()
1688 static void deleteDeadBlocksFromLoop(Loop &L, in deleteDeadBlocksFromLoop()
1724 for (Loop *ParentL = &L; ParentL; ParentL = ParentL->getParentLoop()) { in deleteDeadBlocksFromLoop()
1733 llvm::erase_if(L.getSubLoopsVector(), [&](Loop *ChildL) { in deleteDeadBlocksFromLoop()
1782 static SmallPtrSet<const BasicBlock *, 16> recomputeLoopBlockSet(Loop &L, in recomputeLoopBlockSet()
1829 if (Loop *InnerL = LI.getLoopFor(BB)) in recomputeLoopBlockSet()
1893 static bool rebuildLoopAfterUnswitch(Loop &L, ArrayRef<BasicBlock *> ExitBlocks, in rebuildLoopAfterUnswitch()
1895 SmallVectorImpl<Loop *> &HoistedLoops, in rebuildLoopAfterUnswitch()
1901 Loop *ParentL = nullptr; in rebuildLoopAfterUnswitch()
1902 SmallVector<Loop *, 4> ExitLoops; in rebuildLoopAfterUnswitch()
1906 if (Loop *ExitL = LI.getLoopFor(ExitBB)) { in rebuildLoopAfterUnswitch()
1923 for (Loop *IL = L.getParentLoop(); IL != ParentL; in rebuildLoopAfterUnswitch()
1968 Loop *PrevExitL = L.getParentLoop(); // The deepest possible exit loop. in rebuildLoopAfterUnswitch()
1971 [](Loop &L, SmallPtrSetImpl<BasicBlock *> &UnloopedBlocks) { in rebuildLoopAfterUnswitch()
1986 Loop &ExitL = *LI.getLoopFor(ExitBB); in rebuildLoopAfterUnswitch()
2031 if (Loop *BBL = LI.getLoopFor(BB)) in rebuildLoopAfterUnswitch()
2045 if (Loop *BBL = LI.getLoopFor(BB)) in rebuildLoopAfterUnswitch()
2057 SubLoops.begin(), SubLoops.end(), [&](Loop *SubL) { in rebuildLoopAfterUnswitch()
2083 if (Loop *ParentL = L.getParentLoop()) in rebuildLoopAfterUnswitch()
2125 void postUnswitch(Loop &L, LPMUpdater &U, StringRef LoopName, in postUnswitch()
2127 bool InjectedCondition, ArrayRef<Loop *> NewLoops) { in postUnswitch()
2163 Loop &L, Instruction &TI, ArrayRef<Value *> Invariants, in unswitchNontrivialInvariants()
2238 Loop *ParentL = L.getParentLoop(); in unswitchNontrivialInvariants()
2247 Loop *OuterExitL = &L; in unswitchNontrivialInvariants()
2253 Loop *NewOuterExitL = getTopMostExitingLoop(ExitBB, LI); in unswitchNontrivialInvariants()
2480 SmallVector<Loop *, 4> NonChildClonedLoops; in unswitchNontrivialInvariants()
2492 SmallVector<Loop *, 4> HoistedLoops; in unswitchNontrivialInvariants()
2565 auto UpdateLoop = [&](Loop &UpdateL) { in unswitchNontrivialInvariants()
2568 for (Loop *ChildL : UpdateL) { in unswitchNontrivialInvariants()
2591 for (Loop *UpdatedL : in unswitchNontrivialInvariants()
2592 llvm::concat<Loop *>(NonChildClonedLoops, HoistedLoops)) { in unswitchNontrivialInvariants()
2606 for (Loop *OuterL = ParentL; OuterL != OuterExitL; in unswitchNontrivialInvariants()
2619 SmallVector<Loop *, 4> SibLoops; in unswitchNontrivialInvariants()
2620 for (Loop *UpdatedL : llvm::concat<Loop *>(NonChildClonedLoops, HoistedLoops)) in unswitchNontrivialInvariants()
2741 static BranchInst *turnGuardIntoBranch(IntrinsicInst *GI, Loop &L, in turnGuardIntoBranch()
2798 const Instruction &TI, const Loop &L, const LoopInfo &LI, in CalculateUnswitchCostMultiplier()
2879 const Loop &L, const LoopInfo &LI, AAResults &AA, in collectUnswitchCandidates()
2974 BasicBlock *&IfFalse, const Loop &L) { in canonicalizeForInvariantConditionInjection()
3000 const BasicBlock *IfTrue, const BasicBlock *IfFalse, const Loop &L) { in shouldTryInjectInvariantCondition()
3060 injectPendingInvariantConditions(NonTrivialUnswitchCandidate Candidate, Loop &L, in injectPendingInvariantConditions()
3159 SmallVectorImpl<NonTrivialUnswitchCandidate> &UnswitchCandidates, Loop &L, in insertCandidatesWithPendingInjections()
3198 IVConditionInfo &PartialIVInfo, Instruction *&PartialIVCondBranch, Loop &L, in collectUnswitchCandidatesWithInjections()
3251 static bool isSafeForNoNTrivialUnswitching(Loop &L, LoopInfo &LI) { in isSafeForNoNTrivialUnswitching()
3295 ArrayRef<NonTrivialUnswitchCandidate> UnswitchCandidates, const Loop &L, in findBestNonTrivialUnswitchCandidate()
3451 static bool shouldInsertFreeze(Loop &L, Instruction &TI, DominatorTree &DT, in shouldInsertFreeze()
3471 static bool unswitchBestCondition(Loop &L, DominatorTree &DT, LoopInfo &LI, in unswitchBestCondition()
3564 static bool unswitchLoop(Loop &L, DominatorTree &DT, LoopInfo &LI, in unswitchLoop()
3611 auto IsLoopNestCold = [&](const Loop *L) { in unswitchLoop()
3620 SmallVector<const Loop *, 4> Worklist; in unswitchLoop()
3659 PreservedAnalyses SimpleLoopUnswitchPass::run(Loop &L, LoopAnalysisManager &AM, in run()