[llvm] 32fc323 - [SimplifyCFG] markAliveBlocks(): catchswitch: preserve PostDomTree
Roman Lebedev via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 16 14:21:34 PST 2021
Author: Roman Lebedev
Date: 2021-01-17T01:21:05+03:00
New Revision: 32fc32317a31fc00e7e4086d6c93dd1eab75960c
URL: https://github.com/llvm/llvm-project/commit/32fc32317a31fc00e7e4086d6c93dd1eab75960c
DIFF: https://github.com/llvm/llvm-project/commit/32fc32317a31fc00e7e4086d6c93dd1eab75960c.diff
LOG: [SimplifyCFG] markAliveBlocks(): catchswitch: preserve PostDomTree
When removing catchpad's from catchswitch, if that removes a successor,
we need to record that in DomTreeUpdater.
This fixes PostDomTree preservation failure in an existing test.
This appears to be the single issue that i see in my current test coverage.
Added:
Modified:
llvm/lib/Transforms/Utils/Local.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Utils/Local.cpp b/llvm/lib/Transforms/Utils/Local.cpp
index 6e526cc4f105..1f94c6191554 100644
--- a/llvm/lib/Transforms/Utils/Local.cpp
+++ b/llvm/lib/Transforms/Utils/Local.cpp
@@ -2286,6 +2286,7 @@ static bool markAliveBlocks(Function &F,
}
};
+ SmallMapVector<BasicBlock *, int, 8> NumPerSuccessorCases;
// Set of unique CatchPads.
SmallDenseMap<CatchPadInst *, detail::DenseSetEmpty, 4,
CatchPadDenseMapInfo, detail::DenseSetPair<CatchPadInst *>>
@@ -2295,14 +2296,22 @@ static bool markAliveBlocks(Function &F,
E = CatchSwitch->handler_end();
I != E; ++I) {
BasicBlock *HandlerBB = *I;
+ ++NumPerSuccessorCases[HandlerBB];
auto *CatchPad = cast<CatchPadInst>(HandlerBB->getFirstNonPHI());
if (!HandlerSet.insert({CatchPad, Empty}).second) {
+ --NumPerSuccessorCases[HandlerBB];
CatchSwitch->removeHandler(I);
--I;
--E;
Changed = true;
}
}
+ std::vector<DominatorTree::UpdateType> Updates;
+ for (const std::pair<BasicBlock *, int> &I : NumPerSuccessorCases)
+ if (I.second == 0)
+ Updates.push_back({DominatorTree::Delete, BB, I.first});
+ if (DTU)
+ DTU->applyUpdates(Updates);
}
Changed |= ConstantFoldTerminator(BB, true, nullptr, DTU);
More information about the llvm-commits
mailing list