Skip to content

Commit 8d1eb2e

Browse files
committed
[NVPTX] Align Memory Ordering enum with LLVM
1 parent 93b5524 commit 8d1eb2e

File tree

3 files changed

+133
-75
lines changed

3 files changed

+133
-75
lines changed

llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXInstPrinter.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -228,37 +228,41 @@ void NVPTXInstPrinter::printLdStCode(const MCInst *MI, int OpNum,
228228
const MCOperand &MO = MI->getOperand(OpNum);
229229
int Imm = (int) MO.getImm();
230230
if (!strcmp(Modifier, "sem")) {
231-
switch (Imm) {
232-
case NVPTX::PTXLdStInstCode::NotAtomic:
231+
auto ordering =
232+
NVPTX::Ordering(static_cast<NVPTX::OrderingUnderlyingType>(Imm));
233+
switch (ordering) {
234+
case NVPTX::Ordering::NotAtomic:
233235
break;
234-
case NVPTX::PTXLdStInstCode::Volatile:
236+
case NVPTX::Ordering::Volatile:
235237
O << ".volatile";
236238
break;
237-
case NVPTX::PTXLdStInstCode::Relaxed:
239+
case NVPTX::Ordering::Relaxed:
238240
O << ".relaxed.sys";
239241
break;
240-
case NVPTX::PTXLdStInstCode::Acquire:
242+
case NVPTX::Ordering::Acquire:
241243
O << ".acquire.sys";
242244
break;
243-
case NVPTX::PTXLdStInstCode::Release:
245+
case NVPTX::Ordering::Release:
244246
O << ".release.sys";
245247
break;
246-
case NVPTX::PTXLdStInstCode::RelaxedMMIO:
248+
case NVPTX::Ordering::RelaxedMMIO:
247249
O << ".mmio.relaxed.sys";
248250
break;
249251
default:
250252
SmallString<256> Msg;
251253
raw_svector_ostream OS(Msg);
252-
OS << "NVPTX LdStCode Printer does not support \"" << Imm
254+
OS << "NVPTX LdStCode Printer does not support \"" << ordering
253255
<< "\" sem modifier.";
254256
report_fatal_error(OS.str());
255257
break;
256258
}
257259
} else if (!strcmp(Modifier, "sc")) {
258-
switch (Imm) {
260+
auto ordering =
261+
NVPTX::Ordering(static_cast<NVPTX::OrderingUnderlyingType>(Imm));
262+
switch (ordering) {
259263
// TODO: refactor fence insertion in ISelDagToDag instead of here
260264
// as part of implementing atomicrmw seq_cst.
261-
case NVPTX::PTXLdStInstCode::SeqCstFence:
265+
case NVPTX::Ordering::SequentiallyConsistent:
262266
O << "fence.sc.sys;\n\t";
263267
break;
264268
default:

llvm/lib/Target/NVPTX/NVPTX.h

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -106,16 +106,53 @@ enum LoadStore {
106106
isStoreShift = 6
107107
};
108108

109-
namespace PTXLdStInstCode {
110-
enum MemorySemantic {
109+
// Extends LLVM AtomicOrdering with PTX Orderings:
110+
using OrderingUnderlyingType = unsigned int;
111+
enum class Ordering : OrderingUnderlyingType {
111112
NotAtomic = 0, // PTX calls these: "Weak"
112-
Volatile = 1,
113+
// Unordered = 1, // TODO: NVPTX should map this to "Relaxed"
113114
Relaxed = 2,
114-
Acquire = 3,
115-
Release = 4,
116-
RelaxedMMIO = 5,
117-
SeqCstFence = 6,
115+
// Consume = 3, // Unimplemented in LLVM; NVPTX would map to "Acquire"
116+
Acquire = 4,
117+
Release = 5,
118+
// AcquireRelease = 6, // TODO
119+
SequentiallyConsistent = 7,
120+
Volatile = 8,
121+
RelaxedMMIO = 9,
122+
LAST = RelaxedMMIO
118123
};
124+
125+
template <typename OStream> OStream &operator<<(OStream &os, Ordering order) {
126+
switch (order) {
127+
case Ordering::NotAtomic:
128+
os << "NotAtomic";
129+
return os;
130+
case Ordering::Relaxed:
131+
os << "Relaxed";
132+
return os;
133+
case Ordering::Acquire:
134+
os << "Acquire";
135+
return os;
136+
case Ordering::Release:
137+
os << "Release";
138+
return os;
139+
// case Ordering::AcquireRelease:
140+
// os << "AcquireRelease";
141+
// return os;
142+
case Ordering::SequentiallyConsistent:
143+
os << "SequentiallyConsistent";
144+
return os;
145+
case Ordering::Volatile:
146+
os << "Volatile";
147+
return os;
148+
case Ordering::RelaxedMMIO:
149+
os << "RelaxedMMIO";
150+
return os;
151+
}
152+
report_fatal_error("unknown ordering");
153+
}
154+
155+
namespace PTXLdStInstCode {
119156
enum AddressSpace {
120157
GENERIC = 0,
121158
GLOBAL = 1,
@@ -135,7 +172,7 @@ enum VecType {
135172
V2 = 2,
136173
V4 = 4
137174
};
138-
}
175+
} // namespace PTXLdStInstCode
139176

140177
/// PTXCvtMode - Conversion code enumeration
141178
namespace PTXCvtMode {

0 commit comments

Comments
 (0)