[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 06:55:33 PDT 2026


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

>From 4c99177556caf9c386e7f1260cd1dcb6c9bf15f3 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 1/3] 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 e76bbaa26b503fac27a3811e7a53c0673c93fc46 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Wed, 25 Mar 2026 14:46:47 +0100
Subject: [PATCH 2/3] 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 412912c9a76884ed32a6e1be10162af4306e42c4 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Wed, 25 Mar 2026 14:55:13 +0100
Subject: [PATCH 3/3] 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) {



More information about the cfe-commits mailing list