diff mbox series

[committed,OG10] DWARF address space for variables

Message ID aad59ad6-7e3f-3977-7b04-1b6fadcec54c@codesourcery.com
State New
Headers show
Series [committed,OG10] DWARF address space for variables | expand

Commit Message

Andrew Stubbs Jan. 15, 2021, 12:19 p.m. UTC
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
diff mbox series

Patch

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;