https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98737
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Uroš Bizjak from comment #2) > This can be optimized with peephole2, we already have similar case in > sync.md: > > ;; This peephole2 and following insn optimize > ;; __sync_fetch_and_add (x, -N) == N into just lock {add,sub,inc,dec} > ;; followed by testing of flags instead of lock xadd and comparisons. That doesn't seem to do anything though, I see the same bad code for _Bool h(long b) { return __sync_fetch_and_add(&a, -b) == b; }