]> git.ipfire.org Git - thirdparty/gcc.git/commit
aarch64: Add support for unpacked SVE FP binary arithmetic
authorSpencer Abson <spencer.abson@arm.com>
Tue, 8 Jul 2025 10:51:33 +0000 (10:51 +0000)
committerSpencer Abson <spencer.abson@arm.com>
Thu, 24 Jul 2025 09:43:18 +0000 (09:43 +0000)
commit455257a4fff139268584d1a40440dee978659d0e
tree8ccaa1c4962117c39b5ec496332249c40fa8e557
parent1409e64e870a32eedce096d4e800e7a4a2f7ab79
aarch64: Add support for unpacked SVE FP binary arithmetic

This patch extends the expanders for unpredicated smax, smin, add, sub,
mul, min, and max, so that they support partial SVE FP modes.

The relevant insn and splitting patterns are also updated.

gcc/ChangeLog:

* config/aarch64/aarch64-sve.md (<optab><mode>3): Extend from
SVE_FULL_F to SVE_F, use aarch64_sve_fp_pred.
(*post_ra_<sve_fp_op><mode>3): Extend from SVE_FULL_F to SVE_F.
(@aarch64_pred_<optab><mode>): Extend from SVE_FULL_F to SVE_F,
use aarch64_predicate_operand (ADD/SUB/MUL/MAX/MIN).
(split for using unpredicated insns): Move SVE_RELAXED_GP into
the pattern, rather than testing for it in the condition.
* config/aarch64/aarch64-sve2.md (@aarch64_pred_<optab><mode>):
Extend from VNx8BF_ONLY to SVE_BF.

gcc/testsuite/ChangeLog:

* g++.target/aarch64/sve/unpacked_binary_bf16_1.C: New test.
* g++.target/aarch64/sve/unpacked_binary_bf16_2.C: Likewise.
* gcc.target/aarch64/sve/unpacked_builtin_fmax_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_builtin_fmax_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_builtin_fmin_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_builtin_fmin_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fadd_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fadd_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fmaxnm_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fmaxnm_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fminnm_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fminnm_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fmul_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fmul_2.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fsubr_1.c: Likewise.
* gcc.target/aarch64/sve/unpacked_fsubr_2.c: Likewise.
18 files changed:
gcc/config/aarch64/aarch64-sve.md
gcc/config/aarch64/aarch64-sve2.md
gcc/testsuite/g++.target/aarch64/sve/unpacked_binary_bf16_1.C [new file with mode: 0644]
gcc/testsuite/g++.target/aarch64/sve/unpacked_binary_bf16_2.C [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_builtin_fmax_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_builtin_fmax_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_builtin_fmin_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_builtin_fmin_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fadd_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fadd_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fmaxnm_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fmaxnm_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fminnm_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fminnm_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fmul_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fmul_2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fsubr_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/sve/unpacked_fsubr_2.c [new file with mode: 0644]