aboutsummaryrefslogtreecommitdiffstats
path: root/utils/TableGen/RegisterInfoEmitter.cpp
diff options
context:
space:
mode:
authorNate Begeman <natebegeman@mac.com>2005-12-01 04:51:06 +0000
committerNate Begeman <natebegeman@mac.com>2005-12-01 04:51:06 +0000
commit6510b22cec7de4f0acc9965ec24c3668a6a8a87e (patch)
tree4fadf46880895213994813192581c17f61c3a00d /utils/TableGen/RegisterInfoEmitter.cpp
parent5dfc55c304b051a33f4ee30a2e1b4bca85ddb75e (diff)
downloadexternal_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.cpp21
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";