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
This commit is contained in:
William Schmidt 2019-10-01 14:27:44 +00:00
parent a1bfb5b16b
commit 2a2592a10c
4 changed files with 35 additions and 0 deletions

View File

@ -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

View File

@ -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;
}
}

View File

@ -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.

View File

@ -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;
}