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