]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: r6000.c (rtx_is_swappable_p): Add case UNSPEC_VPERMXOR.
authorCarl Love <cel@us.ibm.com>
Tue, 27 Mar 2018 15:04:27 +0000 (15:04 +0000)
committerCarl Love <carll@gcc.gnu.org>
Tue, 27 Mar 2018 15:04:27 +0000 (15:04 +0000)
gcc/ChangeLog:

2018-03-27  Carl Love  <cel@us.ibm.com>

Backport from mainline
2018-03-14  Carl Love  <cel@us.ibm.com>

* config/rs6000/r6000.c (rtx_is_swappable_p): Add case UNSPEC_VPERMXOR.

gcc/testsuite/ChangeLog:

2018-03-27  Carl Love  <cel@us.ibm.com>

* gcc.target/powerpc/crypto-builtin-1-runnable.c: New test file.

From-SVN: r258887

gcc/ChangeLog
gcc/config/rs6000/rs6000.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/crypto-builtin-1-runnable.c [new file with mode: 0644]

index 0cbc803270e9e7ab585a11a8ab3e600adc355e35..556080abc49da4c5183a40efdedef8ab571b2347 100644 (file)
@@ -1,3 +1,10 @@
+2018-03-27  Carl Love  <cel@us.ibm.com>
+
+       Backport from mainline
+       2018-03-14  Carl Love  <cel@us.ibm.com>
+
+       * config/rs6000/r6000.c (rtx_is_swappable_p): Add case UNSPEC_VPERMXOR.
+
 2018-03-27  Sudakshina Das  <sudi.das@arm.com>
 
        Backport from mainline:
index f8d9cadefd33a9080a1a6ea4fa69cf5d65d61b7d..d1485e337d3ff315067fc7fa4ca401a273243fc1 100644 (file)
@@ -38707,6 +38707,7 @@ rtx_is_swappable_p (rtx op, unsigned int *special)
          case UNSPEC_VPERM_UNS:
          case UNSPEC_VPERMHI:
          case UNSPEC_VPERMSI:
+         case UNSPEC_VPERMXOR:
          case UNSPEC_VPKPX:
          case UNSPEC_VSLDOI:
          case UNSPEC_VSLO:
index e958e2841c4afd9bb88737b778eab793f50c7105..010a6e9504981e8eab6c8521cb221e4cf3012994 100644 (file)
@@ -1,3 +1,7 @@
+2018-03-27  Carl Love  <cel@us.ibm.com>
+
+       * gcc.target/powerpc/crypto-builtin-1-runnable.c: New test file.
+
 2018-03-27  Sudakshina Das  <sudi.das@arm.com>
 
        Backport from mainline:
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 (file)
index 0000000..912cd45
--- /dev/null
@@ -0,0 +1,110 @@
+/* { dg-do run { target { powerpc*-*-* } } } */
+/* { dg-require-effective-target powerpc_p8vector_ok } */
+/* { 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]);
+}