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...

Reply via email to