Lines Matching refs:MF

28 static void emitSCSPrologue(MachineFunction &MF, MachineBasicBlock &MBB,  in emitSCSPrologue()  argument
31 if (!MF.getFunction().hasFnAttribute(Attribute::ShadowCallStack)) in emitSCSPrologue()
34 const auto &STI = MF.getSubtarget<RISCVSubtarget>(); in emitSCSPrologue()
39 std::vector<CalleeSavedInfo> &CSI = MF.getFrameInfo().getCalleeSavedInfo(); in emitSCSPrologue()
46 auto &Ctx = MF.getFunction().getContext(); in emitSCSPrologue()
49 MF.getFunction(), "x18 not reserved by user for Shadow Call Stack."}); in emitSCSPrologue()
53 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitSCSPrologue()
54 if (RVFI->useSaveRestoreLibCalls(MF)) { in emitSCSPrologue()
56 MF.getFunction(), in emitSCSPrologue()
77 static void emitSCSEpilogue(MachineFunction &MF, MachineBasicBlock &MBB, in emitSCSEpilogue() argument
80 if (!MF.getFunction().hasFnAttribute(Attribute::ShadowCallStack)) in emitSCSEpilogue()
83 const auto &STI = MF.getSubtarget<RISCVSubtarget>(); in emitSCSEpilogue()
87 std::vector<CalleeSavedInfo> &CSI = MF.getFrameInfo().getCalleeSavedInfo(); in emitSCSEpilogue()
94 auto &Ctx = MF.getFunction().getContext(); in emitSCSEpilogue()
97 MF.getFunction(), "x18 not reserved by user for Shadow Call Stack."}); in emitSCSEpilogue()
101 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitSCSEpilogue()
102 if (RVFI->useSaveRestoreLibCalls(MF)) { in emitSCSEpilogue()
104 MF.getFunction(), in emitSCSEpilogue()
129 static int getLibCallID(const MachineFunction &MF, in getLibCallID() argument
131 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getLibCallID()
133 if (CSI.empty() || !RVFI->useSaveRestoreLibCalls(MF)) in getLibCallID()
168 getSpillLibCallName(const MachineFunction &MF, in getSpillLibCallName() argument
186 int LibCallID = getLibCallID(MF, CSI); in getSpillLibCallName()
195 getRestoreLibCallName(const MachineFunction &MF, in getRestoreLibCallName() argument
213 int LibCallID = getLibCallID(MF, CSI); in getRestoreLibCallName()
219 bool RISCVFrameLowering::hasFP(const MachineFunction &MF) const { in hasFP()
220 const TargetRegisterInfo *RegInfo = MF.getSubtarget().getRegisterInfo(); in hasFP()
222 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasFP()
223 return MF.getTarget().Options.DisableFramePointerElim(MF) || in hasFP()
224 RegInfo->hasStackRealignment(MF) || MFI.hasVarSizedObjects() || in hasFP()
228 bool RISCVFrameLowering::hasBP(const MachineFunction &MF) const { in hasBP()
229 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasBP()
232 return MFI.hasVarSizedObjects() && TRI->hasStackRealignment(MF); in hasBP()
236 void RISCVFrameLowering::determineFrameLayout(MachineFunction &MF) const { in determineFrameLayout()
237 MachineFrameInfo &MFI = MF.getFrameInfo(); in determineFrameLayout()
292 getNonLibcallCSI(const MachineFunction &MF, in getNonLibcallCSI() argument
294 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getNonLibcallCSI()
306 void RISCVFrameLowering::adjustStackForRVV(MachineFunction &MF, in adjustStackForRVV() argument
323 TII->getVLENFactoredAmount(MF, MBB, MBBI, DL, Amount); in adjustStackForRVV()
330 void RISCVFrameLowering::emitPrologue(MachineFunction &MF, in emitPrologue() argument
332 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitPrologue()
333 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitPrologue()
348 if (MF.getFunction().getCallingConv() == CallingConv::GHC) in emitPrologue()
352 emitSCSPrologue(MF, MBB, MBBI, DL); in emitPrologue()
360 determineFrameLayout(MF); in emitPrologue()
380 if (int LibCallRegs = getLibCallID(MF, MFI.getCalleeSavedInfo()) + 1) { in emitPrologue()
400 MF.getFunction().getContext().diagnose(DiagnosticInfoUnsupported{ in emitPrologue()
401 MF.getFunction(), "Stack pointer required, but has been reserved."}); in emitPrologue()
403 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in emitPrologue()
414 unsigned CFIIndex = MF.addFrameInst( in emitPrologue()
427 std::advance(MBBI, getNonLibcallCSI(MF, CSI).size()); in emitPrologue()
442 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset( in emitPrologue()
449 if (hasFP(MF)) { in emitPrologue()
451 MF.getFunction().getContext().diagnose(DiagnosticInfoUnsupported{ in emitPrologue()
452 MF.getFunction(), "Frame pointer required, but has been reserved."}); in emitPrologue()
459 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa( in emitPrologue()
475 if (!hasFP(MF)) { in emitPrologue()
477 unsigned CFIIndex = MF.addFrameInst( in emitPrologue()
485 adjustStackForRVV(MF, MBB, MBBI, DL, -RVVStackSize); in emitPrologue()
487 if (hasFP(MF)) { in emitPrologue()
490 if (RI->hasStackRealignment(MF)) { in emitPrologue()
501 MF.getRegInfo().createVirtualRegister(&RISCV::GPRRegClass); in emitPrologue()
512 if (hasBP(MF)) { in emitPrologue()
520 void RISCVFrameLowering::emitEpilogue(MachineFunction &MF, in emitEpilogue() argument
523 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitEpilogue()
524 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitEpilogue()
530 if (MF.getFunction().getCallingConv() == CallingConv::GHC) in emitEpilogue()
555 const auto &CSI = getNonLibcallCSI(MF, MFI.getCalleeSavedInfo()); in emitEpilogue()
572 if (RI->hasStackRealignment(MF) || MFI.hasVarSizedObjects()) { in emitEpilogue()
573 assert(hasFP(MF) && "frame pointer should not have been eliminated"); in emitEpilogue()
578 adjustStackForRVV(MF, MBB, LastFrameDestroy, DL, RVVStackSize); in emitEpilogue()
581 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in emitEpilogue()
598 emitSCSEpilogue(MF, MBB, MBBI, DL); in emitEpilogue()
602 RISCVFrameLowering::getFrameIndexReference(const MachineFunction &MF, int FI, in getFrameIndexReference() argument
604 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFrameIndexReference()
605 const TargetRegisterInfo *RI = MF.getSubtarget().getRegisterInfo(); in getFrameIndexReference()
606 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getFrameIndexReference()
611 const auto &CSI = getNonLibcallCSI(MF, MFI.getCalleeSavedInfo()); in getFrameIndexReference()
628 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in getFrameIndexReference()
643 } else if (RI->hasStackRealignment(MF) && !MFI.isFixedObjectIndex(FI)) { in getFrameIndexReference()
647 if (hasBP(MF)) { in getFrameIndexReference()
709 FrameReg = RI->getFrameRegister(MF); in getFrameIndexReference()
710 if (hasFP(MF)) { in getFrameIndexReference()
770 void RISCVFrameLowering::determineCalleeSaves(MachineFunction &MF, in determineCalleeSaves() argument
773 TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS); in determineCalleeSaves()
776 if (hasFP(MF)) { in determineCalleeSaves()
781 if (hasBP(MF)) in determineCalleeSaves()
787 MachineFrameInfo &MFI = MF.getFrameInfo(); in determineCalleeSaves()
789 if (MF.getFunction().hasFnAttribute("interrupt") && MFI.hasCalls()) { in determineCalleeSaves()
801 if (MF.getSubtarget<RISCVSubtarget>().hasStdExtF()) { in determineCalleeSaves()
804 const MCPhysReg * Regs = MF.getRegInfo().getCalleeSavedRegs(); in determineCalleeSaves()
847 MachineFunction &MF, RegScavenger *RS) const { in processFunctionBeforeFrameFinalized() argument
848 const TargetRegisterInfo *RegInfo = MF.getSubtarget().getRegisterInfo(); in processFunctionBeforeFrameFinalized()
849 MachineFrameInfo &MFI = MF.getFrameInfo(); in processFunctionBeforeFrameFinalized()
851 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in processFunctionBeforeFrameFinalized()
862 if (!isInt<11>(MFI.estimateStackSize(MF)) || RVVStackSize != 0) { in processFunctionBeforeFrameFinalized()
875 if (MFI.getCalleeSavedInfo().empty() || RVFI->useSaveRestoreLibCalls(MF)) { in processFunctionBeforeFrameFinalized()
892 if (RVVStackSize && !hasFP(MF) && Size % 8 != 0) { in processFunctionBeforeFrameFinalized()
902 bool RISCVFrameLowering::hasReservedCallFrame(const MachineFunction &MF) const { in hasReservedCallFrame()
903 return !MF.getFrameInfo().hasVarSizedObjects(); in hasReservedCallFrame()
908 MachineFunction &MF, MachineBasicBlock &MBB, in eliminateCallFramePseudoInstr() argument
913 if (!hasReservedCallFrame(MF)) { in eliminateCallFramePseudoInstr()
946 RISCVFrameLowering::getFirstSPAdjustAmount(const MachineFunction &MF) const { in getFirstSPAdjustAmount()
947 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getFirstSPAdjustAmount()
948 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFirstSPAdjustAmount()
978 MachineFunction *MF = MBB.getParent(); in spillCalleeSavedRegisters() local
979 const TargetInstrInfo &TII = *MF->getSubtarget().getInstrInfo(); in spillCalleeSavedRegisters()
984 const char *SpillLibCall = getSpillLibCallName(*MF, CSI); in spillCalleeSavedRegisters()
997 const auto &NonLibcallCSI = getNonLibcallCSI(*MF, CSI); in spillCalleeSavedRegisters()
1014 MachineFunction *MF = MBB.getParent(); in restoreCalleeSavedRegisters() local
1015 const TargetInstrInfo &TII = *MF->getSubtarget().getInstrInfo(); in restoreCalleeSavedRegisters()
1022 const auto &NonLibcallCSI = getNonLibcallCSI(*MF, CSI); in restoreCalleeSavedRegisters()
1030 const char *RestoreLibCall = getRestoreLibCallName(*MF, CSI); in restoreCalleeSavedRegisters()
1041 NewMI->copyImplicitOps(*MF, *MI); in restoreCalleeSavedRegisters()
1051 const MachineFunction *MF = MBB.getParent(); in canUseAsPrologue() local
1052 const auto *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in canUseAsPrologue()
1054 if (!RVFI->useSaveRestoreLibCalls(*MF)) in canUseAsPrologue()
1067 const MachineFunction *MF = MBB.getParent(); in canUseAsEpilogue() local
1069 const auto *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in canUseAsEpilogue()
1071 if (!RVFI->useSaveRestoreLibCalls(*MF)) in canUseAsEpilogue()