Lines Matching refs:MBB

67 static void emitSPUpdate(MachineBasicBlock &MBB,  in emitSPUpdate()  argument
72 emitThumbRegPlusImmediate(MBB, MBBI, dl, ARM::SP, ARM::SP, NumBytes, TII, in emitSPUpdate()
77 eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, in eliminateCallFramePseudoInstr() argument
99 emitSPUpdate(MBB, I, TII, dl, *RegInfo, -Amount); in eliminateCallFramePseudoInstr()
102 emitSPUpdate(MBB, I, TII, dl, *RegInfo, Amount); in eliminateCallFramePseudoInstr()
106 return MBB.erase(I); in eliminateCallFramePseudoInstr()
110 MachineBasicBlock &MBB) const { in emitPrologue()
111 MachineBasicBlock::iterator MBBI = MBB.begin(); in emitPrologue()
145 emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, -ArgRegsSaveSize, in emitPrologue()
150 BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) in emitPrologue()
157 emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, -(NumBytes - ArgRegsSaveSize), in emitPrologue()
162 BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) in emitPrologue()
196 if (MBBI != MBB.end() && MBBI->getOpcode() == ARM::tPUSH) { in emitPrologue()
226 BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) in emitPrologue()
254 BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) in emitPrologue()
265 BuildMI(MBB, MBBI, dl, TII.get(ARM::tADDrSPi), FramePtr) in emitPrologue()
274 BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) in emitPrologue()
281 BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) in emitPrologue()
298 while (MBBI != MBB.end() && MBBI->getOpcode() == ARM::tMOVr) in emitPrologue()
300 if (MBBI != MBB.end() && MBBI->getOpcode() == ARM::tPUSH) { in emitPrologue()
323 BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) in emitPrologue()
335 emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, -NumBytes, in emitPrologue()
341 BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION)) in emitPrologue()
363 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr), ARM::R4) in emitPrologue()
367 BuildMI(MBB, MBBI, dl, TII.get(ARM::tLSRri), ARM::R4) in emitPrologue()
373 BuildMI(MBB, MBBI, dl, TII.get(ARM::tLSLri), ARM::R4) in emitPrologue()
379 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr), ARM::SP) in emitPrologue()
391 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr), BasePtr) in emitPrologue()
422 MachineBasicBlock &MBB) const { in emitEpilogue()
423 MachineBasicBlock::iterator MBBI = MBB.getFirstTerminator(); in emitEpilogue()
424 DebugLoc dl = MBBI != MBB.end() ? MBBI->getDebugLoc() : DebugLoc(); in emitEpilogue()
441 emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, NumBytes - ArgRegsSaveSize); in emitEpilogue()
444 if (MBBI != MBB.begin()) { in emitEpilogue()
447 while (MBBI != MBB.begin() && isCSRestore(*MBBI, CSRegs)); in emitEpilogue()
466 emitThumbRegPlusImmediate(MBB, MBBI, dl, ARM::R4, FramePtr, -NumBytes, in emitEpilogue()
468 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr), ARM::SP) in emitEpilogue()
472 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr), ARM::SP) in emitEpilogue()
476 if (MBBI != MBB.end() && MBBI->getOpcode() == ARM::tBX_RET && in emitEpilogue()
477 &MBB.front() != &*MBBI && std::prev(MBBI)->getOpcode() == ARM::tPOP) { in emitEpilogue()
480 emitSPUpdate(MBB, PMBBI, TII, dl, *RegInfo, NumBytes); in emitEpilogue()
482 emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, NumBytes); in emitEpilogue()
487 bool Done = emitPopSpecialFixUp(MBB, /* DoIt */ true); in emitEpilogue()
493 bool Thumb1FrameLowering::canUseAsEpilogue(const MachineBasicBlock &MBB) const { in canUseAsEpilogue()
494 if (!needPopSpecialFixUp(*MBB.getParent())) in canUseAsEpilogue()
497 MachineBasicBlock *TmpMBB = const_cast<MachineBasicBlock *>(&MBB); in canUseAsEpilogue()
535 bool Thumb1FrameLowering::emitPopSpecialFixUp(MachineBasicBlock &MBB, in emitPopSpecialFixUp() argument
537 MachineFunction &MF = *MBB.getParent(); in emitPopSpecialFixUp()
551 auto MBBI = MBB.getFirstTerminator(); in emitPopSpecialFixUp()
554 if (MBBI != MBB.end() && MBBI->getOpcode() != ARM::tB) in emitPopSpecialFixUp()
561 assert(MBB.succ_size() == 1); in emitPopSpecialFixUp()
562 if ((*MBB.succ_begin())->begin()->getOpcode() == ARM::tBX_RET) in emitPopSpecialFixUp()
573 BuildMI(MBB, MBBI, MBBI->getDebugLoc(), TII.get(ARM::tPOP_RET)) in emitPopSpecialFixUp()
581 MBB.erase(MBBI); in emitPopSpecialFixUp()
589 UsedRegs.addLiveOuts(MBB); in emitPopSpecialFixUp()
599 if (MBBI != MBB.end()) { in emitPopSpecialFixUp()
601 auto InstUpToMBBI = MBB.end(); in emitPopSpecialFixUp()
635 if (!PopReg && MBBI != MBB.begin()) { in emitPopSpecialFixUp()
656 BuildMI(MBB, MBBI, dl, TII.get(ARM::tLDRspi)) in emitPopSpecialFixUp()
662 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr)) in emitPopSpecialFixUp()
669 emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, ArgRegsSaveSize + 4); in emitPopSpecialFixUp()
676 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr)) in emitPopSpecialFixUp()
682 if (MBBI != MBB.end() && MBBI->getOpcode() == ARM::tPOP_RET) { in emitPopSpecialFixUp()
686 BuildMI(MBB, MBBI, MBBI->getDebugLoc(), TII.get(ARM::tPOP)) in emitPopSpecialFixUp()
698 MBB.erase(MIB.getInstr()); in emitPopSpecialFixUp()
700 MBB.erase(MBBI); in emitPopSpecialFixUp()
701 MBBI = BuildMI(MBB, MBB.end(), dl, TII.get(ARM::tBX_RET)) in emitPopSpecialFixUp()
706 BuildMI(MBB, MBBI, dl, TII.get(ARM::tPOP)) in emitPopSpecialFixUp()
710 emitSPUpdate(MBB, MBBI, TII, dl, *RegInfo, ArgRegsSaveSize); in emitPopSpecialFixUp()
712 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr)) in emitPopSpecialFixUp()
718 BuildMI(MBB, MBBI, dl, TII.get(ARM::tMOVr)) in emitPopSpecialFixUp()
740 spillCalleeSavedRegisters(MachineBasicBlock &MBB, in spillCalleeSavedRegisters() argument
749 MachineFunction &MF = *MBB.getParent(); in spillCalleeSavedRegisters()
784 BuildMI(MBB, MI, DL, TII.get(ARM::tPUSH)).add(predOps(ARMCC::AL)); in spillCalleeSavedRegisters()
789 MBB.addLiveIn(Reg); in spillCalleeSavedRegisters()
832 MBB.addLiveIn(*HiRegToSave); in spillCalleeSavedRegisters()
835 BuildMI(MBB, MI, DL, TII.get(ARM::tMOVr)) in spillCalleeSavedRegisters()
854 MBB.insert(MI, PushMIB); in spillCalleeSavedRegisters()
861 restoreCalleeSavedRegisters(MachineBasicBlock &MBB, in restoreCalleeSavedRegisters() argument
868 MachineFunction &MF = *MBB.getParent(); in restoreCalleeSavedRegisters()
875 DebugLoc DL = MI != MBB.end() ? MI->getDebugLoc() : DebugLoc(); in restoreCalleeSavedRegisters()
902 auto Terminator = MBB.getFirstTerminator(); in restoreCalleeSavedRegisters()
903 if (Terminator != MBB.end() && Terminator->getOpcode() == ARM::tBX_RET) { in restoreCalleeSavedRegisters()
933 BuildMI(MBB, MI, DL, TII.get(ARM::tPOP)).add(predOps(ARMCC::AL)); in restoreCalleeSavedRegisters()
940 BuildMI(MBB, MI, DL, TII.get(ARM::tMOVr)) in restoreCalleeSavedRegisters()
965 if (!MBB.succ_empty() || in restoreCalleeSavedRegisters()
985 if (MI != MBB.end()) in restoreCalleeSavedRegisters()
987 MI = MBB.erase(MI); in restoreCalleeSavedRegisters()
995 MBB.insert(MI, &*MIB); in restoreCalleeSavedRegisters()