> From: Robin Dapp <[email protected]> > Sent: Friday, September 12, 2025 2:53 PM > > > FAIL: gcc.target/i386/pr116896.c scan-assembler-times \tjp\t 2 > > FAIL: g++.target/i386/pr116896-1.C -std=gnu++20 scan-assembler-times > \tjp\t 1 > > FAIL: g++.target/i386/pr116896-1.C -std=gnu++23 scan-assembler-times > \tjp\t 1 > > FAIL: g++.target/i386/pr116896-1.C -std=gnu++26 scan-assembler-times > \tjp\t 1 > > > > with GCC configured with > > > > ../../gcc/configure --prefix=/export/users3/haochenj/src/gcc- > bisect/master/master/r16-3760/usr --enable-clocale=gnu --with-system-zlib - > -with-demangler-in-ld --with-fpmath=sse --enable-languages=c,c++,fortran -- > enable-cet --without-isl --enable-libmpx x86_64-linux --disable-bootstrap > > > > Grml, I had seen this error during testing but it didn't appear any more > during > the final round with the latest patch version. > > This is the difference: > > Before: > > foo: > .LFB0: > .cfi_startproc > xorl %eax, %eax > vcomiss %xmm1, %xmm0 > jp .L2 > seta %al > sbbl $0, %eax > ret > .L2: > movl $2, %eax > ret > .cfi_endproc > > After: > > foo: > .LFB0: > .cfi_startproc > xorl %eax, %eax > vcomiss %xmm1, %xmm0 > movl $2, %edx > seta %al > sbbl $0, %eax > vucomiss %xmm1, %xmm0 > cmovp %edx, %eax > ret > .cfi_endproc > > Is the "before" what we want, given the two other functions in the test are > branchless? I suppose so, as the if-converted sequence is pretty lengthy. >
I also believe that we should keep the before one. The main problem I suppose would be the extra ucomi here. It is an even bigger problem than the conditional jmp vs cmov originally in that PR. Thx, Haochen
