[llvm] [NVPTX] Add syncscope support for cmpxchg (PR #140812)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 12 08:12:43 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;
+ case AtomicOrdering::Monotonic:
+ return NVPTX::Ordering::Relaxed;
+ case AtomicOrdering::Acquire:
+ return NVPTX::Ordering::Acquire;
+ case AtomicOrdering::Release:
+ return NVPTX::Ordering::Release;
+ case AtomicOrdering::AcquireRelease:
+ return NVPTX::Ordering::AcquireRelease;
+ case AtomicOrdering::SequentiallyConsistent:
+ return NVPTX::Ordering::SequentiallyConsistent;
+ }
+}
+
+NVPTX::Scope NVPTXDAGToDAGISel::getAtomicScope(const MemSDNode *N) const {
+ // No "scope" modifier for SM/PTX versions which do not support scoped atomics
+ if (!Subtarget->hasAtomScope())
+ return NVPTX::Scope::Thread;
----------------
gonzalobg wrote:
I think it may be better to add a `None` value to the `enum` instead.
`Thread` is what's produced from LLVM `syncscope("singlethread")`.
https://github.com/llvm/llvm-project/pull/140812
More information about the llvm-commits
mailing list