diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-07-27 09:38:54 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-07-27 09:38:54 +0000 |
commit | 02d3ba0e000ad83dcb76ccccd1ea9882672d71b1 (patch) | |
tree | 63d75fb9aea209c71ea9ee3b902b48fcd381c5a7 /gcc/tree-ssa-loop-ch.c | |
parent | 7d25ac209de8262e39e5551585da5094a4c5c317 (diff) | |
download | gcc-02d3ba0e000ad83dcb76ccccd1ea9882672d71b1.zip gcc-02d3ba0e000ad83dcb76ccccd1ea9882672d71b1.tar.gz gcc-02d3ba0e000ad83dcb76ccccd1ea9882672d71b1.tar.bz2 |
[rs6000] Avoid rotates of floating-point modes
The little-endian VSX code uses rotates to swap the two 64-bit halves of
128-bit scalar modes. This is fine for TImode and V1TImode, but it
isn't really valid to use RTL rotates on floating-point modes like
KFmode and TFmode, and doing that triggered an assert added by the
SVE series. This patch uses bit-casts to V1TImode instead.
2017-07-27 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
* config/rs6000/rs6000-protos.h (rs6000_emit_le_vsx_permute): Declare.
* config/rs6000/rs6000.c (rs6000_gen_le_vsx_permute): Replace with...
(rs6000_emit_le_vsx_permute): ...this. Take the destination as input.
Emit instructions rather than returning an expression. Handle TFmode
and KFmode by casting to TImode.
(rs6000_emit_le_vsx_load): Update to use rs6000_emit_le_vsx_permute.
(rs6000_emit_le_vsx_store): Likewise.
* config/rs6000/vsx.md (VSX_TI): New iterator.
(*vsx_le_permute_<mode>): Use it instead of VSX_LE_128.
(*vsx_le_undo_permute_<mode>): Likewise.
(*vsx_le_perm_load_<mode>): Use rs6000_emit_le_vsx_permute to
emit the split sequence.
(*vsx_le_perm_store_<mode>): Likewise.
From-SVN: r250615
Diffstat (limited to 'gcc/tree-ssa-loop-ch.c')
0 files changed, 0 insertions, 0 deletions