aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/s390
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/s390')
-rw-r--r--gcc/testsuite/gcc.target/s390/pr89775-1.c17
-rw-r--r--gcc/testsuite/gcc.target/s390/pr89775-2.c25
-rw-r--r--gcc/testsuite/gcc.target/s390/vector/vec-shift-2.c24
-rw-r--r--gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c10
-rw-r--r--gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-1.c45
-rw-r--r--gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-2.c48
6 files changed, 169 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/s390/pr89775-1.c b/gcc/testsuite/gcc.target/s390/pr89775-1.c
new file mode 100644
index 00000000000..2c0f6fd1f9b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr89775-1.c
@@ -0,0 +1,17 @@
+/* PR target/89775 */
+/* { dg-do run } */
+/* { dg-options "-O0 -fomit-frame-pointer" } */
+/* { dg-additional-sources "pr89775-2.c" } */
+
+register void *sp __asm ("15");
+
+__attribute__((noipa)) int
+foo (const char *a, const char *b)
+{
+ while (1)
+ {
+ char c = *a++;
+ if (c != *b++) return 0;
+ if (c == '\0') return 1;
+ }
+}
diff --git a/gcc/testsuite/gcc.target/s390/pr89775-2.c b/gcc/testsuite/gcc.target/s390/pr89775-2.c
new file mode 100644
index 00000000000..645661e5852
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/pr89775-2.c
@@ -0,0 +1,25 @@
+/* PR target/89775 */
+/* { dg-do compile } */
+
+extern int foo (const char *, const char *);
+
+__attribute__((noipa)) void
+bar (const char *p)
+{
+ static const char *x;
+ if (!x)
+ x = p;
+ else if (p != x)
+ __builtin_abort ();
+}
+
+int
+main ()
+{
+ char a[8] = "abcdefg";
+ bar (a);
+ if (foo (a, a) != 1)
+ __builtin_abort ();
+ bar (a);
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/s390/vector/vec-shift-2.c b/gcc/testsuite/gcc.target/s390/vector/vec-shift-2.c
new file mode 100644
index 00000000000..c7a1d93b817
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/vector/vec-shift-2.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+/* { dg-options "-O3 -mzarch -march=z13 --save-temps" } */
+
+/* { dg-final { scan-assembler-times "veslf" 1 } } */
+
+typedef __attribute__((vector_size(16))) signed int v4si;
+
+v4si __attribute__((noinline,noclone))
+shift_left_by_scalar (v4si in, int shift_count)
+{
+ return in << (3 + shift_count);
+}
+
+int
+main ()
+{
+ v4si a = { 1, 2, 3, 4 };
+ v4si result = shift_left_by_scalar (a, 1);
+
+ if (result[1] != 32)
+ __builtin_abort ();
+
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c b/gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c
new file mode 100644
index 00000000000..3ab0c71e3b2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { s390*-*-* } } } */
+/* { dg-options "-O3 -mzarch -march=z13 -mzvector -fno-asynchronous-unwind-tables" } */
+
+#include <vecintrin.h>
+
+vector unsigned char test(void)
+{
+ vector unsigned char a = { 0 };
+ return __builtin_s390_vec_addc_u128 (a, a);
+}
diff --git a/gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-1.c b/gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-1.c
new file mode 100644
index 00000000000..bf9cc2824e7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-1.c
@@ -0,0 +1,45 @@
+/* { dg-do compile { target { s390*-*-* } } } */
+/* { dg-options "-O3 -mzarch -march=z14 -mzvector" } */
+
+#include <vecintrin.h>
+
+vector float
+foo (float *a)
+{
+ return vec_xl (0, a);
+}
+
+vector float
+bar (const float *a)
+{
+ return vec_xl (0, a);
+}
+
+void
+baz (float *f, vector float a)
+{
+ vec_xst (a, 0, f);
+}
+
+vector float
+foo2 (float *a)
+{
+ return vec_xlw4 (0, a);
+}
+
+vector float
+bar2 (const float *a)
+{
+ return vec_xlw4 (0, a);
+}
+
+void
+baz2 (float *f, vector float a)
+{
+ vec_xstw4 (a, 0, f);
+}
+
+/* Make sure no alignment hints are generated. */
+
+/* { dg-final { scan-assembler-not "vl.*,3" } } */
+/* { dg-final { scan-assembler-not "vst.*,3" } } */
diff --git a/gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-2.c b/gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-2.c
new file mode 100644
index 00000000000..fe69fd8a680
--- /dev/null
+++ b/gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-2.c
@@ -0,0 +1,48 @@
+/* { dg-do compile { target { s390*-*-* } } } */
+/* { dg-options "-O3 -mzarch -march=z14 -mzvector" } */
+
+#include <vecintrin.h>
+
+typedef float __attribute__((aligned(8))) float_aligned;
+
+vector float
+foo (float_aligned *a)
+{
+ return vec_xl (0, a);
+}
+
+vector float
+bar (const float_aligned *a)
+{
+ return vec_xl (0, a);
+}
+
+void
+baz (float_aligned *f, vector float a)
+{
+ vec_xst (a, 0, f);
+}
+
+vector float
+foo2 (float_aligned *a)
+{
+ return vec_xlw4 (0, a);
+}
+
+vector float
+bar2 (const float_aligned *a)
+{
+ return vec_xlw4 (0, a);
+}
+
+void
+baz2 (float_aligned *f, vector float a)
+{
+ vec_xstw4 (a, 0, f);
+}
+
+/* Make sure alignment hints are generated if the source or target
+ operand is properly aligned. */
+
+/* { dg-final { scan-assembler-times "vl\t%v\[0-9\]*,0\\(%r2\\),3" 4 } } */
+/* { dg-final { scan-assembler-times "vst\t%v\[0-9\]*,0\\(%r2\\),3" 2 } } */