Spencer Abson <spencer.ab...@arm.com> writes: > On Fri, Jun 06, 2025 at 12:18:15PM +0100, Richard Sandiford wrote: >> Spencer Abson <spencer.ab...@arm.com> writes: >> > 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/split patterns have also been updated. >> > >> > gcc/ChangeLog: >> > >> > * config/aarch64/aarch64-sve.md (<optab><mode>3): Extend from >> > SVE_FULL_F to SVE_F, and use aarch64_sve_fp_pred. >> > (@aarch64_pred_<optab><mode>): Extend from SVE_FULL_F to SVE_F, >> > use aarch64_predicate_operand. (ADD/SUB/MUL/MAX/MIN). >> > * config/aarch64/aarch64-sve2.md: Likewise, for BF16 operations. >> > >> > 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. >> >> OK, thanks. >> >> > --- >> > gcc/config/aarch64/aarch64-sve.md | 70 +++++++++---------- >> > gcc/config/aarch64/aarch64-sve2.md | 10 +-- >> > .../aarch64/sve/unpacked_binary_bf16_1.C | 35 ++++++++++ >> > .../aarch64/sve/unpacked_binary_bf16_2.C | 15 ++++ >> > .../aarch64/sve/unpacked_builtin_fmax_1.c | 40 +++++++++++ >> > .../aarch64/sve/unpacked_builtin_fmax_2.c | 16 +++++ >> > .../aarch64/sve/unpacked_builtin_fmin_1.c | 40 +++++++++++ >> > .../aarch64/sve/unpacked_builtin_fmin_2.c | 16 +++++ >> > .../gcc.target/aarch64/sve/unpacked_fadd_1.c | 48 +++++++++++++ >> > .../gcc.target/aarch64/sve/unpacked_fadd_2.c | 22 ++++++ >> > .../aarch64/sve/unpacked_fmaxnm_1.c | 41 +++++++++++ >> > .../aarch64/sve/unpacked_fmaxnm_2.c | 16 +++++ >> > .../aarch64/sve/unpacked_fminnm_1.c | 42 +++++++++++ >> > .../aarch64/sve/unpacked_fminnm_2.c | 16 +++++ >> > .../gcc.target/aarch64/sve/unpacked_fmul_1.c | 39 +++++++++++ >> > .../gcc.target/aarch64/sve/unpacked_fmul_2.c | 14 ++++ >> > .../gcc.target/aarch64/sve/unpacked_fsubr_1.c | 42 +++++++++++ >> > .../gcc.target/aarch64/sve/unpacked_fsubr_2.c | 16 +++++ >> > 18 files changed, 498 insertions(+), 40 deletions(-) >> > create mode 100644 >> > gcc/testsuite/g++.target/aarch64/sve/unpacked_binary_bf16_1.C >> > create mode 100644 >> > gcc/testsuite/g++.target/aarch64/sve/unpacked_binary_bf16_2.C >> > create mode 100644 >> > gcc/testsuite/gcc.target/aarch64/sve/unpacked_builtin_fmax_1.c >> > create mode 100644 >> > gcc/testsuite/gcc.target/aarch64/sve/unpacked_builtin_fmax_2.c >> > create mode 100644 >> > gcc/testsuite/gcc.target/aarch64/sve/unpacked_builtin_fmin_1.c >> > create mode 100644 >> > gcc/testsuite/gcc.target/aarch64/sve/unpacked_builtin_fmin_2.c >> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fadd_1.c >> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fadd_2.c >> > create mode 100644 >> > gcc/testsuite/gcc.target/aarch64/sve/unpacked_fmaxnm_1.c >> > create mode 100644 >> > gcc/testsuite/gcc.target/aarch64/sve/unpacked_fmaxnm_2.c >> > create mode 100644 >> > gcc/testsuite/gcc.target/aarch64/sve/unpacked_fminnm_1.c >> > create mode 100644 >> > gcc/testsuite/gcc.target/aarch64/sve/unpacked_fminnm_2.c >> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fmul_1.c >> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fmul_2.c >> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fsubr_1.c >> > create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fsubr_2.c >> > >> > diff --git a/gcc/config/aarch64/aarch64-sve.md >> > b/gcc/config/aarch64/aarch64-sve.md >> > index 76de511420f..cdad900d9cf 100644 >> > --- a/gcc/config/aarch64/aarch64-sve.md >> > +++ b/gcc/config/aarch64/aarch64-sve.md >> > @@ -5473,27 +5473,27 @@ >> > ;; Split a predicated instruction whose predicate is unused into an >> > ;; unpredicated instruction. >> > (define_split >> > - [(set (match_operand:SVE_FULL_F_B16B16 0 "register_operand") >> > - (unspec:SVE_FULL_F_B16B16 >> > + [(set (match_operand:SVE_F_B16B16 0 "register_operand") >> > + (unspec:SVE_F_B16B16 >> > [(match_operand:<VPRED> 1 "register_operand") >> > (match_operand:SI 4 "aarch64_sve_gp_strictness") >> > - (match_operand:SVE_FULL_F_B16B16 2 "register_operand") >> > - (match_operand:SVE_FULL_F_B16B16 3 "register_operand")] >> > + (match_operand:SVE_F_B16B16 2 "register_operand") >> > + (match_operand:SVE_F_B16B16 3 "register_operand")] >> > <SVE_COND_FP>))] >> > "TARGET_SVE >> > && reload_completed >> > && INTVAL (operands[4]) == SVE_RELAXED_GP" >> > [(set (match_dup 0) >> > - (SVE_UNPRED_FP_BINARY:SVE_FULL_F_B16B16 (match_dup 2) (match_dup 3)))] >> > + (SVE_UNPRED_FP_BINARY:SVE_F_B16B16 (match_dup 2) (match_dup 3)))] >> > ) >> >> Reading this back, I notice that I forgot to move the SVE_RELAXED_GP >> into the pattern when separating the define_split from the original >> define_insn_and_split. I'll do that as a follow-up. > > No need, I can make that change here if it is easier.
Yeah, that'd be fine too, thanks. (No need for a new review unless you want one.) Richard