Lines Matching refs:CurLoop
147 bool isExitBlock(MachineLoop *CurLoop, const MachineBasicBlock *MBB) { in isExitBlock() argument
148 if (ExitBlockMap.contains(CurLoop)) in isExitBlock()
149 return is_contained(ExitBlockMap[CurLoop], MBB); in isExitBlock()
152 CurLoop->getExitBlocks(ExitBlocks); in isExitBlock()
153 ExitBlockMap[CurLoop] = ExitBlocks; in isExitBlock()
220 void HoistRegionPostRA(MachineLoop *CurLoop,
223 void HoistPostRA(MachineInstr *MI, unsigned Def, MachineLoop *CurLoop,
229 MachineLoop *CurLoop);
231 void AddToLiveIns(MCRegister Reg, MachineLoop *CurLoop);
233 bool IsLICMCandidate(MachineInstr &I, MachineLoop *CurLoop);
235 bool IsLoopInvariantInst(MachineInstr &I, MachineLoop *CurLoop);
237 bool HasLoopPHIUse(const MachineInstr *MI, MachineLoop *CurLoop);
240 MachineLoop *CurLoop) const;
249 bool IsProfitableToHoist(MachineInstr &MI, MachineLoop *CurLoop);
251 bool IsGuaranteedToExecute(MachineBasicBlock *BB, MachineLoop *CurLoop);
264 void HoistOutOfLoop(MachineDomTreeNode *HeaderN, MachineLoop *CurLoop,
276 MachineInstr *ExtractHoistableLoad(MachineInstr *MI, MachineLoop *CurLoop);
288 MachineLoop *CurLoop);
296 MachineBasicBlock *getCurPreheader(MachineLoop *CurLoop,
386 MachineLoop *CurLoop = Worklist.pop_back_val(); in INITIALIZE_PASS_DEPENDENCY() local
390 HoistRegionPostRA(CurLoop, CurPreheader); in INITIALIZE_PASS_DEPENDENCY()
394 MachineDomTreeNode *N = DT->getNode(CurLoop->getHeader()); in INITIALIZE_PASS_DEPENDENCY()
396 HoistOutOfLoop(N, CurLoop, CurPreheader); in INITIALIZE_PASS_DEPENDENCY()
485 MachineLoop *CurLoop) { in ProcessMI() argument
568 if ((!HasNonInvariantUse && IsLICMCandidate(*MI, CurLoop)) || in ProcessMI()
576 void MachineLICMBase::HoistRegionPostRA(MachineLoop *CurLoop, in HoistRegionPostRA() argument
578 MachineBasicBlock *Preheader = getCurPreheader(CurLoop, CurPreheader); in HoistRegionPostRA()
591 for (MachineBasicBlock *BB : CurLoop->getBlocks()) { in HoistRegionPostRA()
611 ProcessMI(&MI, RUDefs, RUClobbers, StoredFIs, Candidates, CurLoop); in HoistRegionPostRA()
672 HoistPostRA(MI, Candidate.Def, CurLoop, CurPreheader); in HoistRegionPostRA()
678 void MachineLICMBase::AddToLiveIns(MCRegister Reg, MachineLoop *CurLoop) { in AddToLiveIns() argument
679 for (MachineBasicBlock *BB : CurLoop->getBlocks()) { in AddToLiveIns()
696 MachineLoop *CurLoop, in HoistPostRA() argument
698 MachineBasicBlock *Preheader = getCurPreheader(CurLoop, CurPreheader); in HoistPostRA()
719 AddToLiveIns(Def, CurLoop); in HoistPostRA()
728 MachineLoop *CurLoop) { in IsGuaranteedToExecute() argument
732 if (BB != CurLoop->getHeader()) { in IsGuaranteedToExecute()
735 CurLoop->getExitingBlocks(CurrentLoopExitingBlocks); in IsGuaranteedToExecute()
800 MachineLoop *CurLoop, in HoistOutOfLoop() argument
802 MachineBasicBlock *Preheader = getCurPreheader(CurLoop, CurPreheader); in HoistOutOfLoop()
825 if (!CurLoop->contains(BB)) in HoistOutOfLoop()
867 HoistRes = Hoist(&MI, Preheader, CurLoop); in HoistOutOfLoop()
872 for (MachineLoop *L = MLI->getLoopFor(MI.getParent()); L != CurLoop; in HoistOutOfLoop()
1075 bool MachineLICMBase::IsLICMCandidate(MachineInstr &I, MachineLoop *CurLoop) { in IsLICMCandidate() argument
1077 bool DontMoveAcrossStore = !HoistConstLoads || !AllowedToHoistLoads[CurLoop]; in IsLICMCandidate()
1091 !IsGuaranteedToExecute(I.getParent(), CurLoop)) { in IsLICMCandidate()
1103 if (!TII->shouldHoist(I, CurLoop)) in IsLICMCandidate()
1111 MachineLoop *CurLoop) { in IsLoopInvariantInst() argument
1112 if (!IsLICMCandidate(I, CurLoop)) { in IsLoopInvariantInst()
1116 return CurLoop->isLoopInvariant(I); in IsLoopInvariantInst()
1122 MachineLoop *CurLoop) { in HasLoopPHIUse() argument
1135 if (CurLoop->contains(&UseMI)) in HasLoopPHIUse()
1140 if (isExitBlock(CurLoop, UseMI.getParent())) in HasLoopPHIUse()
1145 if (UseMI.isCopy() && CurLoop->contains(&UseMI)) in HasLoopPHIUse()
1157 MachineLoop *CurLoop) const { in HasHighOperandLatency()
1164 if (!CurLoop->contains(UseMI.getParent())) in HasHighOperandLatency()
1253 MachineLoop *CurLoop) { in IsProfitableToHoist() argument
1273 bool CreatesCopy = HasLoopPHIUse(&MI, CurLoop); in IsProfitableToHoist()
1295 if (MO.isDef() && HasHighOperandLatency(MI, i, Reg, CurLoop)) { in IsProfitableToHoist()
1329 (!IsGuaranteedToExecute(MI.getParent(), CurLoop) && !MayCSE(&MI))) { in IsProfitableToHoist()
1345 IsLoopInvariantInst(MI, CurLoop) && in IsProfitableToHoist()
1347 [&CurLoop, this, DefReg, Cost](MachineInstr &UseMI) { in IsProfitableToHoist()
1348 if (!CurLoop->contains(&UseMI)) in IsProfitableToHoist()
1356 !CurLoop->isLoopInvariant(UseMI, DefReg)) in IsProfitableToHoist()
1379 MachineLoop *CurLoop) { in ExtractHoistableLoad() argument
1420 if (!IsLoopInvariantInst(*NewMIs[0], CurLoop) || in ExtractHoistableLoad()
1421 !IsProfitableToHoist(*NewMIs[0], CurLoop)) { in ExtractHoistableLoad()
1595 MachineLoop *CurLoop) { in Hoist() argument
1607 if (!IsLoopInvariantInst(*MI, CurLoop) || in Hoist()
1608 !IsProfitableToHoist(*MI, CurLoop)) { in Hoist()
1610 MI = ExtractHoistableLoad(MI, CurLoop); in Hoist()
1689 MachineLICMBase::getCurPreheader(MachineLoop *CurLoop, in getCurPreheader() argument
1699 CurPreheader = CurLoop->getLoopPreheader(); in getCurPreheader()
1701 MachineBasicBlock *Pred = CurLoop->getLoopPredecessor(); in getCurPreheader()
1707 CurPreheader = Pred->SplitCriticalEdge(CurLoop->getHeader(), *this); in getCurPreheader()