Skip to content

Commit 4a397cc

Browse files
committed
[NFC] OwnedLifetimeCan: Take DeadEndBlocksAnalysis
All clients of OwnedLifetimeCanonicalization pass an instance of the analysis in. For now, it's unused.
1 parent 11abefe commit 4a397cc

10 files changed

+46
-29
lines changed

include/swift/SILOptimizer/Utils/CanonicalizeOSSALifetime.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
#include "swift/Basic/SmallPtrSetVector.h"
101101
#include "swift/SIL/PrunedLiveness.h"
102102
#include "swift/SIL/SILInstruction.h"
103+
#include "swift/SILOptimizer/Analysis/DeadEndBlocksAnalysis.h"
103104
#include "swift/SILOptimizer/Analysis/DominanceAnalysis.h"
104105
#include "swift/SILOptimizer/Analysis/NonLocalAccessBlockAnalysis.h"
105106
#include "swift/SILOptimizer/Utils/InstructionDeleter.h"
@@ -247,6 +248,8 @@ class CanonicalizeOSSALifetime final {
247248
// extendLivenessThroughOverlappingAccess is invoked.
248249
NonLocalAccessBlocks *accessBlocks = nullptr;
249250

251+
DeadEndBlocksAnalysis *deadEndBlocksAnalysis;
252+
250253
DominanceInfo *domTree = nullptr;
251254

252255
BasicCalleeAnalysis *calleeAnalysis;
@@ -326,15 +329,14 @@ class CanonicalizeOSSALifetime final {
326329
}
327330
};
328331

329-
CanonicalizeOSSALifetime(PruneDebugInsts_t pruneDebugMode,
330-
MaximizeLifetime_t maximizeLifetime,
331-
SILFunction *function,
332-
NonLocalAccessBlockAnalysis *accessBlockAnalysis,
333-
DominanceInfo *domTree,
334-
BasicCalleeAnalysis *calleeAnalysis,
335-
InstructionDeleter &deleter)
332+
CanonicalizeOSSALifetime(
333+
PruneDebugInsts_t pruneDebugMode, MaximizeLifetime_t maximizeLifetime,
334+
SILFunction *function, NonLocalAccessBlockAnalysis *accessBlockAnalysis,
335+
DeadEndBlocksAnalysis *deadEndBlocksAnalysis, DominanceInfo *domTree,
336+
BasicCalleeAnalysis *calleeAnalysis, InstructionDeleter &deleter)
336337
: pruneDebugMode(pruneDebugMode), maximizeLifetime(maximizeLifetime),
337-
accessBlockAnalysis(accessBlockAnalysis), domTree(domTree),
338+
accessBlockAnalysis(accessBlockAnalysis),
339+
deadEndBlocksAnalysis(deadEndBlocksAnalysis), domTree(domTree),
338340
calleeAnalysis(calleeAnalysis), deleter(deleter) {}
339341

340342
SILValue getCurrentDef() const { return currentDef; }

lib/SILOptimizer/Mandatory/ConsumeOperatorCopyableValuesChecker.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,14 +222,15 @@ struct ConsumeOperatorCopyableValuesChecker {
222222
InstructionDeleter deleter;
223223
CanonicalizeOSSALifetime canonicalizer;
224224

225-
ConsumeOperatorCopyableValuesChecker(SILFunction *fn,
226-
DominanceInfo *dominance,
227-
BasicCalleeAnalysis *calleeAnalysis)
225+
ConsumeOperatorCopyableValuesChecker(
226+
SILFunction *fn, DominanceInfo *dominance,
227+
BasicCalleeAnalysis *calleeAnalysis,
228+
DeadEndBlocksAnalysis *deadEndBlocksAnalysis)
228229
: fn(fn), dominance(dominance),
229230
canonicalizer(DontPruneDebugInsts,
230231
MaximizeLifetime_t(!fn->shouldOptimize()), fn,
231-
/*accessBlockAnalysis=*/nullptr, dominance,
232-
calleeAnalysis, deleter) {}
232+
/*accessBlockAnalysis=*/nullptr, deadEndBlocksAnalysis,
233+
dominance, calleeAnalysis, deleter) {}
233234

234235
bool check();
235236

@@ -588,8 +589,9 @@ class ConsumeOperatorCopyableValuesCheckerPass : public SILFunctionTransform {
588589
auto *dominanceAnalysis = getAnalysis<DominanceAnalysis>();
589590
auto *dominance = dominanceAnalysis->get(fn);
590591
auto *calleeAnalysis = getAnalysis<BasicCalleeAnalysis>();
591-
ConsumeOperatorCopyableValuesChecker checker(getFunction(), dominance,
592-
calleeAnalysis);
592+
auto *deadEndBlocksAnalysis = getAnalysis<DeadEndBlocksAnalysis>();
593+
ConsumeOperatorCopyableValuesChecker checker(
594+
getFunction(), dominance, calleeAnalysis, deadEndBlocksAnalysis);
593595
auto *loopAnalysis = getAnalysis<SILLoopAnalysis>();
594596

595597
if (checker.check()) {

lib/SILOptimizer/Mandatory/MoveOnlyAddressCheckerUtils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1490,7 +1490,7 @@ struct MoveOnlyAddressCheckerPImpl {
14901490
DominanceInfo *domTree, PostOrderAnalysis *poa,
14911491
DeadEndBlocksAnalysis *deba,
14921492
borrowtodestructure::IntervalMapAllocator &allocator)
1493-
: fn(fn), deleter(), canonicalizer(fn, domTree, deleter),
1493+
: fn(fn), deleter(), canonicalizer(fn, domTree, deba, deleter),
14941494
addressUseState(domTree), diagnosticEmitter(diagnosticEmitter),
14951495
deba(deba), poa(poa), allocator(allocator) {
14961496
deleter.setCallbacks(std::move(

lib/SILOptimizer/Mandatory/MoveOnlyChecker.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ void MoveOnlyChecker::checkObjects() {
115115

116116
completeObjectLifetimes(moveIntroducersToProcess.getArrayRef());
117117

118-
MoveOnlyObjectChecker checker{diagnosticEmitter, domTree, poa, allocator};
118+
MoveOnlyObjectChecker checker{diagnosticEmitter, domTree, deba, poa,
119+
allocator};
119120
madeChange |= checker.check(moveIntroducersToProcess);
120121
}
121122

lib/SILOptimizer/Mandatory/MoveOnlyObjectCheckerTester.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ class MoveOnlyObjectCheckerTesterPass : public SILFunctionTransform {
8989
auto *dominanceAnalysis = getAnalysis<DominanceAnalysis>();
9090
DominanceInfo *domTree = dominanceAnalysis->get(fn);
9191
auto *poa = getAnalysis<PostOrderAnalysis>();
92+
auto *deba = getAnalysis<DeadEndBlocksAnalysis>();
9293

9394
DiagnosticEmitter diagnosticEmitter(fn);
9495
borrowtodestructure::IntervalMapAllocator allocator;
@@ -111,7 +112,8 @@ class MoveOnlyObjectCheckerTesterPass : public SILFunctionTransform {
111112
<< "No move introducers found?! Returning early?!\n");
112113
} else {
113114
diagCount = diagnosticEmitter.getDiagnosticCount();
114-
MoveOnlyObjectChecker checker{diagnosticEmitter, domTree, poa, allocator};
115+
MoveOnlyObjectChecker checker{diagnosticEmitter, domTree, deba, poa,
116+
allocator};
115117
madeChange |= checker.check(moveIntroducersToProcess);
116118
}
117119

lib/SILOptimizer/Mandatory/MoveOnlyObjectCheckerUtils.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,9 @@ struct MoveOnlyObjectCheckerPImpl {
175175
: fn(fn), allocator(allocator), diagnosticEmitter(diagnosticEmitter),
176176
moveIntroducersToProcess(moveIntroducersToProcess) {}
177177

178-
void check(DominanceInfo *domTree, PostOrderAnalysis *poa);
178+
void check(DominanceInfo *domTree,
179+
DeadEndBlocksAnalysis *deadEndBlocksAnalysis,
180+
PostOrderAnalysis *poa);
179181

180182
bool convertBorrowExtractsToOwnedDestructures(
181183
MarkUnresolvedNonCopyableValueInst *mmci, DominanceInfo *domTree,
@@ -331,8 +333,9 @@ bool MoveOnlyObjectCheckerPImpl::checkForSameInstMultipleUseErrors(
331333
// MARK: Main PImpl Routine
332334
//===----------------------------------------------------------------------===//
333335

334-
void MoveOnlyObjectCheckerPImpl::check(DominanceInfo *domTree,
335-
PostOrderAnalysis *poa) {
336+
void MoveOnlyObjectCheckerPImpl::check(
337+
DominanceInfo *domTree, DeadEndBlocksAnalysis *deadEndBlocksAnalysis,
338+
PostOrderAnalysis *poa) {
336339
auto callbacks =
337340
InstModCallbacks().onDelete([&](SILInstruction *instToDelete) {
338341
if (auto *mvi =
@@ -341,7 +344,7 @@ void MoveOnlyObjectCheckerPImpl::check(DominanceInfo *domTree,
341344
instToDelete->eraseFromParent();
342345
});
343346
InstructionDeleter deleter(std::move(callbacks));
344-
OSSACanonicalizer canonicalizer(fn, domTree, deleter);
347+
OSSACanonicalizer canonicalizer(fn, domTree, deadEndBlocksAnalysis, deleter);
345348
diagnosticEmitter.initCanonicalizer(&canonicalizer);
346349

347350
unsigned initialDiagCount = diagnosticEmitter.getDiagnosticCount();
@@ -561,6 +564,6 @@ bool MoveOnlyObjectChecker::check(
561564
"Should only call this with actual insts to check?!");
562565
MoveOnlyObjectCheckerPImpl checker(instsToCheck[0]->getFunction(), allocator,
563566
diagnosticEmitter, instsToCheck);
564-
checker.check(domTree, poa);
567+
checker.check(domTree, deadEndBlocksAnalysis, poa);
565568
return checker.changed;
566569
}

lib/SILOptimizer/Mandatory/MoveOnlyObjectCheckerUtils.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,12 @@ struct OSSACanonicalizer {
4747
CanonicalizeOSSALifetime canonicalizer;
4848

4949
OSSACanonicalizer(SILFunction *fn, DominanceInfo *domTree,
50+
DeadEndBlocksAnalysis *deadEndBlocksAnalysis,
5051
InstructionDeleter &deleter)
5152
: canonicalizer(DontPruneDebugInsts,
5253
MaximizeLifetime_t(!fn->shouldOptimize()), fn,
53-
nullptr /*accessBlockAnalysis*/, domTree,
54-
nullptr /*calleeAnalysis*/, deleter) {}
54+
nullptr /*accessBlockAnalysis*/, deadEndBlocksAnalysis,
55+
domTree, nullptr /*calleeAnalysis*/, deleter) {}
5556

5657
void clear() {
5758
consumingUsesNeedingCopy.clear();
@@ -176,6 +177,7 @@ bool searchForCandidateObjectMarkUnresolvedNonCopyableValueInsts(
176177
struct MoveOnlyObjectChecker {
177178
DiagnosticEmitter &diagnosticEmitter;
178179
DominanceInfo *domTree;
180+
DeadEndBlocksAnalysis *deadEndBlocksAnalysis;
179181
PostOrderAnalysis *poa;
180182
borrowtodestructure::IntervalMapAllocator &allocator;
181183

lib/SILOptimizer/Transforms/CopyPropagation.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ void CopyPropagation::run() {
452452
auto *f = getFunction();
453453
auto *postOrderAnalysis = getAnalysis<PostOrderAnalysis>();
454454
auto *accessBlockAnalysis = getAnalysis<NonLocalAccessBlockAnalysis>();
455+
auto *deadEndBlocksAnalysis = getAnalysis<DeadEndBlocksAnalysis>();
455456
auto *dominanceAnalysis = getAnalysis<DominanceAnalysis>();
456457
auto *calleeAnalysis = getAnalysis<BasicCalleeAnalysis>();
457458
DominanceInfo *domTree = dominanceAnalysis->get(f);
@@ -497,7 +498,8 @@ void CopyPropagation::run() {
497498
// don't need to explicitly check for changes.
498499
CanonicalizeOSSALifetime canonicalizer(
499500
pruneDebug, MaximizeLifetime_t(!getFunction()->shouldOptimize()),
500-
getFunction(), accessBlockAnalysis, domTree, calleeAnalysis, deleter);
501+
getFunction(), accessBlockAnalysis, deadEndBlocksAnalysis, domTree,
502+
calleeAnalysis, deleter);
501503
// NOTE: We assume that the function is in reverse post order so visiting the
502504
// blocks and pushing begin_borrows as we see them and then popping them
503505
// off the end will result in shrinking inner borrow scopes first.

lib/SILOptimizer/Transforms/SILMem2Reg.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2146,7 +2146,8 @@ void MemoryToRegisters::canonicalizeValueLifetimes(
21462146
}
21472147
CanonicalizeOSSALifetime canonicalizer(
21482148
PruneDebugInsts, MaximizeLifetime_t(!f.shouldOptimize()), &f,
2149-
accessBlockAnalysis, domInfo, calleeAnalysis, deleter);
2149+
accessBlockAnalysis, deadEndBlocksAnalysis, domInfo, calleeAnalysis,
2150+
deleter);
21502151
for (auto value : owned) {
21512152
if (isa<SILUndef>(value) || value->isMarkedAsDeleted())
21522153
continue;

lib/SILOptimizer/Utils/CanonicalizeOSSALifetime.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1282,6 +1282,8 @@ static FunctionTest CanonicalizeOSSALifetimeTest(
12821282
[](auto &function, auto &arguments, auto &test) {
12831283
auto *accessBlockAnalysis =
12841284
test.template getAnalysis<NonLocalAccessBlockAnalysis>();
1285+
auto *deadEndBlocksAnalysis =
1286+
test.template getAnalysis<DeadEndBlocksAnalysis>();
12851287
auto *dominanceAnalysis = test.template getAnalysis<DominanceAnalysis>();
12861288
DominanceInfo *domTree = dominanceAnalysis->get(&function);
12871289
auto *calleeAnalysis = test.template getAnalysis<BasicCalleeAnalysis>();
@@ -1291,8 +1293,8 @@ static FunctionTest CanonicalizeOSSALifetimeTest(
12911293
InstructionDeleter deleter;
12921294
CanonicalizeOSSALifetime canonicalizer(
12931295
pruneDebug, maximizeLifetimes, &function,
1294-
respectAccessScopes ? accessBlockAnalysis : nullptr, domTree,
1295-
calleeAnalysis, deleter);
1296+
respectAccessScopes ? accessBlockAnalysis : nullptr,
1297+
deadEndBlocksAnalysis, domTree, calleeAnalysis, deleter);
12961298
auto value = arguments.takeValue();
12971299
SmallVector<SILInstruction *, 4> lexicalLifetimeEnds;
12981300
while (arguments.hasUntaken()) {

0 commit comments

Comments
 (0)