Skip to content

Commit 28024fc

Browse files
SM60 supports scope on atom.cas
1 parent 6b2e54c commit 28024fc

File tree

3 files changed

+10015
-4329
lines changed

3 files changed

+10015
-4329
lines changed

llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ unsigned int NVPTXDAGToDAGISel::getMemOrder(const MemSDNode *N) const {
543543

544544
unsigned int NVPTXDAGToDAGISel::getAtomicScope(const MemSDNode *N) const {
545545
// No "scope" modifier for SM/PTX versions which do not support scoped atomics
546-
if (!Subtarget->hasAtomScope() || !Subtarget->hasMemoryOrdering())
546+
if (!Subtarget->hasAtomScope())
547547
return NVPTX::Scope::Thread;
548548
return Scopes[N->getSyncScopeID()];
549549
}

llvm/test/CodeGen/NVPTX/atomicrmw-expand.ll

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,21 +93,26 @@ entry:
9393
%3 = atomicrmw or ptr %0, i8 %1 monotonic, align 1
9494
; ALL: atom.xor.b32
9595
%4 = atomicrmw xor ptr %0, i8 %1 monotonic, align 1
96-
; ALL: atom.cas.b32
96+
; SM30: atom.cas.b32
97+
; SM60: atom.sys.cas.b32
9798
%5 = atomicrmw xchg ptr %0, i8 %1 monotonic, align 1
9899
ret void
99100
}
100101

101102
; CHECK-LABEL: minmax_i8
102103
define void @minmax_i8(ptr %0, i8 %1) {
103104
entry:
104-
; ALL: atom.cas.b32
105+
; SM30: atom.cas.b32
106+
; SM60: atom.sys.cas.b32
105107
%2 = atomicrmw min ptr %0, i8 %1 monotonic, align 1
106-
; ALL: atom.cas.b32
108+
; SM30: atom.cas.b32
109+
; SM60: atom.sys.cas.b32
107110
%3 = atomicrmw max ptr %0, i8 %1 monotonic, align 1
108-
; ALL: atom.cas.b32
111+
; SM30: atom.cas.b32
112+
; SM60: atom.sys.cas.b32
109113
%4 = atomicrmw umin ptr %0, i8 %1 monotonic, align 1
110-
; ALL: atom.cas.b32
114+
; SM30: atom.cas.b32
115+
; SM60: atom.sys.cas.b32
111116
%5 = atomicrmw umax ptr %0, i8 %1 monotonic, align 1
112117
ret void
113118
}
@@ -121,21 +126,26 @@ entry:
121126
%3 = atomicrmw or ptr %0, i16 %1 monotonic, align 2
122127
; ALL: atom.xor.b32
123128
%4 = atomicrmw xor ptr %0, i16 %1 monotonic, align 2
124-
; ALL: atom.cas.b32
129+
; SM30: atom.cas.b32
130+
; SM60: atom.sys.cas.b32
125131
%5 = atomicrmw xchg ptr %0, i16 %1 monotonic, align 2
126132
ret void
127133
}
128134

129135
; CHECK-LABEL: minmax_i16
130136
define void @minmax_i16(ptr %0, i16 %1) {
131137
entry:
132-
; ALL: atom.cas.b32
138+
; SM30: atom.cas.b32
139+
; SM60: atom.sys.cas.b32
133140
%2 = atomicrmw min ptr %0, i16 %1 monotonic, align 2
134-
; ALL: atom.cas.b32
141+
; SM30: atom.cas.b32
142+
; SM60: atom.sys.cas.b32
135143
%3 = atomicrmw max ptr %0, i16 %1 monotonic, align 2
136-
; ALL: atom.cas.b32
144+
; SM30: atom.cas.b32
145+
; SM60: atom.sys.cas.b32
137146
%4 = atomicrmw umin ptr %0, i16 %1 monotonic, align 2
138-
; ALL: atom.cas.b32
147+
; SM30: atom.cas.b32
148+
; SM60: atom.sys.cas.b32
139149
%5 = atomicrmw umax ptr %0, i16 %1 monotonic, align 2
140150
ret void
141151
}

0 commit comments

Comments
 (0)