MachineRegisterInfo.cpp revision 62ed6b9ade63bf01717ce5274fa11e93e873d245
162ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner//===-- lib/Codegen/MachineRegisterInfo.cpp -------------------------------===//
284bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner//
384bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner//                     The LLVM Compiler Infrastructure
484bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner//
584bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner// This file is distributed under the University of Illinois Open Source
684bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner// License. See LICENSE.TXT for details.
784bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner//
884bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner//===----------------------------------------------------------------------===//
984bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner//
1084bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner// Implementation of the MachineRegisterInfo class.
1184bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner//
1284bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner//===----------------------------------------------------------------------===//
1384bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner
1484bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner#include "llvm/CodeGen/MachineRegisterInfo.h"
1584bc5427d6883f73cfeae3da640acd011d35c006Chris Lattnerusing namespace llvm;
1684bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner
1784bc5427d6883f73cfeae3da640acd011d35c006Chris LattnerMachineRegisterInfo::MachineRegisterInfo(const MRegisterInfo &MRI) {
1884bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner  VRegInfo.reserve(256);
1984bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner  UsedPhysRegs.resize(MRI.getNumRegs());
2062ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner
2162ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  // Create the physreg use/def lists.
2262ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  PhysRegUseDefLists = new MachineOperand*[MRI.getNumRegs()];
2362ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  memset(PhysRegUseDefLists, 0, sizeof(MachineOperand*)*MRI.getNumRegs());
2462ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner}
2562ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner
2662ed6b9ade63bf01717ce5274fa11e93e873d245Chris LattnerMachineRegisterInfo::~MachineRegisterInfo() {
2762ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner#ifndef NDEBUG
2862ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  for (unsigned i = 0, e = VRegInfo.size(); i != e; ++i)
2962ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner    assert(VRegInfo[i].second == 0 && "Vreg use list non-empty still?");
3062ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner#endif
3162ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  delete [] PhysRegUseDefLists;
3262ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner}
3362ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner
3462ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner/// HandleVRegListReallocation - We just added a virtual register to the
3562ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner/// VRegInfo info list and it reallocated.  Update the use/def lists info
3662ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner/// pointers.
3762ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattnervoid MachineRegisterInfo::HandleVRegListReallocation() {
3862ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  // The back pointers for the vreg lists point into the previous vector.
3962ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  // Update them to point to their correct slots.
4062ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  for (unsigned i = 0, e = VRegInfo.size(); i != e; ++i) {
4162ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner    MachineOperand *List = VRegInfo[i].second;
4262ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner    if (!List) continue;
4362ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner    // Update the back-pointer to be accurate once more.
4462ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner    List->Contents.Reg.Prev = &VRegInfo[i].second;
4562ed6b9ade63bf01717ce5274fa11e93e873d245Chris Lattner  }
4684bc5427d6883f73cfeae3da640acd011d35c006Chris Lattner}
47