Generates conditional branch instead of fake ones for Select instruction in some...
[oota-llvm.git] / lib / CodeGen / SelectionDAG / SelectionDAGISel.cpp
index 1676e2dfe08fb477b6cb01df9bec642449a880d7..491d7ec451c0525740732541e9e0b2b0625c063a 100644 (file)
@@ -663,11 +663,15 @@ bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
     MachineBasicBlock* Succ2Succ = nullptr;
     if ((Succ1->size() == 1 && Succ1->begin()->isUnconditionalBranch()) ||
         (Succ1->size() == 0)) {
     MachineBasicBlock* Succ2Succ = nullptr;
     if ((Succ1->size() == 1 && Succ1->begin()->isUnconditionalBranch()) ||
         (Succ1->size() == 0)) {
-      Succ1Succ = *Succ1->succ_begin();
+      if (Succ1->succ_size()) {
+        Succ1Succ = *Succ1->succ_begin();
+      }
     }
     if ((Succ2->size() == 1 && Succ2->begin()->isUnconditionalBranch()) ||
         (Succ2->size() == 0)) {
     }
     if ((Succ2->size() == 1 && Succ2->begin()->isUnconditionalBranch()) ||
         (Succ2->size() == 0)) {
-      Succ2Succ = *Succ2->succ_begin();
+      if (Succ1->succ_size()) {
+        Succ2Succ = *Succ2->succ_begin();
+      }
     }
 
     bool HasCommonDest = Succ1Succ && Succ1Succ == Succ2Succ;
     }
 
     bool HasCommonDest = Succ1Succ && Succ1Succ == Succ2Succ;
@@ -675,7 +679,6 @@ bool SelectionDAGISel::runOnMachineFunction(MachineFunction &mf) {
       auto MBBIter = MBB.end();
       std::advance(MBBIter, -2);
       assert(MBBIter->isConditionalBranch());
       auto MBBIter = MBB.end();
       std::advance(MBBIter, -2);
       assert(MBBIter->isConditionalBranch());
-      MBBIter->disableCanEliminateMachineInstr();
       MBB.disableCanEliminateMachineBB();
       Succ1->disableCanEliminateMachineBB();
       Succ2->disableCanEliminateMachineBB();
       MBB.disableCanEliminateMachineBB();
       Succ1->disableCanEliminateMachineBB();
       Succ2->disableCanEliminateMachineBB();