Add a trivial but handy function to efficiently return the machine
authorChris Lattner <sabre@nondot.org>
Tue, 1 Jan 2008 03:07:29 +0000 (03:07 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 1 Jan 2008 03:07:29 +0000 (03:07 +0000)
instruction that defines the specified vreg.  Crazy.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45480 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineRegisterInfo.h
lib/CodeGen/MachineRegisterInfo.cpp

index 14d601f0bd4ef551052cd9301f88a086f9e00897..45069a2653da66023c2dae6f8ad5a7362804b6d0 100644 (file)
@@ -120,6 +120,12 @@ public:
     return VRegInfo.size()+MRegisterInfo::FirstVirtualRegister-1;
   }
   
+  /// getVRegDef - Return the machine instr that defines the specified virtual
+  /// register or null if none is found.  This assumes that the code is in SSA
+  /// form, so there should only be one definition.
+  MachineInstr *getVRegDef(unsigned Reg) const;
+  
+  
   //===--------------------------------------------------------------------===//
   // Physical Register Use Info
   //===--------------------------------------------------------------------===//
index f217c042be2ef0810c1fe4b9665c1f8f75c25e42..b41a1e748cc3b6329db0899939fa420c75e553c2 100644 (file)
@@ -44,3 +44,18 @@ void MachineRegisterInfo::HandleVRegListReallocation() {
     List->Contents.Reg.Prev = &VRegInfo[i].second;
   }
 }
+
+
+/// getVRegDef - Return the machine instr that defines the specified virtual
+/// register or null if none is found.  This assumes that the code is in SSA
+/// form, so there should only be one definition.
+MachineInstr *MachineRegisterInfo::getVRegDef(unsigned Reg) const {
+  assert(Reg-MRegisterInfo::FirstVirtualRegister < VRegInfo.size() &&
+         "Invalid vreg!");
+  for (reg_iterator I = reg_begin(Reg), E = reg_end(); I != E; ++I) {
+    // Since we are in SSA form, we can stop at the first definition.
+    if (I->isDef())
+      return I->getParent();
+  }
+  return 0;
+}