https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121022

            Bug ID: 121022
           Summary: Suboptimal code generation for atomic_thread_fence
           Product: gcc
           Version: 15.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mmyangfl at gmail dot com
  Target Milestone: ---

On x86, atomic_thread_fence usually results in nop (except for
memory_order_seq_cst). However,

#include <stdatomic.h>

#define test(mode) \
int mode(int res) { \
  if (res) atomic_thread_fence(memory_order_ ## mode); \
  return res; \
}

test(relaxed)
test(consume)
test(acquire)
test(release)
test(acq_rel)
test(seq_cst)

Compiled with -O3:

consume:
        mov     eax, edi
        test    edi, edi
        jne     .L9      <- Superfluous, identical branches
        ret
.L9:
        ret

Reply via email to