[Bug target/55181] [4.7/4.8/4.9 Regression] Expensive shift loop where a bit-testing instruction could be used
olegendo at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sun Mar 2 18:52:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55181
--- Comment #10 from Oleg Endo <olegendo at gcc dot gnu.org> ---
(In reply to Oleg Endo from comment #9)
>
> Maybe if-convert could be taught to transform the second if (...) to a
> zero_extract as well. But probably it's better to catch this earlier.
... which would make the original example
unsigned char lfsr (unsigned long number)
{
unsigned char b = 0;
if (number & (1L << 29)) b++;
if (number & (1L << 13)) b++;
return b;
}
produce the same code as
unsigned char lfsr (unsigned long number)
{
return ((number & (1L << 29)) != 0) + ((number & (1L << 13)) != 0);
}
More information about the Gcc-bugs
mailing list