Lines Matching defs:CurLoop
170 static bool inSubLoop(BasicBlock *BB, Loop *CurLoop, LoopInfo *LI);
171 static bool isNotUsedOrFoldableInLoop(const Instruction &I, const Loop *CurLoop,
175 static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop,
180 const Loop *CurLoop, ICFLoopSafetyInfo *SafetyInfo,
184 const Loop *CurLoop, const LoopSafetyInfo *SafetyInfo,
188 Loop *CurLoop, Instruction &I,
555 TargetTransformInfo *TTI, Loop *CurLoop,
562 CurLoop != nullptr && SafetyInfo != nullptr &&
568 SmallVector<DomTreeNode *, 16> Worklist = collectChildrenInLoop(N, CurLoop);
575 if (inSubLoop(BB, CurLoop, LI))
601 isNotUsedOrFoldableInLoop(I, LoopNestMode ? OutermostLoop : CurLoop,
604 canSinkOrHoistInst(I, AA, DT, CurLoop, MSSAU, true, Flags, ORE)) {
605 if (sink(I, LI, DT, CurLoop, SafetyInfo, MSSAU, ORE)) {
623 TargetTransformInfo *TTI, Loop *CurLoop,
631 Worklist.insert(CurLoop);
632 appendLoopsToWorklist(*CurLoop, Worklist);
636 MSSAU, SafetyInfo, Flags, ORE, CurLoop);
654 Loop *CurLoop;
666 ControlFlowHoister(LoopInfo *LI, DominatorTree *DT, Loop *CurLoop,
668 : LI(LI), DT(DT), CurLoop(CurLoop), MSSAU(MSSAU) {}
673 !CurLoop->hasLoopInvariantOperands(BI))
681 if (!CurLoop->contains(TrueDest) || !CurLoop->contains(FalseDest) ||
728 if (!ControlFlowHoisting || !CurLoop->hasLoopInvariantOperands(PN))
766 return CurLoop->getLoopPreheader();
780 BasicBlock *InitialPreheader = CurLoop->getLoopPreheader();
808 if (CurLoop->getParentLoop())
809 CurLoop->getParentLoop()->addBasicBlockToLoop(New, *LI);
847 DomTreeNode *HeaderNode = DT->getNode(CurLoop->getHeader());
862 assert(CurLoop->getLoopPreheader() &&
876 TargetLibraryInfo *TLI, Loop *CurLoop,
884 CurLoop != nullptr && SafetyInfo != nullptr &&
887 ControlFlowHoister CFH(LI, DT, CurLoop, MSSAU);
896 LoopBlocksRPO Worklist(CurLoop);
899 BasicBlock *Preheader = CurLoop->getLoopPreheader();
903 if (!LoopNestMode && inSubLoop(BB, CurLoop, LI))
914 if (CurLoop->hasLoopInvariantOperands(&I) &&
915 canSinkOrHoistInst(I, AA, DT, CurLoop, MSSAU, true, Flags, ORE) &&
917 I, DT, TLI, CurLoop, SafetyInfo, ORE,
919 hoist(I, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo,
929 CurLoop->isLoopInvariant(I.getOperand(1))) {
947 hoist(*ReciprocalDivisor, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB),
960 return SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop) &&
961 SafetyInfo->doesNotWriteMemoryBefore(I, CurLoop);
964 CurLoop->hasLoopInvariantOperands(&I) &&
966 hoist(I, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo,
980 hoist(*PN, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo,
990 if (hoistArithmetics(I, *CurLoop, *SafetyInfo, MSSAU, AC, DT)) {
1049 // CurLoop is dominated by an invariant.start representing the same memory
1053 Loop *CurLoop) {
1099 DT->properlyDominates(II->getParent(), CurLoop->getHeader()))
1161 Loop *CurLoop, MemorySSAUpdater &MSSAU,
1186 if (isLoadInvariantInLoop(LI, DT, CurLoop))
1194 MSSA, MU, CurLoop, I, Flags, InvariantGroup);
1197 if (ORE && Invalidated && CurLoop->isLoopInvariant(LI->getPointerOperand()))
1249 MSSA, cast<MemoryUse>(MSSA->getMemoryAccess(CI)), CurLoop, I,
1257 if (isReadOnly(MSSAU, CurLoop))
1268 return isOnlyMemoryAccess(FI, CurLoop, MSSAU);
1278 if (isOnlyMemoryAccess(SI, CurLoop, MSSAU))
1290 CurLoop->contains(Source->getBlock()))
1298 for (auto *BB : CurLoop->getBlocks())
1305 CurLoop->contains(MD->getBlock()))
1354 static bool isFoldableInLoop(const Instruction &I, const Loop *CurLoop,
1367 if (CurLoop->contains(UI) &&
1384 static bool isNotUsedOrFoldableInLoop(const Instruction &I, const Loop *CurLoop,
1389 bool IsFoldable = isFoldableInLoop(I, CurLoop, TTI);
1408 if (!CurLoop->contains(UI))
1415 if (CurLoop->contains(UI)) {
1528 const LoopSafetyInfo *SafetyInfo, const Loop *CurLoop,
1561 LoopInfo *LI, const Loop *CurLoop,
1566 CurLoop->getUniqueExitBlocks(ExitBlocks);
1609 assert(CurLoop->contains(PredBB) &&
1633 const Loop *CurLoop, ICFLoopSafetyInfo *SafetyInfo,
1646 if (VisitedUsers.count(User) || CurLoop->contains(User))
1677 splitPredecessorsOfLoopExit(PN, DT, LI, CurLoop, SafetyInfo, &MSSAU);
1700 CurLoop->getUniqueExitBlocks(ExitBlocks);
1717 if (CurLoop->contains(User))
1726 PN, &I, LI, SunkCopies, SafetyInfo, CurLoop, MSSAU);
1739 static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop,
1762 !SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop))
1787 const Loop *CurLoop, const LoopSafetyInfo *SafetyInfo,
1795 SafetyInfo->isGuaranteedToExecute(Inst, DT, CurLoop);
1799 if (LI && CurLoop->isLoopInvariant(LI->getPointerOperand()))
1973 const TargetLibraryInfo *TLI, TargetTransformInfo *TTI, Loop *CurLoop,
1978 assert(LI != nullptr && DT != nullptr && CurLoop != nullptr &&
1990 BasicBlock *Preheader = CurLoop->getLoopPreheader();
2063 if (!isNotVisibleOnUnwindInLoop(Object, CurLoop, DT))
2075 if (!UI || !CurLoop->contains(UI))
2096 *Load, DT, TLI, CurLoop, SafetyInfo, ORE,
2119 SafetyInfo->isGuaranteedToExecute(*UI, DT, CurLoop);
2196 isThreadLocalObject(Object, CurLoop, DT, TTI))
2350 Loop *CurLoop, Instruction &I,
2367 CurLoop->contains(Source->getBlock()) &&
2368 !(InvariantGroup && Source->getBlock() == CurLoop->getHeader() && isa<MemoryPhi>(Source));
2390 for (auto *BB : CurLoop->getBlocks())
2394 if (!CurLoop->contains(&I))
2828 static bool inSubLoop(BasicBlock *BB, Loop *CurLoop, LoopInfo *LI) {
2829 assert(CurLoop->contains(BB) && "Only valid if BB is IN the loop");
2830 return LI->getLoopFor(BB) != CurLoop;