From 17fad045cccf34822d3163ada9e70a8f4528746e Mon Sep 17 00:00:00 2001 From: Jim Grosbach Date: Fri, 11 Mar 2011 01:33:54 +0000 Subject: [PATCH] Make the register enum value part of the CodeGenRegister struct. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127448 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/TableGen/CodeGenRegisters.h | 1 + utils/TableGen/CodeGenTarget.cpp | 3 +++ utils/TableGen/RegisterInfoEmitter.cpp | 5 ++++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/utils/TableGen/CodeGenRegisters.h b/utils/TableGen/CodeGenRegisters.h index 7f45b6ffe02..f6d6af8c972 100644 --- a/utils/TableGen/CodeGenRegisters.h +++ b/utils/TableGen/CodeGenRegisters.h @@ -30,6 +30,7 @@ namespace llvm { Record *TheDef; const std::string &getName() const; unsigned DeclaredSpillSize, DeclaredSpillAlignment; + unsigned EnumValue; CodeGenRegister(Record *R); }; diff --git a/utils/TableGen/CodeGenTarget.cpp b/utils/TableGen/CodeGenTarget.cpp index 52df698f4d5..cc09c8d6833 100644 --- a/utils/TableGen/CodeGenTarget.cpp +++ b/utils/TableGen/CodeGenTarget.cpp @@ -164,6 +164,9 @@ void CodeGenTarget::ReadRegisters() const { Registers.reserve(Regs.size()); Registers.assign(Regs.begin(), Regs.end()); + // Assign the enumeration values. + for (unsigned i = 0, e = Registers.size(); i != e; ++i) + Registers[i].EnumValue = i + 1; } CodeGenRegister::CodeGenRegister(Record *R) : TheDef(R) { diff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp index 7857c5b411b..b3a9dea3bec 100644 --- a/utils/TableGen/RegisterInfoEmitter.cpp +++ b/utils/TableGen/RegisterInfoEmitter.cpp @@ -38,7 +38,10 @@ void RegisterInfoEmitter::runEnums(raw_ostream &OS) { OS << "enum {\n NoRegister,\n"; for (unsigned i = 0, e = Registers.size(); i != e; ++i) - OS << " " << Registers[i].getName() << ", \t// " << i+1 << "\n"; + OS << " " << Registers[i].getName() << " = " << + Registers[i].EnumValue << ",\n"; + assert(Registers.size() == Registers[Registers.size()-1].EnumValue && + "Register enum value mismatch!"); OS << " NUM_TARGET_REGS \t// " << Registers.size()+1 << "\n"; OS << "};\n"; if (!Namespace.empty())