LLVM 20.0.0git
|
#include "AArch64FrameLowering.h"
#include "AArch64InstrInfo.h"
#include "AArch64MachineFunctionInfo.h"
#include "AArch64RegisterInfo.h"
#include "AArch64Subtarget.h"
#include "MCTargetDesc/AArch64AddressingModes.h"
#include "MCTargetDesc/AArch64MCTargetDesc.h"
#include "Utils/AArch64SMEAttributes.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/ValueTracking.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/FormatVariadic.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 <optional>
#include <vector>
Go to the source code of this file.
Classes | |
struct | StackAccess |
Macros | |
#define | DEBUG_TYPE "frame-info" |
#define | CASE(n) |
#define | CASE(n) |
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 > | 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::Hidden, cl::desc("Emit homogeneous prologue and epilogue for the size " "optimization (default = off)")) |
static cl::opt< unsigned > | StackHazardRemarkSize ("aarch64-stack-hazard-remark-size", cl::init(0), cl::Hidden) |
static cl::opt< bool > | StackHazardInNonStreaming ("aarch64-stack-hazard-in-non-streaming", cl::init(false), cl::Hidden) |
static cl::opt< bool > | DisableMultiVectorSpillFill ("aarch64-disable-multivector-spill-fill", cl::desc("Disable use of LD/ST pairs for SME2 or SVE2p1"), cl::init(false), cl::Hidden) |
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). | |
#define CASE | ( | n | ) |
#define CASE | ( | n | ) |
#define DEBUG_TYPE "frame-info" |
Definition at line 257 of file AArch64FrameLowering.cpp.
|
static |
Definition at line 2982 of file AArch64FrameLowering.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), CC, contains(), llvm::CallingConv::CXX_FAST_TLS, llvm::ArrayRef< T >::empty(), llvm::SmallVectorTemplateCommon< T, typename >::end(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), llvm::Function::getCallingConv(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::MachineFrameInfo::getObjectAlign(), llvm::AArch64FunctionInfo::getPredicateRegForFillSpill(), getStackHazardSize(), llvm::AArch64FunctionInfo::getSVECalleeSavedStackSize(), llvm::AArch64FunctionInfo::hasCalleeSaveStackFreeSpace(), llvm::AArch64FunctionInfo::hasStackHazardSlotIndex(), llvm::AArch64FunctionInfo::hasSwiftAsyncContext(), invalidateRegisterPairing(), invalidateWindowsRegisterPairing(), llvm::AArch64InstrInfo::isFpOrNEON(), isTargetWindows(), llvm_unreachable, needsWinCFI(), llvm::Offset, llvm::CallingConv::PreserveAll, llvm::CallingConv::PreserveMost, produceCompactUnwindFrame(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::AArch64FunctionInfo::setCalleeSaveBaseToFrameRecordOffset(), llvm::MachineFrameInfo::setObjectAlignment(), llvm::ArrayRef< T >::size(), TRI, and llvm::CallingConv::Win64.
Referenced by llvm::AArch64FrameLowering::restoreCalleeSavedRegisters(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
static |
Definition at line 1438 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::MachineInstr::FrameDestroy, llvm::StackOffset::getFixed(), llvm::TypeSize::getFixed(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getFixedValue(), llvm::MachineBasicBlock::getParent(), InsertSEH(), llvm::AArch64InstrInfo::isSEHInstruction(), isVGInstruction(), llvm_unreachable, MBB, MBBI, requiresSaveVG(), llvm::MachineInstrBuilder::setMemRefs(), llvm::MachineInstrBuilder::setMIFlags(), Success, and TII.
Referenced by llvm::AArch64FrameLowering::emitEpilogue(), and llvm::AArch64FrameLowering::emitPrologue().
|
static |
Definition at line 4100 of file AArch64FrameLowering.cpp.
References llvm::alignTo(), assert(), llvm::dbgs(), 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::Offset, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::report_fatal_error(), llvm::TargetStackID::ScalableVector, and llvm::MachineFrameInfo::setObjectOffset().
|
static |
Definition at line 727 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::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 1701 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addCFIIndex(), llvm::MachineFunction::addFrameInst(), llvm::BuildMI(), llvm::MCCFIInstruction::cfiDefCfa(), DL, FramePtr, llvm::MachineInstr::FrameSetup, llvm::AArch64FunctionInfo::getCalleeSaveBaseToFrameRecordOffset(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), llvm::MachineFunction::getInfo(), llvm::AArch64Subtarget::getInstrInfo(), llvm::AArch64Subtarget::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), MBB, MBBI, llvm::MachineInstrBuilder::setMIFlags(), TII, and TRI.
Referenced by llvm::AArch64FrameLowering::emitPrologue().
|
static |
Definition at line 1678 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 1639 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().
MachineBasicBlock::iterator emitVGSaveRestore | ( | MachineBasicBlock::iterator | II, |
const AArch64FrameLowering * | TFI | ||
) |
Definition at line 4674 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addCFIIndex(), llvm::MachineFunction::addFrameInst(), assert(), llvm::BuildMI(), llvm::MCCFIInstruction::createOffset(), llvm::MCCFIInstruction::createRestore(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::MachineFrameInfo::getObjectOffset(), llvm::TargetFrameLowering::getOffsetOfLocalArea(), llvm::MachineBasicBlock::getParent(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::AArch64FunctionInfo::getStreamingVGIdx(), llvm::MachineFunction::getSubtarget(), llvm::AArch64FunctionInfo::getVGIdx(), llvm::SMEAttrs::hasStreamingBody(), llvm::SMEAttrs::hasStreamingInterface(), II, MBB, MI, llvm::Offset, TII, and TRI.
Referenced by llvm::AArch64FrameLowering::processFunctionBeforeFrameIndicesReplaced().
bool enableMultiVectorSpillFill | ( | const AArch64Subtarget & | Subtarget, |
MachineFunction & | MF | ||
) |
Definition at line 2965 of file AArch64FrameLowering.cpp.
References DisableMultiVectorSpillFill, llvm::MachineFunction::getFunction(), llvm::SMEAttrs::hasStreamingBody(), llvm::SMEAttrs::hasStreamingInterface(), and llvm::AArch64Subtarget::isStreaming().
Referenced by llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::AArch64FrameLowering::restoreCalleeSavedRegisters(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
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 396 of file AArch64FrameLowering.cpp.
References llvm::AArch64FrameOffsetCannotUpdate, DefaultSafeSPDisplacement, llvm::isAArch64FrameOffsetLegal(), MBB, MI, and llvm::Offset.
Referenced by llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::ARMFrameLowering::determineCalleeSaves(), and llvm::CSKYFrameLowering::determineCalleeSaves().
Definition at line 2954 of file AArch64FrameLowering.cpp.
References llvm::BitVector::test().
Referenced by llvm::AArch64FrameLowering::determineCalleeSaves().
|
static |
Definition at line 1069 of file AArch64FrameLowering.cpp.
References llvm::LivePhysRegs::available(), llvm::MachineFunction::front(), llvm::Function::getCallingConv(), llvm::MachineFunction::getFunction(), getLiveRegsForEntryMBB(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getRegInfo(), llvm::AArch64Subtarget::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), MBB, MRI, llvm::CallingConv::PreserveNone, and TRI.
Referenced by buildScratchExecCopy(), llvm::AArch64FrameLowering::canUseAsPrologue(), llvm::SIFrameLowering::emitEpilogue(), llvm::SIFrameLowering::emitPrologue(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
static |
Definition at line 1565 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(), and llvm::AArch64FrameLowering::emitPrologue().
|
static |
Definition at line 1376 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 299 of file AArch64FrameLowering.cpp.
References llvm::MachineBasicBlock::end(), llvm::AArch64FunctionInfo::getArgumentStackToRestore(), llvm::MachineOperand::getImm(), llvm::MachineFunction::getInfo(), llvm::MachineBasicBlock::getLastNonDebugInstr(), llvm::AArch64InstrInfo::isTailCallReturnInst(), MBB, and MBBI.
Referenced by llvm::AArch64FrameLowering::emitEpilogue(), and llvm::ARMFrameLowering::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 428 of file AArch64FrameLowering.cpp.
References llvm::alignTo(), llvm::Function::getAttributes(), llvm::MachineFunction::getFunction(), llvm::AArch64FunctionInfo::getTailCallReservedStack(), llvm::AArch64FunctionInfo::getVarArgsGPRSize(), llvm::AttributeList::hasAttrSomewhere(), 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 2678 of file AArch64FrameLowering.cpp.
References F, llvm::AArch64FunctionInfo::getCalleeSaveBaseToFrameRecordOffset(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), 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 3621 of file AArch64FrameLowering.cpp.
References getMMOFrameID(), and MI.
Referenced by llvm::AArch64FrameLowering::orderFrameObjects().
|
static |
Collect live registers from the end of MI's
parent up to (including) MI
in LiveRegs
.
Definition at line 1724 of file AArch64FrameLowering.cpp.
References llvm::LivePhysRegs::addLiveOuts(), llvm::MachineBasicBlock::instr_end(), llvm::make_range(), MBB, MI, llvm::reverse(), and llvm::LivePhysRegs::stepBackward().
Referenced by llvm::AArch64FrameLowering::emitPrologue().
|
static |
Definition at line 1048 of file AArch64FrameLowering.cpp.
References llvm::LivePhysRegs::addLiveIns(), llvm::LivePhysRegs::addReg(), llvm::MachineRegisterInfo::getCalleeSavedRegs(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getRegInfo(), and MBB.
Referenced by llvm::AArch64FrameLowering::canUseAsPrologue(), and findScratchNonCalleeSaveRegister().
|
static |
Definition at line 3601 of file AArch64FrameLowering.cpp.
References llvm::MachineFrameInfo::getObjectAllocation(), llvm::MachineFrameInfo::getObjectIndexBegin(), llvm::MachineFrameInfo::getObjectIndexEnd(), llvm::MachineMemOperand::getPseudoValue(), llvm::getUnderlyingObject(), and llvm::MachineMemOperand::getValue().
Referenced by getLdStFrameID().
|
static |
Definition at line 2853 of file AArch64FrameLowering.cpp.
References llvm::getKillRegState(), llvm::MachineFunction::getRegInfo(), and llvm::MachineRegisterInfo::isLiveIn().
Referenced by llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
static |
Definition at line 920 of file AArch64FrameLowering.cpp.
References CASE.
|
static |
Definition at line 1618 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getSubtarget().
Referenced by llvm::AArch64FrameLowering::assignCalleeSavedSpillSlots(), computeCalleeSaveRegisterPairs(), and llvm::AArch64FrameLowering::determineCalleeSaves().
|
static |
Definition at line 2692 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 4072 of file AArch64FrameLowering.cpp.
References assert(), contains(), llvm::MachineFrameInfo::getCalleeSavedInfo(), and llvm::MachineFrameInfo::isCalleeSavedInfoValid().
Referenced by determineSVEStackObjectOffsets().
|
static |
Returns the size of the entire SVE stackframe (calleesaves + spills).
Definition at line 448 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(), llvm::AArch64FrameLowering::getFrameIndexReferenceFromSP(), and llvm::AArch64FrameLowering::resolveFrameOffsetReference().
|
static |
Definition at line 673 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 1232 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::BuildMI(), DL, llvm::MachineBasicBlock::getParent(), llvm::AArch64Subtarget::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), I, llvm::MachineBasicBlock::insertAfter(), 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 2905 of file AArch64FrameLowering.cpp.
References invalidateWindowsRegisterPairing(), and TRI.
Referenced by computeCalleeSaveRegisterPairs().
|
static |
Definition at line 2874 of file AArch64FrameLowering.cpp.
References TRI.
Referenced by computeCalleeSaveRegisterPairs(), and invalidateRegisterPairing().
|
static |
Definition at line 2266 of file AArch64FrameLowering.cpp.
References MI.
Referenced by llvm::X86RegisterInfo::eliminateFrameIndex(), llvm::AArch64FrameLowering::emitEpilogue(), llvm::X86FrameLowering::emitEpilogue(), and llvm::X86FrameLowering::restoreCalleeSavedRegisters().
|
static |
Definition at line 1623 of file AArch64FrameLowering.cpp.
References llvm::MachineInstr::FrameDestroy, llvm::MachineInstr::FrameSetup, and I.
Referenced by llvm::AArch64FrameLowering::emitEpilogue(), and llvm::AArch64FrameLowering::emitPrologue().
|
static |
Definition at line 1614 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getSubtarget(), and isTargetWindows().
Referenced by llvm::AArch64FrameLowering::assignCalleeSavedSpillSlots(), computeCalleeSaveRegisterPairs(), and isTargetWindows().
bool isVGInstruction | ( | MachineBasicBlock::iterator | MBBI | ) |
Definition at line 1415 of file AArch64FrameLowering.cpp.
References MBBI, and requiresGetVGCall().
Referenced by convertCalleeSaveRestoreToSPPrePostIncDec(), and llvm::AArch64FrameLowering::emitPrologue().
|
static |
Definition at line 1142 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::ARMFrameLowering::emitPrologue(), llvm::AArch64FrameLowering::restoreCalleeSavedRegisters(), and llvm::AArch64FrameLowering::spillCalleeSavedRegisters().
|
inlinestatic |
Definition at line 5184 of file AArch64FrameLowering.cpp.
References OS, and StackAccess::print().
|
static |
Definition at line 2863 of file AArch64FrameLowering.cpp.
References llvm::Function::getAttributes(), llvm::Function::getCallingConv(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getSubtarget(), llvm::AArch64FunctionInfo::getSVECalleeSavedStackSize(), llvm::AArch64Subtarget::getTargetLowering(), llvm::AArch64Subtarget::isTargetMachO(), requiresSaveVG(), llvm::AArch64TargetLowering::supportSwiftError(), and llvm::CallingConv::SwiftTail.
Referenced by computeCalleeSaveRegisterPairs(), and llvm::AArch64FrameLowering::determineCalleeSaves().
bool requiresGetVGCall | ( | MachineFunction & | MF | ) |
Definition at line 1397 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getInfo(), llvm::MachineFunction::getSubtarget(), and llvm::AArch64FunctionInfo::hasStreamingModeChanges().
Referenced by llvm::AArch64FrameLowering::emitPrologue(), and isVGInstruction().
|
static |
Definition at line 1403 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getInfo(), llvm::MachineFunction::getSubtarget(), and llvm::AArch64FunctionInfo::hasStreamingModeChanges().
Referenced by llvm::AArch64FrameLowering::assignCalleeSavedSpillSlots(), convertCalleeSaveRestoreToSPPrePostIncDec(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::AArch64FrameLowering::emitPrologue(), llvm::AArch64FrameLowering::processFunctionBeforeFrameIndicesReplaced(), and produceCompactUnwindFrame().
STATISTIC | ( | NumRedZoneFunctions | , |
"Number of functions using red zone" | |||
) |
|
static |
Definition at line 775 of file AArch64FrameLowering.cpp.
References Size.
|
static |
Definition at line 1132 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getInfo(), llvm::MachineFunction::getSubtarget(), and llvm::AArch64Subtarget::isTargetWindows().
Referenced by llvm::AArch64FrameLowering::determineCalleeSaves(), and llvm::AArch64FrameLowering::emitPrologue().
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 391 of file AArch64FrameLowering.cpp.
Referenced by estimateRSStackSizeLimit(), and llvm::AArch64FrameLowering::hasFPImpl().
|
static |
Referenced by enableMultiVectorSpillFill().
cl::opt< bool > EnableHomogeneousPrologEpilog("homogeneous-prolog-epilog", cl::Hidden, cl::desc("Emit homogeneous prologue and epilogue for the size " "optimization (default = off)")) | ( | "homogeneous-prolog-epilog" | , |
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 |
|
static |