MachineRegisterInfo.cpp revision 62ed6b9ade63bf01717ce5274fa11e93e873d245
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//===-- lib/Codegen/MachineRegisterInfo.cpp -------------------------------===//
286d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com//
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//                     The LLVM Compiler Infrastructure
486d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com//
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// This file is distributed under the University of Illinois Open Source
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// License. See LICENSE.TXT for details.
786d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com//
886d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com//===----------------------------------------------------------------------===//
9ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com//
1086d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com// Implementation of the MachineRegisterInfo class.
1186d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com//
1286d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com//===----------------------------------------------------------------------===//
1386d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com
1486d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com#include "llvm/CodeGen/MachineRegisterInfo.h"
1586d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.comusing namespace llvm;
1681dc331e65ba5a24d515c11890234dd205408c89reed@android.com
1786d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.comMachineRegisterInfo::MachineRegisterInfo(const MRegisterInfo &MRI) {
1886d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com  VRegInfo.reserve(256);
1986d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com  UsedPhysRegs.resize(MRI.getNumRegs());
2086d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com
2186d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com  // Create the physreg use/def lists.
2286d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com  PhysRegUseDefLists = new MachineOperand*[MRI.getNumRegs()];
2386d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com  memset(PhysRegUseDefLists, 0, sizeof(MachineOperand*)*MRI.getNumRegs());
2486d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com}
2586d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com
26a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.comMachineRegisterInfo::~MachineRegisterInfo() {
27a22e2117e44efa4298dd0eb6df304a8166c8e9c3robertphillips@google.com#ifndef NDEBUG
2886d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com  for (unsigned i = 0, e = VRegInfo.size(); i != e; ++i)
2986d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com    assert(VRegInfo[i].second == 0 && "Vreg use list non-empty still?");
3086d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com#endif
3186d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com  delete [] PhysRegUseDefLists;
328381e007dc655b7db4ddf5cafdc057f2dbc1dc6areed@android.com}
3381dc331e65ba5a24d515c11890234dd205408c89reed@android.com
34da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com/// HandleVRegListReallocation - We just added a virtual register to the
3581dc331e65ba5a24d515c11890234dd205408c89reed@android.com/// VRegInfo info list and it reallocated.  Update the use/def lists info
3681dc331e65ba5a24d515c11890234dd205408c89reed@android.com/// pointers.
37da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.comvoid MachineRegisterInfo::HandleVRegListReallocation() {
38da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com  // The back pointers for the vreg lists point into the previous vector.
3981dc331e65ba5a24d515c11890234dd205408c89reed@android.com  // Update them to point to their correct slots.
40da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com  for (unsigned i = 0, e = VRegInfo.size(); i != e; ++i) {
41da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com    MachineOperand *List = VRegInfo[i].second;
4286d4008e894f6ce0b1938ac6b45d4074af85d3b7reed@android.com    if (!List) continue;
438381e007dc655b7db4ddf5cafdc057f2dbc1dc6areed@android.com    // Update the back-pointer to be accurate once more.
44da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com    List->Contents.Reg.Prev = &VRegInfo[i].second;
45da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com  }
46da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com}
47da6fb3246a4f3e7e835f23b4834affb80bb613fareed@android.com