1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00

[NFCI][SimplifyCFG] mergeEmptyReturnBlocks(): improve Dominator Tree updating

Same as with previous patches.
This commit is contained in:
Roman Lebedev 2021-04-11 23:25:40 +03:00
parent 32907b0f11
commit 3f8200bd5d

View File

@ -142,13 +142,17 @@ static bool mergeEmptyReturnBlocks(Function &F, DomTreeUpdater *DTU) {
cast<ReturnInst>(RetBlock->getTerminator())->getOperand(0)) {
// All predecessors of BB should now branch to RetBlock instead.
if (DTU) {
for (auto *Predecessor : predecessors(&BB)) {
SmallPtrSet<BasicBlock *, 2> PredsOfBB(pred_begin(&BB), pred_end(&BB));
SmallPtrSet<BasicBlock *, 2> PredsOfRetBlock(pred_begin(RetBlock),
pred_end(RetBlock));
Updates.reserve(Updates.size() + 2 * PredsOfBB.size());
for (auto *Predecessor : PredsOfBB)
// But, iff Predecessor already branches to RetBlock,
// don't (re-)add DomTree edge, because it already exists.
if (!is_contained(successors(Predecessor), RetBlock))
if (!PredsOfRetBlock.contains(Predecessor))
Updates.push_back({DominatorTree::Insert, Predecessor, RetBlock});
for (auto *Predecessor : PredsOfBB)
Updates.push_back({DominatorTree::Delete, Predecessor, &BB});
}
}
BB.replaceAllUsesWith(RetBlock);
DeadBlocks.emplace_back(&BB);