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