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

--- Comment #10 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
So we have:
  _28 = d.3_27 == 0;
  _29 = (int) _28;
  _31 = _61 >> _29;
  _41 = _31 == 0;

This can be transform into:
_41 = ((unsigned)_61) <= (unsigned)_28;
(related transformation to PR 119420 but not yet filed)

And this:
  _50 = (int) _41;
  _45 = _61 >> _50;
  _1 = _45 == 0;
into:
_1 = ((unsigned)_61) <= (unsigned)_41;

But _1 is the same as _41 (see PR 119422)


  _2 = (int) _1;
  _59 = _61 >> _2;
  d = _59;
  if (_59 == 0)

Similar reason for _59 == 0, this becomes just _41.

Though I am not 100% sure that helps here.

Reply via email to