[AArch64] Add support for 16-bit FMOV immediates
commiteb46ebeea058d73579e74cdeb095bfd6e0289131
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 2 Aug 2018 10:48:42 +0000 (2 10:48 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 2 Aug 2018 10:48:42 +0000 (2 10:48 +0000)
treefe9c8181de8fc36ce8b02190fa468fdbf4ba4939
parent055e51260210c11d5d718b062d78a77ddeb97f01
[AArch64] Add support for 16-bit FMOV immediates

aarch64_float_const_representable_p was still returning false for
HFmode, so we wouldn't use 16-bit FMOV immediate.  E.g. before the
patch:

    __fp16 foo (void) { return 0x1.1p-3; }

gave:

       mov     w0, 12352
       fmov    h0, w0

with -march=armv8.2-a+fp16, whereas now it gives:

       fmov    h0, 1.328125e-1

2018-08-02  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* config/aarch64/aarch64.c (aarch64_float_const_representable_p):
Allow HFmode constants if TARGET_FP_F16INST.

gcc/testsuite/
* gcc.target/aarch64/f16_mov_immediate_1.c: Expect fmov immediate
to be used.
* gcc.target/aarch64/f16_mov_immediate_2.c: Likewise.
* gcc.target/aarch64/f16_mov_immediate_3.c: Force +nofp16.
* gcc.target/aarch64/sve/single_1.c: Except fmov immediate to be used
for .h.
* gcc.target/aarch64/sve/single_2.c: Likewise.
* gcc.target/aarch64/sve/single_3.c: Likewise.
* gcc.target/aarch64/sve/single_4.c: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@263250 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_1.c
gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_2.c
gcc/testsuite/gcc.target/aarch64/f16_mov_immediate_3.c
gcc/testsuite/gcc.target/aarch64/sve/single_1.c
gcc/testsuite/gcc.target/aarch64/sve/single_2.c
gcc/testsuite/gcc.target/aarch64/sve/single_3.c
gcc/testsuite/gcc.target/aarch64/sve/single_4.c