Lines Matching refs:CurLoop

122 static bool inSubLoop(BasicBlock *BB, Loop *CurLoop, LoopInfo *LI);
123 static bool isNotUsedOrFreeInLoop(const Instruction &I, const Loop *CurLoop,
126 static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop,
130 const Loop *CurLoop, ICFLoopSafetyInfo *SafetyInfo,
135 const Loop *CurLoop,
140 AliasSetTracker *CurAST, Loop *CurLoop,
143 Loop *CurLoop);
420 TargetTransformInfo *TTI, Loop *CurLoop, in sinkRegion() argument
427 CurLoop != nullptr && SafetyInfo != nullptr && in sinkRegion()
435 SmallVector<DomTreeNode *, 16> Worklist = collectChildrenInLoop(N, CurLoop); in sinkRegion()
442 if (inSubLoop(BB, CurLoop, LI)) in sinkRegion()
465 if (isNotUsedOrFreeInLoop(I, CurLoop, SafetyInfo, TTI, FreeInLoop) && in sinkRegion()
466 canSinkOrHoistInst(I, AA, DT, CurLoop, CurAST, MSSAU, true, ORE) && in sinkRegion()
468 if (sink(I, LI, DT, CurLoop, SafetyInfo, MSSAU, ORE, FreeInLoop)) { in sinkRegion()
496 Loop *CurLoop; member in __anonde5fbdfd0311::ControlFlowHoister
508 ControlFlowHoister(LoopInfo *LI, DominatorTree *DT, Loop *CurLoop, in ControlFlowHoister() argument
510 : LI(LI), DT(DT), CurLoop(CurLoop), MSSAU(MSSAU) {} in ControlFlowHoister()
515 !CurLoop->hasLoopInvariantOperands(BI)) in registerPossiblyHoistableBranch()
523 if (!CurLoop->contains(TrueDest) || !CurLoop->contains(FalseDest) || in registerPossiblyHoistableBranch()
570 if (!ControlFlowHoisting || !CurLoop->hasLoopInvariantOperands(PN)) in canHoistPHI()
608 return CurLoop->getLoopPreheader(); in getOrCreateHoistedBlock()
623 BasicBlock *InitialPreheader = CurLoop->getLoopPreheader(); in getOrCreateHoistedBlock()
650 if (CurLoop->getParentLoop()) in getOrCreateHoistedBlock()
651 CurLoop->getParentLoop()->addBasicBlockToLoop(New, *LI); in getOrCreateHoistedBlock()
690 DomTreeNode *HeaderNode = DT->getNode(CurLoop->getHeader()); in getOrCreateHoistedBlock()
705 assert(CurLoop->getLoopPreheader() && in getOrCreateHoistedBlock()
718 DominatorTree *DT, TargetLibraryInfo *TLI, Loop *CurLoop, in hoistRegion() argument
724 CurLoop != nullptr && SafetyInfo != nullptr && in hoistRegion()
729 ControlFlowHoister CFH(LI, DT, CurLoop, MSSAU); in hoistRegion()
738 LoopBlocksRPO Worklist(CurLoop); in hoistRegion()
744 if (inSubLoop(BB, CurLoop, LI)) in hoistRegion()
772 if (CurLoop->hasLoopInvariantOperands(&I) && in hoistRegion()
773 canSinkOrHoistInst(I, AA, DT, CurLoop, CurAST, MSSAU, true, ORE) && in hoistRegion()
775 I, DT, CurLoop, SafetyInfo, ORE, in hoistRegion()
776 CurLoop->getLoopPreheader()->getTerminator())) { in hoistRegion()
777 hoist(I, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo, in hoistRegion()
787 CurLoop->isLoopInvariant(I.getOperand(1)) && in hoistRegion()
804 hoist(*ReciprocalDivisor, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), in hoistRegion()
815 CurLoop->hasLoopInvariantOperands(&I) && in hoistRegion()
816 SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop) && in hoistRegion()
817 SafetyInfo->doesNotWriteMemoryBefore(I, CurLoop)) { in hoistRegion()
818 hoist(I, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo, in hoistRegion()
832 hoist(*PN, DT, CurLoop, CFH.getOrCreateHoistedBlock(BB), SafetyInfo, in hoistRegion()
897 Loop *CurLoop) { in isLoadInvariantInLoop() argument
938 DT->properlyDominates(II->getParent(), CurLoop->getHeader())) in isLoadInvariantInLoop()
997 Loop *CurLoop, AliasSetTracker *CurAST, in canSinkOrHoistInst() argument
1023 if (isLoadInvariantInLoop(LI, DT, CurLoop)) in canSinkOrHoistInst()
1029 CurLoop, AA); in canSinkOrHoistInst()
1032 MSSA, cast<MemoryUse>(MSSA->getMemoryAccess(LI)), CurLoop); in canSinkOrHoistInst()
1035 if (ORE && Invalidated && CurLoop->isLoopInvariant(LI->getPointerOperand())) in canSinkOrHoistInst()
1074 CurAST, CurLoop, AA); in canSinkOrHoistInst()
1077 MSSA, cast<MemoryUse>(MSSA->getMemoryAccess(CI)), CurLoop); in canSinkOrHoistInst()
1086 if (isReadOnly(CurAST, MSSAU, CurLoop)) in canSinkOrHoistInst()
1111 return isOnlyMemoryAccess(FI, CurLoop, MSSAU); in canSinkOrHoistInst()
1134 if (isOnlyMemoryAccess(SI, CurLoop, MSSAU)) in canSinkOrHoistInst()
1139 !CurLoop->contains(Source->getBlock())) in canSinkOrHoistInst()
1167 static bool isFreeInLoop(const Instruction &I, const Loop *CurLoop, in isFreeInLoop() argument
1179 if (CurLoop->contains(UI) && in isFreeInLoop()
1195 static bool isNotUsedOrFreeInLoop(const Instruction &I, const Loop *CurLoop, in isNotUsedOrFreeInLoop() argument
1199 bool IsFree = isFreeInLoop(I, CurLoop, TTI); in isNotUsedOrFreeInLoop()
1216 if (CurLoop->contains(UI)) { in isNotUsedOrFreeInLoop()
1322 const LoopSafetyInfo *SafetyInfo, const Loop *CurLoop, in sinkThroughTriviallyReplaceablePHI() argument
1356 LoopInfo *LI, const Loop *CurLoop, in splitPredecessorsOfLoopExit() argument
1361 CurLoop->getUniqueExitBlocks(ExitBlocks); in splitPredecessorsOfLoopExit()
1404 assert(CurLoop->contains(PredBB) && in splitPredecessorsOfLoopExit()
1428 const Loop *CurLoop, ICFLoopSafetyInfo *SafetyInfo, in sink() argument
1451 if (VisitedUsers.count(User) || CurLoop->contains(User)) in sink()
1482 splitPredecessorsOfLoopExit(PN, DT, LI, CurLoop, SafetyInfo, MSSAU); in sink()
1495 CurLoop->getUniqueExitBlocks(ExitBlocks); in sink()
1510 if (CurLoop->contains(User)) in sink()
1518 PN, &I, LI, SunkCopies, SafetyInfo, CurLoop, MSSAU); in sink()
1529 static void hoist(Instruction &I, const DominatorTree *DT, const Loop *CurLoop, in hoist() argument
1547 !SafetyInfo->isGuaranteedToExecute(I, DT, CurLoop)) in hoist()
1584 const Loop *CurLoop, in isSafeToExecuteUnconditionally() argument
1592 SafetyInfo->isGuaranteedToExecute(Inst, DT, CurLoop); in isSafeToExecuteUnconditionally()
1596 if (LI && CurLoop->isLoopInvariant(LI->getPointerOperand())) in isSafeToExecuteUnconditionally()
1728 Loop *CurLoop, AliasSetTracker *CurAST, ICFLoopSafetyInfo *SafetyInfo, in promoteLoopAccessesToScalars() argument
1731 assert(LI != nullptr && DT != nullptr && CurLoop != nullptr && in promoteLoopAccessesToScalars()
1736 BasicBlock *Preheader = CurLoop->getLoopPreheader(); in promoteLoopAccessesToScalars()
1818 if (!UI || !CurLoop->contains(UI)) in promoteLoopAccessesToScalars()
1832 *Load, DT, CurLoop, SafetyInfo, ORE, Preheader->getTerminator()); in promoteLoopAccessesToScalars()
1856 if (SafetyInfo->isGuaranteedToExecute(*UI, DT, CurLoop)) { in promoteLoopAccessesToScalars()
2051 AliasSetTracker *CurAST, Loop *CurLoop, in pointerInvalidatedByLoop() argument
2074 if (CurLoop->begin() != CurLoop->end()) in pointerInvalidatedByLoop()
2078 for (BasicBlock *BB : CurLoop->getBlocks()) in pointerInvalidatedByLoop()
2098 Loop *CurLoop) { in pointerInvalidatedByLoopWithMSSA() argument
2106 CurLoop->contains(Source->getBlock()); in pointerInvalidatedByLoopWithMSSA()
2112 static bool inSubLoop(BasicBlock *BB, Loop *CurLoop, LoopInfo *LI) { in inSubLoop() argument
2113 assert(CurLoop->contains(BB) && "Only valid if BB is IN the loop"); in inSubLoop()
2114 return LI->getLoopFor(BB) != CurLoop; in inSubLoop()