Hi! On 2024-07-18T13:44:37+0200, wrote: > OK to push (once testing completes) the attached > "Make 'target-supports.exp' additions for nvptx target generally available"? > > The idea of this new scheme is that explicit feature/target-specific > stuff isn't kept in 'gcc/testsuite/lib/target-supports.exp', but instead > in feature/target-specific 'gcc/testsuite/lib/target-supports-*.exp' > files. (..., and hoping that other maintainers also pick up this new > scheme, and likewise move any feature/target-specific stuff from > 'gcc/testsuite/lib/target-supports.exp', for example, into new > 'gcc/testsuite/lib/target-supports-*.exp' files, to un-bloat the former > one.)
I've not yet had any response to that proposal, so I've for now done it the standard way, and pushed to trunk branch commit a121af90fe9244258c8620901dd6fa22537767bb "Move from 'gcc.target/nvptx/nvptx.exp' into 'target-supports.exp' additions for nvptx target", see attached. Grüße Thomas
>From a121af90fe9244258c8620901dd6fa22537767bb Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwi...@baylibre.com> Date: Mon, 22 Jul 2024 14:40:34 +0200 Subject: [PATCH] Move from 'gcc.target/nvptx/nvptx.exp' into 'target-supports.exp' additions for nvptx target gcc/testsuite/ * gcc.target/nvptx/nvptx.exp (check_effective_target_default_ptx_isa_version_at_least) (check_effective_target_default_ptx_isa_version_at_least_6_0) (check_effective_target_runtime_ptx_isa_version_at_least) (check_effective_target_runtime_ptx_alias) (add_options_for_ptx_alias): Move... * lib/target-supports.exp (check_nvptx_default_ptx_isa_version_at_least) (check_effective_target_nvptx_default_ptx_isa_version_at_least_6_0) (check_nvptx_runtime_ptx_isa_version_at_least) (check_effective_target_nvptx_runtime_alias_ptx) (add_options_for_nvptx_alias_ptx): ... here. * gcc.target/nvptx/alias-1.c: Adjust. * gcc.target/nvptx/alias-2.c: Likewise. * gcc.target/nvptx/alias-3.c: Likewise. * gcc.target/nvptx/alias-4.c: Likewise. * gcc.target/nvptx/alias-to-alias-1.c: Likewise. * gcc.target/nvptx/alias-weak-1.c: Likewise. * gcc.target/nvptx/uniform-simt-5.c: Likewise. gcc/ * doc/sourcebuild.texi (Effective-Target Keywords): Document 'nvptx_default_ptx_isa_version_at_least_6_0', 'nvptx_runtime_alias_ptx'. (Add Options): Document 'nvptx_alias_ptx'. --- gcc/doc/sourcebuild.texi | 14 ++++ gcc/testsuite/gcc.target/nvptx/alias-1.c | 4 +- gcc/testsuite/gcc.target/nvptx/alias-2.c | 4 +- gcc/testsuite/gcc.target/nvptx/alias-3.c | 4 +- gcc/testsuite/gcc.target/nvptx/alias-4.c | 4 +- .../gcc.target/nvptx/alias-to-alias-1.c | 2 +- gcc/testsuite/gcc.target/nvptx/alias-weak-1.c | 2 +- gcc/testsuite/gcc.target/nvptx/nvptx.exp | 66 ----------------- .../gcc.target/nvptx/uniform-simt-5.c | 4 +- gcc/testsuite/lib/target-supports.exp | 72 +++++++++++++++++++ 10 files changed, 98 insertions(+), 78 deletions(-) diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 7c7094dc5a9..6ba72fd44a2 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -2424,6 +2424,17 @@ MSP430 target has the small memory model enabled (@code{-msmall}). MSP430 target has the large memory model enabled (@code{-mlarge}). @end table +@subsubsection nvptx-specific attributes + +@table @code +@item nvptx_default_ptx_isa_version_at_least_6_0 +nvptx code by default compiles for at least PTX ISA version 6.0. + +@item nvptx_runtime_alias_ptx +The nvptx runtime environment supports the PTX ISA directive +@code{.alias}. +@end table + @subsubsection PowerPC-specific attributes @table @code @@ -3302,6 +3313,9 @@ compliance mode. @code{mips16} function attributes. Only MIPS targets support this feature, and only then in certain modes. +@item nvptx_alias_ptx +Enable using the PTX ISA directive @code{.alias} on nvptx targets. + @item riscv_a Add the 'A' extension to the -march string on RISC-V targets. diff --git a/gcc/testsuite/gcc.target/nvptx/alias-1.c b/gcc/testsuite/gcc.target/nvptx/alias-1.c index d251eee6e42..1c0642b14d9 100644 --- a/gcc/testsuite/gcc.target/nvptx/alias-1.c +++ b/gcc/testsuite/gcc.target/nvptx/alias-1.c @@ -1,7 +1,7 @@ /* { dg-do link } */ -/* { dg-do run { target runtime_ptx_alias } } */ +/* { dg-do run { target nvptx_runtime_alias_ptx } } */ /* { dg-options "-save-temps" } */ -/* { dg-add-options ptx_alias } */ +/* { dg-add-options nvptx_alias_ptx } */ int v; diff --git a/gcc/testsuite/gcc.target/nvptx/alias-2.c b/gcc/testsuite/gcc.target/nvptx/alias-2.c index 96cb7e2c1ef..5c4b9c787e1 100644 --- a/gcc/testsuite/gcc.target/nvptx/alias-2.c +++ b/gcc/testsuite/gcc.target/nvptx/alias-2.c @@ -1,7 +1,7 @@ /* { dg-do link } */ -/* { dg-do run { target runtime_ptx_alias } } */ +/* { dg-do run { target nvptx_runtime_alias_ptx } } */ /* { dg-options "-save-temps -O2" } */ -/* { dg-add-options ptx_alias } */ +/* { dg-add-options nvptx_alias_ptx } */ #include "alias-1.c" diff --git a/gcc/testsuite/gcc.target/nvptx/alias-3.c b/gcc/testsuite/gcc.target/nvptx/alias-3.c index 39649e30b91..b55ff26269e 100644 --- a/gcc/testsuite/gcc.target/nvptx/alias-3.c +++ b/gcc/testsuite/gcc.target/nvptx/alias-3.c @@ -1,7 +1,7 @@ /* { dg-do link } */ -/* { dg-do run { target runtime_ptx_alias } } */ +/* { dg-do run { target nvptx_runtime_alias_ptx } } */ /* { dg-options "-save-temps" } */ -/* { dg-add-options ptx_alias } */ +/* { dg-add-options nvptx_alias_ptx } */ /* Copy of alias-1.c, with static __f and f. */ diff --git a/gcc/testsuite/gcc.target/nvptx/alias-4.c b/gcc/testsuite/gcc.target/nvptx/alias-4.c index 28163c0faa0..b36fa420aa7 100644 --- a/gcc/testsuite/gcc.target/nvptx/alias-4.c +++ b/gcc/testsuite/gcc.target/nvptx/alias-4.c @@ -1,7 +1,7 @@ /* { dg-do link } */ -/* { dg-do run { target runtime_ptx_alias } } */ +/* { dg-do run { target nvptx_runtime_alias_ptx } } */ /* { dg-options "-save-temps -O2" } */ -/* { dg-add-options ptx_alias } */ +/* { dg-add-options nvptx_alias_ptx } */ #include "alias-3.c" diff --git a/gcc/testsuite/gcc.target/nvptx/alias-to-alias-1.c b/gcc/testsuite/gcc.target/nvptx/alias-to-alias-1.c index 3db79d1fc0b..273baca89c4 100644 --- a/gcc/testsuite/gcc.target/nvptx/alias-to-alias-1.c +++ b/gcc/testsuite/gcc.target/nvptx/alias-to-alias-1.c @@ -1,7 +1,7 @@ /* Alias to alias; 'libgomp.c-c++-common/pr96390.c'. */ /* { dg-do compile } */ -/* { dg-add-options ptx_alias } */ +/* { dg-add-options nvptx_alias_ptx } */ int v; diff --git a/gcc/testsuite/gcc.target/nvptx/alias-weak-1.c b/gcc/testsuite/gcc.target/nvptx/alias-weak-1.c index 37d9543fc7f..6e4267c404d 100644 --- a/gcc/testsuite/gcc.target/nvptx/alias-weak-1.c +++ b/gcc/testsuite/gcc.target/nvptx/alias-weak-1.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-add-options ptx_alias } */ +/* { dg-add-options nvptx_alias_ptx } */ void __f () { diff --git a/gcc/testsuite/gcc.target/nvptx/nvptx.exp b/gcc/testsuite/gcc.target/nvptx/nvptx.exp index 3151381f51a..d526b5822f9 100644 --- a/gcc/testsuite/gcc.target/nvptx/nvptx.exp +++ b/gcc/testsuite/gcc.target/nvptx/nvptx.exp @@ -25,72 +25,6 @@ if ![istarget nvptx*-*-*] then { # Load support procs. load_lib gcc-dg.exp -# Return 1 if code by default compiles for at least PTX ISA version -# major.minor. -proc check_effective_target_default_ptx_isa_version_at_least { major minor } { - set name default_ptx_isa_version_at_least_${major}_${minor} - - set supported_p \ - [concat \ - "((__PTX_ISA_VERSION_MAJOR__ == $major" \ - " && __PTX_ISA_VERSION_MINOR__ >= $minor)" \ - " || (__PTX_ISA_VERSION_MAJOR__ > $major))"] - - set src \ - [list \ - "#if $supported_p" \ - "#else" \ - "#error unsupported" \ - "#endif"] - set src [join $src "\n"] - - set res [check_no_compiler_messages $name assembly $src ""] - - return $res -} - -# Return 1 if code by default compiles for at least PTX ISA version 6.0. -proc check_effective_target_default_ptx_isa_version_at_least_6_0 { } { - return [check_effective_target_default_ptx_isa_version_at_least 6 0] -} - -# Return 1 if code with PTX ISA version major.minor or higher can be run. -proc check_effective_target_runtime_ptx_isa_version_at_least { major minor } { - set name runtime_ptx_isa_version_${major}_${minor} - - set default \ - [check_effective_target_default_ptx_isa_version_at_least \ - ${major} ${minor}] - - if { $default } { - set flag "" - } else { - set flag "-mptx=$major.$minor" - } - - set res [check_runtime $name { - int main (void) { return 0; } - } $flag] - - return $res -} - -# Return 1 if runtime environment support the PTX ISA directive .alias. -proc check_effective_target_runtime_ptx_alias { } { - return [check_effective_target_runtime_ptx_isa_version_at_least 6 3] -} - -# Add options to enable using PTX ISA directive .alias. -proc add_options_for_ptx_alias { flags } { - append flags " -malias" - - if { ![check_effective_target_default_ptx_isa_version_at_least 6 3] } { - append flags " -mptx=6.3" - } - - return $flags -} - # If a testcase doesn't have special options, use these. global DEFAULT_CFLAGS if ![info exists DEFAULT_CFLAGS] then { diff --git a/gcc/testsuite/gcc.target/nvptx/uniform-simt-5.c b/gcc/testsuite/gcc.target/nvptx/uniform-simt-5.c index cd6ea82d293..12b9f786c0f 100644 --- a/gcc/testsuite/gcc.target/nvptx/uniform-simt-5.c +++ b/gcc/testsuite/gcc.target/nvptx/uniform-simt-5.c @@ -22,7 +22,7 @@ main() /* Per 'omp_simt_exit': - 'nvptx_warpsync' - { dg-final { scan-assembler-times {bar\.warp\.sync\t0xffffffff;} 1 { target default_ptx_isa_version_at_least_6_0 } } } + { dg-final { scan-assembler-times {bar\.warp\.sync\t0xffffffff;} 1 { target nvptx_default_ptx_isa_version_at_least_6_0 } } } - 'nvptx_uniform_warp_check' - { dg-final { scan-assembler-times {vote\.all\.pred\t%r_sync, 1;} 1 { target { ! default_ptx_isa_version_at_least_6_0 } } } } + { dg-final { scan-assembler-times {vote\.all\.pred\t%r_sync, 1;} 1 { target { ! nvptx_default_ptx_isa_version_at_least_6_0 } } } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index d537d3055b3..cb9971d5398 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -13728,3 +13728,75 @@ proc check_effective_target_check_jsonschema { } { return 0; } } + +# Return 1 if nvptx code by default compiles for at least PTX ISA version +# major.minor. + +proc check_nvptx_default_ptx_isa_version_at_least { major minor } { + set name nvptx_default_ptx_isa_version_at_least_${major}_${minor} + + set supported_p \ + [concat \ + "((__PTX_ISA_VERSION_MAJOR__ == $major" \ + " && __PTX_ISA_VERSION_MINOR__ >= $minor)" \ + " || (__PTX_ISA_VERSION_MAJOR__ > $major))"] + + set src \ + [list \ + "#if $supported_p" \ + "#else" \ + "#error unsupported" \ + "#endif"] + set src [join $src "\n"] + + set res [check_no_compiler_messages $name assembly $src ""] + + return $res +} + +# Return 1 if nvptx code by default compiles for at least PTX ISA version 6.0. + +proc check_effective_target_nvptx_default_ptx_isa_version_at_least_6_0 { } { + return [check_nvptx_default_ptx_isa_version_at_least 6 0] +} + +# Return 1 if nvptx code with PTX ISA version major.minor or higher can be run. + +proc check_nvptx_runtime_ptx_isa_version_at_least { major minor } { + set name nvptx_runtime_ptx_isa_version_${major}_${minor} + + set default \ + [check_nvptx_default_ptx_isa_version_at_least \ + ${major} ${minor}] + + if { $default } { + set flag "" + } else { + set flag "-mptx=$major.$minor" + } + + set res [check_runtime $name { + int main (void) { return 0; } + } $flag] + + return $res +} + +# Return 1 if the nvptx runtime environment supports the PTX ISA directive +# '.alias'. + +proc check_effective_target_nvptx_runtime_alias_ptx { } { + return [check_nvptx_runtime_ptx_isa_version_at_least 6 3] +} + +# Add options to enable nvptx using the PTX ISA directive '.alias'. + +proc add_options_for_nvptx_alias_ptx { flags } { + append flags " -malias" + + if { ![check_nvptx_default_ptx_isa_version_at_least 6 3] } { + append flags " -mptx=6.3" + } + + return $flags +} -- 2.34.1