https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95230
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2021-11-22 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Confirmed. This is partly fixed on the trunk: mov eax, edi mov edx, 1 and eax, 1 .p2align 4,,10 .p2align 3 .L2: add edx, 1 cmp edx, 32 jne .L2 ret <bb 2> [local count: 32534376]: _6 = val_12(D) & 1; <bb 3> [local count: 1009658865]: # res_11 = PHI <res_11(3), _6(2)> # I_3 = PHI <I_29(3), 1(2)> I_29 = I_3 + 1; if (I_29 != 32) goto <bb 3>; [93.07%] else goto <bb 4>; [6.93%] <bb 4> [local count: 32534376]: return res_11; I do find the induction variable PHI node kinda of funny: # res_11 = PHI <res_11(3), _6(2)>