Make error messages more useful than jsut an abort
[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                              int CFSO, int CFDO)
12   : Desc(D), NumRegs(NR), RegClassBegin(RCB), RegClassEnd(RCE) {
13   assert(NumRegs < FirstVirtualRegister &&
14          "Target has too many physical registers!");
15
16   PhysRegClasses = new const TargetRegisterClass*[NumRegs];
17   for (unsigned i = 0; i != NumRegs; ++i)
18     PhysRegClasses[i] = 0;
19
20   // Fill in the PhysRegClasses map
21   for (MRegisterInfo::regclass_iterator I = regclass_begin(),
22          E = regclass_end(); I != E; ++I)
23     for (unsigned i=0; i < (*I)->getNumRegs(); ++i) {
24       assert(PhysRegClasses[(*I)->getRegister(i)] == 0 &&
25              "Register in more than one class?");
26       PhysRegClasses[(*I)->getRegister(i)] = *I;
27     }
28
29   CallFrameSetupOpcode   = CFSO;
30   CallFrameDestroyOpcode = CFDO;
31 }
32
33
34 MRegisterInfo::~MRegisterInfo() {
35   delete[] PhysRegClasses;
36 }