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