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;
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.
// 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;
// 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);
// 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);