LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Static Public Member Functions | List of all members
llvm::PPCFrameLowering Class Reference

#include <PPCFrameLowering.h>

Inheritance diagram for llvm::PPCFrameLowering:
Inheritance graph
[legend]
Collaboration diagram for llvm::PPCFrameLowering:
Collaboration graph
[legend]

Public Member Functions

 PPCFrameLowering (const PPCSubtarget &sti)
 
unsigned determineFrameLayout (MachineFunction &MF, bool UpdateMF=true, bool UseEstimate=false) const
 
void emitPrologue (MachineFunction &MF) const
 
void emitEpilogue (MachineFunction &MF, MachineBasicBlock &MBB) const
 
bool hasFP (const MachineFunction &MF) const
 
bool needsFP (const MachineFunction &MF) const
 
void replaceFPWithRealFP (MachineFunction &MF) const
 
void processFunctionBeforeCalleeSavedScan (MachineFunction &MF, RegScavenger *RS=NULL) const
 
void processFunctionBeforeFrameFinalized (MachineFunction &MF, RegScavenger *RS=NULL) const
 
void addScavengingSpillSlot (MachineFunction &MF, RegScavenger *RS) const
 
bool spillCalleeSavedRegisters (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const std::vector< CalleeSavedInfo > &CSI, const TargetRegisterInfo *TRI) const
 
void eliminateCallFramePseudoInstr (MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator I) const
 
bool restoreCalleeSavedRegisters (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const std::vector< CalleeSavedInfo > &CSI, const TargetRegisterInfo *TRI) const
 
bool targetHandlesStackFrameRounding () const
 
const SpillSlotgetCalleeSavedSpillSlots (unsigned &NumEntries) const
 
- 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
 
unsigned getStackAlignment () const
 
unsigned getTransientStackAlignment () const
 
bool isStackRealignable () const
 
int getOffsetOfLocalArea () const
 
virtual bool isFPCloseToIncomingSP () const
 
virtual void adjustForSegmentedStacks (MachineFunction &MF) const
 
virtual void adjustForHiPEPrologue (MachineFunction &MF) const
 
virtual bool hasReservedCallFrame (const MachineFunction &MF) const
 
virtual bool canSimplifyCallFramePseudos (const MachineFunction &MF) const
 
virtual int getFrameIndexOffset (const MachineFunction &MF, int FI) const
 
virtual int getFrameIndexReference (const MachineFunction &MF, int FI, unsigned &FrameReg) const
 

Static Public Member Functions

static unsigned getReturnSaveOffset (bool isPPC64, bool isDarwinABI)
 
static unsigned getFramePointerSaveOffset (bool isPPC64, bool isDarwinABI)
 
static unsigned getBasePointerSaveOffset (bool isPPC64, bool isDarwinABI)
 
static unsigned getLinkageSize (bool isPPC64, bool isDarwinABI)
 
static unsigned getMinCallArgumentsSize (bool isPPC64, bool isDarwinABI)
 
static unsigned getMinCallFrameSize (bool isPPC64, bool isDarwinABI)
 

Additional Inherited Members

- Public Types inherited from llvm::TargetFrameLowering
enum  StackDirection { StackGrowsUp, StackGrowsDown }
 

Detailed Description

Definition at line 25 of file PPCFrameLowering.h.

Constructor & Destructor Documentation

llvm::PPCFrameLowering::PPCFrameLowering ( const PPCSubtarget sti)
inline

Definition at line 29 of file PPCFrameLowering.h.

Member Function Documentation

void PPCFrameLowering::addScavengingSpillSlot ( MachineFunction MF,
RegScavenger RS 
) const
unsigned PPCFrameLowering::determineFrameLayout ( MachineFunction MF,
bool  UpdateMF = true,
bool  UseEstimate = false 
) const
void PPCFrameLowering::eliminateCallFramePseudoInstr ( MachineFunction MF,
MachineBasicBlock MBB,
MachineBasicBlock::iterator  MI 
) const
virtual

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

Reimplemented from llvm::TargetFrameLowering.

Definition at line 1298 of file PPCFrameLowering.cpp.

References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::MachineBasicBlock::erase(), llvm::MachineInstr::getDebugLoc(), llvm::TargetMachine::getInstrInfo(), llvm::MachineFunction::getTarget(), llvm::TargetOptions::GuaranteedTailCallOpt, I, llvm::isInt< 16 >(), llvm::PPCSubtarget::isPPC64(), llvm::RegState::Kill, llvm::A64CC::MI, llvm::TargetMachine::Options, and TII.

void PPCFrameLowering::emitEpilogue ( MachineFunction MF,
MachineBasicBlock MBB 
) const
virtual

Implements llvm::TargetFrameLowering.

Definition at line 646 of file PPCFrameLowering.cpp.

References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::SmallVectorBase::empty(), llvm::MachineBasicBlock::end(), llvm::CallingConv::Fast, llvm::DebugLoc::get(), llvm::PPCFunctionInfo::getBasePointerSaveIndex(), getBasePointerSaveOffset(), llvm::Function::getCallingConv(), llvm::MachineFunction::getFrameInfo(), llvm::PPCFunctionInfo::getFramePointerSaveIndex(), getFramePointerSaveOffset(), llvm::MachineFunction::getFunction(), llvm::MachineOperand::getGlobal(), llvm::MachineOperand::getImm(), llvm::MachineFunction::getInfo(), llvm::TargetMachine::getInstrInfo(), llvm::getKillRegState(), llvm::MachineBasicBlock::getLastNonDebugInstr(), llvm::PPCFunctionInfo::getMinReservedArea(), llvm::PPCFunctionInfo::getMustSaveCRs(), llvm::MachineFrameInfo::getObjectOffset(), llvm::MachineOperand::getOffset(), llvm::TargetMachine::getRegisterInfo(), getReturnSaveOffset(), llvm::MachineFrameInfo::getStackSize(), llvm::PPCFunctionInfo::getTailCallSPDelta(), llvm::MachineFunction::getTarget(), llvm::TargetOptions::GuaranteedTailCallOpt, llvm::PPCRegisterInfo::hasBasePointer(), llvm::PPCFunctionInfo::hasFastCall(), hasFP(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::PPCSubtarget::isDarwinABI(), llvm::MachineOperand::isImm(), llvm::isInt< 16 >(), llvm::PPCSubtarget::isPPC64(), llvm::PPCSubtarget::isSVR4ABI(), llvm::RegState::Kill, llvm::A64DB::LD, llvm::PPCFunctionInfo::mustSaveLR(), MustSaveLR(), llvm::TargetMachine::Options, llvm::SmallVectorTemplateCommon< T, typename >::size(), and TII.

void PPCFrameLowering::emitPrologue ( MachineFunction MF) const
virtual

emitProlog/emitEpilog - These methods insert prolog and epilog code into the function.

Implements llvm::TargetFrameLowering.

Definition at line 333 of file PPCFrameLowering.cpp.

References llvm::MachineModuleInfo::addFrameInst(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), llvm::MCCFIInstruction::createDefCfaOffset(), llvm::MCCFIInstruction::createDefCfaRegister(), llvm::MCCFIInstruction::createOffset(), llvm::MCContext::CreateTempSymbol(), determineFrameLayout(), llvm::SmallVectorBase::empty(), llvm::MachineBasicBlock::end(), llvm::MachineFunction::front(), llvm::PPCFunctionInfo::getBasePointerSaveIndex(), getBasePointerSaveOffset(), llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MachineModuleInfo::getContext(), llvm::MCRegisterInfo::getDwarfRegNum(), llvm::MachineFunction::getFrameInfo(), llvm::PPCFunctionInfo::getFramePointerSaveIndex(), getFramePointerSaveOffset(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::TargetMachine::getInstrInfo(), llvm::getKillRegState(), llvm::MachineFrameInfo::getMaxAlignment(), llvm::MachineFunction::getMMI(), llvm::PPCFunctionInfo::getMustSaveCRs(), llvm::MachineFrameInfo::getObjectOffset(), llvm::TargetMachine::getRegisterInfo(), llvm::MCContext::getRegisterInfo(), getReturnSaveOffset(), llvm::MachineFunction::getTarget(), HandleVRSaveUpdate(), llvm::PPCRegisterInfo::hasBasePointer(), llvm::MachineModuleInfo::hasDebugInfo(), hasFP(), I, llvm::RegState::ImplicitKill, llvm::PPCSubtarget::isDarwinABI(), llvm::MachineFrameInfo::isFrameAddressTaken(), llvm::isInt< 16 >(), llvm::isInt< 32 >(), llvm::isPowerOf2_32(), llvm::PPCSubtarget::isPPC64(), llvm::PPCSubtarget::isSVR4ABI(), llvm::RegState::Kill, llvm_unreachable, llvm::Log2_32(), MRI, llvm::PPCFunctionInfo::mustSaveLR(), MustSaveLR(), llvm::Function::needsUnwindTableEntry(), OR, llvm::TargetOpcode::PROLOG_LABEL, replaceFPWithRealFP(), llvm::NVPTX::PTXCvtMode::RM, llvm::SmallVectorTemplateCommon< T, typename >::size(), and TII.

static unsigned llvm::PPCFrameLowering::getBasePointerSaveOffset ( bool  isPPC64,
bool  isDarwinABI 
)
inlinestatic

getBasePointerSaveOffset - Return the previous frame offset to save the base pointer.

Definition at line 99 of file PPCFrameLowering.h.

Referenced by emitEpilogue(), emitPrologue(), and processFunctionBeforeCalleeSavedScan().

const SpillSlot* llvm::PPCFrameLowering::getCalleeSavedSpillSlots ( unsigned NumEntries) const
inlinevirtual

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 from llvm::TargetFrameLowering.

Definition at line 144 of file PPCFrameLowering.h.

References llvm::array_lengthof(), llvm::PPCSubtarget::isDarwinABI(), llvm::PPCSubtarget::isPPC64(), and llvm::PPCSubtarget::isSVR4ABI().

static unsigned llvm::PPCFrameLowering::getFramePointerSaveOffset ( bool  isPPC64,
bool  isDarwinABI 
)
inlinestatic

getFramePointerSaveOffset - Return the previous frame offset to save the frame pointer.

Definition at line 84 of file PPCFrameLowering.h.

Referenced by emitEpilogue(), emitPrologue(), EmitTailCallStoreFPAndRetAddr(), and processFunctionBeforeCalleeSavedScan().

static unsigned llvm::PPCFrameLowering::getLinkageSize ( bool  isPPC64,
bool  isDarwinABI 
)
inlinestatic

getLinkageSize - Return the size of the PowerPC ABI linkage area.

Definition at line 109 of file PPCFrameLowering.h.

Referenced by CalculateParameterAndLinkageAreaSize(), and getMinCallFrameSize().

static unsigned llvm::PPCFrameLowering::getMinCallArgumentsSize ( bool  isPPC64,
bool  isDarwinABI 
)
inlinestatic

getMinCallArgumentsSize - Return the size of the minium PowerPC ABI argument area.

Definition at line 119 of file PPCFrameLowering.h.

Referenced by getMinCallFrameSize().

static unsigned llvm::PPCFrameLowering::getMinCallFrameSize ( bool  isPPC64,
bool  isDarwinABI 
)
inlinestatic

getMinCallFrameSize - Return the minimum size a call frame can be using the PowerPC ABI.

Definition at line 136 of file PPCFrameLowering.h.

References getLinkageSize(), and getMinCallArgumentsSize().

Referenced by CalculateParameterAndLinkageAreaSize(), and determineFrameLayout().

static unsigned llvm::PPCFrameLowering::getReturnSaveOffset ( bool  isPPC64,
bool  isDarwinABI 
)
inlinestatic

getReturnSaveOffset - Return the previous frame offset to save the return address.

Definition at line 75 of file PPCFrameLowering.h.

Referenced by emitEpilogue(), emitPrologue(), and EmitTailCallStoreFPAndRetAddr().

bool PPCFrameLowering::hasFP ( const MachineFunction MF) const
virtual

hasFP - Return true if the specified function should have a dedicated frame pointer register. For most targets this is true only if the function has variable sized allocas or if frame pointer elimination is disabled.

Implements llvm::TargetFrameLowering.

Definition at line 268 of file PPCFrameLowering.cpp.

References llvm::MachineFunction::getFrameInfo(), llvm::MachineFrameInfo::getStackSize(), and needsFP().

Referenced by emitEpilogue(), and emitPrologue().

bool PPCFrameLowering::needsFP ( const MachineFunction MF) const
void PPCFrameLowering::processFunctionBeforeCalleeSavedScan ( MachineFunction MF,
RegScavenger RS = NULL 
) const
virtual
void PPCFrameLowering::processFunctionBeforeFrameFinalized ( MachineFunction MF,
RegScavenger RS = NULL 
) const
virtual
void PPCFrameLowering::replaceFPWithRealFP ( MachineFunction MF) const
bool PPCFrameLowering::restoreCalleeSavedRegisters ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MI,
const std::vector< CalleeSavedInfo > &  CSI,
const TargetRegisterInfo TRI 
) const
virtual

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(). Returns false otherwise.

Reimplemented from llvm::TargetFrameLowering.

Definition at line 1339 of file PPCFrameLowering.cpp.

References llvm::MachineBasicBlock::begin(), llvm::TargetMachine::getInstrInfo(), llvm::TargetRegisterInfo::getMinimalPhysRegClass(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getTarget(), I, llvm::PPCSubtarget::isDarwinABI(), llvm::PPCSubtarget::isPPC64(), llvm::PPCSubtarget::isSVR4ABI(), llvm::PPCInstrInfo::loadRegFromStackSlot(), llvm::A64CC::MI, needsFP(), restoreCRs(), and TII.

bool PPCFrameLowering::spillCalleeSavedRegisters ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MI,
const std::vector< CalleeSavedInfo > &  CSI,
const TargetRegisterInfo TRI 
) const
virtual
bool llvm::PPCFrameLowering::targetHandlesStackFrameRounding ( ) const
inlinevirtual

targetHandlesStackFrameRounding - Returns true if the target is responsible for rounding up the stack frame (probably at emitPrologue time).

Reimplemented from llvm::TargetFrameLowering.

Definition at line 71 of file PPCFrameLowering.h.


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