Skip to content

Commit ff2111e

Browse files
authored
Merge pull request #60059 from eeckstein/fix-accessopt-invalidation
AccessEnforcementWMO: notify analysis if functions have changed.
2 parents 393626f + 4818a46 commit ff2111e

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

lib/SILOptimizer/Transforms/AccessEnforcementWMO.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555

5656
#define DEBUG_TYPE "access-enforcement-wmo"
5757

58+
#include "swift/Basic/SmallPtrSetVector.h"
5859
#include "swift/SIL/DebugUtils.h"
5960
#include "swift/SIL/MemAccessUtils.h"
6061
#include "swift/SIL/SILFunction.h"
@@ -143,6 +144,7 @@ namespace {
143144
// checks).
144145
class GlobalAccessRemoval {
145146
SILModule &module;
147+
SmallPtrSetVector<SILFunction *, 8> changedFunctions;
146148

147149
using BeginAccessSet = SmallDenseSet<BeginAccessInst *, 8>;
148150

@@ -162,6 +164,8 @@ class GlobalAccessRemoval {
162164
GlobalAccessRemoval(SILModule &module) : module(module) {}
163165

164166
void perform();
167+
168+
void invalidateAnalysis(SILModuleTransform *pass);
165169

166170
protected:
167171
bool visitInstruction(SILInstruction *I);
@@ -189,6 +193,13 @@ void GlobalAccessRemoval::perform() {
189193
removeNonreentrantAccess();
190194
}
191195

196+
void GlobalAccessRemoval::invalidateAnalysis(SILModuleTransform *pass) {
197+
for (SILFunction *changedFunction : changedFunctions) {
198+
pass->invalidateAnalysis(changedFunction,
199+
SILAnalysis::InvalidationKind::Instructions);
200+
}
201+
}
202+
192203
bool GlobalAccessRemoval::visitInstruction(SILInstruction *I) {
193204
if (auto *BAI = dyn_cast<BeginAccessInst>(I)) {
194205
auto storageAndBase = AccessStorageWithBase::compute(BAI->getSource());
@@ -292,6 +303,7 @@ void GlobalAccessRemoval::removeNonreentrantAccess() {
292303
for (BeginAccessInst *beginAccess : info.beginAccessSet) {
293304
LLVM_DEBUG(llvm::dbgs() << " Disabling access marker " << *beginAccess);
294305
beginAccess->setEnforcement(SILAccessEnforcement::Static);
306+
changedFunctions.insert(beginAccess->getFunction());
295307
}
296308
}
297309
}
@@ -301,6 +313,7 @@ struct AccessEnforcementWMO : public SILModuleTransform {
301313
void run() override {
302314
GlobalAccessRemoval eliminationPass(*getModule());
303315
eliminationPass.perform();
316+
eliminationPass.invalidateAnalysis(this);
304317
}
305318
};
306319
}

0 commit comments

Comments
 (0)