[Bug middle-end/64309] if (1 & (1 << n)) not simplified to if (n == 0)
olegendo at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Dec 15 20:41:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64309
--- Comment #7 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Marek Polacek from comment #5)
>
> I don't think so. I tried to come up with a more general transformation
> that would simplify ((CST << n) & CST) != 0, but I haven't found anything
> yet. So maybe just this?
> ((1 << n) & 1) != 0 -> n == 0
> ((1 << n) & 1) == 0 -> n != 0
If I'm not mistaken...
(1 << n) & 2 != 0 -> n == 1
(1 << n) & 3 != 0 -> n < 2 (unsigned)
(1 << n) & 4 != 0 -> n == 2
(1 << n) & 5 != 0 -> n == 0 || n == 2 (not beneficial)
(1 << n) & 6 != 0 -> n > 0 && n < 3 (not beneficial)
(1 << n) & 7 != 0 -> n < 3 (unsigned)
...
More information about the Gcc-bugs
mailing list