diff options
| author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-09-29 22:28:37 +0000 |
|---|---|---|
| committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-09-29 22:28:37 +0000 |
| commit | 29f018cee616e4082e5005bc9adee4dc777e621c (patch) | |
| tree | 3f7376b6ee4a80b2cc35be9c586c5b20acbb3fd1 /utils/TableGen/CodeGenRegisters.cpp | |
| parent | 27e0666725c6558574cb7a55f8c91e7532e09548 (diff) | |
Switch to ArrayRef<CodeGenRegisterClass*>.
This makes it possible to allocate CodeGenRegisterClass instances
dynamically and reorder them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140816 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/TableGen/CodeGenRegisters.cpp')
| -rw-r--r-- | utils/TableGen/CodeGenRegisters.cpp | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/utils/TableGen/CodeGenRegisters.cpp b/utils/TableGen/CodeGenRegisters.cpp index b207748cea..683384bd7e 100644 --- a/utils/TableGen/CodeGenRegisters.cpp +++ b/utils/TableGen/CodeGenRegisters.cpp @@ -391,8 +391,11 @@ CodeGenRegBank::CodeGenRegBank(RecordKeeper &Records) : Records(Records) { throw std::string("No 'RegisterClass' subclasses defined!"); RegClasses.reserve(RCs.size()); - for (unsigned i = 0, e = RCs.size(); i != e; ++i) - RegClasses.push_back(CodeGenRegisterClass(*this, RCs[i])); + for (unsigned i = 0, e = RCs.size(); i != e; ++i) { + CodeGenRegisterClass *RC = new CodeGenRegisterClass(*this, RCs[i]); + RegClasses.push_back(RC); + Def2RC[RCs[i]] = RC; + } } CodeGenRegister *CodeGenRegBank::getReg(Record *Def) { @@ -405,10 +408,6 @@ CodeGenRegister *CodeGenRegBank::getReg(Record *Def) { } CodeGenRegisterClass *CodeGenRegBank::getRegClass(Record *Def) { - if (Def2RC.empty()) - for (unsigned i = 0, e = RegClasses.size(); i != e; ++i) - Def2RC[RegClasses[i].TheDef] = &RegClasses[i]; - if (CodeGenRegisterClass *RC = Def2RC[Def]) return RC; @@ -579,10 +578,10 @@ void CodeGenRegBank::computeDerivedInfo() { const CodeGenRegisterClass* CodeGenRegBank::getRegClassForRegister(Record *R) { const CodeGenRegister *Reg = getReg(R); - const std::vector<CodeGenRegisterClass> &RCs = getRegClasses(); + ArrayRef<CodeGenRegisterClass*> RCs = getRegClasses(); const CodeGenRegisterClass *FoundRC = 0; for (unsigned i = 0, e = RCs.size(); i != e; ++i) { - const CodeGenRegisterClass &RC = RCs[i]; + const CodeGenRegisterClass &RC = *RCs[i]; if (!RC.contains(Reg)) continue; |
