]> git.ipfire.org Git - thirdparty/gcc.git/commit
nvptx: Partial support for aliases to aliases.
authorPrathamesh Kulkarni <prathameshk@nvidia.com>
Tue, 24 Sep 2024 02:48:48 +0000 (08:18 +0530)
committerPrathamesh Kulkarni <prathameshk@nvidia.com>
Tue, 24 Sep 2024 02:50:46 +0000 (08:20 +0530)
commitf5ee372b012594830f6d5f7f4b7e01bae810b1da
treeb1f77e17b78c2f0dcfa4627e3702f0ee0f458efd
parent4d6fa5b7f14b1d4aeb040db51b33c24456d94699
nvptx: Partial support for aliases to aliases.

For the following test (adapted from pr96390.c):

__attribute__((noipa)) int foo () { return 42; }
int bar () __attribute__((alias ("foo")));
int baz () __attribute__((alias ("bar")));

int main ()
{
  int n;
  #pragma omp target map(from:n)
    n = baz ();
  return n;
}

gcc emits following ptx for baz:
.visible .func (.param.u32 %value_out) bar;
.alias bar,foo;
.visible .func (.param.u32 %value_out) baz;
.alias baz,bar;

which is incorrect since PTX requires aliasee to be a defined function.
The patch instead uses cgraph_node::get(name)->ultimate_alias_target,
which generates the following PTX:

.visible .func (.param.u32 %value_out) baz;
.alias baz,foo;

gcc/ChangeLog:
PR target/104957
* config/nvptx/nvptx.cc (nvptx_asm_output_def_from_decls): Use
cgraph_node::get(name)->ultimate_alias_target instead of value.

gcc/testsuite/ChangeLog:
PR target/104957
* gcc.target/nvptx/alias-to-alias-1.c: Adjust.

Signed-off-by: Prathamesh Kulkarni <prathameshk@nvidia.com>
Co-authored-by: Thomas Schwinge <tschwinge@baylibre.com>
gcc/config/nvptx/nvptx.cc
gcc/testsuite/gcc.target/nvptx/alias-to-alias-1.c