New file
authorChris Lattner <sabre@nondot.org>
Tue, 17 Dec 2002 04:03:08 +0000 (04:03 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 17 Dec 2002 04:03:08 +0000 (04:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5097 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/MRegisterInfo.cpp [new file with mode: 0644]

diff --git a/lib/Target/MRegisterInfo.cpp b/lib/Target/MRegisterInfo.cpp
new file mode 100644 (file)
index 0000000..c47bb45
--- /dev/null
@@ -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;
+}