https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77980

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |enhancement

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So we start out with:
  x2.0_1 = x2D.3906;
  # RANGE VR_VARYING NONZERO 4294967294
  _2 = x2.0_1 * 2;
  # RANGE [0, 1] NONZERO 1
  _3 = 1 / _2;
  # VUSE <.MEM_7(D)>
  x1.1_4 = x1D.3905;
  x1.2_5 = (unsigned intD.10) x1.1_4;
  _6 = _3 * x1.2_5;
  if (_6 != 0)


So _6 will either be x1.2_5 or 0 (if _3 == 0)
So this means (_6 != 0) can be changed to (x1.2_5 !=0 || _3 == 0).

The only time _3 is nonzero 0 is _2 == 1 but we already know _2 can't be 2.

So the way to fix this is to improve VRP to get the range on _3 correct.

Reply via email to