https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92712
--- Comment #7 from Marc Glisse <glisse at gcc dot gnu.org> --- The first question could be why SCCP produces (const int) ((unsigned int) t_2(D) + 4294967295) * v_3(D) + v_3(D) and not directly t*v. Several loop passes do have this tendency to split out the last (or first) iteration and produce strange expressions that we have trouble cleaning up afterwards. Anyway, in VRP2, I see _10: int [0, 2147483646] _14 = v_3(D) * _10; x_6 = v_3(D) + _14; so range info would allow to prove that _10 + 1 cannot overflow, and thus to factor out v_3(D). I have long wanted a op_cannot_overflow(tree_code,tree,tree) utility...