Lines Matching refs:MF

30 static void emitSCSPrologue(MachineFunction &MF, MachineBasicBlock &MBB,  in emitSCSPrologue()  argument
33 if (!MF.getFunction().hasFnAttribute(Attribute::ShadowCallStack)) in emitSCSPrologue()
36 const auto &STI = MF.getSubtarget<RISCVSubtarget>(); in emitSCSPrologue()
41 std::vector<CalleeSavedInfo> &CSI = MF.getFrameInfo().getCalleeSavedInfo(); in emitSCSPrologue()
48 auto &Ctx = MF.getFunction().getContext(); in emitSCSPrologue()
51 MF.getFunction(), "x18 not reserved by user for Shadow Call Stack."}); in emitSCSPrologue()
55 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitSCSPrologue()
56 if (RVFI->useSaveRestoreLibCalls(MF)) { in emitSCSPrologue()
58 MF.getFunction(), in emitSCSPrologue()
81 static void emitSCSEpilogue(MachineFunction &MF, MachineBasicBlock &MBB, in emitSCSEpilogue() argument
84 if (!MF.getFunction().hasFnAttribute(Attribute::ShadowCallStack)) in emitSCSEpilogue()
87 const auto &STI = MF.getSubtarget<RISCVSubtarget>(); in emitSCSEpilogue()
91 std::vector<CalleeSavedInfo> &CSI = MF.getFrameInfo().getCalleeSavedInfo(); in emitSCSEpilogue()
98 auto &Ctx = MF.getFunction().getContext(); in emitSCSEpilogue()
101 MF.getFunction(), "x18 not reserved by user for Shadow Call Stack."}); in emitSCSEpilogue()
105 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitSCSEpilogue()
106 if (RVFI->useSaveRestoreLibCalls(MF)) { in emitSCSEpilogue()
108 MF.getFunction(), in emitSCSEpilogue()
135 static int getLibCallID(const MachineFunction &MF, in getLibCallID() argument
137 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getLibCallID()
139 if (CSI.empty() || !RVFI->useSaveRestoreLibCalls(MF)) in getLibCallID()
174 getSpillLibCallName(const MachineFunction &MF, in getSpillLibCallName() argument
192 int LibCallID = getLibCallID(MF, CSI); in getSpillLibCallName()
201 getRestoreLibCallName(const MachineFunction &MF, in getRestoreLibCallName() argument
219 int LibCallID = getLibCallID(MF, CSI); in getRestoreLibCallName()
229 bool RISCVFrameLowering::hasFP(const MachineFunction &MF) const { in hasFP()
230 const TargetRegisterInfo *RegInfo = MF.getSubtarget().getRegisterInfo(); in hasFP()
232 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasFP()
233 return MF.getTarget().Options.DisableFramePointerElim(MF) || in hasFP()
234 RegInfo->hasStackRealignment(MF) || MFI.hasVarSizedObjects() || in hasFP()
238 bool RISCVFrameLowering::hasBP(const MachineFunction &MF) const { in hasBP()
239 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasBP()
247 (!hasReservedCallFrame(MF) && (!MFI.isMaxCallFrameSizeComputed() || in hasBP()
249 TRI->hasStackRealignment(MF); in hasBP()
253 void RISCVFrameLowering::determineFrameLayout(MachineFunction &MF) const { in determineFrameLayout()
254 MachineFrameInfo &MFI = MF.getFrameInfo(); in determineFrameLayout()
255 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in determineFrameLayout()
274 if (RVFI->getRVVStackSize() && (!hasFP(MF) || TRI->hasStackRealignment(MF))) { in determineFrameLayout()
286 const MachineFunction &MF) const { in getStackSizeWithRVVPadding()
287 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getStackSizeWithRVVPadding()
288 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getStackSizeWithRVVPadding()
354 getNonLibcallCSI(const MachineFunction &MF, in getNonLibcallCSI() argument
356 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getNonLibcallCSI()
368 void RISCVFrameLowering::adjustStackForRVV(MachineFunction &MF, in adjustStackForRVV() argument
384 TII->getVLENFactoredAmount(MF, MBB, MBBI, DL, Amount, Flag); in adjustStackForRVV()
392 void RISCVFrameLowering::emitPrologue(MachineFunction &MF, in emitPrologue() argument
394 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitPrologue()
395 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitPrologue()
410 if (MF.getFunction().getCallingConv() == CallingConv::GHC) in emitPrologue()
414 emitSCSPrologue(MF, MBB, MBBI, DL); in emitPrologue()
422 determineFrameLayout(MF); in emitPrologue()
442 if (int LibCallRegs = getLibCallID(MF, MFI.getCalleeSavedInfo()) + 1) { in emitPrologue()
451 uint64_t StackSize = getStackSizeWithRVVPadding(MF); in emitPrologue()
462 MF.getFunction().getContext().diagnose(DiagnosticInfoUnsupported{ in emitPrologue()
463 MF.getFunction(), "Stack pointer required, but has been reserved."}); in emitPrologue()
465 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in emitPrologue()
476 unsigned CFIIndex = MF.addFrameInst( in emitPrologue()
490 std::advance(MBBI, getNonLibcallCSI(MF, CSI).size()); in emitPrologue()
505 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset( in emitPrologue()
513 if (hasFP(MF)) { in emitPrologue()
515 MF.getFunction().getContext().diagnose(DiagnosticInfoUnsupported{ in emitPrologue()
516 MF.getFunction(), "Frame pointer required, but has been reserved."}); in emitPrologue()
523 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa( in emitPrologue()
533 getStackSizeWithRVVPadding(MF) - FirstSPAdjustAmount; in emitPrologue()
541 if (!hasFP(MF)) { in emitPrologue()
543 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfaOffset( in emitPrologue()
544 nullptr, getStackSizeWithRVVPadding(MF))); in emitPrologue()
552 adjustStackForRVV(MF, MBB, MBBI, DL, -RVVStackSize, in emitPrologue()
555 if (hasFP(MF)) { in emitPrologue()
558 if (RI->hasStackRealignment(MF)) { in emitPrologue()
570 MF.getRegInfo().createVirtualRegister(&RISCV::GPRRegClass); in emitPrologue()
583 if (hasBP(MF)) { in emitPrologue()
594 void RISCVFrameLowering::emitEpilogue(MachineFunction &MF, in emitEpilogue() argument
597 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitEpilogue()
598 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitEpilogue()
604 if (MF.getFunction().getCallingConv() == CallingConv::GHC) in emitEpilogue()
625 const auto &CSI = getNonLibcallCSI(MF, MFI.getCalleeSavedInfo()); in emitEpilogue()
634 uint64_t StackSize = getStackSizeWithRVVPadding(MF); in emitEpilogue()
649 if (RI->hasStackRealignment(MF) || MFI.hasVarSizedObjects() || in emitEpilogue()
650 !hasReservedCallFrame(MF)) { in emitEpilogue()
651 assert(hasFP(MF) && "frame pointer should not have been eliminated"); in emitEpilogue()
656 adjustStackForRVV(MF, MBB, LastFrameDestroy, DL, RVVStackSize, in emitEpilogue()
660 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in emitEpilogue()
663 getStackSizeWithRVVPadding(MF) - FirstSPAdjustAmount; in emitEpilogue()
678 emitSCSEpilogue(MF, MBB, MBBI, DL); in emitEpilogue()
682 RISCVFrameLowering::getFrameIndexReference(const MachineFunction &MF, int FI, in getFrameIndexReference() argument
684 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFrameIndexReference()
685 const TargetRegisterInfo *RI = MF.getSubtarget().getRegisterInfo(); in getFrameIndexReference()
686 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getFrameIndexReference()
691 const auto &CSI = getNonLibcallCSI(MF, MFI.getCalleeSavedInfo()); in getFrameIndexReference()
708 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in getFrameIndexReference()
721 Offset += StackOffset::getFixed(getStackSizeWithRVVPadding(MF)); in getFrameIndexReference()
725 if (RI->hasStackRealignment(MF) && !MFI.isFixedObjectIndex(FI)) { in getFrameIndexReference()
758 if (hasBP(MF)) { in getFrameIndexReference()
766 FrameReg = RI->getFrameRegister(MF); in getFrameIndexReference()
789 assert(!RI->hasStackRealignment(MF) && in getFrameIndexReference()
794 assert(MFI.getStackSize() == getStackSizeWithRVVPadding(MF) && in getFrameIndexReference()
837 assert(!RI->hasStackRealignment(MF) && in getFrameIndexReference()
839 Offset += StackOffset::get(getStackSizeWithRVVPadding(MF) + in getFrameIndexReference()
856 void RISCVFrameLowering::determineCalleeSaves(MachineFunction &MF, in determineCalleeSaves() argument
859 TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS); in determineCalleeSaves()
862 if (hasFP(MF)) { in determineCalleeSaves()
867 if (hasBP(MF)) in determineCalleeSaves()
873 MachineFrameInfo &MFI = MF.getFrameInfo(); in determineCalleeSaves()
875 if (MF.getFunction().hasFnAttribute("interrupt") && MFI.hasCalls()) { in determineCalleeSaves()
887 if (MF.getSubtarget<RISCVSubtarget>().hasStdExtF()) { in determineCalleeSaves()
890 const MCPhysReg * Regs = MF.getRegInfo().getCalleeSavedRegs(); in determineCalleeSaves()
902 RISCVFrameLowering::assignRVVStackObjectOffsets(MachineFunction &MF) const { in assignRVVStackObjectOffsets()
903 MachineFrameInfo &MFI = MF.getFrameInfo(); in assignRVVStackObjectOffsets()
918 const auto &ST = MF.getSubtarget<RISCVSubtarget>(); in assignRVVStackObjectOffsets()
955 static unsigned getScavSlotsNumForRVV(MachineFunction &MF) { in getScavSlotsNumForRVV() argument
973 if (!MF.getSubtarget<RISCVSubtarget>().hasVInstructions()) in getScavSlotsNumForRVV()
975 for (const MachineBasicBlock &MBB : MF) in getScavSlotsNumForRVV()
981 bool IsScalableVectorID = MF.getFrameInfo().getStackID(MO.getIndex()) == in getScavSlotsNumForRVV()
1000 MachineFunction &MF, RegScavenger *RS) const { in processFunctionBeforeFrameFinalized() argument
1002 MF.getSubtarget<RISCVSubtarget>().getRegisterInfo(); in processFunctionBeforeFrameFinalized()
1003 MachineFrameInfo &MFI = MF.getFrameInfo(); in processFunctionBeforeFrameFinalized()
1005 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in processFunctionBeforeFrameFinalized()
1009 std::tie(RVVStackSize, RVVStackAlign) = assignRVVStackObjectOffsets(MF); in processFunctionBeforeFrameFinalized()
1029 if (!isInt<11>(MFI.estimateStackSize(MF))) in processFunctionBeforeFrameFinalized()
1032 ScavSlotsNum = std::max(ScavSlotsNum, getScavSlotsNumForRVV(MF)); in processFunctionBeforeFrameFinalized()
1038 if (MFI.getCalleeSavedInfo().empty() || RVFI->useSaveRestoreLibCalls(MF)) { in processFunctionBeforeFrameFinalized()
1054 static bool hasRVVFrameObject(const MachineFunction &MF) { in hasRVVFrameObject() argument
1070 return MF.getSubtarget<RISCVSubtarget>().hasVInstructions(); in hasRVVFrameObject()
1077 bool RISCVFrameLowering::hasReservedCallFrame(const MachineFunction &MF) const { in hasReservedCallFrame()
1078 return !MF.getFrameInfo().hasVarSizedObjects() && in hasReservedCallFrame()
1079 !(hasFP(MF) && hasRVVFrameObject(MF)); in hasReservedCallFrame()
1084 MachineFunction &MF, MachineBasicBlock &MBB, in eliminateCallFramePseudoInstr() argument
1089 if (!hasReservedCallFrame(MF)) { in eliminateCallFramePseudoInstr()
1122 RISCVFrameLowering::getFirstSPAdjustAmount(const MachineFunction &MF) const { in getFirstSPAdjustAmount()
1123 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getFirstSPAdjustAmount()
1124 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFirstSPAdjustAmount()
1126 uint64_t StackSize = getStackSizeWithRVVPadding(MF); in getFirstSPAdjustAmount()
1154 MachineFunction *MF = MBB.getParent(); in spillCalleeSavedRegisters() local
1155 const TargetInstrInfo &TII = *MF->getSubtarget().getInstrInfo(); in spillCalleeSavedRegisters()
1160 const char *SpillLibCall = getSpillLibCallName(*MF, CSI); in spillCalleeSavedRegisters()
1173 const auto &NonLibcallCSI = getNonLibcallCSI(*MF, CSI); in spillCalleeSavedRegisters()
1191 MachineFunction *MF = MBB.getParent(); in restoreCalleeSavedRegisters() local
1192 const TargetInstrInfo &TII = *MF->getSubtarget().getInstrInfo(); in restoreCalleeSavedRegisters()
1203 const auto &NonLibcallCSI = getNonLibcallCSI(*MF, CSI); in restoreCalleeSavedRegisters()
1211 const char *RestoreLibCall = getRestoreLibCallName(*MF, CSI); in restoreCalleeSavedRegisters()
1222 NewMI->copyImplicitOps(*MF, *MI); in restoreCalleeSavedRegisters()
1230 bool RISCVFrameLowering::enableShrinkWrapping(const MachineFunction &MF) const { in enableShrinkWrapping()
1232 if (MF.getFunction().hasOptNone()) in enableShrinkWrapping()
1240 const MachineFunction *MF = MBB.getParent(); in canUseAsPrologue() local
1241 const auto *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in canUseAsPrologue()
1243 if (!RVFI->useSaveRestoreLibCalls(*MF)) in canUseAsPrologue()
1256 const MachineFunction *MF = MBB.getParent(); in canUseAsEpilogue() local
1258 const auto *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in canUseAsEpilogue()
1260 if (!RVFI->useSaveRestoreLibCalls(*MF)) in canUseAsEpilogue()