aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.target/powerpc')
-rw-r--r--gcc/testsuite/gcc.target/powerpc/crypto-builtin-1-runnable.c109
-rw-r--r--gcc/testsuite/gcc.target/powerpc/extend-divide-1.c14
-rw-r--r--gcc/testsuite/gcc.target/powerpc/extend-divide-2.c14
-rw-r--r--gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c1
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr79799-2.c2
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr83660.C14
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr83969.c14
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr84878.c18
8 files changed, 157 insertions, 29 deletions
diff --git a/gcc/testsuite/gcc.target/powerpc/crypto-builtin-1-runnable.c b/gcc/testsuite/gcc.target/powerpc/crypto-builtin-1-runnable.c
new file mode 100644
index 00000000000..25c27bf9a37
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/crypto-builtin-1-runnable.c
@@ -0,0 +1,109 @@
+/* { dg-do run { target { powerpc*-*-* && p8vector_hw } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power8" } } */
+/* { dg-options "-mcpu=power8 -O2 " } */
+
+/* Make sure the test case compiled with -O2 generates the same expected
+ results. The expected results were generated with -O0. */
+
+#include <altivec.h>
+#define TRUE 1
+#define FALSE 0
+
+#define DEBUG 1
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+void abort (void);
+
+typedef vector unsigned long long crypto_t;
+typedef vector unsigned long long v2di_t;
+typedef vector unsigned int v4si_t;
+typedef vector unsigned short v8hi_t;
+typedef vector unsigned char v16qi_t;
+
+v16qi_t crypto6a (v16qi_t a, v16qi_t b, v16qi_t c)
+{
+ return __builtin_crypto_vpermxor (a, b, c);
+}
+
+v8hi_t crypto6b (v8hi_t a, v8hi_t b, v8hi_t c)
+{
+ return __builtin_crypto_vpermxor (a, b, c);
+}
+
+v4si_t crypto6c (v4si_t a, v4si_t b, v4si_t c)
+{
+ return __builtin_crypto_vpermxor (a, b, c);
+}
+
+v2di_t crypto6d (v2di_t a, v2di_t b, v2di_t c)
+{
+ return __builtin_crypto_vpermxor (a, b, c);
+}
+
+int main()
+{
+ int i;
+ v16qi_t expected_v16qi, result_v16qi;
+ v8hi_t expected_v8hi, result_v8hi;
+ v4si_t expected_v4si, result_v4si;
+ v2di_t expected_v2di, result_v2di;
+ v16qi_t v16qi_arg_a, v16qi_arg_b, v16qi_arg_c;
+ v8hi_t v8hi_arg_a, v8hi_arg_b, v8hi_arg_c;
+ v4si_t v4si_arg_a, v4si_arg_b, v4si_arg_c;
+ v2di_t v2di_arg_a, v2di_arg_b, v2di_arg_c;
+
+ v16qi_arg_a = (vector unsigned char){ 7, 6, 5, 4, 3, 2, 1, 0,
+ 1, 2, 3, 4, 5, 6, 7, 8 };
+ v16qi_arg_b = (vector unsigned char){ 1, 2, 3, 4, 5, 6, 7, 8,
+ 7, 6, 5, 4, 3, 2, 1, 0 };
+ v16qi_arg_c = (vector unsigned char){ 7, 2, 5, 4, 3, 6, 1, 8,
+ 1, 6, 3, 4, 5, 2, 7, 0 };
+ expected_v16qi = (vector unsigned char){ 15, 10, 13, 12, 11, 14, 9, 0,
+ 9, 14, 11, 12, 13, 10, 15, 8 };
+
+ result_v16qi = crypto6a (v16qi_arg_a, v16qi_arg_b, v16qi_arg_c);
+
+ for (i = 0; i < 16; i++)
+ if (expected_v16qi[i] != result_v16qi[i])
+ printf("crypto6a: result_v16qi[%d] = %d, expected = %d\n",
+ i, result_v16qi[i], expected_v16qi[i]);
+
+ v8hi_arg_a = (vector unsigned short int){ 7, 6, 5, 4, 3, 2, 1, 0};
+ v8hi_arg_b = (vector unsigned short int){ 1, 2, 3, 4, 5, 6, 7, 8};
+ v8hi_arg_c = (vector unsigned short int){ 7, 2, 5, 4, 3, 6, 1, 8};
+ expected_v8hi = (vector unsigned short int){ 5, 0, 6, 0, 7, 0, 8};
+
+ result_v8hi = crypto6b (v8hi_arg_a, v8hi_arg_b, v8hi_arg_c);
+
+ for (i = 0; i < 8; i++)
+ if (expected_v8hi[i] != result_v8hi[i])
+ printf("crypto6a: result_v8hi[%d] = %d, expected = %d\n",
+ i, result_v8hi[i], expected_v8hi[i]);
+
+ v4si_arg_a = (vector unsigned int){ 7, 6, 5, 4};
+ v4si_arg_b = (vector unsigned int){ 15, 6, 7, 8};
+ v4si_arg_c = (vector unsigned int){ 7, 14, 3, 6};
+ expected_v4si = (vector unsigned int){ 7, 0, 8, 0};
+
+ result_v4si = crypto6c (v4si_arg_a, v4si_arg_b, v4si_arg_c);
+
+ for (i = 0; i < 4; i++)
+ if (expected_v4si[i] != result_v4si[i])
+ printf("crypto6a: result_v4si[%d] = %d, expected = %d\n",
+ i, result_v4si[i], expected_v4si[i]);
+
+ v2di_arg_a = (vector unsigned long long int){ 7, 6, };
+ v2di_arg_b = (vector unsigned long long int){ 15, 6, };
+ v2di_arg_c = (vector unsigned long long int){ 7, 14};
+ expected_v2di = (vector unsigned long long int){ 6, 0};
+
+ result_v2di = crypto6d (v2di_arg_a, v2di_arg_b, v2di_arg_c);
+
+ for (i = 0; i < 2; i++)
+ if (expected_v2di[i] != result_v2di[i])
+ printf("crypto6a: result_v2di[%d] = %d, expected = %d\n",
+ i, result_v2di[i], expected_v2di[i]);
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c b/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
index 365dead9fac..aaf9b40fc24 100644
--- a/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
@@ -5,9 +5,7 @@
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
/* { dg-options "-mcpu=power7 -O2" } */
/* { dg-final { scan-assembler-times "divwe " 1 } } */
-/* { dg-final { scan-assembler-times "divweo " 1 } } */
/* { dg-final { scan-assembler-times "divweu " 1 } } */
-/* { dg-final { scan-assembler-times "divweuo " 1 } } */
/* { dg-final { scan-assembler-not "bl __builtin" } } */
int
@@ -16,20 +14,8 @@ div_we (int a, int b)
return __builtin_divwe (a, b);
}
-int
-div_weo (int a, int b)
-{
- return __builtin_divweo (a, b);
-}
-
unsigned int
div_weu (unsigned int a, unsigned int b)
{
return __builtin_divweu (a, b);
}
-
-unsigned int
-div_weuo (unsigned int a, unsigned int b)
-{
- return __builtin_divweuo (a, b);
-}
diff --git a/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c b/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
index 829cd40cae8..92e494aa136 100644
--- a/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
@@ -5,9 +5,7 @@
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
/* { dg-options "-mcpu=power7 -O2" } */
/* { dg-final { scan-assembler-times "divde " 1 } } */
-/* { dg-final { scan-assembler-times "divdeo " 1 } } */
/* { dg-final { scan-assembler-times "divdeu " 1 } } */
-/* { dg-final { scan-assembler-times "divdeuo " 1 } } */
/* { dg-final { scan-assembler-not "bl __builtin" } } */
long
@@ -16,20 +14,8 @@ div_de (long a, long b)
return __builtin_divde (a, b);
}
-long
-div_deo (long a, long b)
-{
- return __builtin_divdeo (a, b);
-}
-
unsigned long
div_deu (unsigned long a, unsigned long b)
{
return __builtin_divdeu (a, b);
}
-
-unsigned long
-div_deuo (unsigned long a, unsigned long b)
-{
- return __builtin_divdeuo (a, b);
-}
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c b/gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c
index 570c81f7e33..ee77456ca4f 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c
@@ -5,6 +5,7 @@
/* { dg-final { scan-assembler-not "\\.section\[ \t\]\\.sdata2," } } */
/* { dg-final { scan-assembler "sdat@sdarel\\(13\\)" } } */
/* { dg-final { scan-assembler "sdat2@sdarel\\(13\\)" } } */
+/* { dg-skip-if "" { *-*-* } { "-mno-readonly-in-sdata" } { "" } } */
int sdat = 2;
diff --git a/gcc/testsuite/gcc.target/powerpc/pr79799-2.c b/gcc/testsuite/gcc.target/powerpc/pr79799-2.c
index 793e3b9b66c..b1a0b09cbf7 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr79799-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr79799-2.c
@@ -8,7 +8,7 @@
/* Optimize x = vec_insert (vec_extract (v2, N), v1, M) for SFmode if N is the default
scalar position. */
-#if __ORDER_LITTLE_ENDIAN__
+#if __LITTLE_ENDIAN__
#define ELE 2
#else
#define ELE 1
diff --git a/gcc/testsuite/gcc.target/powerpc/pr83660.C b/gcc/testsuite/gcc.target/powerpc/pr83660.C
new file mode 100644
index 00000000000..60adcdacb4b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr83660.C
@@ -0,0 +1,14 @@
+/* PR target/83660 */
+/* { dg-do compile } */
+/* { dg-options "-mcpu=power7" } */
+
+#include <altivec.h>
+
+typedef __vector unsigned int uvec32_t __attribute__((__aligned__(16)));
+
+unsigned get_word(uvec32_t v)
+{
+ return ({const unsigned _B1 = 32;
+ vec_extract((uvec32_t)v, 2);});
+}
+
diff --git a/gcc/testsuite/gcc.target/powerpc/pr83969.c b/gcc/testsuite/gcc.target/powerpc/pr83969.c
new file mode 100644
index 00000000000..fe61594be16
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr83969.c
@@ -0,0 +1,14 @@
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=G5" } } */
+/* { dg-options "-O1 -mcpu=G5 -fno-split-wide-types -ftree-loop-vectorize" } */
+
+long long int
+n7 (int po, long long int r4)
+{
+ while (po < 1)
+ {
+ r4 |= 1;
+ ++po;
+ }
+ return r4;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr84878.c b/gcc/testsuite/gcc.target/powerpc/pr84878.c
new file mode 100644
index 00000000000..f96d3803d06
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr84878.c
@@ -0,0 +1,18 @@
+/* PR rtl-optimization/84878 */
+/* { dg-do compile { target { powerpc*-*-* } } } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-O2 -maltivec -mno-vsx -fmodulo-sched -ftree-vectorize -funroll-loops -fassociative-math -fno-signed-zeros -fno-trapping-math" } */
+
+int ek;
+float zu;
+
+int
+k5 (int ks)
+{
+ while (ek < 1)
+ {
+ ks += (int)(0x1000000 + zu + !ek);
+ ++ek;
+ }
+ return ks;
+}