]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[amdgcn] Add hook for DWARF address spaces.
authorHafiz Abid Qadeer <abidh@codesourcery.com>
Fri, 28 May 2021 17:06:57 +0000 (18:06 +0100)
committerHafiz Abid Qadeer <abidh@codesourcery.com>
Wed, 30 Jun 2021 16:51:17 +0000 (17:51 +0100)
Map GCN address spaces to the proposed DWARF address spaces defined by AMD at
https://llvm.org/docs/AMDGPUUsage.html#amdgpu-dwarf-address-class-mapping-table

gcc/

* config/gcn/gcn.c: Include dwarf2.h.
(gcn_addr_space_debug): New function.
(TARGET_ADDR_SPACE_DEBUG): New hook.

gcc/config/gcn/gcn.c

index a999897ef68ff7d11aa41c6d3e03aaa378973d7f..6d02a4a02ddccbcca2016b7a3c851b46e68278f1 100644 (file)
@@ -50,6 +50,7 @@
 #include "varasm.h"
 #include "intl.h"
 #include "rtl-iter.h"
+#include "dwarf2.h"
 
 /* This file should be included last.  */
 #include "target-def.h"
@@ -1497,6 +1498,32 @@ gcn_addr_space_convert (rtx op, tree from_type, tree to_type)
     gcc_unreachable ();
 }
 
+/* Implement TARGET_ADDR_SPACE_DEBUG.
+
+   Return the dwarf address space class for each hardware address space.  */
+
+static int
+gcn_addr_space_debug (addr_space_t as)
+{
+  switch (as)
+    {
+      case ADDR_SPACE_DEFAULT:
+      case ADDR_SPACE_FLAT:
+      case ADDR_SPACE_SCALAR_FLAT:
+      case ADDR_SPACE_FLAT_SCRATCH:
+       return DW_ADDR_none;
+      case ADDR_SPACE_GLOBAL:
+       return 1;      // DW_ADDR_LLVM_global
+      case ADDR_SPACE_LDS:
+       return 3;      // DW_ADDR_LLVM_group
+      case ADDR_SPACE_SCRATCH:
+       return 4;      // DW_ADDR_LLVM_private
+      case ADDR_SPACE_GDS:
+       return 0x8000; // DW_ADDR_AMDGPU_region
+    }
+  gcc_unreachable ();
+}
+
 
 /* Implement REGNO_MODE_CODE_OK_FOR_BASE_P via gcn.h
    
@@ -6391,6 +6418,8 @@ gcn_dwarf_register_span (rtx rtl)
 
 #undef  TARGET_ADDR_SPACE_ADDRESS_MODE
 #define TARGET_ADDR_SPACE_ADDRESS_MODE gcn_addr_space_address_mode
+#undef  TARGET_ADDR_SPACE_DEBUG
+#define TARGET_ADDR_SPACE_DEBUG gcn_addr_space_debug
 #undef  TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P
 #define TARGET_ADDR_SPACE_LEGITIMATE_ADDRESS_P \
   gcn_addr_space_legitimate_address_p