================
@@ -647,6 +647,14 @@ class LangOptions : public LangOptionsBase {
     return ConvergentFunctions;
   }
 
+  /// Return true if atomicrmw operations targeting allocations in private
+  /// memory are undefined.
+  bool threadPrivateMemoryAtomicsAreUndefined() const {
+    // Should be false for OpenMP.
+    // TODO: Should this be true for SYCL?
+    return OpenCL || CUDA;
----------------
gonzalobg wrote:

> @gonzalobg -- Does NVIDIA define what happens if atomics are used on local 
> address space?

I agree with @arsenm that this is a language property. In CUDA C++, just like 
in C++, the behavior of atomics to automatic variables is well-defined, e.g., 
this is ok:

```
__device__ void foo() {
   cuda::atomic<...> x(0);
   x.fetch_add(1); // OK
}
```

When compiling to PTX, however, `atom` requires global or shared statespaces 
(or generic to those).
That is, for local memory, LLVM must generate code that does not use `atom`.
But that's a problem for the LLVM NVPTX backend to solve.

https://github.com/llvm/llvm-project/pull/102462
_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to