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