diff options
Diffstat (limited to 'gcc/testsuite/gcc.target/s390')
-rw-r--r-- | gcc/testsuite/gcc.target/s390/pr89775-1.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/s390/pr89775-2.c | 25 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/s390/vector/vec-shift-2.c | 24 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/s390/zvector/vec-addc-u128.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-1.c | 45 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/s390/zvector/xl-xst-align-2.c | 48 |
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 } } */ |