[llvm] [OpenMP] Remove hack around missing atomic load (PR #122781)

Joseph Huber via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 13 12:06:42 PST 2025


https://github.com/jhuber6 created https://github.com/llvm/llvm-project/pull/122781

Summary:
We used to do a fetch add of zero to approximate a load. This is because
the NVPTX backend didn't handle this properly. It's not an issue anymore
so simply use the proper atomic builtin.


>From 17e55471e04b6c1e66c851436031c8308d013a06 Mon Sep 17 00:00:00 2001
From: Joseph Huber <huberjn at outlook.com>
Date: Mon, 13 Jan 2025 14:05:05 -0600
Subject: [PATCH] [OpenMP] Remove hack around missing atomic load

Summary:
We used to do a fetch add of zero to approximate a load. This is because
the NVPTX backend didn't handle this properly. It's not an issue anymore
so simply use the proper atomic builtin.
---
 offload/DeviceRTL/include/Synchronization.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/offload/DeviceRTL/include/Synchronization.h b/offload/DeviceRTL/include/Synchronization.h
index e1968675550d49..a4d4fc08837b29 100644
--- a/offload/DeviceRTL/include/Synchronization.h
+++ b/offload/DeviceRTL/include/Synchronization.h
@@ -66,7 +66,7 @@ V add(Ty *Address, V Val, atomic::OrderingTy Ordering) {
 
 template <typename Ty, typename V = utils::remove_addrspace_t<Ty>>
 V load(Ty *Address, atomic::OrderingTy Ordering) {
-  return add(Address, Ty(0), Ordering);
+  return __scoped_atomic_load_n(Address, Ordering, __MEMORY_SCOPE_DEVICE);
 }
 
 template <typename Ty, typename V = utils::remove_addrspace_t<Ty>>



More information about the llvm-commits mailing list