https://gcc.gnu.org/g:84aa1714c336213a3c8624f7450ea4748e3cdbeb
commit 84aa1714c336213a3c8624f7450ea4748e3cdbeb Author: Thomas Schwinge <tschwi...@baylibre.com> Date: Fri Dec 13 13:54:10 2024 +0100 nvptx: Add '__builtin_stack_save()', '__builtin_stack_restore()' test case [PR65181] Documenting the status quo. PR target/65181 gcc/testsuite/ * gcc.target/nvptx/__builtin_stack_save___builtin_stack_restore-1.c: Add. Diff: --- gcc/testsuite/ChangeLog.omp | 4 +++ ..._builtin_stack_save___builtin_stack_restore-1.c | 32 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index 07a6c97cf58a..76c302c02430 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,5 +1,9 @@ 2024-12-18 Thomas Schwinge <tschwi...@baylibre.com> + PR target/65181 + * gcc.target/nvptx/__builtin_stack_save___builtin_stack_restore-1.c: + Add. + PR target/65181 * gcc.target/nvptx/__builtin_alloca_0-1-O0.c: New. * gcc.target/nvptx/__builtin_alloca_0-1-O1.c: Likewise. diff --git a/gcc/testsuite/gcc.target/nvptx/__builtin_stack_save___builtin_stack_restore-1.c b/gcc/testsuite/gcc.target/nvptx/__builtin_stack_save___builtin_stack_restore-1.c new file mode 100644 index 000000000000..294014dae1db --- /dev/null +++ b/gcc/testsuite/gcc.target/nvptx/__builtin_stack_save___builtin_stack_restore-1.c @@ -0,0 +1,32 @@ +/* Document what we do for '__builtin_stack_save()', '__builtin_stack_restore()'. */ + +/* { dg-do compile } + TODO We can't 'assemble' this -- it's invalid PTX code. */ +/* { dg-options {-O3 -mno-soft-stack} } */ +/* { dg-additional-options -save-temps } */ +/* { dg-final { check-function-bodies {** } {} } } */ + +void *p; + +void f(void) +{ + p = __builtin_stack_save(); + asm volatile ("" : : : "memory"); + __builtin_stack_restore(p); + asm volatile ("" : : : "memory"); +} +/* +** f: +** \.visible \.func f +** { +** st\.global\.u64 \[p\], %stack; +** ret; +*/ + +/* The concept of a '%stack' pointer doesn't apply like this for + '-mno-soft-stack': PTX "native" stacks (TODO). + + { dg-final { scan-assembler-not {%stack} { xfail *-*-* } } } */ + +/* As these are an internal-use built-in function, we don't bother with + emitting proper error diagnostics. */