Lines Matching refs:MBB
232 bool needsStackFrame(const MachineBasicBlock &MBB, const BitVector &CSR) {
233 for (auto &I : MBB) {
268 /// Returns true if MBB has a machine instructions that indicates a tail call
270 bool hasTailCall(const MachineBasicBlock &MBB) {
271 MachineBasicBlock::const_iterator I = MBB.getLastNonDebugInstr();
276 /// Returns true if MBB contains an instruction that returns.
277 bool hasReturn(const MachineBasicBlock &MBB) {
278 for (auto I = MBB.getFirstTerminator(), E = MBB.end(); I != E; ++I)
395 MachineBasicBlock &MBB) const {
399 assert(&MF.front() == &MBB && "Shrink-wrapping not yet supported");
425 void HexagonFrameLowering::insertPrologueInBlock(MachineBasicBlock &MBB) const {
426 MachineFunction &MF = *MBB.getParent();
451 MachineBasicBlock::iterator InsertPt = MBB.begin();
477 BuildMI(MBB, InsertPt, dl, HII.get(Hexagon::S2_allocframe))
484 BuildMI(MBB, InsertPt, dl, HII.get(Hexagon::CONST32_Int_Real),
486 BuildMI(MBB, InsertPt, dl, HII.get(Hexagon::A2_sub), SP)
490 BuildMI(MBB, InsertPt, dl, HII.get(Hexagon::S2_allocframe))
496 BuildMI(MBB, InsertPt, dl, HII.get(Hexagon::A2_andir), SP)
502 void HexagonFrameLowering::insertEpilogueInBlock(MachineBasicBlock &MBB) const {
503 MachineFunction &MF = *MBB.getParent();
513 for (auto &I : MBB) {
521 MachineBasicBlock::iterator InsertPt = MBB.getFirstTerminator();
523 if (InsertPt != MBB.end())
525 else if (!MBB.empty())
526 DL = std::prev(MBB.end())->getDebugLoc();
530 BuildMI(MBB, InsertPt, DL, HII.get(Hexagon::L2_deallocframe));
531 BuildMI(MBB, InsertPt, DL, HII.get(Hexagon::A2_add), SP)
543 while (It != MBB.end()) {
545 It = MBB.erase(It);
556 if (!MBB.empty() && InsertPt != MBB.begin()) {
569 BuildMI(MBB, InsertPt, DL, HII.get(Hexagon::L2_deallocframe));
573 MachineInstr *NewI = BuildMI(MBB, RetI, DL, HII.get(NewOpc));
576 MBB.erase(RetI);
611 void HexagonFrameLowering::insertCFIInstructionsAt(MachineBasicBlock &MBB,
613 MachineFunction &MF = *MBB.getParent();
644 BuildMI(MBB, At, DL, CFID)
648 BuildMI(MBB, At, DL, CFID)
652 BuildMI(MBB, At, DL, CFID)
685 BuildMI(MBB, At, DL, CFID)
700 BuildMI(MBB, At, DL, CFID)
704 BuildMI(MBB, At, DL, CFID)
914 bool HexagonFrameLowering::insertCSRSpillsInBlock(MachineBasicBlock &MBB,
919 MachineBasicBlock::iterator MI = MBB.begin();
920 MachineFunction &MF = *MBB.getParent();
927 DebugLoc DL = MI != MBB.end() ? MI->getDebugLoc() : DebugLoc();
929 BuildMI(MBB, MI, DL, HII.get(Hexagon::SAVE_REGISTERS_CALL_V4))
935 MBB.addLiveIn(CSI[I].getReg());
947 HII.storeRegToStackSlot(MBB, MI, Reg, IsKill, FI, RC, &HRI);
949 MBB.addLiveIn(Reg);
955 bool HexagonFrameLowering::insertCSRRestoresInBlock(MachineBasicBlock &MBB,
960 MachineBasicBlock::iterator MI = MBB.getFirstTerminator();
961 MachineFunction &MF = *MBB.getParent();
965 bool HasTC = hasTailCall(MBB) || !hasReturn(MBB);
971 DebugLoc DL = MI != MBB.end() ? MI->getDebugLoc()
972 : MBB.getLastNonDebugInstr()->getDebugLoc();
977 DeallocCall = BuildMI(MBB, MI, DL, HII.get(ROpc))
981 MachineBasicBlock::iterator It = MBB.getFirstTerminator();
982 assert(It->isReturn() && std::next(It) == MBB.end());
984 DeallocCall = BuildMI(MBB, It, DL, HII.get(ROpc))
997 HII.loadRegFromStackSlot(MBB, MI, Reg, FI, RC, &HRI);
1004 MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const {
1010 MBB.erase(I);
1086 MachineBasicBlock *MBB = &*MBBb;
1089 for (MachineBasicBlock::iterator MII = MBB->begin(); MII != MBB->end();
1107 BuildMI(*MBB, MII, MI->getDebugLoc(), HII.get(Hexagon::C2_tfrpr),
1120 MBB->erase(MII);
1139 BuildMI(*MBB, std::next(MII), MI->getDebugLoc(), D, DestReg)