Skip to content

Commit

Permalink
[NVPTX] Align Memory Ordering enum with LLVM
Browse files Browse the repository at this point in the history
  • Loading branch information
gonzalobg committed Jul 15, 2024
1 parent 0f1f96b commit 748d598
Show file tree
Hide file tree
Showing 3 changed files with 133 additions and 75 deletions.
24 changes: 14 additions & 10 deletions llvm/lib/Target/NVPTX/MCTargetDesc/NVPTXInstPrinter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,37 +228,41 @@ void NVPTXInstPrinter::printLdStCode(const MCInst *MI, int OpNum,
const MCOperand &MO = MI->getOperand(OpNum);
int Imm = (int) MO.getImm();
if (!strcmp(Modifier, "sem")) {
switch (Imm) {
case NVPTX::PTXLdStInstCode::NotAtomic:
auto ordering =
NVPTX::Ordering(static_cast<NVPTX::OrderingUnderlyingType>(Imm));
switch (ordering) {
case NVPTX::Ordering::NotAtomic:
break;
case NVPTX::PTXLdStInstCode::Volatile:
case NVPTX::Ordering::Volatile:
O << ".volatile";
break;
case NVPTX::PTXLdStInstCode::Relaxed:
case NVPTX::Ordering::Relaxed:
O << ".relaxed.sys";
break;
case NVPTX::PTXLdStInstCode::Acquire:
case NVPTX::Ordering::Acquire:
O << ".acquire.sys";
break;
case NVPTX::PTXLdStInstCode::Release:
case NVPTX::Ordering::Release:
O << ".release.sys";
break;
case NVPTX::PTXLdStInstCode::RelaxedMMIO:
case NVPTX::Ordering::RelaxedMMIO:
O << ".mmio.relaxed.sys";
break;
default:
SmallString<256> Msg;
raw_svector_ostream OS(Msg);
OS << "NVPTX LdStCode Printer does not support \"" << Imm
OS << "NVPTX LdStCode Printer does not support \"" << ordering
<< "\" sem modifier.";
report_fatal_error(OS.str());
break;
}
} else if (!strcmp(Modifier, "sc")) {
switch (Imm) {
auto ordering =
NVPTX::Ordering(static_cast<NVPTX::OrderingUnderlyingType>(Imm));
switch (ordering) {
// TODO: refactor fence insertion in ISelDagToDag instead of here
// as part of implementing atomicrmw seq_cst.
case NVPTX::PTXLdStInstCode::SeqCstFence:
case NVPTX::Ordering::SequentiallyConsistent:
O << "fence.sc.sys;\n\t";
break;
default:
Expand Down
53 changes: 45 additions & 8 deletions llvm/lib/Target/NVPTX/NVPTX.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,16 +106,53 @@ enum LoadStore {
isStoreShift = 6
};

namespace PTXLdStInstCode {
enum MemorySemantic {
// Extends LLVM AtomicOrdering with PTX Orderings:
using OrderingUnderlyingType = unsigned int;
enum class Ordering : OrderingUnderlyingType {
NotAtomic = 0, // PTX calls these: "Weak"
Volatile = 1,
// Unordered = 1, // TODO: NVPTX should map this to "Relaxed"
Relaxed = 2,
Acquire = 3,
Release = 4,
RelaxedMMIO = 5,
SeqCstFence = 6,
// 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
};

template <typename OStream> OStream &operator<<(OStream &os, Ordering order) {
switch (order) {
case Ordering::NotAtomic:
os << "NotAtomic";
return os;
case Ordering::Relaxed:
os << "Relaxed";
return os;
case Ordering::Acquire:
os << "Acquire";
return os;
case Ordering::Release:
os << "Release";
return os;
// case Ordering::AcquireRelease:
// os << "AcquireRelease";
// return os;
case Ordering::SequentiallyConsistent:
os << "SequentiallyConsistent";
return os;
case Ordering::Volatile:
os << "Volatile";
return os;
case Ordering::RelaxedMMIO:
os << "RelaxedMMIO";
return os;
}
report_fatal_error("unknown ordering");
}

namespace PTXLdStInstCode {
enum AddressSpace {
GENERIC = 0,
GLOBAL = 1,
Expand All @@ -135,7 +172,7 @@ enum VecType {
V2 = 2,
V4 = 4
};
}
} // namespace PTXLdStInstCode

/// PTXCvtMode - Conversion code enumeration
namespace PTXCvtMode {
Expand Down
Loading

0 comments on commit 748d598

Please sign in to comment.