diff --git a/llvm/lib/CodeGen/BranchRelaxation.cpp b/llvm/lib/CodeGen/BranchRelaxation.cpp index 016c81dc5aa4bf..81d13617c37b38 100644 --- a/llvm/lib/CodeGen/BranchRelaxation.cpp +++ b/llvm/lib/CodeGen/BranchRelaxation.cpp @@ -284,6 +284,12 @@ MachineBasicBlock *BranchRelaxation::splitBlockBeforeInstr(MachineInstr &MI, /// specific BB can fit in MI's displacement field. bool BranchRelaxation::isBlockInRange( const MachineInstr &MI, const MachineBasicBlock &DestBB) const { + + // FAULTING_OP's destination is not encoded in the instruction stream + // and thus always in range. + if (MI.getOpcode() == TargetOpcode::FAULTING_OP) + return true; + int64_t BrOffset = getInstrOffset(MI); int64_t DestOffset = BlockInfo[DestBB.getNumber()].Offset; @@ -558,11 +564,6 @@ bool BranchRelaxation::relaxBranchInstructions() { if (!MI.isConditionalBranch()) continue; - if (MI.getOpcode() == TargetOpcode::FAULTING_OP) - // FAULTING_OP's destination is not encoded in the instruction stream - // and thus never needs relaxed. - continue; - MachineBasicBlock *DestBB = TII->getBranchDestBlock(MI); if (!isBlockInRange(MI, *DestBB)) { if (Next != MBB.end() && Next->isConditionalBranch()) {