LLVM API Documentation
#include <PPCFrameLowering.h>
Definition at line 24 of file PPCFrameLowering.h.
Definition at line 39 of file PPCFrameLowering.cpp.
void PPCFrameLowering::addScavengingSpillSlot | ( | MachineFunction & | MF, |
RegScavenger * | RS | ||
) | const |
Definition at line 1335 of file PPCFrameLowering.cpp.
References llvm::RegScavenger::addScavengingFrameIndex(), llvm::MachineFrameInfo::CreateStackObject(), determineFrameLayout(), llvm::TargetRegisterClass::getAlignment(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFrameInfo::getMaxAlignment(), llvm::TargetRegisterClass::getSize(), llvm::TargetFrameLowering::getStackAlignment(), hasNonRISpills(), hasSpills(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::isInt< 16 >(), llvm::PPCSubtarget::isPPC64(), spillsCR(), and spillsVRSAVE().
Referenced by processFunctionBeforeFrameFinalized().
unsigned PPCFrameLowering::determineFrameLayout | ( | MachineFunction & | MF, |
bool | UpdateMF = true , |
||
bool | UseEstimate = false |
||
) | const |
determineFrameLayout - Determine the size of the frame and maximum call frame size.
Definition at line 360 of file PPCFrameLowering.cpp.
References llvm::MachineFrameInfo::adjustsStack(), DisableRedZone(), llvm::MachineFrameInfo::estimateStackSize(), llvm::AttributeSet::FunctionIndex, llvm::Function::getAttributes(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), getLinkageSize(), llvm::MachineFrameInfo::getMaxAlignment(), llvm::MachineFrameInfo::getMaxCallFrameSize(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::TargetFrameLowering::getStackAlignment(), llvm::MachineFrameInfo::getStackSize(), llvm::MachineFunction::getSubtarget(), llvm::PPCRegisterInfo::hasBasePointer(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::PPCSubtarget::isDarwinABI(), llvm::PPCSubtarget::isELFv2ABI(), llvm::PPCSubtarget::isPPC64(), llvm::PPCSubtarget::isSVR4ABI(), llvm::Attribute::NoRedZone, llvm::MachineFrameInfo::setMaxCallFrameSize(), and llvm::MachineFrameInfo::setStackSize().
Referenced by addScavengingSpillSlot(), emitPrologue(), and llvm::PPCRegisterInfo::needsFrameBaseReg().
void PPCFrameLowering::eliminateCallFramePseudoInstr | ( | MachineFunction & | MF, |
MachineBasicBlock & | MBB, | ||
MachineBasicBlock::iterator | MI | ||
) | const [override, 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 1479 of file PPCFrameLowering.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::MachineBasicBlock::erase(), llvm::MachineInstr::getDebugLoc(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::getTarget(), llvm::TargetOptions::GuaranteedTailCallOpt, I, llvm::isInt< 16 >(), llvm::PPCSubtarget::isPPC64(), llvm::RegState::Kill, llvm::AArch64CC::MI, llvm::TargetMachine::Options, and TII.
void PPCFrameLowering::emitEpilogue | ( | MachineFunction & | MF, |
MachineBasicBlock & | MBB | ||
) | const [override, virtual] |
Implements llvm::TargetFrameLowering.
Definition at line 822 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::PPCRegisterInfo::getBaseRegister(), llvm::Function::getCallingConv(), llvm::MachineFunction::getFrameInfo(), llvm::PPCFunctionInfo::getFramePointerSaveIndex(), getFramePointerSaveOffset(), llvm::MachineFunction::getFunction(), llvm::MachineOperand::getGlobal(), llvm::MachineOperand::getImm(), llvm::MachineFunction::getInfo(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::getKillRegState(), llvm::MachineBasicBlock::getLastNonDebugInstr(), llvm::PPCFunctionInfo::getMinReservedArea(), llvm::PPCFunctionInfo::getMustSaveCRs(), llvm::MachineFrameInfo::getObjectOffset(), llvm::MachineOperand::getOffset(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::TargetMachine::getRelocationModel(), getReturnSaveOffset(), llvm::MachineFrameInfo::getStackSize(), llvm::MachineFunction::getSubtarget(), 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::AArch64DB::LD, llvm::PPCFunctionInfo::mustSaveLR(), MustSaveLR(), llvm::TargetMachine::Options, llvm::Reloc::PIC_, llvm::SmallVectorTemplateCommon< T, typename >::size(), and TII.
void PPCFrameLowering::emitPrologue | ( | MachineFunction & | MF | ) | const [override, virtual] |
emitProlog/emitEpilog - These methods insert prolog and epilog code into the function.
Implements llvm::TargetFrameLowering.
Definition at line 496 of file PPCFrameLowering.cpp.
References llvm::MachineModuleInfo::addFrameInst(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), llvm::TargetOpcode::CFI_INSTRUCTION, contains(), llvm::MCCFIInstruction::createDefCfaOffset(), llvm::MCCFIInstruction::createDefCfaRegister(), llvm::MCCFIInstruction::createOffset(), determineFrameLayout(), llvm::SmallVectorBase::empty(), llvm::MachineBasicBlock::end(), llvm::MachineFunction::front(), llvm::PPCFunctionInfo::getBasePointerSaveIndex(), getBasePointerSaveOffset(), llvm::PPCRegisterInfo::getBaseRegister(), llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MachineModuleInfo::getContext(), llvm::MCRegisterInfo::getDwarfRegNum(), llvm::MachineFunction::getFrameInfo(), llvm::PPCFunctionInfo::getFramePointerSaveIndex(), getFramePointerSaveOffset(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::getKillRegState(), llvm::MachineFrameInfo::getMaxAlignment(), llvm::MachineFunction::getMMI(), llvm::PPCFunctionInfo::getMustSaveCRs(), llvm::MachineFrameInfo::getObjectOffset(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MCContext::getRegisterInfo(), llvm::TargetMachine::getRelocationModel(), getReturnSaveOffset(), llvm::MachineFunction::getSubtarget(), llvm::MachineFunction::getTarget(), HandleVRSaveUpdate(), llvm::PPCRegisterInfo::hasBasePointer(), llvm::MachineModuleInfo::hasDebugInfo(), hasFP(), I, llvm::RegState::ImplicitKill, llvm::PPCSubtarget::isDarwinABI(), llvm::PPCSubtarget::isELFv2ABI(), 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(), llvm::PPCFunctionInfo::mustSaveLR(), MustSaveLR(), llvm::Function::needsUnwindTableEntry(), OR, llvm::Reloc::PIC_, replaceFPWithRealFP(), llvm::NVPTX::PTXCvtMode::RM, llvm::SmallVectorTemplateCommon< T, typename >::size(), and TII.
static unsigned llvm::PPCFrameLowering::getBasePointerSaveOffset | ( | bool | isPPC64, |
bool | isDarwinABI, | ||
bool | isPIC | ||
) | [inline, static] |
getBasePointerSaveOffset - Return the previous frame offset to save the base pointer.
Definition at line 100 of file PPCFrameLowering.h.
Referenced by emitEpilogue(), emitPrologue(), and processFunctionBeforeCalleeSavedScan().
const PPCFrameLowering::SpillSlot * PPCFrameLowering::getCalleeSavedSpillSlots | ( | unsigned & | NumEntries | ) | const [override, virtual] |
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 45 of file PPCFrameLowering.cpp.
References llvm::array_lengthof(), llvm::PPCSubtarget::isDarwinABI(), llvm::PPCSubtarget::isPPC64(), and llvm::PPCSubtarget::isSVR4ABI().
static unsigned llvm::PPCFrameLowering::getFramePointerSaveOffset | ( | bool | isPPC64, |
bool | isDarwinABI | ||
) | [inline, static] |
getFramePointerSaveOffset - Return the previous frame offset to save the frame pointer.
Definition at line 85 of file PPCFrameLowering.h.
Referenced by emitEpilogue(), emitPrologue(), EmitTailCallStoreFPAndRetAddr(), and processFunctionBeforeCalleeSavedScan().
static unsigned llvm::PPCFrameLowering::getLinkageSize | ( | bool | isPPC64, |
bool | isDarwinABI, | ||
bool | isELFv2ABI | ||
) | [inline, static] |
getLinkageSize - Return the size of the PowerPC ABI linkage area.
Definition at line 112 of file PPCFrameLowering.h.
Referenced by determineFrameLayout().
static unsigned llvm::PPCFrameLowering::getReturnSaveOffset | ( | bool | isPPC64, |
bool | isDarwinABI | ||
) | [inline, static] |
getReturnSaveOffset - Return the previous frame offset to save the return address.
Definition at line 70 of file PPCFrameLowering.h.
Referenced by emitEpilogue(), emitPrologue(), and EmitTailCallStoreFPAndRetAddr().
static unsigned llvm::PPCFrameLowering::getTOCSaveOffset | ( | bool | isELFv2ABI | ) | [inline, static] |
getTOCSaveOffset - Return the previous frame offset to save the TOC register -- 64-bit SVR4 ABI only.
Definition at line 79 of file PPCFrameLowering.h.
bool PPCFrameLowering::hasFP | ( | const MachineFunction & | MF | ) | const [override, 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 431 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 |
Definition at line 442 of file PPCFrameLowering.cpp.
References llvm::TargetOptions::DisableFramePointerElim(), llvm::AttributeSet::FunctionIndex, llvm::Function::getAttributes(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getTarget(), llvm::TargetOptions::GuaranteedTailCallOpt, llvm::AttributeSet::hasAttribute(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::Attribute::Naked, and llvm::TargetMachine::Options.
Referenced by llvm::PPCRegisterInfo::getReservedRegs(), hasFP(), processFunctionBeforeCalleeSavedScan(), processFunctionBeforeFrameFinalized(), replaceFPWithRealFP(), and restoreCalleeSavedRegisters().
void PPCFrameLowering::processFunctionBeforeCalleeSavedScan | ( | MachineFunction & | MF, |
RegScavenger * | RS = nullptr |
||
) | const [override, virtual] |
processFunctionBeforeCalleeSavedScan - This method is called immediately before PrologEpilogInserter scans the physical registers used to determine what callee saved registers should be spilled. This method is optional.
Reimplemented from llvm::TargetFrameLowering.
Definition at line 1069 of file PPCFrameLowering.cpp.
References llvm::MachineFrameInfo::CreateFixedObject(), llvm::PPCFunctionInfo::getBasePointerSaveIndex(), getBasePointerSaveOffset(), llvm::MachineFunction::getFrameInfo(), llvm::PPCFunctionInfo::getFramePointerSaveIndex(), getFramePointerSaveOffset(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getRegInfo(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::TargetMachine::getRelocationModel(), llvm::MachineFunction::getSubtarget(), llvm::PPCFunctionInfo::getTailCallSPDelta(), llvm::MachineFunction::getTarget(), llvm::TargetOptions::GuaranteedTailCallOpt, llvm::PPCRegisterInfo::hasBasePointer(), llvm::PPCSubtarget::isDarwinABI(), llvm::MachineRegisterInfo::isPhysRegUsed(), llvm::PPCSubtarget::isPPC64(), MustSaveLR(), needsFP(), llvm::TargetMachine::Options, llvm::Reloc::PIC_, llvm::PPCFunctionInfo::setBasePointerSaveIndex(), llvm::PPCFunctionInfo::setCRSpillFrameIndex(), llvm::PPCFunctionInfo::setFramePointerSaveIndex(), llvm::PPCFunctionInfo::setMustSaveLR(), and llvm::MachineRegisterInfo::setPhysRegUnused().
void PPCFrameLowering::processFunctionBeforeFrameFinalized | ( | MachineFunction & | MF, |
RegScavenger * | RS = nullptr |
||
) | const [override, virtual] |
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 1125 of file PPCFrameLowering.cpp.
References addScavengingSpillSlot(), contains(), G8Regs, llvm::PPCFunctionInfo::getBasePointerSaveIndex(), llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MachineFunction::getFrameInfo(), llvm::PPCFunctionInfo::getFramePointerSaveIndex(), llvm::MachineFunction::getInfo(), llvm::MachineFrameInfo::getObjectOffset(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), llvm::PPCFunctionInfo::getTailCallSPDelta(), llvm::MachineFunction::getTarget(), GPRegs, llvm::TargetOptions::GuaranteedTailCallOpt, llvm::PPCRegisterInfo::hasBasePointer(), llvm::PPCSubtarget::isPPC64(), llvm::PPCSubtarget::isSVR4ABI(), llvm_unreachable, needsFP(), llvm::TargetMachine::Options, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::MachineFrameInfo::setObjectOffset(), llvm::SmallVectorTemplateCommon< T >::size(), spillsCR(), and VRegs.
void PPCFrameLowering::replaceFPWithRealFP | ( | MachineFunction & | MF | ) | const |
Definition at line 457 of file PPCFrameLowering.cpp.
References llvm::MachineFunction::begin(), llvm::MachineFunction::end(), llvm::PPCRegisterInfo::getBaseRegister(), llvm::MachineOperand::getReg(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), llvm::PPCRegisterInfo::hasBasePointer(), I, llvm::MachineOperand::isReg(), needsFP(), and llvm::MachineOperand::setReg().
Referenced by emitPrologue().
bool PPCFrameLowering::restoreCalleeSavedRegisters | ( | MachineBasicBlock & | MBB, |
MachineBasicBlock::iterator | MI, | ||
const std::vector< CalleeSavedInfo > & | CSI, | ||
const TargetRegisterInfo * | TRI | ||
) | const [override, 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 1520 of file PPCFrameLowering.cpp.
References llvm::MachineBasicBlock::begin(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::TargetRegisterInfo::getMinimalPhysRegClass(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getSubtarget(), I, llvm::PPCSubtarget::isDarwinABI(), llvm::PPCSubtarget::isPPC64(), llvm::PPCSubtarget::isSVR4ABI(), llvm::PPCInstrInfo::loadRegFromStackSlot(), llvm::AArch64CC::MI, needsFP(), restoreCRs(), and TII.
bool PPCFrameLowering::spillCalleeSavedRegisters | ( | MachineBasicBlock & | MBB, |
MachineBasicBlock::iterator | MI, | ||
const std::vector< CalleeSavedInfo > & | CSI, | ||
const TargetRegisterInfo * | TRI | ||
) | const [override, virtual] |
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 from llvm::TargetFrameLowering.
Definition at line 1375 of file PPCFrameLowering.cpp.
References llvm::addFrameReference(), llvm::MachineBasicBlock::addLiveIn(), llvm::PPCFunctionInfo::addMustSaveCR(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::MachineFunction::getInfo(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::getKillRegState(), llvm::TargetRegisterInfo::getMinimalPhysRegClass(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getSubtarget(), llvm::RegState::ImplicitKill, llvm::MachineBasicBlock::insert(), llvm::PPCSubtarget::isDarwinABI(), llvm::PPCSubtarget::isPPC64(), llvm::PPCSubtarget::isSVR4ABI(), llvm::PPCFunctionInfo::setSpillsCR(), llvm::PPCInstrInfo::storeRegToStackSlot(), and TII.
bool llvm::PPCFrameLowering::targetHandlesStackFrameRounding | ( | ) | const [inline, override, virtual] |
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 66 of file PPCFrameLowering.h.