http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59968
--- Comment #5 from H.J. Lu <hjl.tools at gmail dot com> --- For int __attribute__((noinline)) foo1 (int x, int y) { x &= (1 << y); return x != 0; } we generate movl %esi, %ecx movl $1, %eax sall %cl, %eax testl %edi, %eax setne %al movzbl %al, %eax ret I am expecting: bt %esi, %edi setc %al movzbl %al, %eax ret