summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--support/tools/TableGen/Record.h7
-rw-r--r--support/tools/TableGen/RegisterInfoEmitter.cpp3
-rw-r--r--utils/TableGen/Record.h7
-rw-r--r--utils/TableGen/RegisterInfoEmitter.cpp3
4 files changed, 16 insertions, 4 deletions
diff --git a/support/tools/TableGen/Record.h b/support/tools/TableGen/Record.h
index b621451643..5c50a07651 100644
--- a/support/tools/TableGen/Record.h
+++ b/support/tools/TableGen/Record.h
@@ -703,6 +703,13 @@ public:
return false;
}
+ bool isSubClassOf(const std::string &Name) const {
+ for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
+ if (SuperClasses[i]->getName() == Name)
+ return true;
+ return false;
+ }
+
void addSuperClass(Record *R) {
assert(!isSubClassOf(R) && "Already subclassing record!");
SuperClasses.push_back(R);
diff --git a/support/tools/TableGen/RegisterInfoEmitter.cpp b/support/tools/TableGen/RegisterInfoEmitter.cpp
index f1f8a86bd4..9ef5f020a2 100644
--- a/support/tools/TableGen/RegisterInfoEmitter.cpp
+++ b/support/tools/TableGen/RegisterInfoEmitter.cpp
@@ -73,7 +73,6 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
Records.getAllDerivedDefinitions("RegisterClass");
std::vector<Record*> Registers = Records.getAllDerivedDefinitions("Register");
- Record *RegisterClass = Records.getClass("Register");
std::set<Record*> RegistersFound;
std::vector<std::string> RegClassNames;
@@ -99,7 +98,7 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
DefInit *RegDef = dynamic_cast<DefInit*>(RegList->getElement(i));
if (!RegDef) throw "Register class member is not a record!";
Record *Reg = RegDef->getDef();
- if (!Reg->isSubClassOf(RegisterClass))
+ if (!Reg->isSubClassOf("Register"))
throw "Register Class member '" + Reg->getName() +
" does not derive from the Register class!";
if (RegistersFound.count(Reg))
diff --git a/utils/TableGen/Record.h b/utils/TableGen/Record.h
index b621451643..5c50a07651 100644
--- a/utils/TableGen/Record.h
+++ b/utils/TableGen/Record.h
@@ -703,6 +703,13 @@ public:
return false;
}
+ bool isSubClassOf(const std::string &Name) const {
+ for (unsigned i = 0, e = SuperClasses.size(); i != e; ++i)
+ if (SuperClasses[i]->getName() == Name)
+ return true;
+ return false;
+ }
+
void addSuperClass(Record *R) {
assert(!isSubClassOf(R) && "Already subclassing record!");
SuperClasses.push_back(R);
diff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp
index f1f8a86bd4..9ef5f020a2 100644
--- a/utils/TableGen/RegisterInfoEmitter.cpp
+++ b/utils/TableGen/RegisterInfoEmitter.cpp
@@ -73,7 +73,6 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
Records.getAllDerivedDefinitions("RegisterClass");
std::vector<Record*> Registers = Records.getAllDerivedDefinitions("Register");
- Record *RegisterClass = Records.getClass("Register");
std::set<Record*> RegistersFound;
std::vector<std::string> RegClassNames;
@@ -99,7 +98,7 @@ void RegisterInfoEmitter::run(std::ostream &OS) {
DefInit *RegDef = dynamic_cast<DefInit*>(RegList->getElement(i));
if (!RegDef) throw "Register class member is not a record!";
Record *Reg = RegDef->getDef();
- if (!Reg->isSubClassOf(RegisterClass))
+ if (!Reg->isSubClassOf("Register"))
throw "Register Class member '" + Reg->getName() +
" does not derive from the Register class!";
if (RegistersFound.count(Reg))