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 | fae3e923452b85e72b2c03dd6eacc063f59d81b1 (patch) | |
tree | de568e1d845536244f6625a40721d7b3243b8b92 /utils | |
parent | d57cdd5683ea926e489067364fb7ffe5fd5d35ee (diff) | |
download | llvm-fae3e923452b85e72b2c03dd6eacc063f59d81b1.tar.gz llvm-fae3e923452b85e72b2c03dd6eacc063f59d81b1.tar.bz2 llvm-fae3e923452b85e72b2c03dd6eacc063f59d81b1.tar.xz |
Added getSubRegIndex(A,B) that returns subreg index of A to B. Use it to replace broken code in VirtRegRewriter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88753 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils')
-rw-r--r-- | utils/TableGen/RegisterInfoEmitter.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp index 3c7b44a1e0..bf0721ed9a 100644 --- a/utils/TableGen/RegisterInfoEmitter.cpp +++ b/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 |