Lines Matching refs:MBB
105 void lowerInitExec(MachineBasicBlock *MBB, MachineInstr &MI);
112 bool removeMBBifRedundant(MachineBasicBlock &MBB);
120 skipIgnoreExecInstsTrivialSucc(MachineBasicBlock &MBB,
125 skipToUncondBrOrEnd(MachineBasicBlock &MBB, in skipToUncondBrOrEnd() argument
130 MachineBasicBlock::iterator End = MBB.end(); in skipToUncondBrOrEnd()
183 MachineBasicBlock *MBB = Worklist.pop_back_val(); in hasKill() local
185 if (MBB == End || !Visited.insert(MBB).second) in hasKill()
187 if (KillBlocks.contains(MBB)) in hasKill()
190 Worklist.append(MBB->succ_begin(), MBB->succ_end()); in hasKill()
209 MachineBasicBlock &MBB = *MI.getParent(); in emitIf() local
236 BuildMI(MBB, I, DL, TII->get(AMDGPU::COPY), CopyReg) in emitIf()
244 BuildMI(MBB, I, DL, TII->get(AndOpc), Tmp) in emitIf()
255 BuildMI(MBB, I, DL, TII->get(XorOpc), SaveExecReg) in emitIf()
264 BuildMI(MBB, I, DL, TII->get(MovTermOpc), Exec) in emitIf()
271 I = skipToUncondBrOrEnd(MBB, I); in emitIf()
275 MachineInstr *NewBr = BuildMI(MBB, I, DL, TII->get(AMDGPU::S_CBRANCH_EXECZ)) in emitIf()
308 MachineBasicBlock &MBB = *MI.getParent(); in emitElse() local
313 MachineBasicBlock::iterator Start = MBB.begin(); in emitElse()
319 BuildMI(MBB, Start, DL, TII->get(OrSaveExecOpc), SaveReg) in emitElse()
330 MachineInstr *And = BuildMI(MBB, ElsePt, DL, TII->get(AndOpc), DstReg) in emitElse()
338 BuildMI(MBB, ElsePt, DL, TII->get(XorTermrOpc), Exec) in emitElse()
344 ElsePt = skipToUncondBrOrEnd(MBB, ElsePt); in emitElse()
347 BuildMI(MBB, ElsePt, DL, TII->get(AMDGPU::S_CBRANCH_EXECZ)) in emitElse()
372 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()
404 Or = BuildMI(MBB, &MI, DL, TII->get(OrOpc), Dst) in emitIfBreak()
423 MachineBasicBlock &MBB = *MI.getParent(); in emitLoop() local
427 BuildMI(MBB, &MI, DL, TII->get(Andn2TermOpc), Exec) in emitLoop()
431 auto BranchPt = skipToUncondBrOrEnd(MBB, MI.getIterator()); in emitLoop()
433 BuildMI(MBB, BranchPt, DL, TII->get(AMDGPU::S_CBRANCH_EXECNZ)) in emitLoop()
446 MachineBasicBlock &MBB, MachineBasicBlock::iterator It) const { in skipIgnoreExecInstsTrivialSucc() argument
449 MachineBasicBlock *B = &MBB; in skipIgnoreExecInstsTrivialSucc()
452 return MBB.end(); in skipIgnoreExecInstsTrivialSucc()
464 return MBB.end(); in skipIgnoreExecInstsTrivialSucc()
475 MachineBasicBlock &MBB = *MI.getParent(); in emitEndCf() local
478 MachineBasicBlock::iterator InsPt = MBB.begin(); in emitEndCf()
494 MachineBasicBlock *SplitBB = &MBB; in emitEndCf()
496 SplitBB = MBB.splitAt(MI, /*UpdateLiveIns*/true, LIS); in emitEndCf()
497 if (MDT && SplitBB != &MBB) { in emitEndCf()
498 MachineDomTreeNode *MBBNode = (*MDT)[&MBB]; in emitEndCf()
501 MachineDomTreeNode *SplitBBNode = MDT->addNewBlock(SplitBB, &MBB); in emitEndCf()
510 BuildMI(MBB, InsPt, DL, TII->get(Opcode), Exec) in emitEndCf()
516 if (SplitBB != &MBB) { in emitEndCf()
531 if (VI.AliveBlocks.test(MBB.getNumber())) in emitEndCf()
536 VI.AliveBlocks.set(MBB.getNumber()); in emitEndCf()
617 MachineBasicBlock &MBB = *MI->getParent(); in optimizeEndCf() local
619 skipIgnoreExecInstsTrivialSucc(MBB, std::next(MI->getIterator())); in optimizeEndCf()
620 if (Next == MBB.end() || !LoweredEndCf.count(&*Next)) in optimizeEndCf()
639 removeMBBifRedundant(MBB); in optimizeEndCf()
645 MachineBasicBlock &MBB = *MI.getParent(); in process() local
647 MachineInstr *Prev = (I != MBB.begin()) ? &*(std::prev(I)) : nullptr; in process()
649 MachineBasicBlock *SplitBB = &MBB; in process()
682 for (I = Prev ? Prev->getIterator() : MBB.begin(); I != MBB.end(); I = Next) { in process()
694 I = MBB.end(); in process()
702 void SILowerControlFlow::lowerInitExec(MachineBasicBlock *MBB, in lowerInitExec() argument
704 MachineFunction &MF = *MBB->getParent(); in lowerInitExec()
710 BuildMI(*MBB, MBB->begin(), MI.getDebugLoc(), in lowerInitExec()
727 MachineInstr *FirstMI = &*MBB->begin(); in lowerInitExec()
731 if (DefInstr->getParent() == MBB) { in lowerInitExec()
736 MBB->insert(FirstMI, DefInstr); in lowerInitExec()
751 auto BfeMI = BuildMI(*MBB, FirstMI, DL, TII->get(AMDGPU::S_BFE_U32), CountReg) in lowerInitExec()
757 BuildMI(*MBB, FirstMI, DL, in lowerInitExec()
761 auto CmpMI = BuildMI(*MBB, FirstMI, DL, TII->get(AMDGPU::S_CMP_EQ_U32)) in lowerInitExec()
767 BuildMI(*MBB, FirstMI, DL, in lowerInitExec()
790 bool SILowerControlFlow::removeMBBifRedundant(MachineBasicBlock &MBB) { in removeMBBifRedundant() argument
791 for (auto &I : MBB.instrs()) { in removeMBBifRedundant()
796 assert(MBB.succ_size() == 1 && "MBB has more than one successor"); in removeMBBifRedundant()
798 MachineBasicBlock *Succ = *MBB.succ_begin(); in removeMBBifRedundant()
801 while (!MBB.predecessors().empty()) { in removeMBBifRedundant()
802 MachineBasicBlock *P = *MBB.pred_begin(); in removeMBBifRedundant()
803 if (P->getFallThrough() == &MBB) in removeMBBifRedundant()
805 P->ReplaceUsesOfBlockWith(&MBB, Succ); in removeMBBifRedundant()
807 MBB.removeSuccessor(Succ); in removeMBBifRedundant()
809 for (auto &I : MBB.instrs()) in removeMBBifRedundant()
816 if (MDT->dominates(&MBB, Succ)) in removeMBBifRedundant()
818 MDT->getNode(&MBB)->getIDom()); in removeMBBifRedundant()
819 MDT->eraseNode(&MBB); in removeMBBifRedundant()
821 MBB.clear(); in removeMBBifRedundant()
822 MBB.eraseFromParent(); in removeMBBifRedundant()
877 for (auto &MBB : MF) { in runOnMachineFunction() local
879 for (auto &Term : MBB.terminators()) { in runOnMachineFunction()
881 KillBlocks.insert(&MBB); in runOnMachineFunction()
887 for (auto &MI : MBB) { in runOnMachineFunction()
889 KillBlocks.insert(&MBB); in runOnMachineFunction()
901 MachineBasicBlock *MBB = &*BI; in runOnMachineFunction() local
904 E = MBB->end(); in runOnMachineFunction()
905 for (I = MBB->begin(); I != E; I = Next) { in runOnMachineFunction()
908 MachineBasicBlock *SplitMBB = MBB; in runOnMachineFunction()
924 lowerInitExec(MBB, MI); in runOnMachineFunction()
934 if (SplitMBB != MBB) { in runOnMachineFunction()
935 MBB = Next->getParent(); in runOnMachineFunction()
936 E = MBB->end(); in runOnMachineFunction()