Spencer Abson <spencer.ab...@arm.com> writes:
> This patch extends the unpredicated FP division expander to support
> partial FP modes.  It extends the existing patterns used to implement
> UNSPEC_COND_FDIV and it's approximation as needed.
>
> gcc/ChangeLog:
>
>       * config/aarch64/aarch64-sve.md: (@aarch64_sve_<optab><mode>):
>       Extend from SVE_FULL_F to SVE_F, use aarch64_predicate_operand.
>       (div<mode>3): Extend from SVE_FULL_F to SVE_F.
>       (@aarch64_frecpe<mode>): Likewise.
>       (@aarch64_frecps<mode>): Likewise.
>
> gcc/testsuite/ChangeLog:
>
>       * gcc.target/aarch64/sve/unpacked_fdiv_1.c: New test.
>       * gcc.target/aarch64/sve/unpacked_fdiv_2.c: Likewise.
>       * gcc.target/aarch64/sve/unpacked_fdiv_3.c: Likewise.
> ---
>  gcc/config/aarch64/aarch64-sve.md             | 50 +++++++++----------
>  .../gcc.target/aarch64/sve/unpacked_fdiv_1.c  | 34 +++++++++++++
>  .../gcc.target/aarch64/sve/unpacked_fdiv_2.c  | 11 ++++
>  .../gcc.target/aarch64/sve/unpacked_fdiv_3.c  | 11 ++++
>  4 files changed, 81 insertions(+), 25 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fdiv_1.c
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fdiv_2.c
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/sve/unpacked_fdiv_3.c
>
> diff --git a/gcc/config/aarch64/aarch64-sve.md 
> b/gcc/config/aarch64/aarch64-sve.md
> index cdad900d9cf..79a087837de 100644
> --- a/gcc/config/aarch64/aarch64-sve.md
> +++ b/gcc/config/aarch64/aarch64-sve.md
> @@ -3752,9 +3752,9 @@
>  
>  ;; Unpredicated floating-point unary operations.
>  (define_insn "@aarch64_sve_<optab><mode>"
> -  [(set (match_operand:SVE_FULL_F 0 "register_operand" "=w")
> -     (unspec:SVE_FULL_F
> -       [(match_operand:SVE_FULL_F 1 "register_operand" "w")]
> +  [(set (match_operand:SVE_F 0 "register_operand" "=w")
> +     (unspec:SVE_F
> +       [(match_operand:SVE_F 1 "register_operand" "w")]
>         SVE_FP_UNARY))]
>    "TARGET_SVE"
>    "<sve_fp_op>\t%0.<Vetype>, %1.<Vetype>"

I agree the patch is correct for the current definitions of SVE_FP_UNARY
and SVE_FP_BINARY.  Since the names are generic, though, I think it
would be worth adding a comment to iterators.md above the definition
of both iterators, saying something like:

;; This iterator is currently only used for estimation instructions,
;; where lax handling of exceptions is assumed to be acceptable.
;; The iterator is therefore applied unconditionally to partial FP modes.
;; This would need to be revisited if new operations are added in future.

(feel free to reword)

The patch LGTM with that change.

That said, I suppose the documentation of the -mlow-precision-*
options doesn't explicit state that they change exception behaviour.
Maybe it would be safer to leave the reciprocal stuff out for now,
even though wanting low-precision results with strict exception
conformance seems like an odd combination.  Does anyone else have
any thoughts?

Richard

Reply via email to