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;