diff --git a/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp b/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp --- a/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp +++ b/llvm/lib/Target/AMDGPU/SILowerControlFlow.cpp @@ -730,23 +730,6 @@ } bool SILowerControlFlow::removeMBBifRedundant(MachineBasicBlock &MBB) { - auto GetFallThroughSucc = [=](MachineBasicBlock *B) -> MachineBasicBlock * { - auto *S = B->getNextNode(); - if (!S) - return nullptr; - if (B->isSuccessor(S)) { - // The only fallthrough candidate - MachineBasicBlock::iterator I(B->getFirstInstrTerminator()); - MachineBasicBlock::iterator E = B->end(); - for (; I != E; I++) { - if (I->isBranch() && TII->getBranchDestBlock(*I) == S) - // We have unoptimized branch to layout successor - return nullptr; - } - } - return S; - }; - for (auto &I : MBB.instrs()) { if (!I.isDebugInstr() && !I.isUnconditionalBranch()) return false; @@ -759,7 +742,7 @@ while (!MBB.predecessors().empty()) { MachineBasicBlock *P = *MBB.pred_begin(); - if (GetFallThroughSucc(P) == &MBB) + if (P->getFallThrough() == &MBB) FallThrough = P; P->ReplaceUsesOfBlockWith(&MBB, Succ); } @@ -780,7 +763,7 @@ MBB.clear(); MBB.eraseFromParent(); if (FallThrough && !FallThrough->isLayoutSuccessor(Succ)) { - if (!GetFallThroughSucc(Succ)) { + if (!Succ->canFallThrough()) { MachineFunction *MF = FallThrough->getParent(); MachineFunction::iterator FallThroughPos(FallThrough); MF->splice(std::next(FallThroughPos), Succ);