[PATCH] aarch64/testsuite: Fix if-compare_2.c for removing vcond{, u, eq} patterns [PR116041]
Richard Sandiford
richard.sandiford@arm.com
Thu Aug 8 17:32:43 GMT 2024
Andrew Pinski <quic_apinski@quicinc.com> writes:
> For bar1 and bar2, we currently is expecting to use the bsl instruction but
> with slightly different register allocation inside the loop (which happens after
> the removal of the vcond{,u,eq} patterns), we get the bit instruction. The pattern that
> outputs bsl instruction will output bit and bif too depending register allocation.
>
> So let's check for bsl, bit or bif instructions instead of just bsl instruction.
>
> Tested on aarch64 both with an unmodified compiler and one which has the patch to disable
> these optabs.
>
> gcc/testsuite/ChangeLog:
>
> PR testsuite/116041
> * gcc.target/aarch64/if-compare_2.c: Support bit and bif for
> both bar1 and bar2; add comment on why too.
OK, thanks.
Richard
>
> Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
> ---
> gcc/testsuite/gcc.target/aarch64/if-compare_2.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/testsuite/gcc.target/aarch64/if-compare_2.c b/gcc/testsuite/gcc.target/aarch64/if-compare_2.c
> index 14988abac45..f5a2b1956e3 100644
> --- a/gcc/testsuite/gcc.target/aarch64/if-compare_2.c
> +++ b/gcc/testsuite/gcc.target/aarch64/if-compare_2.c
> @@ -8,6 +8,7 @@
>
> typedef int v4si __attribute__ ((vector_size (16)));
>
> +
> /*
> **foo1:
> ** cmgt v0.4s, v1.4s, v0.4s
> @@ -29,11 +30,13 @@ v4si foo2 (v4si a, v4si b, v4si c, v4si d) {
> }
>
>
> +/* The bsl could be bit or bif depending on register
> + allocator inside the loop. */
> /**
> **bar1:
> **...
> ** cmge v[0-9]+.4s, v[0-9]+.4s, v[0-9]+.4s
> -** bsl v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b
> +** (bsl|bit|bif) v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b
> ** and v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b
> **...
> */
> @@ -44,11 +47,13 @@ void bar1 (int * restrict a, int * restrict b, int * restrict c,
> res[i] = ((a[i] < b[i]) & c[i]) | ((a[i] >= b[i]) & d[i]);
> }
>
> +/* The bsl could be bit or bif depending on register
> + allocator inside the loop. */
> /**
> **bar2:
> **...
> ** cmge v[0-9]+.4s, v[0-9]+.4s, v[0-9]+.4s
> -** bsl v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b
> +** (bsl|bit|bif) v[0-9]+.16b, v[0-9]+.16b, v[0-9]+.16b
> **...
> */
> void bar2 (int * restrict a, int * restrict b, int * restrict c,
More information about the Gcc-patches
mailing list