https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106536
Segher Boessenkool <segher at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed| |2022-09-13 Status|UNCONFIRMED |NEW CC| |segher at gcc dot gnu.org --- Comment #1 from Segher Boessenkool <segher at gcc dot gnu.org> --- Confirmed. GCC uses conditional branches here in expand already. It is hard to optimise this over that. Using -mcpu=power10 we don't get conditional branches: cmpld 7,3,4 # 8 [c=4 l=4] *cmpdi_unsigned li 9,1 # 43 [c=4 l=4] *movsi_internal1/8 cmpld 0,3,4 # 45 [c=4 l=4] *cmpdi_unsigned setnbc 10,28 # 44 [c=4 l=4] *setnbc_unsigned_si isel 3,9,10,1 # 46 [c=4 l=4] isel_unsigned_si/1 extsw 3,3 # 24 [c=4 l=4] extendsidi2/1 blr # 51 [c=4 l=4] simple_return but this of course isn't ideal yet either. The branches aren't fully optimised away until ce2, which is *after* combine. ce1 didn't catch this, perhaps because the two conditional assignments are a bit intertwined there?