https://github.com/erichkeane updated https://github.com/llvm/llvm-project/pull/200423
>From 45eb8185279d8b411d69f4b38b70634709dd0efd Mon Sep 17 00:00:00 2001 From: erichkeane <[email protected]> Date: Fri, 29 May 2026 07:38:34 -0700 Subject: [PATCH] [CIR] Implement __sync_synchronize builtin This showed up on a spec test, but is a very simple system-sequentially consistent fence instruction. --- clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp | 9 ++++++++- .../test/CIR/CodeGenBuiltins/builtin-sync_synchronize.c | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 clang/test/CIR/CodeGenBuiltins/builtin-sync_synchronize.c diff --git a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp index afa7e5b91251b..bfe29a3928961 100644 --- a/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenBuiltin.cpp @@ -2089,7 +2089,6 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, case Builtin::BI__sync_lock_release_4: case Builtin::BI__sync_lock_release_8: case Builtin::BI__sync_lock_release_16: - case Builtin::BI__sync_synchronize: case Builtin::BI__builtin_nontemporal_load: case Builtin::BI__builtin_nontemporal_store: case Builtin::BI__c11_atomic_is_lock_free: @@ -2107,6 +2106,14 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID, emitAtomicFenceOp(*this, e, cir::SyncScopeKind::SingleThread); return RValue::get(nullptr); } + case Builtin::BI__sync_synchronize: { + cir::AtomicFenceOp::create( + builder, getLoc(e->getSourceRange()), + cir::MemOrder::SequentiallyConsistent, + cir::SyncScopeKindAttr::get(&getMLIRContext(), + cir::SyncScopeKind::System)); + return RValue::get(nullptr); + } case Builtin::BI__scoped_atomic_thread_fence: return errorBuiltinNYI(*this, e, builtinID); case Builtin::BI__builtin_signbit: diff --git a/clang/test/CIR/CodeGenBuiltins/builtin-sync_synchronize.c b/clang/test/CIR/CodeGenBuiltins/builtin-sync_synchronize.c new file mode 100644 index 0000000000000..e4047d44124a4 --- /dev/null +++ b/clang/test/CIR/CodeGenBuiltins/builtin-sync_synchronize.c @@ -0,0 +1,9 @@ +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-cir %s -o - | FileCheck %s -check-prefix=CIR +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o - | FileCheck %s -check-prefix=LLVM +// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s -check-prefix=LLVM + +void use() { + __sync_synchronize(); + // CIR: cir.atomic.fence syncscope(system) seq_cst + // LLVM: fence seq_cst +} _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
