Skip to content

Commit 057b1e5

Browse files
committed
change a BFS traversal in PullbackCloner to use BasicBlockWorkqueue
1 parent ba885d9 commit 057b1e5

File tree

1 file changed

+5
-14
lines changed

1 file changed

+5
-14
lines changed

lib/SILOptimizer/Differentiation/PullbackCloner.cpp

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1890,25 +1890,16 @@ bool PullbackCloner::Implementation::run() {
18901890
// ignored.
18911891
// The original blocks in traversal order for pullback generation.
18921892
SmallVector<SILBasicBlock *, 8> originalBlocks;
1893-
// The set of visited original blocks.
1894-
SmallDenseSet<SILBasicBlock *, 8> visitedBlocks;
1893+
// The workqueue used for bookkeeping during the breadth-first traversal.
1894+
BasicBlockWorkqueue workqueue = {originalExitBlock};
18951895

18961896
// Perform BFS from the original exit block.
18971897
{
1898-
std::deque<SILBasicBlock *> worklist = {};
1899-
worklist.push_back(originalExitBlock);
1900-
visitedBlocks.insert(originalExitBlock);
1901-
while (!worklist.empty()) {
1902-
auto *BB = worklist.front();
1903-
worklist.pop_front();
1904-
1898+
while (auto *BB = workqueue.pop()) {
19051899
originalBlocks.push_back(BB);
19061900

19071901
for (auto *nextBB : BB->getPredecessorBlocks()) {
1908-
if (!visitedBlocks.count(nextBB)) {
1909-
worklist.push_back(nextBB);
1910-
visitedBlocks.insert(nextBB);
1911-
}
1902+
workqueue.pushIfNotVisited(nextBB);
19121903
}
19131904
}
19141905
}
@@ -2004,7 +1995,7 @@ bool PullbackCloner::Implementation::run() {
20041995
// pullback original block, passing adjoint values of active values.
20051996
for (auto *succBB : origBB->getSuccessorBlocks()) {
20061997
// Skip generating pullback block for original unreachable blocks.
2007-
if (!visitedBlocks.count(succBB))
1998+
if (!workqueue.isVisited(succBB))
20081999
continue;
20092000
auto *pullbackTrampolineBB = pullback.createBasicBlockBefore(pullbackBB);
20102001
pullbackTrampolineBBMap.insert({{origBB, succBB}, pullbackTrampolineBB});

0 commit comments

Comments
 (0)