Hi Tom!

On 2022-03-22T14:41:46+0100, Tom de Vries via Gcc-patches 
<gcc-patches@gcc.gnu.org> wrote:
> Starting with ptx isa version 6.3, a ptx directive .alias is available.

Regarding the following item specifically:

> Unreferenced aliases are not emitted (these can occur f.i. when inlining a
> call to an alias).  This avoids driver link error "Internal error: reference
> to deleted section".

> --- a/gcc/config/nvptx/nvptx.cc
> +++ b/gcc/config/nvptx/nvptx.cc

> +void
> +nvptx_asm_output_def_from_decls (FILE *stream, tree name, tree value)
> +{
> +  [...]
> +  if (!cgraph_node::get (name)->referred_to_p ())
> +    /* Prevent "Internal error: reference to deleted section".  */
> +    return;
> +  [...]
> +}

I understand the high-level rationale (PR105019) behind this early
return, but I'm curious why you chose cgraph 'referred_to_p ()' here,
instead of 'TREE_USED', or 'TREE_SYMBOL_REFERENCED' (on identifier), or
some such?  (All untested.)  Is there any specific reason that you
remember, or did it just happen to do the right thing?

In an offloading test case (PR106445), I'm running into the case that a
C++ constructor alias gets called (via 'nvptx_output_call_insn', and per
that one's 'assemble_name' call, 'TREE_SYMBOL_REFERENCED' gets set, for
example) -- but that alias isn't '[cgraph]->referred_to_p ()', so no
PTX '.alias' gets emitted, resulting in link failure.  To make that work,
I might just add '|| TREE_SYMBOL_REFERENCED ([identifier])' next to the
existing cgraph 'referred_to_p ()', but I'd like to understand this
better.  For example, is it actually the very problem that this alias
isn't cgraph 'referred_to_p ()', but it should it be?  (I have not much
clue about the cgraph machinery generally, and even less about the
applicability of it/of its state in offloading compilation,
specifically.)


Grüße
 Thomas

Reply via email to