summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorwschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4>2014-09-09 16:53:07 +0000
committerwschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4>2014-09-09 16:53:07 +0000
commitcf1db73340ba1bb2d9181ede0abf82739e9f85fe (patch)
tree3873519b76ba2ef7abf0fa9fe985713de31a460b /gcc
parented3e6e5d36d1fc31c6782e739960deac01850c32 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c11
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.target/powerpc/swaps-p8-15.c7
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};