@@ -243,18 +243,20 @@ void ShrinkBorrowScope::findBarriers() {
243
243
// visited.
244
244
//
245
245
// TODO: Handle loops.
246
- SmallPtrSet<SILBasicBlock *, 8 > blocksWithReachedTops;
247
- auto reachedTopOfAllSuccessors =
248
- [&blocksWithReachedTops](SILBasicBlock *block) -> bool {
246
+
247
+ // Blocks to the top of which the borrow scope has been shrunk.
248
+ SmallPtrSet<SILBasicBlock *, 8 > deadBlocks;
249
+ auto hasOnlyDeadSuccessors =
250
+ [&deadBlocks](SILBasicBlock *block) -> bool {
249
251
return llvm::all_of (block->getSuccessorBlocks (), [=](auto *successor) {
250
- return blocksWithReachedTops .contains (successor);
252
+ return deadBlocks .contains (successor);
251
253
});
252
254
};
253
255
254
256
while (!worklist.empty ()) {
255
257
auto *block = worklist.pop_back_val ();
256
258
auto *startingInstruction = startingInstructions.lookup (block);
257
- if (!startingInstruction && !reachedTopOfAllSuccessors (block)) {
259
+ if (!startingInstruction && !hasOnlyDeadSuccessors (block)) {
258
260
continue ;
259
261
}
260
262
if (!startingInstruction &&
@@ -291,7 +293,7 @@ void ShrinkBorrowScope::findBarriers() {
291
293
if (barrier) {
292
294
barrierInstructions.push_back ({block, barrier});
293
295
} else {
294
- blocksWithReachedTops .insert (block);
296
+ deadBlocks .insert (block);
295
297
blocksToEndAtTop.insert (block);
296
298
for (auto *predecessor : block->getPredecessorBlocks ()) {
297
299
worklist.push_back (predecessor);
0 commit comments