diff options
author | wschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-09-09 16:53:07 +0000 |
---|---|---|
committer | wschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-09-09 16:53:07 +0000 |
commit | cf1db73340ba1bb2d9181ede0abf82739e9f85fe (patch) | |
tree | 3873519b76ba2ef7abf0fa9fe985713de31a460b /gcc | |
parent | ed3e6e5d36d1fc31c6782e739960deac01850c32 (diff) | |
download | gcc-cf1db73340ba1bb2d9181ede0abf82739e9f85fe.tar.gz |
[gcc]
2014-09-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* config/rs6000/rs6000.c (rtx_is_swappable_p): Add
UNSPEC_VSX_CVDPSPN as an unswappable operand, and add commentary
on how to make it legal in future.
[gcc/testsuite]
2014-09-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* gcc.target/powerpc/swaps-p8-15.c: Remove scan-assembler-not for
xxpermdi and add commentary about adding it back later; remove
unused typedef.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215088 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c | 7 |
4 files changed, 25 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8f7c7e3d1b0..aa75e0500f8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-09-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + * config/rs6000/rs6000.c (rtx_is_swappable_p): Add + UNSPEC_VSX_CVDPSPN as an unswappable operand, and add commentary + on how to make it legal in future. + 2014-09-09 David Malcolm <dmalcolm@redhat.com> * caller-save.c (rtx saveinsn): Strengthen this variable from rtx diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 3ed8107dcec..dcd8c7255b8 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -33761,8 +33761,6 @@ rtx_is_swappable_p (rtx op, unsigned int *special) case UNSPEC_VSUMSWS: case UNSPEC_VSUMSWS_DIRECT: case UNSPEC_VSX_CONCAT: - case UNSPEC_VSX_CVSPDP: - case UNSPEC_VSX_CVSPDPN: case UNSPEC_VSX_SET: case UNSPEC_VSX_SLDWI: case UNSPEC_VUNPACK_HI_SIGN: @@ -33775,6 +33773,15 @@ rtx_is_swappable_p (rtx op, unsigned int *special) case UNSPEC_VUPKLPX: case UNSPEC_VUPKLS_V4SF: case UNSPEC_VUPKLU_V4SF: + /* The following could be handled as an idiom with XXSPLTW. + These place a scalar in BE element zero, but the XXSPLTW + will currently expect it in BE element 2 in a swapped + region. When one of these feeds an XXSPLTW with no other + defs/uses either way, we can avoid the lane change for + XXSPLTW and things will be correct. TBD. */ + case UNSPEC_VSX_CVDPSPN: + case UNSPEC_VSX_CVSPDP: + case UNSPEC_VSX_CVSPDPN: return 0; case UNSPEC_VSPLT_DIRECT: *special = SH_SPLAT; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cb5d81a911a..448a7ef2281 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-09-09 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + * gcc.target/powerpc/swaps-p8-15.c: Remove scan-assembler-not for + xxpermdi and add commentary about adding it back later; remove + unused typedef. + 2014-09-09 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * gcc.target/arm/vect-lceilf_1.c: Make input and output arrays global diff --git a/gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c b/gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c index 3c9296c3783..e7191b35069 100644 --- a/gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c +++ b/gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c @@ -3,13 +3,14 @@ /* { dg-final { scan-assembler "lxvd2x" } } */ /* { dg-final { scan-assembler "stxvd2x" } } */ /* { dg-final { scan-assembler "xxspltw" } } */ -/* { dg-final { scan-assembler-not "xxpermdi" } } */ +/* Currently the analyze_swaps phase cannot optimize this loop because + of the presence of an UNSPEC_VSX_CVDPSPN. At such time as this is + handled, we need to add a 'scan-assembler-not "xxpermdi"' directive to + this test. */ #include <altivec.h> void abort(); -typedef struct xx {vector double l; vector double h;} xx; - #define N 4096 #define M 10000000 vector float ca[N][4] = {0}; |