[PATCH] D60357: Improve visited block tracking in isPotentiallyReachable.
Nick Lewycky via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 5 21:28:50 PDT 2019
nicholas updated this revision to Diff 194004.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60357/new/
https://reviews.llvm.org/D60357
Files:
llvm/lib/Analysis/CFG.cpp
Index: llvm/lib/Analysis/CFG.cpp
===================================================================
--- llvm/lib/Analysis/CFG.cpp
+++ llvm/lib/Analysis/CFG.cpp
@@ -189,14 +189,23 @@
// All blocks in a single loop are reachable from all other blocks. From
// any of these blocks, we can skip directly to the exits of the loop,
// ignoring any other blocks inside the loop body.
+ Visited.insert(Outer->block_begin(), Outer->block_end());
Outer->getExitBlocks(Worklist);
} else if (DTN) {
- // The dominance check effectively visited all blocks dominated by BB.
- // Skip over the descendants of the DomTreeNode to visit their successors.
- for (auto I = df_begin(DTN), E = df_end(DTN); I != E; ++I) {
- for (auto Succ : successors(I->getBlock()))
+ // The dominance check effectively visits all blocks dominated by BB. Skip
+ // over the domtree-descendants of the block to visit their successors.
+ for (auto I = df_begin(DTN), E = df_end(DTN); I != E;) {
+ for (auto Succ : successors(I->getBlock())) {
if (!DT->dominates(DTN, DT->getNode(Succ)))
Worklist.push_back(Succ);
+ }
+ ++I;
+ while (I != E && !Visited.insert(I->getBlock()).second) {
+ // Don't enqueue any domtree-descendants of a visited block. We've
+ // already either visited its descendants or enqueued them.
+ // I.skipChildren() implicitly performs ++I.
+ I.skipChildren();
+ }
}
} else {
Worklist.append(succ_begin(BB), succ_end(BB));
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60357.194004.patch
Type: text/x-patch
Size: 1595 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190406/a75904b0/attachment.bin>
More information about the llvm-commits
mailing list