aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/rs6000/rs6000.c
diff options
context:
space:
mode:
authorBill Schmidt <wschmidt@linux.vnet.ibm.com>2014-09-09 16:53:07 +0000
committerWilliam Schmidt <wschmidt@gcc.gnu.org>2014-09-09 16:53:07 +0000
commit65cf8039d32910001c273c983969825597f00d5b (patch)
tree3873519b76ba2ef7abf0fa9fe985713de31a460b /gcc/config/rs6000/rs6000.c
parent647d790d2f08bf28e5972644efd563057ff7634d (diff)
downloadgcc-65cf8039d32910001c273c983969825597f00d5b.zip
gcc-65cf8039d32910001c273c983969825597f00d5b.tar.gz
gcc-65cf8039d32910001c273c983969825597f00d5b.tar.bz2
rs6000.c (rtx_is_swappable_p): Add UNSPEC_VSX_CVDPSPN as an unswappable operand...
[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. From-SVN: r215088
Diffstat (limited to 'gcc/config/rs6000/rs6000.c')
-rw-r--r--gcc/config/rs6000/rs6000.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 3ed8107..dcd8c72 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;