[llvm] [NVPTX] Add syncscope support for cmpxchg (PR #140812)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 15 02:48:23 PDT 2025


================
@@ -508,11 +508,40 @@ static std::optional<unsigned> convertAS(unsigned AS) {
   }
 }
 
-static unsigned int getCodeAddrSpace(const MemSDNode *N) {
+NVPTX::AddressSpace NVPTXDAGToDAGISel::getAddrSpace(const MemSDNode *N) {
   return convertAS(N->getMemOperand()->getAddrSpace())
       .value_or(NVPTX::AddressSpace::Generic);
 }
 
+NVPTX::Ordering NVPTXDAGToDAGISel::getMemOrder(const MemSDNode *N) const {
+  // No "sem" orderings for SM/PTX versions which do not support memory ordering
+  if (!Subtarget->hasMemoryOrdering())
+    return NVPTX::Ordering::NotAtomic;
+  auto Ordering = N->getMergedOrdering();
+  switch (Ordering) {
+  case AtomicOrdering::NotAtomic:
+  case AtomicOrdering::Unordered:
+    return NVPTX::Ordering::NotAtomic;
----------------
gonzalobg wrote:

We don't have a precise definition of what LLVM IR `Unordered` means, but the goal is for it to mean something in between LLVM `NotAtomic` and LLVM `Relaxed`. 

PTX `.weak` is probably not strong enough, so we should use PTX `.relaxed` here instead.

https://github.com/llvm/llvm-project/pull/140812


More information about the llvm-commits mailing list