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.

Richard

Reply via email to