diff --git a/llvm/lib/CodeGen/LiveDebugVariables.cpp b/llvm/lib/CodeGen/LiveDebugVariables.cpp
index 9a15a27..4b428f6 100644
--- a/llvm/lib/CodeGen/LiveDebugVariables.cpp
+++ b/llvm/lib/CodeGen/LiveDebugVariables.cpp
@@ -241,6 +241,10 @@
   /// collecting all their def points.
   void computeIntervals(LiveIntervals &LIS, MachineDominatorTree &MDT);
 
+  /// renameRegister - Update locations to rewrite OldReg as NewReg:SubIdx.
+  void renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx,
+                      const TargetRegisterInfo *TRI);
+
   void print(raw_ostream&, const TargetRegisterInfo*);
 };
 } // namespace
@@ -269,6 +273,9 @@
   /// getUserValue - Find or create a UserValue.
   UserValue *getUserValue(const MDNode *Var, unsigned Offset);
 
+  /// lookupVirtReg - Find the EC leader for VirtReg or null.
+  UserValue *lookupVirtReg(unsigned VirtReg);
+
   /// mapVirtReg - Map virtual register to an equivalence class.
   void mapVirtReg(unsigned VirtReg, UserValue *EC);
 
@@ -300,6 +307,9 @@
     userVarMap.clear();
   }
 
+  /// renameRegister - Replace all references to OldReg wiht NewReg:SubIdx.
+  void renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx);
+
   void print(raw_ostream&);
 };
 } // namespace
@@ -379,6 +389,12 @@
   Leader = UserValue::merge(Leader, EC);
 }
 
+UserValue *LDVImpl::lookupVirtReg(unsigned VirtReg) {
+  if (UserValue *UV = virtRegMap.lookup(VirtReg))
+    return UV->getLeader();
+  return 0;
+}
+
 bool LDVImpl::handleDebugValue(MachineInstr *MI, SlotIndex Idx) {
   // DBG_VALUE loc, offset, variable
   if (MI->getNumOperands() != 3 ||
@@ -551,3 +567,36 @@
   if (pImpl)
     delete static_cast<LDVImpl*>(pImpl);
 }
+
+void UserValue::
+renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx,
+               const TargetRegisterInfo *TRI) {
+  for (unsigned i = 0, e = locations.size(); i != e; ++i) {
+    Location &Loc = locations[i];
+    if (Loc.Kind != OldReg)
+      continue;
+    Loc.Kind = NewReg;
+    if (SubIdx && Loc.Data.SubIdx)
+      Loc.Data.SubIdx = TRI->composeSubRegIndices(SubIdx, Loc.Data.SubIdx);
+  }
+}
+
+void LDVImpl::
+renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx) {
+  for (UserValue *UV = lookupVirtReg(OldReg); UV; UV = UV->getNext())
+    UV->renameRegister(OldReg, NewReg, SubIdx, TRI);
+}
+
+void LiveDebugVariables::
+renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx) {
+  if (pImpl)
+    static_cast<LDVImpl*>(pImpl)->renameRegister(OldReg, NewReg, SubIdx);
+}
+
+#ifndef NDEBUG
+void LiveDebugVariables::dump() {
+  if (pImpl)
+    static_cast<LDVImpl*>(pImpl)->print(dbgs());
+}
+#endif
+
