Bug 105018 - [nvptx] Need better alias support
Summary: [nvptx] Need better alias support
Status: ASSIGNED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 12.0
: P3 enhancement
Target Milestone: ---
Assignee: Thomas Schwinge
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-03-22 14:29 UTC by Tom de Vries
Modified: 2024-09-07 07:18 UTC (History)
3 users (show)

See Also:
Host:
Target: nvptx
Build:
Known to work:
Known to fail:
Last reconfirmed: 2024-09-04 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tom de Vries 2022-03-22 14:29:01 UTC
We currently have alias support enabled by malias, which relies on the ptx .alias directive.

There is a number of limitations, listed in the commit adding malias:
...
Only function aliases are supported.
    
Weak aliases are not supported.  That is, if I disable the check in
nvptx_asm_output_def_from_decls that disallows this, a weak alias is emitted
and parsed by the driver.  But the test gcc.dg/globalalias.c starts failing,
with the behaviour matching the comment about "weird behavior of AIX's .set
pseudo-op": a weak alias may resolve to different functions in different
files.
    
Aliases to weak symbols are not supported (see gcc.dg/localalias.c).  This is
currently not prohibited by the compiler, but with the driver link we run
into: "error: Function test with .weak scope cannot be aliased".
    
Aliases to aliases are not supported (see libgomp.c-c++-common/pr96390.c).
This is currently not prohibited by the compiler, but with the driver link we
run into:  "Internal error: alias to unknown symbol" .
    
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".
...

We'd like an implementation that doesn't have (all of) these limitations.
Comment 1 Tom de Vries 2022-03-22 14:30:48 UTC
(In reply to Tom de Vries from comment #0)
> Aliases to aliases are not supported (see libgomp.c-c++-common/pr96390.c).
> This is currently not prohibited by the compiler, but with the driver link we
> run into:  "Internal error: alias to unknown symbol" .

And that is the reason that libgomp.c-c++-common/pr96390.c and friends doesn't pass when I do:
...
/* { dg-additional-options "-foffload=-mptx=6.3 -foffload=-malias" { target offload_target_nvptx } } */
...
Comment 2 Tom de Vries 2022-03-22 14:34:14 UTC
As mentioned before by amonakov, a possibility is to add alias support to the nvptx-tools linker, and use that.
Comment 3 Thomas Schwinge 2022-07-22 13:02:57 UTC
(In reply to Tom de Vries from comment #2)
> As mentioned before by amonakov, a possibility is to add alias support to
> the nvptx-tools linker, and use that.

<https://github.com/MentorEmbedded/nvptx-tools/issues/32> "[LD] Handle alias in nvptx-ld as nvptx's .alias does not handle it fully".

Alexander, you don't happen to have started working on this already?