https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87601
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- sub rsi, 1 test esi, esi jne .L3 To sub rsi, 1 jne .L3 Is not the same, the first is a 64bit subtract followed by a 32bit compare. in the 2nd case, you have a 64bit subtract with the 64bit compare happening.