<saurabh....@arm.com> writes:
> In ac4cdf5cb43c0b09e81760e2a1902ceebcf1a135, I introduced a bug where
> I put the new unspecs, UNSPEC_COND_SMAX and UNSPEC_COND_SMIN, into the
> wrong iterator.
>
> I should have put new unspecs in SVE_COND_FP_MAXMIN but I put it in
> SVE_COND_FP_BINARY_REG instead. That was incorrect because the
> SVE_COND_FP_MAXMIN iterator is being used for predicated floating-point
> maximum/minimum, not SVE_COND_FP_BINARY_REG.
>
> Also added a testcase to validate the new change.
>
> Regression tested on aarch64-unknown-linux-gnu and found no regressions.
> There are some test cases with "libitm" in their directory names which
> appear in compare_tests output as changed tests but it looks like they
> are in the output just because of changed build directories, like from
> build-patched/aarch64-unknown-linux-gnu/./libitm/* to
> build-pristine/aarch64-unknown-linux-gnu/./libitm/*. I didn't think it
> was a cause of concern and have pushed this for review.
>
> gcc/ChangeLog:
>
>       * config/aarch64/iterators.md: Move UNSPEC_COND_SMAX and
>       UNSPEC_COND_SMIN to correct iterators.
>
> gcc/testsuite/ChangeLog:
>
>       PR target/116934
>       * gcc.target/aarch64/sve2/pr116934.c: New test.

OK, thanks.  I see the only effect of the patch is (rightly) to add
back the constant zero alternatives.

Richard

> ---
>  gcc/config/aarch64/iterators.md                  |  8 ++++----
>  gcc/testsuite/gcc.target/aarch64/sve2/pr116934.c | 13 +++++++++++++
>  2 files changed, 17 insertions(+), 4 deletions(-)
>  create mode 100644 gcc/testsuite/gcc.target/aarch64/sve2/pr116934.c
>
> diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
> index 0836dee61c9..fcad236eee9 100644
> --- a/gcc/config/aarch64/iterators.md
> +++ b/gcc/config/aarch64/iterators.md
> @@ -3125,9 +3125,7 @@
>  
>  (define_int_iterator SVE_COND_FP_BINARY_REG
>    [UNSPEC_COND_FDIV
> -   UNSPEC_COND_FMULX
> -   UNSPEC_COND_SMAX
> -   UNSPEC_COND_SMIN])
> +   UNSPEC_COND_FMULX])
>  
>  (define_int_iterator SVE_COND_FCADD [UNSPEC_COND_FCADD90
>                                    UNSPEC_COND_FCADD270])
> @@ -3135,7 +3133,9 @@
>  (define_int_iterator SVE_COND_FP_MAXMIN [UNSPEC_COND_FMAX
>                                        UNSPEC_COND_FMAXNM
>                                        UNSPEC_COND_FMIN
> -                                      UNSPEC_COND_FMINNM])
> +                                      UNSPEC_COND_FMINNM
> +                                      UNSPEC_COND_SMAX
> +                                      UNSPEC_COND_SMIN])
>  
>  (define_int_iterator SVE_COND_FP_TERNARY [UNSPEC_COND_FMLA
>                                         UNSPEC_COND_FMLS
> diff --git a/gcc/testsuite/gcc.target/aarch64/sve2/pr116934.c 
> b/gcc/testsuite/gcc.target/aarch64/sve2/pr116934.c
> new file mode 100644
> index 00000000000..94fb96ffa7d
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/aarch64/sve2/pr116934.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile } */
> +/* { dg-additional-options "-Ofast -mcpu=neoverse-v2" } */
> +
> +int a;
> +float *b;
> +
> +void foo() {
> +  for (; a; a--, b += 4) {
> +    b[0] = b[1] = b[2] = b[2] > 0 ?: 0;
> +    if (b[3] < 0)
> +      b[3] = 0;
> +  }
> +}

Reply via email to