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

--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> ---
As we want to have a >= 0, I tried to convey it differently for the example in
comment 0:

(a) __attribute__((assume(ch >= 0)));
(b) 'unsigned ch' (instead of 'int ch')

but it didn't help.  Thus, it looks as if it could be implemented for:
  c1 << (a + c2)
if (a >= 0 and c2 >= 0) doing then the conversion
  (c1 << c2) << a

Whether Ranger handles abs(c2) > c3 >= 0 → a >= 0 for 'c1 << (a*c2 + c3)', I
don't know, but the variant above with unsigned and 'assume(a >= 0)' should be
implementable and seems to make sense.

Reply via email to