diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2020-09-30 11:52:06 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2020-09-30 11:52:06 +0100 |
commit | d4f9e81976066e1d67c8dd5ddaf24ebe3b0695ed (patch) | |
tree | 8707fbaee9b6f6dba8166470df3b42c3aa1e01b5 /gcc/fortran/f95-lang.c | |
parent | f63023fafbbc13545fef67e6b32a55b48a945fcf (diff) | |
download | gcc-d4f9e81976066e1d67c8dd5ddaf24ebe3b0695ed.zip gcc-d4f9e81976066e1d67c8dd5ddaf24ebe3b0695ed.tar.gz gcc-d4f9e81976066e1d67c8dd5ddaf24ebe3b0695ed.tar.bz2 |
aarch64: Tweak movti and movtf patterns
movti lacked an way of zeroing an FPR, meaning that we'd do:
mov x0, 0
mov x1, 0
fmov d0, x0
fmov v0.d[1], x1
instead of just:
movi v0.2d, #0
movtf had the opposite problem for GPRs: we'd generate:
movi v0.2d, #0
fmov x0, d0
fmov x1, v0.d[1]
instead of just:
mov x0, 0
mov x1, 0
Also, there was an unnecessary earlyclobber on the GPR<-GPR movtf
alternative (but not the movti one). The splitter handles overlap
correctly.
The TF splitter used aarch64_reg_or_imm, but the _imm part only
accepts integer constants, not floating-point ones. The patch
changes it to nonmemory_operand instead.
gcc/
* config/aarch64/aarch64.c (aarch64_split_128bit_move_p): Add a
function comment. Tighten check for FP moves.
* config/aarch64/aarch64.md (*movti_aarch64): Add a w<-Z alternative.
(*movtf_aarch64): Handle r<-Y like r<-r. Remove unnecessary
earlyclobber. Change splitter predicate from aarch64_reg_or_imm
to nonmemory_operand.
gcc/testsuite/
* gcc.target/aarch64/movtf_1.c: New test.
* gcc.target/aarch64/movti_1.c: Likewise.
Diffstat (limited to 'gcc/fortran/f95-lang.c')
0 files changed, 0 insertions, 0 deletions