diff --git a/llvm/utils/TableGen/Common/CodeGenInstruction.h b/llvm/utils/TableGen/Common/CodeGenInstruction.h index 9372614f26e1a..ed0bfa7098eb7 100644 --- a/llvm/utils/TableGen/Common/CodeGenInstruction.h +++ b/llvm/utils/TableGen/Common/CodeGenInstruction.h @@ -320,6 +320,8 @@ class CodeGenInstruction { return RV && isa(RV->getValue()); } + StringRef getName() const { return TheDef->getName(); } + private: bool isOperandImpl(StringRef OpListName, unsigned i, StringRef PropertyName) const; diff --git a/llvm/utils/TableGen/InstrInfoEmitter.cpp b/llvm/utils/TableGen/InstrInfoEmitter.cpp index 26d93fc13c9ba..6b7c78a314448 100644 --- a/llvm/utils/TableGen/InstrInfoEmitter.cpp +++ b/llvm/utils/TableGen/InstrInfoEmitter.cpp @@ -25,6 +25,8 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringExtras.h" #include "llvm/Support/Casting.h" +#include "llvm/Support/Format.h" +#include "llvm/Support/SourceMgr.h" #include "llvm/Support/raw_ostream.h" #include "llvm/TableGen/Error.h" #include "llvm/TableGen/Record.h" @@ -1302,18 +1304,28 @@ void InstrInfoEmitter::emitEnums( OS << "namespace llvm::" << Namespace << " {\n"; + auto II = llvm::max_element( + NumberedInstructions, + [](const CodeGenInstruction *InstA, const CodeGenInstruction *InstB) { + return InstA->getName().size() < InstB->getName().size(); + }); + size_t MaxNameSize = (*II)->getName().size(); + OS << " enum {\n"; - for (const CodeGenInstruction *Inst : NumberedInstructions) - OS << " " << Inst->TheDef->getName() - << "\t= " << Target.getInstrIntValue(Inst->TheDef) << ",\n"; + for (const CodeGenInstruction *Inst : NumberedInstructions) { + OS << " " << left_justify(Inst->TheDef->getName(), MaxNameSize) << " = " + << Target.getInstrIntValue(Inst->TheDef) << ", // " + << SrcMgr.getFormattedLocationNoOffset(Inst->TheDef->getLoc().front()) + << '\n'; + } OS << " INSTRUCTION_LIST_END = " << NumberedInstructions.size() << '\n'; - OS << " };\n\n"; + OS << " };\n"; OS << "} // end namespace llvm::" << Namespace << '\n'; OS << "#endif // GET_INSTRINFO_ENUM\n\n"; OS << "#ifdef GET_INSTRINFO_SCHED_ENUM\n"; OS << "#undef GET_INSTRINFO_SCHED_ENUM\n"; - OS << "namespace llvm::" << Namespace << "::Sched {\n\n"; + OS << "namespace llvm::" << Namespace << "::Sched {\n"; OS << " enum {\n"; auto ExplictClasses = SchedModels.explicitSchedClasses(); for (const auto &[Idx, Class] : enumerate(ExplictClasses))