Lines Matching refs:MBB
72 bool EliminatePHINodes(MachineFunction &MF, MachineBasicBlock &MBB);
73 void LowerPHINode(MachineBasicBlock &MBB,
85 bool SplitPHIEdges(MachineFunction &MF, MachineBasicBlock &MBB,
90 bool isLiveIn(unsigned Reg, const MachineBasicBlock *MBB);
91 bool isLiveOutPastPHIs(unsigned Reg, const MachineBasicBlock *MBB);
146 for (auto &MBB : MF) in runOnMachineFunction() local
147 Changed |= SplitPHIEdges(MF, MBB, MLI); in runOnMachineFunction()
154 for (auto &MBB : MF) in runOnMachineFunction() local
155 Changed |= EliminatePHINodes(MF, MBB); in runOnMachineFunction()
185 MachineBasicBlock &MBB) { in EliminatePHINodes() argument
186 if (MBB.empty() || !MBB.front().isPHI()) in EliminatePHINodes()
192 std::prev(MBB.SkipPHIsAndLabels(MBB.begin())); in EliminatePHINodes()
194 while (MBB.front().isPHI()) in EliminatePHINodes()
195 LowerPHINode(MBB, LastPHIIt); in EliminatePHINodes()
223 void PHIElimination::LowerPHINode(MachineBasicBlock &MBB, in LowerPHINode() argument
230 MachineInstr *MPhi = MBB.remove(&*MBB.begin()); in LowerPHINode()
238 MachineFunction &MF = *MBB.getParent(); in LowerPHINode()
249 BuildMI(MBB, AfterPHIsIt, MPhi->getDebugLoc(), in LowerPHINode()
265 BuildMI(MBB, AfterPHIsIt, MPhi->getDebugLoc(), in LowerPHINode()
284 if (MachineInstr *OldKill = VI.findKill(&MBB)) { in LowerPHINode()
287 DEBUG(MBB.dump()); in LowerPHINode()
314 SlotIndex MBBStartIndex = LIS->getMBBStartIdx(&MBB); in LowerPHINode()
380 findPHICopyInsertPoint(&opBlock, &MBB, SrcReg); in LowerPHINode()
537 for (const auto &MBB : MF) in analyzePHINodes() local
538 for (const auto &BBI : MBB) { in analyzePHINodes()
548 MachineBasicBlock &MBB, in SplitPHIEdges() argument
550 if (MBB.empty() || !MBB.front().isPHI() || MBB.isEHPad()) in SplitPHIEdges()
553 const MachineLoop *CurLoop = MLI ? MLI->getLoopFor(&MBB) : nullptr; in SplitPHIEdges()
554 bool IsLoopHeader = CurLoop && &MBB == CurLoop->getHeader(); in SplitPHIEdges()
557 for (MachineBasicBlock::iterator BBI = MBB.begin(), BBE = MBB.end(); in SplitPHIEdges()
568 if (PreMBB == &MBB && !SplitAllCriticalEdges) in SplitPHIEdges()
585 << PreMBB->getNumber() << " -> BB#" << MBB.getNumber() in SplitPHIEdges()
597 ShouldSplit = ShouldSplit && !isLiveIn(Reg, &MBB); in SplitPHIEdges()
614 if (!PreMBB->SplitCriticalEdge(&MBB, *this)) { in SplitPHIEdges()
625 bool PHIElimination::isLiveIn(unsigned Reg, const MachineBasicBlock *MBB) { in isLiveIn() argument
629 return LIS->isLiveInToMBB(LIS->getInterval(Reg), MBB); in isLiveIn()
631 return LV->isLiveIn(Reg, *MBB); in isLiveIn()
635 const MachineBasicBlock *MBB) { in isLiveOutPastPHIs() argument
645 for (const MachineBasicBlock *SI : MBB->successors()) in isLiveOutPastPHIs()
650 return LV->isLiveOut(Reg, *MBB); in isLiveOutPastPHIs()