24#define DEBUG_TYPE "nvptx-reg-info"
27 if (RC == &NVPTX::B128RegClass)
29 if (RC == &NVPTX::B64RegClass)
49 if (RC == &NVPTX::B32RegClass)
51 if (RC == &NVPTX::B16RegClass)
53 if (RC == &NVPTX::B1RegClass)
55 if (RC == &NVPTX::SpecialRegsRegClass)
61 if (RC == &NVPTX::B128RegClass)
63 if (RC == &NVPTX::B64RegClass)
65 if (RC == &NVPTX::B32RegClass)
67 if (RC == &NVPTX::B16RegClass)
69 if (RC == &NVPTX::B1RegClass)
71 if (RC == &NVPTX::SpecialRegsRegClass)
79#define GET_REGINFO_TARGET_DESC
80#include "NVPTXGenRegisterInfo.inc"
85 static const MCPhysReg CalleeSavedRegs[] = { 0 };
86 return CalleeSavedRegs;
91 for (
unsigned Reg = NVPTX::ENVREG0; Reg <= NVPTX::ENVREG31; ++Reg) {
94 markSuperRegs(
Reserved, NVPTX::VRFrame32);
95 markSuperRegs(
Reserved, NVPTX::VRFrameLocal32);
96 markSuperRegs(
Reserved, NVPTX::VRFrame64);
97 markSuperRegs(
Reserved, NVPTX::VRFrameLocal64);
98 markSuperRegs(
Reserved, NVPTX::VRDepot);
103 int SPAdj,
unsigned FIOperandNum,
105 assert(SPAdj == 0 &&
"Unexpected");
108 if (
MI.isLifetimeMarker()) {
109 MI.eraseFromParent();
113 const int FrameIndex =
MI.getOperand(FIOperandNum).getIndex();
117 MI.getOperand(FIOperandNum + 1).getImm();
121 MI.getOperand(FIOperandNum + 1).ChangeToImmediate(
Offset);
128 return TM.
is64Bit() ? NVPTX::VRFrame64 : NVPTX::VRFrame32;
135 return TM.
is64Bit() ? NVPTX::VRFrameLocal64 : NVPTX::VRFrameLocal32;
139 debugRegisterMap.clear();
143 if (RegisterName.
size() > 8)
154 for (
unsigned char c : RegisterName)
155 result = (result << 8) | c;
164 debugRegisterMap.insert({preEncodedVirtualRegister, mapped});
172 if (RegNum.
id() == NVPTX::VRDepot)
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file implements the BitVector class.
static bool lookup(const GsymReader &GR, GsymDataExtractor &Data, uint64_t &Offset, uint64_t BaseAddr, uint64_t Addr, SourceLocations &SrcLocs, llvm::Error &Err)
A Lookup helper functions.
static uint64_t encodeRegisterForDwarf(StringRef RegisterName)
uint64_t IntrinsicInst * II
Wrapper class representing physical registers. Should be passed by value.
constexpr unsigned id() const
MachineInstrBundleIterator< MachineInstr > iterator
int64_t getObjectOffset(int ObjectIdx) const
Return the assigned stack offset of the specified object from the incoming stack pointer.
MachineFrameInfo & getFrameInfo()
getFrameInfo - Return the frame info object for the current function.
const TargetMachine & getTarget() const
getTarget - Return the target machine this machine code is compiled with
Representation of each machine instruction.
static const char * getRegisterName(MCRegister Reg)
void clearDebugRegisterMap() const
Register getFrameLocalRegister(const MachineFunction &MF) const
const MCPhysReg * getCalleeSavedRegs(const MachineFunction *MF) const override
NVPTX Callee Saved Registers.
bool eliminateFrameIndex(MachineBasicBlock::iterator MI, int SPAdj, unsigned FIOperandNum, RegScavenger *RS=nullptr) const override
BitVector getReservedRegs(const MachineFunction &MF) const override
int64_t getDwarfRegNum(MCRegister RegNum, bool isEH) const override
Register getFrameRegister(const MachineFunction &MF) const override
void addToDebugRegisterMap(uint64_t preEncodedVirtualRegister, StringRef RegisterName) const
int64_t getDwarfRegNumForVirtReg(Register RegNum, bool isEH) const override
Wrapper class representing virtual and physical registers.
constexpr bool isVirtual() const
Return true if the specified register number is in the virtual register namespace.
constexpr unsigned id() const
Represent a constant reference to a string, i.e.
constexpr size_t size() const
Get the string size.
This is an optimization pass for GlobalISel generic memory operations.
StringRef getNVPTXRegClassStr(const TargetRegisterClass *RC)
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...
StringRef getNVPTXRegClassName(const TargetRegisterClass *RC)
MCRegisterClass TargetRegisterClass