https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97381
--- Comment #8 from Andrew Macleod <amacleod at redhat dot com> --- in particular: _2 = (int) c_8; _3 = _2 * 148372120; _4 = a.0_1 / _3; if (_4 != 0) we do not wind back thru divides at the moment (unless they are exact divides) so when processing the false edge to calculate a range for c_8 (which feeds into a phi eventually) so when processing [0, 0] = a.0_1 / _3 and trying to calculate a range for _3 , range-ops was returning false, indicating no further processing should be done (so we wont know anything else about c_8) By ignoring that, and continuing to process _3 = _2 * 148372120; with a LHS that was garbage, we were getting some less than ideal results as we continued back to the cast and figured a value for c_8.