> -----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
