rs6000: Support more short/char to float conversion
authorKewen Lin <linkw@linux.ibm.com>
Fri, 11 Jun 2021 07:43:40 +0000 (02:43 -0500)
committerKewen Lin <linkw@linux.ibm.com>
Fri, 11 Jun 2021 07:43:40 +0000 (02:43 -0500)
commit2f5ab546e2be8e42b00416b2e5860d04a881beab
tree79f25bdb5d52ac9094f39b98bf00d5ed464922cb
parente9d322ced1433da8e7c69243cfa941ea462d6290
rs6000: Support more short/char to float conversion

For some cases that when we load unsigned char/short values from
the appropriate unsigned char/short memories and convert them to
double/single precision floating point value, there would be
implicit conversions to int first.  It makes GCC not leverage the
P9 instructions lxsibzx/lxsihzx.  This patch is to add the related
define_insn_and_split to support this kind of scenario.

Bootstrapped/regtested on powerpc64le-linux-gnu P9 and
powerpc64-linux-gnu P8.

gcc/ChangeLog:

* config/rs6000/rs6000.md
(floatsi<SFDF:mode>2_lfiwax_<QHI:mode>_mem_zext): New
define_insn_and_split.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/p9-fpcvt-3.c: New test.
gcc/config/rs6000/rs6000.md
gcc/testsuite/gcc.target/powerpc/p9-fpcvt-3.c [new file with mode: 0644]