summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-12-17 04:03:08 +0000
committerChris Lattner <sabre@nondot.org>2002-12-17 04:03:08 +0000
commit0eece8418647563e4111c21f2582a352bb645d6b (patch)
tree54c28d6795a840305d227a2224e90734f6ce6bdb /llvm/lib
parent0ea32b8dd3497f8494b2bb1cfd5bbbd4895eff81 (diff)
downloadbcm5719-llvm-0eece8418647563e4111c21f2582a352bb645d6b.tar.gz
bcm5719-llvm-0eece8418647563e4111c21f2582a352bb645d6b.zip
New file
llvm-svn: 5097
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/MRegisterInfo.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/lib/Target/MRegisterInfo.cpp b/llvm/lib/Target/MRegisterInfo.cpp
new file mode 100644
index 00000000000..c47bb45440b
--- /dev/null
+++ b/llvm/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;
+}
OpenPOWER on IntegriCloud