i386: Introduce peephole2 to use flags from CMPXCHG more [PR96189]
authorUros Bizjak <ubizjak@gmail.com>
Wed, 15 Jul 2020 19:27:00 +0000 (21:27 +0200)
committerUros Bizjak <ubizjak@gmail.com>
Wed, 15 Jul 2020 19:29:59 +0000 (21:29 +0200)
commit6c2848ad02feef5ac094d1158be3861819b3bb49
tree7cd73e410c711ba4f8700bc1227f595b00c83394
parent51542d9254426c54363a42451885a77b44ebbeaf
i386: Introduce peephole2 to use flags from CMPXCHG more [PR96189]

CMPXCHG instruction sets ZF flag if the values in the destination operand
and EAX register are equal; otherwise the ZF flag is cleared and value
from destination operand is loaded to EAX. Following assembly:

        movl    %esi, %eax
        lock cmpxchgl   %edx, (%rdi)
        cmpl    %esi, %eax
        sete    %al

can be optimized by removing the unneeded comparison, since set ZF flag
signals that no update to EAX happened.

2020-15-07  Uroš Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:
PR target/95355
* config/i386/sync.md
(peephole2 to remove unneded compare after CMPXCHG): New pattern.

gcc/testsuite/ChangeLog:
PR target/95355
* gcc.target/i386/pr96189.c: New test.
gcc/config/i386/sync.md
gcc/testsuite/gcc.target/i386/pr96189.c [new file with mode: 0644]