aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-loop-ch.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-07-27 09:38:54 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-07-27 09:38:54 +0000
commit02d3ba0e000ad83dcb76ccccd1ea9882672d71b1 (patch)
tree63d75fb9aea209c71ea9ee3b902b48fcd381c5a7 /gcc/tree-ssa-loop-ch.c
parent7d25ac209de8262e39e5551585da5094a4c5c317 (diff)
downloadgcc-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