https://gcc.gnu.org/g:82985d2d2e6ad2512e84054148439ea2337bb870

commit 82985d2d2e6ad2512e84054148439ea2337bb870
Author: Thomas Schwinge <tschwi...@baylibre.com>
Date:   Wed Feb 26 17:17:44 2025 +0100

    Add 'gcc.target/nvptx/stack_frame-1.c'
    
            gcc/testsuite/
            * gcc.target/nvptx/stack_frame-1.c: New.
    
    (cherry picked from commit 39e1ec22dbaad6cf8e3dc16fd4a576d03215201e)

Diff:
---
 gcc/testsuite/ChangeLog.omp                    |  5 ++++
 gcc/testsuite/gcc.target/nvptx/stack_frame-1.c | 34 ++++++++++++++++++++++++++
 2 files changed, 39 insertions(+)

diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp
index 514874cf01be..8f994a73a901 100644
--- a/gcc/testsuite/ChangeLog.omp
+++ b/gcc/testsuite/ChangeLog.omp
@@ -3,6 +3,11 @@
        Backported from trunk:
        2025-02-27  Thomas Schwinge  <tschwi...@baylibre.com>
 
+       * gcc.target/nvptx/stack_frame-1.c: New.
+
+       Backported from trunk:
+       2025-02-27  Thomas Schwinge  <tschwi...@baylibre.com>
+
        * gcc.target/nvptx/alloca-1-O0_-mfake-ptx-alloca.c: New.
        * gcc.target/nvptx/alloca-2-O0_-mfake-ptx-alloca.c: Likewise.
        * gcc.target/nvptx/alloca-4-O3_-mfake-ptx-alloca.c: Likewise.
diff --git a/gcc/testsuite/gcc.target/nvptx/stack_frame-1.c 
b/gcc/testsuite/gcc.target/nvptx/stack_frame-1.c
new file mode 100644
index 000000000000..476d0ac93ed0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/nvptx/stack_frame-1.c
@@ -0,0 +1,34 @@
+/* GCC emits an unused stack frame.  */
+
+/* { dg-do assemble } */
+/* { dg-options {-O2 -mno-soft-stack} } */
+/* { dg-additional-options -save-temps } */
+/* { dg-final { check-function-bodies {** } {} } } */
+
+/* Greatly reduced from libgcc code, where this issue is visible for
+   '_divdi3.o:__divti3', '_divmoddi4.o:__divmodti4', '_moddi3.o:__modti3',
+   '_udivdi3.o:__udivti3', '_udivmoddi4.o:__udivmodti4',
+   '_umoddi3.o:__umodti3'.  */
+
+int f (int n)
+{
+  const union {
+    struct { long low, high; };
+    __int128 ll;
+  } ww = {{.low = n, .high = 0}};
+  return (int) ww.ll;
+}
+/*
+** f:
+** \.visible \.func \(\.param\.u32 %value_out\) f \(\.param\.u32 %in_ar0\)
+** {
+**     \.reg\.u32 %value;
+**     \.reg\.u32 %ar0;
+**     ld\.param\.u32 %ar0, \[%in_ar0\];
+**     \.local \.align 16 \.b8 %frame_ar\[16\];
+**     \.reg\.u64 %frame;
+**     cvta\.local\.u64 %frame, %frame_ar;
+**             mov\.u32        %value, %ar0;
+**     st\.param\.u32  \[%value_out\], %value;
+**     ret;
+*/

Reply via email to