[llvm-branch-commits] [DirectX] Simplify tablegen'd OpCode and OpClass enums (PR #101249)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Jul 30 14:56:30 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-directx
Author: Justin Bogner (bogner)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/101249.diff
2 Files Affected:
- (modified) llvm/lib/Target/DirectX/DXILConstants.h (+8-1)
- (modified) llvm/utils/TableGen/DXILEmitter.cpp (+21-28)
``````````diff
diff --git a/llvm/lib/Target/DirectX/DXILConstants.h b/llvm/lib/Target/DirectX/DXILConstants.h
index 78a641df8e6ec..0c9c1ac38fdbc 100644
--- a/llvm/lib/Target/DirectX/DXILConstants.h
+++ b/llvm/lib/Target/DirectX/DXILConstants.h
@@ -15,8 +15,15 @@
namespace llvm {
namespace dxil {
-#define DXIL_OP_ENUM
+enum class OpCode : unsigned {
+#define DXIL_OPCODE(Op, Name) Name = Op,
#include "DXILOperation.inc"
+};
+
+enum class OpCodeClass : unsigned {
+#define DXIL_OPCLASS(Name) Name,
+#include "DXILOperation.inc"
+};
} // namespace dxil
} // namespace llvm
diff --git a/llvm/utils/TableGen/DXILEmitter.cpp b/llvm/utils/TableGen/DXILEmitter.cpp
index 74c4fd50f37f0..2361fd286c976 100644
--- a/llvm/utils/TableGen/DXILEmitter.cpp
+++ b/llvm/utils/TableGen/DXILEmitter.cpp
@@ -429,34 +429,26 @@ static std::string getAttributeMaskString(const SmallVector<Record *> Recs) {
return MaskString;
}
-/// Emit Enums of DXIL Ops
-/// \param A vector of DXIL Ops
-/// \param Output stream
-static void emitDXILEnums(std::vector<DXILOperationDesc> &Ops,
- raw_ostream &OS) {
- OS << "#ifdef DXIL_OP_ENUM\n\n";
- OS << "// Enumeration for operations specified by DXIL\n";
- OS << "enum class OpCode : unsigned {\n";
-
- for (auto &Op : Ops) {
- // Name = ID, // Doc
- OS << Op.OpName << " = " << Op.OpCode << ", // " << Op.Doc << "\n";
- }
-
- OS << "\n};\n\n";
+/// Emit a mapping of DXIL opcode to opname
+static void emitDXILOpCodes(std::vector<DXILOperationDesc> &Ops,
+ raw_ostream &OS) {
+ OS << "#ifdef DXIL_OPCODE\n";
+ for (const DXILOperationDesc &Op : Ops)
+ OS << "DXIL_OPCODE(" << Op.OpCode << ", " << Op.OpName << ")\n";
+ OS << "#undef DXIL_OPCODE\n";
+ OS << "\n";
+ OS << "#endif\n\n";
+}
- OS << "// Groups for DXIL operations with equivalent function templates\n";
- OS << "enum class OpCodeClass : unsigned {\n";
- // Build an OpClass set to print
- SmallSet<StringRef, 2> OpClassSet;
- for (auto &Op : Ops) {
- OpClassSet.insert(Op.OpClass);
- }
- for (auto &C : OpClassSet) {
- OS << C << ",\n";
- }
- OS << "\n};\n\n";
- OS << "#undef DXIL_OP_ENUM\n";
+/// Emit a list of DXIL op classes
+static void emitDXILOpClasses(RecordKeeper &Records,
+ raw_ostream &OS) {
+ OS << "#ifdef DXIL_OPCLASS\n";
+ std::vector<Record *> OpClasses =
+ Records.getAllDerivedDefinitions("DXILOpClass");
+ for (Record *OpClass : OpClasses)
+ OS << "DXIL_OPCLASS(" << OpClass->getName() << ")\n";
+ OS << "#undef DXIL_OPCLASS\n";
OS << "#endif\n\n";
}
@@ -646,7 +638,8 @@ static void EmitDXILOperation(RecordKeeper &Records, raw_ostream &OS) {
return A.OpCode < B.OpCode;
});
- emitDXILEnums(DXILOps, OS);
+ emitDXILOpCodes(DXILOps, OS);
+ emitDXILOpClasses(Records, OS);
emitDXILIntrinsicMap(DXILOps, OS);
OS << "#ifdef DXIL_OP_OPERATION_TABLE\n\n";
emitDXILOperationTableDataStructs(Records, OS);
``````````
</details>
https://github.com/llvm/llvm-project/pull/101249
More information about the llvm-branch-commits
mailing list