> -----Original Message-----
> From: Jakub Jelinek <[email protected]>
> Sent: Tuesday, September 2, 2025 10:00 AM
> To: Alex Coplan <[email protected]>; Richard Earnshaw
> <[email protected]>; Tamar Christina <[email protected]>;
> Kyrylo Tkachov <[email protected]>; Christophe Lyon
> <[email protected]>; Spencer Abson <[email protected]>
> Cc: [email protected]
> Subject: [PATCH] aarch64: Adjust aarch64/spaceship_1.C testcase for recent
> changes [PR121732]
> 
> Hi!
> 
> In r16-3414 libstdc++ changed ABI for (still experimental C++20) and uses
> unordered value -128 instead of 2.  Generally the change improved code
> generation on all targets tested, see
> https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693534.html
> for details.
> In r16-3474 I've adjusted the middle-end and backends to use that value.
> This apparently broke the spaceship_1.C test on aarch64 which scans the
> exact function bodies which are now different.
> 
> The following patch adjusts the full body patterns to match.  On these
> 2 routines, the generated code is 1 insn longer than in the past, so if
> you have ideas how to change the code generation for the common case of
> -1, 0, 1, -128 value, maybe it could be improved.

I think it's hard to beat, we could potentially add a branch for the unordered
case into mov w0, -128 but that still makes the common case 3 cycles which
is the same as this new sequence since the move is handled in the same cycle
as the compare.

> 
> Bootstrapped/regtested on aarch64-linux, ok for trunk?

So OK with me unless someone objects in a day or so.

Thanks,
Tamar

> 
> 2025-09-02  Jakub Jelinek  <[email protected]>
> 
>       PR testsuite/121732
>       PR target/117013
>       * g++.target/aarch64/spaceship_1.C: Adjust expected fn bodies
>       for _Z8ss_floatff and _Z9ss_doubledd.
> 
> --- gcc/testsuite/g++.target/aarch64/spaceship_1.C.jj 2025-04-24
> 10:28:03.612157217 +0200
> +++ gcc/testsuite/g++.target/aarch64/spaceship_1.C    2025-09-01
> 17:05:07.386649865 +0200
> @@ -34,8 +34,9 @@
>  ** _Z8ss_floatff:
>  **   fcmpe   s0, s1
>  **   csinv   (w[0-9]+), wzr, wzr, pl
> -**   cset    (w[0-9]+), vs
> -**   csinc   w0, \1, \2, ls
> +**   mov     (w[0-9]+), -129
> +**   csel    (w[0-9]+), \2, wzr, vs
> +**   csinc   w0, \1, \3, ls
>  **   ret
>  */
>  SPACESHIP_FN(float);
> @@ -53,8 +54,9 @@ SPACESHIP_FN_NN(float);
>  ** _Z9ss_doubledd:
>  **   fcmpe   d0, d1
>  **   csinv   (w[0-9]+), wzr, wzr, pl
> -**   cset    (w[0-9]+), vs
> -**   csinc   w0, \1, \2, ls
> +**   mov     (w[0-9]+), -129
> +**   csel    (w[0-9]+), \2, wzr, vs
> +**   csinc   w0, \1, \3, ls
>  **   ret
>  */
>  SPACESHIP_FN(double);
> 
>       Jakub

Reply via email to