https://github.com/arsenm created 
https://github.com/llvm/llvm-project/pull/188478

Follow up to #185263, which missed the overloads which take a memory
order.

>From fd0ad60347fe594fec7d17f670ebaad97aa0cb59 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <[email protected]>
Date: Wed, 25 Mar 2026 13:45:19 +0100
Subject: [PATCH] libclc: Fix missing overloads for atomic_fetch_add/sub

Follow up to #185263, which missed the overloads which take a memory
order.
---
 .../lib/generic/atomic/atomic_fetch_add.cl    | 19 +++++++++++++++++++
 .../lib/generic/atomic/atomic_fetch_sub.cl    | 19 +++++++++++++++++++
 2 files changed, 38 insertions(+)

diff --git a/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl 
b/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl
index ff2115f4c4b41..f4f3c322975ac 100644
--- a/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl
+++ b/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl
@@ -27,12 +27,24 @@ atomic_fetch_add(volatile __local atomic_uintptr_t *p, 
ptrdiff_t v) {
                                    __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE);
 }
 
+_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(
+    volatile __local atomic_uintptr_t *p, ptrdiff_t v, memory_order order) {
+  return __scoped_atomic_fetch_add((volatile __local uintptr_t *)p, v, order,
+                                   __MEMORY_SCOPE_DEVICE);
+}
+
 _CLC_OVERLOAD _CLC_DEF uintptr_t
 atomic_fetch_add(volatile __global atomic_uintptr_t *p, ptrdiff_t v) {
   return __scoped_atomic_fetch_add((volatile __global uintptr_t *)p, v,
                                    __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE);
 }
 
+_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(
+    volatile __global atomic_uintptr_t *p, ptrdiff_t v, memory_order order) {
+  return __scoped_atomic_fetch_add((volatile __global uintptr_t *)p, v, order,
+                                   __MEMORY_SCOPE_DEVICE);
+}
+
 #if _CLC_GENERIC_AS_SUPPORTED
 
 _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p,
@@ -41,6 +53,13 @@ _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile 
atomic_uintptr_t *p,
                                    __MEMORY_SCOPE_DEVICE);
 }
 
+_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p,
+                                                  ptrdiff_t v,
+                                                  memory_order order) {
+  return __scoped_atomic_fetch_add((volatile uintptr_t *)p, v, order,
+                                   __MEMORY_SCOPE_DEVICE);
+}
+
 #endif // _CLC_GENERIC_AS_SUPPORTED
 
 #endif // defined(__opencl_c_atomic_order_seq_cst) &&
diff --git a/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl 
b/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl
index 9740ff7c036db..1d8811335e810 100644
--- a/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl
+++ b/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl
@@ -27,12 +27,24 @@ atomic_fetch_sub(volatile __local atomic_uintptr_t *p, 
ptrdiff_t v) {
                                    __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE);
 }
 
+_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(
+    volatile __local atomic_uintptr_t *p, ptrdiff_t v, memory_order order) {
+  return __scoped_atomic_fetch_sub((volatile __local uintptr_t *)p, v, order,
+                                   __MEMORY_SCOPE_DEVICE);
+}
+
 _CLC_OVERLOAD _CLC_DEF uintptr_t
 atomic_fetch_sub(volatile __global atomic_uintptr_t *p, ptrdiff_t v) {
   return __scoped_atomic_fetch_sub((volatile __global uintptr_t *)p, v,
                                    __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE);
 }
 
+_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(
+    volatile __global atomic_uintptr_t *p, ptrdiff_t v, memory_order order) {
+  return __scoped_atomic_fetch_sub((volatile __global uintptr_t *)p, v, order,
+                                   __MEMORY_SCOPE_DEVICE);
+}
+
 #if _CLC_GENERIC_AS_SUPPORTED
 
 _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p,
@@ -41,6 +53,13 @@ _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile 
atomic_uintptr_t *p,
                                    __MEMORY_SCOPE_DEVICE);
 }
 
+_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p,
+                                                  ptrdiff_t v,
+                                                  memory_order order) {
+  return __scoped_atomic_fetch_sub((volatile uintptr_t *)p, v, order,
+                                   __MEMORY_SCOPE_DEVICE);
+}
+
 #endif // _CLC_GENERIC_AS_SUPPORTED
 
 #endif // defined(__opencl_c_atomic_order_seq_cst) &&

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to