From 5c9ef3bdab0c4377c8ba90c234ce891b80ae6338 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tschwinge@baylibre.com> Date: Mon, 24 Feb 2025 22:03:47 +0100 Subject: [PATCH] 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. --- .../gcc.target/nvptx/alloca-1-dead-O0-sm_30.c | 10 ++++ .../gcc.target/nvptx/alloca-1-dead-O0.c | 48 +++++++++++++++++++ .../gcc.target/nvptx/alloca-1-dead-O1-sm_30.c | 17 +++++++ .../gcc.target/nvptx/alloca-1-dead-O1.c | 17 +++++++ .../nvptx/alloca-1-unused-O0-sm_30.c | 9 ++++ .../gcc.target/nvptx/alloca-1-unused-O0.c | 16 +++++++ .../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.target/nvptx/vla-1-dead-O0.c | 27 +++++++++++ .../gcc.target/nvptx/vla-1-dead-O1-sm_30.c | 19 ++++++++ .../gcc.target/nvptx/vla-1-dead-O1.c | 19 ++++++++ .../gcc.target/nvptx/vla-1-unused-O0-sm_30.c | 9 ++++ .../gcc.target/nvptx/vla-1-unused-O0.c | 26 ++++++++++ .../gcc.target/nvptx/vla-1-unused-O1-sm_30.c | 18 +++++++ .../gcc.target/nvptx/vla-1-unused-O1.c | 18 +++++++ 16 files changed, 295 insertions(+) create mode 100644 gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0-sm_30.c create mode 100644 gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O0.c create mode 100644 gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1-sm_30.c create mode 100644 gcc/testsuite/gcc.target/nvptx/alloca-1-dead-O1.c create mode 100644 gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O0-sm_30.c create mode 100644 gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O0.c create mode 100644 gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O1-sm_30.c create mode 100644 gcc/testsuite/gcc.target/nvptx/alloca-1-unused-O1.c create mode 100644 gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0-sm_30.c create mode 100644 gcc/testsuite/gcc.target/nvptx/vla-1-dead-O0.c create mode 100644 gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1-sm_30.c create mode 100644 gcc/testsuite/gcc.target/nvptx/vla-1-dead-O1.c create mode 100644 gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0-sm_30.c create mode 100644 gcc/testsuite/gcc.target/nvptx/vla-1-unused-O0.c create mode 100644 gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1-sm_30.c create mode 100644 gcc/testsuite/gcc.target/nvptx/vla-1-unused-O1.c 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; +*/ -- GitLab