Lines Matching defs:CurLoop
172 static bool inSubLoop(BasicBlock *BB, Loop *CurLoop, LoopInfo *LI);
173 static bool isNotUsedOrFoldableInLoop(const Instruction &I, const Loop *CurLoop,
177 static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop,
182 const Loop *CurLoop, ICFLoopSafetyInfo *SafetyInfo,
186 const Loop *CurLoop, const LoopSafetyInfo *SafetyInfo,
190 Loop *CurLoop, Instruction &I,
557 TargetTransformInfo *TTI, Loop *CurLoop,
564 CurLoop != nullptr && SafetyInfo != nullptr &&
571 collectChildrenInLoop(DT, N, CurLoop);
576 if (inSubLoop(BB, CurLoop, LI))
602 isNotUsedOrFoldableInLoop(I, LoopNestMode ? OutermostLoop : CurLoop,
605 canSinkOrHoistInst(I, AA, DT, CurLoop, MSSAU, true, Flags, ORE)) {
606 if (sink(I, LI, DT, CurLoop, SafetyInfo, MSSAU, ORE)) {
624 TargetTransformInfo *TTI, Loop *CurLoop,
632 Worklist.insert(CurLoop);
633 appendLoopsToWorklist(*CurLoop, Worklist);
637 MSSAU, SafetyInfo, Flags, ORE, CurLoop);
655 Loop *CurLoop;
667 ControlFlowHoister(LoopInfo *LI, DominatorTree *DT, Loop *CurLoop,
669 : LI(LI), DT(DT), CurLoop(CurLoop), MSSAU(MSSAU) {}
674 !CurLoop->hasLoopInvariantOperands(BI))
682 if (!CurLoop->contains(TrueDest) || !CurLoop->contains(FalseDest) ||
729 if (!ControlFlowHoisting || !CurLoop->hasLoopInvariantOperands(PN))
767 return CurLoop->getLoopPreheader();
781 BasicBlock *InitialPreheader = CurLoop->getLoopPreheader();
809 if (CurLoop->getParentLoop())
810 CurLoop->getParentLoop()->addBasicBlockToLoop(New, *LI);
848 DomTreeNode *HeaderNode = DT->getNode(CurLoop->getHeader());
863 assert(CurLoop->getLoopPreheader() &&
877 TargetLibraryInfo *TLI, Loop *CurLoop,
885 CurLoop != nullptr && SafetyInfo != nullptr &&
888 ControlFlowHoister CFH(LI, DT, CurLoop, MSSAU);
897 LoopBlocksRPO Worklist(CurLoop);
900 BasicBlock *Preheader = CurLoop->getLoopPreheader();
904 if (!LoopNestMode && inSubLoop(BB, CurLoop, LI))
915 if (CurLoop->hasLoopInvariantOperands(&I) &&
916 canSinkOrHoistInst(I, AA, DT, CurLoop, MSSAU, true, Flags, ORE) &&
918 I, DT, TLI, CurLoop, SafetyInfo, ORE,
920 hoist(I, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo,
930 CurLoop->isLoopInvariant(I.getOperand(1))) {
948 hoist(*ReciprocalDivisor, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB),
961 return SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop) &&
962 SafetyInfo->doesNotWriteMemoryBefore(I, CurLoop);
965 CurLoop->hasLoopInvariantOperands(&I) &&
967 hoist(I, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo,
981 hoist(*PN, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo,
991 if (hoistArithmetics(I, *CurLoop, *SafetyInfo, MSSAU, AC, DT)) {
1050 // CurLoop is dominated by an invariant.start representing the same memory
1054 Loop *CurLoop) {
1100 DT->properlyDominates(II->getParent(), CurLoop->getHeader()))
1162 Loop *CurLoop, MemorySSAUpdater &MSSAU,
1187 if (isLoadInvariantInLoop(LI, DT, CurLoop))
1195 MSSA, MU, CurLoop, I, Flags, InvariantGroup);
1198 if (ORE && Invalidated && CurLoop->isLoopInvariant(LI->getPointerOperand()))
1250 MSSA, cast<MemoryUse>(MSSA->getMemoryAccess(CI)), CurLoop, I,
1258 if (isReadOnly(MSSAU, CurLoop))
1269 return isOnlyMemoryAccess(FI, CurLoop, MSSAU);
1279 if (isOnlyMemoryAccess(SI, CurLoop, MSSAU))
1291 CurLoop->contains(Source->getBlock()))
1299 for (auto *BB : CurLoop->getBlocks())
1306 CurLoop->contains(MD->getBlock()))
1355 static bool isFoldableInLoop(const Instruction &I, const Loop *CurLoop,
1368 if (CurLoop->contains(UI) &&
1385 static bool isNotUsedOrFoldableInLoop(const Instruction &I, const Loop *CurLoop,
1390 bool IsFoldable = isFoldableInLoop(I, CurLoop, TTI);
1409 if (!CurLoop->contains(UI))
1416 if (CurLoop->contains(UI)) {
1529 const LoopSafetyInfo *SafetyInfo, const Loop *CurLoop,
1563 LoopInfo *LI, const Loop *CurLoop,
1568 CurLoop->getUniqueExitBlocks(ExitBlocks);
1612 assert(CurLoop->contains(PredBB) &&
1636 const Loop *CurLoop, ICFLoopSafetyInfo *SafetyInfo,
1649 if (VisitedUsers.count(User) || CurLoop->contains(User))
1680 splitPredecessorsOfLoopExit(PN, DT, LI, CurLoop, SafetyInfo, &MSSAU);
1703 CurLoop->getUniqueExitBlocks(ExitBlocks);
1720 if (CurLoop->contains(User))
1729 PN, &I, LI, SunkCopies, SafetyInfo, CurLoop, MSSAU);
1742 static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop,
1765 !SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop))
1790 const Loop *CurLoop, const LoopSafetyInfo *SafetyInfo,
1798 SafetyInfo->isGuaranteedToExecute(Inst, DT, CurLoop);
1802 if (LI && CurLoop->isLoopInvariant(LI->getPointerOperand()))
1976 const TargetLibraryInfo *TLI, TargetTransformInfo *TTI, Loop *CurLoop,
1981 assert(LI != nullptr && DT != nullptr && CurLoop != nullptr &&
1993 BasicBlock *Preheader = CurLoop->getLoopPreheader();
2068 if (!isNotVisibleOnUnwindInLoop(Object, CurLoop, DT))
2080 if (!UI || !CurLoop->contains(UI))
2097 SafetyInfo->isGuaranteedToExecute(*UI, DT, CurLoop);
2105 *Load, DT, TLI, CurLoop, SafetyInfo, ORE,
2128 SafetyInfo->isGuaranteedToExecute(*UI, DT, CurLoop);
2205 isThreadLocalObject(Object, CurLoop, DT, TTI))
2360 Loop *CurLoop, Instruction &I,
2377 CurLoop->contains(Source->getBlock()) &&
2378 !(InvariantGroup && Source->getBlock() == CurLoop->getHeader() && isa<MemoryPhi>(Source));
2400 for (auto *BB : CurLoop->getBlocks())
2404 if (!CurLoop->contains(&I))
2938 static bool inSubLoop(BasicBlock *BB, Loop *CurLoop, LoopInfo *LI) {
2939 assert(CurLoop->contains(BB) && "Only valid if BB is IN the loop");
2940 return LI->getLoopFor(BB) != CurLoop;