aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Schmidt <wschmidt@gcc.gnu.org>2019-10-01 14:27:44 +0000
committerWilliam Schmidt <wschmidt@gcc.gnu.org>2019-10-01 14:27:44 +0000
commit2a2592a10c13c53fc1fbac0bfe9e661201dab53f (patch)
tree8ee246f7c9beeccd64f43fc54ffed031269263ce
parenta1bfb5b16b4b55ae875d346a7b462a18316ad959 (diff)
downloadgcc-2a2592a10c13c53fc1fbac0bfe9e661201dab53f.zip
gcc-2a2592a10c13c53fc1fbac0bfe9e661201dab53f.tar.gz
gcc-2a2592a10c13c53fc1fbac0bfe9e661201dab53f.tar.bz2
rs6000-p8swap.c (rtx_is_swappable_p): Don't swap vpmsumd.
[gcc] 2019-10-01 Bill Schmidt <wschmidt@linux.ibm.com> * config/rs6000/rs6000-p8swap.c (rtx_is_swappable_p): Don't swap vpmsumd. [gcc/testsuite] 2019-10-01 Bill Schmidt <wschmdit@linux.ibm.com> * gcc.target/powerpc/pr91275.c: New. From-SVN: r276410
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000-p8swap.c5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/powerpc/pr91275.c21
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c32bf84..b671ae6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2019-10-01 Bill Schmidt <wschmidt@linux.ibm.com>
+
+ * config/rs6000/rs6000-p8swap.c (rtx_is_swappable_p): Don't swap
+ vpmsumd.
+
2019-10-01 Ilya Leoshkevich <iii@linux.ibm.com>
PR target/77918
diff --git a/gcc/config/rs6000/rs6000-p8swap.c b/gcc/config/rs6000/rs6000-p8swap.c
index c3b9831..d30e5de 100644
--- a/gcc/config/rs6000/rs6000-p8swap.c
+++ b/gcc/config/rs6000/rs6000-p8swap.c
@@ -791,6 +791,11 @@ rtx_is_swappable_p (rtx op, unsigned int *special)
case UNSPEC_REDUC_PLUS:
case UNSPEC_REDUC:
return 1;
+ case UNSPEC_VPMSUM:
+ /* vpmsumd is not swappable, but vpmsum[bhw] are. */
+ if (GET_MODE (op) == V2DImode)
+ return 0;
+ break;
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 4f876e5..995e1cb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-10-01 Bill Schmidt <wschmdit@linux.ibm.com>
+
+ * gcc.target/powerpc/pr91275.c: New.
+
2019-10-01 Alexandre Oliva <oliva@adacore.com>
* gcc.dg/torture/pr41094.c: Introduce intermediate variable.
diff --git a/gcc/testsuite/gcc.target/powerpc/pr91275.c b/gcc/testsuite/gcc.target/powerpc/pr91275.c
new file mode 100644
index 0000000..b23d75b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr91275.c
@@ -0,0 +1,21 @@
+/* Test that we generate vpmsumd correctly without a swap error. */
+
+/* { dg-do run { target { p8vector_hw } } } */
+/* { dg-options "-O2 -std=gnu11" } */
+
+#include <altivec.h>
+
+int main() {
+
+ const unsigned long long r0l = 0x8e7dfceac070e3a0;
+ vector unsigned long long r0 = (vector unsigned long long) {r0l, 0}, v;
+ const vector unsigned long long pd
+ = (vector unsigned long) {0xc2LLU << 56, 0};
+
+ v = __builtin_crypto_vpmsumd ((vector unsigned long long) {r0[0], 0}, pd);
+
+ if (v[0] != 0x4000000000000000 || v[1] != 0x65bd7ab605a4a8ff)
+ __builtin_abort ();
+
+ return 0;
+}