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,
12 : Desc(D), NumRegs(NR), RegClassBegin(RCB), RegClassEnd(RCE) {
13 assert(NumRegs < FirstVirtualRegister &&
14 "Target has too many physical registers!");
16 PhysRegClasses = new const TargetRegisterClass*[NumRegs];
17 for (unsigned i = 0; i != NumRegs; ++i)
18 PhysRegClasses[i] = 0;
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;
29 CallFrameSetupOpcode = CFSO;
30 CallFrameDestroyOpcode = CFDO;
34 MRegisterInfo::~MRegisterInfo() {
35 delete[] PhysRegClasses;