https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64215
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Reproduced with the trunk too. The problem is that during cross-jumping (the "jump2" pass), this isn't cheaply cross-jumpable, as the simple_return just using earlier computed %eax comes before the bb with setting %eax to -1 and doing simple_return (so in that case it would be replacement of simple_return with conditional jump, where the conditional jump is larger). It is only in the basic block reordering pass that this is swapped, but that is too late, we don't have any further crossjumping pass.