Lines Matching refs:MF
52 bool X86FrameLowering::hasReservedCallFrame(const MachineFunction &MF) const { in hasReservedCallFrame()
53 return !MF.getFrameInfo().hasVarSizedObjects() && in hasReservedCallFrame()
54 !MF.getInfo<X86MachineFunctionInfo>()->getHasPushSequences(); in hasReservedCallFrame()
62 X86FrameLowering::canSimplifyCallFramePseudos(const MachineFunction &MF) const { in canSimplifyCallFramePseudos()
63 return hasReservedCallFrame(MF) || in canSimplifyCallFramePseudos()
64 (hasFP(MF) && !TRI->needsStackRealignment(MF)) || in canSimplifyCallFramePseudos()
65 TRI->hasBasePointer(MF); in canSimplifyCallFramePseudos()
76 X86FrameLowering::needsFrameIndexResolution(const MachineFunction &MF) const { in needsFrameIndexResolution()
77 return MF.getFrameInfo().hasStackObjects() || in needsFrameIndexResolution()
78 MF.getInfo<X86MachineFunctionInfo>()->getHasPushSequences(); in needsFrameIndexResolution()
84 bool X86FrameLowering::hasFP(const MachineFunction &MF) const { in hasFP()
85 const MachineFrameInfo &MFI = MF.getFrameInfo(); in hasFP()
86 return (MF.getTarget().Options.DisableFramePointerElim(MF) || in hasFP()
87 TRI->needsStackRealignment(MF) || in hasFP()
90 MF.getInfo<X86MachineFunctionInfo>()->getForceFramePointer() || in hasFP()
91 MF.callsUnwindInit() || MF.hasEHFunclets() || MF.callsEHReturn() || in hasFP()
150 const MachineFunction *MF = MBB.getParent(); in findDeadCallerSavedReg() local
151 if (MF->callsEHReturn()) in findDeadCallerSavedReg()
154 const TargetRegisterClass &AvailableRegs = *TRI->getGPRsForTailCall(*MF); in findDeadCallerSavedReg()
455 MachineFunction &MF = *MBB.getParent(); in BuildCFI() local
456 unsigned CFIIndex = MF.addFrameInst(CFIInst); in BuildCFI()
464 MachineFunction &MF = *MBB.getParent(); in emitCalleeSavedFrameMoves() local
465 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitCalleeSavedFrameMoves()
466 MachineModuleInfo &MMI = MF.getMMI(); in emitCalleeSavedFrameMoves()
485 void X86FrameLowering::emitStackProbe(MachineFunction &MF, in emitStackProbe() argument
489 const X86Subtarget &STI = MF.getSubtarget<X86Subtarget>(); in emitStackProbe()
492 emitStackProbeInlineStub(MF, MBB, MBBI, DL, true); in emitStackProbe()
494 emitStackProbeInline(MF, MBB, MBBI, DL, false); in emitStackProbe()
497 emitStackProbeCall(MF, MBB, MBBI, DL, InProlog); in emitStackProbe()
501 void X86FrameLowering::inlineStackProbe(MachineFunction &MF, in inlineStackProbe() argument
521 emitStackProbeInline(MF, PrologMBB, MBBI, DL, true); in inlineStackProbe()
526 void X86FrameLowering::emitStackProbeInline(MachineFunction &MF, in emitStackProbeInline() argument
531 const X86Subtarget &STI = MF.getSubtarget<X86Subtarget>(); in emitStackProbeInline()
565 MachineBasicBlock *RoundMBB = MF.CreateMachineBasicBlock(LLVM_BB); in emitStackProbeInline()
566 MachineBasicBlock *LoopMBB = MF.CreateMachineBasicBlock(LLVM_BB); in emitStackProbeInline()
567 MachineBasicBlock *ContinueMBB = MF.CreateMachineBasicBlock(LLVM_BB); in emitStackProbeInline()
570 MF.insert(MBBIter, RoundMBB); in emitStackProbeInline()
571 MF.insert(MBBIter, LoopMBB); in emitStackProbeInline()
572 MF.insert(MBBIter, ContinueMBB); in emitStackProbeInline()
586 MachineRegisterInfo &MRI = MF.getRegInfo(); in emitStackProbeInline()
616 X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); in emitStackProbeInline()
618 const bool HasFP = hasFP(MF); in emitStackProbeInline()
761 void X86FrameLowering::emitStackProbeCall(MachineFunction &MF, in emitStackProbeCall() argument
766 bool IsLargeCodeModel = MF.getTarget().getCodeModel() == CodeModel::Large; in emitStackProbeCall()
779 StringRef Symbol = STI.getTargetLowering()->getStackProbeSymbolName(MF); in emitStackProbeCall()
786 if (Is64Bit && MF.getTarget().getCodeModel() == CodeModel::Large) { in emitStackProbeCall()
790 .addExternalSymbol(MF.createExternalSymbolName(Symbol)); in emitStackProbeCall()
794 .addExternalSymbol(MF.createExternalSymbolName(Symbol)); in emitStackProbeCall()
825 MachineFunction &MF, MachineBasicBlock &MBB, in emitStackProbeInlineStub() argument
847 uint64_t X86FrameLowering::calculateMaxStackAlign(const MachineFunction &MF) const { in calculateMaxStackAlign()
848 const MachineFrameInfo &MFI = MF.getFrameInfo(); in calculateMaxStackAlign()
851 if (MF.getFunction().hasFnAttribute("stackrealign")) { in calculateMaxStackAlign()
960 void X86FrameLowering::emitPrologue(MachineFunction &MF, in emitPrologue() argument
962 assert(&STI == &MF.getSubtarget<X86Subtarget>() && in emitPrologue()
965 MachineFrameInfo &MFI = MF.getFrameInfo(); in emitPrologue()
966 const Function &Fn = MF.getFunction(); in emitPrologue()
967 MachineModuleInfo &MMI = MF.getMMI(); in emitPrologue()
968 X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); in emitPrologue()
969 uint64_t MaxAlign = calculateMaxStackAlign(MF); // Desired stack alignment. in emitPrologue()
976 MF.hasEHFunclets() && Personality == EHPersonality::CoreCLR; in emitPrologue()
978 bool HasFP = hasFP(MF); in emitPrologue()
980 bool IsWin64Prologue = MF.getTarget().getMCAsmInfo()->usesWindowsCFI(); in emitPrologue()
988 unsigned FramePtr = TRI->getFrameRegister(MF); in emitPrologue()
1008 bool UseStackProbe = !STI.getTargetLowering()->getStackProbeSymbolName(MF).empty(); in emitPrologue()
1034 !TRI->needsStackRealignment(MF) && in emitPrologue()
1040 !MF.shouldSplitStack()) { // Regular stack in emitPrologue()
1093 assert(MF.getRegInfo().isReserved(MachineFramePtr) && "FP reserved"); in emitPrologue()
1104 if (TRI->needsStackRealignment(MF) && !IsWin64Prologue) in emitPrologue()
1165 if (HasFP && TRI->needsStackRealignment(MF)) in emitPrologue()
1175 NumBytes = getWinEHFuncletFrameSize(MF); in emitPrologue()
1209 if (!IsWin64Prologue && !IsFunclet && TRI->needsStackRealignment(MF)) { in emitPrologue()
1237 if (IsWin64Prologue && !IsFunclet && TRI->needsStackRealignment(MF)) in emitPrologue()
1286 emitStackProbe(MF, MBB, MBBI, DL, true); in emitPrologue()
1292 MI = addRegOffset(BuildMI(MF, DL, TII.get(X86::MOV64rm), X86::RAX), in emitPrologue()
1295 MI = addRegOffset(BuildMI(MF, DL, TII.get(X86::MOV32rm), X86::EAX), in emitPrologue()
1319 unsigned PSPSlotOffset = getPSPSlotOffsetFromSP(MF); in emitPrologue()
1324 .addMemOperand(MF.getMachineMemOperand( in emitPrologue()
1333 MF.getMachineMemOperand(NoInfo, MachineMemOperand::MOStore | in emitPrologue()
1363 MF.getWinEHFuncInfo()->SEHSetFrameOffset = SEHFrameOffset; in emitPrologue()
1373 int FI = MF.getWinEHFuncInfo()->EHRegNodeFrameIndex; in emitPrologue()
1374 int64_t EHRegOffset = getFrameIndexReference(MF, FI, FrameReg); in emitPrologue()
1391 int Offset = getFrameIndexReference(MF, FI, IgnoredFrameReg); in emitPrologue()
1413 unsigned PSPSlotOffset = getPSPSlotOffsetFromSP(MF); in emitPrologue()
1415 MF, MF.getWinEHFuncInfo()->PSPSymFrameIdx); in emitPrologue()
1419 .addMemOperand(MF.getMachineMemOperand( in emitPrologue()
1427 if (IsWin64Prologue && TRI->needsStackRealignment(MF)) { in emitPrologue()
1440 if (TRI->hasBasePointer(MF)) { in emitPrologue()
1464 getFrameIndexReference(MF, X86FI->getSEHFramePtrSaveIndex(), UsedReg); in emitPrologue()
1498 MF.setHasWinCFI(HasWinCFI); in emitPrologue()
1502 const MachineFunction &MF) const { in canUseLEAForSPInEpilogue()
1509 return !MF.getTarget().getMCAsmInfo()->usesWindowsCFI() || hasFP(MF); in canUseLEAForSPInEpilogue()
1537 X86FrameLowering::getPSPSlotOffsetFromSP(const MachineFunction &MF) const { in getPSPSlotOffsetFromSP()
1538 const WinEHFuncInfo &Info = *MF.getWinEHFuncInfo(); in getPSPSlotOffsetFromSP()
1540 int Offset = getFrameIndexReferencePreferSP(MF, Info.PSPSymFrameIdx, SPReg, in getPSPSlotOffsetFromSP()
1547 X86FrameLowering::getWinEHFuncletFrameSize(const MachineFunction &MF) const { in getWinEHFuncletFrameSize()
1550 MF.getInfo<X86MachineFunctionInfo>()->getCalleeSavedFrameSize(); in getWinEHFuncletFrameSize()
1554 classifyEHPersonality(MF.getFunction().getPersonalityFn()); in getWinEHFuncletFrameSize()
1559 UsedSize = getPSPSlotOffsetFromSP(MF) + SlotSize; in getWinEHFuncletFrameSize()
1562 UsedSize = MF.getFrameInfo().getMaxCallFrameSize(); in getWinEHFuncletFrameSize()
1580 void X86FrameLowering::emitEpilogue(MachineFunction &MF, in emitEpilogue() argument
1582 const MachineFrameInfo &MFI = MF.getFrameInfo(); in emitEpilogue()
1583 X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); in emitEpilogue()
1591 unsigned FramePtr = TRI->getFrameRegister(MF); in emitEpilogue()
1595 bool IsWin64Prologue = MF.getTarget().getMCAsmInfo()->usesWindowsCFI(); in emitEpilogue()
1597 IsWin64Prologue && MF.getFunction().needsUnwindTableEntry(); in emitEpilogue()
1602 uint64_t MaxAlign = calculateMaxStackAlign(MF); in emitEpilogue()
1604 bool HasFP = hasFP(MF); in emitEpilogue()
1608 (!MF.getTarget().getTargetTriple().isOSDarwin() && in emitEpilogue()
1609 !MF.getTarget().getTargetTriple().isOSWindows()) && in emitEpilogue()
1610 (MF.getMMI().hasDebugInfo() || MF.getFunction().needsUnwindTableEntry()); in emitEpilogue()
1614 NumBytes = getWinEHFuncletFrameSize(MF); in emitEpilogue()
1622 if (TRI->needsStackRealignment(MF) && !IsWin64Prologue) in emitEpilogue()
1675 if ((TRI->needsStackRealignment(MF) || MFI.hasVarSizedObjects()) && in emitEpilogue()
1677 if (TRI->needsStackRealignment(MF)) in emitEpilogue()
1704 if (!hasFP(MF) && NeedsDwarfCFI) { in emitEpilogue()
1718 if (NeedsWin64CFI && MF.hasWinCFI()) in emitEpilogue()
1721 if (!hasFP(MF) && NeedsDwarfCFI) { in emitEpilogue()
1750 int X86FrameLowering::getFrameIndexReference(const MachineFunction &MF, int FI, in getFrameIndexReference() argument
1752 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFrameIndexReference()
1758 if (TRI->hasBasePointer(MF)) in getFrameIndexReference()
1760 else if (TRI->needsStackRealignment(MF)) in getFrameIndexReference()
1763 FrameReg = TRI->getFrameRegister(MF); in getFrameIndexReference()
1770 const X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); in getFrameIndexReference()
1773 bool HasFP = hasFP(MF); in getFrameIndexReference()
1774 bool IsWin64Prologue = MF.getTarget().getMCAsmInfo()->usesWindowsCFI(); in getFrameIndexReference()
1801 if (TRI->hasBasePointer(MF)) { in getFrameIndexReference()
1810 } else if (TRI->needsStackRealignment(MF)) { in getFrameIndexReference()
1835 int X86FrameLowering::getFrameIndexReferenceSP(const MachineFunction &MF, in getFrameIndexReferenceSP() argument
1838 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFrameIndexReferenceSP()
1844 X86FrameLowering::getFrameIndexReferencePreferSP(const MachineFunction &MF, in getFrameIndexReferencePreferSP() argument
1848 const MachineFrameInfo &MFI = MF.getFrameInfo(); in getFrameIndexReferencePreferSP()
1884 if (MFI.isFixedObjectIndex(FI) && TRI->needsStackRealignment(MF) && in getFrameIndexReferencePreferSP()
1886 return getFrameIndexReference(MF, FI, FrameReg); in getFrameIndexReferencePreferSP()
1891 const TargetFrameLowering *TFI = MF.getSubtarget().getFrameLowering(); in getFrameIndexReferencePreferSP()
1892 if (!IgnoreSPUpdates && !TFI->hasReservedCallFrame(MF)) in getFrameIndexReferencePreferSP()
1893 return getFrameIndexReference(MF, FI, FrameReg); in getFrameIndexReferencePreferSP()
1896 assert(MF.getInfo<X86MachineFunctionInfo>()->getTCReturnAddrDelta() >= 0 && in getFrameIndexReferencePreferSP()
1924 return getFrameIndexReferenceSP(MF, FI, FrameReg, StackSize); in getFrameIndexReferencePreferSP()
1928 MachineFunction &MF, const TargetRegisterInfo *TRI, in assignCalleeSavedSpillSlots() argument
1930 MachineFrameInfo &MFI = MF.getFrameInfo(); in assignCalleeSavedSpillSlots()
1931 X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); in assignCalleeSavedSpillSlots()
1953 if (this->TRI->hasBasePointer(MF)) { in assignCalleeSavedSpillSlots()
1955 if (MF.hasEHFunclets()) { in assignCalleeSavedSpillSlots()
1962 if (hasFP(MF)) { in assignCalleeSavedSpillSlots()
1970 unsigned FPReg = TRI->getFrameRegister(MF); in assignCalleeSavedSpillSlots()
2034 const MachineFunction &MF = *MBB.getParent(); in spillCalleeSavedRegisters() local
2042 const MachineRegisterInfo &MRI = MF.getRegInfo(); in spillCalleeSavedRegisters()
2179 void X86FrameLowering::determineCalleeSaves(MachineFunction &MF, in determineCalleeSaves() argument
2182 TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS); in determineCalleeSaves()
2185 if (TRI->hasBasePointer(MF)){ in determineCalleeSaves()
2194 HasNestArgument(const MachineFunction *MF) { in HasNestArgument() argument
2195 const Function &F = MF->getFunction(); in HasNestArgument()
2209 GetScratchRegister(bool Is64Bit, bool IsLP64, const MachineFunction &MF, bool Primary) { in GetScratchRegister() argument
2210 CallingConv::ID CallingConvention = MF.getFunction().getCallingConv(); in GetScratchRegister()
2227 bool IsNested = HasNestArgument(&MF); in GetScratchRegister()
2246 MachineFunction &MF, MachineBasicBlock &PrologueMBB) const { in adjustForSegmentedStacks() argument
2247 MachineFrameInfo &MFI = MF.getFrameInfo(); in adjustForSegmentedStacks()
2254 assert(&(*MF.begin()) == &PrologueMBB && "Shrink-wrapping not supported yet"); in adjustForSegmentedStacks()
2256 unsigned ScratchReg = GetScratchRegister(Is64Bit, IsLP64, MF, true); in adjustForSegmentedStacks()
2257 assert(!MF.getRegInfo().isLiveIn(ScratchReg) && in adjustForSegmentedStacks()
2260 if (MF.getFunction().isVarArg()) in adjustForSegmentedStacks()
2280 MF.getMMI().setHasNosplitStack(true); in adjustForSegmentedStacks()
2284 MachineBasicBlock *allocMBB = MF.CreateMachineBasicBlock(); in adjustForSegmentedStacks()
2285 MachineBasicBlock *checkMBB = MF.CreateMachineBasicBlock(); in adjustForSegmentedStacks()
2286 X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); in adjustForSegmentedStacks()
2291 IsNested = HasNestArgument(&MF); in adjustForSegmentedStacks()
2304 MF.push_front(allocMBB); in adjustForSegmentedStacks()
2305 MF.push_front(checkMBB); in adjustForSegmentedStacks()
2376 ScratchReg2 = GetScratchRegister(Is64Bit, IsLP64, MF, true); in adjustForSegmentedStacks()
2380 ScratchReg2 = GetScratchRegister(Is64Bit, IsLP64, MF, false); in adjustForSegmentedStacks()
2384 SaveScratch2 = MF.getRegInfo().isLiveIn(ScratchReg2); in adjustForSegmentedStacks()
2388 assert((!MF.getRegInfo().isLiveIn(ScratchReg2) || SaveScratch2) && in adjustForSegmentedStacks()
2439 if (Is64Bit && MF.getTarget().getCodeModel() == CodeModel::Large) { in adjustForSegmentedStacks()
2464 MF.getMMI().setUsesMorestackAddr(true); in adjustForSegmentedStacks()
2485 MF.verify(); in adjustForSegmentedStacks()
2527 MachineFunction &MF, MachineBasicBlock &PrologueMBB) const { in adjustForHiPEPrologue() argument
2528 MachineFrameInfo &MFI = MF.getFrameInfo(); in adjustForHiPEPrologue()
2533 assert(&(*MF.begin()) == &PrologueMBB && "Shrink-wrapping not supported yet"); in adjustForHiPEPrologue()
2536 NamedMDNode *HiPELiteralsMD = MF.getMMI().getModule() in adjustForHiPEPrologue()
2546 unsigned CallerStkArity = MF.getFunction().arg_size() > CCRegisteredArgs ? in adjustForHiPEPrologue()
2547 MF.getFunction().arg_size() - CCRegisteredArgs : 0; in adjustForHiPEPrologue()
2563 for (auto &MBB : MF) { in adjustForHiPEPrologue()
2602 MachineBasicBlock *stackCheckMBB = MF.CreateMachineBasicBlock(); in adjustForHiPEPrologue()
2603 MachineBasicBlock *incStackMBB = MF.CreateMachineBasicBlock(); in adjustForHiPEPrologue()
2610 MF.push_front(incStackMBB); in adjustForHiPEPrologue()
2611 MF.push_front(stackCheckMBB); in adjustForHiPEPrologue()
2630 ScratchReg = GetScratchRegister(Is64Bit, IsLP64, MF, true); in adjustForHiPEPrologue()
2631 assert(!MF.getRegInfo().isLiveIn(ScratchReg) && in adjustForHiPEPrologue()
2657 MF.verify(); in adjustForHiPEPrologue()
2738 eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, in eliminateCallFramePseudoInstr() argument
2740 bool reserveCallFrame = hasReservedCallFrame(MF); in eliminateCallFramePseudoInstr()
2760 MachineModuleInfo &MMI = MF.getMMI(); in eliminateCallFramePseudoInstr()
2761 const Function &F = MF.getFunction(); in eliminateCallFramePseudoInstr()
2762 bool WindowsCFI = MF.getTarget().getMCAsmInfo()->usesWindowsCFI(); in eliminateCallFramePseudoInstr()
2773 bool HasDwarfEHHandlers = !WindowsCFI && !MF.getLandingPads().empty(); in eliminateCallFramePseudoInstr()
2776 MF.getInfo<X86MachineFunctionInfo>()->getHasPushSequences()) in eliminateCallFramePseudoInstr()
2790 if (isDestroy && InternalAmt && DwarfCFI && !hasFP(MF)) in eliminateCallFramePseudoInstr()
2812 if (DwarfCFI && !hasFP(MF)) { in eliminateCallFramePseudoInstr()
2852 const MachineFunction &MF = *MBB.getParent(); in canUseAsPrologue() local
2853 return !TRI->needsStackRealignment(MF) || !MBB.isLiveIn(X86::EFLAGS); in canUseAsPrologue()
2876 bool X86FrameLowering::enableShrinkWrapping(const MachineFunction &MF) const { in enableShrinkWrapping()
2879 return (MF.getFunction().hasFnAttribute(Attribute::NoUnwind) || hasFP(MF)) && in enableShrinkWrapping()
2885 MF.getFunction().getCallingConv() != CallingConv::HiPE && in enableShrinkWrapping()
2886 !MF.shouldSplitStack(); in enableShrinkWrapping()
2897 MachineFunction &MF = *MBB.getParent(); in restoreWin32EHStackPointers() local
2898 unsigned FramePtr = TRI->getFrameRegister(MF); in restoreWin32EHStackPointers()
2900 WinEHFuncInfo &FuncInfo = *MF.getWinEHFuncInfo(); in restoreWin32EHStackPointers()
2901 X86MachineFunctionInfo *X86FI = MF.getInfo<X86MachineFunctionInfo>(); in restoreWin32EHStackPointers()
2902 MachineFrameInfo &MFI = MF.getFrameInfo(); in restoreWin32EHStackPointers()
2917 int EHRegOffset = getFrameIndexReference(MF, FI, UsedReg); in restoreWin32EHStackPointers()
2940 getFrameIndexReference(MF, X86FI->getSEHFramePtrSaveIndex(), UsedReg); in restoreWin32EHStackPointers()
2951 int X86FrameLowering::getInitialCFAOffset(const MachineFunction &MF) const { in getInitialCFAOffset()
2955 unsigned X86FrameLowering::getInitialCFARegister(const MachineFunction &MF) in getInitialCFARegister()
3032 const MachineFunction &MF, SmallVectorImpl<int> &ObjectsToAllocate) const { in orderFrameObjects() argument
3033 const MachineFrameInfo &MFI = MF.getFrameInfo(); in orderFrameObjects()
3062 for (auto &MBB : MF) { in orderFrameObjects()
3099 if (!TRI->needsStackRealignment(MF) && hasFP(MF)) in orderFrameObjects()
3104 unsigned X86FrameLowering::getWinEHParentFrameOffset(const MachineFunction &MF) const { in getWinEHParentFrameOffset()
3110 Offset += MF.getInfo<X86MachineFunctionInfo>()->getCalleeSavedFrameSize(); in getWinEHParentFrameOffset()
3112 Offset += getWinEHFuncletFrameSize(MF); in getWinEHParentFrameOffset()
3117 MachineFunction &MF, RegScavenger *RS) const { in processFunctionBeforeFrameFinalized() argument
3120 MF.setHasWinCFI(false); in processFunctionBeforeFrameFinalized()
3124 const Function &F = MF.getFunction(); in processFunctionBeforeFrameFinalized()
3125 if (!STI.is64Bit() || !MF.hasEHFunclets() || in processFunctionBeforeFrameFinalized()
3134 MachineFrameInfo &MFI = MF.getFrameInfo(); in processFunctionBeforeFrameFinalized()
3135 WinEHFuncInfo &EHInfo = *MF.getWinEHFuncInfo(); in processFunctionBeforeFrameFinalized()
3162 MachineBasicBlock &MBB = MF.front(); in processFunctionBeforeFrameFinalized()