Fix for PR1444: do not create two successors to the same block.
Temporarily, this breaks CodeGen/Generic/2006-02-12-InsertLibraryCall.ll
by exposing an unrelated latent problem; working on that.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37323 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp
index afaaf51..6c632c2 100644
--- a/lib/CodeGen/BranchFolding.cpp
+++ b/lib/CodeGen/BranchFolding.cpp
@@ -717,12 +717,20 @@
         I->getOperand(i).setMachineBasicBlock(New);
   }
 
-  // Update the successor information.
+  // 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);
-      BB->addSuccessor(New);
+      if (!HadSuccessorNew)
+        BB->addSuccessor(New);
     }
 }