Skip to content

Commit d882b09

Browse files
committed
Avoid unnecessarily copying the worklist for the entire CFG.
1 parent 25f24da commit d882b09

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

lib/SILOptimizer/Transforms/AccessEnforcementOpts.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ class AccessConflictAndMergeAnalysis {
294294

295295
void
296296
propagateAccessSetsBottomUp(LoopRegionToAccessedStorage &regionToStorageMap,
297-
llvm::SmallVector<unsigned, 16> worklist);
297+
const llvm::SmallVector<unsigned, 16> &worklist);
298298

299299
void calcBottomUpOrder(llvm::SmallVectorImpl<unsigned> &worklist);
300300

@@ -505,6 +505,8 @@ void AccessConflictAndMergeAnalysis::mergeState(RegionState &state,
505505
void AccessConflictAndMergeAnalysis::analyze() {
506506
identifyBeginAccesses();
507507
LoopRegionToAccessedStorage accessSetsOfRegions;
508+
// Populate a worklist of regions such that the top of the worklist is the
509+
// innermost loop and the bottom of the worklist is the entry block.
508510
llvm::SmallVector<unsigned, 16> worklist;
509511
calcBottomUpOrder(worklist);
510512
propagateAccessSetsBottomUp(accessSetsOfRegions, worklist);
@@ -593,9 +595,8 @@ void AccessConflictAndMergeAnalysis::identifyBeginAccesses() {
593595
// Propagates access summaries bottom-up from nested regions
594596
void AccessConflictAndMergeAnalysis::propagateAccessSetsBottomUp(
595597
LoopRegionToAccessedStorage &regionToStorageMap,
596-
llvm::SmallVector<unsigned, 16> worklist) {
597-
while (!worklist.empty()) {
598-
auto regionID = worklist.pop_back_val();
598+
const llvm::SmallVector<unsigned, 16> &worklist) {
599+
for (unsigned regionID : reverse(worklist)) {
599600
auto *region = LRFI->getRegion(regionID);
600601
assert(regionToStorageMap.find(regionID) == regionToStorageMap.end() &&
601602
"Should not process a region twice");

0 commit comments

Comments
 (0)