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.

Reply via email to