================
@@ -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);
----------------
jhuber6 wrote:
This is the weird atomic modulo increment thing? Honestly wondering if it's
worth relying on an external intrinsic instead of just doing this as a fallback
with CAS.
https://github.com/llvm/llvm-project/pull/174675
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits