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()
79 static void emitSCSEpilogue(MachineFunction &MF, MachineBasicBlock &MBB, in emitSCSEpilogue() argument
82 if (!MF.getFunction().hasFnAttribute(Attribute::ShadowCallStack)) in emitSCSEpilogue()
85 const auto &STI = MF.getSubtarget<RISCVSubtarget>(); in emitSCSEpilogue()
89 std::vector<CalleeSavedInfo> &CSI = MF.getFrameInfo().getCalleeSavedInfo(); in emitSCSEpilogue()
96 auto &Ctx = MF.getFunction().getContext(); in emitSCSEpilogue()
99 MF.getFunction(), "x18 not reserved by user for Shadow Call Stack."}); in emitSCSEpilogue()
103 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitSCSEpilogue()
104 if (RVFI->useSaveRestoreLibCalls(MF)) { in emitSCSEpilogue()
106 MF.getFunction(), in emitSCSEpilogue()
133 static int getLibCallID(const MachineFunction &MF, in getLibCallID() argument
135 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getLibCallID()
137 if (CSI.empty() || !RVFI->useSaveRestoreLibCalls(MF)) in getLibCallID()
172 getSpillLibCallName(const MachineFunction &MF, in getSpillLibCallName() argument
190 int LibCallID = getLibCallID(MF, CSI); in getSpillLibCallName()
199 getRestoreLibCallName(const MachineFunction &MF, in getRestoreLibCallName() argument
217 int LibCallID = getLibCallID(MF, CSI); in getRestoreLibCallName()
223 bool RISCVFrameLowering::hasFP(const MachineFunction &MF) const { in hasFP()
224 const TargetRegisterInfo *RegInfo = MF.getSubtarget().getRegisterInfo(); in hasFP()
226 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasFP()
227 return MF.getTarget().Options.DisableFramePointerElim(MF) || in hasFP()
228 RegInfo->hasStackRealignment(MF) || MFI.hasVarSizedObjects() || in hasFP()
232 bool RISCVFrameLowering::hasBP(const MachineFunction &MF) const { in hasBP()
233 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasBP()
236 return MFI.hasVarSizedObjects() && TRI->hasStackRealignment(MF); in hasBP()
240 void RISCVFrameLowering::determineFrameLayout(MachineFunction &MF) const { in determineFrameLayout()
241 MachineFrameInfo &MFI = MF.getFrameInfo(); in determineFrameLayout()
296 getNonLibcallCSI(const MachineFunction &MF, in getNonLibcallCSI() argument
298 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getNonLibcallCSI()
310 void RISCVFrameLowering::adjustStackForRVV(MachineFunction &MF, in adjustStackForRVV() argument
326 TII->getVLENFactoredAmount(MF, MBB, MBBI, DL, Amount, Flag); in adjustStackForRVV()
334 void RISCVFrameLowering::emitPrologue(MachineFunction &MF, in emitPrologue() argument
336 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitPrologue()
337 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitPrologue()
352 if (MF.getFunction().getCallingConv() == CallingConv::GHC) in emitPrologue()
356 emitSCSPrologue(MF, MBB, MBBI, DL); in emitPrologue()
364 determineFrameLayout(MF); in emitPrologue()
384 if (int LibCallRegs = getLibCallID(MF, MFI.getCalleeSavedInfo()) + 1) { in emitPrologue()
404 MF.getFunction().getContext().diagnose(DiagnosticInfoUnsupported{ in emitPrologue()
405 MF.getFunction(), "Stack pointer required, but has been reserved."}); in emitPrologue()
407 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in emitPrologue()
418 unsigned CFIIndex = MF.addFrameInst( in emitPrologue()
432 std::advance(MBBI, getNonLibcallCSI(MF, CSI).size()); in emitPrologue()
447 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset( in emitPrologue()
455 if (hasFP(MF)) { in emitPrologue()
457 MF.getFunction().getContext().diagnose(DiagnosticInfoUnsupported{ in emitPrologue()
458 MF.getFunction(), "Frame pointer required, but has been reserved."}); in emitPrologue()
465 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa( in emitPrologue()
482 if (!hasFP(MF)) { in emitPrologue()
484 unsigned CFIIndex = MF.addFrameInst( in emitPrologue()
493 adjustStackForRVV(MF, MBB, MBBI, DL, -RVVStackSize, in emitPrologue()
496 if (hasFP(MF)) { in emitPrologue()
499 if (RI->hasStackRealignment(MF)) { in emitPrologue()
511 MF.getRegInfo().createVirtualRegister(&RISCV::GPRRegClass); in emitPrologue()
524 if (hasBP(MF)) { in emitPrologue()
535 void RISCVFrameLowering::emitEpilogue(MachineFunction &MF, in emitEpilogue() argument
538 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitEpilogue()
539 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitEpilogue()
545 if (MF.getFunction().getCallingConv() == CallingConv::GHC) in emitEpilogue()
570 const auto &CSI = getNonLibcallCSI(MF, MFI.getCalleeSavedInfo()); in emitEpilogue()
587 if (RI->hasStackRealignment(MF) || MFI.hasVarSizedObjects()) { in emitEpilogue()
588 assert(hasFP(MF) && "frame pointer should not have been eliminated"); in emitEpilogue()
593 adjustStackForRVV(MF, MBB, LastFrameDestroy, DL, RVVStackSize, in emitEpilogue()
597 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in emitEpilogue()
614 emitSCSEpilogue(MF, MBB, MBBI, DL); in emitEpilogue()
618 RISCVFrameLowering::getFrameIndexReference(const MachineFunction &MF, int FI, in getFrameIndexReference() argument
620 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFrameIndexReference()
621 const TargetRegisterInfo *RI = MF.getSubtarget().getRegisterInfo(); in getFrameIndexReference()
622 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getFrameIndexReference()
627 const auto &CSI = getNonLibcallCSI(MF, MFI.getCalleeSavedInfo()); in getFrameIndexReference()
644 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in getFrameIndexReference()
659 } else if (RI->hasStackRealignment(MF) && !MFI.isFixedObjectIndex(FI)) { in getFrameIndexReference()
663 if (hasBP(MF)) { in getFrameIndexReference()
725 FrameReg = RI->getFrameRegister(MF); in getFrameIndexReference()
726 if (hasFP(MF)) { in getFrameIndexReference()
786 void RISCVFrameLowering::determineCalleeSaves(MachineFunction &MF, in determineCalleeSaves() argument
789 TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS); in determineCalleeSaves()
792 if (hasFP(MF)) { in determineCalleeSaves()
797 if (hasBP(MF)) in determineCalleeSaves()
803 MachineFrameInfo &MFI = MF.getFrameInfo(); in determineCalleeSaves()
805 if (MF.getFunction().hasFnAttribute("interrupt") && MFI.hasCalls()) { in determineCalleeSaves()
817 if (MF.getSubtarget<RISCVSubtarget>().hasStdExtF()) { in determineCalleeSaves()
820 const MCPhysReg * Regs = MF.getRegInfo().getCalleeSavedRegs(); in determineCalleeSaves()
862 static bool hasRVVSpillWithFIs(MachineFunction &MF, const RISCVInstrInfo &TII) { in hasRVVSpillWithFIs() argument
863 if (!MF.getSubtarget<RISCVSubtarget>().hasStdExtV()) in hasRVVSpillWithFIs()
865 return any_of(MF, [&TII](const MachineBasicBlock &MBB) { in hasRVVSpillWithFIs()
873 MachineFunction &MF, RegScavenger *RS) const { in processFunctionBeforeFrameFinalized() argument
875 MF.getSubtarget<RISCVSubtarget>().getRegisterInfo(); in processFunctionBeforeFrameFinalized()
876 MachineFrameInfo &MFI = MF.getFrameInfo(); in processFunctionBeforeFrameFinalized()
878 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in processFunctionBeforeFrameFinalized()
882 const RISCVInstrInfo &TII = *MF.getSubtarget<RISCVSubtarget>().getInstrInfo(); in processFunctionBeforeFrameFinalized()
893 if (!isInt<11>(MFI.estimateStackSize(MF)) || hasRVVSpillWithFIs(MF, TII)) { in processFunctionBeforeFrameFinalized()
906 if (MFI.getCalleeSavedInfo().empty() || RVFI->useSaveRestoreLibCalls(MF)) { in processFunctionBeforeFrameFinalized()
923 if (RVVStackSize && !hasFP(MF) && Size % 8 != 0) { in processFunctionBeforeFrameFinalized()
930 static bool hasRVVFrameObject(const MachineFunction &MF) { in hasRVVFrameObject() argument
931 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasRVVFrameObject()
942 bool RISCVFrameLowering::hasReservedCallFrame(const MachineFunction &MF) const { in hasReservedCallFrame()
943 return !MF.getFrameInfo().hasVarSizedObjects() && in hasReservedCallFrame()
944 !(hasFP(MF) && hasRVVFrameObject(MF)); in hasReservedCallFrame()
949 MachineFunction &MF, MachineBasicBlock &MBB, in eliminateCallFramePseudoInstr() argument
954 if (!hasReservedCallFrame(MF)) { in eliminateCallFramePseudoInstr()
987 RISCVFrameLowering::getFirstSPAdjustAmount(const MachineFunction &MF) const { in getFirstSPAdjustAmount()
988 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getFirstSPAdjustAmount()
989 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFirstSPAdjustAmount()
1019 MachineFunction *MF = MBB.getParent(); in spillCalleeSavedRegisters() local
1020 const TargetInstrInfo &TII = *MF->getSubtarget().getInstrInfo(); in spillCalleeSavedRegisters()
1025 const char *SpillLibCall = getSpillLibCallName(*MF, CSI); in spillCalleeSavedRegisters()
1038 const auto &NonLibcallCSI = getNonLibcallCSI(*MF, CSI); in spillCalleeSavedRegisters()
1055 MachineFunction *MF = MBB.getParent(); in restoreCalleeSavedRegisters() local
1056 const TargetInstrInfo &TII = *MF->getSubtarget().getInstrInfo(); in restoreCalleeSavedRegisters()
1063 const auto &NonLibcallCSI = getNonLibcallCSI(*MF, CSI); in restoreCalleeSavedRegisters()
1071 const char *RestoreLibCall = getRestoreLibCallName(*MF, CSI); in restoreCalleeSavedRegisters()
1082 NewMI->copyImplicitOps(*MF, *MI); in restoreCalleeSavedRegisters()
1092 const MachineFunction *MF = MBB.getParent(); in canUseAsPrologue() local
1093 const auto *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in canUseAsPrologue()
1095 if (!RVFI->useSaveRestoreLibCalls(*MF)) in canUseAsPrologue()
1108 const MachineFunction *MF = MBB.getParent(); in canUseAsEpilogue() local
1110 const auto *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in canUseAsEpilogue()
1112 if (!RVFI->useSaveRestoreLibCalls(*MF)) in canUseAsEpilogue()