mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-10-16 12:24:44 +00:00
Also add super- register classes info.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28221 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
993141402f
commit
2ca0efd71a
@ -166,6 +166,7 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
|
|||||||
OS << " " << RegisterClasses[i].getName() << "Class\t"
|
OS << " " << RegisterClasses[i].getName() << "Class\t"
|
||||||
<< RegisterClasses[i].getName() << "RegClass;\n";
|
<< RegisterClasses[i].getName() << "RegClass;\n";
|
||||||
|
|
||||||
|
std::map<unsigned, std::set<unsigned> > SuperClassMap;
|
||||||
OS << "\n";
|
OS << "\n";
|
||||||
// Emit the sub-classes array for each RegisterClass
|
// Emit the sub-classes array for each RegisterClass
|
||||||
for (unsigned rc = 0, e = RegisterClasses.size(); rc != e; ++rc) {
|
for (unsigned rc = 0, e = RegisterClasses.size(); rc != e; ++rc) {
|
||||||
@ -194,12 +195,48 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
|
|||||||
if (!Empty) OS << ", ";
|
if (!Empty) OS << ", ";
|
||||||
OS << "&" << getQualifiedName(RC2.TheDef) << "RegClass";
|
OS << "&" << getQualifiedName(RC2.TheDef) << "RegClass";
|
||||||
Empty = false;
|
Empty = false;
|
||||||
|
|
||||||
|
std::map<unsigned, std::set<unsigned> >::iterator SCMI =
|
||||||
|
SuperClassMap.find(rc2);
|
||||||
|
if (SCMI == SuperClassMap.end()) {
|
||||||
|
SuperClassMap.insert(std::make_pair(rc2, std::set<unsigned>()));
|
||||||
|
SCMI = SuperClassMap.find(rc2);
|
||||||
|
}
|
||||||
|
SCMI->second.insert(rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
OS << (!Empty ? ", " : "") << "NULL";
|
OS << (!Empty ? ", " : "") << "NULL";
|
||||||
OS << "\n };\n\n";
|
OS << "\n };\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
OS << " // " << Name
|
||||||
|
<< " Register Class super-classes...\n const TargetRegisterClass* "
|
||||||
|
<< Name << "Superclasses [] = {\n ";
|
||||||
|
|
||||||
|
bool Empty = true;
|
||||||
|
std::map<unsigned, std::set<unsigned> >::iterator I =
|
||||||
|
SuperClassMap.find(rc);
|
||||||
|
if (I != SuperClassMap.end()) {
|
||||||
|
for (std::set<unsigned>::iterator II = I->second.begin(),
|
||||||
|
EE = I->second.end(); II != EE; ++II) {
|
||||||
|
const CodeGenRegisterClass &RC2 = RegisterClasses[*II];
|
||||||
|
if (!Empty) OS << ", ";
|
||||||
|
OS << "&" << getQualifiedName(RC2.TheDef) << "RegClass";
|
||||||
|
Empty = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
OS << (!Empty ? ", " : "") << "NULL";
|
||||||
|
OS << "\n };\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) {
|
for (unsigned i = 0, e = RegisterClasses.size(); i != e; ++i) {
|
||||||
const CodeGenRegisterClass &RC = RegisterClasses[i];
|
const CodeGenRegisterClass &RC = RegisterClasses[i];
|
||||||
OS << RC.MethodBodies << "\n";
|
OS << RC.MethodBodies << "\n";
|
||||||
@ -207,6 +244,7 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
|
|||||||
<< "Class() : TargetRegisterClass("
|
<< "Class() : TargetRegisterClass("
|
||||||
<< RC.getName() + "VTs" << ", "
|
<< RC.getName() + "VTs" << ", "
|
||||||
<< RC.getName() + "Subclasses" << ", "
|
<< RC.getName() + "Subclasses" << ", "
|
||||||
|
<< RC.getName() + "Superclasses" << ", "
|
||||||
<< RC.SpillSize/8 << ", "
|
<< RC.SpillSize/8 << ", "
|
||||||
<< RC.SpillAlignment/8 << ", " << RC.getName() << ", "
|
<< RC.SpillAlignment/8 << ", " << RC.getName() << ", "
|
||||||
<< RC.getName() << " + " << RC.Elements.size() << ") {}\n";
|
<< RC.getName() << " + " << RC.Elements.size() << ") {}\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user