diff options
| author | Chris Lattner <sabre@nondot.org> | 2008-01-01 01:12:31 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2008-01-01 01:12:31 +0000 |
| commit | 961e7427ea58c34540dfccb13da9f36c5233e362 (patch) | |
| tree | 621a655f0f0e2e42755208d1bbc02147c345ac33 /llvm/lib/CodeGen/MachineRegisterInfo.cpp | |
| parent | b0fb17fd34de0f45920a65f77dab3c98ccace7a1 (diff) | |
| download | bcm5719-llvm-961e7427ea58c34540dfccb13da9f36c5233e362.tar.gz bcm5719-llvm-961e7427ea58c34540dfccb13da9f36c5233e362.zip | |
Implement automatically updated def/use lists for all MachineInstr register
operands. The lists are currently kept in MachineRegisterInfo, but it does
not yet provide an iterator interface to them.
llvm-svn: 45477
Diffstat (limited to 'llvm/lib/CodeGen/MachineRegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MachineRegisterInfo.cpp | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/MachineRegisterInfo.cpp b/llvm/lib/CodeGen/MachineRegisterInfo.cpp index 19c09eee51c..f217c042be2 100644 --- a/llvm/lib/CodeGen/MachineRegisterInfo.cpp +++ b/llvm/lib/CodeGen/MachineRegisterInfo.cpp @@ -1,4 +1,4 @@ -//===-- MachineRegisterInfo.cpp -------------------------------------------===// +//===-- lib/Codegen/MachineRegisterInfo.cpp -------------------------------===// // // The LLVM Compiler Infrastructure // @@ -17,4 +17,30 @@ using namespace llvm; MachineRegisterInfo::MachineRegisterInfo(const MRegisterInfo &MRI) { VRegInfo.reserve(256); UsedPhysRegs.resize(MRI.getNumRegs()); + + // Create the physreg use/def lists. + PhysRegUseDefLists = new MachineOperand*[MRI.getNumRegs()]; + memset(PhysRegUseDefLists, 0, sizeof(MachineOperand*)*MRI.getNumRegs()); +} + +MachineRegisterInfo::~MachineRegisterInfo() { +#ifndef NDEBUG + for (unsigned i = 0, e = VRegInfo.size(); i != e; ++i) + assert(VRegInfo[i].second == 0 && "Vreg use list non-empty still?"); +#endif + delete [] PhysRegUseDefLists; +} + +/// HandleVRegListReallocation - We just added a virtual register to the +/// VRegInfo info list and it reallocated. Update the use/def lists info +/// pointers. +void MachineRegisterInfo::HandleVRegListReallocation() { + // The back pointers for the vreg lists point into the previous vector. + // Update them to point to their correct slots. + for (unsigned i = 0, e = VRegInfo.size(); i != e; ++i) { + MachineOperand *List = VRegInfo[i].second; + if (!List) continue; + // Update the back-pointer to be accurate once more. + List->Contents.Reg.Prev = &VRegInfo[i].second; + } } |

