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