https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85234
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|missed optimisation |missed optimisation
|opportunity for (~x >> |opportunity for (x >>
|CST)!=0 is not optimized to |CST)!=0 is not optimized to
| (((unsigned)x) < | (((unsigned)x) >=
|~((1<<CST) - 1)) |(1<<CST)
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
The general thing is:
_2 = a >> 3;
if (_2 != 0)
Should be optimized to just:
((unsigned)a) >= (1<<3)
Which is the same as:
((unsigned)a) > ((1<<3) - 1)
And then
~x > ((1<<3) - 1)
gets (already) optimized to:
x.0_1 <= -9
PR 110010 is related because instead of a 0, we have a similar shift.