//===- MRegisterInfo.cpp - Target Register Information Implementation -----===// // // This file implements the MRegisterInfo interface. // //===----------------------------------------------------------------------===// #include "llvm/Target/MRegisterInfo.h" MRegisterInfo::MRegisterInfo(const MRegisterDesc *D, unsigned NR, regclass_iterator RCB, regclass_iterator RCE, int CFSO, int CFDO) : Desc(D), NumRegs(NR), RegClassBegin(RCB), RegClassEnd(RCE) { assert(NumRegs < FirstVirtualRegister && "Target has too many physical registers!"); PhysRegClasses = new const TargetRegisterClass*[NumRegs]; for (unsigned i = 0; i != NumRegs; ++i) PhysRegClasses[i] = 0; // Fill in the PhysRegClasses map for (MRegisterInfo::regclass_iterator I = regclass_begin(), E = regclass_end(); I != E; ++I) for (unsigned i = 0, e = (*I)->getNumRegs(); i != e; ++i) { unsigned Reg = (*I)->getRegister(i); assert(PhysRegClasses[Reg] == 0 && "Register in more than one class?"); PhysRegClasses[Reg] = *I; } CallFrameSetupOpcode = CFSO; CallFrameDestroyOpcode = CFDO; } MRegisterInfo::~MRegisterInfo() { delete[] PhysRegClasses; }