Lines Matching refs:Loop
120 collectHomogenousInstGraphLoopInvariants(Loop &L, Instruction &Root, in collectHomogenousInstGraphLoopInvariants()
162 static void replaceLoopInvariantUses(Loop &L, Value *Invariant, in replaceLoopInvariantUses()
179 static bool areLoopExitPHIsLoopInvariant(Loop &L, BasicBlock &ExitingBB, in areLoopExitPHIsLoopInvariant()
214 BasicBlock &UnswitchedSucc, BasicBlock &NormalSucc, Loop &L, in buildPartialInvariantUnswitchConditionalBranch()
328 static void hoistLoopToNewParent(Loop &L, BasicBlock &Preheader, in hoistLoopToNewParent()
332 Loop *OldParentL = L.getParentLoop(); in hoistLoopToNewParent()
338 Loop *NewParentL = nullptr; in hoistLoopToNewParent()
340 if (Loop *ExitL = LI.getLoopFor(ExitBB)) in hoistLoopToNewParent()
370 for (Loop *OldContainingL = OldParentL; OldContainingL != NewParentL; in hoistLoopToNewParent()
399 static Loop *getTopMostExitingLoop(BasicBlock *ExitBB, LoopInfo &LI) { in getTopMostExitingLoop()
400 Loop *TopMost = LI.getLoopFor(ExitBB); in getTopMostExitingLoop()
401 Loop *Current = TopMost; in getTopMostExitingLoop()
427 static bool unswitchTrivialBranch(Loop &L, BranchInst &BI, DominatorTree &DT, in unswitchTrivialBranch()
501 if (Loop *ExitL = getTopMostExitingLoop(LoopExitBB, LI)) in unswitchTrivialBranch()
655 static bool unswitchTrivialSwitch(Loop &L, SwitchInst &SI, DominatorTree &DT, in unswitchTrivialSwitch()
708 Loop *OuterL = &L; in unswitchTrivialSwitch()
715 Loop *ExitL = LI.getLoopFor(DefaultExitBB); in unswitchTrivialSwitch()
732 Loop *ExitL = LI.getLoopFor(CaseI->getCaseSuccessor()); in unswitchTrivialSwitch()
950 static bool unswitchAllTrivialConditions(Loop &L, DominatorTree &DT, in unswitchAllTrivialConditions()
1069 Loop &L, BasicBlock *LoopPH, BasicBlock *SplitBB, in buildClonedLoopBlocks()
1252 static Loop *cloneLoopNest(Loop &OrigRootL, Loop *RootParentL, in cloneLoopNest()
1254 auto AddClonedBlocksToLoop = [&](Loop &OrigL, Loop &ClonedL) { in cloneLoopNest()
1267 Loop *ClonedRootL = LI.AllocateLoop(); in cloneLoopNest()
1280 SmallVector<std::pair<Loop *, Loop *>, 16> LoopsToClone; in cloneLoopNest()
1283 for (Loop *ChildL : llvm::reverse(OrigRootL)) in cloneLoopNest()
1286 Loop *ClonedParentL, *L; in cloneLoopNest()
1288 Loop *ClonedL = LI.AllocateLoop(); in cloneLoopNest()
1291 for (Loop *ChildL : llvm::reverse(*L)) in cloneLoopNest()
1311 static void buildClonedLoops(Loop &OrigL, ArrayRef<BasicBlock *> ExitBlocks, in buildClonedLoops()
1313 SmallVectorImpl<Loop *> &NonChildClonedLoops) { in buildClonedLoops()
1314 Loop *ClonedL = nullptr; in buildClonedLoops()
1326 Loop *ParentL = nullptr; in buildClonedLoops()
1328 SmallDenseMap<BasicBlock *, Loop *, 16> ExitLoopMap; in buildClonedLoops()
1332 if (Loop *ExitL = LI.getLoopFor(ExitBB)) { in buildClonedLoops()
1428 for (Loop *PL = ClonedL; PL; PL = PL->getParentLoop()) in buildClonedLoops()
1436 for (Loop *ChildL : OrigL) { in buildClonedLoops()
1486 Loop *ExitL = ExitLoopMap.lookup(ExitBB); in buildClonedLoops()
1528 if (Loop *OuterL = ExitLoopMap.lookup(BB)) in buildClonedLoops()
1543 for (Loop *ChildL : OrigL) { in buildClonedLoops()
1561 deleteDeadClonedBlocks(Loop &L, ArrayRef<BasicBlock *> ExitBlocks, in deleteDeadClonedBlocks()
1591 deleteDeadBlocksFromLoop(Loop &L, in deleteDeadBlocksFromLoop()
1595 function_ref<void(Loop &, StringRef)> DestroyLoopCB) { in deleteDeadBlocksFromLoop() argument
1626 for (Loop *ParentL = &L; ParentL; ParentL = ParentL->getParentLoop()) { in deleteDeadBlocksFromLoop()
1635 llvm::erase_if(L.getSubLoopsVector(), [&](Loop *ChildL) { in deleteDeadBlocksFromLoop()
1682 static SmallPtrSet<const BasicBlock *, 16> recomputeLoopBlockSet(Loop &L, in recomputeLoopBlockSet()
1729 if (Loop *InnerL = LI.getLoopFor(BB)) in recomputeLoopBlockSet()
1793 static bool rebuildLoopAfterUnswitch(Loop &L, ArrayRef<BasicBlock *> ExitBlocks, in rebuildLoopAfterUnswitch()
1795 SmallVectorImpl<Loop *> &HoistedLoops) { in rebuildLoopAfterUnswitch()
1800 Loop *ParentL = nullptr; in rebuildLoopAfterUnswitch()
1801 SmallVector<Loop *, 4> ExitLoops; in rebuildLoopAfterUnswitch()
1805 if (Loop *ExitL = LI.getLoopFor(ExitBB)) { in rebuildLoopAfterUnswitch()
1822 for (Loop *IL = L.getParentLoop(); IL != ParentL; in rebuildLoopAfterUnswitch()
1867 Loop *PrevExitL = L.getParentLoop(); // The deepest possible exit loop. in rebuildLoopAfterUnswitch()
1870 [](Loop &L, SmallPtrSetImpl<BasicBlock *> &UnloopedBlocks) { in rebuildLoopAfterUnswitch()
1885 Loop &ExitL = *LI.getLoopFor(ExitBB); in rebuildLoopAfterUnswitch()
1930 if (Loop *BBL = LI.getLoopFor(BB)) in rebuildLoopAfterUnswitch()
1944 if (Loop *BBL = LI.getLoopFor(BB)) in rebuildLoopAfterUnswitch()
1956 SubLoops.begin(), SubLoops.end(), [&](Loop *SubL) { in rebuildLoopAfterUnswitch()
1982 if (Loop *ParentL = L.getParentLoop()) in rebuildLoopAfterUnswitch()
2023 Loop &L, Instruction &TI, ArrayRef<Value *> Invariants, in unswitchNontrivialInvariants()
2026 function_ref<void(bool, bool, ArrayRef<Loop *>)> UnswitchCB, in unswitchNontrivialInvariants()
2028 function_ref<void(Loop &, StringRef)> DestroyLoopCB) { in unswitchNontrivialInvariants() argument
2095 Loop *ParentL = L.getParentLoop(); in unswitchNontrivialInvariants()
2104 Loop *OuterExitL = &L; in unswitchNontrivialInvariants()
2106 Loop *NewOuterExitL = LI.getLoopFor(ExitBB); in unswitchNontrivialInvariants()
2321 SmallVector<Loop *, 4> NonChildClonedLoops; in unswitchNontrivialInvariants()
2333 SmallVector<Loop *, 4> HoistedLoops; in unswitchNontrivialInvariants()
2402 auto UpdateLoop = [&](Loop &UpdateL) { in unswitchNontrivialInvariants()
2405 for (Loop *ChildL : UpdateL) { in unswitchNontrivialInvariants()
2428 for (Loop *UpdatedL : in unswitchNontrivialInvariants()
2429 llvm::concat<Loop *>(NonChildClonedLoops, HoistedLoops)) { in unswitchNontrivialInvariants()
2443 for (Loop *OuterL = ParentL; OuterL != OuterExitL; in unswitchNontrivialInvariants()
2456 SmallVector<Loop *, 4> SibLoops; in unswitchNontrivialInvariants()
2457 for (Loop *UpdatedL : llvm::concat<Loop *>(NonChildClonedLoops, HoistedLoops)) in unswitchNontrivialInvariants()
2527 turnGuardIntoBranch(IntrinsicInst *GI, Loop &L, in turnGuardIntoBranch()
2604 Instruction &TI, Loop &L, LoopInfo &LI, DominatorTree &DT, in CalculateUnswitchCostMultiplier()
2676 Loop &L, DominatorTree &DT, LoopInfo &LI, AssumptionCache &AC, in unswitchBestCondition()
2678 function_ref<void(bool, bool, ArrayRef<Loop *>)> UnswitchCB, in unswitchBestCondition()
2680 function_ref<void(Loop &, StringRef)> DestroyLoopCB) { in unswitchBestCondition() argument
2994 unswitchLoop(Loop &L, DominatorTree &DT, LoopInfo &LI, AssumptionCache &AC, in unswitchLoop()
2997 function_ref<void(bool, bool, ArrayRef<Loop *>)> UnswitchCB, in unswitchLoop()
2999 function_ref<void(Loop &, StringRef)> DestroyLoopCB) { in unswitchLoop() argument
3055 PreservedAnalyses SimpleLoopUnswitchPass::run(Loop &L, LoopAnalysisManager &AM, in run()
3070 ArrayRef<Loop *> NewLoops) { in run()
3095 auto DestroyLoopCB = [&U](Loop &L, StringRef Name) { in run()
3138 bool runOnLoop(Loop *L, LPPassManager &LPM) override;
3153 bool SimpleLoopUnswitchLegacyPass::runOnLoop(Loop *L, LPPassManager &LPM) { in runOnLoop()
3178 ArrayRef<Loop *> NewLoops) { in runOnLoop()
3196 auto DestroyLoopCB = [&LPM](Loop &L, StringRef /* Name */) { in runOnLoop()