This patch adds DWARF support for "local" variables that are actually located in a different address space.

This situation occurs for variables shared between all the worker threads of an OpenACC gang. On AMD GCN the variables are allocated to the low-latency LDS memory associated with each physical compute unit.

The patch depends on my previous patch "amdgcn: DWARF address spaces" to actually do anything useful, as it uses the hook defined there. The patch has no effect on ports that do not define that hook.

Committed to devel/omp/gcc-10. This will be submitted to mainline in stage 1.

Andrew
DWARF address space for variables

Add DWARF address class attributes for variables that exist outside the
generic address space.  In particular, this is the case for gang-private
variables in OpenACC offload kernels.

gcc/ChangeLog:

	* dwarf2out.c (add_location_or_const_value_attribute): Set
	DW_AT_address_class, if appropriate.

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index a4a1b934dc7..dedfeaf865f 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -20294,6 +20294,15 @@ add_location_or_const_value_attribute (dw_die_ref die, tree decl, bool cache_p)
   if (list)
     {
       add_AT_location_description (die, DW_AT_location, list);
+
+      addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (decl));
+      if (!ADDR_SPACE_GENERIC_P (as))
+	{
+	  int action = targetm.addr_space.debug (as);
+	  /* Positive values indicate an address_class.  */
+	  if (action >= 0)
+	    add_AT_unsigned (die, DW_AT_address_class, action);
+	}
       return true;
     }
   /* None of that worked, so it must not really have a location;

Reply via email to