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

Reply via email to