https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49244
--- Comment #20 from dhowells at redhat dot com <dhowells at redhat dot com> ---
Here's a further underoptimisation with -Os:
bool foo_test_and_change_bit(unsigned long *p)
{
return test_and_change_bit(83, p);
}
is compiled to:
0000000000000015 <foo_test_and_change_bit>:
15: f0 48 0f ba 7f 08 13 lock btcq $0x13,0x8(%rdi)
1c: 0f 92 c0 setb %al
1f: c3 retq
However, the bit number on BTCQ is an imm8, so the displacement on the memory
operand is unnecessary if the bit number will fit inside the imm8.