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.

> 
> Richard

Reply via email to