https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69992
--- Comment #3 from acsawdey at gcc dot gnu.org --- So, it comes down to the fact that this condition cannot ever be true, so the loop is not in fact infinite: infinite if: (expr_list:REG_DEP_TRUE (ne:SI (and:DI (minus:DI (plus:DI (ashift:DI (reg:DI 211) (const_int 2 [0x2])) (reg/v/f:DI 205 [ ap ])) (reg:DI 193 [ ivtmp.20 ])) (const_int 3 [0x3])) (const_int 0 [0])) (nil)) DI 211 is just n-1 ivtmp.20 is initialized to ap-4 and is incremented by 4 so has a value of the form ap-4+4*i. So the whole thing looks like 4*(n-1)+ap-(ap-4+4*i) or 4*(n-1)+4-4*i which is 4*(n-1+1-i) and clearly the low 2 bits are always 0. So, should some analysis have figured this out?