LLVM 20.0.0git |
#include "Target/PowerPC/PPCFrameLowering.h"
Public Member Functions | |
PPCFrameLowering (constPPCSubtarget &STI) | |
uint64_t | determineFrameLayoutAndUpdate (MachineFunction &MF,bool UseEstimate=false)const |
Determine the frame layout and update the machine function. | |
uint64_t | determineFrameLayout (constMachineFunction &MF,bool UseEstimate=false,unsigned *NewMaxCallFrameSize=nullptr)const |
Determine the frame layout but do not update the machine function. | |
void | emitPrologue (MachineFunction &MF,MachineBasicBlock &MBB)const override |
emitProlog/emitEpilog - These methods insert prolog and epilog code into the function. | |
void | emitEpilogue (MachineFunction &MF,MachineBasicBlock &MBB)const override |
void | inlineStackProbe (MachineFunction &MF,MachineBasicBlock &PrologMBB)const override |
Replace a StackProbe stub (if any) with the actual probe code inline. | |
bool | needsFP (constMachineFunction &MF)const |
void | replaceFPWithRealFP (MachineFunction &MF)const |
void | determineCalleeSaves (MachineFunction &MF,BitVector &SavedRegs,RegScavenger *RS=nullptr)const override |
This method determines which of the registers reported byTargetRegisterInfo::getCalleeSavedRegs() should actually get saved. | |
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. | |
void | addScavengingSpillSlot (MachineFunction &MF,RegScavenger *RS)const |
bool | spillCalleeSavedRegisters (MachineBasicBlock &MBB,MachineBasicBlock::iteratorMI,ArrayRef<CalleeSavedInfo > CSI,constTargetRegisterInfo *TRI)const override |
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(). | |
bool | assignCalleeSavedSpillSlots (MachineFunction &MF,constTargetRegisterInfo *TRI, std::vector<CalleeSavedInfo > &CSI)const override |
This function will assign callee saved gprs to volatile vector registers for prologue spills when applicable. | |
MachineBasicBlock::iterator | eliminateCallFramePseudoInstr (MachineFunction &MF,MachineBasicBlock &MBB,MachineBasicBlock::iteratorI)const override |
This method is called during prolog/epilog code insertion to eliminate call frame setup and destroy pseudo instructions (but only if theTarget is using them). | |
bool | restoreCalleeSavedRegisters (MachineBasicBlock &MBB,MachineBasicBlock::iteratorMI,MutableArrayRef<CalleeSavedInfo > CSI,constTargetRegisterInfo *TRI)const override |
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(). | |
bool | targetHandlesStackFrameRounding ()const override |
targetHandlesStackFrameRounding - Returns true if the target is responsible for rounding up the stack frame (probably at emitPrologue time). | |
uint64_t | getReturnSaveOffset ()const |
getReturnSaveOffset - Return the previous frame offset to save the return address. | |
uint64_t | getTOCSaveOffset ()const |
getTOCSaveOffset - Return the previous frame offset to save the TOC register – 64-bit SVR4 ABI only. | |
uint64_t | getFramePointerSaveOffset ()const |
getFramePointerSaveOffset - Return the previous frame offset to save the frame pointer. | |
uint64_t | getBasePointerSaveOffset ()const |
getBasePointerSaveOffset - Return the previous frame offset to save the base pointer. | |
unsigned | getLinkageSize ()const |
getLinkageSize - Return the size of the PowerPC ABI linkage area. | |
constSpillSlot * | getCalleeSavedSpillSlots (unsigned &NumEntries)const override |
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. | |
bool | enableShrinkWrapping (constMachineFunction &MF)const override |
Returns true if the target will correctly handle shrink wrapping. | |
bool | canUseAsPrologue (constMachineBasicBlock &MBB)const override |
Methods used by shrink wrapping to determine if MBB can be used for the function prologue/epilogue. | |
bool | canUseAsEpilogue (constMachineBasicBlock &MBB)const override |
Check whether or not the givenMBB can be used as a epilogue for the target. | |
void | updateCalleeSaves (constMachineFunction &MF,BitVector &SavedRegs)const |
uint64_t | getStackThreshold ()const override |
getStackThreshold - Return the maximum stack size | |
![]() | |
TargetFrameLowering (StackDirectionD,Align StackAl, int LAO,Align TransAl=Align(1),bool StackReal=true) | |
virtual | ~TargetFrameLowering () |
StackDirection | getStackGrowthDirection ()const |
getStackGrowthDirection - Return the direction the stack grows | |
unsigned | getStackAlignment ()const |
getStackAlignment - This method returns the number of bytes to which the stack pointer must be aligned on entry to a function. | |
Align | getStackAlign ()const |
getStackAlignment - This method returns the number of bytes to which the stack pointer must be aligned on entry to a function. | |
virtualuint64_t | getStackThreshold ()const |
getStackThreshold - Return the maximum stack size | |
int | alignSPAdjust (int SPAdj)const |
alignSPAdjust - This method aligns the stack adjustment to the correct alignment. | |
Align | getTransientStackAlign ()const |
getTransientStackAlignment - This method returns the number of bytes to which the stack pointer must be aligned at all times, even between calls. | |
bool | isStackRealignable ()const |
isStackRealignable - This method returns whether the stack can be realigned. | |
virtualbool | isStackIdSafeForLocalArea (unsigned StackId)const |
This method returns whether or not it is safe for an object with the given stack id to be bundled into the local area. | |
int | getOffsetOfLocalArea ()const |
getOffsetOfLocalArea - This method returns the offset of the local area from the stack pointer on entrance to a function. | |
virtualbool | allocateScavengingFrameIndexesNearIncomingSP (constMachineFunction &MF)const |
Control the placement of special register scavenging spill slots when allocating a stack frame. | |
virtualbool | assignCalleeSavedSpillSlots (MachineFunction &MF,constTargetRegisterInfo *TRI, std::vector<CalleeSavedInfo > &CSI,unsigned &MinCSFrameIndex,unsigned &MaxCSFrameIndex)const |
assignCalleeSavedSpillSlots - Allows target to override spill slot assignment logic. | |
virtualbool | assignCalleeSavedSpillSlots (MachineFunction &MF,constTargetRegisterInfo *TRI, std::vector<CalleeSavedInfo > &CSI)const |
virtualconstSpillSlot * | 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. | |
virtualbool | targetHandlesStackFrameRounding ()const |
targetHandlesStackFrameRounding - Returns true if the target is responsible for rounding up the stack frame (probably at emitPrologue time). | |
virtualbool | enableShrinkWrapping (constMachineFunction &MF)const |
Returns true if the target will correctly handle shrink wrapping. | |
virtualbool | enableStackSlotScavenging (constMachineFunction &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. | |
virtualbool | enableCalleeSaveSkip (constMachineFunction &MF)const |
Returns true if the target can safely skip saving callee-saved registers for noreturn nounwind functions. | |
virtual void | emitPrologue (MachineFunction &MF,MachineBasicBlock &MBB)const =0 |
emitProlog/emitEpilog - These methods insert prolog and epilog code into the function. | |
virtual void | emitEpilogue (MachineFunction &MF,MachineBasicBlock &MBB)const =0 |
virtual void | emitZeroCallUsedRegs (BitVector RegsToZero,MachineBasicBlock &MBB)const |
emitZeroCallUsedRegs - Zeros out call used registers. | |
virtual void | emitCalleeSavedFrameMovesFullCFA (MachineBasicBlock &MBB,MachineBasicBlock::iteratorMBBI)const |
With basic block sections, emit callee saved frame moves for basic blocks that are in a different section. | |
virtualbool | enableCFIFixup (MachineFunction &MF)const |
Returns true if we may need to fix the unwind information for the function. | |
virtual void | resetCFIToInitialState (MachineBasicBlock &MBB)const |
Emit CFI instructions that recreate the state of the unwind information upon fucntion entry. | |
virtual void | inlineStackProbe (MachineFunction &MF,MachineBasicBlock &PrologueMBB)const |
Replace a StackProbe stub (if any) with the actual probe code inline. | |
virtualbool | stackProbeFunctionModifiesSP ()const |
Does the stack probe function call return with a modified stack pointer? | |
virtual void | adjustForSegmentedStacks (MachineFunction &MF,MachineBasicBlock &PrologueMBB)const |
Adjust the prologue to have the function use segmented stacks. | |
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. | |
virtualbool | spillCalleeSavedRegisters (MachineBasicBlock &MBB,MachineBasicBlock::iteratorMI,ArrayRef<CalleeSavedInfo > CSI,constTargetRegisterInfo *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(). | |
virtualbool | restoreCalleeSavedRegisters (MachineBasicBlock &MBB,MachineBasicBlock::iteratorMI,MutableArrayRef<CalleeSavedInfo > CSI,constTargetRegisterInfo *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(). | |
bool | hasFP (constMachineFunction &MF)const |
hasFP - Return true if the specified function should have a dedicated frame pointer register. | |
virtualbool | hasReservedCallFrame (constMachineFunction &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. | |
virtualbool | canSimplifyCallFramePseudos (constMachineFunction &MF)const |
canSimplifyCallFramePseudos - When possible, it's best to simplify the call frame pseudo ops before doing frame index elimination. | |
virtualbool | needsFrameIndexResolution (constMachineFunction &MF)const |
virtualStackOffset | getFrameIndexReference (constMachineFunction &MF, int FI,Register &FrameReg)const |
getFrameIndexReference - This method should return the base register and offset used to reference a frame index location. | |
virtualStackOffset | getFrameIndexReferencePreferSP (constMachineFunction &MF, int FI,Register &FrameReg,bool IgnoreSPUpdates)const |
Same asgetFrameIndexReference , except that the stack pointer (as opposed to the frame pointer) will be the preferred value forFrameReg . | |
virtualStackOffset | getNonLocalFrameIndexReference (constMachineFunction &MF, int FI)const |
getNonLocalFrameIndexReference - This method returns the offset used to reference a frame index location. | |
virtualStackOffset | getFrameIndexReferenceFromSP (constMachineFunction &MF, int FI)const |
getFrameIndexReferenceFromSP - This method returns the offset from the stack pointer to the slot of the specified index. | |
virtual void | getCalleeSaves (constMachineFunction &MF,BitVector &SavedRegs)const |
Returns the callee-saved registers as computed by determineCalleeSaves in theBitVectorSavedRegs . | |
virtual void | determineCalleeSaves (MachineFunction &MF,BitVector &SavedRegs,RegScavenger *RS=nullptr)const |
This method determines which of the registers reported byTargetRegisterInfo::getCalleeSavedRegs() should actually get saved. | |
virtual void | processFunctionBeforeFrameFinalized (MachineFunction &MF,RegScavenger *RS=nullptr)const |
processFunctionBeforeFrameFinalized - This method is called immediately before the specified function's frame layout (MF.getFrameInfo()) is finalized. | |
virtual void | processFunctionBeforeFrameIndicesReplaced (MachineFunction &MF,RegScavenger *RS=nullptr)const |
processFunctionBeforeFrameIndicesReplaced - This method is called immediately before MO_FrameIndex operands are eliminated, but after the frame is finalized. | |
virtualunsigned | getWinEHParentFrameOffset (constMachineFunction &MF)const |
virtualMachineBasicBlock::iterator | eliminateCallFramePseudoInstr (MachineFunction &MF,MachineBasicBlock &MBB,MachineBasicBlock::iteratorMI)const |
This method is called during prolog/epilog code insertion to eliminate call frame setup and destroy pseudo instructions (but only if theTarget is using them). | |
virtual void | orderFrameObjects (constMachineFunction &MF,SmallVectorImpl< int > &objectsToAllocate)const |
Order the symbols in the local stack frame. | |
virtualbool | canUseAsPrologue (constMachineBasicBlock &MBB)const |
Check whether or not the givenMBB can be used as a prologue for the target. | |
virtualbool | canUseAsEpilogue (constMachineBasicBlock &MBB)const |
Check whether or not the givenMBB can be used as a epilogue for the target. | |
virtualTargetStackID::Value | getStackIDForScalableVectors ()const |
Returns the StackID that scalable vectors should be associated with. | |
virtualbool | isSupportedStackID (TargetStackID::ValueID)const |
virtualbool | isProfitableForNoCSROpt (constFunction &F)const |
Check if the no-CSR optimisation is profitable for the given function. | |
virtual int | getInitialCFAOffset (constMachineFunction &MF)const |
Return initial CFA offset value i.e. | |
virtualRegister | getInitialCFARegister (constMachineFunction &MF)const |
Return initial CFA register value i.e. | |
virtualDwarfFrameBase | getDwarfFrameBase (constMachineFunction &MF)const |
Return the frame base information to be encoded in the DWARF subprogram debug info. | |
virtual void | spillFPBP (MachineFunction &MF)const |
If frame pointer or base pointer is clobbered by an instruction, we should spill/restore it around that instruction. | |
virtual void | emitRemarks (constMachineFunction &MF,MachineOptimizationRemarkEmitter *ORE)const |
This method is called at the end of prolog/epilog code insertion, so targets can emit remarks based on the final frame layout. | |
Protected Member Functions | |
bool | hasFPImpl (constMachineFunction &MF)const override |
virtualbool | hasFPImpl (constMachineFunction &MF)const =0 |
Additional Inherited Members | |
![]() | |
enum | StackDirection {StackGrowsUp,StackGrowsDown } |
![]() | |
staticbool | isSafeForNoCSROpt (constFunction &F) |
Check if given function is safe for not having callee saved registers. | |
Definition at line22 of filePPCFrameLowering.h.
PPCFrameLowering::PPCFrameLowering | ( | constPPCSubtarget & | STI | ) |
Definition at line82 of filePPCFrameLowering.cpp.
void PPCFrameLowering::addScavengingSpillSlot | ( | MachineFunction & | MF, |
RegScavenger * | RS | ||
) | const |
Definition at line2286 of filePPCFrameLowering.cpp.
Referencesllvm::RegScavenger::addScavengingFrameIndex(),llvm::MachineFrameInfo::CreateSpillStackObject(),determineFrameLayout(),llvm::MachineFunction::getFrameInfo(),llvm::MachineFrameInfo::getMaxAlign(),llvm::PPCSubtarget::getRegisterInfo(),llvm::TargetFrameLowering::getStackAlign(),hasNonRISpills(),hasSpills(),llvm::MachineFrameInfo::hasVarSizedObjects(),llvm::PPCSubtarget::isPPC64(),Size,spillsCR(), andTRI.
Referenced byprocessFunctionBeforeFrameFinalized().
| overridevirtual |
This function will assign callee saved gprs to volatile vector registers for prologue spills when applicable.
It returns false if there are any registers which were not spilled to volatile vector registers.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line2330 of filePPCFrameLowering.cpp.
Referencescontains(),EnablePEVectorSpills,llvm::BitVector::find_first(),llvm::PPCRegisterInfo::getCalleeSavedRegs(),llvm::MachineFunction::getFrameInfo(),llvm::MachineFunction::getRegInfo(),llvm::PPCSubtarget::getRegisterInfo(),llvm::MachineFrameInfo::hasCalls(),llvm::Lower,MRI,llvm::BitVector::none(),llvm::BitVector::reset(),llvm::BitVector::set(),llvm::BitVector::set_bits(),llvm::BitVector::size(), andTRI.
| overridevirtual |
Check whether or not the givenMBB
can be used as a epilogue for the target.
The epilogue will be inserted before the first terminator of that block. This method is used by the shrink-wrapping pass to decide ifMBB
will be correctly handled by the target. As soon as the target enable shrink-wrapping without overriding this method, we assume that each basic block is a valid epilogue.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line558 of filePPCFrameLowering.cpp.
ReferencesMBB.
| overridevirtual |
Methods used by shrink wrapping to determine if MBB can be used for the function prologue/epilogue.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line551 of filePPCFrameLowering.cpp.
ReferencesMBB.
| overridevirtual |
This method determines which of the registers reported byTargetRegisterInfo::getCalleeSavedRegs() should actually get saved.
The default implementation checks populates theSavedRegs
bitset with all registers which are modified in the function, targets may override this function to save additional registers. This method also sets up the register scavenger ensuring there is a free register or a frameindex available. This method should not be called by any passes outside of PEI, because it may change state passed in byMF
andRS
. The preferred interface outside PEI is getCalleeSaves.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line1970 of filePPCFrameLowering.cpp.
Referencesassert(),llvm::MachineFrameInfo::CreateFixedObject(),llvm::TargetFrameLowering::determineCalleeSaves(),llvm::PPCFunctionInfo::getBasePointerSaveIndex(),getBasePointerSaveOffset(),llvm::PPCRegisterInfo::getBaseRegister(),llvm::MachineFunction::getFrameInfo(),llvm::PPCFunctionInfo::getFramePointerSaveIndex(),getFramePointerSaveOffset(),llvm::MachineFunction::getInfo(),llvm::PPCSubtarget::getRegisterInfo(),llvm::PPCFunctionInfo::getTailCallSPDelta(),llvm::MachineFunction::getTarget(),llvm::TargetOptions::GuaranteedTailCallOpt,llvm::PPCRegisterInfo::hasBasePointer(),llvm::PPCSubtarget::isAIXABI(),llvm::PPCSubtarget::isPPC64(),MustSaveLR(),needsFP(),llvm::TargetMachine::Options,llvm::BitVector::reset(),llvm::BitVector::set(),llvm::PPCFunctionInfo::setBasePointerSaveIndex(),llvm::PPCFunctionInfo::setCRSpillFrameIndex(),llvm::PPCFunctionInfo::setFramePointerSaveIndex(),llvm::PPCFunctionInfo::setMustSaveLR(),llvm::PPCFunctionInfo::setPICBasePointerSaveIndex(),llvm::BitVector::test(),updateCalleeSaves(), andllvm::PPCFunctionInfo::usesPICBase().
uint64_t PPCFrameLowering::determineFrameLayout | ( | constMachineFunction & | MF, |
bool | UseEstimate =false , | ||
unsigned * | NewMaxCallFrameSize =nullptr | ||
) | const |
Determine the frame layout but do not update the machine function.
determineFrameLayout - Determine the size of the frame and maximum call frame size.
TheMachineFunction object can be const in this case as it is not modified.
Definition at line297 of filePPCFrameLowering.cpp.
Referencesllvm::MachineFrameInfo::adjustsStack(),llvm::alignTo(),llvm::MachineFrameInfo::estimateStackSize(),llvm::MachineFunction::getFrameInfo(),llvm::MachineFunction::getFunction(),llvm::MachineFunction::getInfo(),getLinkageSize(),llvm::MachineFrameInfo::getMaxAlign(),llvm::MachineFrameInfo::getMaxCallFrameSize(),llvm::PPCSubtarget::getRedZoneSize(),llvm::PPCSubtarget::getRegisterInfo(),llvm::TargetFrameLowering::getStackAlign(),llvm::MachineFrameInfo::getStackSize(),llvm::PPCRegisterInfo::hasBasePointer(),llvm::Function::hasFnAttribute(),llvm::MachineFrameInfo::hasVarSizedObjects(),llvm::MachineFrameInfo::isFrameAddressTaken(),MustSaveLR(), andllvm::PPCFunctionInfo::mustSaveTOC().
Referenced byaddScavengingSpillSlot(),determineFrameLayoutAndUpdate(), andllvm::PPCRegisterInfo::needsFrameBaseReg().
uint64_t PPCFrameLowering::determineFrameLayoutAndUpdate | ( | MachineFunction & | MF, |
bool | UseEstimate =false | ||
) | const |
Determine the frame layout and update the machine function.
determineFrameLayoutAndUpdate - Determine the size of the frame and maximum call frame size.
Update theMachineFunction object with the stack size.
Definition at line284 of filePPCFrameLowering.cpp.
ReferencesdetermineFrameLayout(),llvm::MachineFunction::getFrameInfo(),llvm::MachineFrameInfo::setMaxCallFrameSize(), andllvm::MachineFrameInfo::setStackSize().
Referenced byemitPrologue().
| overridevirtual |
This method is called during prolog/epilog code insertion to eliminate call frame setup and destroy pseudo instructions (but only if theTarget is using them).
It is responsible for eliminating these instructions, replacing them with concrete instructions. This method need only be implemented if using call frame setup/destroy pseudo instructions. Returns an iterator pointing to the instruction after the replaced one.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line2561 of filePPCFrameLowering.cpp.
Referencesllvm::MachineInstrBuilder::addImm(),llvm::MachineInstrBuilder::addReg(),llvm::BuildMI(),llvm::MachineBasicBlock::erase(),llvm::PPCSubtarget::getInstrInfo(),llvm::MachineFunction::getTarget(),llvm::TargetOptions::GuaranteedTailCallOpt,I,is64Bit(),llvm::PPCSubtarget::isPPC64(),llvm::RegState::Kill,MBB,MBBI,llvm::TargetMachine::Options, andTII.
| overridevirtual |
Implementsllvm::TargetFrameLowering.
Definition at line1542 of filePPCFrameLowering.cpp.
Referencesllvm::MachineInstrBuilder::addImm(),llvm::MachineInstrBuilder::addReg(),assert(),llvm::BuildMI(),llvm::SmallVectorBase< Size_T >::empty(),llvm::MachineBasicBlock::end(),llvm::MachineFunction::exposesReturnsTwice(),llvm::CallingConv::Fast,FPReg,llvm::PPCFunctionInfo::getBasePointerSaveIndex(),llvm::PPCRegisterInfo::getBaseRegister(),llvm::MachineFrameInfo::getCalleeSavedInfo(),llvm::Function::getCallingConv(),llvm::MachineBasicBlock::getFirstTerminator(),llvm::MachineFunction::getFrameInfo(),llvm::PPCFunctionInfo::getFramePointerSaveIndex(),llvm::MachineFunction::getFunction(),llvm::MachineOperand::getImm(),llvm::MachineFunction::getInfo(),llvm::PPCSubtarget::getInstrInfo(),llvm::getKillRegState(),llvm::PPCFunctionInfo::getMinReservedArea(),llvm::PPCFunctionInfo::getMustSaveCRs(),llvm::MachineFrameInfo::getObjectOffset(),llvm::PPCFunctionInfo::getPICBasePointerSaveIndex(),llvm::PPCSubtarget::getRegisterInfo(),getReturnSaveOffset(),llvm::PPCFunctionInfo::getROPProtectionHashSaveIndex(),llvm::MachineFrameInfo::getStackSize(),llvm::PPCFunctionInfo::getTailCallSPDelta(),llvm::MachineFunction::getTarget(),llvm::TargetOptions::GuaranteedTailCallOpt,llvm::PPCRegisterInfo::hasBasePointer(),llvm::PPCFunctionInfo::hasFastCall(),llvm::TargetFrameLowering::hasFP(),llvm::MachineFrameInfo::hasVarSizedObjects(),Info,llvm::MachineFrameInfo::isFixedObjectIndex(),llvm::MachineOperand::isImm(),llvm::PPCSubtarget::isPPC64(),llvm::PPCSubtarget::isSVR4ABI(),llvm::RegState::Kill,MBB,MBBI,llvm::PPCFunctionInfo::mustSaveLR(),MustSaveLR(),llvm::TargetMachine::Options,llvm::SmallVectorBase< Size_T >::size(),SPReg,TII, andllvm::PPCFunctionInfo::usesPICBase().
| overridevirtual |
emitProlog/emitEpilog - These methods insert prolog and epilog code into the function.
Implementsllvm::TargetFrameLowering.
Definition at line608 of filePPCFrameLowering.cpp.
Referencesllvm::MachineInstrBuilder::addCFIIndex(),llvm::MachineInstrBuilder::addDef(),llvm::MachineFunction::addFrameInst(),llvm::MachineInstrBuilder::addImm(),llvm::MachineInstrBuilder::addReg(),assert(),llvm::MachineBasicBlock::begin(),llvm::BuildMI(),llvm::MCCFIInstruction::cfiDefCfaOffset(),contains(),llvm::MCCFIInstruction::createDefCfaRegister(),llvm::MCCFIInstruction::createOffset(),llvm::MCCFIInstruction::createRegister(),determineFrameLayoutAndUpdate(),llvm::SmallVectorBase< Size_T >::empty(),FPReg,llvm::PPCFunctionInfo::getBasePointerSaveIndex(),llvm::PPCRegisterInfo::getBaseRegister(),llvm::MachineFrameInfo::getCalleeSavedInfo(),llvm::MachineFunction::getContext(),llvm::MachineFunction::getFrameInfo(),llvm::PPCFunctionInfo::getFramePointerSaveIndex(),llvm::MachineFunction::getInfo(),llvm::PPCSubtarget::getInstrInfo(),llvm::getKillRegState(),llvm::MachineFrameInfo::getMaxAlign(),llvm::PPCFunctionInfo::getMustSaveCRs(),llvm::MachineFrameInfo::getObjectOffset(),llvm::PPCFunctionInfo::getPICBasePointerSaveIndex(),llvm::MCContext::getRegisterInfo(),llvm::PPCSubtarget::getRegisterInfo(),getReturnSaveOffset(),llvm::PPCFunctionInfo::getROPProtectionHashSaveIndex(),llvm::PPCTargetLowering::getStackProbeSize(),llvm::PPCSubtarget::getTargetLowering(),llvm::PPCRegisterInfo::hasBasePointer(),llvm::TargetFrameLowering::hasFP(),llvm::PPCTargetLowering::hasInlineStackProbe(),I,llvm::RegState::ImplicitKill,Info,llvm::PPCSubtarget::isAIXABI(),llvm::PPCSubtarget::isELFv2ABI(),llvm::MachineFrameInfo::isFixedObjectIndex(),llvm::MachineFrameInfo::isFrameAddressTaken(),llvm::PPCSubtarget::isPPC64(),llvm::PPCSubtarget::isSVR4ABI(),llvm::RegState::Kill,llvm_unreachable,llvm::Log2(),MBB,MBBI,MRI,llvm::PPCFunctionInfo::mustSaveLR(),MustSaveLR(),llvm::PPCFunctionInfo::mustSaveTOC(),llvm::MachineFunction::needsFrameMoves(),llvm::Offset,replaceFPWithRealFP(),llvm::MachineFrameInfo::setObjectOffset(),llvm::SmallVectorBase< Size_T >::size(),SPReg,TII, andllvm::PPCFunctionInfo::usesPICBase().
| overridevirtual |
Returns true if the target will correctly handle shrink wrapping.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line2737 of filePPCFrameLowering.cpp.
Referencesllvm::MachineFunction::getInfo(),llvm::MachineFunction::getSubtarget(), andllvm::PPCFunctionInfo::shrinkWrapDisabled().
uint64_t PPCFrameLowering::getBasePointerSaveOffset | ( | ) | const |
getBasePointerSaveOffset - Return the previous frame offset to save the base pointer.
Definition at line2733 of filePPCFrameLowering.cpp.
Referenced bydetermineCalleeSaves().
| overridevirtual |
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.
Each entry in this array contains a <register,offset> pair, indicating the fixed offset from the incoming stack pointer that each register should be spilled at. If a register is not listed here, the code generator is allowed to spill it anywhere it chooses.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line93 of filePPCFrameLowering.cpp.
Referencesassert(),CALLEE_SAVED_FPRS,CALLEE_SAVED_GPRS32,CALLEE_SAVED_GPRS64,CALLEE_SAVED_VRS,llvm::PPCSubtarget::is32BitELFABI(),llvm::PPCSubtarget::is64BitELFABI(),llvm::PPCSubtarget::isAIXABI(), andllvm::PPCSubtarget::isPPC64().
uint64_t PPCFrameLowering::getFramePointerSaveOffset | ( | ) | const |
getFramePointerSaveOffset - Return the previous frame offset to save the frame pointer.
Definition at line2729 of filePPCFrameLowering.cpp.
Referenced bydetermineCalleeSaves().
| inline |
getLinkageSize - Return the size of the PowerPC ABI linkage area.
Definition at line164 of filePPCFrameLowering.h.
Referenced bydetermineFrameLayout(),mapArgRegToOffsetAIX(), andneedStackSlotPassParameters().
| inline |
getReturnSaveOffset - Return the previous frame offset to save the return address.
Definition at line148 of filePPCFrameLowering.h.
Referenced byemitEpilogue(), andemitPrologue().
| overridevirtual |
getStackThreshold - Return the maximum stack size
Reimplemented fromllvm::TargetFrameLowering.
Definition at line2808 of filePPCFrameLowering.cpp.
Referencesllvm::TargetFrameLowering::getStackThreshold(), andllvm::PPCSubtarget::isPPC64().
uint64_t PPCFrameLowering::getTOCSaveOffset | ( | ) | const |
getTOCSaveOffset - Return the previous frame offset to save the TOC register – 64-bit SVR4 ABI only.
Definition at line2725 of filePPCFrameLowering.cpp.
Referenced bybuildCallOperands(), andllvm::PPCInstrInfo::isTOCSaveMI().
| overrideprotectedvirtual |
Implementsllvm::TargetFrameLowering.
Definition at line360 of filePPCFrameLowering.cpp.
Referencesllvm::MachineFunction::getFrameInfo(),llvm::MachineFrameInfo::getStackSize(), andneedsFP().
| overridevirtual |
Replace a StackProbe stub (if any) with the actual probe code inline.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line1238 of filePPCFrameLowering.cpp.
Referencesllvm::MachineInstrBuilder::addCFIIndex(),llvm::MachineFunction::addFrameInst(),llvm::MachineInstrBuilder::addImm(),llvm::MachineInstrBuilder::addMBB(),llvm::MachineInstrBuilder::addReg(),llvm::MachineBasicBlock::addSuccessor(),assert(),llvm::MachineBasicBlock::begin(),buildDefCFAReg(),llvm::BuildMI(),llvm::MCCFIInstruction::cfiDefCfa(),llvm::MCCFIInstruction::createDefCfaRegister(),llvm::MachineFunction::CreateMachineBasicBlock(),DL,llvm::MachineBasicBlock::end(),llvm::find_if(),llvm::MachineBasicBlock::findDebugLoc(),FPReg,llvm::fullyRecomputeLiveIns(),llvm::PPCRegisterInfo::getBaseRegister(),llvm::MachineBasicBlock::getBasicBlock(),llvm::MachineFunction::getContext(),llvm::MachineFunction::getFrameInfo(),llvm::PPCSubtarget::getInstrInfo(),llvm::ilist_node_impl< OptionsT >::getIterator(),llvm::MachineFrameInfo::getMaxAlign(),llvm::MachineBasicBlock::getParent(),llvm::PPCSubtarget::getRedZoneSize(),llvm::MCContext::getRegisterInfo(),llvm::PPCSubtarget::getRegisterInfo(),llvm::PPCTargetLowering::getStackProbeSize(),llvm::PPCSubtarget::getTargetLowering(),llvm::PPCRegisterInfo::hasBasePointer(),llvm::MachineFunction::insert(),llvm::PPCSubtarget::isAIXABI(),llvm::isPowerOf2_64(),llvm::PPCSubtarget::isPPC64(),llvm::PPCSubtarget::isSVR4ABI(),llvm::RegState::Kill,llvm::Log2(),MBB,MBBI,MI,MRI,llvm::MachineFunction::needsFrameMoves(),llvm::Offset,llvm::PPC::PRED_GE,llvm::PPC::PRED_LT,llvm::MachineBasicBlock::splice(),SPReg,TII, andllvm::MachineBasicBlock::transferSuccessorsAndUpdatePHIs().
bool PPCFrameLowering::needsFP | ( | constMachineFunction & | MF | ) | const |
Definition at line371 of filePPCFrameLowering.cpp.
Referencesllvm::TargetOptions::DisableFramePointerElim(),llvm::MachineFunction::exposesReturnsTwice(),llvm::MachineFunction::getFrameInfo(),llvm::MachineFunction::getFunction(),llvm::MachineFunction::getInfo(),llvm::MachineFunction::getTarget(),llvm::TargetOptions::GuaranteedTailCallOpt,llvm::Function::hasFnAttribute(),llvm::MachineFrameInfo::hasPatchPoint(),llvm::MachineFrameInfo::hasStackMap(),llvm::MachineFrameInfo::hasVarSizedObjects(), andllvm::TargetMachine::Options.
Referenced bydetermineCalleeSaves(),hasFPImpl(),processFunctionBeforeFrameFinalized(),replaceFPWithRealFP(), andrestoreCalleeSavedRegisters().
| 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 fromllvm::TargetFrameLowering.
Definition at line2071 of filePPCFrameLowering.cpp.
ReferencesaddScavengingSpillSlot(),assert(),contains(),llvm::PPCFunctionInfo::getBasePointerSaveIndex(),llvm::PPCRegisterInfo::getBaseRegister(),llvm::MachineFrameInfo::getCalleeSavedInfo(),llvm::MachineFunction::getFrameInfo(),llvm::PPCFunctionInfo::getFramePointerSaveIndex(),llvm::MachineFunction::getInfo(),llvm::MachineFrameInfo::getObjectOffset(),llvm::PPCFunctionInfo::getPICBasePointerSaveIndex(),llvm::PPCSubtarget::getRegisterInfo(),llvm::MachineFrameInfo::getRestorePoint(),llvm::MachineFrameInfo::getSavePoint(),llvm::PPCFunctionInfo::getTailCallSPDelta(),llvm::MachineFunction::getTarget(),llvm::TargetOptions::GuaranteedTailCallOpt,llvm::PPCRegisterInfo::hasBasePointer(),llvm::MachineFrameInfo::hasTailCall(),I,llvm::PPCSubtarget::is32BitELFABI(),llvm::PPCSubtarget::isPPC64(),llvm::MachineBasicBlock::isReturnBlock(),llvm_unreachable,MBB,llvm::PPCFunctionInfo::mustSaveTOC(),needsFP(),llvm::TargetMachine::Options,llvm::SmallVectorTemplateBase< T, bool >::push_back(),llvm::MachineFrameInfo::setObjectOffset(),llvm::SmallVectorBase< Size_T >::size(),spillsCR(),TRI, andllvm::PPCFunctionInfo::usesPICBase().
void PPCFrameLowering::replaceFPWithRealFP | ( | MachineFunction & | MF | ) | const |
Definition at line386 of filePPCFrameLowering.cpp.
Referencesllvm::MachineBasicBlock::begin(),llvm::MachineBasicBlock::end(),FPReg,llvm::PPCRegisterInfo::getBaseRegister(),llvm::MachineFunction::getFrameInfo(),llvm::PPCSubtarget::getRegisterInfo(),llvm::PPCRegisterInfo::hasBasePointer(),llvm::MachineFrameInfo::hasVarSizedObjects(),MBB,MBBI, andneedsFP().
Referenced byemitPrologue().
| overridevirtual |
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().
If it returns true, and any of the registers in CSI is not restored, it sets the corresponding Restored flag in CSI to false. Returns false otherwise.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line2604 of filePPCFrameLowering.cpp.
Referencesllvm::MachineInstrBuilder::addReg(),assert(),llvm::MachineBasicBlock::begin(),llvm::BuildMI(),DL,llvm::MachineFunction::getFunction(),llvm::MachineFunction::getInfo(),llvm::PPCSubtarget::getInstrInfo(),llvm::getKillRegState(),llvm::MachineBasicBlock::getParent(),llvm::Function::hasFnAttribute(),I,llvm::PPCSubtarget::is32BitELFABI(),isCalleeSavedCR(),llvm_unreachable,llvm::HexagonInstrInfo::loadRegFromStackSlot(),MBB,MI,llvm::PPCFunctionInfo::mustSaveTOC(),needsFP(),llvm::PPCSubtarget::needsSwapsForVSXMemOps(),restoreCRs(),llvm::BitVector::set(),llvm::ArrayRef< T >::size(),TII, andTRI.
| overridevirtual |
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().
Returns false otherwise.
Reimplemented fromllvm::TargetFrameLowering.
Definition at line2410 of filePPCFrameLowering.cpp.
Referencesllvm::addFrameReference(),llvm::MachineBasicBlock::addLiveIn(),llvm::PPCFunctionInfo::addMustSaveCR(),llvm::MachineInstrBuilder::addReg(),assert(),llvm::BuildMI(),DL,llvm::MachineFunction::getFunction(),llvm::MachineFunction::getInfo(),llvm::PPCSubtarget::getInstrInfo(),llvm::getKillRegState(),llvm::MachineBasicBlock::getParent(),llvm::MachineFunction::getRegInfo(),llvm::Function::hasFnAttribute(),I,llvm::RegState::ImplicitKill,Info,llvm::MachineBasicBlock::insert(),llvm::PPCSubtarget::is32BitELFABI(),llvm_unreachable,MBB,MI,MRI,llvm::PPCFunctionInfo::mustSaveTOC(),llvm::PPCSubtarget::needsSwapsForVSXMemOps(),llvm::BitVector::set(),llvm::PPCFunctionInfo::setSpillsCR(),llvm::HexagonInstrInfo::storeRegToStackSlot(),TII, andTRI.
| inlineoverridevirtual |
targetHandlesStackFrameRounding - Returns true if the target is responsible for rounding up the stack frame (probably at emitPrologue time).
Reimplemented fromllvm::TargetFrameLowering.
Definition at line144 of filePPCFrameLowering.h.
void PPCFrameLowering::updateCalleeSaves | ( | constMachineFunction & | MF, |
BitVector & | SavedRegs | ||
) | const |
Definition at line2743 of filePPCFrameLowering.cpp.
Referencesassert(),contains(),llvm::PPCRegisterInfo::getCalleeSavedRegs(),llvm::PPCSubtarget::getRegisterInfo(),llvm::PPCSubtarget::isAIXABI(),llvm::BitVector::none(),llvm::BitVector::set(), andllvm::BitVector::test().
Referenced bydetermineCalleeSaves().