LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Functions | Variables
ARMFrameLowering.cpp File Reference
#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"
Include dependency graph for ARMFrameLowering.cpp:

Go to the source code of this file.

Functions

static MachineBasicBlock::iterator skipAlignedDPRCS2Spills (MachineBasicBlock::iterator MI, unsigned NumAlignedDPRCS2Regs)
 
static bool isCalleeSavedRegister (unsigned Reg, const uint16_t *CSRegs)
 
static bool isCSRestore (MachineInstr *MI, const ARMBaseInstrInfo &TII, const uint16_t *CSRegs)
 
static void emitRegPlusImmediate (bool isARM, MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, DebugLoc dl, const ARMBaseInstrInfo &TII, unsigned DestReg, unsigned SrcReg, int NumBytes, unsigned MIFlags=MachineInstr::NoFlags, ARMCC::CondCodes Pred=ARMCC::AL, unsigned PredReg=0)
 
static void emitSPUpdate (bool isARM, MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, DebugLoc dl, const ARMBaseInstrInfo &TII, int NumBytes, unsigned MIFlags=MachineInstr::NoFlags, ARMCC::CondCodes Pred=ARMCC::AL, unsigned PredReg=0)
 
static void emitAlignedDPRCS2Spills (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, unsigned NumAlignedDPRCS2Regs, const std::vector< CalleeSavedInfo > &CSI, const TargetRegisterInfo *TRI)
 
static void emitAlignedDPRCS2Restores (MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, unsigned NumAlignedDPRCS2Regs, const std::vector< CalleeSavedInfo > &CSI, const TargetRegisterInfo *TRI)
 
static unsigned GetFunctionSizeInBytes (const MachineFunction &MF, const ARMBaseInstrInfo &TII)
 
static unsigned estimateRSStackSizeLimit (MachineFunction &MF, const TargetFrameLowering *TFI)
 
static void checkNumAlignedDPRCS2Regs (MachineFunction &MF)
 

Variables

static cl::opt< boolSpillAlignedNEONRegs ("align-neon-spills", cl::Hidden, cl::init(true), cl::desc("Align ARM NEON spills in prolog and epilog"))
 

Function Documentation

static void checkNumAlignedDPRCS2Regs ( MachineFunction MF)
static
static void emitAlignedDPRCS2Restores ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MI,
unsigned  NumAlignedDPRCS2Regs,
const std::vector< CalleeSavedInfo > &  CSI,
const TargetRegisterInfo TRI 
)
static
static void emitAlignedDPRCS2Spills ( MachineBasicBlock MBB,
MachineBasicBlock::iterator  MI,
unsigned  NumAlignedDPRCS2Regs,
const std::vector< CalleeSavedInfo > &  CSI,
const TargetRegisterInfo TRI 
)
static
static void emitRegPlusImmediate ( bool  isARM,
MachineBasicBlock MBB,
MachineBasicBlock::iterator MBBI,
DebugLoc  dl,
const ARMBaseInstrInfo TII,
unsigned  DestReg,
unsigned  SrcReg,
int  NumBytes,
unsigned  MIFlags = MachineInstr::NoFlags,
ARMCC::CondCodes  Pred = ARMCC::AL,
unsigned  PredReg = 0 
)
static
static void emitSPUpdate ( bool  isARM,
MachineBasicBlock MBB,
MachineBasicBlock::iterator MBBI,
DebugLoc  dl,
const ARMBaseInstrInfo TII,
int  NumBytes,
unsigned  MIFlags = MachineInstr::NoFlags,
ARMCC::CondCodes  Pred = ARMCC::AL,
unsigned  PredReg = 0 
)
static

Definition at line 129 of file ARMFrameLowering.cpp.

References emitRegPlusImmediate().

static unsigned estimateRSStackSizeLimit ( MachineFunction MF,
const TargetFrameLowering TFI 
)
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 unsigned GetFunctionSizeInBytes ( const MachineFunction MF,
const ARMBaseInstrInfo TII 
)
static
static bool isCalleeSavedRegister ( unsigned  Reg,
const uint16_t *  CSRegs 
)
static

Definition at line 85 of file ARMFrameLowering.cpp.

Referenced by isCSRestore().

static bool isCSRestore ( MachineInstr MI,
const ARMBaseInstrInfo TII,
const uint16_t *  CSRegs 
)
static
static MachineBasicBlock::iterator skipAlignedDPRCS2Spills ( MachineBasicBlock::iterator  MI,
unsigned  NumAlignedDPRCS2Regs 
)
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().

Variable Documentation

cl::opt<bool> SpillAlignedNEONRegs("align-neon-spills", cl::Hidden, cl::init(true), cl::desc("Align ARM NEON spills in prolog and epilog"))
static