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.
2025-09-04 Jakub Jelinek <jakub@redhat.com>
PR testsuite/121732
PR target/117013
* g++.target/aarch64/spaceship_1.C: Adjust expected fn bodies
for _Z8ss_floatff and _Z9ss_doubledd.
** _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);
** _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);