[Openmp-commits] [clang] [openmp] [OFFLOAD] Build DeviceRTL with SPIRV backend (PR #174675)
Joseph Huber via Openmp-commits
openmp-commits at lists.llvm.org
Fri Jan 9 12:20:58 PST 2026
================
@@ -258,6 +258,80 @@ void setCriticalLock(omp_lock_t *Lock) { setLock(Lock); }
#endif
///}
+#if defined(__SPIRV__)
+
+MemorySemantics_t convertOrderingType(atomic::OrderingTy Ordering) {
+ switch (Ordering) {
+ default:
+ __builtin_unreachable();
+ case atomic::relaxed:
+ return MemorySemantics_t::Relaxed;
+ case atomic::acquire:
+ return MemorySemantics_t::Acquire;
+ case atomic::release:
+ return MemorySemantics_t::Release;
+ case atomic::acq_rel:
+ return MemorySemantics_t::AcquireRelease;
+ case atomic::seq_cst:
+ return MemorySemantics_t::SequentiallyConsistent;
+ }
+}
+uint32_t atomicInc(uint32_t *Address, uint32_t Val, atomic::OrderingTy Ordering,
+ atomic::MemScopeTy MemScope) {
+ return __spirv_AtomicIAdd(Address, (int)MemScope,
+ convertOrderingType(Ordering), Val);
+}
+
+void namedBarrierInit() {} // TODO
+void namedBarrier() {} // TODO
+void fenceTeam(atomic::OrderingTy Ordering) {
+ return __spirv_MemoryBarrier(Scope_t::Workgroup,
+ 0x100 | convertOrderingType(Ordering));
+}
+void fenceKernel(atomic::OrderingTy Ordering) {
+ return __spirv_MemoryBarrier(Scope_t::Device,
+ 0x200 | convertOrderingType(Ordering));
+}
+void fenceSystem(atomic::OrderingTy Ordering) {
+ return __spirv_MemoryBarrier(Scope_t::CrossDevice,
+ 0x200 | convertOrderingType(Ordering));
+}
+
+void syncWarp(__kmpc_impl_lanemask_t) {
+ __spirv_ControlBarrier(Scope_t::Subgroup, Scope_t::Subgroup,
+ 0x80 | MemorySemantics_t::SequentiallyConsistent);
+}
+void syncThreads(atomic::OrderingTy Ordering) {
+ __spirv_ControlBarrier(Scope_t::Workgroup, Scope_t::Workgroup,
+ 0x100 | convertOrderingType(Ordering));
+}
+void unsetLock(omp_lock_t *Lock) {
+ __spirv_AtomicStore((int32_t *)Lock, Scope_t::CrossDevice,
----------------
jhuber6 wrote:
Why do we need SPIRV handling for this? Does the backend not handle the atomics?
https://github.com/llvm/llvm-project/pull/174675
More information about the Openmp-commits
mailing list