[llvm-branch-commits] [llvm] [NVPTX] add support for encoding PTX registers for DWARF (PR #109495)
Walter Erquinigo via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Sep 22 13:34:56 PDT 2024
================
@@ -141,3 +142,47 @@ NVPTXRegisterInfo::getFrameLocalRegister(const MachineFunction &MF) const {
static_cast<const NVPTXTargetMachine &>(MF.getTarget());
return TM.is64Bit() ? NVPTX::VRFrameLocal64 : NVPTX::VRFrameLocal32;
}
+
+void NVPTXRegisterInfo::clearDebugRegisterMap() const {
+ debugRegisterMap.clear();
+}
+
+static uint64_t encodeRegisterForDwarf(std::string registerName) {
+ if (registerName.length() > 8) {
+ // The name is more than 8 characters long, and so won't fit into 64 bits.
+ return 0;
+ }
+
+ // Encode the name string into a DWARF register number using cuda-gdb's
+ // encoding. See cuda_check_dwarf2_reg_ptx_virtual_register in cuda-tdep.c,
+ // https://github.com/NVIDIA/cuda-gdb/blob/e5cf3bddae520ffb326f95b4d98ce5c7474b828b/gdb/cuda/cuda-tdep.c#L353
+ // IE the bytes of the string are concatenated in reverse into a single
+ // number, which is stored in ULEB128, but in practice must be no more than 8
+ // bytes (excluding null terminator, which is not included).
+ uint64_t result = 0;
+ for (int i = 0; i < registerName.length(); ++i) {
+ result = result << 8;
+ char c = registerName[i];
----------------
walter-erquinigo wrote:
shouldn't this be unsigned char?
https://github.com/llvm/llvm-project/pull/109495
More information about the llvm-branch-commits
mailing list