24#define DEBUG_TYPE "nvptx-reg-info"
28 if (RC == &NVPTX::B128RegClass)
30 if (RC == &NVPTX::B64RegClass)
50 if (RC == &NVPTX::B32RegClass)
52 if (RC == &NVPTX::B16RegClass)
54 if (RC == &NVPTX::B1RegClass)
56 if (RC == &NVPTX::SpecialRegsRegClass)
62 if (RC == &NVPTX::B128RegClass)
64 if (RC == &NVPTX::B64RegClass)
66 if (RC == &NVPTX::B32RegClass)
68 if (RC == &NVPTX::B16RegClass)
70 if (RC == &NVPTX::B1RegClass)
72 if (RC == &NVPTX::SpecialRegsRegClass)
81#define GET_REGINFO_TARGET_DESC
82#include "NVPTXGenRegisterInfo.inc"
87 static const MCPhysReg CalleeSavedRegs[] = { 0 };
88 return CalleeSavedRegs;
93 for (
unsigned Reg = NVPTX::ENVREG0; Reg <= NVPTX::ENVREG31; ++Reg) {
96 markSuperRegs(
Reserved, NVPTX::VRFrame32);
97 markSuperRegs(
Reserved, NVPTX::VRFrameLocal32);
98 markSuperRegs(
Reserved, NVPTX::VRFrame64);
99 markSuperRegs(
Reserved, NVPTX::VRFrameLocal64);
100 markSuperRegs(
Reserved, NVPTX::VRDepot);
105 int SPAdj,
unsigned FIOperandNum,
107 assert(SPAdj == 0 &&
"Unexpected");
110 if (
MI.isLifetimeMarker()) {
111 MI.eraseFromParent();
115 const int FrameIndex =
MI.getOperand(FIOperandNum).getIndex();
119 MI.getOperand(FIOperandNum + 1).getImm();
123 MI.getOperand(FIOperandNum + 1).ChangeToImmediate(
Offset);
130 return TM.is64Bit() ? NVPTX::VRFrame64 : NVPTX::VRFrame32;
137 return TM.is64Bit() ? NVPTX::VRFrameLocal64 : NVPTX::VRFrameLocal32;
141 debugRegisterMap.clear();
145 if (RegisterName.
size() > 8)
156 for (
unsigned char c : RegisterName)
157 result = (result << 8) | c;
166 debugRegisterMap.insert({preEncodedVirtualRegister, mapped});
174 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, DataExtractor &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
StringRef - Represent a constant reference to a string, i.e.
constexpr size_t size() const
size - Get the string size.
This is an optimization pass for GlobalISel generic memory operations.
StringRef getNVPTXRegClassStr(TargetRegisterClass const *RC)
StringRef getNVPTXRegClassName(TargetRegisterClass const *RC)
uint16_t MCPhysReg
An unsigned integer type large enough to represent all physical registers, but not necessarily virtua...