LLVM 20.0.0git
Classes | Public Types | Public Member Functions | List of all members
llvm::MachineFrameInfo Class Reference

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

#include "llvm/CodeGen/MachineFrameInfo.h"

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.
 
void setObjectAlignment (int ObjectIdx, Align Alignment)
 setObjectAlignment - Change the alignment of the specified stack object.
 
const AllocaInstgetObjectAllocation (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.
 
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.
 
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)
 
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)
 
int CreateFixedObject (uint64_t Size, int64_t SPOffset, bool IsImmutable, bool isAliased=false)
 Create a new object at a fixed location on the stack.
 
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
 
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)
 
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.
 
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.
 
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)
 
MachineBasicBlockgetSavePoint () const
 
void setSavePoint (MachineBasicBlock *NewSave)
 
MachineBasicBlockgetRestorePoint () const
 
void setRestorePoint (MachineBasicBlock *NewRestore)
 
uint64_t getUnsafeStackSize () const
 
void setUnsafeStackSize (uint64_t Size)
 
BitVector getPristineRegs (const MachineFunction &MF) const
 Return a set of physical registers that are pristine.
 
void print (const MachineFunction &MF, raw_ostream &OS) const
 Used by the MachineFunction printer to print information about stack objects.
 
void dump (const MachineFunction &MF) const
 dump - Print the function to stderr.
 

Detailed Description

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 106 of file MachineFrameInfo.h.

Member Enumeration Documentation

◆ 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 110 of file MachineFrameInfo.h.

Constructor & Destructor Documentation

◆ MachineFrameInfo() [1/2]

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

Definition at line 342 of file MachineFrameInfo.h.

◆ MachineFrameInfo() [2/2]

llvm::MachineFrameInfo::MachineFrameInfo ( const MachineFrameInfo )
delete

Member Function Documentation

◆ adjustsStack()

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

◆ 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 520 of file MachineFrameInfo.h.

References assert().

◆ computeMaxCallFrameSize()

void MachineFrameInfo::computeMaxCallFrameSize ( MachineFunction MF,
std::vector< MachineBasicBlock::iterator > *  FrameSDOps = nullptr 
)

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

Should this stack ID be considered in MaxAlignment.

Definition at line 493 of file MachineFrameInfo.h.

References llvm::TargetStackID::Default, and llvm::TargetStackID::ScalableVector.

Referenced by CreateStackObject(), and setObjectAlignment().

◆ 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::AArch64CallLowering::lowerFormalArguments(), llvm::MipsCallLowering::lowerFormalArguments(), llvm::HexagonTargetLowering::LowerFormalArguments(), llvm::LoongArchTargetLowering::LowerFormalArguments(), llvm::RISCVTargetLowering::LowerFormalArguments(), llvm::SystemZTargetLowering::LowerFormalArguments(), llvm::VETargetLowering::LowerFormalArguments(), llvm::XtensaTargetLowering::LowerFormalArguments(), llvm::SparcTargetLowering::LowerFormalArguments_32(), llvm::SparcTargetLowering::LowerFormalArguments_64(), llvm::AArch64FrameLowering::processFunctionBeforeFrameFinalized(), llvm::MSP430FrameLowering::processFunctionBeforeFrameFinalized(), llvm::FunctionLoweringInfo::set(), unpack64(), unpackF64OnRV32DSoftABI(), 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::SIMachineFunctionInfo::allocateWWMSpill(), llvm::X86FrameLowering::assignCalleeSavedSpillSlots(), and llvm::HexagonFrameLowering::determineCalleeSaves().

◆ CreateStackObject()

int MachineFrameInfo::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.

Definition at line 51 of file MachineFrameInfo.cpp.

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

Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot(), assignCalleeSavedSpillSlots(), llvm::SystemZXPLINKFrameLowering::assignCalleeSavedSpillSlots(), llvm::AArch64FrameLowering::assignCalleeSavedSpillSlots(), llvm::RISCVFrameLowering::assignCalleeSavedSpillSlots(), llvm::X86TargetLowering::BuildFILD(), llvm::MipsFunctionInfo::createEhDataRegsFI(), llvm::XCoreFunctionInfo::createEHSpillSlot(), llvm::XCoreFunctionInfo::createFPSpillSlot(), llvm::MipsFunctionInfo::createISRRegFI(), llvm::XCoreFunctionInfo::createLRSpillSlot(), CreateSpillStackObject(), llvm::SelectionDAG::CreateStackTemporary(), llvm::LegalizerHelper::createStackTemporary(), llvm::AArch64FrameLowering::determineCalleeSaves(), llvm::CSKYFrameLowering::determineCalleeSaves(), llvm::MipsSEFrameLowering::determineCalleeSaves(), 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(), LowerINTRINSIC_W_CHAIN(), llvm::ARCFrameLowering::processFunctionBeforeFrameFinalized(), llvm::RISCVFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZELFFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized(), llvm::XtensaFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SIFrameLowering::processFunctionBeforeFrameFinalized(), llvm::XCoreFrameLowering::processFunctionBeforeFrameFinalized(), and llvm::FunctionLoweringInfo::set().

◆ CreateVariableSizedObject()

int MachineFrameInfo::CreateVariableSizedObject ( Align  Alignment,
const AllocaInst Alloca 
)

Notify the MachineFrameInfo object that a variable sized object has been created.

This must be created whenever a variable sized object is created, whether or not the index returned is actually used.

Definition at line 74 of file MachineFrameInfo.cpp.

References clampStackAlignment(), and ensureMaxAlignment().

Referenced by llvm::AArch64TargetLowering::EmitAllocateZABuffer(), llvm::MIRParserImpl::initializeFrameInfo(), and llvm::FunctionLoweringInfo::set().

◆ dump()

LLVM_DUMP_METHOD void MachineFrameInfo::dump ( const MachineFunction MF) const

dump - Print the function to stderr.

Definition at line 250 of file MachineFrameInfo.cpp.

References llvm::dbgs(), and print().

◆ ensureMaxAlignment()

void MachineFrameInfo::ensureMaxAlignment ( Align  Alignment)

◆ estimateStackSize()

uint64_t MachineFrameInfo::estimateStackSize ( const MachineFunction MF) const

◆ getCalleeSavedInfo() [1/2]

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

Definition at line 810 of file MachineFrameInfo.h.

◆ getCalleeSavedInfo() [2/2]

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

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

Definition at line 806 of file MachineFrameInfo.h.

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

◆ getCVBytesOfCalleeSavedRegisters()

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

Returns how many bytes of callee-saved registers the target pushed in the prologue.

Only used for debug info.

Definition at line 680 of file MachineFrameInfo.h.

Referenced by llvm::CodeViewDebug::beginFunctionImpl(), and llvm::MIRPrinter::convert().

◆ getFunctionContextIndex()

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

Return the index for the function context object.

This object is used for SjLj exceptions.

Definition at line 366 of file MachineFrameInfo.h.

Referenced by llvm::MIRPrinter::convertStackObjects(), and llvm::VETargetLowering::emitSjLjDispatchBlock().

◆ getLocalFrameMaxAlign()

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

Return the required alignment of the local object blob.

Definition at line 449 of file MachineFrameInfo.h.

Referenced by llvm::ARMBaseRegisterInfo::needsFrameBaseReg().

◆ getLocalFrameObjectCount()

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

Return the number of objects allocated into the local object block.

Definition at line 434 of file MachineFrameInfo.h.

Referenced by llvm::MIRPrinter::convertStackObjects().

◆ getLocalFrameObjectMap()

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

Get the local offset mapping for a for an object.

Definition at line 427 of file MachineFrameInfo.h.

References assert().

Referenced by llvm::MIRPrinter::convertStackObjects().

◆ getLocalFrameSize()

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

◆ getMaxAlign()

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

◆ getMaxCallFrameSize()

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

◆ 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 486 of file MachineFrameInfo.h.

References assert().

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

◆ getObjectAllocation()

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

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

Returns 0 if none exists.

Definition at line 512 of file MachineFrameInfo.h.

References assert().

Referenced by llvm::MIRPrinter::convertStackObjects(), llvm::SSPLayoutInfo::copyToMachineFrameInfo(), llvm::WebAssemblyFrameLowering::getLocalForStackObject(), getMMOFrameID(), and printFrameIndex().

◆ getObjectIndexBegin()

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

◆ getObjectIndexEnd()

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

◆ 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 528 of file MachineFrameInfo.h.

References assert(), and isDeadObjectIndex().

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

◆ getObjectSize()

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

Return the size of the specified object.

Definition at line 472 of file MachineFrameInfo.h.

References assert().

Referenced by llvm::addFrameReference(), addFrameReference(), llvm::M68k::addFrameReference(), llvm::M68k::addMemOperand(), llvm::AMDGPUTargetLowering::addTokenForArgument(), AdjustStackOffset(), llvm::StatepointLoweringState::allocateStackSlot(), llvm::SIMachineFunctionInfo::allocateVGPRSpillToAGPR(), buildEpilogRestore(), buildPrologSpill(), computeFreeStackSlots(), llvm::MIRPrinter::convertStackObjects(), determineSVEStackObjectOffsets(), 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::RISCVInstrInfo::foldMemoryOperandImpl(), 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::ARMBaseInstrInfo::loadRegFromStackSlot(), llvm::Thumb1InstrInfo::loadRegFromStackSlot(), llvm::Thumb2InstrInfo::loadRegFromStackSlot(), llvm::HexagonInstrInfo::loadRegFromStackSlot(), llvm::SparcInstrInfo::loadRegFromStackSlot(), llvm::VEInstrInfo::loadRegFromStackSlot(), llvm::LoongArchInstrInfo::loadRegFromStackSlot(), llvm::RISCVInstrInfo::loadRegFromStackSlot(), llvm::MSP430InstrInfo::loadRegFromStackSlot(), llvm::ARCInstrInfo::loadRegFromStackSlot(), llvm::AVRInstrInfo::loadRegFromStackSlot(), llvm::M68kInstrInfo::loadRegFromStackSlot(), llvm::X86InstrInfo::loadRegFromStackSlot(), llvm::XCoreInstrInfo::loadRegFromStackSlot(), llvm::PPCInstrInfo::loadRegFromStackSlotNoUpd(), MatchingStackOffset(), llvm::HexagonFrameLowering::orderFrameObjects(), llvm::SystemZELFFrameLowering::orderFrameObjects(), llvm::X86FrameLowering::orderFrameObjects(), llvm::RISCVFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZELFFrameLowering::processFunctionBeforeFrameFinalized(), llvm::SystemZXPLINKFrameLowering::processFunctionBeforeFrameFinalized(), llvm::AVRFrameAnalyzer::runOnMachineFunction(), scavengeStackSlot(), spillIncomingStatepointValue(), llvm::AArch64InstrInfo::storeRegToStackSlot(), llvm::ARMBaseInstrInfo::storeRegToStackSlot(), llvm::Thumb1InstrInfo::storeRegToStackSlot(), llvm::Thumb2InstrInfo::storeRegToStackSlot(), llvm::HexagonInstrInfo::storeRegToStackSlot(), llvm::LoongArchInstrInfo::storeRegToStackSlot(), llvm::RISCVInstrInfo::storeRegToStackSlot(), llvm::SparcInstrInfo::storeRegToStackSlot(), llvm::VEInstrInfo::storeRegToStackSlot(), llvm::ARCInstrInfo::storeRegToStackSlot(), llvm::AVRInstrInfo::storeRegToStackSlot(), llvm::M68kInstrInfo::storeRegToStackSlot(), llvm::MSP430InstrInfo::storeRegToStackSlot(), llvm::X86InstrInfo::storeRegToStackSlot(), llvm::XCoreInstrInfo::storeRegToStackSlot(), llvm::PPCInstrInfo::storeRegToStackSlotNoUpd(), and tryToElideArgumentCopy().

◆ getObjectSSPLayout()

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

Definition at line 570 of file MachineFrameInfo.h.

References assert().

◆ getOffsetAdjustment()

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

◆ getPristineRegs()

BitVector MachineFrameInfo::getPristineRegs ( const MachineFunction MF) const

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().

◆ getRestorePoint()

MachineBasicBlock * llvm::MachineFrameInfo::getRestorePoint ( ) const
inline

◆ getSavePoint()

MachineBasicBlock * llvm::MachineFrameInfo::getSavePoint ( ) const
inline

◆ getStackID()

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

◆ 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 587 of file MachineFrameInfo.h.

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

◆ getUnsafeStackSize()

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

◆ getUseLocalStackAllocationBlock()

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

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

Definition at line 453 of file MachineFrameInfo.h.

Referenced by isSlotPreAllocated().

◆ hasCalls()

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

◆ hasCopyImplyingStackAdjustment()

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

Returns true if the function contains operations which will lower down to instructions which manipulate the stack pointer.

Definition at line 630 of file MachineFrameInfo.h.

Referenced by llvm::X86FrameLowering::emitPrologue(), and llvm::X86FrameLowering::hasFP().

◆ hasFunctionContextIndex()

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

Definition at line 368 of file MachineFrameInfo.h.

Referenced by llvm::MIRPrinter::convertStackObjects().

◆ hasMustTailInVarArgFunc()

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

Returns true if the function is variadic and contains a musttail call.

Definition at line 642 of file MachineFrameInfo.h.

Referenced by llvm::MIRPrinter::convert(), and handleMustTailForwardedRegisters().

◆ hasOpaqueSPAdjustment()

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

Returns true if the function contains opaque dynamic stack adjustments.

Definition at line 625 of file MachineFrameInfo.h.

Referenced by llvm::RegsForValue::AddInlineAsmOperands(), CantUseSP(), llvm::MIRPrinter::convert(), and llvm::X86FrameLowering::hasFP().

◆ hasPatchPoint()

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

This method may be called any time after instruction selection is complete to determine if there is a call to builtin @llvm.experimental.patchpoint.

Definition at line 391 of file MachineFrameInfo.h.

Referenced by llvm::MIRPrinter::convert(), frameTriviallyRequiresSP(), llvm::AArch64FrameLowering::hasFP(), llvm::WebAssemblyFrameLowering::hasFP(), llvm::X86FrameLowering::hasFP(), and llvm::PPCFrameLowering::needsFP().

◆ hasStackMap()

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

This method may be called any time after instruction selection is complete to determine if there is a call to builtin @llvm.experimental.stackmap.

Definition at line 385 of file MachineFrameInfo.h.

Referenced by llvm::MIRPrinter::convert(), frameTriviallyRequiresSP(), llvm::AArch64FrameLowering::hasFP(), llvm::WebAssemblyFrameLowering::hasFP(), llvm::X86FrameLowering::hasFP(), and llvm::PPCFrameLowering::needsFP().

◆ 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 357 of file MachineFrameInfo.h.

Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot(), llvm::CodeViewDebug::beginFunctionImpl(), llvm::AArch64RegisterInfo::cannotEliminateFrame(), llvm::ARMBaseRegisterInfo::cannotEliminateFrame(), llvm::ARMFrameLowering::canSimplifyCallFramePseudos(), CantUseSP(), llvm::MipsSEFrameLowering::determineCalleeSaves(), llvm::PPCFrameLowering::determineFrameLayout(), llvm::AArch64FrameLowering::eliminateCallFramePseudoInstr(), llvm::AArch64RegisterInfo::eliminateFrameIndex(), llvm::ARMBaseRegisterInfo::eliminateFrameIndex(), llvm::ThumbRegisterInfo::eliminateFrameIndex(), llvm::AArch64FrameLowering::emitEpilogue(), 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::AArch64FrameLowering::emitPrologue(), llvm::ARMFrameLowering::emitPrologue(), llvm::Thumb1FrameLowering::emitPrologue(), llvm::LanaiFrameLowering::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::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::hasFP(), llvm::ARCFrameLowering::hasFP(), llvm::ARMFrameLowering::hasFP(), llvm::AVRFrameLowering::hasFP(), llvm::CSKYFrameLowering::hasFP(), llvm::HexagonFrameLowering::hasFP(), llvm::LoongArchFrameLowering::hasFP(), llvm::M68kFrameLowering::hasFP(), llvm::MipsFrameLowering::hasFP(), llvm::MSP430FrameLowering::hasFP(), llvm::RISCVFrameLowering::hasFP(), llvm::SparcFrameLowering::hasFP(), llvm::SystemZELFFrameLowering::hasFP(), llvm::SystemZXPLINKFrameLowering::hasFP(), llvm::VEFrameLowering::hasFP(), llvm::WebAssemblyFrameLowering::hasFP(), llvm::X86FrameLowering::hasFP(), llvm::XCoreFrameLowering::hasFP(), llvm::XtensaFrameLowering::hasFP(), llvm::AArch64FrameLowering::hasReservedCallFrame(), llvm::ARMFrameLowering::hasReservedCallFrame(), llvm::Thumb1FrameLowering::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::WebAssemblyFrameLowering::hasReservedCallFrame(), llvm::X86FrameLowering::hasReservedCallFrame(), isXPLeafCandidate(), llvm::HexagonFrameLowering::needsAligna(), llvm::PPCFrameLowering::needsFP(), llvm::ARMBaseRegisterInfo::needsFrameBaseReg(), llvm::HexagonFrameLowering::processFunctionBeforeFrameFinalized(), llvm::PPCFrameLowering::replaceFPWithRealFP(), llvm::HexagonDAGToDAGISel::SelectFrameIndex(), and llvm::ARMSubtarget::splitFramePointerPush().

◆ hasVAStart()

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

Returns true if the function calls the llvm.va_start intrinsic.

Definition at line 638 of file MachineFrameInfo.h.

Referenced by llvm::MIRPrinter::convert().

◆ isAliasedObjectIndex()

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

Returns true if the specified index corresponds to an object that might be pointed to by an LLVM IR value.

Definition at line 706 of file MachineFrameInfo.h.

References assert().

Referenced by llvm::MIRPrinter::convertStackObjects(), and llvm::FixedStackPseudoSourceValue::isAliased().

◆ isCalleeSavedInfoValid()

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

◆ isDeadObjectIndex()

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

◆ isFixedObjectIndex()

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

◆ isFrameAddressTaken()

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

◆ isImmutableObjectIndex()

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

Returns true if the specified index corresponds to an immutable object.

Definition at line 720 of file MachineFrameInfo.h.

References assert().

Referenced by llvm::MIRPrinter::convertStackObjects(), llvm::FixedStackPseudoSourceValue::isConstant(), llvm::TargetInstrInfo::isReallyTriviallyReMaterializable(), and MatchingStackOffset().

◆ isMaxCallFrameSizeComputed()

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

◆ isObjectPreAllocated()

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

Return true if the object was pre-allocated into the local block.

Definition at line 465 of file MachineFrameInfo.h.

References assert().

Referenced by llvm::HexagonFrameLowering::getFrameIndexReference(), and isSlotPreAllocated().

◆ isObjectSExt()

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

Definition at line 548 of file MachineFrameInfo.h.

References assert().

Referenced by MatchingStackOffset().

◆ isObjectZExt()

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

Definition at line 536 of file MachineFrameInfo.h.

References assert().

Referenced by MatchingStackOffset().

◆ isReturnAddressTaken()

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

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.

Definition at line 379 of file MachineFrameInfo.h.

Referenced by llvm::MIRPrinter::convert(), llvm::ARMFrameLowering::determineCalleeSaves(), llvm::LoongArchFrameLowering::spillCalleeSavedRegisters(), llvm::Mips16FrameLowering::spillCalleeSavedRegisters(), llvm::MipsSEFrameLowering::spillCalleeSavedRegisters(), and llvm::XtensaFrameLowering::spillCalleeSavedRegisters().

◆ isSpillSlotObjectIndex()

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

◆ isStackRealignable()

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

Definition at line 349 of file MachineFrameInfo.h.

Referenced by llvm::TargetRegisterInfo::canRealignStack().

◆ isStatepointSpillSlotObjectIndex()

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

◆ isVariableSizedObjectIndex()

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

Returns true if the specified index corresponds to a variable sized object.

Definition at line 772 of file MachineFrameInfo.h.

References assert().

Referenced by llvm::MIRPrinter::convertStackObjects(), and scavengeStackSlot().

◆ mapLocalFrameObject()

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

Map a frame index into the local object block.

Definition at line 421 of file MachineFrameInfo.h.

References llvm::Offset.

Referenced by llvm::MIRParserImpl::initializeFrameInfo().

◆ markAsStatepointSpillSlotObjectIndex()

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

◆ needsSplitStackProlog()

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

Return true if this function requires a split stack prolog, even if it uses no stack space.

This is only meaningful for functions where MachineFunction::shouldSplitStack() returns true.

Definition at line 404 of file MachineFrameInfo.h.

References getStackSize(), and hasTailCall().

Referenced by llvm::ARMFrameLowering::adjustForSegmentedStacks(), llvm::X86FrameLowering::adjustForSegmentedStacks(), and llvm::AsmPrinter::SetupMachineFunction().

◆ print()

void MachineFrameInfo::print ( const MachineFunction MF,
raw_ostream OS 
) const

Used by the MachineFunction printer to print information about stack objects.

Implemented in MachineFunction.cpp.

Definition at line 209 of file MachineFrameInfo.cpp.

References llvm::TargetSubtargetInfo::getFrameLowering(), llvm::TargetFrameLowering::getOffsetOfLocalArea(), llvm::MachineFunction::getSubtarget(), and OS.

Referenced by dump(), and llvm::MachineFunction::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

Used by prolog/epilog inserter to set the function's callee saved information.

Definition at line 814 of file MachineFrameInfo.h.

Referenced by assignCalleeSavedSpillSlots(), and llvm::MIRParserImpl::initializeFrameInfo().

◆ setCalleeSavedInfoValid()

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

Definition at line 821 of file MachineFrameInfo.h.

Referenced by llvm::MIRParserImpl::initializeFrameInfo().

◆ setCVBytesOfCalleeSavedRegisters()

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

◆ setFrameAddressIsTaken()

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

◆ setFunctionContextIndex()

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

Definition at line 367 of file MachineFrameInfo.h.

References I.

Referenced by llvm::MIRParserImpl::initializeFrameInfo().

◆ setHasCalls()

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

◆ setHasCopyImplyingStackAdjustment()

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

Definition at line 633 of file MachineFrameInfo.h.

References B.

Referenced by LowerINTRINSIC_W_CHAIN().

◆ setHasMustTailInVarArgFunc()

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

◆ setHasOpaqueSPAdjustment()

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

Definition at line 626 of file MachineFrameInfo.h.

References B.

Referenced by llvm::MIRParserImpl::initializeFrameInfo(), and llvm::FunctionLoweringInfo::set().

◆ 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

Definition at line 639 of file MachineFrameInfo.h.

References B.

Referenced by llvm::MIRParserImpl::initializeFrameInfo(), and llvm::FunctionLoweringInfo::set().

◆ setIsAliasedObjectIndex()

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

Set "maybe pointed to by an LLVM IR value" for an object.

Definition at line 713 of file MachineFrameInfo.h.

References assert().

Referenced by tryToElideArgumentCopy().

◆ setIsImmutableObjectIndex()

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

Marks the immutability of an object.

Definition at line 730 of file MachineFrameInfo.h.

References assert().

Referenced by tryToElideArgumentCopy().

◆ 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 444 of file MachineFrameInfo.h.

◆ setLocalFrameSize()

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

Set the size of the local object blob.

Definition at line 437 of file MachineFrameInfo.h.

Referenced by llvm::MIRParserImpl::initializeFrameInfo().

◆ 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

◆ setObjectSExt()

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

Definition at line 554 of file MachineFrameInfo.h.

References assert().

◆ setObjectSize()

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

Change the size of the specified stack object.

Definition at line 479 of file MachineFrameInfo.h.

References assert(), and Size.

Referenced by llvm::WebAssemblyFrameLowering::getLocalForStackObject().

◆ setObjectSSPLayout()

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

Definition at line 576 of file MachineFrameInfo.h.

References assert(), and isDeadObjectIndex().

Referenced by llvm::SSPLayoutInfo::copyToMachineFrameInfo().

◆ setObjectZExt()

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

Definition at line 542 of file MachineFrameInfo.h.

References assert().

◆ setOffsetAdjustment()

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

◆ setRestorePoint()

void llvm::MachineFrameInfo::setRestorePoint ( MachineBasicBlock NewRestore)
inline

Definition at line 826 of file MachineFrameInfo.h.

Referenced by llvm::MIRParserImpl::initializeFrameInfo().

◆ setReturnAddressIsTaken()

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

◆ setSavePoint()

void llvm::MachineFrameInfo::setSavePoint ( MachineBasicBlock NewSave)
inline

Definition at line 824 of file MachineFrameInfo.h.

Referenced by llvm::MIRParserImpl::initializeFrameInfo().

◆ setStackID()

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

◆ setStackProtectorIndex()

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

Definition at line 361 of file MachineFrameInfo.h.

References I.

Referenced by llvm::MIRParserImpl::initializeFrameInfo().

◆ setStackSize()

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

◆ setUnsafeStackSize()

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

Definition at line 829 of file MachineFrameInfo.h.

References Size.

Referenced by setUnsafeStackSize().

◆ 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 460 of file MachineFrameInfo.h.

Referenced by INITIALIZE_PASS().

◆ shouldRealignStack()

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

Return true if stack realignment is forced by function attributes or if the stack alignment.

Definition at line 610 of file MachineFrameInfo.h.

Referenced by llvm::TargetRegisterInfo::shouldRealignStack().


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