1. Bug fix: was using SLL instead of SLLX for ULongTy. Chump.
[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, e = (*I)->getNumRegs(); i != e; ++i) {
24       unsigned Reg = (*I)->getRegister(i);
25       assert(PhysRegClasses[Reg] == 0 && "Register in more than one class?");
26       PhysRegClasses[Reg] = *I;
27     }
28
29   CallFrameSetupOpcode   = CFSO;
30   CallFrameDestroyOpcode = CFDO;
31 }
32
33
34 MRegisterInfo::~MRegisterInfo() {
35   delete[] PhysRegClasses;
36 }