diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2009-11-14 03:42:17 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2009-11-14 03:42:17 +0000 |
| commit | 16797a1f557ce36bb04c8533642be9e0ff11a4d6 (patch) | |
| tree | f2ef78acaaa09b7ee2dcff603fe31d39eaa46020 /llvm/utils/TableGen | |
| parent | c9827d1ad36b9dcffb53f2cea82aec5e7e6636bf (diff) | |
| download | bcm5719-llvm-16797a1f557ce36bb04c8533642be9e0ff11a4d6.tar.gz bcm5719-llvm-16797a1f557ce36bb04c8533642be9e0ff11a4d6.zip | |
Added getSubRegIndex(A,B) that returns subreg index of A to B. Use it to replace broken code in VirtRegRewriter.
llvm-svn: 88753
Diffstat (limited to 'llvm/utils/TableGen')
| -rw-r--r-- | llvm/utils/TableGen/RegisterInfoEmitter.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/utils/TableGen/RegisterInfoEmitter.cpp b/llvm/utils/TableGen/RegisterInfoEmitter.cpp index 3c7b44a1e00..bf0721ed9af 100644 --- a/llvm/utils/TableGen/RegisterInfoEmitter.cpp +++ b/llvm/utils/TableGen/RegisterInfoEmitter.cpp @@ -66,6 +66,7 @@ void RegisterInfoEmitter::runHeader(raw_ostream &OS) { << " virtual bool needsStackRealignment(const MachineFunction &) const\n" << " { return false; }\n" << " unsigned getSubReg(unsigned RegNo, unsigned Index) const;\n" + << " unsigned getSubRegIndex(unsigned RegNo, unsigned SubRegNo) const;\n" << "};\n\n"; const std::vector<CodeGenRegisterClass> &RegisterClasses = @@ -831,6 +832,23 @@ void RegisterInfoEmitter::run(raw_ostream &OS) { OS << " };\n"; OS << " return 0;\n"; OS << "}\n\n"; + + OS << "unsigned " << ClassName + << "::getSubRegIndex(unsigned RegNo, unsigned SubRegNo) const {\n" + << " switch (RegNo) {\n" + << " default:\n return 0;\n"; + for (std::map<Record*, std::vector<std::pair<int, Record*> > >::iterator + I = SubRegVectors.begin(), E = SubRegVectors.end(); I != E; ++I) { + OS << " case " << getQualifiedName(I->first) << ":\n"; + for (unsigned i = 0, e = I->second.size(); i != e; ++i) + OS << " if (SubRegNo == " + << getQualifiedName((I->second)[i].second) + << ") return " << (I->second)[i].first << ";\n"; + OS << " return 0;\n"; + } + OS << " };\n"; + OS << " return 0;\n"; + OS << "}\n\n"; // Emit the constructor of the class... OS << ClassName << "::" << ClassName |

