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 0000000000000000000000000000000000000000..2d002b57579cd8d9ce4e5d6a6f92d091ad2e2a06
--- /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 0000000000000000000000000000000000000000..ecc47e04e727499c267efcf0c8524303cc4d7a5a
--- /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 0000000000000000000000000000000000000000..e296c049a73bdff50874bb5ead05695ec9c6ae50
--- /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 0000000000000000000000000000000000000000..5a1a573169e53c149e00b0560499c2654977d5a2
--- /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 0000000000000000000000000000000000000000..c948ccc1f1b93d886b5107b5f3ee751e48a6985c
--- /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 0000000000000000000000000000000000000000..fbd147db4bf95f99bd998a4233e91ee65e941ff4
--- /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 0000000000000000000000000000000000000000..fb12d096e9731ba3999212421ff9e705ca4cb0cb
--- /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 0000000000000000000000000000000000000000..69b8a6840831bf24604398a69bd5f965c4d6dc37
--- /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 0000000000000000000000000000000000000000..04330354cf6eee5cb49e741c66e1b559c38eaa38
--- /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 0000000000000000000000000000000000000000..76d35c79df9b8047146ceae544cc23e31b613070
--- /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 0000000000000000000000000000000000000000..18e2195f69a9d4d712e78cd051ee5f8c7e0cf053
--- /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 0000000000000000000000000000000000000000..12d2cba772be6e5a7d9057cd0ad7ef5adea69bbe
--- /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 0000000000000000000000000000000000000000..e540f29053fd93e52c27855818aff6845013964b
--- /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 0000000000000000000000000000000000000000..00ac8cabc9a4ac47d1abee047f02098774cdbb6f
--- /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 0000000000000000000000000000000000000000..394da48864ab8c45ac536d435308596f07e23ed7
--- /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 0000000000000000000000000000000000000000..060da2851e2a9668fb7a69e89aaae648fbeac629
--- /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;
+*/