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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits