diff options
| author | Dan Gohman <gohman@apple.com> | 2009-04-15 01:19:35 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2009-04-15 01:19:35 +0000 |
| commit | 210448c2338b264d47de552e5a5b52f382b5daf3 (patch) | |
| tree | 59fbb53a3aede0ffcfdbb26f8c1e5451d10aa5ec /llvm/lib | |
| parent | 505065cdd0d951ce2d77c78f4435b002b70bd1bd (diff) | |
| download | bcm5719-llvm-210448c2338b264d47de552e5a5b52f382b5daf3.tar.gz bcm5719-llvm-210448c2338b264d47de552e5a5b52f382b5daf3.zip | |
Move MachineRegisterInfo::setRegClass out of line.
llvm-svn: 69126
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index e5148e74be8..4f5ab1f5860 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -35,6 +35,26 @@ MachineRegisterInfo::~MachineRegisterInfo() { delete [] PhysRegUseDefLists; } +/// setRegClass - Set the register class of the specified virtual register. +/// +void +MachineRegisterInfo::setRegClass(unsigned Reg, const TargetRegisterClass *RC) { + unsigned VR = Reg; + Reg -= TargetRegisterInfo::FirstVirtualRegister; + assert(Reg < VRegInfo.size() && "Invalid vreg!"); + const TargetRegisterClass *OldRC = VRegInfo[Reg].first; + VRegInfo[Reg].first = RC; + + // Remove from old register class's vregs list. This may be slow but + // fortunately this operation is rarely needed. + std::vector<unsigned> &VRegs = RegClass2VRegMap[OldRC->getID()]; + std::vector<unsigned>::iterator I=std::find(VRegs.begin(), VRegs.end(), VR); + VRegs.erase(I); + + // Add to new register class's vregs list. + RegClass2VRegMap[RC->getID()].push_back(VR); +} + /// createVirtualRegister - Create and return a new virtual register in the /// function with the specified register class. /// |

