[llvm] [NVPTX] Add Volta Atomic SequentiallyConsistent Load and Store Operations (PR #98551)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 5 03:24:55 PDT 2024
================
@@ -106,15 +107,30 @@ enum LoadStore {
isStoreShift = 6
};
-namespace PTXLdStInstCode {
-enum MemorySemantic {
+// Extends LLVM AtomicOrdering with PTX Orderings:
+using OrderingUnderlyingType = unsigned int;
+enum Ordering : OrderingUnderlyingType {
NotAtomic = 0, // PTX calls these: "Weak"
- Volatile = 1,
+ // Unordered = 1, // NVPTX maps LLVM Unorderd to Relaxed
Relaxed = 2,
- Acquire = 3,
- Release = 4,
- RelaxedMMIO = 5
+ // Consume = 3, // Unimplemented in LLVM; NVPTX would map to "Acquire"
+ Acquire = 4,
+ Release = 5,
+ // AcquireRelease = 6, // TODO
+ SequentiallyConsistent = 7,
+ Volatile = 8,
+ RelaxedMMIO = 9,
+ LAST = RelaxedMMIO
};
+// Values match LLVM AtomicOrdering for common orderings:
+static_assert(Ordering::NotAtomic == (unsigned)AtomicOrdering::NotAtomic);
+static_assert(Ordering::Relaxed == (unsigned)AtomicOrdering::Monotonic);
+static_assert(Ordering::Acquire == (unsigned)AtomicOrdering::Acquire);
+static_assert(Ordering::Release == (unsigned)AtomicOrdering::Release);
+static_assert(Ordering::SequentiallyConsistent ==
+ (unsigned)AtomicOrdering::SequentiallyConsistent);
----------------
gonzalobg wrote:
Not sure I fully understand what you are asking for yet. Is something like this what you have in mind:
```
enum Ordering : OrderingUnderlyingType {
NotAtomic = AtomicOrdering::NotAtomic, // PTX calls these: "Weak"
// Unordered = AtomicOrdering::Unordered, // NVPTX maps LLVM Unorderd to Relaxed
Relaxed = AtomicOrdering::Monotonic,
Acquire = AtomicOrdering::Acquire,
Release = AtomicOrdering::Release,
// AcquireRelease = AtomicOrdering::AcquireRelease,
SequentiallyConsistent = AtomicOrdering::SequentiallyConsistent,
Volatile = SequentiallyConsistent + 1,
RelaxedMMIO = Volatile + 1,
LAST = RelaxedMMIO
};
```
?
https://github.com/llvm/llvm-project/pull/98551
More information about the llvm-commits
mailing list