Skip to content

Commit 5584b35

Browse files
committed
[NVPTX] Move atomics and MMIO detection to NVPTXSubtarget
1 parent 9487b09 commit 5584b35

File tree

2 files changed

+12
-11
lines changed

2 files changed

+12
-11
lines changed

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -719,12 +719,8 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
719719
AtomicOrdering Ordering = N->getSuccessOrdering();
720720
auto CodeAddrSpace = getCodeAddrSpace(N);
721721

722-
// Supports relaxed, acquire, release, weak:
723-
bool hasAtomics =
724-
Subtarget->getPTXVersion() >= 60 && Subtarget->getSmVersion() >= 70;
725-
// Supports mmio:
726-
bool hasRelaxedMMIO =
727-
Subtarget->getPTXVersion() >= 82 && Subtarget->getSmVersion() >= 70;
722+
bool HasMemoryOrdering = Subtarget->hasMemoryOrdering();
723+
bool HasRelaxedMMIO = Subtarget->hasRelaxedMMIO();
728724

729725
// TODO: lowering for SequentiallyConsistent Operations: for now, we error.
730726
// TODO: lowering for AcquireRelease Operations: for now, we error.
@@ -770,7 +766,7 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
770766
// sm_60 and older.
771767
if (!(Ordering == AtomicOrdering::NotAtomic ||
772768
Ordering == AtomicOrdering::Monotonic) &&
773-
!hasAtomics) {
769+
!HasMemoryOrdering) {
774770
SmallString<256> Msg;
775771
raw_svector_ostream OS(Msg);
776772
OS << "PTX does not support \"atomic\" for orderings different than"
@@ -783,7 +779,7 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
783779
// the volatile semantics and preserve the atomic ones. [4]: TODO: volatile
784780
// atomics with order stronger than relaxed are currently unimplemented in
785781
// sm_60 and older.
786-
if (!hasAtomics && N->isVolatile() &&
782+
if (!HasMemoryOrdering && N->isVolatile() &&
787783
!(Ordering == AtomicOrdering::NotAtomic ||
788784
Ordering == AtomicOrdering::Monotonic)) {
789785
SmallString<256> Msg;
@@ -804,7 +800,7 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
804800
CodeAddrSpace == NVPTX::PTXLdStInstCode::GLOBAL ||
805801
CodeAddrSpace == NVPTX::PTXLdStInstCode::SHARED);
806802
bool useRelaxedMMIO =
807-
hasRelaxedMMIO && CodeAddrSpace == NVPTX::PTXLdStInstCode::GLOBAL;
803+
HasRelaxedMMIO && CodeAddrSpace == NVPTX::PTXLdStInstCode::GLOBAL;
808804

809805
switch (Ordering) {
810806
case AtomicOrdering::NotAtomic:
@@ -817,7 +813,7 @@ static unsigned int getCodeMemorySemantic(MemSDNode *N,
817813
: addrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Volatile
818814
: NVPTX::PTXLdStInstCode::NotAtomic;
819815
else
820-
return hasAtomics ? NVPTX::PTXLdStInstCode::Relaxed
816+
return HasMemoryOrdering ? NVPTX::PTXLdStInstCode::Relaxed
821817
: addrGenericOrGlobalOrShared ? NVPTX::PTXLdStInstCode::Volatile
822818
: NVPTX::PTXLdStInstCode::NotAtomic;
823819
case AtomicOrdering::Acquire:

llvm/lib/Target/NVPTX/NVPTXSubtarget.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,18 @@ class NVPTXSubtarget : public NVPTXGenSubtargetInfo {
7878
bool hasAtomBitwise64() const { return SmVersion >= 32; }
7979
bool hasAtomMinMax64() const { return SmVersion >= 32; }
8080
bool hasLDG() const { return SmVersion >= 32; }
81-
inline bool hasHWROT32() const { return SmVersion >= 32; }
81+
bool hasHWROT32() const { return SmVersion >= 32; }
8282
bool hasImageHandles() const;
8383
bool hasFP16Math() const { return SmVersion >= 53; }
8484
bool hasBF16Math() const { return SmVersion >= 80; }
8585
bool allowFP16Math() const;
8686
bool hasMaskOperator() const { return PTXVersion >= 71; }
8787
bool hasNoReturn() const { return SmVersion >= 30 && PTXVersion >= 64; }
88+
// Does SM & PTX support memory orderings (weak and atomic: relaxed, acquire,
89+
// release, acq_rel, sc) ?
90+
bool hasMemoryOrdering() const { return SmVersion >= 70 && PTXVersion >= 60; }
91+
// Does SM & PTX support atomic relaxed MMIO operations ?
92+
bool hasRelaxedMMIO() const { return SmVersion >= 70 && PTXVersion >= 82; }
8893
unsigned int getFullSmVersion() const { return FullSmVersion; }
8994
unsigned int getSmVersion() const { return getFullSmVersion() / 10; }
9095
// GPUs with "a" suffix have include architecture-accelerated features that

0 commit comments

Comments
 (0)