Skip to content

Commit ec2ce73

Browse files
committed
[NVPTX] Volta Relaxed/Acquire/Release and Volatile Load/Store Ops
1 parent dd73709 commit ec2ce73

File tree

6 files changed

+1829
-156
lines changed

6 files changed

+1829
-156
lines changed

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

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,9 +224,33 @@ void NVPTXInstPrinter::printLdStCode(const MCInst *MI, int OpNum,
224224
if (Modifier) {
225225
const MCOperand &MO = MI->getOperand(OpNum);
226226
int Imm = (int) MO.getImm();
227-
if (!strcmp(Modifier, "volatile")) {
228-
if (Imm)
227+
if (!strcmp(Modifier, "sem")) {
228+
switch (Imm) {
229+
case NVPTX::PTXLdStInstCode::NotAtomic:
230+
break;
231+
case NVPTX::PTXLdStInstCode::Volatile:
229232
O << ".volatile";
233+
break;
234+
case NVPTX::PTXLdStInstCode::Relaxed:
235+
O << ".relaxed.sys";
236+
break;
237+
case NVPTX::PTXLdStInstCode::Acquire:
238+
O << ".acquire.sys";
239+
break;
240+
case NVPTX::PTXLdStInstCode::Release:
241+
O << ".release.sys";
242+
break;
243+
case NVPTX::PTXLdStInstCode::RelaxedMMIO:
244+
O << ".mmio.relaxed.sys";
245+
break;
246+
default:
247+
SmallString<256> Msg;
248+
raw_svector_ostream OS(Msg);
249+
OS << "NVPTX LdStCode Printer does not support \"" << Imm
250+
<< "\" sem modifier.";
251+
report_fatal_error(OS.str());
252+
break;
253+
}
230254
} else if (!strcmp(Modifier, "addsp")) {
231255
switch (Imm) {
232256
case NVPTX::PTXLdStInstCode::GLOBAL:

llvm/lib/Target/NVPTX/NVPTX.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,14 @@ enum LoadStore {
107107
};
108108

109109
namespace PTXLdStInstCode {
110+
enum MemorySemantic {
111+
NotAtomic = 0, // PTX calls these: "Weak"
112+
Volatile = 1,
113+
Relaxed = 2,
114+
Acquire = 3,
115+
Release = 4,
116+
RelaxedMMIO = 5
117+
};
110118
enum AddressSpace {
111119
GENERIC = 0,
112120
GLOBAL = 1,

0 commit comments

Comments
 (0)