Lines Matching refs:MBB

106   void lowerInitExec(MachineBasicBlock *MBB, MachineInstr &MI);
113 bool removeMBBifRedundant(MachineBasicBlock &MBB);
121 skipIgnoreExecInstsTrivialSucc(MachineBasicBlock &MBB,
126 skipToUncondBrOrEnd(MachineBasicBlock &MBB, in skipToUncondBrOrEnd() argument
131 MachineBasicBlock::iterator End = MBB.end(); in skipToUncondBrOrEnd()
184 MachineBasicBlock *MBB = Worklist.pop_back_val(); in hasKill() local
186 if (MBB == End || !Visited.insert(MBB).second) in hasKill()
188 if (KillBlocks.contains(MBB)) in hasKill()
191 Worklist.append(MBB->succ_begin(), MBB->succ_end()); in hasKill()
210 MachineBasicBlock &MBB = *MI.getParent(); in emitIf() local
237 BuildMI(MBB, I, DL, TII->get(AMDGPU::COPY), CopyReg) in emitIf()
245 BuildMI(MBB, I, DL, TII->get(AndOpc), Tmp) in emitIf()
256 BuildMI(MBB, I, DL, TII->get(XorOpc), SaveExecReg) in emitIf()
265 BuildMI(MBB, I, DL, TII->get(MovTermOpc), Exec) in emitIf()
272 I = skipToUncondBrOrEnd(MBB, I); in emitIf()
276 MachineInstr *NewBr = BuildMI(MBB, I, DL, TII->get(AMDGPU::S_CBRANCH_EXECZ)) in emitIf()
308 MachineBasicBlock &MBB = *MI.getParent(); in emitElse() local
314 MachineBasicBlock::iterator Start = MBB.begin(); in emitElse()
320 BuildMI(MBB, Start, DL, TII->get(OrSaveExecOpc), SaveReg) in emitElse()
331 MachineInstr *And = BuildMI(MBB, ElsePt, DL, TII->get(AndOpc), DstReg) in emitElse()
336 BuildMI(MBB, ElsePt, DL, TII->get(XorTermrOpc), Exec) in emitElse()
342 ElsePt = skipToUncondBrOrEnd(MBB, ElsePt); in emitElse()
345 BuildMI(MBB, ElsePt, DL, TII->get(AMDGPU::S_CBRANCH_EXECZ)) in emitElse()
371 MachineBasicBlock &MBB = *MI.getParent(); in emitIfBreak() local
393 And = BuildMI(MBB, &MI, DL, TII->get(AndOpc), AndReg) in emitIfBreak()
398 Or = BuildMI(MBB, &MI, DL, TII->get(OrOpc), Dst) in emitIfBreak()
402 Or = BuildMI(MBB, &MI, DL, TII->get(OrOpc), Dst) in emitIfBreak()
425 MachineBasicBlock &MBB = *MI.getParent(); in emitLoop() local
429 BuildMI(MBB, &MI, DL, TII->get(Andn2TermOpc), Exec) in emitLoop()
435 auto BranchPt = skipToUncondBrOrEnd(MBB, MI.getIterator()); in emitLoop()
437 BuildMI(MBB, BranchPt, DL, TII->get(AMDGPU::S_CBRANCH_EXECNZ)) in emitLoop()
451 MachineBasicBlock &MBB, MachineBasicBlock::iterator It) const { in skipIgnoreExecInstsTrivialSucc() argument
454 MachineBasicBlock *B = &MBB; in skipIgnoreExecInstsTrivialSucc()
457 return MBB.end(); in skipIgnoreExecInstsTrivialSucc()
469 return MBB.end(); in skipIgnoreExecInstsTrivialSucc()
480 MachineBasicBlock &MBB = *MI.getParent(); in emitEndCf() local
483 MachineBasicBlock::iterator InsPt = MBB.begin(); in emitEndCf()
499 MachineBasicBlock *SplitBB = &MBB; in emitEndCf()
501 SplitBB = MBB.splitAt(MI, /*UpdateLiveIns*/true, LIS); in emitEndCf()
502 if (MDT && SplitBB != &MBB) { in emitEndCf()
503 MachineDomTreeNode *MBBNode = (*MDT)[&MBB]; in emitEndCf()
506 MachineDomTreeNode *SplitBBNode = MDT->addNewBlock(SplitBB, &MBB); in emitEndCf()
515 BuildMI(MBB, InsPt, DL, TII->get(Opcode), Exec) in emitEndCf()
521 if (SplitBB != &MBB) { in emitEndCf()
528 for (MachineBasicBlock *BlockPiece : {&MBB, SplitBB}) { in emitEndCf()
541 if (VI.AliveBlocks.test(MBB.getNumber())) in emitEndCf()
546 VI.AliveBlocks.set(MBB.getNumber()); in emitEndCf()
627 MachineBasicBlock &MBB = *MI->getParent(); in optimizeEndCf() local
629 skipIgnoreExecInstsTrivialSucc(MBB, std::next(MI->getIterator())); in optimizeEndCf()
630 if (Next == MBB.end() || !LoweredEndCf.count(&*Next)) in optimizeEndCf()
649 removeMBBifRedundant(MBB); in optimizeEndCf()
655 MachineBasicBlock &MBB = *MI.getParent(); in process() local
657 MachineInstr *Prev = (I != MBB.begin()) ? &*(std::prev(I)) : nullptr; in process()
659 MachineBasicBlock *SplitBB = &MBB; in process()
692 for (I = Prev ? Prev->getIterator() : MBB.begin(); I != MBB.end(); I = Next) { in process()
704 I = MBB.end(); in process()
712 void SILowerControlFlow::lowerInitExec(MachineBasicBlock *MBB, in lowerInitExec() argument
714 MachineFunction &MF = *MBB->getParent(); in lowerInitExec()
720 MachineInstr *InitMI = BuildMI(*MBB, MBB->begin(), MI.getDebugLoc(), in lowerInitExec()
739 MachineInstr *FirstMI = &*MBB->begin(); in lowerInitExec()
743 if (DefInstr->getParent() == MBB) { in lowerInitExec()
748 MBB->insert(FirstMI, DefInstr); in lowerInitExec()
763 auto BfeMI = BuildMI(*MBB, FirstMI, DL, TII->get(AMDGPU::S_BFE_U32), CountReg) in lowerInitExec()
769 BuildMI(*MBB, FirstMI, DL, in lowerInitExec()
773 auto CmpMI = BuildMI(*MBB, FirstMI, DL, TII->get(AMDGPU::S_CMP_EQ_U32)) in lowerInitExec()
779 BuildMI(*MBB, FirstMI, DL, in lowerInitExec()
801 bool SILowerControlFlow::removeMBBifRedundant(MachineBasicBlock &MBB) { in removeMBBifRedundant() argument
802 for (auto &I : MBB.instrs()) { in removeMBBifRedundant()
807 assert(MBB.succ_size() == 1 && "MBB has more than one successor"); in removeMBBifRedundant()
809 MachineBasicBlock *Succ = *MBB.succ_begin(); in removeMBBifRedundant()
812 while (!MBB.predecessors().empty()) { in removeMBBifRedundant()
813 MachineBasicBlock *P = *MBB.pred_begin(); in removeMBBifRedundant()
814 if (P->getFallThrough(false) == &MBB) in removeMBBifRedundant()
816 P->ReplaceUsesOfBlockWith(&MBB, Succ); in removeMBBifRedundant()
818 MBB.removeSuccessor(Succ); in removeMBBifRedundant()
820 for (auto &I : MBB.instrs()) in removeMBBifRedundant()
827 if (MDT->dominates(&MBB, Succ)) in removeMBBifRedundant()
829 MDT->getNode(&MBB)->getIDom()); in removeMBBifRedundant()
830 MDT->eraseNode(&MBB); in removeMBBifRedundant()
832 MBB.clear(); in removeMBBifRedundant()
833 MBB.eraseFromParent(); in removeMBBifRedundant()
887 for (auto &MBB : MF) { in runOnMachineFunction() local
889 for (auto &Term : MBB.terminators()) { in runOnMachineFunction()
891 KillBlocks.insert(&MBB); in runOnMachineFunction()
897 for (auto &MI : MBB) { in runOnMachineFunction()
899 KillBlocks.insert(&MBB); in runOnMachineFunction()
911 MachineBasicBlock *MBB = &*BI; in runOnMachineFunction() local
914 E = MBB->end(); in runOnMachineFunction()
915 for (I = MBB->begin(); I != E; I = Next) { in runOnMachineFunction()
918 MachineBasicBlock *SplitMBB = MBB; in runOnMachineFunction()
934 lowerInitExec(MBB, MI); in runOnMachineFunction()
944 if (SplitMBB != MBB) { in runOnMachineFunction()
945 MBB = Next->getParent(); in runOnMachineFunction()
946 E = MBB->end(); in runOnMachineFunction()