Reverts wrong modification to MachineBlockPlacement & BranchFolding; uses a new strat...
[oota-llvm.git] / lib / CodeGen / BranchFolding.cpp
index bd89ee3..a56fec4 100644 (file)
@@ -493,15 +493,6 @@ static void FixTail(MachineBasicBlock *CurMBB, MachineBasicBlock *SuccBB,
     MachineBasicBlock *NextBB = &*I;
     if (TBB == NextBB && !Cond.empty() && !FBB) {
       if (!TII->ReverseBranchCondition(Cond)) {
     MachineBasicBlock *NextBB = &*I;
     if (TBB == NextBB && !Cond.empty() && !FBB) {
       if (!TII->ReverseBranchCondition(Cond)) {
-        // XXX-disabled: Don't fold conditional branches that we added
-        // intentionally.
-        MachineBasicBlock::iterator I = CurMBB->getLastNonDebugInstr();
-        if (I != CurMBB->end()) {
-          if (I->isConditionalBranch()) {
-            return;
-          }
-        }
-
         TII->RemoveBranch(*CurMBB);
         TII->InsertBranch(*CurMBB, SuccBB, nullptr, Cond, dl);
         return;
         TII->RemoveBranch(*CurMBB);
         TII->InsertBranch(*CurMBB, SuccBB, nullptr, Cond, dl);
         return;
@@ -1125,6 +1116,12 @@ bool BranchFolder::OptimizeBranches(MachineFunction &MF) {
   for (MachineFunction::iterator I = std::next(MF.begin()), E = MF.end();
        I != E; ) {
     MachineBasicBlock *MBB = &*I++;
   for (MachineFunction::iterator I = std::next(MF.begin()), E = MF.end();
        I != E; ) {
     MachineBasicBlock *MBB = &*I++;
+    // XXX-disabled: Don't optimize blocks that contain intentionally added fake
+    // conditional branch.
+    if (!MBB->getCanEliminateMachineBB()) {
+      continue;
+    }
+
     MadeChange |= OptimizeBlock(MBB);
 
     // If it is dead, remove it.
     MadeChange |= OptimizeBlock(MBB);
 
     // If it is dead, remove it.
@@ -1302,15 +1299,6 @@ ReoptimizeBlock:
     // If the previous branch *only* branches to *this* block (conditional or
     // not) remove the branch.
     if (PriorTBB == MBB && !PriorFBB) {
     // If the previous branch *only* branches to *this* block (conditional or
     // not) remove the branch.
     if (PriorTBB == MBB && !PriorFBB) {
-      // XXX-disabled: Don't fold conditional branches that we added
-      // intentionally.
-      MachineBasicBlock::iterator I = PrevBB.getLastNonDebugInstr();
-      if (I != PrevBB.end()) {
-        if (I->isConditionalBranch()) {
-          return MadeChange ;
-        }
-      }
-
       TII->RemoveBranch(PrevBB);
       MadeChange = true;
       ++NumBranchOpts;
       TII->RemoveBranch(PrevBB);
       MadeChange = true;
       ++NumBranchOpts;
@@ -1320,15 +1308,6 @@ ReoptimizeBlock:
     // If the prior block branches somewhere else on the condition and here if
     // the condition is false, remove the uncond second branch.
     if (PriorFBB == MBB) {
     // If the prior block branches somewhere else on the condition and here if
     // the condition is false, remove the uncond second branch.
     if (PriorFBB == MBB) {
-      // XXX-disabled: Don't fold conditional branches that we added
-      // intentionally.
-      MachineBasicBlock::iterator I = PrevBB.getLastNonDebugInstr();
-      if (I != PrevBB.end()) {
-        if (I->isConditionalBranch()) {
-          return MadeChange ;
-        }
-      }
-
       DebugLoc dl = getBranchDebugLoc(PrevBB);
       TII->RemoveBranch(PrevBB);
       TII->InsertBranch(PrevBB, PriorTBB, nullptr, PriorCond, dl);
       DebugLoc dl = getBranchDebugLoc(PrevBB);
       TII->RemoveBranch(PrevBB);
       TII->InsertBranch(PrevBB, PriorTBB, nullptr, PriorCond, dl);
@@ -1341,15 +1320,6 @@ ReoptimizeBlock:
     // if the branch condition is reversible, reverse the branch to create a
     // fall-through.
     if (PriorTBB == MBB) {
     // if the branch condition is reversible, reverse the branch to create a
     // fall-through.
     if (PriorTBB == MBB) {
-      // XXX-disabled: Don't fold conditional branches that we added
-      // intentionally.
-      MachineBasicBlock::iterator I = PrevBB.getLastNonDebugInstr();
-      if (I != PrevBB.end()) {
-        if (I->isConditionalBranch()) {
-          return MadeChange ;
-        }
-      }
-
       SmallVector<MachineOperand, 4> NewPriorCond(PriorCond);
       if (!TII->ReverseBranchCondition(NewPriorCond)) {
         DebugLoc dl = getBranchDebugLoc(PrevBB);
       SmallVector<MachineOperand, 4> NewPriorCond(PriorCond);
       if (!TII->ReverseBranchCondition(NewPriorCond)) {
         DebugLoc dl = getBranchDebugLoc(PrevBB);