[llvm] [openmp] [OFFLOAD] Add spirv implementation for named barrier (PR #180393)

via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 26 16:54:40 PDT 2026


================
@@ -181,8 +181,28 @@ void setCriticalLock(omp_lock_t *Lock) { setLock(Lock); }
 ///}
 
 #if defined(__SPIRV__)
-void namedBarrierInit() { __builtin_trap(); } // TODO
-void namedBarrier() { __builtin_trap(); }     // TODO
+
+[[clang::loader_uninitialized]] volatile Local<uint32_t> namedBarrierTracker;
+
+void namedBarrierInit() {
+  atomic::store(&namedBarrierTracker, 0u, atomic::seq_cst, atomic::workgroup);
+}
+
+void namedBarrier() {
+  uint32_t NumThreads = omp_get_num_threads();
+  uint32_t load =
+      atomic::add(&namedBarrierTracker, 1, atomic::seq_cst, atomic::workgroup);
+
+  if (load >= NumThreads - 1) {
+    atomic::store(&namedBarrierTracker, 0u, atomic::seq_cst, atomic::workgroup);
+  } else {
+    do {
+      load = atomic::load(&namedBarrierTracker, atomic::seq_cst,
+                          atomic::workgroup);
+    } while (load != 0);
+  }
+  __gpu_sync_threads();
----------------
fineg74 wrote:

I see no difference in test performance with or without __gpu_sync_threads() call so removed it to move forward

https://github.com/llvm/llvm-project/pull/180393


More information about the llvm-commits mailing list