diff options
author | Nate Begeman <natebegeman@mac.com> | 2005-12-01 04:51:06 +0000 |
---|---|---|
committer | Nate Begeman <natebegeman@mac.com> | 2005-12-01 04:51:06 +0000 |
commit | 6510b22cec7de4f0acc9965ec24c3668a6a8a87e (patch) | |
tree | 4fadf46880895213994813192581c17f61c3a00d /utils/TableGen/RegisterInfoEmitter.cpp | |
parent | 5dfc55c304b051a33f4ee30a2e1b4bca85ddb75e (diff) | |
download | external_llvm-6510b22cec7de4f0acc9965ec24c3668a6a8a87e.zip external_llvm-6510b22cec7de4f0acc9965ec24c3668a6a8a87e.tar.gz external_llvm-6510b22cec7de4f0acc9965ec24c3668a6a8a87e.tar.bz2 |
Support multiple ValueTypes per RegisterClass, needed for upcoming vector
work. This change has no effect on generated code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24563 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/RegisterInfoEmitter.cpp')
-rw-r--r-- | utils/TableGen/RegisterInfoEmitter.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp index 5c3cb8d..13a85f7 100644 --- a/utils/TableGen/RegisterInfoEmitter.cpp +++ b/utils/TableGen/RegisterInfoEmitter.cpp @@ -109,6 +109,7 @@ void RegisterInfoEmitter::run(std::ostream &OS) { // belongs to. std::multimap<Record*, const CodeGenRegisterClass*> RegClassesBelongedTo; + // Emit the register enum value arrays for each RegisterClass for (unsigned rc = 0, e = RegisterClasses.size(); rc != e; ++rc) { const CodeGenRegisterClass &RC = RegisterClasses[rc]; @@ -127,6 +128,22 @@ void RegisterInfoEmitter::run(std::ostream &OS) { } OS << "\n };\n\n"; } + + // Emit the ValueType arrays for each RegisterClass + for (unsigned rc = 0, e = RegisterClasses.size(); rc != e; ++rc) { + const CodeGenRegisterClass &RC = RegisterClasses[rc]; + + // Give the register class a legal C name if it's anonymous. + std::string Name = RC.TheDef->getName() + "VTs"; + + // Emit the register list now. + OS << " // " << Name + << " Register Class Value Types...\n const MVT::ValueType " << Name + << "[] = {\n "; + for (unsigned i = 0, e = RC.VTs.size(); i != e; ++i) + OS << "MVT::" << RC.VTs[i] << ", "; + OS << "MVT::Other\n };\n\n"; + } OS << "} // end anonymous namespace\n\n"; // Now that all of the structs have been emitted, emit the instances. @@ -140,8 +157,8 @@ void RegisterInfoEmitter::run(std::ostream &OS) { for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) { const CodeGenRegisterClass &RC = RegisterClasses[i]; OS << RC.MethodBodies << "\n"; - OS << RC.getName() << "Class::" << RC.getName() - << "Class() : TargetRegisterClass(MVT::" << getEnumName(RC.VT) << "," + OS << RC.getName() << "Class::" << RC.getName() + << "Class() : TargetRegisterClass(" << RC.getName() + "VTs" << ", " << RC.SpillSize/8 << ", " << RC.SpillAlignment/8 << ", " << RC.getName() << ", " << RC.getName() << " + " << RC.Elements.size() << ") {}\n"; |