Lines Matching refs:MF

52 static void emitSCSPrologue(MachineFunction &MF, MachineBasicBlock &MBB,  in emitSCSPrologue()  argument
55 if (!MF.getFunction().hasFnAttribute(Attribute::ShadowCallStack)) in emitSCSPrologue()
58 const auto &STI = MF.getSubtarget<RISCVSubtarget>(); in emitSCSPrologue()
64 std::vector<CalleeSavedInfo> &CSI = MF.getFrameInfo().getCalleeSavedInfo(); in emitSCSPrologue()
102 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createEscape( in emitSCSPrologue()
109 static void emitSCSEpilogue(MachineFunction &MF, MachineBasicBlock &MBB, in emitSCSEpilogue() argument
112 if (!MF.getFunction().hasFnAttribute(Attribute::ShadowCallStack)) in emitSCSEpilogue()
115 const auto &STI = MF.getSubtarget<RISCVSubtarget>(); in emitSCSEpilogue()
119 std::vector<CalleeSavedInfo> &CSI = MF.getFrameInfo().getCalleeSavedInfo(); in emitSCSEpilogue()
143 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createRestore( in emitSCSEpilogue()
154 static int getLibCallID(const MachineFunction &MF, in getLibCallID() argument
156 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getLibCallID()
158 if (CSI.empty() || !RVFI->useSaveRestoreLibCalls(MF)) in getLibCallID()
193 getSpillLibCallName(const MachineFunction &MF, in getSpillLibCallName() argument
211 int LibCallID = getLibCallID(MF, CSI); in getSpillLibCallName()
220 getRestoreLibCallName(const MachineFunction &MF, in getRestoreLibCallName() argument
238 int LibCallID = getLibCallID(MF, CSI); in getRestoreLibCallName()
280 static Register getMaxPushPopReg(const MachineFunction &MF, in getMaxPushPopReg() argument
299 bool RISCVFrameLowering::hasFP(const MachineFunction &MF) const { in hasFP()
300 const TargetRegisterInfo *RegInfo = MF.getSubtarget().getRegisterInfo(); in hasFP()
302 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasFP()
303 return MF.getTarget().Options.DisableFramePointerElim(MF) || in hasFP()
304 RegInfo->hasStackRealignment(MF) || MFI.hasVarSizedObjects() || in hasFP()
308 bool RISCVFrameLowering::hasBP(const MachineFunction &MF) const { in hasBP()
309 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasBP()
317 (!hasReservedCallFrame(MF) && (!MFI.isMaxCallFrameSizeComputed() || in hasBP()
319 TRI->hasStackRealignment(MF); in hasBP()
323 void RISCVFrameLowering::determineFrameLayout(MachineFunction &MF) const { in determineFrameLayout()
324 MachineFrameInfo &MFI = MF.getFrameInfo(); in determineFrameLayout()
325 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in determineFrameLayout()
344 if (RVFI->getRVVStackSize() && (!hasFP(MF) || TRI->hasStackRealignment(MF))) { in determineFrameLayout()
356 const MachineFunction &MF) const { in getStackSizeWithRVVPadding()
357 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getStackSizeWithRVVPadding()
358 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getStackSizeWithRVVPadding()
369 getUnmanagedCSI(const MachineFunction &MF, in getUnmanagedCSI() argument
371 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getUnmanagedCSI()
383 void RISCVFrameLowering::adjustStackForRVV(MachineFunction &MF, in adjustStackForRVV() argument
462 void RISCVFrameLowering::emitPrologue(MachineFunction &MF, in emitPrologue() argument
464 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitPrologue()
465 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitPrologue()
480 if (MF.getFunction().getCallingConv() == CallingConv::GHC) in emitPrologue()
484 emitSCSPrologue(MF, MBB, MBBI, DL); in emitPrologue()
494 determineFrameLayout(MF); in emitPrologue()
514 if (int LibCallRegs = getLibCallID(MF, MFI.getCalleeSavedInfo()) + 1) { in emitPrologue()
525 uint64_t StackSize = getStackSizeWithRVVPadding(MF); in emitPrologue()
536 MF.getFunction().getContext().diagnose(DiagnosticInfoUnsupported{ in emitPrologue()
537 MF.getFunction(), "Stack pointer required, but has been reserved."}); in emitPrologue()
539 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in emitPrologue()
546 if (RVFI->isPushable(MF) && FirstFrameSetup != MBB.end() && in emitPrologue()
563 unsigned CFIIndex = MF.addFrameInst( in emitPrologue()
577 std::advance(MBBI, getUnmanagedCSI(MF, CSI).size()); in emitPrologue()
587 if (RVFI->isPushable(MF)) { in emitPrologue()
598 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset( in emitPrologue()
606 if (hasFP(MF)) { in emitPrologue()
608 MF.getFunction().getContext().diagnose(DiagnosticInfoUnsupported{ in emitPrologue()
609 MF.getFunction(), "Frame pointer required, but has been reserved."}); in emitPrologue()
611 assert(MF.getRegInfo().isReserved(FPReg) && "FP not reserved"); in emitPrologue()
618 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfa( in emitPrologue()
628 getStackSizeWithRVVPadding(MF) - FirstSPAdjustAmount; in emitPrologue()
637 if (!hasFP(MF)) { in emitPrologue()
639 unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::cfiDefCfaOffset( in emitPrologue()
640 nullptr, getStackSizeWithRVVPadding(MF))); in emitPrologue()
648 adjustStackForRVV(MF, MBB, MBBI, DL, -RVVStackSize, in emitPrologue()
650 if (!hasFP(MF)) { in emitPrologue()
652 unsigned CFIIndex = MF.addFrameInst(createDefCFAExpression( in emitPrologue()
653 *RI, SPReg, getStackSizeWithRVVPadding(MF), RVVStackSize / 8)); in emitPrologue()
660 if (hasFP(MF)) { in emitPrologue()
663 if (RI->hasStackRealignment(MF)) { in emitPrologue()
675 MF.getRegInfo().createVirtualRegister(&RISCV::GPRRegClass); in emitPrologue()
688 if (hasBP(MF)) { in emitPrologue()
699 void RISCVFrameLowering::emitEpilogue(MachineFunction &MF, in emitEpilogue() argument
702 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitEpilogue()
703 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in emitEpilogue()
709 if (MF.getFunction().getCallingConv() == CallingConv::GHC) in emitEpilogue()
730 const auto &CSI = getUnmanagedCSI(MF, MFI.getCalleeSavedInfo()); in emitEpilogue()
739 uint64_t StackSize = getStackSizeWithRVVPadding(MF); in emitEpilogue()
754 if (RI->hasStackRealignment(MF) || MFI.hasVarSizedObjects() || in emitEpilogue()
755 !hasReservedCallFrame(MF)) { in emitEpilogue()
756 assert(hasFP(MF) && "frame pointer should not have been eliminated"); in emitEpilogue()
762 adjustStackForRVV(MF, MBB, LastFrameDestroy, DL, RVVStackSize, in emitEpilogue()
766 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in emitEpilogue()
769 getStackSizeWithRVVPadding(MF) - FirstSPAdjustAmount; in emitEpilogue()
781 if (RVFI->isPushable(MF) && MBBI != MBB.end() && in emitEpilogue()
797 emitSCSEpilogue(MF, MBB, MBBI, DL); in emitEpilogue()
801 RISCVFrameLowering::getFrameIndexReference(const MachineFunction &MF, int FI, in getFrameIndexReference() argument
803 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFrameIndexReference()
804 const TargetRegisterInfo *RI = MF.getSubtarget().getRegisterInfo(); in getFrameIndexReference()
805 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getFrameIndexReference()
810 const auto &CSI = getUnmanagedCSI(MF, MFI.getCalleeSavedInfo()); in getFrameIndexReference()
827 uint64_t FirstSPAdjustAmount = getFirstSPAdjustAmount(MF); in getFrameIndexReference()
840 Offset += StackOffset::getFixed(getStackSizeWithRVVPadding(MF)); in getFrameIndexReference()
844 if (RI->hasStackRealignment(MF) && !MFI.isFixedObjectIndex(FI)) { in getFrameIndexReference()
877 if (hasBP(MF)) { in getFrameIndexReference()
885 FrameReg = RI->getFrameRegister(MF); in getFrameIndexReference()
908 assert(!RI->hasStackRealignment(MF) && in getFrameIndexReference()
913 assert(MFI.getStackSize() == getStackSizeWithRVVPadding(MF) && in getFrameIndexReference()
956 assert(!RI->hasStackRealignment(MF) && in getFrameIndexReference()
958 Offset += StackOffset::get(getStackSizeWithRVVPadding(MF) + in getFrameIndexReference()
976 void RISCVFrameLowering::determineCalleeSaves(MachineFunction &MF, in determineCalleeSaves() argument
979 TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS); in determineCalleeSaves()
982 if (hasFP(MF)) { in determineCalleeSaves()
987 if (hasBP(MF)) in determineCalleeSaves()
993 MachineFrameInfo &MFI = MF.getFrameInfo(); in determineCalleeSaves()
994 auto &Subtarget = MF.getSubtarget<RISCVSubtarget>(); in determineCalleeSaves()
996 if (MF.getFunction().hasFnAttribute("interrupt") && MFI.hasCalls()) { in determineCalleeSaves()
1022 const MCPhysReg * Regs = MF.getRegInfo().getCalleeSavedRegs(); in determineCalleeSaves()
1034 RISCVFrameLowering::assignRVVStackObjectOffsets(MachineFunction &MF) const { in assignRVVStackObjectOffsets()
1035 MachineFrameInfo &MFI = MF.getFrameInfo(); in assignRVVStackObjectOffsets()
1050 const auto &ST = MF.getSubtarget<RISCVSubtarget>(); in assignRVVStackObjectOffsets()
1087 static unsigned getScavSlotsNumForRVV(MachineFunction &MF) { in getScavSlotsNumForRVV() argument
1105 if (!MF.getSubtarget<RISCVSubtarget>().hasVInstructions()) in getScavSlotsNumForRVV()
1107 for (const MachineBasicBlock &MBB : MF) in getScavSlotsNumForRVV()
1113 bool IsScalableVectorID = MF.getFrameInfo().getStackID(MO.getIndex()) == in getScavSlotsNumForRVV()
1131 static bool hasRVVFrameObject(const MachineFunction &MF) { in hasRVVFrameObject() argument
1147 return MF.getSubtarget<RISCVSubtarget>().hasVInstructions(); in hasRVVFrameObject()
1150 static unsigned estimateFunctionSizeInBytes(const MachineFunction &MF, in estimateFunctionSizeInBytes() argument
1153 for (auto &MBB : MF) { in estimateFunctionSizeInBytes()
1175 if (MF.getSubtarget<RISCVSubtarget>().hasStdExtC()) in estimateFunctionSizeInBytes()
1189 MachineFunction &MF, RegScavenger *RS) const { in processFunctionBeforeFrameFinalized() argument
1191 MF.getSubtarget<RISCVSubtarget>().getRegisterInfo(); in processFunctionBeforeFrameFinalized()
1192 const RISCVInstrInfo *TII = MF.getSubtarget<RISCVSubtarget>().getInstrInfo(); in processFunctionBeforeFrameFinalized()
1193 MachineFrameInfo &MFI = MF.getFrameInfo(); in processFunctionBeforeFrameFinalized()
1195 auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in processFunctionBeforeFrameFinalized()
1199 std::tie(RVVStackSize, RVVStackAlign) = assignRVVStackObjectOffsets(MF); in processFunctionBeforeFrameFinalized()
1204 if (hasRVVFrameObject(MF)) { in processFunctionBeforeFrameFinalized()
1216 if (!isInt<11>(MFI.estimateStackSize(MF))) in processFunctionBeforeFrameFinalized()
1220 bool IsLargeFunction = !isInt<20>(estimateFunctionSizeInBytes(MF, *TII)); in processFunctionBeforeFrameFinalized()
1227 ScavSlotsNum = std::max(ScavSlotsNum, getScavSlotsNumForRVV(MF)); in processFunctionBeforeFrameFinalized()
1238 if (MFI.getCalleeSavedInfo().empty() || RVFI->useSaveRestoreLibCalls(MF) || in processFunctionBeforeFrameFinalized()
1239 RVFI->isPushable(MF)) { in processFunctionBeforeFrameFinalized()
1259 bool RISCVFrameLowering::hasReservedCallFrame(const MachineFunction &MF) const { in hasReservedCallFrame()
1260 return !MF.getFrameInfo().hasVarSizedObjects() && in hasReservedCallFrame()
1261 !(hasFP(MF) && hasRVVFrameObject(MF)); in hasReservedCallFrame()
1266 MachineFunction &MF, MachineBasicBlock &MBB, in eliminateCallFramePseudoInstr() argument
1271 if (!hasReservedCallFrame(MF)) { in eliminateCallFramePseudoInstr()
1307 RISCVFrameLowering::getFirstSPAdjustAmount(const MachineFunction &MF) const { in getFirstSPAdjustAmount()
1308 const auto *RVFI = MF.getInfo<RISCVMachineFunctionInfo>(); in getFirstSPAdjustAmount()
1309 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFirstSPAdjustAmount()
1311 uint64_t StackSize = getStackSizeWithRVVPadding(MF); in getFirstSPAdjustAmount()
1380 MachineFunction *MF = MBB.getParent(); in spillCalleeSavedRegisters() local
1381 const TargetInstrInfo &TII = *MF->getSubtarget().getInstrInfo(); in spillCalleeSavedRegisters()
1387 RISCVMachineFunctionInfo *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in spillCalleeSavedRegisters()
1388 if (RVFI->isPushable(*MF)) { in spillCalleeSavedRegisters()
1389 Register MaxReg = getMaxPushPopReg(*MF, CSI); in spillCalleeSavedRegisters()
1406 } else if (const char *SpillLibCall = getSpillLibCallName(*MF, CSI)) { in spillCalleeSavedRegisters()
1418 const auto &UnmanagedCSI = getUnmanagedCSI(*MF, CSI); in spillCalleeSavedRegisters()
1436 MachineFunction *MF = MBB.getParent(); in restoreCalleeSavedRegisters() local
1437 const TargetInstrInfo &TII = *MF->getSubtarget().getInstrInfo(); in restoreCalleeSavedRegisters()
1448 const auto &UnmanagedCSI = getUnmanagedCSI(*MF, CSI); in restoreCalleeSavedRegisters()
1457 RISCVMachineFunctionInfo *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in restoreCalleeSavedRegisters()
1458 if (RVFI->isPushable(*MF)) { in restoreCalleeSavedRegisters()
1472 const char *RestoreLibCall = getRestoreLibCallName(*MF, CSI); in restoreCalleeSavedRegisters()
1483 NewMI->copyImplicitOps(*MF, *MI); in restoreCalleeSavedRegisters()
1491 bool RISCVFrameLowering::enableShrinkWrapping(const MachineFunction &MF) const { in enableShrinkWrapping()
1493 if (MF.getFunction().hasOptNone()) in enableShrinkWrapping()
1501 const MachineFunction *MF = MBB.getParent(); in canUseAsPrologue() local
1502 const auto *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in canUseAsPrologue()
1504 if (!RVFI->useSaveRestoreLibCalls(*MF)) in canUseAsPrologue()
1517 const MachineFunction *MF = MBB.getParent(); in canUseAsEpilogue() local
1519 const auto *RVFI = MF->getInfo<RISCVMachineFunctionInfo>(); in canUseAsEpilogue()
1521 if (!RVFI->useSaveRestoreLibCalls(*MF)) in canUseAsEpilogue()