https://github.com/wenju-he updated https://github.com/llvm/llvm-project/pull/168325
>From d95e51c48de66f635c6a118cdcfcbee92495f94d Mon Sep 17 00:00:00 2001 From: Wenju He <[email protected]> Date: Mon, 17 Nov 2025 07:29:19 +0100 Subject: [PATCH 1/2] [libclc] Use CLC atomic functions for legacy OpenCL atom/atomic builtins Main changes: * OpenCL legacy atom/atomic builtins now call CLC atomic functions (which use Clang __scoped_atomic_*), replacing previous Clang __sync_* functions. * Change memory order from seq_cst to relaxed; keep device scope (spec permits broader than workgroup). LLVM IR for _Z8atom_decPU3AS1Vi: Before: %2 = atomicrmw volatile sub ptr subrspace(1) %0, i32 1 syncscope("agent") seq_cst After: %2 = atomicrmw volatile sub ptr subrspace(1) %0, i32 1 syncscope("agent") monotonic * Also adds OpenCL 1.0 atom_* variants without volatile on the pointer. They are added for backward compatibility. --- .../clc/opencl/atomic/atom_decl_int32.inc | 3 - .../clc/opencl/atomic/atom_decl_int64.inc | 3 - libclc/opencl/lib/amdgcn/SOURCES | 1 - .../minmax_helpers.ll | 55 ------------------- libclc/opencl/lib/generic/atomic/atom_add.cl | 29 +++++----- libclc/opencl/lib/generic/atomic/atom_and.cl | 29 +++++----- .../opencl/lib/generic/atomic/atom_cmpxchg.cl | 20 +++---- libclc/opencl/lib/generic/atomic/atom_dec.cl | 18 +++--- libclc/opencl/lib/generic/atomic/atom_inc.cl | 18 +++--- libclc/opencl/lib/generic/atomic/atom_max.cl | 45 +++++++-------- libclc/opencl/lib/generic/atomic/atom_min.cl | 45 +++++++-------- libclc/opencl/lib/generic/atomic/atom_or.cl | 29 +++++----- libclc/opencl/lib/generic/atomic/atom_sub.cl | 29 +++++----- libclc/opencl/lib/generic/atomic/atom_xchg.cl | 29 +++++----- libclc/opencl/lib/generic/atomic/atom_xor.cl | 29 +++++----- .../opencl/lib/generic/atomic/atomic_add.cl | 4 +- .../opencl/lib/generic/atomic/atomic_and.cl | 4 +- .../lib/generic/atomic/atomic_cmpxchg.cl | 5 +- .../opencl/lib/generic/atomic/atomic_max.cl | 4 +- .../opencl/lib/generic/atomic/atomic_min.cl | 4 +- libclc/opencl/lib/generic/atomic/atomic_or.cl | 4 +- .../opencl/lib/generic/atomic/atomic_sub.cl | 4 +- .../opencl/lib/generic/atomic/atomic_xchg.cl | 15 ++--- .../opencl/lib/generic/atomic/atomic_xor.cl | 4 +- 24 files changed, 189 insertions(+), 241 deletions(-) delete mode 100644 libclc/opencl/lib/amdgcn/cl_khr_int64_extended_atomics/minmax_helpers.ll diff --git a/libclc/opencl/include/clc/opencl/atomic/atom_decl_int32.inc b/libclc/opencl/include/clc/opencl/atomic/atom_decl_int32.inc index 866d8903db816..8a0ec9481c595 100644 --- a/libclc/opencl/include/clc/opencl/atomic/atom_decl_int32.inc +++ b/libclc/opencl/include/clc/opencl/atomic/atom_decl_int32.inc @@ -6,9 +6,6 @@ // //===----------------------------------------------------------------------===// -#include <clc/clcfunc.h> -#include <clc/clctypes.h> - #define __CLC_DECLARE_ATOM(ADDRSPACE, TYPE) \ _CLC_OVERLOAD _CLC_DECL TYPE __CLC_FUNCTION(volatile ADDRSPACE TYPE *, TYPE); diff --git a/libclc/opencl/include/clc/opencl/atomic/atom_decl_int64.inc b/libclc/opencl/include/clc/opencl/atomic/atom_decl_int64.inc index 146de3412fc2e..45489df0609ca 100644 --- a/libclc/opencl/include/clc/opencl/atomic/atom_decl_int64.inc +++ b/libclc/opencl/include/clc/opencl/atomic/atom_decl_int64.inc @@ -6,9 +6,6 @@ // //===----------------------------------------------------------------------===// -#include <clc/clcfunc.h> -#include <clc/clctypes.h> - #define __CLC_DECLARE_ATOM(ADDRSPACE, TYPE) \ _CLC_OVERLOAD _CLC_DECL TYPE __CLC_FUNCTION(volatile ADDRSPACE TYPE *, TYPE); diff --git a/libclc/opencl/lib/amdgcn/SOURCES b/libclc/opencl/lib/amdgcn/SOURCES index 213f62cc73a74..0522e13f5d3db 100644 --- a/libclc/opencl/lib/amdgcn/SOURCES +++ b/libclc/opencl/lib/amdgcn/SOURCES @@ -1,4 +1,3 @@ -cl_khr_int64_extended_atomics/minmax_helpers.ll mem_fence/fence.cl synchronization/barrier.cl workitem/get_global_offset.cl diff --git a/libclc/opencl/lib/amdgcn/cl_khr_int64_extended_atomics/minmax_helpers.ll b/libclc/opencl/lib/amdgcn/cl_khr_int64_extended_atomics/minmax_helpers.ll deleted file mode 100644 index 3ed5e99be3149..0000000000000 --- a/libclc/opencl/lib/amdgcn/cl_khr_int64_extended_atomics/minmax_helpers.ll +++ /dev/null @@ -1,55 +0,0 @@ -;;===----------------------------------------------------------------------===;; -; -; Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -; See https://llvm.org/LICENSE.txt for license information. -; SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -; -;;===----------------------------------------------------------------------===;; - -define i64 @__clc__sync_fetch_and_min_global_8(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { -entry: - %0 = atomicrmw volatile min i64 addrspace(1)* %ptr, i64 %value seq_cst - ret i64 %0 -} - -define i64 @__clc__sync_fetch_and_umin_global_8(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { -entry: - %0 = atomicrmw volatile umin i64 addrspace(1)* %ptr, i64 %value seq_cst - ret i64 %0 -} - -define i64 @__clc__sync_fetch_and_min_local_8(i64 addrspace(3)* nocapture %ptr, i64 %value) nounwind alwaysinline { -entry: - %0 = atomicrmw volatile min i64 addrspace(3)* %ptr, i64 %value seq_cst - ret i64 %0 -} - -define i64 @__clc__sync_fetch_and_umin_local_8(i64 addrspace(3)* nocapture %ptr, i64 %value) nounwind alwaysinline { -entry: - %0 = atomicrmw volatile umin i64 addrspace(3)* %ptr, i64 %value seq_cst - ret i64 %0 -} - -define i64 @__clc__sync_fetch_and_max_global_8(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { -entry: - %0 = atomicrmw volatile max i64 addrspace(1)* %ptr, i64 %value seq_cst - ret i64 %0 -} - -define i64 @__clc__sync_fetch_and_umax_global_8(i64 addrspace(1)* nocapture %ptr, i64 %value) nounwind alwaysinline { -entry: - %0 = atomicrmw volatile umax i64 addrspace(1)* %ptr, i64 %value seq_cst - ret i64 %0 -} - -define i64 @__clc__sync_fetch_and_max_local_8(i64 addrspace(3)* nocapture %ptr, i64 %value) nounwind alwaysinline { -entry: - %0 = atomicrmw volatile max i64 addrspace(3)* %ptr, i64 %value seq_cst - ret i64 %0 -} - -define i64 @__clc__sync_fetch_and_umax_local_8(i64 addrspace(3)* nocapture %ptr, i64 %value) nounwind alwaysinline { -entry: - %0 = atomicrmw volatile umax i64 addrspace(3)* %ptr, i64 %value seq_cst - ret i64 %0 -} diff --git a/libclc/opencl/lib/generic/atomic/atom_add.cl b/libclc/opencl/lib/generic/atomic/atom_add.cl index 08fb3fecd5bc9..7962b1d68a8ad 100644 --- a/libclc/opencl/lib/generic/atomic/atom_add.cl +++ b/libclc/opencl/lib/generic/atomic/atom_add.cl @@ -6,32 +6,35 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_add.h> #include <clc/opencl/atomic/atom_add.h> -#include <clc/opencl/atomic/atomic_add.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. + +#define __CLC_IMPL(AS, TYPE) \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_add(volatile AS TYPE *p, TYPE val) { \ + return __clc_atomic_fetch_add(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_add(AS TYPE *p, TYPE val) { \ + return atom_add((volatile AS TYPE *)p, val); \ + } #ifdef cl_khr_global_int32_base_atomics -#define __CLC_ATOMIC_OP add -#define __CLC_ATOMIC_ADDRESS_SPACE global -#include "atom_int32_binary.inc" +__CLC_IMPL(global, int) +__CLC_IMPL(global, unsigned int) #endif // cl_khr_global_int32_base_atomics #ifdef cl_khr_local_int32_base_atomics -#define __CLC_ATOMIC_OP add -#define __CLC_ATOMIC_ADDRESS_SPACE local -#include "atom_int32_binary.inc" +__CLC_IMPL(local, int) +__CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_base_atomics #ifdef cl_khr_int64_base_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_add(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_add_8(p, val); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_base_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_and.cl b/libclc/opencl/lib/generic/atomic/atom_and.cl index 1dddd8e72f305..38f410f8f9705 100644 --- a/libclc/opencl/lib/generic/atomic/atom_and.cl +++ b/libclc/opencl/lib/generic/atomic/atom_and.cl @@ -6,32 +6,35 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_and.h> #include <clc/opencl/atomic/atom_and.h> -#include <clc/opencl/atomic/atomic_and.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. + +#define __CLC_IMPL(AS, TYPE) \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_and(volatile AS TYPE *p, TYPE val) { \ + return __clc_atomic_fetch_and(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_and(AS TYPE *p, TYPE val) { \ + return atom_and((volatile AS TYPE *)p, val); \ + } #ifdef cl_khr_global_int32_extended_atomics -#define __CLC_ATOMIC_OP and -#define __CLC_ATOMIC_ADDRESS_SPACE global -#include "atom_int32_binary.inc" +__CLC_IMPL(global, int) +__CLC_IMPL(global, unsigned int) #endif // cl_khr_global_int32_extended_atomics #ifdef cl_khr_local_int32_extended_atomics -#define __CLC_ATOMIC_OP and -#define __CLC_ATOMIC_ADDRESS_SPACE local -#include "atom_int32_binary.inc" +__CLC_IMPL(local, int) +__CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_extended_atomics #ifdef cl_khr_int64_extended_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_and(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_and_8(p, val); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_extended_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl b/libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl index 5ae6aa30a8358..652ab335165e0 100644 --- a/libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl +++ b/libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl @@ -6,13 +6,20 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_compare_exchange.h> #include <clc/opencl/atomic/atom_cmpxchg.h> -#include <clc/opencl/atomic/atomic_cmpxchg.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_cmpxchg(volatile AS TYPE *p, TYPE cmp, \ TYPE val) { \ - return atomic_cmpxchg(p, cmp, val); \ + return __clc_atomic_compare_exchange(p, cmp, val, __ATOMIC_RELAXED, \ + __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_cmpxchg(AS TYPE *p, TYPE cmp, TYPE val) { \ + return atom_cmpxchg((volatile AS TYPE *)p, cmp, val); \ } #ifdef cl_khr_global_int32_base_atomics @@ -24,20 +31,11 @@ __CLC_IMPL(local, int) __CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_base_atomics -#undef __CLC_IMPL - #ifdef cl_khr_int64_base_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_cmpxchg(volatile AS TYPE *p, TYPE cmp, \ - TYPE val) { \ - return __sync_val_compare_and_swap_8(p, cmp, val); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_base_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_dec.cl b/libclc/opencl/lib/generic/atomic/atom_dec.cl index af811042d307a..69391d4fe7382 100644 --- a/libclc/opencl/lib/generic/atomic/atom_dec.cl +++ b/libclc/opencl/lib/generic/atomic/atom_dec.cl @@ -6,13 +6,17 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_dec.h> #include <clc/opencl/atomic/atom_dec.h> -#include <clc/opencl/atomic/atom_sub.h> -#include <clc/opencl/atomic/atomic_dec.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_dec(volatile AS TYPE *p) { \ - return atomic_dec(p); \ + return __clc_atomic_dec(p, __ATOMIC_RELAXED, __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_dec(AS TYPE *p) { \ + return atom_dec((volatile AS TYPE *)p); \ } #ifdef cl_khr_global_int32_base_atomics @@ -24,19 +28,11 @@ __CLC_IMPL(local, int) __CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_base_atomics -#undef __CLC_IMPL - #ifdef cl_khr_int64_base_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_dec(volatile AS TYPE *p) { \ - return atom_sub(p, (TYPE)1); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_base_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_inc.cl b/libclc/opencl/lib/generic/atomic/atom_inc.cl index f881b3a3caa6d..6ce157b757376 100644 --- a/libclc/opencl/lib/generic/atomic/atom_inc.cl +++ b/libclc/opencl/lib/generic/atomic/atom_inc.cl @@ -6,13 +6,17 @@ // //===----------------------------------------------------------------------===// -#include <clc/opencl/atomic/atom_add.h> +#include <clc/atomic/clc_atomic_inc.h> #include <clc/opencl/atomic/atom_inc.h> -#include <clc/opencl/atomic/atomic_inc.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_inc(volatile AS TYPE *p) { \ - return atomic_inc(p); \ + return __clc_atomic_inc(p, __ATOMIC_RELAXED, __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_inc(AS TYPE *p) { \ + return atom_inc((volatile AS TYPE *)p); \ } #ifdef cl_khr_global_int32_base_atomics @@ -24,19 +28,11 @@ __CLC_IMPL(local, int) __CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_base_atomics -#undef __CLC_IMPL - #ifdef cl_khr_int64_base_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_inc(volatile AS TYPE *p) { \ - return atom_add(p, (TYPE)1); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_base_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_max.cl b/libclc/opencl/lib/generic/atomic/atom_max.cl index 83b532ac19a1e..0bb99841ee61a 100644 --- a/libclc/opencl/lib/generic/atomic/atom_max.cl +++ b/libclc/opencl/lib/generic/atomic/atom_max.cl @@ -6,40 +6,35 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_max.h> #include <clc/opencl/atomic/atom_max.h> -#include <clc/opencl/atomic/atomic_max.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. + +#define __CLC_IMPL(AS, TYPE) \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_max(volatile AS TYPE *p, TYPE val) { \ + return __clc_atomic_fetch_max(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_max(AS TYPE *p, TYPE val) { \ + return atom_max((volatile AS TYPE *)p, val); \ + } #ifdef cl_khr_global_int32_extended_atomics -#define __CLC_ATOMIC_OP max -#define __CLC_ATOMIC_ADDRESS_SPACE global -#include "atom_int32_binary.inc" +__CLC_IMPL(global, int) +__CLC_IMPL(global, unsigned int) #endif // cl_khr_global_int32_extended_atomics #ifdef cl_khr_local_int32_extended_atomics -#define __CLC_ATOMIC_OP max -#define __CLC_ATOMIC_ADDRESS_SPACE local -#include "atom_int32_binary.inc" +__CLC_IMPL(local, int) +__CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_extended_atomics #ifdef cl_khr_int64_extended_atomics -unsigned long __clc__sync_fetch_and_max_local_8(volatile local long *, long); -unsigned long __clc__sync_fetch_and_max_global_8(volatile global long *, long); -unsigned long __clc__sync_fetch_and_umax_local_8(volatile local unsigned long *, - unsigned long); -unsigned long -__clc__sync_fetch_and_umax_global_8(volatile global unsigned long *, - unsigned long); - -#define __CLC_IMPL(AS, TYPE, OP) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_max(volatile AS TYPE *p, TYPE val) { \ - return __clc__sync_fetch_and_##OP##_##AS##_8(p, val); \ - } - -__CLC_IMPL(global, long, max) -__CLC_IMPL(global, unsigned long, umax) -__CLC_IMPL(local, long, max) -__CLC_IMPL(local, unsigned long, umax) -#undef __CLC_IMPL +__CLC_IMPL(global, long) +__CLC_IMPL(global, unsigned long) +__CLC_IMPL(local, long) +__CLC_IMPL(local, unsigned long) #endif // cl_khr_int64_extended_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_min.cl b/libclc/opencl/lib/generic/atomic/atom_min.cl index b52e34769cdd8..5e210ca8fa46b 100644 --- a/libclc/opencl/lib/generic/atomic/atom_min.cl +++ b/libclc/opencl/lib/generic/atomic/atom_min.cl @@ -6,40 +6,35 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_min.h> #include <clc/opencl/atomic/atom_min.h> -#include <clc/opencl/atomic/atomic_min.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. + +#define __CLC_IMPL(AS, TYPE) \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_min(volatile AS TYPE *p, TYPE val) { \ + return __clc_atomic_fetch_min(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_min(AS TYPE *p, TYPE val) { \ + return atom_min((volatile AS TYPE *)p, val); \ + } #ifdef cl_khr_global_int32_extended_atomics -#define __CLC_ATOMIC_OP min -#define __CLC_ATOMIC_ADDRESS_SPACE global -#include "atom_int32_binary.inc" +__CLC_IMPL(global, int) +__CLC_IMPL(global, unsigned int) #endif // cl_khr_global_int32_extended_atomics #ifdef cl_khr_local_int32_extended_atomics -#define __CLC_ATOMIC_OP min -#define __CLC_ATOMIC_ADDRESS_SPACE local -#include "atom_int32_binary.inc" +__CLC_IMPL(local, int) +__CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_extended_atomics #ifdef cl_khr_int64_extended_atomics -unsigned long __clc__sync_fetch_and_min_local_8(volatile local long *, long); -unsigned long __clc__sync_fetch_and_min_global_8(volatile global long *, long); -unsigned long __clc__sync_fetch_and_umin_local_8(volatile local unsigned long *, - unsigned long); -unsigned long -__clc__sync_fetch_and_umin_global_8(volatile global unsigned long *, - unsigned long); - -#define __CLC_IMPL(AS, TYPE, OP) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_min(volatile AS TYPE *p, TYPE val) { \ - return __clc__sync_fetch_and_##OP##_##AS##_8(p, val); \ - } - -__CLC_IMPL(global, long, min) -__CLC_IMPL(global, unsigned long, umin) -__CLC_IMPL(local, long, min) -__CLC_IMPL(local, unsigned long, umin) -#undef __CLC_IMPL +__CLC_IMPL(global, long) +__CLC_IMPL(global, unsigned long) +__CLC_IMPL(local, long) +__CLC_IMPL(local, unsigned long) #endif // cl_khr_int64_extended_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_or.cl b/libclc/opencl/lib/generic/atomic/atom_or.cl index fa9737f5f28ee..f0e8d93e38ce7 100644 --- a/libclc/opencl/lib/generic/atomic/atom_or.cl +++ b/libclc/opencl/lib/generic/atomic/atom_or.cl @@ -6,32 +6,35 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_or.h> #include <clc/opencl/atomic/atom_or.h> -#include <clc/opencl/atomic/atomic_or.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. + +#define __CLC_IMPL(AS, TYPE) \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_or(volatile AS TYPE *p, TYPE val) { \ + return __clc_atomic_fetch_or(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_or(AS TYPE *p, TYPE val) { \ + return atom_or((volatile AS TYPE *)p, val); \ + } #ifdef cl_khr_global_int32_extended_atomics -#define __CLC_ATOMIC_OP or -#define __CLC_ATOMIC_ADDRESS_SPACE global -#include "atom_int32_binary.inc" +__CLC_IMPL(global, int) +__CLC_IMPL(global, unsigned int) #endif // cl_khr_global_int32_extended_atomics #ifdef cl_khr_local_int32_extended_atomics -#define __CLC_ATOMIC_OP or -#define __CLC_ATOMIC_ADDRESS_SPACE local -#include "atom_int32_binary.inc" +__CLC_IMPL(local, int) +__CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_extended_atomics #ifdef cl_khr_int64_extended_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_or(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_or_8(p, val); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_extended_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_sub.cl b/libclc/opencl/lib/generic/atomic/atom_sub.cl index 9a8acfa9116b8..0061554d19d9f 100644 --- a/libclc/opencl/lib/generic/atomic/atom_sub.cl +++ b/libclc/opencl/lib/generic/atomic/atom_sub.cl @@ -6,32 +6,35 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_sub.h> #include <clc/opencl/atomic/atom_sub.h> -#include <clc/opencl/atomic/atomic_sub.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. + +#define __CLC_IMPL(AS, TYPE) \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_sub(volatile AS TYPE *p, TYPE val) { \ + return __clc_atomic_fetch_sub(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_sub(AS TYPE *p, TYPE val) { \ + return atom_sub((volatile AS TYPE *)p, val); \ + } #ifdef cl_khr_global_int32_base_atomics -#define __CLC_ATOMIC_OP sub -#define __CLC_ATOMIC_ADDRESS_SPACE global -#include "atom_int32_binary.inc" +__CLC_IMPL(global, int) +__CLC_IMPL(global, unsigned int) #endif // cl_khr_global_int32_base_atomics #ifdef cl_khr_local_int32_base_atomics -#define __CLC_ATOMIC_OP sub -#define __CLC_ATOMIC_ADDRESS_SPACE local -#include "atom_int32_binary.inc" +__CLC_IMPL(local, int) +__CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_base_atomics #ifdef cl_khr_int64_base_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_sub(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_sub_8(p, val); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_base_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_xchg.cl b/libclc/opencl/lib/generic/atomic/atom_xchg.cl index 03f8a9c466c5f..2001245f50fd5 100644 --- a/libclc/opencl/lib/generic/atomic/atom_xchg.cl +++ b/libclc/opencl/lib/generic/atomic/atom_xchg.cl @@ -6,32 +6,35 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_exchange.h> #include <clc/opencl/atomic/atom_xchg.h> -#include <clc/opencl/atomic/atomic_xchg.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. + +#define __CLC_IMPL(AS, TYPE) \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_xchg(volatile AS TYPE *p, TYPE val) { \ + return __clc_atomic_exchange(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_xchg(AS TYPE *p, TYPE val) { \ + return atom_xchg((volatile AS TYPE *)p, val); \ + } #ifdef cl_khr_global_int32_base_atomics -#define __CLC_ATOMIC_OP xchg -#define __CLC_ATOMIC_ADDRESS_SPACE global -#include "atom_int32_binary.inc" +__CLC_IMPL(global, int) +__CLC_IMPL(global, unsigned int) #endif // cl_khr_global_int32_base_atomics #ifdef cl_khr_local_int32_base_atomics -#define __CLC_ATOMIC_OP xchg -#define __CLC_ATOMIC_ADDRESS_SPACE local -#include "atom_int32_binary.inc" +__CLC_IMPL(local, int) +__CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_base_atomics #ifdef cl_khr_int64_base_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_xchg(volatile AS TYPE *p, TYPE val) { \ - return __sync_swap_8(p, val); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_base_atomics diff --git a/libclc/opencl/lib/generic/atomic/atom_xor.cl b/libclc/opencl/lib/generic/atomic/atom_xor.cl index 392a4b794c698..359a1f4d4a932 100644 --- a/libclc/opencl/lib/generic/atomic/atom_xor.cl +++ b/libclc/opencl/lib/generic/atomic/atom_xor.cl @@ -6,32 +6,35 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_xor.h> #include <clc/opencl/atomic/atom_xor.h> -#include <clc/opencl/atomic/atomic_xor.h> + +// Non-volatile overloads is for backward compatibility with OpenCL 1.0. + +#define __CLC_IMPL(AS, TYPE) \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_xor(volatile AS TYPE *p, TYPE val) { \ + return __clc_atomic_fetch_xor(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ + } \ + _CLC_OVERLOAD _CLC_DEF TYPE atom_xor(AS TYPE *p, TYPE val) { \ + return atom_xor((volatile AS TYPE *)p, val); \ + } #ifdef cl_khr_global_int32_extended_atomics -#define __CLC_ATOMIC_OP xor -#define __CLC_ATOMIC_ADDRESS_SPACE global -#include "atom_int32_binary.inc" +__CLC_IMPL(global, int) +__CLC_IMPL(global, unsigned int) #endif // cl_khr_global_int32_extended_atomics #ifdef cl_khr_local_int32_extended_atomics -#define __CLC_ATOMIC_OP xor -#define __CLC_ATOMIC_ADDRESS_SPACE local -#include "atom_int32_binary.inc" +__CLC_IMPL(local, int) +__CLC_IMPL(local, unsigned int) #endif // cl_khr_local_int32_extended_atomics #ifdef cl_khr_int64_extended_atomics -#define __CLC_IMPL(AS, TYPE) \ - _CLC_OVERLOAD _CLC_DEF TYPE atom_xor(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_xor_8(p, val); \ - } - __CLC_IMPL(global, long) __CLC_IMPL(global, unsigned long) __CLC_IMPL(local, long) __CLC_IMPL(local, unsigned long) -#undef __CLC_IMPL #endif // cl_khr_int64_extended_atomics diff --git a/libclc/opencl/lib/generic/atomic/atomic_add.cl b/libclc/opencl/lib/generic/atomic/atomic_add.cl index d005c1dd6ac51..5501d30544e7c 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_add.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_add.cl @@ -6,11 +6,13 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_add.h> #include <clc/opencl/atomic/atomic_add.h> #define __CLC_IMPL(TYPE, AS) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_add(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_add(p, val); \ + return __clc_atomic_fetch_add(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global) diff --git a/libclc/opencl/lib/generic/atomic/atomic_and.cl b/libclc/opencl/lib/generic/atomic/atomic_and.cl index 12558568b0e4e..ce1adbb6f8235 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_and.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_and.cl @@ -6,11 +6,13 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_and.h> #include <clc/opencl/atomic/atomic_and.h> #define __CLC_IMPL(TYPE, AS) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_and(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_and(p, val); \ + return __clc_atomic_fetch_and(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global) diff --git a/libclc/opencl/lib/generic/atomic/atomic_cmpxchg.cl b/libclc/opencl/lib/generic/atomic/atomic_cmpxchg.cl index 1045020a553fc..16a8db43e9374 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_cmpxchg.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_cmpxchg.cl @@ -6,12 +6,15 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_compare_exchange.h> #include <clc/opencl/atomic/atomic_cmpxchg.h> #define __CLC_IMPL(TYPE, AS) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_cmpxchg(volatile AS TYPE *p, TYPE cmp, \ TYPE val) { \ - return __sync_val_compare_and_swap(p, cmp, val); \ + return __clc_atomic_compare_exchange(p, cmp, val, __ATOMIC_RELAXED, \ + __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global) diff --git a/libclc/opencl/lib/generic/atomic/atomic_max.cl b/libclc/opencl/lib/generic/atomic/atomic_max.cl index aa482a8f46397..362a0ed90ca0e 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_max.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_max.cl @@ -6,11 +6,13 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_max.h> #include <clc/opencl/atomic/atomic_max.h> #define __CLC_IMPL(TYPE, AS, OP) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_max(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_##OP(p, val); \ + return __clc_atomic_fetch_max(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global, max) diff --git a/libclc/opencl/lib/generic/atomic/atomic_min.cl b/libclc/opencl/lib/generic/atomic/atomic_min.cl index 7f39e94316846..1976be0014d70 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_min.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_min.cl @@ -6,11 +6,13 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_min.h> #include <clc/opencl/atomic/atomic_min.h> #define __CLC_IMPL(TYPE, AS, OP) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_min(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_##OP(p, val); \ + return __clc_atomic_fetch_min(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global, min) diff --git a/libclc/opencl/lib/generic/atomic/atomic_or.cl b/libclc/opencl/lib/generic/atomic/atomic_or.cl index ad14cd2178555..ef8bc00f45593 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_or.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_or.cl @@ -6,11 +6,13 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_or.h> #include <clc/opencl/atomic/atomic_or.h> #define __CLC_IMPL(TYPE, AS) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_or(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_or(p, val); \ + return __clc_atomic_fetch_or(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global) diff --git a/libclc/opencl/lib/generic/atomic/atomic_sub.cl b/libclc/opencl/lib/generic/atomic/atomic_sub.cl index 2e51c4c2ce02f..397737d113c0d 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_sub.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_sub.cl @@ -6,11 +6,13 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_sub.h> #include <clc/opencl/atomic/atomic_sub.h> #define __CLC_IMPL(TYPE, AS) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_sub(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_sub(p, val); \ + return __clc_atomic_fetch_sub(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global) diff --git a/libclc/opencl/lib/generic/atomic/atomic_xchg.cl b/libclc/opencl/lib/generic/atomic/atomic_xchg.cl index 2585a5427392e..2b4bbf06d9400 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_xchg.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_xchg.cl @@ -6,24 +6,19 @@ // //===----------------------------------------------------------------------===// -#include <clc/opencl/as_type.h> +#include <clc/atomic/clc_atomic_exchange.h> #include <clc/opencl/atomic/atomic_xchg.h> -_CLC_OVERLOAD _CLC_DEF float atomic_xchg(volatile global float *p, float val) { - return as_float(atomic_xchg((volatile global uint *)p, as_uint(val))); -} - -_CLC_OVERLOAD _CLC_DEF float atomic_xchg(volatile local float *p, float val) { - return as_float(atomic_xchg((volatile local uint *)p, as_uint(val))); -} - #define __CLC_IMPL(TYPE, AS) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_xchg(volatile AS TYPE *p, TYPE val) { \ - return __sync_swap_4(p, val); \ + return __clc_atomic_exchange(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global) __CLC_IMPL(unsigned int, global) +__CLC_IMPL(float, global) __CLC_IMPL(int, local) __CLC_IMPL(unsigned int, local) +__CLC_IMPL(float, local) #undef __CLC_IMPL diff --git a/libclc/opencl/lib/generic/atomic/atomic_xor.cl b/libclc/opencl/lib/generic/atomic/atomic_xor.cl index 0228134397464..1f200c58edbff 100644 --- a/libclc/opencl/lib/generic/atomic/atomic_xor.cl +++ b/libclc/opencl/lib/generic/atomic/atomic_xor.cl @@ -6,11 +6,13 @@ // //===----------------------------------------------------------------------===// +#include <clc/atomic/clc_atomic_fetch_xor.h> #include <clc/opencl/atomic/atomic_xor.h> #define __CLC_IMPL(TYPE, AS) \ _CLC_OVERLOAD _CLC_DEF TYPE atomic_xor(volatile AS TYPE *p, TYPE val) { \ - return __sync_fetch_and_xor(p, val); \ + return __clc_atomic_fetch_xor(p, val, __ATOMIC_RELAXED, \ + __MEMORY_SCOPE_DEVICE); \ } __CLC_IMPL(int, global) >From ae7fd0602361ca16a4fd750c426272d91f9d9ff3 Mon Sep 17 00:00:00 2001 From: Wenju He <[email protected]> Date: Mon, 17 Nov 2025 09:00:48 +0100 Subject: [PATCH 2/2] update comment --- libclc/opencl/lib/generic/atomic/atom_add.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_and.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_dec.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_inc.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_max.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_min.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_or.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_sub.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_xchg.cl | 2 +- libclc/opencl/lib/generic/atomic/atom_xor.cl | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/libclc/opencl/lib/generic/atomic/atom_add.cl b/libclc/opencl/lib/generic/atomic/atom_add.cl index 7962b1d68a8ad..368bbb790fd88 100644 --- a/libclc/opencl/lib/generic/atomic/atom_add.cl +++ b/libclc/opencl/lib/generic/atomic/atom_add.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_fetch_add.h> #include <clc/opencl/atomic/atom_add.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_add(volatile AS TYPE *p, TYPE val) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_and.cl b/libclc/opencl/lib/generic/atomic/atom_and.cl index 38f410f8f9705..ffcc5bffaafac 100644 --- a/libclc/opencl/lib/generic/atomic/atom_and.cl +++ b/libclc/opencl/lib/generic/atomic/atom_and.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_fetch_and.h> #include <clc/opencl/atomic/atom_and.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_and(volatile AS TYPE *p, TYPE val) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl b/libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl index 652ab335165e0..2e72ec529c45e 100644 --- a/libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl +++ b/libclc/opencl/lib/generic/atomic/atom_cmpxchg.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_compare_exchange.h> #include <clc/opencl/atomic/atom_cmpxchg.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_cmpxchg(volatile AS TYPE *p, TYPE cmp, \ diff --git a/libclc/opencl/lib/generic/atomic/atom_dec.cl b/libclc/opencl/lib/generic/atomic/atom_dec.cl index 69391d4fe7382..a1c7e58ef9e03 100644 --- a/libclc/opencl/lib/generic/atomic/atom_dec.cl +++ b/libclc/opencl/lib/generic/atomic/atom_dec.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_dec.h> #include <clc/opencl/atomic/atom_dec.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_dec(volatile AS TYPE *p) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_inc.cl b/libclc/opencl/lib/generic/atomic/atom_inc.cl index 6ce157b757376..f3636d85693b8 100644 --- a/libclc/opencl/lib/generic/atomic/atom_inc.cl +++ b/libclc/opencl/lib/generic/atomic/atom_inc.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_inc.h> #include <clc/opencl/atomic/atom_inc.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_inc(volatile AS TYPE *p) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_max.cl b/libclc/opencl/lib/generic/atomic/atom_max.cl index 0bb99841ee61a..c2095ec36ba1e 100644 --- a/libclc/opencl/lib/generic/atomic/atom_max.cl +++ b/libclc/opencl/lib/generic/atomic/atom_max.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_fetch_max.h> #include <clc/opencl/atomic/atom_max.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_max(volatile AS TYPE *p, TYPE val) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_min.cl b/libclc/opencl/lib/generic/atomic/atom_min.cl index 5e210ca8fa46b..6360d018d1e90 100644 --- a/libclc/opencl/lib/generic/atomic/atom_min.cl +++ b/libclc/opencl/lib/generic/atomic/atom_min.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_fetch_min.h> #include <clc/opencl/atomic/atom_min.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_min(volatile AS TYPE *p, TYPE val) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_or.cl b/libclc/opencl/lib/generic/atomic/atom_or.cl index f0e8d93e38ce7..ad28aa436de8c 100644 --- a/libclc/opencl/lib/generic/atomic/atom_or.cl +++ b/libclc/opencl/lib/generic/atomic/atom_or.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_fetch_or.h> #include <clc/opencl/atomic/atom_or.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_or(volatile AS TYPE *p, TYPE val) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_sub.cl b/libclc/opencl/lib/generic/atomic/atom_sub.cl index 0061554d19d9f..9daaa1b3ce154 100644 --- a/libclc/opencl/lib/generic/atomic/atom_sub.cl +++ b/libclc/opencl/lib/generic/atomic/atom_sub.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_fetch_sub.h> #include <clc/opencl/atomic/atom_sub.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_sub(volatile AS TYPE *p, TYPE val) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_xchg.cl b/libclc/opencl/lib/generic/atomic/atom_xchg.cl index 2001245f50fd5..5b75873f29760 100644 --- a/libclc/opencl/lib/generic/atomic/atom_xchg.cl +++ b/libclc/opencl/lib/generic/atomic/atom_xchg.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_exchange.h> #include <clc/opencl/atomic/atom_xchg.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_xchg(volatile AS TYPE *p, TYPE val) { \ diff --git a/libclc/opencl/lib/generic/atomic/atom_xor.cl b/libclc/opencl/lib/generic/atomic/atom_xor.cl index 359a1f4d4a932..21aba01267e18 100644 --- a/libclc/opencl/lib/generic/atomic/atom_xor.cl +++ b/libclc/opencl/lib/generic/atomic/atom_xor.cl @@ -9,7 +9,7 @@ #include <clc/atomic/clc_atomic_fetch_xor.h> #include <clc/opencl/atomic/atom_xor.h> -// Non-volatile overloads is for backward compatibility with OpenCL 1.0. +// Non-volatile overloads are for backward compatibility with OpenCL 1.0. #define __CLC_IMPL(AS, TYPE) \ _CLC_OVERLOAD _CLC_DEF TYPE atom_xor(volatile AS TYPE *p, TYPE val) { \ _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
