LLVM: llvm::MachineFrameInfo Class Reference (original) (raw)

The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted. More...

#include "[llvm/CodeGen/MachineFrameInfo.h](MachineFrameInfo%5F8h%5Fsource.html)"

Public Types
enum SSPLayoutKind { SSPLK_None, SSPLK_LargeArray, SSPLK_SmallArray, SSPLK_AddrOf }
Stack Smashing Protection (SSP) rules require that vulnerable stack allocations are located close the stack protector. More...
Public Member Functions
MachineFrameInfo (Align StackAlignment, bool StackRealignable, bool ForcedRealign)
MachineFrameInfo (const MachineFrameInfo &)=delete
bool isStackRealignable () const
bool hasStackObjects () const
Return true if there are any stack objects in this function.
bool hasVarSizedObjects () const
This method may be called any time after instruction selection is complete to determine if the stack frame for this function contains any variable sized objects.
int getStackProtectorIndex () const
Return the index for the stack protector object.
void setStackProtectorIndex (int I)
bool hasStackProtectorIndex () const
int getFunctionContextIndex () const
Return the index for the function context object.
void setFunctionContextIndex (int I)
bool hasFunctionContextIndex () const
bool isFrameAddressTaken () const
This method may be called any time after instruction selection is complete to determine if there is a call to @llvm.frameaddress in this function.
void setFrameAddressIsTaken (bool T)
bool isReturnAddressTaken () const
This method may be called any time after instruction selection is complete to determine if there is a call to @llvm.returnaddress in this function.
void setReturnAddressIsTaken (bool s)
bool hasStackMap () const
This method may be called any time after instruction selection is complete to determine if there is a call to builtin @llvm.experimental.stackmap.
void setHasStackMap (bool s=true)
bool hasPatchPoint () const
This method may be called any time after instruction selection is complete to determine if there is a call to builtin @llvm.experimental.patchpoint.
void setHasPatchPoint (bool s=true)
bool needsSplitStackProlog () const
Return true if this function requires a split stack prolog, even if it uses no stack space.
int getObjectIndexBegin () const
Return the minimum frame object index.
int getObjectIndexEnd () const
Return one past the maximum frame object index.
unsigned getNumFixedObjects () const
Return the number of fixed objects.
unsigned getNumObjects () const
Return the number of objects.
void mapLocalFrameObject (int ObjectIndex, int64_t Offset)
Map a frame index into the local object block.
std::pair< int, int64_t > getLocalFrameObjectMap (int i) const
Get the local offset mapping for a for an object.
int64_t getLocalFrameObjectCount () const
Return the number of objects allocated into the local object block.
void setLocalFrameSize (int64_t sz)
Set the size of the local object blob.
int64_t getLocalFrameSize () const
Get the size of the local object blob.
void setLocalFrameMaxAlign (Align Alignment)
Required alignment of the local object blob, which is the strictest alignment of any object in it.
Align getLocalFrameMaxAlign () const
Return the required alignment of the local object blob.
bool getUseLocalStackAllocationBlock () const
Get whether the local allocation blob should be allocated together or let PEI allocate the locals in it directly.
void setUseLocalStackAllocationBlock (bool v)
setUseLocalStackAllocationBlock - Set whether the local allocation blob should be allocated together or let PEI allocate the locals in it directly.
bool isObjectPreAllocated (int ObjectIdx) const
Return true if the object was pre-allocated into the local block.
int64_t getObjectSize (int ObjectIdx) const
Return the size of the specified object.
void setObjectSize (int ObjectIdx, int64_t Size)
Change the size of the specified stack object.
Align getObjectAlign (int ObjectIdx) const
Return the alignment of the specified stack object.
bool contributesToMaxAlignment (uint8_t StackID)
Should this stack ID be considered in MaxAlignment.
bool hasScalableStackID (int ObjectIdx) const
bool isScalableStackID (uint8_t StackID) const
void setObjectAlignment (int ObjectIdx, Align Alignment)
setObjectAlignment - Change the alignment of the specified stack object.
const AllocaInst * getObjectAllocation (int ObjectIdx) const
Return the underlying Alloca of the specified stack object if it exists.
void clearObjectAllocation (int ObjectIdx)
Remove the underlying Alloca of the specified stack object if it exists.
int64_t getObjectOffset (int ObjectIdx) const
Return the assigned stack offset of the specified object from the incoming stack pointer.
bool isObjectZExt (int ObjectIdx) const
void setObjectZExt (int ObjectIdx, bool IsZExt)
bool isObjectSExt (int ObjectIdx) const
void setObjectSExt (int ObjectIdx, bool IsSExt)
void setObjectOffset (int ObjectIdx, int64_t SPOffset)
Set the stack frame offset of the specified object.
SSPLayoutKind getObjectSSPLayout (int ObjectIdx) const
void setObjectSSPLayout (int ObjectIdx, SSPLayoutKind Kind)
uint64_t getStackSize () const
Return the number of bytes that must be allocated to hold all of the fixed size frame objects.
void setStackSize (uint64_t Size)
Set the size of the stack.
LLVM_ABI uint64_t estimateStackSize (const MachineFunction &MF) const
Estimate and return the size of the stack frame.
int64_t getOffsetAdjustment () const
Return the correction for frame offsets.
void setOffsetAdjustment (int64_t Adj)
Set the correction for frame offsets.
Align getMaxAlign () const
Return the alignment in bytes that this function must be aligned to, which is greater than the default stack alignment provided by the target.
LLVM_ABI void ensureMaxAlignment (Align Alignment)
Make sure the function is at least Align bytes aligned.
bool shouldRealignStack () const
Return true if stack realignment is forced by function attributes or if the stack alignment.
bool adjustsStack () const
Return true if this function adjusts the stack – e.g., when calling another function.
void setAdjustsStack (bool V)
bool hasCalls () const
Return true if the current function has any function calls.
void setHasCalls (bool V)
bool hasOpaqueSPAdjustment () const
Returns true if the function contains opaque dynamic stack adjustments.
void setHasOpaqueSPAdjustment (bool B)
bool hasCopyImplyingStackAdjustment () const
Returns true if the function contains operations which will lower down to instructions which manipulate the stack pointer.
void setHasCopyImplyingStackAdjustment (bool B)
bool hasVAStart () const
Returns true if the function calls the llvm.va_start intrinsic.
void setHasVAStart (bool B)
bool hasMustTailInVarArgFunc () const
Returns true if the function is variadic and contains a musttail call.
void setHasMustTailInVarArgFunc (bool B)
bool hasTailCall () const
Returns true if the function contains a tail call.
void setHasTailCall (bool V=true)
LLVM_ABI void computeMaxCallFrameSize (MachineFunction &MF, std::vector< MachineBasicBlock::iterator > *FrameSDOps=nullptr)
Computes the maximum size of a callframe.
uint64_t getMaxCallFrameSize () const
Return the maximum size of a call frame that must be allocated for an outgoing function call.
bool isMaxCallFrameSizeComputed () const
void setMaxCallFrameSize (uint64_t S)
unsigned getCVBytesOfCalleeSavedRegisters () const
Returns how many bytes of callee-saved registers the target pushed in the prologue.
void setCVBytesOfCalleeSavedRegisters (unsigned S)
LLVM_ABI int CreateFixedObject (uint64_t Size, int64_t SPOffset, bool IsImmutable, bool isAliased=false)
Create a new object at a fixed location on the stack.
LLVM_ABI int CreateFixedSpillStackObject (uint64_t Size, int64_t SPOffset, bool IsImmutable=false)
Create a spill slot at a fixed location on the stack.
bool isFixedObjectIndex (int ObjectIdx) const
Returns true if the specified index corresponds to a fixed stack object.
bool isAliasedObjectIndex (int ObjectIdx) const
Returns true if the specified index corresponds to an object that might be pointed to by an LLVM IR value.
void setIsAliasedObjectIndex (int ObjectIdx, bool IsAliased)
Set "maybe pointed to by an LLVM IR value" for an object.
bool isImmutableObjectIndex (int ObjectIdx) const
Returns true if the specified index corresponds to an immutable object.
void setIsImmutableObjectIndex (int ObjectIdx, bool IsImmutable)
Marks the immutability of an object.
bool isSpillSlotObjectIndex (int ObjectIdx) const
Returns true if the specified index corresponds to a spill slot.
bool isStatepointSpillSlotObjectIndex (int ObjectIdx) const
bool isCalleeSavedObjectIndex (int ObjectIdx) const
void setIsCalleeSavedObjectIndex (int ObjectIdx, bool IsCalleeSaved)
uint8_t getStackID (int ObjectIdx) const
void setStackID (int ObjectIdx, uint8_t ID)
bool isDeadObjectIndex (int ObjectIdx) const
Returns true if the specified index corresponds to a dead object.
bool isVariableSizedObjectIndex (int ObjectIdx) const
Returns true if the specified index corresponds to a variable sized object.
void markAsStatepointSpillSlotObjectIndex (int ObjectIdx)
LLVM_ABI int CreateStackObject (uint64_t Size, Align Alignment, bool isSpillSlot, const AllocaInst *Alloca=nullptr, uint8_t ID=0)
Create a new statically sized stack object, returning a nonnegative identifier to represent it.
LLVM_ABI int CreateSpillStackObject (uint64_t Size, Align Alignment)
Create a new statically sized stack object that represents a spill slot, returning a nonnegative identifier to represent it.
void RemoveStackObject (int ObjectIdx)
Remove or mark dead a statically sized stack object.
LLVM_ABI int CreateVariableSizedObject (Align Alignment, const AllocaInst *Alloca)
Notify the MachineFrameInfo object that a variable sized object has been created.
const std::vector< CalleeSavedInfo > & getCalleeSavedInfo () const
Returns a reference to call saved info vector for the current function.
std::vector< CalleeSavedInfo > & getCalleeSavedInfo ()
void setCalleeSavedInfo (std::vector< CalleeSavedInfo > CSI)
Used by prolog/epilog inserter to set the function's callee saved information.
bool isCalleeSavedInfoValid () const
Has the callee saved info been calculated yet?
void setCalleeSavedInfoValid (bool v)
const SaveRestorePoints & getRestorePoints () const
const SaveRestorePoints & getSavePoints () const
void setSavePoints (SaveRestorePoints NewSavePoints)
void setRestorePoints (SaveRestorePoints NewRestorePoints)
void clearSavePoints ()
void clearRestorePoints ()
uint64_t getUnsafeStackSize () const
void setUnsafeStackSize (uint64_t Size)
LLVM_ABI BitVector getPristineRegs (const MachineFunction &MF) const
Return a set of physical registers that are pristine.
LLVM_ABI void print (const MachineFunction &MF, raw_ostream &OS) const
Used by the MachineFunction printer to print information about stack objects.
LLVM_ABI void dump (const MachineFunction &MF) const
dump - Print the function to stderr.

The MachineFrameInfo class represents an abstract stack frame until prolog/epilog code is inserted.

This class is key to allowing stack frame representation optimizations, such as frame pointer elimination. It also allows more mundane (but still important) optimizations, such as reordering of abstract objects on the stack frame.

To support this, the class assigns unique integer identifiers to stack objects requested clients. These identifiers are negative integers for fixed stack objects (such as arguments passed on the stack) or nonnegative for objects that may be reordered. Instructions which refer to stack objects use a special MO_FrameIndex operand to represent these frame indexes.

Because this class keeps track of all references to the stack frame, it knows when a variable sized object is allocated on the stack. This is the sole condition which prevents frame pointer elimination, which is an important optimization on register-poor architectures. Because original variable sized alloca's in the source program are the only source of variable sized stack objects, it is safe to decide whether there will be any variable sized objects before all stack objects are known (for example, register allocator spill code never needs variable sized objects).

When prolog/epilog code emission is performed, the final stack frame is built and the machine instructions are modified to refer to the actual stack offsets of the object, eliminating all MO_FrameIndex operands from the program.

Abstract Stack Frame Information

Definition at line 111 of file MachineFrameInfo.h.

SSPLayoutKind

Stack Smashing Protection (SSP) rules require that vulnerable stack allocations are located close the stack protector.

Enumerator
SSPLK_None Did not trigger a stack protector. No effect on data layout.
SSPLK_LargeArray Array or nested array >= SSP-buffer-size. Closest to the stack protector.
SSPLK_SmallArray Array or nested array < SSP-buffer-size. 2nd closest to the stack protector.
SSPLK_AddrOf The address of this allocation is exposed and triggered protection. 3rd closest to the protector.

Definition at line 115 of file MachineFrameInfo.h.

llvm::MachineFrameInfo::MachineFrameInfo ( Align StackAlignment, bool StackRealignable, bool ForcedRealign ) inlineexplicit

MachineFrameInfo() [2/2]

adjustsStack()

bool llvm::MachineFrameInfo::adjustsStack ( ) const inline

Return true if this function adjusts the stack – e.g., when calling another function.

This is only valid during and after prolog/epilog code insertion.

Definition at line 637 of file MachineFrameInfo.h.

Referenced by llvm::AArch64RegisterInfo::cannotEliminateFrame(), llvm::ARMBaseRegisterInfo::cannotEliminateFrame(), convertMFI(), llvm::PPCFrameLowering::determineFrameLayout(), llvm::LoongArchFrameLowering::emitPrologue(), llvm::Mips16FrameLowering::emitPrologue(), llvm::MipsSEFrameLowering::emitPrologue(), llvm::RISCVFrameLowering::emitPrologue(), llvm::SparcFrameLowering::emitPrologue(), llvm::X86FrameLowering::emitPrologue(), llvm::XtensaFrameLowering::emitPrologue(), estimateStackSize(), llvm::VEInstrInfo::expandGetStackTopPseudo(), and isXPLeafCandidate().

clearObjectAllocation()

void llvm::MachineFrameInfo::clearObjectAllocation ( int ObjectIdx) inline

Remove the underlying Alloca of the specified stack object if it exists.

This generally should not be used and is for reduction tooling.

Definition at line 540 of file MachineFrameInfo.h.

References assert().

clearRestorePoints()

void llvm::MachineFrameInfo::clearRestorePoints ( ) inline

clearSavePoints()

void llvm::MachineFrameInfo::clearSavePoints ( ) inline

computeMaxCallFrameSize()

Computes the maximum size of a callframe.

This only works for targets defining TargetInstrInfo::getCallFrameSetupOpcode(), getCallFrameDestroyOpcode(), and getFrameSize(). This is usually computed by the prologue epilogue inserter but some targets may call this to compute it earlier. If FrameSDOps is passed, the frame instructions in the MF will be inserted into it.

Definition at line 187 of file MachineFrameInfo.cpp.

References assert(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineFunction::getSubtarget(), MBB, MI, Size, and TII.

Referenced by llvm::ARMTargetLowering::finalizeLowering(), and llvm::AArch64Subtarget::mirFileLoaded().

contributesToMaxAlignment()

bool llvm::MachineFrameInfo::contributesToMaxAlignment ( uint8_t StackID) inline

CreateFixedObject()

int MachineFrameInfo::CreateFixedObject ( uint64_t Size,
int64_t SPOffset,
bool IsImmutable,
bool isAliased = false )

Create a new object at a fixed location on the stack.

All fixed objects should be created before other objects are created for efficiency. By default, fixed objects are not pointed to by LLVM IR values. This returns an index with a negative value.

Definition at line 83 of file MachineFrameInfo.cpp.

References assert(), clampStackAlignment(), llvm::commonAlignment(), and Size.

Referenced by llvm::X86FrameLowering::assignCalleeSavedSpillSlots(), CalculateTailCallArgDest(), llvm::XCoreFunctionInfo::createLRSpillSlot(), llvm::LanaiFrameLowering::determineCalleeSaves(), llvm::M68kFrameLowering::determineCalleeSaves(), llvm::PPCFrameLowering::determineCalleeSaves(), EmitTailCallStoreFPAndRetAddr(), EmitTailCallStoreRetAddr(), getOrCreateFixedStackObject(), llvm::SystemZELFFrameLowering::getOrCreateFramePointerSaveIndex(), llvm::SystemZXPLINKFrameLowering::getOrCreateFramePointerSaveIndex(), llvm::MSP430TargetLowering::getReturnAddressFrameIndex(), llvm::X86TargetLowering::getReturnAddressFrameIndex(), llvm::MIRParserImpl::initializeFrameInfo(), llvm::SITargetLowering::LowerCall(), llvm::HexagonTargetLowering::LowerFormalArguments(), llvm::LoongArchTargetLowering::LowerFormalArguments(), llvm::RISCVTargetLowering::LowerFormalArguments(), llvm::SystemZTargetLowering::LowerFormalArguments(), llvm::VETargetLowering::LowerFormalArguments(), llvm::XtensaTargetLowering::LowerFormalArguments(), llvm::AArch64CallLowering::lowerFormalArguments(), llvm::MipsCallLowering::lowerFormalArguments(), llvm::SparcTargetLowering::LowerFormalArguments_32(), llvm::SparcTargetLowering::LowerFormalArguments_64(), llvm::AArch64FrameLowering::processFunctionBeforeFrameFinalized(), llvm::MSP430FrameLowering::processFunctionBeforeFrameFinalized(), unpack64(), unpackF64OnLA32DSoftABI(), unpackF64OnRV32DSoftABI(), unpackFromMemLoc(), unpackFromMemLoc(), and unpackFromMemLoc().

CreateFixedSpillStackObject()

int MachineFrameInfo::CreateFixedSpillStackObject ( uint64_t Size,
int64_t SPOffset,
bool IsImmutable = false )

CreateSpillStackObject()

int MachineFrameInfo::CreateSpillStackObject ( uint64_t Size,
Align Alignment )

Create a new statically sized stack object that represents a spill slot, returning a nonnegative identifier to represent it.

Definition at line 66 of file MachineFrameInfo.cpp.

References clampStackAlignment(), CreateStackObject(), ensureMaxAlignment(), and Size.

Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot(), llvm::SIMachineFunctionInfo::allocateWWMSpill(), llvm::X86FrameLowering::assignCalleeSavedSpillSlots(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::CSKYFrameLowering::determineCalleeSaves(), llvm::HexagonFrameLowering::determineCalleeSaves(), llvm::MipsSEFrameLowering::determineCalleeSaves(), getZT0FrameIndex(), llvm::ARCFrameLowering::processFunctionBeforeFrameFinalized(), llvm::RISCVFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SIFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZELFFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized(), llvm::XCoreFrameLowering::processFunctionBeforeFrameFinalized(), and llvm::XtensaFrameLowering::processFunctionBeforeFrameFinalized().

CreateStackObject()

Create a new statically sized stack object, returning a nonnegative identifier to represent it.

Definition at line 51 of file MachineFrameInfo.cpp.

References assert(), clampStackAlignment(), contributesToMaxAlignment(), ensureMaxAlignment(), and Size.

Referenced by assignCalleeSavedSpillSlots(), llvm::AArch64FrameLowering::assignCalleeSavedSpillSlots(), llvm::SystemZXPLINKFrameLowering::assignCalleeSavedSpillSlots(), llvm::X86TargetLowering::BuildFILD(), llvm::MipsFunctionInfo::createEhDataRegsFI(), llvm::XCoreFunctionInfo::createEHSpillSlot(), llvm::XCoreFunctionInfo::createFPSpillSlot(), llvm::MipsFunctionInfo::createISRRegFI(), llvm::XCoreFunctionInfo::createLRSpillSlot(), createSiFivePreemptibleInterruptFrameEntries(), CreateSpillStackObject(), llvm::SelectionDAG::CreateStackTemporary(), llvm::LegalizerHelper::createStackTemporary(), llvm::PPCTargetLowering::EmitInstrWithCustomInserter(), llvm::X86TargetLowering::EmitInstrWithCustomInserter(), getAddressForMemoryInput(), llvm::RISCVMachineFunctionInfo::getMoveF64FrameIndex(), llvm::MipsFunctionInfo::getMoveF64ViaSpillFI(), llvm::SIMachineFunctionInfo::getScavengeFI(), llvm::CallLowering::handleAssignments(), llvm::MIRParserImpl::initializeFrameInfo(), llvm::CallLowering::insertSRetOutgoingArgument(), llvm::LoongArchTargetLowering::LowerCall(), llvm::RISCVTargetLowering::LowerCall(), llvm::SparcTargetLowering::LowerCall_32(), llvm::TargetLowering::LowerCallTo(), llvm::SparcTargetLowering::LowerF128_LibCallArg(), llvm::SparcTargetLowering::LowerF128Op(), llvm::InlineAsmLowering::lowerInlineAsm(), LowerINTRINSIC_W_CHAIN(), and llvm::X86FrameLowering::processFunctionBeforeFrameFinalized().

CreateVariableSizedObject()

dump()

ensureMaxAlignment()

void MachineFrameInfo::ensureMaxAlignment ( Align Alignment )

estimateStackSize()

Estimate and return the size of the stack frame.

Definition at line 137 of file MachineFrameInfo.cpp.

References adjustsStack(), llvm::alignTo(), llvm::TargetStackID::Default, llvm::TargetSubtargetInfo::getFrameLowering(), getMaxAlign(), getMaxCallFrameSize(), getObjectAlign(), getObjectIndexBegin(), getObjectIndexEnd(), getObjectOffset(), getObjectSize(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::TargetFrameLowering::getStackAlign(), getStackID(), llvm::MachineFunction::getSubtarget(), llvm::TargetFrameLowering::getTransientStackAlign(), llvm::TargetFrameLowering::hasReservedCallFrame(), hasVarSizedObjects(), isDeadObjectIndex(), and llvm::Offset.

Referenced by llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::CSKYFrameLowering::determineCalleeSaves(), llvm::XCoreFrameLowering::determineCalleeSaves(), llvm::PPCFrameLowering::determineFrameLayout(), llvm::MipsFrameLowering::estimateStackSize(), llvm::XCoreFunctionInfo::isLargeFrame(), isXPLeafCandidate(), llvm::RISCVFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZELFFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized(), llvm::X86FrameLowering::processFunctionBeforeFrameFinalized(), and llvm::XtensaFrameLowering::processFunctionBeforeFrameFinalized().

getCalleeSavedInfo() [1/2]

std::vector< CalleeSavedInfo > & llvm::MachineFrameInfo::getCalleeSavedInfo ( ) inline

getCalleeSavedInfo() [2/2]

Returns a reference to call saved info vector for the current function.

Definition at line 841 of file MachineFrameInfo.h.

Referenced by addCalleeSavedRegs(), llvm::LivePhysRegs::addLiveOutsNoPristines(), convertStackObjects(), llvm::XtensaRegisterInfo::eliminateFrameIndex(), llvm::MSP430FrameLowering::emitCalleeSavedFrameMoves(), llvm::X86FrameLowering::emitCalleeSavedFrameMoves(), llvm::ARCFrameLowering::emitEpilogue(), llvm::LoongArchFrameLowering::emitEpilogue(), llvm::MipsSEFrameLowering::emitEpilogue(), llvm::PPCFrameLowering::emitEpilogue(), llvm::RISCVFrameLowering::emitEpilogue(), llvm::Thumb1FrameLowering::emitEpilogue(), llvm::XtensaFrameLowering::emitEpilogue(), llvm::SystemZAsmPrinter::emitFunctionEntryLabel(), llvm::ARCFrameLowering::emitPrologue(), llvm::ARMFrameLowering::emitPrologue(), llvm::HexagonFrameLowering::emitPrologue(), llvm::LoongArchFrameLowering::emitPrologue(), llvm::Mips16FrameLowering::emitPrologue(), llvm::MipsSEFrameLowering::emitPrologue(), llvm::PPCFrameLowering::emitPrologue(), llvm::RISCVFrameLowering::emitPrologue(), llvm::SystemZELFFrameLowering::emitPrologue(), llvm::Thumb1FrameLowering::emitPrologue(), llvm::XtensaFrameLowering::emitPrologue(), emitSCSEpilogue(), emitSCSPrologue(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), llvm::TargetFrameLowering::getCalleeSaves(), llvm::LoongArchFrameLowering::getFirstSPAdjustAmount(), llvm::LoongArchFrameLowering::getFrameIndexReference(), llvm::RISCVFrameLowering::getFrameIndexReference(), getPristineRegs(), getSVECalleeSaveSlotRange(), llvm::Mips16InstrInfo::makeFrame(), llvm::MipsAsmPrinter::printSavedRegsBitmask(), llvm::PPCFrameLowering::processFunctionBeforeFrameFinalized(), llvm::RISCVFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized(), llvm::recomputeLivenessFlags(), llvm::PPCRegisterInfo::requiresFrameIndexScavenging(), llvm::AArch64FrameLowering::resetCFIToInitialState(), llvm::Mips16InstrInfo::restoreFrame(), updateLiveness(), and llvm::ARMFrameLowering::updateLRRestored().

getCVBytesOfCalleeSavedRegisters()

unsigned llvm::MachineFrameInfo::getCVBytesOfCalleeSavedRegisters ( ) const inline

getFunctionContextIndex()

int llvm::MachineFrameInfo::getFunctionContextIndex ( ) const inline

getLocalFrameMaxAlign()

Align llvm::MachineFrameInfo::getLocalFrameMaxAlign ( ) const inline

getLocalFrameObjectCount()

int64_t llvm::MachineFrameInfo::getLocalFrameObjectCount ( ) const inline

getLocalFrameObjectMap()

std::pair< int, int64_t > llvm::MachineFrameInfo::getLocalFrameObjectMap ( int i) const inline

getLocalFrameSize()

int64_t llvm::MachineFrameInfo::getLocalFrameSize ( ) const inline

getMaxAlign()

Align llvm::MachineFrameInfo::getMaxAlign ( ) const inline

Return the alignment in bytes that this function must be aligned to, which is greater than the default stack alignment provided by the target.

Definition at line 623 of file MachineFrameInfo.h.

Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot(), convertMFI(), llvm::PPCFrameLowering::determineFrameLayout(), emitAlignedDPRCS2Spills(), llvm::SIFrameLowering::emitEntryFunctionPrologue(), llvm::SIFrameLowering::emitEpilogue(), llvm::HexagonDAGToDAGISel::emitFunctionEntryCode(), llvm::ARMFrameLowering::emitPrologue(), llvm::LoongArchFrameLowering::emitPrologue(), llvm::MipsSEFrameLowering::emitPrologue(), llvm::PPCFrameLowering::emitPrologue(), llvm::RISCVFrameLowering::emitPrologue(), llvm::SIFrameLowering::emitPrologue(), llvm::SparcFrameLowering::emitPrologue(), llvm::Thumb1FrameLowering::emitPrologue(), llvm::VEFrameLowering::emitPrologue(), llvm::XCoreFrameLowering::emitPrologue(), llvm::XtensaFrameLowering::emitPrologue(), estimateStackSize(), llvm::PPCFrameLowering::inlineStackProbe(), llvm::PPCRegisterInfo::lowerDynamicAlloc(), llvm::PPCRegisterInfo::prepareDynamicAlloca(), llvm::HexagonFrameLowering::processFunctionBeforeFrameFinalized(), and llvm::HexagonDAGToDAGISel::SelectFrameIndex().

getMaxCallFrameSize()

uint64_t llvm::MachineFrameInfo::getMaxCallFrameSize ( ) const inline

Return the maximum size of a call frame that must be allocated for an outgoing function call.

This is only available if CallFrameSetup/Destroy pseudo instructions are used by the target, and then only during or after prolog/epilog code insertion.

Definition at line 686 of file MachineFrameInfo.h.

References isMaxCallFrameSizeComputed().

Referenced by convertMFI(), llvm::PPCFrameLowering::determineFrameLayout(), llvm::SparcFrameLowering::emitPrologue(), estimateStackSize(), llvm::VEInstrInfo::expandGetStackTopPseudo(), llvm::X86FrameLowering::getWin64EHFrameIndexRef(), llvm::AArch64FrameLowering::getWinEHFuncletFrameSize(), llvm::RISCVFrameLowering::hasBP(), llvm::AArch64FrameLowering::hasFPImpl(), llvm::ARMFrameLowering::hasReservedCallFrame(), llvm::Mips16FrameLowering::hasReservedCallFrame(), llvm::MipsSEFrameLowering::hasReservedCallFrame(), llvm::Thumb1FrameLowering::hasReservedCallFrame(), llvm::PPCRegisterInfo::lowerDynamicAlloc(), llvm::PPCRegisterInfo::lowerDynamicAreaOffset(), and llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized().

getNumFixedObjects()

unsigned llvm::MachineFrameInfo::getNumFixedObjects ( ) const inline

getNumObjects()

unsigned llvm::MachineFrameInfo::getNumObjects ( ) const inline

getObjectAlign()

Align llvm::MachineFrameInfo::getObjectAlign ( int ObjectIdx) const inline

Return the alignment of the specified stack object.

Definition at line 495 of file MachineFrameInfo.h.

References assert().

Referenced by addFrameReference(), llvm::addFrameReference(), llvm::addFrameReference(), llvm::M68k::addFrameReference(), llvm::M68k::addMemOperand(), AdjustStackOffset(), AdjustStackOffset(), buildEpilogRestore(), buildPrologSpill(), llvm::SIRegisterInfo::buildSpillLoadStore(), llvm::SIRegisterInfo::buildVGPRSpillLoadStore(), computeCalleeSaveRegisterPairs(), llvm::TargetLowering::computeKnownBitsForFrameIndex(), convertStackObjects(), determineSVEStackSizes(), llvm::MipsRegisterInfo::eliminateFrameIndex(), llvm::PPCTargetLowering::EmitInstrWithCustomInserter(), llvm::TargetLoweringBase::emitPatchPoint(), estimateStackSize(), fixupFuncForFI(), foldInlineAsmMemOperand(), llvm::TargetInstrInfo::foldMemoryOperand(), llvm::X86InstrInfo::foldMemoryOperandImpl(), getFrameIndexMMO(), llvm::M68kFrameLowering::getFrameIndexReference(), llvm::R600FrameLowering::getFrameIndexReference(), llvm::X86FrameLowering::getFrameIndexReference(), getMemcpyLoadsAndStores(), getMemmoveLoadsAndStores(), llvm::MipsInstrInfo::GetMemOperand(), getMemsetStores(), llvm::inferAlignFromPtrInfo(), llvm::SelectionDAG::InferPtrAlign(), llvm::SelectionDAGISel::isOrEquivalentToAdd(), llvm::AArch64InstrInfo::loadRegFromStackSlot(), llvm::ARCInstrInfo::loadRegFromStackSlot(), llvm::ARMBaseInstrInfo::loadRegFromStackSlot(), llvm::AVRInstrInfo::loadRegFromStackSlot(), llvm::HexagonInstrInfo::loadRegFromStackSlot(), llvm::LoongArchInstrInfo::loadRegFromStackSlot(), llvm::MSP430InstrInfo::loadRegFromStackSlot(), llvm::RISCVInstrInfo::loadRegFromStackSlot(), llvm::SparcInstrInfo::loadRegFromStackSlot(), llvm::Thumb1InstrInfo::loadRegFromStackSlot(), llvm::Thumb2InstrInfo::loadRegFromStackSlot(), llvm::VEInstrInfo::loadRegFromStackSlot(), llvm::XCoreInstrInfo::loadRegFromStackSlot(), llvm::PPCInstrInfo::loadRegFromStackSlotNoUpd(), llvm::TargetLowering::LowerCallTo(), llvm::HexagonFrameLowering::orderFrameObjects(), llvm::X86FrameLowering::orderFrameObjects(), llvm::AArch64FrameLowering::processFunctionBeforeFrameFinalized(), scavengeStackSlot(), setAlignFlagsForFI(), llvm::SIFrameLowering::spillCalleeSavedRegisters(), spillIncomingStatepointValue(), llvm::AArch64InstrInfo::storeRegToStackSlot(), llvm::ARCInstrInfo::storeRegToStackSlot(), llvm::ARMBaseInstrInfo::storeRegToStackSlot(), llvm::AVRInstrInfo::storeRegToStackSlot(), llvm::HexagonInstrInfo::storeRegToStackSlot(), llvm::LoongArchInstrInfo::storeRegToStackSlot(), llvm::MSP430InstrInfo::storeRegToStackSlot(), llvm::RISCVInstrInfo::storeRegToStackSlot(), llvm::SparcInstrInfo::storeRegToStackSlot(), llvm::Thumb1InstrInfo::storeRegToStackSlot(), llvm::Thumb2InstrInfo::storeRegToStackSlot(), llvm::VEInstrInfo::storeRegToStackSlot(), llvm::XCoreInstrInfo::storeRegToStackSlot(), llvm::PPCInstrInfo::storeRegToStackSlotNoUpd(), and tryToElideArgumentCopy().

getObjectAllocation()

const AllocaInst * llvm::MachineFrameInfo::getObjectAllocation ( int ObjectIdx) const inline

getObjectIndexBegin()

int llvm::MachineFrameInfo::getObjectIndexBegin ( ) const inline

Return the minimum frame object index.

Definition at line 418 of file MachineFrameInfo.h.

Referenced by allSGPRSpillsAreDead(), allStackObjectsAreDead(), computeFreeStackSlots(), convertStackObjects(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::SystemZXPLINKFrameLowering::determineFrameLayout(), determineSVEStackSizes(), llvm::XtensaFrameLowering::emitPrologue(), estimateStackSize(), llvm::MipsFrameLowering::estimateStackSize(), llvm::yaml::FrameIndex::FrameIndex(), llvm::yaml::FrameIndex::getFI(), llvm::R600FrameLowering::getFrameIndexReference(), getMMOFrameID(), getOrCreateFixedStackObject(), isLikelyToHaveSVEStack(), printFrameIndex(), llvm::MSP430FrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZELFFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized(), and llvm::SIMachineFunctionInfo::removeDeadFrameIndices().

getObjectIndexEnd()

int llvm::MachineFrameInfo::getObjectIndexEnd ( ) const inline

Return one past the maximum frame object index.

Definition at line 421 of file MachineFrameInfo.h.

Referenced by allSGPRSpillsAreDead(), allStackObjectsAreDead(), computeFreeStackSlots(), convertStackObjects(), llvm::SSPLayoutInfo::copyToMachineFrameInfo(), determineSVEStackSizes(), llvm::SystemZELFFrameLowering::emitPrologue(), llvm::XtensaFrameLowering::emitPrologue(), estimateStackSize(), getMMOFrameID(), INITIALIZE_PASS(), INITIALIZE_PASS(), isLikelyToHaveSVEStack(), llvm::AArch64FrameLowering::orderFrameObjects(), llvm::HexagonFrameLowering::orderFrameObjects(), llvm::SystemZELFFrameLowering::orderFrameObjects(), llvm::X86FrameLowering::orderFrameObjects(), llvm::SIFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SIMachineFunctionInfo::removeDeadFrameIndices(), and llvm::AVRFrameAnalyzer::runOnMachineFunction().

getObjectOffset()

int64_t llvm::MachineFrameInfo::getObjectOffset ( int ObjectIdx) const inline

Return the assigned stack offset of the specified object from the incoming stack pointer.

Definition at line 548 of file MachineFrameInfo.h.

References assert(), and isDeadObjectIndex().

Referenced by llvm::AMDGPUTargetLowering::addTokenForArgument(), llvm::HexagonFrameLowering::assignCalleeSavedSpillSlots(), llvm::SIRegisterInfo::buildSpillLoadStore(), computeFreeStackSlots(), convertStackObjects(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::SystemZXPLINKFrameLowering::determineFrameLayout(), llvm::AArch64RegisterInfo::eliminateFrameIndex(), llvm::ARCRegisterInfo::eliminateFrameIndex(), llvm::AVRRegisterInfo::eliminateFrameIndex(), llvm::BPFRegisterInfo::eliminateFrameIndex(), llvm::LanaiRegisterInfo::eliminateFrameIndex(), llvm::M68kRegisterInfo::eliminateFrameIndex(), llvm::MipsRegisterInfo::eliminateFrameIndex(), llvm::MSP430RegisterInfo::eliminateFrameIndex(), llvm::NVPTXRegisterInfo::eliminateFrameIndex(), llvm::PPCRegisterInfo::eliminateFrameIndex(), llvm::WebAssemblyRegisterInfo::eliminateFrameIndex(), llvm::XCoreRegisterInfo::eliminateFrameIndex(), llvm::XtensaRegisterInfo::eliminateFrameIndex(), llvm::MSP430FrameLowering::emitCalleeSavedFrameMoves(), llvm::X86FrameLowering::emitCalleeSavedFrameMoves(), llvm::PPCFrameLowering::emitEpilogue(), llvm::XCoreFrameLowering::emitEpilogue(), llvm::TargetLoweringBase::emitPatchPoint(), llvm::ARCFrameLowering::emitPrologue(), llvm::ARMFrameLowering::emitPrologue(), llvm::LoongArchFrameLowering::emitPrologue(), llvm::Mips16FrameLowering::emitPrologue(), llvm::MipsSEFrameLowering::emitPrologue(), llvm::PPCFrameLowering::emitPrologue(), llvm::RISCVFrameLowering::emitPrologue(), llvm::SystemZELFFrameLowering::emitPrologue(), llvm::Thumb1FrameLowering::emitPrologue(), llvm::XCoreFrameLowering::emitPrologue(), llvm::XtensaFrameLowering::emitPrologue(), llvm::BaseIndexOffset::equalBaseIndex(), estimateStackSize(), llvm::MipsFrameLowering::estimateStackSize(), llvm::TargetInstrInfo::foldMemoryOperand(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), GetEHSpillList(), llvm::HexagonFrameLowering::getFrameIndexReference(), llvm::LoongArchFrameLowering::getFrameIndexReference(), llvm::M68kFrameLowering::getFrameIndexReference(), llvm::MipsSEFrameLowering::getFrameIndexReference(), llvm::NVPTXFrameLowering::getFrameIndexReference(), llvm::RISCVFrameLowering::getFrameIndexReference(), llvm::SIFrameLowering::getFrameIndexReference(), llvm::SparcFrameLowering::getFrameIndexReference(), llvm::TargetFrameLowering::getFrameIndexReference(), llvm::VEFrameLowering::getFrameIndexReference(), llvm::X86FrameLowering::getFrameIndexReference(), llvm::AArch64FrameLowering::getFrameIndexReferenceFromSP(), llvm::TargetFrameLowering::getFrameIndexReferenceFromSP(), llvm::AArch64FrameLowering::getFrameIndexReferencePreferSP(), llvm::X86FrameLowering::getFrameIndexReferenceSP(), llvm::WebAssemblyFrameLowering::getLocalForStackObject(), getOrCreateFixedStackObject(), llvm::AArch64FrameLowering::getSEHFrameIndexOffset(), GetSpillList(), isConsecutiveLSLoc(), MatchingStackOffset(), MatchingStackOffset(), llvm::AArch64FrameLowering::processFunctionBeforeFrameFinalized(), llvm::PPCFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZELFFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized(), llvm::ARMFrameLowering::ResolveFrameIndexReference(), shouldClusterFI(), and shouldLowerTailCallStackArg().

getObjectSize()

int64_t llvm::MachineFrameInfo::getObjectSize ( int ObjectIdx) const inline

Return the size of the specified object.

Definition at line 481 of file MachineFrameInfo.h.

References assert().

Referenced by addFrameReference(), llvm::addFrameReference(), llvm::addFrameReference(), llvm::M68k::addFrameReference(), llvm::M68k::addMemOperand(), llvm::AMDGPUTargetLowering::addTokenForArgument(), AdjustStackOffset(), AdjustStackOffset(), llvm::StatepointLoweringState::allocateStackSlot(), llvm::SIMachineFunctionInfo::allocateVGPRSpillToAGPR(), buildEpilogRestore(), buildPrologSpill(), computeFreeStackSlots(), convertStackObjects(), determineSVEStackSizes(), llvm::ARCRegisterInfo::eliminateFrameIndex(), llvm::WebAssemblyRegisterInfo::eliminateFrameIndex(), llvm::ARCFrameLowering::emitEpilogue(), llvm::PPCTargetLowering::EmitInstrWithCustomInserter(), llvm::TargetLoweringBase::emitPatchPoint(), llvm::ARCFrameLowering::emitPrologue(), estimateStackSize(), llvm::MipsFrameLowering::estimateStackSize(), foldInlineAsmMemOperand(), llvm::TargetInstrInfo::foldMemoryOperand(), llvm::SystemZInstrInfo::foldMemoryOperandImpl(), llvm::X86InstrInfo::foldMemoryOperandImpl(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), getFrameIndexMMO(), llvm::R600FrameLowering::getFrameIndexReference(), llvm::MipsInstrInfo::GetMemOperand(), getOrCreateFixedStackObject(), isConsecutiveLSLoc(), llvm::SystemZInstrInfo::isStackSlotCopy(), llvm::AArch64InstrInfo::loadRegFromStackSlot(), llvm::ARCInstrInfo::loadRegFromStackSlot(), llvm::ARMBaseInstrInfo::loadRegFromStackSlot(), llvm::AVRInstrInfo::loadRegFromStackSlot(), llvm::HexagonInstrInfo::loadRegFromStackSlot(), llvm::LoongArchInstrInfo::loadRegFromStackSlot(), llvm::M68kInstrInfo::loadRegFromStackSlot(), llvm::MSP430InstrInfo::loadRegFromStackSlot(), llvm::RISCVInstrInfo::loadRegFromStackSlot(), llvm::SparcInstrInfo::loadRegFromStackSlot(), llvm::Thumb1InstrInfo::loadRegFromStackSlot(), llvm::Thumb2InstrInfo::loadRegFromStackSlot(), llvm::VEInstrInfo::loadRegFromStackSlot(), llvm::X86InstrInfo::loadRegFromStackSlot(), llvm::XCoreInstrInfo::loadRegFromStackSlot(), llvm::PPCInstrInfo::loadRegFromStackSlotNoUpd(), MatchingStackOffset(), MatchingStackOffset(), llvm::HexagonFrameLowering::orderFrameObjects(), llvm::SystemZELFFrameLowering::orderFrameObjects(), llvm::X86FrameLowering::orderFrameObjects(), llvm::AArch64FrameLowering::processFunctionBeforeFrameFinalized(), llvm::RISCVFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZELFFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized(), llvm::AVRFrameAnalyzer::runOnMachineFunction(), scavengeStackSlot(), shouldLowerTailCallStackArg(), llvm::SIFrameLowering::spillCalleeSavedRegisters(), spillIncomingStatepointValue(), llvm::AArch64InstrInfo::storeRegToStackSlot(), llvm::ARCInstrInfo::storeRegToStackSlot(), llvm::ARMBaseInstrInfo::storeRegToStackSlot(), llvm::AVRInstrInfo::storeRegToStackSlot(), llvm::HexagonInstrInfo::storeRegToStackSlot(), llvm::LoongArchInstrInfo::storeRegToStackSlot(), llvm::M68kInstrInfo::storeRegToStackSlot(), llvm::MSP430InstrInfo::storeRegToStackSlot(), llvm::RISCVInstrInfo::storeRegToStackSlot(), llvm::SparcInstrInfo::storeRegToStackSlot(), llvm::Thumb1InstrInfo::storeRegToStackSlot(), llvm::Thumb2InstrInfo::storeRegToStackSlot(), llvm::VEInstrInfo::storeRegToStackSlot(), llvm::X86InstrInfo::storeRegToStackSlot(), llvm::XCoreInstrInfo::storeRegToStackSlot(), llvm::PPCInstrInfo::storeRegToStackSlotNoUpd(), and tryToElideArgumentCopy().

getObjectSSPLayout()

SSPLayoutKind llvm::MachineFrameInfo::getObjectSSPLayout ( int ObjectIdx) const inline

getOffsetAdjustment()

int64_t llvm::MachineFrameInfo::getOffsetAdjustment ( ) const inline

getPristineRegs()

Return a set of physical registers that are pristine.

Pristine registers hold a value that is useless to the current function, but that must be preserved - they are callee saved registers that are not saved.

Before the PrologueEpilogueInserter has placed the CSR spill code, this method always returns an empty set.

Definition at line 115 of file MachineFrameInfo.cpp.

References getCalleeSavedInfo(), llvm::MachineFunction::getRegInfo(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), I, isCalleeSavedInfoValid(), MRI, llvm::BitVector::reset(), llvm::BitVector::set(), and TRI.

Referenced by llvm::ARMFrameLowering::emitEpilogue(), llvm::AggressiveAntiDepBreaker::StartBlock(), and llvm::CriticalAntiDepBreaker::StartBlock().

getRestorePoints()

getSavePoints()

getStackID()

uint8_t llvm::MachineFrameInfo::getStackID ( int ObjectIdx) const inline

See also

StackID

Definition at line 782 of file MachineFrameInfo.h.

Referenced by allSGPRSpillsAreDead(), llvm::SIRegisterInfo::buildVGPRSpillLoadStore(), computeFreeStackSlots(), convertStackObjects(), llvm::SystemZXPLINKFrameLowering::determineFrameLayout(), determineSVEStackSizes(), estimateStackSize(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), llvm::RISCVFrameLowering::getFrameIndexReference(), llvm::WebAssemblyFrameLowering::getLocalForStackObject(), getRVVCalleeSavedInfo(), getScavSlotsNumForRVV(), getUnmanagedCSI(), hasScalableStackID(), llvm::AArch64FrameLowering::orderFrameObjects(), llvm::RISCVFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SIMachineFunctionInfo::removeDeadFrameIndices(), and setObjectAlignment().

getStackProtectorIndex()

int llvm::MachineFrameInfo::getStackProtectorIndex ( ) const inline

getStackSize()

uint64_t llvm::MachineFrameInfo::getStackSize ( ) const inline

Return the number of bytes that must be allocated to hold all of the fixed size frame objects.

This is only valid after Prolog/Epilog code insertion has finalized the stack frame layout.

Definition at line 607 of file MachineFrameInfo.h.

Referenced by llvm::X86FrameLowering::adjustForHiPEPrologue(), llvm::ARMFrameLowering::adjustForSegmentedStacks(), llvm::X86FrameLowering::adjustForSegmentedStacks(), llvm::CodeViewDebug::beginFunctionImpl(), convertMFI(), llvm::PPCFrameLowering::determineFrameLayout(), llvm::SystemZXPLINKFrameLowering::determineFrameLayout(), llvm::AArch64RegisterInfo::eliminateFrameIndex(), llvm::ARCRegisterInfo::eliminateFrameIndex(), llvm::AVRRegisterInfo::eliminateFrameIndex(), llvm::LanaiRegisterInfo::eliminateFrameIndex(), llvm::MipsRegisterInfo::eliminateFrameIndex(), llvm::MSP430RegisterInfo::eliminateFrameIndex(), llvm::PPCRegisterInfo::eliminateFrameIndex(), llvm::WebAssemblyRegisterInfo::eliminateFrameIndex(), llvm::XCoreRegisterInfo::eliminateFrameIndex(), llvm::XtensaRegisterInfo::eliminateFrameIndex(), llvm::SIFrameLowering::emitEntryFunctionPrologue(), llvm::ARCFrameLowering::emitEpilogue(), llvm::ARMFrameLowering::emitEpilogue(), llvm::AVRFrameLowering::emitEpilogue(), llvm::LoongArchFrameLowering::emitEpilogue(), llvm::M68kFrameLowering::emitEpilogue(), llvm::Mips16FrameLowering::emitEpilogue(), llvm::MipsSEFrameLowering::emitEpilogue(), llvm::MSP430FrameLowering::emitEpilogue(), llvm::PPCFrameLowering::emitEpilogue(), llvm::SIFrameLowering::emitEpilogue(), llvm::SparcFrameLowering::emitEpilogue(), llvm::Thumb1FrameLowering::emitEpilogue(), llvm::VEFrameLowering::emitEpilogue(), llvm::WebAssemblyFrameLowering::emitEpilogue(), llvm::X86FrameLowering::emitEpilogue(), llvm::XCoreFrameLowering::emitEpilogue(), llvm::XtensaFrameLowering::emitEpilogue(), llvm::SystemZAsmPrinter::emitFunctionEntryLabel(), llvm::ARCFrameLowering::emitPrologue(), llvm::ARMFrameLowering::emitPrologue(), llvm::AVRFrameLowering::emitPrologue(), llvm::LanaiFrameLowering::emitPrologue(), llvm::LoongArchFrameLowering::emitPrologue(), llvm::M68kFrameLowering::emitPrologue(), llvm::Mips16FrameLowering::emitPrologue(), llvm::MipsSEFrameLowering::emitPrologue(), llvm::MSP430FrameLowering::emitPrologue(), llvm::SIFrameLowering::emitPrologue(), llvm::SparcFrameLowering::emitPrologue(), llvm::SystemZELFFrameLowering::emitPrologue(), llvm::Thumb1FrameLowering::emitPrologue(), llvm::VEFrameLowering::emitPrologue(), llvm::X86FrameLowering::emitPrologue(), llvm::XCoreFrameLowering::emitPrologue(), llvm::XtensaFrameLowering::emitPrologue(), llvm::AsmPrinter::emitStackSizeSection(), llvm::AsmPrinter::emitStackUsage(), llvm::X86FrameLowering::getDwarfFrameBase(), llvm::LoongArchFrameLowering::getFirstSPAdjustAmount(), llvm::HexagonFrameLowering::getFrameIndexReference(), llvm::LoongArchFrameLowering::getFrameIndexReference(), llvm::M68kFrameLowering::getFrameIndexReference(), llvm::MipsSEFrameLowering::getFrameIndexReference(), llvm::RISCVFrameLowering::getFrameIndexReference(), llvm::SparcFrameLowering::getFrameIndexReference(), llvm::TargetFrameLowering::getFrameIndexReference(), llvm::VEFrameLowering::getFrameIndexReference(), llvm::X86FrameLowering::getFrameIndexReference(), llvm::X86FrameLowering::getFrameIndexReferencePreferSP(), llvm::ARMBaseInstrInfo::getOutliningTypeImpl(), llvm::RISCVFrameLowering::getStackSizeWithRVVPadding(), llvm::HexagonFrameLowering::hasFPImpl(), llvm::PPCFrameLowering::hasFPImpl(), llvm::SIFrameLowering::hasFPImpl(), llvm::WebAssemblyFrameLowering::hasFPImpl(), needsSplitStackProlog(), llvm::PPCRegisterInfo::prepareDynamicAlloca(), llvm::ARCFrameLowering::processFunctionBeforeFrameFinalized(), llvm::PPCRegisterInfo::requiresFrameIndexScavenging(), and llvm::ARMFrameLowering::ResolveFrameIndexReference().

getUnsafeStackSize()

uint64_t llvm::MachineFrameInfo::getUnsafeStackSize ( ) const inline

getUseLocalStackAllocationBlock()

bool llvm::MachineFrameInfo::getUseLocalStackAllocationBlock ( ) const inline

hasCalls()

bool llvm::MachineFrameInfo::hasCalls ( ) const inline

Return true if the current function has any function calls.

Definition at line 641 of file MachineFrameInfo.h.

Referenced by llvm::X86FrameLowering::adjustForHiPEPrologue(), llvm::ARCFrameLowering::assignCalleeSavedSpillSlots(), llvm::PPCFrameLowering::assignCalleeSavedSpillSlots(), llvm::AArch64FrameLowering::canUseRedZone(), convertMFI(), llvm::CSKYFrameLowering::determineCalleeSaves(), llvm::SystemZELFFrameLowering::determineCalleeSaves(), llvm::SIFrameLowering::determineCalleeSavesSGPR(), llvm::SIFrameLowering::determinePrologEpilogSGPRSaves(), llvm::TargetOptions::DisableFramePointerElim(), llvm::SIFrameLowering::emitEntryFunctionPrologue(), llvm::ARCFrameLowering::emitEpilogue(), llvm::ARCFrameLowering::emitPrologue(), llvm::SystemZELFFrameLowering::emitPrologue(), llvm::TargetOptions::FramePointerIsReserved(), llvm::X86FrameLowering::getFrameIndexReference(), llvm::HexagonFrameLowering::hasFPImpl(), llvm::SIFrameLowering::hasFPImpl(), isXPLeafCandidate(), llvm::WebAssemblyFrameLowering::needsPrologForEH(), llvm::SIRegisterInfo::requiresRegisterScavenging(), llvm::SIFrameLowering::requiresStackPointerReference(), reservePrivateMemoryRegs(), llvm::SelectionDAGISel::runOnMachineFunction(), and llvm::InstructionSelect::selectMachineFunction().

hasCopyImplyingStackAdjustment()

bool llvm::MachineFrameInfo::hasCopyImplyingStackAdjustment ( ) const inline

hasFunctionContextIndex()

bool llvm::MachineFrameInfo::hasFunctionContextIndex ( ) const inline

hasMustTailInVarArgFunc()

bool llvm::MachineFrameInfo::hasMustTailInVarArgFunc ( ) const inline

hasOpaqueSPAdjustment()

bool llvm::MachineFrameInfo::hasOpaqueSPAdjustment ( ) const inline

hasPatchPoint()

bool llvm::MachineFrameInfo::hasPatchPoint ( ) const inline

hasScalableStackID()

bool llvm::MachineFrameInfo::hasScalableStackID ( int ObjectIdx) const inline

hasStackMap()

bool llvm::MachineFrameInfo::hasStackMap ( ) const inline

hasStackObjects()

bool llvm::MachineFrameInfo::hasStackObjects ( ) const inline

hasStackProtectorIndex()

bool llvm::MachineFrameInfo::hasStackProtectorIndex ( ) const inline

hasTailCall()

bool llvm::MachineFrameInfo::hasTailCall ( ) const inline

hasVarSizedObjects()

bool llvm::MachineFrameInfo::hasVarSizedObjects ( ) const inline

This method may be called any time after instruction selection is complete to determine if the stack frame for this function contains any variable sized objects.

Definition at line 366 of file MachineFrameInfo.h.

Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot(), llvm::CodeViewDebug::beginFunctionImpl(), llvm::AArch64RegisterInfo::cannotEliminateFrame(), llvm::ARMBaseRegisterInfo::cannotEliminateFrame(), llvm::ARMFrameLowering::canSimplifyCallFramePseudos(), CantUseSP(), CantUseSP(), llvm::MipsSEFrameLowering::determineCalleeSaves(), llvm::PPCFrameLowering::determineFrameLayout(), llvm::AArch64FrameLowering::eliminateCallFramePseudoInstr(), llvm::AArch64RegisterInfo::eliminateFrameIndex(), llvm::ARMBaseRegisterInfo::eliminateFrameIndex(), llvm::ThumbRegisterInfo::eliminateFrameIndex(), llvm::AVRFrameLowering::emitEpilogue(), llvm::LoongArchFrameLowering::emitEpilogue(), llvm::M68kFrameLowering::emitEpilogue(), llvm::MSP430FrameLowering::emitEpilogue(), llvm::PPCFrameLowering::emitEpilogue(), llvm::RISCVFrameLowering::emitEpilogue(), llvm::X86FrameLowering::emitEpilogue(), llvm::SystemZAsmPrinter::emitFunctionEntryLabel(), llvm::ARMFrameLowering::emitPrologue(), llvm::LanaiFrameLowering::emitPrologue(), llvm::Thumb1FrameLowering::emitPrologue(), llvm::X86FrameLowering::emitPrologue(), llvm::AsmPrinter::emitStackSizeSection(), llvm::AsmPrinter::emitStackUsage(), estimateStackSize(), frameTriviallyRequiresSP(), llvm::HexagonFrameLowering::getFrameIndexReference(), llvm::RISCVFrameLowering::getFrameIndexReference(), llvm::AArch64FrameLowering::getFrameIndexReferencePreferSP(), llvm::R600InstrInfo::getIndirectIndexEnd(), llvm::ARMSubtarget::getPushPopSplitVariation(), llvm::MipsRegisterInfo::getReservedRegs(), llvm::AArch64RegisterInfo::hasBasePointer(), llvm::ARMBaseRegisterInfo::hasBasePointer(), llvm::LanaiRegisterInfo::hasBasePointer(), llvm::CSKYFrameLowering::hasBP(), llvm::LoongArchFrameLowering::hasBP(), llvm::MipsFrameLowering::hasBP(), llvm::RISCVFrameLowering::hasBP(), llvm::VEFrameLowering::hasBP(), llvm::AArch64FrameLowering::hasFPImpl(), llvm::ARCFrameLowering::hasFPImpl(), llvm::ARMFrameLowering::hasFPImpl(), llvm::AVRFrameLowering::hasFPImpl(), llvm::CSKYFrameLowering::hasFPImpl(), llvm::HexagonFrameLowering::hasFPImpl(), llvm::LoongArchFrameLowering::hasFPImpl(), llvm::M68kFrameLowering::hasFPImpl(), llvm::MipsFrameLowering::hasFPImpl(), llvm::MSP430FrameLowering::hasFPImpl(), llvm::RISCVFrameLowering::hasFPImpl(), llvm::SparcFrameLowering::hasFPImpl(), llvm::SystemZELFFrameLowering::hasFPImpl(), llvm::SystemZXPLINKFrameLowering::hasFPImpl(), llvm::VEFrameLowering::hasFPImpl(), llvm::WebAssemblyFrameLowering::hasFPImpl(), llvm::X86FrameLowering::hasFPImpl(), llvm::XCoreFrameLowering::hasFPImpl(), llvm::XtensaFrameLowering::hasFPImpl(), llvm::AArch64FrameLowering::hasReservedCallFrame(), llvm::ARMFrameLowering::hasReservedCallFrame(), llvm::AVRFrameLowering::hasReservedCallFrame(), llvm::CSKYFrameLowering::hasReservedCallFrame(), llvm::LoongArchFrameLowering::hasReservedCallFrame(), llvm::M68kFrameLowering::hasReservedCallFrame(), llvm::Mips16FrameLowering::hasReservedCallFrame(), llvm::MipsSEFrameLowering::hasReservedCallFrame(), llvm::MSP430FrameLowering::hasReservedCallFrame(), llvm::RISCVFrameLowering::hasReservedCallFrame(), llvm::SparcFrameLowering::hasReservedCallFrame(), llvm::Thumb1FrameLowering::hasReservedCallFrame(), llvm::WebAssemblyFrameLowering::hasReservedCallFrame(), llvm::X86FrameLowering::hasReservedCallFrame(), isXPLeafCandidate(), llvm::HexagonFrameLowering::needsAligna(), llvm::PPCFrameLowering::needsFP(), llvm::ARMBaseRegisterInfo::needsFrameBaseReg(), llvm::HexagonFrameLowering::processFunctionBeforeFrameFinalized(), llvm::PPCFrameLowering::replaceFPWithRealFP(), and llvm::HexagonDAGToDAGISel::SelectFrameIndex().

hasVAStart()

bool llvm::MachineFrameInfo::hasVAStart ( ) const inline

isAliasedObjectIndex()

bool llvm::MachineFrameInfo::isAliasedObjectIndex ( int ObjectIdx) const inline

isCalleeSavedInfoValid()

bool llvm::MachineFrameInfo::isCalleeSavedInfoValid ( ) const inline

Has the callee saved info been calculated yet?

Definition at line 854 of file MachineFrameInfo.h.

Referenced by llvm::LiveRegUnits::addLiveOuts(), llvm::LivePhysRegs::addLiveOutsNoPristines(), convertMFI(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::AArch64FunctionInfo::getCalleeSavedStackSize(), llvm::TargetFrameLowering::getCalleeSaves(), llvm::ARMBaseInstrInfo::getOutliningTypeImpl(), getPristineRegs(), getSVECalleeSaveSlotRange(), llvm::recomputeLivenessFlags(), llvm::PPCRegisterInfo::requiresFrameIndexScavenging(), and llvm::ARMFrameLowering::updateLRRestored().

isCalleeSavedObjectIndex()

bool llvm::MachineFrameInfo::isCalleeSavedObjectIndex ( int ObjectIdx) const inline

isDeadObjectIndex()

bool llvm::MachineFrameInfo::isDeadObjectIndex ( int ObjectIdx) const inline

Returns true if the specified index corresponds to a dead object.

Definition at line 796 of file MachineFrameInfo.h.

References assert().

Referenced by allSGPRSpillsAreDead(), allStackObjectsAreDead(), convertStackObjects(), llvm::SSPLayoutInfo::copyToMachineFrameInfo(), determineSVEStackSizes(), llvm::SystemZELFFrameLowering::emitPrologue(), llvm::XtensaFrameLowering::emitPrologue(), estimateStackSize(), getObjectOffset(), setObjectOffset(), and setObjectSSPLayout().

isFixedObjectIndex()

bool llvm::MachineFrameInfo::isFixedObjectIndex ( int ObjectIdx) const inline

Returns true if the specified index corresponds to a fixed stack object.

Definition at line 720 of file MachineFrameInfo.h.

Referenced by llvm::GISelAddressing::aliasIsKnownForLoadStore(), llvm::SIRegisterInfo::buildVGPRSpillLoadStore(), llvm::BaseIndexOffset::computeAliasing(), llvm::X86RegisterInfo::eliminateFrameIndex(), llvm::PPCFrameLowering::emitEpilogue(), llvm::PPCFrameLowering::emitPrologue(), llvm::BaseIndexOffset::equalBaseIndex(), llvm::yaml::FrameIndex::FrameIndex(), llvm::HexagonFrameLowering::getFrameIndexReference(), llvm::LoongArchFrameLowering::getFrameIndexReference(), llvm::MipsSEFrameLowering::getFrameIndexReference(), llvm::RISCVFrameLowering::getFrameIndexReference(), llvm::VEFrameLowering::getFrameIndexReference(), llvm::X86FrameLowering::getFrameIndexReference(), llvm::X86FrameLowering::getFrameIndexReferencePreferSP(), getMemcpyLoadsAndStores(), getMemmoveLoadsAndStores(), getMemsetStores(), llvm::X86InstrInfo::loadRegFromStackSlot(), LowerAsSplatVectorLoad(), MatchingStackOffset(), MatchingStackOffset(), printFrameIndex(), llvm::SIFrameLowering::processFunctionBeforeFrameFinalized(), llvm::PPCRegisterInfo::requiresFrameIndexScavenging(), llvm::ARMFrameLowering::ResolveFrameIndexReference(), llvm::AVRFrameAnalyzer::runOnMachineFunction(), llvm::HexagonDAGToDAGISel::SelectAddrFI(), shouldClusterFI(), and llvm::X86InstrInfo::storeRegToStackSlot().

isFrameAddressTaken()

bool llvm::MachineFrameInfo::isFrameAddressTaken ( ) const inline

This method may be called any time after instruction selection is complete to determine if there is a call to @llvm.frameaddress in this function.

Definition at line 382 of file MachineFrameInfo.h.

Referenced by llvm::AArch64RegisterInfo::cannotEliminateFrame(), llvm::ARMBaseRegisterInfo::cannotEliminateFrame(), convertMFI(), llvm::PPCFrameLowering::determineFrameLayout(), llvm::PPCFrameLowering::emitPrologue(), llvm::AArch64FrameLowering::hasFPImpl(), llvm::ARCFrameLowering::hasFPImpl(), llvm::ARMFrameLowering::hasFPImpl(), llvm::CSKYFrameLowering::hasFPImpl(), llvm::LoongArchFrameLowering::hasFPImpl(), llvm::M68kFrameLowering::hasFPImpl(), llvm::MipsFrameLowering::hasFPImpl(), llvm::MSP430FrameLowering::hasFPImpl(), llvm::RISCVFrameLowering::hasFPImpl(), llvm::SIFrameLowering::hasFPImpl(), llvm::SparcFrameLowering::hasFPImpl(), llvm::VEFrameLowering::hasFPImpl(), llvm::WebAssemblyFrameLowering::hasFPImpl(), and llvm::X86FrameLowering::hasFPImpl().

isImmutableObjectIndex()

bool llvm::MachineFrameInfo::isImmutableObjectIndex ( int ObjectIdx) const inline

isMaxCallFrameSizeComputed()

bool llvm::MachineFrameInfo::isMaxCallFrameSizeComputed ( ) const inline

isObjectPreAllocated()

bool llvm::MachineFrameInfo::isObjectPreAllocated ( int ObjectIdx) const inline

isObjectSExt()

bool llvm::MachineFrameInfo::isObjectSExt ( int ObjectIdx) const inline

isObjectZExt()

bool llvm::MachineFrameInfo::isObjectZExt ( int ObjectIdx) const inline

isReturnAddressTaken()

bool llvm::MachineFrameInfo::isReturnAddressTaken ( ) const inline

isScalableStackID()

bool llvm::MachineFrameInfo::isScalableStackID ( uint8_t StackID) const inline

isSpillSlotObjectIndex()

bool llvm::MachineFrameInfo::isSpillSlotObjectIndex ( int ObjectIdx) const inline

isStackRealignable()

bool llvm::MachineFrameInfo::isStackRealignable ( ) const inline

isStatepointSpillSlotObjectIndex()

bool llvm::MachineFrameInfo::isStatepointSpillSlotObjectIndex ( int ObjectIdx) const inline

isVariableSizedObjectIndex()

bool llvm::MachineFrameInfo::isVariableSizedObjectIndex ( int ObjectIdx) const inline

mapLocalFrameObject()

void llvm::MachineFrameInfo::mapLocalFrameObject ( int ObjectIndex, int64_t Offset ) inline

markAsStatepointSpillSlotObjectIndex()

void llvm::MachineFrameInfo::markAsStatepointSpillSlotObjectIndex ( int ObjectIdx) inline

needsSplitStackProlog()

bool llvm::MachineFrameInfo::needsSplitStackProlog ( ) const inline

print()

RemoveStackObject()

void llvm::MachineFrameInfo::RemoveStackObject ( int ObjectIdx) inline

setAdjustsStack()

void llvm::MachineFrameInfo::setAdjustsStack ( bool V) inline

setCalleeSavedInfo()

void llvm::MachineFrameInfo::setCalleeSavedInfo ( std::vector< CalleeSavedInfo > CSI) inline

setCalleeSavedInfoValid()

void llvm::MachineFrameInfo::setCalleeSavedInfoValid ( bool v) inline

setCVBytesOfCalleeSavedRegisters()

void llvm::MachineFrameInfo::setCVBytesOfCalleeSavedRegisters ( unsigned S) inline

setFrameAddressIsTaken()

void llvm::MachineFrameInfo::setFrameAddressIsTaken ( bool T) inline

setFunctionContextIndex()

void llvm::MachineFrameInfo::setFunctionContextIndex ( int I) inline

setHasCalls()

void llvm::MachineFrameInfo::setHasCalls ( bool V) inline

setHasCopyImplyingStackAdjustment()

void llvm::MachineFrameInfo::setHasCopyImplyingStackAdjustment ( bool B) inline

setHasMustTailInVarArgFunc()

void llvm::MachineFrameInfo::setHasMustTailInVarArgFunc ( bool B) inline

setHasOpaqueSPAdjustment()

void llvm::MachineFrameInfo::setHasOpaqueSPAdjustment ( bool B) inline

setHasPatchPoint()

void llvm::MachineFrameInfo::setHasPatchPoint ( bool s = true) inline

setHasStackMap()

void llvm::MachineFrameInfo::setHasStackMap ( bool s = true) inline

setHasTailCall()

void llvm::MachineFrameInfo::setHasTailCall ( bool V = true) inline

setHasVAStart()

void llvm::MachineFrameInfo::setHasVAStart ( bool B) inline

setIsAliasedObjectIndex()

void llvm::MachineFrameInfo::setIsAliasedObjectIndex ( int ObjectIdx, bool IsAliased ) inline

setIsCalleeSavedObjectIndex()

void llvm::MachineFrameInfo::setIsCalleeSavedObjectIndex ( int ObjectIdx, bool IsCalleeSaved ) inline

setIsImmutableObjectIndex()

void llvm::MachineFrameInfo::setIsImmutableObjectIndex ( int ObjectIdx, bool IsImmutable ) inline

setLocalFrameMaxAlign()

void llvm::MachineFrameInfo::setLocalFrameMaxAlign ( Align Alignment) inline

Required alignment of the local object blob, which is the strictest alignment of any object in it.

Definition at line 453 of file MachineFrameInfo.h.

setLocalFrameSize()

void llvm::MachineFrameInfo::setLocalFrameSize ( int64_t sz) inline

setMaxCallFrameSize()

void llvm::MachineFrameInfo::setMaxCallFrameSize ( uint64_t S) inline

setObjectAlignment()

void llvm::MachineFrameInfo::setObjectAlignment ( int ObjectIdx, Align Alignment ) inline

setObjectOffset()

void llvm::MachineFrameInfo::setObjectOffset ( int ObjectIdx, int64_t SPOffset ) inline

Set the stack frame offset of the specified object.

The offset is relative to the stack pointer on entry to the function.

Definition at line 582 of file MachineFrameInfo.h.

References assert(), and isDeadObjectIndex().

Referenced by AdjustStackOffset(), AdjustStackOffset(), llvm::ARCFrameLowering::assignCalleeSavedSpillSlots(), llvm::SystemZXPLINKFrameLowering::determineFrameLayout(), determineSVEStackSizes(), llvm::PPCFrameLowering::emitPrologue(), llvm::XtensaFrameLowering::emitPrologue(), llvm::WebAssemblyFrameLowering::getLocalForStackObject(), llvm::MIRParserImpl::initializeFrameInfo(), llvm::AArch64FrameLowering::processFunctionBeforeFrameFinalized(), llvm::PPCFrameLowering::processFunctionBeforeFrameFinalized(), and scavengeStackSlot().

setObjectSExt()

void llvm::MachineFrameInfo::setObjectSExt ( int ObjectIdx, bool IsSExt ) inline

setObjectSize()

void llvm::MachineFrameInfo::setObjectSize ( int ObjectIdx, int64_t Size ) inline

setObjectSSPLayout()

void llvm::MachineFrameInfo::setObjectSSPLayout ( int ObjectIdx, SSPLayoutKind Kind ) inline

setObjectZExt()

void llvm::MachineFrameInfo::setObjectZExt ( int ObjectIdx, bool IsZExt ) inline

setOffsetAdjustment()

void llvm::MachineFrameInfo::setOffsetAdjustment ( int64_t Adj) inline

setRestorePoints()

void llvm::MachineFrameInfo::setRestorePoints ( SaveRestorePoints NewRestorePoints) inline

setReturnAddressIsTaken()

void llvm::MachineFrameInfo::setReturnAddressIsTaken ( bool s) inline

setSavePoints()

setStackID()

void llvm::MachineFrameInfo::setStackID ( int ObjectIdx, uint8_t ID ) inline

setStackProtectorIndex()

void llvm::MachineFrameInfo::setStackProtectorIndex ( int I) inline

setStackSize()

void llvm::MachineFrameInfo::setStackSize ( uint64_t Size) inline

setUnsafeStackSize()

void llvm::MachineFrameInfo::setUnsafeStackSize ( uint64_t Size) inline

setUseLocalStackAllocationBlock()

void llvm::MachineFrameInfo::setUseLocalStackAllocationBlock ( bool v) inline

setUseLocalStackAllocationBlock - Set whether the local allocation blob should be allocated together or let PEI allocate the locals in it directly.

Definition at line 469 of file MachineFrameInfo.h.

Referenced by INITIALIZE_PASS().

shouldRealignStack()

bool llvm::MachineFrameInfo::shouldRealignStack ( ) const inline

The documentation for this class was generated from the following files: