diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp --- a/llvm/lib/Transforms/Utils/Local.cpp +++ b/llvm/lib/Transforms/Utils/Local.cpp @@ -2307,10 +2307,15 @@ assert(TI && "Basic block should have a terminator"); // Terminators like invoke can have users. We have to replace their users, // before removing them. - if (!TI->use_empty()) + if (!TI->use_empty()) { TI->replaceAllUsesWith(UndefValue::get(TI->getType())); - TI->eraseFromParent(); - new UnreachableInst(BB->getContext(), BB); + Changed = true; + } + if (!isa(TI)) { + TI->eraseFromParent(); + new UnreachableInst(BB->getContext(), BB); + Changed = true; + } assert(succ_empty(BB) && "The successor list of BB isn't empty before " "applying corresponding DTU updates."); } @@ -2327,7 +2332,7 @@ DTU->deleteBB(BB); } if (!Deleted) - return false; + return Changed; } else { for (auto *BB : DeadBlockSet) BB->eraseFromParent();