LLVM API Documentation
#include <AArch64FrameLowering.h>
Protected Attributes | |
const AArch64Subtarget & | STI |
Additional Inherited Members | |
![]() | |
enum | StackDirection { StackGrowsUp, StackGrowsDown } |
Definition at line 24 of file AArch64FrameLowering.h.
|
inlineexplicit |
Definition at line 43 of file AArch64FrameLowering.h.
bool AArch64FrameLowering::determinePrologueDeath | ( | MachineBasicBlock & | MBB, |
unsigned | Reg | ||
) | const |
If the register is X30 (i.e. LR) and the return address is used in the function then the callee-save store doesn't actually kill the register, otherwise it does.
Definition at line 407 of file AArch64FrameLowering.cpp.
References llvm::MachineBasicBlock::addLiveIn(), llvm::MachineFunction::getFrameInfo(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getRegInfo(), llvm::MachineRegisterInfo::isLiveIn(), and llvm::MachineFrameInfo::isReturnAddressTaken().
Referenced by emitFrameMemOps().
|
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 598 of file AArch64FrameLowering.cpp.
References Align(), llvm::emitSPUpdate(), llvm::MachineBasicBlock::erase(), llvm::TargetMachine::getInstrInfo(), llvm::TargetFrameLowering::getStackAlignment(), llvm::MachineFunction::getTarget(), hasReservedCallFrame(), llvm::RoundUpToAlignment(), and TII.
|
virtual |
Implements llvm::TargetFrameLowering.
Definition at line 193 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addExternalSymbol(), llvm::MachineInstrBuilder::addGlobalAddress(), llvm::MachineInstr::addOperand(), llvm::MachineInstrBuilder::addReg(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), llvm::emitRegUpdate(), llvm::emitSPUpdate(), llvm::MachineBasicBlock::erase(), llvm::MCInstrInfo::get(), llvm::AArch64MachineFunctionInfo::getArgumentStackToRestore(), llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MachineFunction::getFrameInfo(), llvm::AArch64MachineFunctionInfo::getFramePointerOffset(), llvm::MachineOperand::getGlobal(), llvm::MachineOperand::getImm(), llvm::MachineFunction::getInfo(), llvm::AArch64MachineFunctionInfo::getInitialStackAdjust(), llvm::TargetMachine::getInstrInfo(), llvm::MachineBasicBlock::getLastNonDebugInstr(), llvm::MachineOperand::getOffset(), llvm::MachineOperand::getReg(), llvm::MachineFrameInfo::getStackSize(), llvm::MachineOperand::getSymbolName(), llvm::MachineFunction::getTarget(), llvm::MachineOperand::getTargetFlags(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::MachineOperand::isGlobal(), llvm::MachineOperand::isReg(), llvm::MachineOperand::isSymbol(), llvm::RegState::Kill, llvm::prior(), and TII.
void AArch64FrameLowering::emitFrameMemOps | ( | bool | isStore, |
MachineBasicBlock & | MBB, | ||
MachineBasicBlock::iterator | MI, | ||
const std::vector< CalleeSavedInfo > & | CSI, | ||
const TargetRegisterInfo * | TRI, | ||
const LoadStoreMethod | PossibleClasses[], | ||
unsigned | NumClasses | ||
) | const |
This function emits the loads or stores required during prologue and epilogue as efficiently as possible.
The operations involved in setting up and tearing down the frame are similar enough to warrant a shared function, particularly as discrepancies between the two would be disastrous.
Definition at line 424 of file AArch64FrameLowering.cpp.
References llvm::MachineInstrBuilder::addFrameIndex(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addMemOperand(), llvm::BuildMI(), llvm::TargetRegisterClass::contains(), llvm::RegState::Define, determinePrologueDeath(), llvm::MachineBasicBlock::findDebugLoc(), llvm::MachineInstr::FrameSetup, llvm::MCInstrInfo::get(), llvm::MachinePointerInfo::getFixedStack(), llvm::MachineFunction::getFrameInfo(), llvm::TargetMachine::getInstrInfo(), llvm::getKillRegState(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineFrameInfo::getObjectAlignment(), llvm::MachineBasicBlock::getParent(), getReg(), llvm::TargetRegisterClass::getSize(), llvm::MachineFunction::getTarget(), llvm::MachineMemOperand::MOLoad, llvm::MachineMemOperand::MOStore, llvm::MachineInstrBuilder::setMIFlags(), and TII.
Referenced by restoreCalleeSavedRegisters(), and spillCalleeSavedRegisters().
|
virtual |
emitProlog/emitEpilog - These methods insert prolog and epilog code into the function.
Implements llvm::TargetFrameLowering.
Definition at line 47 of file AArch64FrameLowering.cpp.
References llvm::MachineModuleInfo::addFrameInst(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), llvm::MCCFIInstruction::createDefCfa(), llvm::MCCFIInstruction::createOffset(), llvm::MCContext::CreateTempSymbol(), llvm::emitRegUpdate(), llvm::emitSPUpdate(), llvm::MachineInstr::FrameSetup, llvm::MachineFunction::front(), llvm::MCInstrInfo::get(), llvm::MachineFrameInfo::getCalleeSavedInfo(), llvm::MachineModuleInfo::getContext(), llvm::MCRegisterInfo::getDwarfRegNum(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::TargetMachine::getInstrInfo(), llvm::MachineFunction::getMMI(), llvm::MachineFrameInfo::getObjectOffset(), llvm::MCContext::getRegisterInfo(), llvm::MachineFrameInfo::getStackSize(), llvm::MachineFunction::getTarget(), llvm::MachineModuleInfo::hasDebugInfo(), hasFP(), I, MRI, llvm::Function::needsUnwindTableEntry(), llvm::TargetOpcode::PROLOG_LABEL, llvm::AArch64MachineFunctionInfo::setFramePointerOffset(), llvm::AArch64MachineFunctionInfo::setInitialStackAdjust(), llvm::MachineFrameInfo::setOffsetAdjustment(), splitSPAdjustments(), and TII.
|
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 565 of file AArch64FrameLowering.cpp.
References llvm::TargetOptions::DisableFramePointerElim(), llvm::MachineFunction::getFrameInfo(), llvm::TargetMachine::getRegisterInfo(), llvm::MachineFunction::getTarget(), llvm::MachineFrameInfo::hasCalls(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::MachineFrameInfo::isFrameAddressTaken(), llvm::TargetRegisterInfo::needsStackRealignment(), and llvm::TargetMachine::Options.
Referenced by emitPrologue(), hasReservedCallFrame(), and processFunctionBeforeCalleeSavedScan().
|
virtual |
On AA.
Reimplemented from llvm::TargetFrameLowering.
Definition at line 589 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getFrameInfo(), hasFP(), and llvm::MachineFrameInfo::hasVarSizedObjects().
Referenced by eliminateCallFramePseudoInstr(), and processFunctionBeforeCalleeSavedScan().
|
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 354 of file AArch64FrameLowering.cpp.
References llvm::RegScavenger::addScavengingFrameIndex(), llvm::MachineFrameInfo::adjustsStack(), llvm::MachineFrameInfo::CreateStackObject(), llvm::AArch64InstrInfo::estimateRSStackLimit(), llvm::MachineFrameInfo::estimateStackSize(), llvm::TargetRegisterClass::getAlignment(), llvm::AArch64RegisterInfo::getCalleeSavedRegs(), llvm::MachineFunction::getFrameInfo(), llvm::TargetMachine::getInstrInfo(), llvm::MachineFunction::getRegInfo(), llvm::TargetMachine::getRegisterInfo(), llvm::TargetRegisterClass::getSize(), llvm::MachineFunction::getTarget(), hasFP(), hasReservedCallFrame(), llvm::MachineFrameInfo::hasVarSizedObjects(), llvm::MachineRegisterInfo::isPhysRegUsed(), llvm::MachineRegisterInfo::setPhysRegUsed(), and TII.
int64_t AArch64FrameLowering::resolveFrameIndexReference | ( | MachineFunction & | MF, |
int | FrameIndex, | ||
unsigned & | FrameReg, | ||
int | SPAdj, | ||
bool | IsCalleeSaveOp | ||
) | const |
Definition at line 320 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getFrameInfo(), llvm::AArch64MachineFunctionInfo::getFramePointerOffset(), llvm::MachineFunction::getInfo(), llvm::AArch64MachineFunctionInfo::getInitialStackAdjust(), llvm::MachineFrameInfo::getObjectOffset(), and useFPForAddressing().
Referenced by llvm::AArch64RegisterInfo::eliminateFrameIndex().
|
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 544 of file AArch64FrameLowering.cpp.
References llvm::array_lengthof(), and emitFrameMemOps().
|
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 524 of file AArch64FrameLowering.cpp.
References llvm::array_lengthof(), and emitFrameMemOps().
void AArch64FrameLowering::splitSPAdjustments | ( | uint64_t | Total, |
uint64_t & | Initial, | ||
uint64_t & | Residual | ||
) | const |
Decides how much stack adjustment to perform in each phase of the prologue and epilogue.
Definition at line 32 of file AArch64FrameLowering.cpp.
Referenced by emitPrologue().
|
virtual |
Definition at line 584 of file AArch64FrameLowering.cpp.
References llvm::MachineFunction::getFrameInfo(), and llvm::MachineFrameInfo::hasVarSizedObjects().
Referenced by resolveFrameIndexReference(), and llvm::AArch64RegisterInfo::useFPForScavengingIndex().
|
protected |
Definition at line 40 of file AArch64FrameLowering.h.