Fix simplifycfg crash in handing block merge.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55971 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Utils/BasicBlockUtils.cpp b/lib/Transforms/Utils/BasicBlockUtils.cpp
index 719bc8a..a98e135 100644
--- a/lib/Transforms/Utils/BasicBlockUtils.cpp
+++ b/lib/Transforms/Utils/BasicBlockUtils.cpp
@@ -54,7 +54,17 @@
   
   // Can't merge if there are multiple successors.
   if (!OnlySucc) return false;
-  
+
+  // Can't merge if there is PHI loop.
+  for (BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE; ++BI) {
+    if (PHINode *PN = dyn_cast<PHINode>(BI)) {
+      for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
+        if (PN->getIncomingValue(i) == PN)
+          return false;
+    } else
+      break;
+  }
+
   // Begin by getting rid of unneeded PHIs.
   while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) {
     PN->replaceAllUsesWith(PN->getIncomingValue(0));