diff options
author | Chris Lattner <sabre@nondot.org> | 2002-12-17 04:03:08 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-12-17 04:03:08 +0000 |
commit | 9208bbf5c9f12099de3f0a0716c33b0759075f03 (patch) | |
tree | f0cfc26ef4c789e348deea5f279838ae34b7c96d /lib/Target/MRegisterInfo.cpp | |
parent | 86c69a6cbe0c4c08ab3f57bcd47b11b0479849fc (diff) |
New file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5097 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/MRegisterInfo.cpp')
-rw-r--r-- | lib/Target/MRegisterInfo.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/Target/MRegisterInfo.cpp b/lib/Target/MRegisterInfo.cpp new file mode 100644 index 0000000000..c47bb45440 --- /dev/null +++ b/lib/Target/MRegisterInfo.cpp @@ -0,0 +1,32 @@ +//===- MRegisterInfo.cpp - Target Register Information Implementation -----===// +// +// This file implements the MRegisterInfo interface. +// +//===----------------------------------------------------------------------===// + +#include "llvm/Target/MRegisterInfo.h" + +MRegisterInfo::MRegisterInfo(const MRegisterDesc *D, unsigned NR, + regclass_iterator RCB, regclass_iterator RCE) + : Desc(D), NumRegs(NR), RegClassBegin(RCB), RegClassEnd(RCE) { + assert(NumRegs < FirstVirtualRegister && + "Target has too many physical registers!"); + + PhysRegClasses = new const TargetRegisterClass*[NumRegs]; + for (unsigned i = 0; i != NumRegs; ++i) + PhysRegClasses[i] = 0; + + // Fill in the PhysRegClasses map + for (MRegisterInfo::regclass_iterator I = regclass_begin(), + E = regclass_end(); I != E; ++I) + for (unsigned i=0; i < (*I)->getNumRegs(); ++i) { + assert(PhysRegClasses[(*I)->getRegister(i)] == 0 && + "Register in more than one class?"); + PhysRegClasses[(*I)->getRegister(i)] = *I; + } +} + + +MRegisterInfo::~MRegisterInfo() { + delete[] PhysRegClasses; +} |