Lines Matching refs:CurLoop

140 static bool inSubLoop(BasicBlock *BB, Loop *CurLoop, LoopInfo *LI);
141 static bool isNotUsedOrFreeInLoop(const Instruction &I, const Loop *CurLoop,
145 static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop,
150 BlockFrequencyInfo *BFI, const Loop *CurLoop,
155 const Loop *CurLoop, const LoopSafetyInfo *SafetyInfo,
159 Loop *CurLoop, Instruction &I,
531 Loop *CurLoop, MemorySSAUpdater &MSSAU, in sinkRegion() argument
538 CurLoop != nullptr && SafetyInfo != nullptr && in sinkRegion()
544 SmallVector<DomTreeNode *, 16> Worklist = collectChildrenInLoop(N, CurLoop); in sinkRegion()
551 if (inSubLoop(BB, CurLoop, LI)) in sinkRegion()
577 isNotUsedOrFreeInLoop(I, LoopNestMode ? OutermostLoop : CurLoop, in sinkRegion()
579 canSinkOrHoistInst(I, AA, DT, CurLoop, MSSAU, true, Flags, ORE)) { in sinkRegion()
580 if (sink(I, LI, DT, BFI, CurLoop, SafetyInfo, MSSAU, ORE)) { in sinkRegion()
599 Loop *CurLoop, MemorySSAUpdater &MSSAU, ICFLoopSafetyInfo *SafetyInfo, in sinkRegionForLoopNest() argument
604 Worklist.insert(CurLoop); in sinkRegionForLoopNest()
605 appendLoopsToWorklist(*CurLoop, Worklist); in sinkRegionForLoopNest()
609 TTI, L, MSSAU, SafetyInfo, Flags, ORE, CurLoop); in sinkRegionForLoopNest()
627 Loop *CurLoop; member in __anonf51ac7480511::ControlFlowHoister
639 ControlFlowHoister(LoopInfo *LI, DominatorTree *DT, Loop *CurLoop, in ControlFlowHoister() argument
641 : LI(LI), DT(DT), CurLoop(CurLoop), MSSAU(MSSAU) {} in ControlFlowHoister()
646 !CurLoop->hasLoopInvariantOperands(BI)) in registerPossiblyHoistableBranch()
654 if (!CurLoop->contains(TrueDest) || !CurLoop->contains(FalseDest) || in registerPossiblyHoistableBranch()
701 if (!ControlFlowHoisting || !CurLoop->hasLoopInvariantOperands(PN)) in canHoistPHI()
739 return CurLoop->getLoopPreheader(); in getOrCreateHoistedBlock()
753 BasicBlock *InitialPreheader = CurLoop->getLoopPreheader(); in getOrCreateHoistedBlock()
781 if (CurLoop->getParentLoop()) in getOrCreateHoistedBlock()
782 CurLoop->getParentLoop()->addBasicBlockToLoop(New, *LI); in getOrCreateHoistedBlock()
820 DomTreeNode *HeaderNode = DT->getNode(CurLoop->getHeader()); in getOrCreateHoistedBlock()
835 assert(CurLoop->getLoopPreheader() && in getOrCreateHoistedBlock()
849 TargetLibraryInfo *TLI, Loop *CurLoop, in hoistRegion() argument
857 CurLoop != nullptr && SafetyInfo != nullptr && in hoistRegion()
860 ControlFlowHoister CFH(LI, DT, CurLoop, MSSAU); in hoistRegion()
869 LoopBlocksRPO Worklist(CurLoop); in hoistRegion()
875 if (!LoopNestMode && inSubLoop(BB, CurLoop, LI)) in hoistRegion()
901 if (CurLoop->hasLoopInvariantOperands(&I) && in hoistRegion()
902 canSinkOrHoistInst(I, AA, DT, CurLoop, MSSAU, true, Flags, ORE) && in hoistRegion()
904 I, DT, TLI, CurLoop, SafetyInfo, ORE, in hoistRegion()
905 CurLoop->getLoopPreheader()->getTerminator(), AllowSpeculation)) { in hoistRegion()
906 hoist(I, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo, in hoistRegion()
916 CurLoop->isLoopInvariant(I.getOperand(1))) { in hoistRegion()
932 hoist(*ReciprocalDivisor, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), in hoistRegion()
945 return SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop) && in hoistRegion()
946 SafetyInfo->doesNotWriteMemoryBefore(I, CurLoop); in hoistRegion()
949 CurLoop->hasLoopInvariantOperands(&I) && in hoistRegion()
951 hoist(I, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo, in hoistRegion()
965 hoist(*PN, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo, in hoistRegion()
1030 Loop *CurLoop) { in isLoadInvariantInLoop() argument
1090 DT->properlyDominates(II->getParent(), CurLoop->getHeader())) in isLoadInvariantInLoop()
1138 Loop *CurLoop, MemorySSAUpdater &MSSAU, in canSinkOrHoistInst() argument
1163 if (isLoadInvariantInLoop(LI, DT, CurLoop)) in canSinkOrHoistInst()
1167 MSSA, cast<MemoryUse>(MSSA->getMemoryAccess(LI)), CurLoop, I, Flags); in canSinkOrHoistInst()
1170 if (ORE && Invalidated && CurLoop->isLoopInvariant(LI->getPointerOperand())) in canSinkOrHoistInst()
1217 MSSA, cast<MemoryUse>(MSSA->getMemoryAccess(CI)), CurLoop, I, in canSinkOrHoistInst()
1225 if (isReadOnly(MSSAU, CurLoop)) in canSinkOrHoistInst()
1236 return isOnlyMemoryAccess(FI, CurLoop, MSSAU); in canSinkOrHoistInst()
1246 if (isOnlyMemoryAccess(SI, CurLoop, MSSAU)) in canSinkOrHoistInst()
1258 for (auto *BB : CurLoop->getBlocks()) in canSinkOrHoistInst()
1264 CurLoop->contains(MD->getBlock())) in canSinkOrHoistInst()
1293 !CurLoop->contains(Source->getBlock()); in canSinkOrHoistInst()
1317 static bool isFreeInLoop(const Instruction &I, const Loop *CurLoop, in isFreeInLoop() argument
1330 if (CurLoop->contains(UI) && in isFreeInLoop()
1347 static bool isNotUsedOrFreeInLoop(const Instruction &I, const Loop *CurLoop, in isNotUsedOrFreeInLoop() argument
1352 bool IsFree = isFreeInLoop(I, CurLoop, TTI); in isNotUsedOrFreeInLoop()
1371 if (!CurLoop->contains(UI)) in isNotUsedOrFreeInLoop()
1378 if (CurLoop->contains(UI)) { in isNotUsedOrFreeInLoop()
1485 const LoopSafetyInfo *SafetyInfo, const Loop *CurLoop, in sinkThroughTriviallyReplaceablePHI() argument
1518 LoopInfo *LI, const Loop *CurLoop, in splitPredecessorsOfLoopExit() argument
1523 CurLoop->getUniqueExitBlocks(ExitBlocks); in splitPredecessorsOfLoopExit()
1566 assert(CurLoop->contains(PredBB) && in splitPredecessorsOfLoopExit()
1590 BlockFrequencyInfo *BFI, const Loop *CurLoop, in sink() argument
1604 if (VisitedUsers.count(User) || CurLoop->contains(User)) in sink()
1635 splitPredecessorsOfLoopExit(PN, DT, LI, CurLoop, SafetyInfo, &MSSAU); in sink()
1658 CurLoop->getUniqueExitBlocks(ExitBlocks); in sink()
1675 if (CurLoop->contains(User)) in sink()
1684 PN, &I, LI, SunkCopies, SafetyInfo, CurLoop, MSSAU); in sink()
1695 static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop, in hoist() argument
1718 !SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop)) in hoist()
1742 const Loop *CurLoop, const LoopSafetyInfo *SafetyInfo, in isSafeToExecuteUnconditionally() argument
1749 SafetyInfo->isGuaranteedToExecute(Inst, DT, CurLoop); in isSafeToExecuteUnconditionally()
1753 if (LI && CurLoop->isLoopInvariant(LI->getPointerOperand())) in isSafeToExecuteUnconditionally()
1912 Loop *CurLoop, MemorySSAUpdater &MSSAU, ICFLoopSafetyInfo *SafetyInfo, in promoteLoopAccessesToScalars() argument
1915 assert(LI != nullptr && DT != nullptr && CurLoop != nullptr && in promoteLoopAccessesToScalars()
1920 BasicBlock *Preheader = CurLoop->getLoopPreheader(); in promoteLoopAccessesToScalars()
1984 if (!isNotVisibleOnUnwindInLoop(Object, CurLoop, DT)) in promoteLoopAccessesToScalars()
1999 if (!UI || !CurLoop->contains(UI)) in promoteLoopAccessesToScalars()
2020 *Load, DT, TLI, CurLoop, SafetyInfo, ORE, in promoteLoopAccessesToScalars()
2043 SafetyInfo->isGuaranteedToExecute(*UI, DT, CurLoop); in promoteLoopAccessesToScalars()
2120 isNotCapturedBeforeOrInLoop(Object, CurLoop, DT); in promoteLoopAccessesToScalars()
2258 Loop *CurLoop, Instruction &I, in pointerInvalidatedByLoop() argument
2271 CurLoop->contains(Source->getBlock()); in pointerInvalidatedByLoop()
2293 for (auto *BB : CurLoop->getBlocks()) in pointerInvalidatedByLoop()
2297 if (!CurLoop->contains(&I)) in pointerInvalidatedByLoop()
2315 static bool inSubLoop(BasicBlock *BB, Loop *CurLoop, LoopInfo *LI) { in inSubLoop() argument
2316 assert(CurLoop->contains(BB) && "Only valid if BB is IN the loop"); in inSubLoop()
2317 return LI->getLoopFor(BB) != CurLoop; in inSubLoop()