Revert part of r91101 which was causing an infinite loop in the self-hosting
[oota-llvm.git] / lib / CodeGen / MachineBasicBlock.cpp
index 7ce723e019af2de5ac5ca1cc69e9a5dc33521193..0097dd16105567f09ec2757d08613503ababfcd5 100644 (file)
@@ -457,11 +457,16 @@ MachineBasicBlock::BranchesToLandingPad(const MachineBasicBlock *MBB) const {
   SmallSet<const MachineBasicBlock*, 32> Visited;
   const MachineBasicBlock *CurMBB = MBB;
 
-  while (!CurMBB->isLandingPad()) {
-    if (CurMBB->succ_size() != 1)
+  while (!Visited.count(CurMBB) && !CurMBB->isLandingPad()) {
+    if (CurMBB->size() != 1 || CurMBB->succ_empty() || CurMBB->succ_size() != 1)
       break;
 
-    if (!Visited.insert(CurMBB)) break;
+    const TargetInstrInfo *TII =
+      CurMBB->getParent()->getTarget().getInstrInfo();
+    if (!TII->isUnpredicatedTerminator(CurMBB->begin()))
+      break;
+
+    Visited.insert(CurMBB);
     CurMBB = *CurMBB->succ_begin();
   }