https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/188478
>From 073ed409c6154efe99c9dfd430a10145ea015174 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Wed, 25 Mar 2026 13:45:19 +0100 Subject: [PATCH 1/4] 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) && >From 85fe32bce491360ff7cdcaf859987d9af71cee36 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Wed, 25 Mar 2026 14:46:47 +0100 Subject: [PATCH 2/4] Address comments --- .../lib/generic/atomic/atomic_fetch_add.cl | 49 ++++++++++++++----- .../lib/generic/atomic/atomic_fetch_sub.cl | 49 ++++++++++++++----- 2 files changed, 72 insertions(+), 26 deletions(-) diff --git a/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl b/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl index f4f3c322975ac..e399afef9f0d6 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl @@ -18,8 +18,9 @@ #define __CLC_BODY "atomic_def.inc" #include "clc/math/gentype.inc" -#if defined(__opencl_c_atomic_order_seq_cst) && \ - defined(__opencl_c_atomic_scope_device) +#ifdef __opencl_c_atomic_scope_device + +#ifdef __opencl_c_atomic_order_seq_cst _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile __local atomic_uintptr_t *p, ptrdiff_t v) { @@ -27,6 +28,21 @@ 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 __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); +} + +#if _CLC_GENERIC_AS_SUPPORTED +_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, + ptrdiff_t v) { + return __scoped_atomic_fetch_add((volatile uintptr_t *)p, v, __ATOMIC_SEQ_CST, + __MEMORY_SCOPE_DEVICE); +} +#endif // _CLC_GENERIC_AS_SUPPORTED +#endif // __opencl_c_atomic_order_seq_cst + _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, @@ -34,9 +50,10 @@ _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add( } _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); +atomic_fetch_add(volatile __local atomic_uintptr_t *p, ptrdiff_t v, + memory_order order, memory_scope scope) { + return __scoped_atomic_fetch_add((volatile __local uintptr_t *)p, v, order, + __opencl_get_clang_memory_scope(scope)); } _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add( @@ -45,22 +62,28 @@ _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add( __MEMORY_SCOPE_DEVICE); } -#if _CLC_GENERIC_AS_SUPPORTED +_CLC_OVERLOAD _CLC_DEF uintptr_t +atomic_fetch_add(volatile __global atomic_uintptr_t *p, ptrdiff_t v, + memory_order order, memory_scope scope) { + return __scoped_atomic_fetch_add((volatile __global uintptr_t *)p, v, order, + __opencl_get_clang_memory_scope(scope)); +} +#if _CLC_GENERIC_AS_SUPPORTED _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, - ptrdiff_t v) { - return __scoped_atomic_fetch_add((volatile uintptr_t *)p, v, __ATOMIC_SEQ_CST, + ptrdiff_t v, + memory_order order) { + return __scoped_atomic_fetch_add((volatile uintptr_t *)p, v, order, __MEMORY_SCOPE_DEVICE); } _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, ptrdiff_t v, - memory_order order) { + memory_order order, + memory_scope scope) { return __scoped_atomic_fetch_add((volatile uintptr_t *)p, v, order, - __MEMORY_SCOPE_DEVICE); + __opencl_get_clang_memory_scope(scope)); } #endif // _CLC_GENERIC_AS_SUPPORTED - -#endif // defined(__opencl_c_atomic_order_seq_cst) && - // defined(__opencl_c_atomic_scope_device) +#endif // __opencl_c_atomic_scope_device diff --git a/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl b/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl index 1d8811335e810..f639a71794639 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl @@ -18,8 +18,9 @@ #define __CLC_BODY "atomic_def.inc" #include "clc/math/gentype.inc" -#if defined(__opencl_c_atomic_order_seq_cst) && \ - defined(__opencl_c_atomic_scope_device) +#ifdef __opencl_c_atomic_scope_device + +#ifdef __opencl_c_atomic_order_seq_cst _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile __local atomic_uintptr_t *p, ptrdiff_t v) { @@ -27,6 +28,21 @@ 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 __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); +} + +#if _CLC_GENERIC_AS_SUPPORTED +_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, + ptrdiff_t v) { + return __scoped_atomic_fetch_sub((volatile uintptr_t *)p, v, __ATOMIC_SEQ_CST, + __MEMORY_SCOPE_DEVICE); +} +#endif // _CLC_GENERIC_AS_SUPPORTED +#endif // __opencl_c_atomic_order_seq_cst + _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, @@ -34,9 +50,10 @@ _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub( } _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); +atomic_fetch_sub(volatile __local atomic_uintptr_t *p, ptrdiff_t v, + memory_order order, memory_scope scope) { + return __scoped_atomic_fetch_sub((volatile __local uintptr_t *)p, v, order, + __opencl_get_clang_memory_scope(scope)); } _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub( @@ -45,22 +62,28 @@ _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub( __MEMORY_SCOPE_DEVICE); } -#if _CLC_GENERIC_AS_SUPPORTED +_CLC_OVERLOAD _CLC_DEF uintptr_t +atomic_fetch_sub(volatile __global atomic_uintptr_t *p, ptrdiff_t v, + memory_order order, memory_scope scope) { + return __scoped_atomic_fetch_sub((volatile __global uintptr_t *)p, v, order, + __opencl_get_clang_memory_scope(scope)); +} +#if _CLC_GENERIC_AS_SUPPORTED _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, - ptrdiff_t v) { - return __scoped_atomic_fetch_sub((volatile uintptr_t *)p, v, __ATOMIC_SEQ_CST, + ptrdiff_t v, + memory_order order) { + return __scoped_atomic_fetch_sub((volatile uintptr_t *)p, v, order, __MEMORY_SCOPE_DEVICE); } _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, ptrdiff_t v, - memory_order order) { + memory_order order, + memory_scope scope) { return __scoped_atomic_fetch_sub((volatile uintptr_t *)p, v, order, - __MEMORY_SCOPE_DEVICE); + __opencl_get_clang_memory_scope(scope)); } #endif // _CLC_GENERIC_AS_SUPPORTED - -#endif // defined(__opencl_c_atomic_order_seq_cst) && - // defined(__opencl_c_atomic_scope_device) +#endif // __opencl_c_atomic_scope_device >From e5cbd91fe859a0ab952d46630d89606fdae711f4 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Wed, 25 Mar 2026 14:55:13 +0100 Subject: [PATCH 3/4] Fix formatting --- .../lib/generic/atomic/atomic_fetch_add.cl | 18 +++++++++--------- .../lib/generic/atomic/atomic_fetch_sub.cl | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl b/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl index e399afef9f0d6..d63101fced189 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl @@ -22,20 +22,20 @@ #ifdef __opencl_c_atomic_order_seq_cst -_CLC_OVERLOAD _CLC_DEF uintptr_t +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile __local atomic_uintptr_t *p, ptrdiff_t v) { return __scoped_atomic_fetch_add((volatile __local uintptr_t *)p, v, __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE); } -_CLC_OVERLOAD _CLC_DEF uintptr_t +_CLC_DEF _CLC_OVERLOAD 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); } #if _CLC_GENERIC_AS_SUPPORTED -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, ptrdiff_t v) { return __scoped_atomic_fetch_add((volatile uintptr_t *)p, v, __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE); @@ -43,26 +43,26 @@ _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, #endif // _CLC_GENERIC_AS_SUPPORTED #endif // __opencl_c_atomic_order_seq_cst -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add( +_CLC_DEF _CLC_OVERLOAD 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 +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile __local atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { return __scoped_atomic_fetch_add((volatile __local uintptr_t *)p, v, order, __opencl_get_clang_memory_scope(scope)); } -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add( +_CLC_DEF _CLC_OVERLOAD 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); } -_CLC_OVERLOAD _CLC_DEF uintptr_t +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile __global atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { return __scoped_atomic_fetch_add((volatile __global uintptr_t *)p, v, order, @@ -70,14 +70,14 @@ atomic_fetch_add(volatile __global atomic_uintptr_t *p, ptrdiff_t v, } #if _CLC_GENERIC_AS_SUPPORTED -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, +_CLC_DEF _CLC_OVERLOAD 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); } -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { diff --git a/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl b/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl index f639a71794639..c97b9cb247d51 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl @@ -22,20 +22,20 @@ #ifdef __opencl_c_atomic_order_seq_cst -_CLC_OVERLOAD _CLC_DEF uintptr_t +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile __local atomic_uintptr_t *p, ptrdiff_t v) { return __scoped_atomic_fetch_sub((volatile __local uintptr_t *)p, v, __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE); } -_CLC_OVERLOAD _CLC_DEF uintptr_t +_CLC_DEF _CLC_OVERLOAD 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); } #if _CLC_GENERIC_AS_SUPPORTED -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, ptrdiff_t v) { return __scoped_atomic_fetch_sub((volatile uintptr_t *)p, v, __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE); @@ -43,26 +43,26 @@ _CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, #endif // _CLC_GENERIC_AS_SUPPORTED #endif // __opencl_c_atomic_order_seq_cst -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub( +_CLC_DEF _CLC_OVERLOAD 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 +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile __local atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { return __scoped_atomic_fetch_sub((volatile __local uintptr_t *)p, v, order, __opencl_get_clang_memory_scope(scope)); } -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub( +_CLC_DEF _CLC_OVERLOAD 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); } -_CLC_OVERLOAD _CLC_DEF uintptr_t +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile __global atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { return __scoped_atomic_fetch_sub((volatile __global uintptr_t *)p, v, order, @@ -70,14 +70,14 @@ atomic_fetch_sub(volatile __global atomic_uintptr_t *p, ptrdiff_t v, } #if _CLC_GENERIC_AS_SUPPORTED -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, +_CLC_DEF _CLC_OVERLOAD 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); } -_CLC_OVERLOAD _CLC_DEF uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, +_CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { >From 8a7a7a5f8a319b16845ae45f2fad62296e858aa7 Mon Sep 17 00:00:00 2001 From: Matt Arsenault <[email protected]> Date: Thu, 26 Mar 2026 14:48:31 +0100 Subject: [PATCH 4/4] Macro fixes --- .../lib/generic/atomic/atomic_fetch_add.cl | 47 ++++++++++++------- .../lib/generic/atomic/atomic_fetch_sub.cl | 47 ++++++++++++------- 2 files changed, 62 insertions(+), 32 deletions(-) diff --git a/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl b/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl index d63101fced189..12b6f37b3fdf5 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_fetch_add.cl @@ -18,9 +18,15 @@ #define __CLC_BODY "atomic_def.inc" #include "clc/math/gentype.inc" -#ifdef __opencl_c_atomic_scope_device +// If the device address space is 64-bits, the data types atomic_intptr_t, +// atomic_uintptr_t, atomic_size_t and atomic_ptrdiff_t are supported if the +// cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics extensions are +// supported and have been enabled. +#if __SIZEOF_POINTER__ < 8 || (defined(cl_khr_int64_base_atomics) && \ + defined(cl_khr_int64_extended_atomics)) -#ifdef __opencl_c_atomic_order_seq_cst +#if defined(__opencl_c_atomic_scope_device) && \ + defined(__opencl_c_atomic_order_seq_cst) _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile __local atomic_uintptr_t *p, ptrdiff_t v) { @@ -41,7 +47,10 @@ _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, __MEMORY_SCOPE_DEVICE); } #endif // _CLC_GENERIC_AS_SUPPORTED -#endif // __opencl_c_atomic_order_seq_cst +#endif // defined(__opencl_c_atomic_scope_device) && + // defined(__opencl_c_atomic_order_seq_cst) + +#ifdef __opencl_c_atomic_scope_device _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add( volatile __local atomic_uintptr_t *p, ptrdiff_t v, memory_order order) { @@ -49,6 +58,22 @@ _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add( __MEMORY_SCOPE_DEVICE); } +_CLC_DEF _CLC_OVERLOAD 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_DEF _CLC_OVERLOAD 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 // __opencl_c_atomic_scope_device + _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile __local atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { @@ -56,12 +81,6 @@ atomic_fetch_add(volatile __local atomic_uintptr_t *p, ptrdiff_t v, __opencl_get_clang_memory_scope(scope)); } -_CLC_DEF _CLC_OVERLOAD 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); -} - _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile __global atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { @@ -70,12 +89,6 @@ atomic_fetch_add(volatile __global atomic_uintptr_t *p, ptrdiff_t v, } #if _CLC_GENERIC_AS_SUPPORTED -_CLC_DEF _CLC_OVERLOAD 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); -} _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, ptrdiff_t v, @@ -86,4 +99,6 @@ _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_add(volatile atomic_uintptr_t *p, } #endif // _CLC_GENERIC_AS_SUPPORTED -#endif // __opencl_c_atomic_scope_device + +#endif // __SIZEOF_POINTER__ < 8 || (defined(cl_khr_int64_base_atomics) && + // defined(cl_khr_int64_extended_atomics)) diff --git a/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl b/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl index c97b9cb247d51..6dfcdde207efc 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_fetch_sub.cl @@ -18,9 +18,15 @@ #define __CLC_BODY "atomic_def.inc" #include "clc/math/gentype.inc" -#ifdef __opencl_c_atomic_scope_device +// If the device subress space is 64-bits, the data types atomic_intptr_t, +// atomic_uintptr_t, atomic_size_t and atomic_ptrdiff_t are supported if the +// cl_khr_int64_base_atomics and cl_khr_int64_extended_atomics extensions are +// supported and have been enabled. +#if __SIZEOF_POINTER__ < 8 || (defined(cl_khr_int64_base_atomics) && \ + defined(cl_khr_int64_extended_atomics)) -#ifdef __opencl_c_atomic_order_seq_cst +#if defined(__opencl_c_atomic_scope_device) && \ + defined(__opencl_c_atomic_order_seq_cst) _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile __local atomic_uintptr_t *p, ptrdiff_t v) { @@ -41,7 +47,10 @@ _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, __MEMORY_SCOPE_DEVICE); } #endif // _CLC_GENERIC_AS_SUPPORTED -#endif // __opencl_c_atomic_order_seq_cst +#endif // defined(__opencl_c_atomic_scope_device) && + // defined(__opencl_c_atomic_order_seq_cst) + +#ifdef __opencl_c_atomic_scope_device _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub( volatile __local atomic_uintptr_t *p, ptrdiff_t v, memory_order order) { @@ -49,6 +58,22 @@ _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub( __MEMORY_SCOPE_DEVICE); } +_CLC_DEF _CLC_OVERLOAD 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_DEF _CLC_OVERLOAD 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 // __opencl_c_atomic_scope_device + _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile __local atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { @@ -56,12 +81,6 @@ atomic_fetch_sub(volatile __local atomic_uintptr_t *p, ptrdiff_t v, __opencl_get_clang_memory_scope(scope)); } -_CLC_DEF _CLC_OVERLOAD 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); -} - _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile __global atomic_uintptr_t *p, ptrdiff_t v, memory_order order, memory_scope scope) { @@ -70,12 +89,6 @@ atomic_fetch_sub(volatile __global atomic_uintptr_t *p, ptrdiff_t v, } #if _CLC_GENERIC_AS_SUPPORTED -_CLC_DEF _CLC_OVERLOAD 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); -} _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, ptrdiff_t v, @@ -86,4 +99,6 @@ _CLC_DEF _CLC_OVERLOAD uintptr_t atomic_fetch_sub(volatile atomic_uintptr_t *p, } #endif // _CLC_GENERIC_AS_SUPPORTED -#endif // __opencl_c_atomic_scope_device + +#endif // __SIZEOF_POINTER__ < 8 || (defined(cl_khr_int64_base_atomics) && + // defined(cl_khr_int64_extended_atomics)) _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
