LLVM API Documentation
#include "PPCFrameLowering.h"
#include "PPCInstrBuilder.h"
#include "PPCInstrInfo.h"
#include "PPCMachineFunctionInfo.h"
#include "PPCSubtarget.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/RegisterScavenging.h"
#include "llvm/IR/Function.h"
#include "llvm/Target/TargetOptions.h"
Go to the source code of this file.
Functions | |
static void | RemoveVRSaveCode (MachineInstr *MI) |
static void | HandleVRSaveUpdate (MachineInstr *MI, const TargetInstrInfo &TII) |
static bool | spillsCR (const MachineFunction &MF) |
static bool | spillsVRSAVE (const MachineFunction &MF) |
static bool | hasSpills (const MachineFunction &MF) |
static bool | hasNonRISpills (const MachineFunction &MF) |
static bool | MustSaveLR (const MachineFunction &MF, unsigned LR) |
static void | restoreCRs (bool isPPC64, bool is31, bool CR2Spilled, bool CR3Spilled, bool CR4Spilled, MachineBasicBlock &MBB, MachineBasicBlock::iterator MI, const std::vector< CalleeSavedInfo > &CSI, unsigned CSIIndex) |
Variables | |
static const uint16_t | VRRegNo [] |
static void HandleVRSaveUpdate | ( | MachineInstr * | MI, |
const TargetInstrInfo & | TII | ||
) | [static] |
Definition at line 255 of file PPCFrameLowering.cpp.
References llvm::MachineInstrBuilder::addImm(), llvm::MachineBasicBlock::back(), llvm::MachineFunction::begin(), llvm::BuildMI(), llvm::MachineBasicBlock::empty(), llvm::MachineFunction::end(), llvm::MachineInstr::eraseFromParent(), llvm::MCInstrInfo::get(), llvm::MachineInstr::getDebugLoc(), llvm::MCRegisterInfo::getEncodingValue(), llvm::MachineInstr::getNumOperands(), llvm::MachineInstr::getOperand(), llvm::MachineInstr::getParent(), llvm::MachineBasicBlock::getParent(), llvm::MachineOperand::getReg(), llvm::MachineFunction::getRegInfo(), llvm::TargetSubtargetInfo::getRegisterInfo(), llvm::MachineFunction::getSubtarget(), I, llvm::MachineRegisterInfo::isPhysRegUsed(), llvm::MachineOperand::isReg(), llvm::MachineInstr::isReturn(), llvm::RegState::Kill, llvm::MachineRegisterInfo::livein_begin(), llvm::MachineRegisterInfo::livein_end(), llvm::AArch64CC::MI, RemoveVRSaveCode(), llvm::MipsISD::Ret, and VRRegNo.
Referenced by llvm::PPCFrameLowering::emitPrologue().
static bool hasNonRISpills | ( | const MachineFunction & | MF | ) | [static] |
Definition at line 353 of file PPCFrameLowering.cpp.
References llvm::MachineFunction::getInfo(), and llvm::PPCFunctionInfo::hasNonRISpills().
Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot().
static bool hasSpills | ( | const MachineFunction & | MF | ) | [static] |
Definition at line 348 of file PPCFrameLowering.cpp.
References llvm::MachineFunction::getInfo(), and llvm::PPCFunctionInfo::hasSpills().
Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot().
static bool MustSaveLR | ( | const MachineFunction & | MF, |
unsigned | LR | ||
) | [static] |
MustSaveLR - Return true if this function requires that we save the LR register onto the stack in the prolog and restore it in the epilog of the function.
Definition at line 1057 of file PPCFrameLowering.cpp.
References llvm::MachineRegisterInfo::def_begin(), llvm::MachineRegisterInfo::def_end(), llvm::MachineFunction::getInfo(), llvm::MachineFunction::getRegInfo(), and llvm::PPCFunctionInfo::isLRStoreRequired().
Referenced by llvm::PPCFrameLowering::emitEpilogue(), llvm::PPCFrameLowering::emitPrologue(), and llvm::PPCFrameLowering::processFunctionBeforeCalleeSavedScan().
static void RemoveVRSaveCode | ( | MachineInstr * | MI | ) | [static] |
RemoveVRSaveCode - We have found that this function does not need any code to manipulate the VRSAVE register, even though it uses vector registers. This can happen when the only registers used are known to be live in or out of the function. Remove all of the VRSAVE related code from the function. FIXME: The removal of the code results in a compile failure at -O0 when the function contains a function call, as the GPR containing original VRSAVE contents is spilled and reloaded around the call. Without the prolog code, the spill instruction refers to an undefined register. This code needs to account for all uses of that GPR.
Definition at line 209 of file PPCFrameLowering.cpp.
References llvm::MachineBasicBlock::begin(), llvm::MachineFunction::begin(), llvm::MachineBasicBlock::end(), llvm::MachineFunction::end(), llvm::MachineInstr::eraseFromParent(), llvm::MachineInstr::getParent(), llvm::MachineBasicBlock::getParent(), I, and llvm::AArch64CC::MI.
Referenced by HandleVRSaveUpdate().
static void restoreCRs | ( | bool | isPPC64, |
bool | is31, | ||
bool | CR2Spilled, | ||
bool | CR3Spilled, | ||
bool | CR4Spilled, | ||
MachineBasicBlock & | MBB, | ||
MachineBasicBlock::iterator | MI, | ||
const std::vector< CalleeSavedInfo > & | CSI, | ||
unsigned | CSIIndex | ||
) | [static] |
Definition at line 1442 of file PPCFrameLowering.cpp.
References llvm::addFrameReference(), llvm::BuildMI(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::getKillRegState(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getSubtarget(), llvm::MachineBasicBlock::insert(), and TII.
Referenced by llvm::PPCFrameLowering::restoreCalleeSavedRegisters().
static bool spillsCR | ( | const MachineFunction & | MF | ) | [static] |
Definition at line 338 of file PPCFrameLowering.cpp.
References llvm::MachineFunction::getInfo(), and llvm::PPCFunctionInfo::isCRSpilled().
Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot(), and llvm::PPCFrameLowering::processFunctionBeforeFrameFinalized().
static bool spillsVRSAVE | ( | const MachineFunction & | MF | ) | [static] |
Definition at line 343 of file PPCFrameLowering.cpp.
References llvm::MachineFunction::getInfo(), and llvm::PPCFunctionInfo::isVRSAVESpilled().
Referenced by llvm::PPCFrameLowering::addScavengingSpillSlot().
{ PPC::V0 , PPC::V1 , PPC::V2 , PPC::V3 , PPC::V4 , PPC::V5 , PPC::V6 , PPC::V7 , PPC::V8 , PPC::V9 , PPC::V10, PPC::V11, PPC::V12, PPC::V13, PPC::V14, PPC::V15, PPC::V16, PPC::V17, PPC::V18, PPC::V19, PPC::V20, PPC::V21, PPC::V22, PPC::V23, PPC::V24, PPC::V25, PPC::V26, PPC::V27, PPC::V28, PPC::V29, PPC::V30, PPC::V31 }
VRRegNo - Map from a numbered VR register to its enum value.
Definition at line 32 of file PPCFrameLowering.cpp.
Referenced by HandleVRSaveUpdate().