New file
[oota-llvm.git] / lib / Target / MRegisterInfo.cpp
1 //===- MRegisterInfo.cpp - Target Register Information Implementation -----===//
2 //
3 // This file implements the MRegisterInfo interface.
4 //
5 //===----------------------------------------------------------------------===//
6
7 #include "llvm/Target/MRegisterInfo.h"
8
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!");
14
15   PhysRegClasses = new const TargetRegisterClass*[NumRegs];
16   for (unsigned i = 0; i != NumRegs; ++i)
17     PhysRegClasses[i] = 0;
18
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;
26     }
27 }
28
29
30 MRegisterInfo::~MRegisterInfo() {
31   delete[] PhysRegClasses;
32 }