]> git.ipfire.org Git - thirdparty/gcc.git/commit
AArch64: Fix copysign patterns
authorWilco Dijkstra <wilco.dijkstra@arm.com>
Tue, 15 Oct 2024 16:22:23 +0000 (16:22 +0000)
committerWilco Dijkstra <wilco.dijkstra@arm.com>
Wed, 23 Oct 2024 13:20:01 +0000 (13:20 +0000)
commit7c7c895c2f34d2a5c0cd2139c5e76c13c6c030c9
tree61d52891bf10fa7a9f2d693fdc8a8aabd65b1d4f
parent2b666dc4d1c96e0ea3597fe7e502a70198a66c03
AArch64: Fix copysign patterns

The current copysign pattern has a mismatch in the predicates and constraints -
operand[2] is a register_operand but also has an alternative X which allows any
operand.  Since it is a floating point operation, having an integer alternative
makes no sense.  Change the expander to always use vector immediates which
results in better code and sharing of immediates between copysign and xorsign.

gcc/ChangeLog:

* config/aarch64/aarch64.md (copysign<GPF:mode>3): Widen immediate to
vector.
(copysign<GPF:mode>3_insn): Use VQ_INT_EQUIV in operand 3.
* config/aarch64/iterators.md (VQ_INT_EQUIV): New iterator.
(vq_int_equiv): Likewise.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/copysign_3.c: New test.
* gcc.target/aarch64/copysign_4.c: New test.
* gcc.target/aarch64/fneg-abs_2.c: Fixup test.
* gcc.target/aarch64/sve/fneg-abs_2.c: Likewise.
gcc/config/aarch64/aarch64.md
gcc/config/aarch64/iterators.md
gcc/testsuite/gcc.target/aarch64/copysign_3.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/copysign_4.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/fneg-abs_2.c
gcc/testsuite/gcc.target/aarch64/sve/fneg-abs_2.c