|
LLVM
4.0.0
|
#include <SIFrameLowering.h>
Public Member Functions | |
| SIFrameLowering (StackDirection D, unsigned StackAl, int LAO, unsigned TransAl=1) | |
| ~SIFrameLowering () override=default | |
| void | emitPrologue (MachineFunction &MF, MachineBasicBlock &MBB) const override |
| emitProlog/emitEpilog - These methods insert prolog and epilog code into the function. More... | |
| void | emitEpilogue (MachineFunction &MF, MachineBasicBlock &MBB) const override |
| void | processFunctionBeforeFrameFinalized (MachineFunction &MF, RegScavenger *RS=nullptr) const override |
| processFunctionBeforeFrameFinalized - This method is called immediately before the specified function's frame layout (MF.getFrameInfo()) is finalized. More... | |
Public Member Functions inherited from llvm::AMDGPUFrameLowering | |
| AMDGPUFrameLowering (StackDirection D, unsigned StackAl, int LAO, unsigned TransAl=1) | |
| ~AMDGPUFrameLowering () override | |
| unsigned | getStackWidth (const MachineFunction &MF) const |
| int | getFrameIndexReference (const MachineFunction &MF, int FI, unsigned &FrameReg) const override |
| bool | hasFP (const MachineFunction &MF) const override |
| hasFP - Return true if the specified function should have a dedicated frame pointer register. More... | |
Public Member Functions inherited from llvm::TargetFrameLowering | |
| TargetFrameLowering (StackDirection D, unsigned StackAl, int LAO, unsigned TransAl=1, bool StackReal=true) | |
| virtual | ~TargetFrameLowering () |
| StackDirection | getStackGrowthDirection () const |
| getStackGrowthDirection - Return the direction the stack grows More... | |
| unsigned | getStackAlignment () const |
| getStackAlignment - This method returns the number of bytes to which the stack pointer must be aligned on entry to a function. More... | |
| int | alignSPAdjust (int SPAdj) const |
| alignSPAdjust - This method aligns the stack adjustment to the correct alignment. More... | |
| unsigned | getTransientStackAlignment () const |
| getTransientStackAlignment - This method returns the number of bytes to which the stack pointer must be aligned at all times, even between calls. More... | |
| bool | isStackRealignable () const |
| isStackRealignable - This method returns whether the stack can be realigned. More... | |
| virtual unsigned | getStackAlignmentSkew (const MachineFunction &MF) const |
| Return the skew that has to be applied to stack alignment under certain conditions (e.g. More... | |
| int | getOffsetOfLocalArea () const |
| getOffsetOfLocalArea - This method returns the offset of the local area from the stack pointer on entrance to a function. More... | |
| virtual bool | isFPCloseToIncomingSP () const |
| isFPCloseToIncomingSP - Return true if the frame pointer is close to the incoming stack pointer, false if it is close to the post-prologue stack pointer. More... | |
| virtual bool | assignCalleeSavedSpillSlots (MachineFunction &MF, const TargetRegisterInfo *TRI, std::vector< CalleeSavedInfo > &CSI) const |
| assignCalleeSavedSpillSlots - Allows target to override spill slot assignment logic. More... | |
| virtual const SpillSlot * | getCalleeSavedSpillSlots (unsigned &NumEntries) const |
| getCalleeSavedSpillSlots - This method returns a pointer to an array of pairs, that contains an entry for each callee saved register that must be spilled to a particular stack location if it is spilled. More... | |
| virtual bool | targetHandlesStackFrameRounding () const |
| targetHandlesStackFrameRounding - Returns true if the target is responsible for rounding up the stack frame (probably at emitPrologue time). More... | |
| virtual bool | enableShrinkWrapping (const MachineFunction &MF) const |
| Returns true if the target will correctly handle shrink wrapping. More... | |
| virtual bool | enableStackSlotScavenging (const MachineFunction &MF) const |
| Returns true if the stack slot holes in the fixed and callee-save stack area should be used when allocating other stack locations to reduce stack size. More... | |
| virtual void | inlineStackProbe (MachineFunction &MF, MachineBasicBlock &PrologueMBB) const |
| Replace a StackProbe stub (if any) with the actual probe code inline. More... | |
| virtual void | adjustForSegmentedStacks (MachineFunction &MF, MachineBasicBlock &PrologueMBB) const |
| Adjust the prologue to have the function use segmented stacks. More... | |
| virtual void | adjustForHiPEPrologue (MachineFunction &MF, MachineBasicBlock &PrologueMBB) const |
| Adjust the prologue to add Erlang Run-Time System (ERTS) specific code in the assembly prologue to explicitly handle the stack. More... | |
| virtual bool | spillCalleeSavedRegisters (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const std::vector< CalleeSavedInfo > &CSI, const TargetRegisterInfo *TRI) const |
| spillCalleeSavedRegisters - Issues instruction(s) to spill all callee saved registers and returns true if it isn't possible / profitable to do so by issuing a series of store instructions via storeRegToStackSlot(). More... | |
| virtual bool | restoreCalleeSavedRegisters (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const std::vector< CalleeSavedInfo > &CSI, const TargetRegisterInfo *TRI) const |
| restoreCalleeSavedRegisters - Issues instruction(s) to restore all callee saved registers and returns true if it isn't possible / profitable to do so by issuing a series of load instructions via loadRegToStackSlot(). More... | |
| virtual bool | noFramePointerElim (const MachineFunction &MF) const |
| Return true if the target needs to disable frame pointer elimination. More... | |
| virtual bool | hasReservedCallFrame (const MachineFunction &MF) const |
| hasReservedCallFrame - Under normal circumstances, when a frame pointer is not required, we reserve argument space for call sites in the function immediately on entry to the current function. More... | |
| virtual bool | canSimplifyCallFramePseudos (const MachineFunction &MF) const |
| canSimplifyCallFramePseudos - When possible, it's best to simplify the call frame pseudo ops before doing frame index elimination. More... | |
| virtual bool | needsFrameIndexResolution (const MachineFunction &MF) const |
| virtual int | getFrameIndexReferencePreferSP (const MachineFunction &MF, int FI, unsigned &FrameReg, bool IgnoreSPUpdates) const |
Same as getFrameIndexReference, except that the stack pointer (as opposed to the frame pointer) will be the preferred value for FrameReg. More... | |
| virtual void | determineCalleeSaves (MachineFunction &MF, BitVector &SavedRegs, RegScavenger *RS=nullptr) const |
| This method determines which of the registers reported by TargetRegisterInfo::getCalleeSavedRegs() should actually get saved. More... | |
| virtual unsigned | getWinEHParentFrameOffset (const MachineFunction &MF) const |
| virtual MachineBasicBlock::iterator | eliminateCallFramePseudoInstr (MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator MI) const |
| This method is called during prolog/epilog code insertion to eliminate call frame setup and destroy pseudo instructions (but only if the Target is using them). More... | |
| virtual void | orderFrameObjects (const MachineFunction &MF, SmallVectorImpl< int > &objectsToAllocate) const |
| Order the symbols in the local stack frame. More... | |
| virtual bool | canUseAsPrologue (const MachineBasicBlock &MBB) const |
Check whether or not the given MBB can be used as a prologue for the target. More... | |
| virtual bool | canUseAsEpilogue (const MachineBasicBlock &MBB) const |
Check whether or not the given MBB can be used as a epilogue for the target. More... | |
Additional Inherited Members | |
Public Types inherited from llvm::TargetFrameLowering | |
| enum | StackDirection { StackGrowsUp, StackGrowsDown } |
Static Public Member Functions inherited from llvm::TargetFrameLowering | |
| static bool | isSafeForNoCSROpt (const Function *F) |
| Check if given function is safe for not having callee saved registers. More... | |
Definition at line 22 of file SIFrameLowering.h.
|
inline |
Definition at line 24 of file SIFrameLowering.h.
|
overridedefault |
|
overridevirtual |
Implements llvm::TargetFrameLowering.
Definition at line 369 of file SIFrameLowering.cpp.
|
overridevirtual |
emitProlog/emitEpilog - These methods insert prolog and epilog code into the function.
Implements llvm::TargetFrameLowering.
Definition at line 188 of file SIFrameLowering.cpp.
References llvm::MachineInstrBuilder::addExternalSymbol(), llvm::MachineInstrBuilder::addImm(), llvm::MachineBasicBlock::addLiveIn(), llvm::MachineRegisterInfo::addLiveIn(), llvm::MachineInstrBuilder::addMemOperand(), llvm::MachineInstrBuilder::addReg(), assert(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), AMDGPUAS::CONSTANT_ADDRESS, llvm::SISubtarget::debuggerEmitPrologue(), llvm::MachineFunction::front(), llvm::PointerType::get(), llvm::MDNode::get(), llvm::UndefValue::get(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getInfo(), llvm::SISubtarget::getInstrInfo(), llvm::Type::getInt64Ty(), llvm::SIRegisterInfo::getPreloadedValue(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), llvm::MachineFrameInfo::hasStackObjects(), llvm::RegState::ImplicitDefine, llvm::AMDGPUSubtarget::isAmdCodeObjectV2(), llvm::AMDGPU::isCompute(), llvm::AMDGPUSubtarget::isMesaGfxShader(), llvm::RegState::Kill, llvm::MachineMemOperand::MODereferenceable, llvm::MachineMemOperand::MOInvariant, llvm::MachineMemOperand::MOLoad, llvm::SIRegisterInfo::PRIVATE_SEGMENT_BUFFER, llvm::SIRegisterInfo::PRIVATE_SEGMENT_WAVE_BYTE_OFFSET, and llvm::MachineRegisterInfo::use_empty().
|
overridevirtual |
processFunctionBeforeFrameFinalized - This method is called immediately before the specified function's frame layout (MF.getFrameInfo()) is finalized.
Once the frame is finalized, MO_FrameIndex operands are replaced with direct constants. This method is optional.
Reimplemented from llvm::TargetFrameLowering.
Definition at line 374 of file SIFrameLowering.cpp.
References llvm::RegScavenger::addScavengingFrameIndex(), assert(), llvm::MachineFrameInfo::CreateStackObject(), getAlignment(), llvm::MachineFunction::getFrameInfo(), and llvm::MachineFrameInfo::hasStackObjects().
1.8.6