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

--- Comment #3 from Peter Cordes <peter at cordes dot ca> ---
@Richard and Jakub:

That's just addressing the first part of my report, the problem with  x <=
(INT_MAX-1), right?

You may have missed the second part of the problem, since I probably buried it
under too much detail with the first:

In the case where the limit is variable, but can easily be proven to itself be
in the range [0 .. INT_MAX-1) or much smaller:

// gcc always fails to optimize this to an unsigned compare, but clang succeeds
void rangecheck_var(int64_t x, int64_t lim2) {
  //lim2 >>= 60;
  lim2 &= 0xf;  // let the compiler figure out the limited range of limit
  if (x>=0 && x<lim2) ext();
}


---

I noticed after I submitted the report that I maybe should have tagged it
tree-optimization, thanks for fixing.  I don't really know gcc internals; I
just file reports when it makes less than optimal code.

Reply via email to