LLVM
15.0.0git
|
#include "AArch64FrameLowering.h"
#include "AArch64InstrInfo.h"
#include "AArch64MachineFunctionInfo.h"
#include "AArch64RegisterInfo.h"
#include "AArch64Subtarget.h"
#include "AArch64TargetMachine.h"
#include "MCTargetDesc/AArch64AddressingModes.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/CodeGen/LivePhysRegs.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineMemOperand.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineOperand.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/RegisterScavenging.h"
#include "llvm/CodeGen/TargetInstrInfo.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/CodeGen/WinEHFuncInfo.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/Function.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCDwarf.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/TargetOptions.h"
#include <cassert>
#include <cstdint>
#include <iterator>
#include <vector>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "frame-info" |
#define | CASE(n) |
#define | CASE(n) |
Functions | |
STATISTIC (NumRedZoneFunctions, "Number of functions using red zone") | |
static int64_t | getArgumentStackToRestore (MachineFunction &MF, MachineBasicBlock &MBB) |
Returns how much of the incoming argument stack area (in bytes) we should clean up in an epilogue. More... | |
static bool | produceCompactUnwindFrame (MachineFunction &MF) |
static bool | needsWinCFI (const MachineFunction &MF) |
static StackOffset | getSVEStackSize (const MachineFunction &MF) |
Returns the size of the entire SVE stackframe (calleesaves + spills). More... | |
static bool | needsShadowCallStackPrologueEpilogue (MachineFunction &MF) |
static unsigned | estimateRSStackSizeLimit (MachineFunction &MF) |
Look at each instruction that references stack frames and return the stack size limit beyond which some of these instructions will require a scratch register during their expansion later. More... | |
static unsigned | getFixedObjectSize (const MachineFunction &MF, const AArch64FunctionInfo *AFI, bool IsWin64, bool IsFunclet) |
Returns the size of the fixed object area (allocated next to sp on entry) On Win64 this may include a var args area and an UnwindHelp object for EH. More... | |
static void | insertCFISameValue (const MCInstrDesc &Desc, MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator InsertPt, unsigned DwarfReg) |
static void | emitCalleeSavedRestores (MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, bool SVE) |
static MCRegister | getRegisterOrZero (MCRegister Reg, bool HasSVE) |
static unsigned | findScratchNonCalleeSaveRegister (MachineBasicBlock *MBB) |
static bool | windowsRequiresStackProbe (MachineFunction &MF, uint64_t StackSizeInBytes) |
static MachineBasicBlock::iterator | InsertSEH (MachineBasicBlock::iterator MBBI, const TargetInstrInfo &TII, MachineInstr::MIFlag Flag) |
static void | fixupSEHOpcode (MachineBasicBlock::iterator MBBI, unsigned LocalStackSize) |
static MachineBasicBlock::iterator | convertCalleeSaveRestoreToSPPrePostIncDec (MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, const DebugLoc &DL, const TargetInstrInfo *TII, int CSStackSizeInc, bool NeedsWinCFI, bool *HasWinCFI, bool EmitCFI, MachineInstr::MIFlag FrameFlag=MachineInstr::FrameSetup, int CFAOffset=0) |
static void | fixupCalleeSaveRestoreStackOffset (MachineInstr &MI, uint64_t LocalStackSize, bool NeedsWinCFI, bool *HasWinCFI) |
static bool | isTargetWindows (const MachineFunction &MF) |
static bool | IsSVECalleeSave (MachineBasicBlock::iterator I) |
static void | emitShadowCallStackPrologue (const TargetInstrInfo &TII, MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, const DebugLoc &DL, bool NeedsWinCFI, bool NeedsUnwindInfo) |
static void | emitShadowCallStackEpilogue (const TargetInstrInfo &TII, MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI, const DebugLoc &DL) |
static void | InsertReturnAddressAuth (MachineFunction &MF, MachineBasicBlock &MBB) |
static bool | isFuncletReturnInstr (const MachineInstr &MI) |
static StackOffset | getFPOffset (const MachineFunction &MF, int64_t ObjectOffset) |
static StackOffset | getStackOffset (const MachineFunction &MF, int64_t ObjectOffset) |
static unsigned | getPrologueDeath (MachineFunction &MF, unsigned Reg) |
static bool | invalidateWindowsRegisterPairing (unsigned Reg1, unsigned Reg2, bool NeedsWinCFI, bool IsFirst) |
static bool | invalidateRegisterPairing (unsigned Reg1, unsigned Reg2, bool UsesWinAAPCS, bool NeedsWinCFI, bool NeedsFrameRecord, bool IsFirst) |
Returns true if Reg1 and Reg2 cannot be paired using a ldp/stp instruction. More... | |
static void | computeCalleeSaveRegisterPairs (MachineFunction &MF, ArrayRef< CalleeSavedInfo > CSI, const TargetRegisterInfo *TRI, SmallVectorImpl< RegPairInfo > &RegPairs, bool NeedsFrameRecord) |
static bool | getSVECalleeSaveSlotRange (const MachineFrameInfo &MFI, int &Min, int &Max) |
returns true if there are any SVE callee saves. More... | |
static int64_t | determineSVEStackObjectOffsets (MachineFrameInfo &MFI, int &MinCSFrameIndex, int &MaxCSFrameIndex, bool AssignOffsets) |
Variables | |
static cl::opt< bool > | EnableRedZone ("aarch64-redzone", cl::desc("enable use of redzone on AArch64"), cl::init(false), cl::Hidden) |
static cl::opt< bool > | ReverseCSRRestoreSeq ("reverse-csr-restore-seq", cl::desc("reverse the CSR restore sequence"), cl::init(false), cl::Hidden) |
static cl::opt< bool > | StackTaggingMergeSetTag ("stack-tagging-merge-settag", cl::desc("merge settag instruction in function epilog"), cl::init(true), cl::Hidden) |
static cl::opt< bool > | OrderFrameObjects ("aarch64-order-frame-objects", cl::desc("sort stack allocations"), cl::init(true), cl::Hidden) |
cl::opt< bool > | EnableHomogeneousPrologEpilog ("homogeneous-prolog-epilog", cl::init(false), cl::ZeroOrMore, cl::Hidden, cl::desc("Emit homogeneous prologue and epilogue for the size " "optimization (default = off)")) |
static const unsigned | DefaultSafeSPDisplacement = 255 |
This is the biggest offset to the stack pointer we can encode in aarch64 instructions (without using a separate calculation and a temp register). More... | |
#define CASE | ( | n | ) |
#define CASE | ( | n | ) |
#define DEBUG_TYPE "frame-info" |
Definition at line 234 of file AArch64FrameLowering.cpp.
|
static |
Definition at line 2503 of file AArch64FrameLowering.cpp.
References Align, assert(), contains(), llvm::CallingConv::CXX_FAST_TLS, llvm::ArrayRef< T >::empty(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), llvm::Function::getCallingConv(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::AArch64FunctionInfo::getSVECalleeSavedStackSize(), llvm::AArch64FunctionInfo::hasCalleeSaveStackFreeSpace(), llvm::AArch64FunctionInfo::hasSwiftAsyncContext(), i, invalidateRegisterPairing(), invalidateWindowsRegisterPairing(), isTargetWindows(), llvm_unreachable, needsWinCFI(), llvm::CallingConv::PreserveMost, produceCompactUnwindFrame(), llvm::reverse(), llvm::NVPTX::PTXCvtMode::RPI, llvm::AArch64FunctionInfo::setCalleeSaveBaseToFrameRecordOffset(), and llvm::ArrayRef< T >::size().
Referenced by llvm::AArch64FrameLowering::restoreCalleeSavedRegisters(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
static |
Definition at line 1119 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addCFIIndex(), llvm::MachineFunction::addFrameInst(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), assert(), llvm::BuildMI(), llvm::MCCFIInstruction::cfiDefCfaOffset(), llvm::RegState::Define, DL, llvm::emitFrameOffset(), llvm::MachineBasicBlock::erase(), llvm::TypeSize::Fixed(), llvm::StackOffset::getFixed(), llvm::MachineBasicBlock::getParent(), InsertSEH(), llvm::AArch64InstrInfo::isSEHInstruction(), llvm_unreachable, MBB, MBBI, llvm::MachineInstrBuilder::setMemRefs(), llvm::MachineInstrBuilder::setMIFlags(), Success, and TII.
Referenced by llvm::AArch64FrameLowering::emitEpilogue(), and llvm::AArch64FrameLowering::emitPrologue().
|
static |
Definition at line 3204 of file AArch64FrameLowering.cpp.
References Align, llvm::alignTo(), assert(), llvm::dbgs(), E, llvm::MachineFrameInfo::getObjectAlign(), llvm::MachineFrameInfo::getObjectIndexBegin(), llvm::MachineFrameInfo::getObjectIndexEnd(), llvm::MachineFrameInfo::getObjectSize(), llvm::MachineFrameInfo::getStackID(), llvm::MachineFrameInfo::getStackProtectorIndex(), getSVECalleeSaveSlotRange(), llvm::MachineFrameInfo::hasStackProtectorIndex(), I, llvm::MachineFrameInfo::isDeadObjectIndex(), LLVM_DEBUG, llvm::report_fatal_error(), llvm::TargetStackID::ScalableVector, and llvm::MachineFrameInfo::setObjectOffset().
|
static |
Definition at line 635 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addCFIIndex(), llvm::MachineFunction::addFrameInst(), llvm::BuildMI(), llvm::MCCFIInstruction::createRestore(), DL, llvm::MachineBasicBlock::findDebugLoc(), llvm::MachineInstr::FrameDestroy, llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MCRegisterInfo::getDwarfRegNum(), llvm::MachineFunction::getFrameInfo(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineBasicBlock::getParent(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFrameInfo::getStackID(), llvm::MachineFunction::getSubtarget(), Info, MBB, MBBI, llvm::TargetStackID::ScalableVector, llvm::MachineInstrBuilder::setMIFlags(), llvm::SVE, TII, and TRI.
|
static |
Definition at line 1352 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addCFIIndex(), llvm::MachineFunction::addFrameInst(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::MCCFIInstruction::createRestore(), llvm::RegState::Define, DL, llvm::MachineInstr::FrameDestroy, llvm::MachineFunction::getInfo(), MBB, MBBI, llvm::AArch64FunctionInfo::needsAsyncDwarfUnwindInfo(), llvm::MachineInstrBuilder::setMIFlag(), llvm::MachineInstrBuilder::setMIFlags(), and TII.
Referenced by llvm::AArch64FrameLowering::emitEpilogue().
|
static |
Definition at line 1313 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addCFIIndex(), llvm::MachineFunction::addFrameInst(), llvm::MachineInstrBuilder::addImm(), llvm::MachineBasicBlock::addLiveIn(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::MCCFIInstruction::createEscape(), llvm::RegState::Define, DL, llvm::MachineInstr::FrameSetup, MBB, MBBI, llvm::MachineInstrBuilder::setMIFlag(), and TII.
Referenced by llvm::AArch64FrameLowering::emitPrologue().
|
static |
Look at each instruction that references stack frames and return the stack size limit beyond which some of these instructions will require a scratch register during their expansion later.
Definition at line 349 of file AArch64FrameLowering.cpp.
References llvm::AArch64FrameOffsetCannotUpdate, DefaultSafeSPDisplacement, llvm::isAArch64FrameOffsetLegal(), MBB, and MI.
Referenced by llvm::AArch64FrameLowering::determineCalleeSaves().
|
static |
Definition at line 826 of file AArch64FrameLowering.cpp.
References llvm::LivePhysRegs::addLiveIns(), llvm::LivePhysRegs::addReg(), llvm::LivePhysRegs::available(), llvm::MachineFunction::front(), llvm::MachineRegisterInfo::getCalleeSavedRegs(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getRegInfo(), llvm::AArch64Subtarget::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), i, MBB, MRI, and TRI.
Referenced by llvm::AArch64FrameLowering::canUseAsPrologue().
|
static |
Definition at line 1233 of file AArch64FrameLowering.cpp.
References assert(), fixupSEHOpcode(), llvm::MachineOperand::getImm(), llvm::AArch64InstrInfo::isSEHInstruction(), llvm_unreachable, MBBI, MI, and llvm::MachineOperand::setImm().
Referenced by llvm::AArch64FrameLowering::emitEpilogue().
|
static |
Definition at line 1097 of file AArch64FrameLowering.cpp.
References llvm::MachineOperand::getImm(), llvm_unreachable, MBBI, and llvm::MachineOperand::setImm().
Referenced by fixupCalleeSaveRestoreStackOffset().
|
static |
Returns how much of the incoming argument stack area (in bytes) we should clean up in an epilogue.
For the C calling convention this will be 0, for guaranteed tail call conventions it can be positive (a normal return or a tail call to a function that uses less stack space for arguments) or negative (for a tail call to a function that needs more stack space than us for arguments).
Definition at line 267 of file AArch64FrameLowering.cpp.
References llvm::MachineBasicBlock::end(), llvm::AArch64FunctionInfo::getArgumentStackToRestore(), llvm::MachineOperand::getImm(), llvm::MachineFunction::getInfo(), llvm::MachineBasicBlock::getLastNonDebugInstr(), MBB, and MBBI.
Referenced by llvm::AArch64FrameLowering::emitEpilogue().
|
static |
Returns the size of the fixed object area (allocated next to sp on entry) On Win64 this may include a var args area and an UnwindHelp object for EH.
Definition at line 381 of file AArch64FrameLowering.cpp.
References llvm::alignTo(), llvm::AArch64FunctionInfo::getTailCallReservedStack(), llvm::AArch64FunctionInfo::getVarArgsGPRSize(), llvm::MachineFunction::hasEHFunclets(), and llvm::report_fatal_error().
Referenced by llvm::AArch64FrameLowering::emitEpilogue(), llvm::AArch64FrameLowering::emitPrologue(), getFPOffset(), and llvm::AArch64FrameLowering::processFunctionBeforeFrameFinalized().
|
static |
Definition at line 2232 of file AArch64FrameLowering.cpp.
References llvm::AArch64FunctionInfo::getCalleeSaveBaseToFrameRecordOffset(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), llvm::Function::getCallingConv(), llvm::StackOffset::getFixed(), getFixedObjectSize(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), and llvm::MachineFunction::getSubtarget().
Referenced by llvm::AArch64FrameLowering::getSEHFrameIndexOffset(), and llvm::AArch64FrameLowering::resolveFrameOffsetReference().
|
static |
Definition at line 2408 of file AArch64FrameLowering.cpp.
References llvm::getKillRegState(), llvm::MachineFunction::getRegInfo(), and llvm::MachineRegisterInfo::isLiveIn().
Referenced by llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
static |
Definition at line 678 of file AArch64FrameLowering.cpp.
References CASE.
|
static |
Definition at line 2246 of file AArch64FrameLowering.cpp.
References llvm::StackOffset::getFixed(), and llvm::MachineFunction::getFrameInfo().
Referenced by llvm::AArch64FrameLowering::getFrameIndexReferencePreferSP(), llvm::AArch64FrameLowering::getSEHFrameIndexOffset(), and llvm::AArch64FrameLowering::resolveFrameOffsetReference().
|
static |
returns true if there are any SVE callee saves.
Definition at line 3176 of file AArch64FrameLowering.cpp.
References assert(), contains(), llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MachineFrameInfo::isCalleeSavedInfoValid(), llvm::max(), and llvm::min().
Referenced by determineSVEStackObjectOffsets().
|
static |
Returns the size of the entire SVE stackframe (calleesaves + spills).
Definition at line 398 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getInfo(), llvm::StackOffset::getScalable(), and llvm::AArch64FunctionInfo::getStackSizeSVE().
Referenced by llvm::AArch64FrameLowering::canUseRedZone(), llvm::AArch64FrameLowering::emitEpilogue(), llvm::AArch64FrameLowering::emitPrologue(), and llvm::AArch64FrameLowering::resolveFrameOffsetReference().
|
static |
Definition at line 584 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addCFIIndex(), llvm::MachineFunction::addFrameInst(), llvm::BuildMI(), llvm::MCCFIInstruction::createSameValue(), and MBB.
Referenced by llvm::AArch64FrameLowering::resetCFIToInitialState().
|
static |
Definition at line 1843 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addCFIIndex(), llvm::MachineFunction::addFrameInst(), llvm::BuildMI(), llvm::MachineInstrBuilder::copyImplicitOps(), llvm::MCCFIInstruction::createNegateRAState(), DL, llvm::MachineBasicBlock::end(), llvm::MachineBasicBlock::erase(), llvm::MachineInstr::FrameDestroy, llvm::MachineBasicBlock::getFirstTerminator(), llvm::MachineFunction::getInfo(), llvm::AArch64Subtarget::getInstrInfo(), llvm::MachineFunction::getSubtarget(), MBB, MBBI, llvm::MachineInstrBuilder::setMIFlag(), llvm::MachineInstrBuilder::setMIFlags(), and TII.
Referenced by llvm::AArch64FrameLowering::emitEpilogue().
|
static |
Definition at line 977 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::BuildMI(), DL, llvm::MachineBasicBlock::getParent(), llvm::AArch64Subtarget::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), I, llvm::RISCVMatInt::Imm, llvm::MachineBasicBlock::insertAfter(), LLVM_FALLTHROUGH, llvm_unreachable, MBB, MBBI, llvm::MachineInstrBuilder::setMIFlag(), and TII.
Referenced by convertCalleeSaveRestoreToSPPrePostIncDec(), llvm::AArch64FrameLowering::restoreCalleeSavedRegisters(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
static |
Returns true if Reg1 and Reg2 cannot be paired using a ldp/stp instruction.
WindowsCFI requires that only consecutive registers can be paired. LR and FP need to be allocated together when the frame needs to save the frame-record. This means any other register pairing with LR is invalid.
Definition at line 2457 of file AArch64FrameLowering.cpp.
References invalidateWindowsRegisterPairing().
Referenced by computeCalleeSaveRegisterPairs().
|
static |
Definition at line 2427 of file AArch64FrameLowering.cpp.
Referenced by computeCalleeSaveRegisterPairs(), and invalidateRegisterPairing().
|
static |
Definition at line 1881 of file AArch64FrameLowering.cpp.
References llvm::ISD::CATCHRET, llvm::ISD::CLEANUPRET, and MI.
Referenced by llvm::AArch64FrameLowering::emitEpilogue().
|
static |
Definition at line 1287 of file AArch64FrameLowering.cpp.
References llvm::MachineInstr::FrameDestroy, llvm::MachineInstr::FrameSetup, and I.
Referenced by llvm::AArch64FrameLowering::emitEpilogue().
|
static |
Definition at line 1282 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getSubtarget().
Referenced by llvm::AArch64FrameLowering::assignCalleeSavedSpillSlots(), and computeCalleeSaveRegisterPairs().
|
static |
Definition at line 1300 of file AArch64FrameLowering.cpp.
References llvm::any_of(), llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getSubtarget(), llvm::Function::hasFnAttribute(), Info, llvm::AArch64Subtarget::isXRegisterReserved(), and llvm::report_fatal_error().
Referenced by llvm::AArch64FrameLowering::emitEpilogue(), llvm::AArch64FrameLowering::emitPrologue(), and llvm::AArch64FrameLowering::resetCFIToInitialState().
|
static |
Definition at line 887 of file AArch64FrameLowering.cpp.
References F, llvm::MachineFunction::getFunction(), llvm::TargetMachine::getMCAsmInfo(), llvm::MachineFunction::getTarget(), and llvm::MCAsmInfo::usesWindowsCFI().
Referenced by llvm::AArch64FrameLowering::assignCalleeSavedSpillSlots(), computeCalleeSaveRegisterPairs(), llvm::AArch64FrameLowering::emitEpilogue(), llvm::AArch64FrameLowering::emitPrologue(), llvm::AArch64FrameLowering::restoreCalleeSavedRegisters(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
static |
Definition at line 2418 of file AArch64FrameLowering.cpp.
References Attrs, llvm::Function::getAttributes(), llvm::Function::getCallingConv(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getSubtarget(), llvm::AArch64Subtarget::getTargetLowering(), llvm::AArch64Subtarget::isTargetMachO(), llvm::AArch64TargetLowering::supportSwiftError(), and llvm::CallingConv::SwiftTail.
Referenced by computeCalleeSaveRegisterPairs().
|
static |
Definition at line 870 of file AArch64FrameLowering.cpp.
References F, llvm::MachineFunction::getFunction(), llvm::MachineFunction::getSubtarget(), and llvm::AArch64Subtarget::isTargetWindows().
Referenced by llvm::AArch64FrameLowering::determineCalleeSaves(), and llvm::AArch64FrameLowering::emitPrologue().
|
static |
This is the biggest offset to the stack pointer we can encode in aarch64 instructions (without using a separate calculation and a temp register).
Note that the exception here are vector stores/loads which cannot encode any displacements (see estimateRSStackSizeLimit(), isAArch64FrameOffsetLegal()).
Definition at line 344 of file AArch64FrameLowering.cpp.
Referenced by estimateRSStackSizeLimit(), and llvm::AArch64FrameLowering::hasFP().
cl::opt<bool> EnableHomogeneousPrologEpilog("homogeneous-prolog-epilog", cl::init(false), cl::ZeroOrMore, cl::Hidden, cl::desc("Emit homogeneous prologue and epilogue for the size " "optimization (default = off)")) |
|
static |
Referenced by llvm::AArch64FrameLowering::canUseRedZone().
|
static |
Referenced by llvm::AArch64FrameLowering::orderFrameObjects().
|
static |
Referenced by llvm::AArch64FrameLowering::restoreCalleeSavedRegisters().