Index: lib/CodeGen/BranchRelaxation.cpp =================================================================== --- lib/CodeGen/BranchRelaxation.cpp +++ lib/CodeGen/BranchRelaxation.cpp @@ -415,6 +415,28 @@ for (MachineFunction::iterator I = MF->begin(); I != MF->end(); ++I) { MachineBasicBlock &MBB = *I; + auto Last = MBB.rbegin(); + if (Last == MBB.rend()) // Empty block. + continue; + + // Expand the unconditional branch first if necessary. If there is a + // conditional branch, this will end up changing the branch destination of + // it to be over the newly inserted indirect branch block, which may avoid + // the need to try expanding the conditional branch first, saving an extra + // jump. + if (Last->isUnconditionalBranch()) { + // Unconditional branch destination might be unanalyzable, assume these + // are OK. + if (MachineBasicBlock *DestBB = TII->getBranchDestBlock(*Last)) { + if (!isBlockInRange(*Last, *DestBB)) { + fixupUnconditionalBranch(*Last); + ++NumUnconditionalRelaxed; + Changed = true; + } + } + } + + // Loop over the conditional branches. MachineBasicBlock::iterator Next; for (MachineBasicBlock::iterator J = MBB.getFirstTerminator(); J != MBB.end(); J = Next) { @@ -441,21 +463,6 @@ Next = MBB.getFirstTerminator(); } } - - if (MI.isUnconditionalBranch()) { - // Unconditional branch destination might be unanalyzable, assume these - // are OK. - if (MachineBasicBlock *DestBB = TII->getBranchDestBlock(MI)) { - if (!isBlockInRange(MI, *DestBB)) { - fixupUnconditionalBranch(MI); - ++NumUnconditionalRelaxed; - Changed = true; - } - } - - // Unconditional branch is the last terminator. - break; - } } }