diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp
index 53cf0aa..2f25800 100644
--- a/llvm/lib/CodeGen/BranchFolding.cpp
+++ b/llvm/lib/CodeGen/BranchFolding.cpp
@@ -733,44 +733,6 @@
 }
 
 
-/// ReplaceUsesOfBlockWith - Given a machine basic block 'BB' that branched to
-/// 'Old', change the code and CFG so that it branches to 'New' instead.
-static void ReplaceUsesOfBlockWith(MachineBasicBlock *BB,
-                                   MachineBasicBlock *Old,
-                                   MachineBasicBlock *New,
-                                   const TargetInstrInfo *TII) {
-  assert(Old != New && "Cannot replace self with self!");
-
-  MachineBasicBlock::iterator I = BB->end();
-  while (I != BB->begin()) {
-    --I;
-    if (!TII->isTerminatorInstr(I->getOpcode())) break;
-
-    // Scan the operands of this machine instruction, replacing any uses of Old
-    // with New.
-    for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
-      if (I->getOperand(i).isMachineBasicBlock() &&
-          I->getOperand(i).getMachineBasicBlock() == Old)
-        I->getOperand(i).setMachineBasicBlock(New);
-  }
-
-  // Update the successor information.  If New was already a successor, just
-  // remove the link to Old instead of creating another one.  PR 1444.
-  bool HadSuccessorNew = false;
-  std::vector<MachineBasicBlock*> Succs(BB->succ_begin(), BB->succ_end());
-  for (int i = Succs.size()-1; i >= 0; --i)
-    if (Succs[i] == New) {
-      HadSuccessorNew = true;
-      break;
-    }
-  for (int i = Succs.size()-1; i >= 0; --i)
-    if (Succs[i] == Old) {
-      BB->removeSuccessor(Old);
-      if (!HadSuccessorNew)
-        BB->addSuccessor(New);
-    }
-}
-
 /// CanFallThrough - Return true if the specified block (with the specified
 /// branch condition) can implicitly transfer control to the block after it by
 /// falling off the end of it.  This should return false if it can reach the
@@ -865,7 +827,7 @@
       // instead.
       while (!MBB->pred_empty()) {
         MachineBasicBlock *Pred = *(MBB->pred_end()-1);
-        ReplaceUsesOfBlockWith(Pred, MBB, FallThrough, TII);
+        Pred->ReplaceUsesOfBlockWith(MBB, FallThrough);
       }
       
       // If MBB was the target of a jump table, update jump tables to go to the
@@ -1066,7 +1028,7 @@
               HasBranchToSelf = true;
             } else {
               DidChange = true;
-              ReplaceUsesOfBlockWith(*PI, MBB, CurTBB, TII);
+              (*PI)->ReplaceUsesOfBlockWith(MBB, CurTBB);
             }
           }
 
