[GlobalOpt] Pass DTU to removeUnreachableBlocks instead of recomputing.

removeUnreachableBlocks knows how to preserve the DomTree, so make use
of it instead of re-computing the DT.

Reviewers: davide, kuhar, brzycki

Reviewed By: davide, kuhar

Differential Revision: https://reviews.llvm.org/D68298

llvm-svn: 373430
This commit is contained in:
Florian Hahn 2019-10-02 08:15:31 +00:00
parent 167b0529be
commit 70f7003548
1 changed files with 3 additions and 7 deletions

View File

@ -2285,14 +2285,10 @@ OptimizeFunctions(Module &M,
// So, remove unreachable blocks from the function, because a) there's // So, remove unreachable blocks from the function, because a) there's
// no point in analyzing them and b) GlobalOpt should otherwise grow // no point in analyzing them and b) GlobalOpt should otherwise grow
// some more complicated logic to break these cycles. // some more complicated logic to break these cycles.
// Removing unreachable blocks might invalidate the dominator so we
// recalculate it.
if (!F->isDeclaration()) { if (!F->isDeclaration()) {
if (removeUnreachableBlocks(*F)) { auto &DT = LookupDomTree(*F);
auto &DT = LookupDomTree(*F); DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Lazy);
DT.recalculate(*F); Changed |= removeUnreachableBlocks(*F, nullptr, &DTU);
Changed = true;
}
} }
Changed |= processGlobal(*F, GetTLI, LookupDomTree); Changed |= processGlobal(*F, GetTLI, LookupDomTree);