LLVM API Documentation
#include "ARMFrameLowering.h"
#include "ARMBaseInstrInfo.h"
#include "ARMBaseRegisterInfo.h"
#include "ARMMachineFunctionInfo.h"
#include "MCTargetDesc/ARMAddressingModes.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/RegisterScavenging.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Function.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Target/TargetOptions.h"
Go to the source code of this file.
Variables | |
static cl::opt< bool > | SpillAlignedNEONRegs ("align-neon-spills", cl::Hidden, cl::init(true), cl::desc("Align ARM NEON spills in prolog and epilog")) |
|
static |
Definition at line 1117 of file ARMFrameLowering.cpp.
References llvm::ARMBaseRegisterInfo::canRealignStack(), llvm::X86II::D8, llvm::Function::getAttributes(), llvm::TargetMachine::getFrameLowering(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getRegInfo(), llvm::TargetMachine::getRegisterInfo(), llvm::TargetFrameLowering::getStackAlignment(), llvm::TargetMachine::getSubtarget(), llvm::MachineFunction::getTarget(), llvm::AttributeSet::hasAttribute(), llvm::MachineRegisterInfo::isPhysRegUsed(), MRI, llvm::Attribute::Naked, R4, llvm::MachineRegisterInfo::setPhysRegUsed(), and SpillAlignedNEONRegs.
Referenced by llvm::ARMFrameLowering::processFunctionBeforeCalleeSavedScan().
|
static |
Emit aligned reload instructions for NumAlignedDPRCS2Regs D-registers starting from d8. These instructions are assumed to execute while the stack is still aligned, unlike the code inserted by emitPopInst.
Definition at line 906 of file ARMFrameLowering.cpp.
References llvm::AddDefaultCC(), llvm::AddDefaultPred(), llvm::MachineInstrBuilder::addImm(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::X86II::D8, llvm::RegState::Define, llvm::MCInstrInfo::get(), llvm::MachineFunction::getInfo(), llvm::TargetMachine::getInstrInfo(), llvm::TargetRegisterInfo::getMatchingSuperReg(), llvm::MachineBasicBlock::getParent(), getReg(), llvm::MachineFunction::getTarget(), llvm::RegState::ImplicitDefine, llvm::ARMFunctionInfo::isThumb1OnlyFunction(), llvm::ARMFunctionInfo::isThumbFunction(), llvm::RegState::Kill, llvm::prior(), and R4.
Referenced by llvm::ARMFrameLowering::restoreCalleeSavedRegisters().
|
static |
Emit aligned spill instructions for NumAlignedDPRCS2Regs D-registers starting from d8. Also insert stack realignment code and leave the stack pointer pointing to the d8 spill slot.
Definition at line 747 of file ARMFrameLowering.cpp.
References llvm::AddDefaultCC(), llvm::AddDefaultPred(), llvm::MachineInstrBuilder::addImm(), llvm::MachineBasicBlock::addLiveIn(), llvm::MachineInstrBuilder::addReg(), llvm::BuildMI(), llvm::X86II::D8, llvm::MCInstrInfo::get(), llvm::MachineFunction::getFrameInfo(), llvm::MachineFunction::getInfo(), llvm::TargetMachine::getInstrInfo(), llvm::TargetRegisterInfo::getMatchingSuperReg(), llvm::MachineFrameInfo::getMaxAlignment(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getTarget(), llvm::RegState::ImplicitKill, llvm::ARMFunctionInfo::isThumb1OnlyFunction(), llvm::ARMFunctionInfo::isThumbFunction(), llvm::RegState::Kill, llvm::prior(), R4, llvm::MachineFrameInfo::setObjectAlignment(), and llvm::ARMFunctionInfo::setShouldRestoreSPFromFP().
Referenced by llvm::ARMFrameLowering::spillCalleeSavedRegisters().
|
static |
Definition at line 114 of file ARMFrameLowering.cpp.
References llvm::emitARMRegPlusImmediate(), and llvm::emitT2RegPlusImmediate().
Referenced by llvm::ARMFrameLowering::emitPrologue(), and emitSPUpdate().
|
static |
Definition at line 129 of file ARMFrameLowering.cpp.
References emitRegPlusImmediate().
|
static |
estimateRSStackSizeLimit - Look at each instruction that references stack frames and return the stack size limit beyond which some of these instructions will require a scratch register during their expansion later.
Definition at line 1064 of file ARMFrameLowering.cpp.
References llvm::ARMII::AddrMode3, llvm::ARMII::AddrMode4, llvm::ARMII::AddrMode5, llvm::ARMII::AddrMode6, llvm::ARMII::AddrModeMask, llvm::ARMII::AddrModeT2_i12, llvm::ARMII::AddrModeT2_i8, llvm::ARMII::AddrModeT2_i8s4, llvm::MachineFunction::begin(), llvm::MachineFunction::end(), llvm::MachineFunction::getInfo(), llvm::TargetFrameLowering::hasFP(), llvm::ARMFunctionInfo::hasStackFrame(), and I.
Referenced by llvm::ARMFrameLowering::processFunctionBeforeCalleeSavedScan().
|
static |
Definition at line 1047 of file ARMFrameLowering.cpp.
References llvm::MachineBasicBlock::begin(), llvm::MachineFunction::begin(), llvm::MachineBasicBlock::end(), llvm::MachineFunction::end(), llvm::ARMBaseInstrInfo::GetInstSizeInBytes(), and I.
Referenced by llvm::ARMFrameLowering::processFunctionBeforeCalleeSavedScan().
Definition at line 85 of file ARMFrameLowering.cpp.
Referenced by isCSRestore().
|
static |
Definition at line 92 of file ARMFrameLowering.cpp.
References llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineOperand::getReg(), isCalleeSavedRegister(), and llvm::isPopOpcode().
Referenced by llvm::ARMFrameLowering::emitEpilogue().
|
static |
Skip past the code inserted by emitAlignedDPRCS2Spills, and return an iterator to the following instruction.
Definition at line 878 of file ARMFrameLowering.cpp.
References llvm::A64CC::MI, and R4.
Referenced by llvm::ARMFrameLowering::emitPrologue().
|
static |
Referenced by checkNumAlignedDPRCS2Regs().