http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59968
--- Comment #8 from H.J. Lu <hjl.tools at gmail dot com> ---
For
int bar1;
void
__attribute__((noinline))
foo1 (int y)
{
if (!(bar1 & (1 << y)))
bar1 |= 1 << y;
}
we generate
movl bar1(%rip), %eax
btl %edi, %eax
jc .L1
movl $1, %edx
movl %edi, %ecx
sall %cl, %edx
orl %edx, %eax
movl %eax, bar1(%rip)
.L1:
rep ret
I expect:
bts %edi, bar2(%rip)
ret
