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

Andrew Macleod <amacleod at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amacleod at redhat dot com

--- Comment #5 from Andrew Macleod <amacleod at redhat dot com> ---
(In reply to Jakub Jelinek from comment #4)
> Even then, I wonder why ranger doesn't figure this out.
> (x+1u) <= 2 ? x : 0
> must have a range [-1, 1] and [-1, 1] / [2, 2] range should be [0, 0], no?

its because there is no branch which is what drives ranger. At this point, we
aren't quite smart enough to completely evaluate the 2 operands of a
conditional as if they were actual  branches.
ie
    _1 = x_4(D) + 1;
    _10 = (unsigned int) x_4(D);
    _6 = _10 + 2;
    _7 = _6 <= 2;
    _2 = _7 ? _1 : 0;

if that were:
  if (_6 <= 2)
    _2 = _1
we'd recalculate _1 with the condition being (_6 <= 2) and we come upwith [-1,
1] for _1 instead of varying.

I'll have to look at whats involved in enhancing the fold code to invoke GORI
to reevaluate _1 if _7 is [1,1].   in theory is not too difficult... :-)

Reply via email to