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.

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

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