https://gcc.gnu.org/g:5c9ef3bdab0c4377c8ba90c234ce891b80ae6338

commit r15-7733-g5c9ef3bdab0c4377c8ba90c234ce891b80ae6338
Author: Thomas Schwinge <tschwi...@baylibre.com>
Date:   Mon Feb 24 22:03:47 2025 +0100

    nvptx: Add test cases for dead/unused 'alloca'/VLA
    
            gcc/testsuite/
            * gcc.target/nvptx/alloca-1-dead-O0-sm_30.c: New.
            * gcc.target/nvptx/alloca-1-dead-O0.c: Likewise.
            * gcc.target/nvptx/alloca-1-dead-O1-sm_30.c: Likewise.
            * gcc.target/nvptx/alloca-1-dead-O1.c: Likewise.
            * gcc.target/nvptx/alloca-1-unused-O0-sm_30.c: Likewise.
            * gcc.target/nvptx/alloca-1-unused-O0.c: Likewise.
            * gcc.target/nvptx/alloca-1-unused-O1-sm_30.c: Likewise.
            * gcc.target/nvptx/alloca-1-unused-O1.c: Likewise.
            * gcc.target/nvptx/vla-1-dead-O0-sm_30.c: Likewise.
            * gcc.target/nvptx/vla-1-dead-O0.c: Likewise.
            * gcc.target/nvptx/vla-1-dead-O1-sm_30.c: Likewise.
            * gcc.target/nvptx/vla-1-dead-O1.c: Likewise.
            * gcc.target/nvptx/vla-1-unused-O0-sm_30.c: Likewise.
            * gcc.target/nvptx/vla-1-unused-O0.c: Likewise.
            * gcc.target/nvptx/vla-1-unused-O1-sm_30.c: Likewise.
            * gcc.target/nvptx/vla-1-unused-O1.c: Likewise.

Diff:
---
 .../gcc.target/nvptx/alloca-1-dead-O0-sm_30.c      | 10 +++++
 gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0.c  | 48 ++++++++++++++++++++++
 .../gcc.target/nvptx/alloca-1-dead-O1-sm_30.c      | 17 ++++++++
 gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1.c  | 17 ++++++++
 .../gcc.target/nvptx/alloca-1-unused-O0-sm_30.c    |  9 ++++
 .../gcc.target/nvptx/alloca-1-unused-O0.c          | 16 ++++++++
 .../gcc.target/nvptx/alloca-1-unused-O1-sm_30.c    | 16 ++++++++
 .../gcc.target/nvptx/alloca-1-unused-O1.c          | 16 ++++++++
 .../gcc.target/nvptx/vla-1-dead-O0-sm_30.c         | 10 +++++
 gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0.c     | 27 ++++++++++++
 .../gcc.target/nvptx/vla-1-dead-O1-sm_30.c         | 19 +++++++++
 gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1.c     | 19 +++++++++
 .../gcc.target/nvptx/vla-1-unused-O0-sm_30.c       |  9 ++++
 gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0.c   | 26 ++++++++++++
 .../gcc.target/nvptx/vla-1-unused-O1-sm_30.c       | 18 ++++++++
 gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1.c   | 18 ++++++++
 16 files changed, 295 insertions(+)

diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0-sm_30.c 
b/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0-sm_30.c
new file mode 100644
index 000000000000..2d002b57579c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0-sm_30.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options {-O0 -mno-soft-stack} } */
+/* { dg-additional-options -march=sm_30 } */
+
+void f(void)
+{
+  char *a = __builtin_alloca(123);
+  /* { dg-message {sorry, unimplemented: dynamic stack allocation not 
supported} {} { target *-*-* } .-1 } */
+  a[0] = 0;
+}
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0.c 
b/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0.c
new file mode 100644
index 000000000000..ecc47e04e727
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0.c
@@ -0,0 +1,48 @@
+/* { dg-do assemble } */
+/* { dg-options {-O0 -mno-soft-stack} } */
+/* { dg-add-options nvptx_alloca_ptx } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(void)
+{
+  char *a = __builtin_alloca(123);
+  a[0] = 0;
+}
+/*
+** f:
+** \.visible \.func f
+** {
+**     \.local \.align 16 \.b8 %frame_ar\[16\];
+**     \.reg\.u64 %frame;
+**     cvta\.local\.u64 %frame, %frame_ar;
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**     \.reg\.u32 (%r[0-9]+);
+**     \.reg\.u64 (%r[0-9]+);
+**             mov\.u64        \11, 16;
+**             add\.u64        \1, \11, -1;
+**             add\.u64        \2, \1, 123;
+**             div\.u64        \3, \2, 16;
+**             mul\.lo\.u64    \4, \3, 16;
+**     {
+**             \.reg\.u64      \5_local;
+**             alloca\.u64     \5_local, \4;
+**             cvta\.local\.u64        \5, \5_local;
+**     }
+**             add\.u64        \6, \5, 15;
+**             shr\.u64        \7, \6, 4;
+**             shl\.b64        \8, \7, 4;
+**             st\.u64 \[%frame\], \8;
+**             ld\.u64 \9, \[%frame\];
+**             mov\.u32        \10, 0;
+**             st\.u8  \[\9\], \10;
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1-sm_30.c 
b/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1-sm_30.c
new file mode 100644
index 000000000000..e296c049a73b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1-sm_30.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+/* { dg-options {-O1 -mno-soft-stack} } */
+/* { dg-additional-options -march=sm_30 } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(void)
+{
+  char *a = __builtin_alloca(123);
+  a[0] = 0;
+}
+/*
+** f:
+** \.visible \.func f
+** {
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1.c 
b/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1.c
new file mode 100644
index 000000000000..5a1a573169e5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+/* { dg-options {-O1 -mno-soft-stack} } */
+/* { dg-add-options nvptx_alloca_ptx } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(void)
+{
+  char *a = __builtin_alloca(123);
+  a[0] = 0;
+}
+/*
+** f:
+** \.visible \.func f
+** {
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O0-sm_30.c 
b/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O0-sm_30.c
new file mode 100644
index 000000000000..c948ccc1f1b9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O0-sm_30.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options {-O0 -mno-soft-stack} } */
+/* { dg-additional-options -march=sm_30 } */
+
+void f(void)
+{
+  __builtin_alloca(123); /* { dg-warning "ignoring return value of 
'__builtin_alloca' declared with attribute 'warn_unused_result'" } */
+  /* { dg-message {sorry, unimplemented: dynamic stack allocation not 
supported} {} { target *-*-* } .-1 } */
+}
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O0.c 
b/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O0.c
new file mode 100644
index 000000000000..fbd147db4bf9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O0.c
@@ -0,0 +1,16 @@
+/* { dg-do assemble } */
+/* { dg-options {-O0 -mno-soft-stack} } */
+/* { dg-add-options nvptx_alloca_ptx } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(void)
+{
+  __builtin_alloca(123); /* { dg-warning "ignoring return value of 
'__builtin_alloca' declared with attribute 'warn_unused_result'" } */
+}
+/*
+** f:
+** \.visible \.func f
+** {
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O1-sm_30.c 
b/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O1-sm_30.c
new file mode 100644
index 000000000000..fb12d096e973
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O1-sm_30.c
@@ -0,0 +1,16 @@
+/* { dg-do assemble } */
+/* { dg-options {-O1 -mno-soft-stack} } */
+/* { dg-additional-options -march=sm_30 } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(void)
+{
+  __builtin_alloca(123); /* { dg-warning "ignoring return value of 
'__builtin_alloca' declared with attribute 'warn_unused_result'" } */
+}
+/*
+** f:
+** \.visible \.func f
+** {
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O1.c 
b/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O1.c
new file mode 100644
index 000000000000..69b8a6840831
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O1.c
@@ -0,0 +1,16 @@
+/* { dg-do assemble } */
+/* { dg-options {-O1 -mno-soft-stack} } */
+/* { dg-add-options nvptx_alloca_ptx } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(void)
+{
+  __builtin_alloca(123); /* { dg-warning "ignoring return value of 
'__builtin_alloca' declared with attribute 'warn_unused_result'" } */
+}
+/*
+** f:
+** \.visible \.func f
+** {
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0-sm_30.c 
b/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0-sm_30.c
new file mode 100644
index 000000000000..04330354cf6e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0-sm_30.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options {-O0 -mno-soft-stack} } */
+/* { dg-additional-options -march=sm_30 } */
+
+void f(int s)
+{
+  char a[s];
+  /* { dg-message {sorry, unimplemented: dynamic stack allocation not 
supported} {} { target *-*-* } .-1 } */
+  a[0] = 0;
+}
diff --git a/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0.c 
b/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0.c
new file mode 100644
index 000000000000..76d35c79df9b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0.c
@@ -0,0 +1,27 @@
+/* { dg-do assemble } */
+/* { dg-options {-O0 -mno-soft-stack} } */
+/* { dg-add-options nvptx_alloca_ptx } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {**} {} } } */
+
+void f(int s)
+{
+  char a[s];
+  a[0] = 0;
+}
+/*
+** f:
+**     ...
+**             cvt\.s64\.s32   (%r[0-9]+), (%r[0-9]+);
+**             mov\.u64        (%r[0-9]+), 16;
+**             add\.u64        (%r[0-9]+), \3, -1;
+**             add\.u64        (%r[0-9]+), \1, \4;
+**             div\.u64        (%r[0-9]+), \5, 16;
+**             mul\.lo\.u64    (%r[0-9]+), \6, 16;
+**     {
+**             \.reg\.u64      (%r[0-9]+)_local;
+**             alloca\.u64     \8_local, \7;
+**             cvta\.local\.u64        \8, \8_local;
+**     }
+**     ...
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1-sm_30.c 
b/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1-sm_30.c
new file mode 100644
index 000000000000..18e2195f69a9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1-sm_30.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble } */
+/* { dg-options {-O1 -mno-soft-stack} } */
+/* { dg-additional-options -march=sm_30 } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(int s)
+{
+  char a[s];
+  a[0] = 0;
+}
+/*
+** f:
+** \.visible \.func f \(\.param\.u32 %in_ar0\)
+** {
+**     \.reg\.u32 %ar0;
+**     ld\.param\.u32 %ar0, \[%in_ar0\];
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1.c 
b/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1.c
new file mode 100644
index 000000000000..12d2cba772be
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1.c
@@ -0,0 +1,19 @@
+/* { dg-do assemble } */
+/* { dg-options {-O1 -mno-soft-stack} } */
+/* { dg-add-options nvptx_alloca_ptx } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(int s)
+{
+  char a[s];
+  a[0] = 0;
+}
+/*
+** f:
+** \.visible \.func f \(\.param\.u32 %in_ar0\)
+** {
+**     \.reg\.u32 %ar0;
+**     ld\.param\.u32 %ar0, \[%in_ar0\];
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0-sm_30.c 
b/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0-sm_30.c
new file mode 100644
index 000000000000..e540f29053fd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0-sm_30.c
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options {-O0 -mno-soft-stack} } */
+/* { dg-additional-options -march=sm_30 } */
+
+void f(int s)
+{
+  char a[s];
+  /* { dg-message {sorry, unimplemented: dynamic stack allocation not 
supported} {} { target *-*-* } .-1 } */
+}
diff --git a/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0.c 
b/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0.c
new file mode 100644
index 000000000000..00ac8cabc9a4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0.c
@@ -0,0 +1,26 @@
+/* { dg-do assemble } */
+/* { dg-options {-O0 -mno-soft-stack} } */
+/* { dg-add-options nvptx_alloca_ptx } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {**} {} } } */
+
+void f(int s)
+{
+  char a[s];
+}
+/*
+** f:
+**     ...
+**             cvt\.s64\.s32   (%r[0-9]+), (%r[0-9]+);
+**             mov\.u64        (%r[0-9]+), 16;
+**             add\.u64        (%r[0-9]+), \3, -1;
+**             add\.u64        (%r[0-9]+), \1, \4;
+**             div\.u64        (%r[0-9]+), \5, 16;
+**             mul\.lo\.u64    (%r[0-9]+), \6, 16;
+**     {
+**             \.reg\.u64      (%r[0-9]+)_local;
+**             alloca\.u64     \8_local, \7;
+**             cvta\.local\.u64        \8, \8_local;
+**     }
+**     ...
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1-sm_30.c 
b/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1-sm_30.c
new file mode 100644
index 000000000000..394da48864ab
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1-sm_30.c
@@ -0,0 +1,18 @@
+/* { dg-do assemble } */
+/* { dg-options {-O1 -mno-soft-stack} } */
+/* { dg-additional-options -march=sm_30 } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(int s)
+{
+  char a[s];
+}
+/*
+** f:
+** \.visible \.func f \(\.param\.u32 %in_ar0\)
+** {
+**     \.reg\.u32 %ar0;
+**     ld\.param\.u32 %ar0, \[%in_ar0\];
+**     ret;
+*/
diff --git a/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1.c 
b/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1.c
new file mode 100644
index 000000000000..060da2851e2a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1.c
@@ -0,0 +1,18 @@
+/* { dg-do assemble } */
+/* { dg-options {-O1 -mno-soft-stack} } */
+/* { dg-add-options nvptx_alloca_ptx } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+void f(int s)
+{
+  char a[s];
+}
+/*
+** f:
+** \.visible \.func f \(\.param\.u32 %in_ar0\)
+** {
+**     \.reg\.u32 %ar0;
+**     ld\.param\.u32 %ar0, \[%in_ar0\];
+**     ret;
+*/

Reply via email to