1 //===- MRegisterInfo.cpp - Target Register Information Implementation -----===//
3 // This file implements the MRegisterInfo interface.
5 //===----------------------------------------------------------------------===//
7 #include "llvm/Target/MRegisterInfo.h"
9 MRegisterInfo::MRegisterInfo(const MRegisterDesc *D, unsigned NR,
10 regclass_iterator RCB, regclass_iterator RCE)
11 : Desc(D), NumRegs(NR), RegClassBegin(RCB), RegClassEnd(RCE) {
12 assert(NumRegs < FirstVirtualRegister &&
13 "Target has too many physical registers!");
15 PhysRegClasses = new const TargetRegisterClass*[NumRegs];
16 for (unsigned i = 0; i != NumRegs; ++i)
17 PhysRegClasses[i] = 0;
19 // Fill in the PhysRegClasses map
20 for (MRegisterInfo::regclass_iterator I = regclass_begin(),
21 E = regclass_end(); I != E; ++I)
22 for (unsigned i=0; i < (*I)->getNumRegs(); ++i) {
23 assert(PhysRegClasses[(*I)->getRegister(i)] == 0 &&
24 "Register in more than one class?");
25 PhysRegClasses[(*I)->getRegister(i)] = *I;
30 MRegisterInfo::~MRegisterInfo() {
31 delete[] PhysRegClasses;