[libclc] libclc: Fix missing overloads for atomic_fetch_add/sub (PR #188478)
Matt Arsenault via cfe-commits
cfe-commits at lists.llvm.org
Wed Mar 25 05:48:38 PDT 2026
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 <Matthew.Arsenault at amd.com>
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) &&
More information about the cfe-commits
mailing list