Skip to content

Commit ae6129c

Browse files
committed
Cache the IRGenModule even between SIL passes
1 parent 5dac59c commit ae6129c

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

include/swift/SILOptimizer/PassManager/PassManager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ class SwiftPassInvocation {
102102
SwiftPassInvocation(SILPassManager *passManager) :
103103
passManager(passManager) {}
104104

105+
~SwiftPassInvocation();
106+
105107
SILPassManager *getPassManager() const { return passManager; }
106108

107109
SILTransform *getTransform() const { return transform; }

lib/SILOptimizer/PassManager/PassManager.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,9 +1392,7 @@ irgen::IRGenModule *SwiftPassInvocation::getIRGenModule() {
13921392

13931393
irgen = new irgen::IRGenerator(*irgenOpts, *module);
13941394
auto targetMachine = irgen->createTargetMachine();
1395-
if (!targetMachine)
1396-
return nullptr;
1397-
1395+
assert(targetMachine && "failed to create target");
13981396
irgenModule = new irgen::IRGenModule(*irgen, std::move(targetMachine));
13991397
}
14001398
return irgenModule;
@@ -1410,14 +1408,6 @@ void SwiftPassInvocation::endPass() {
14101408
delete ssaUpdater;
14111409
ssaUpdater = nullptr;
14121410
}
1413-
if (irgenModule) {
1414-
delete irgenModule;
1415-
irgenModule = nullptr;
1416-
}
1417-
if (irgen) {
1418-
delete irgen;
1419-
irgen = nullptr;
1420-
}
14211411
}
14221412

14231413
void SwiftPassInvocation::beginTransformFunction(SILFunction *function) {
@@ -1438,6 +1428,17 @@ void SwiftPassInvocation::endTransformFunction() {
14381428
assert(numNodeSetsAllocated == 0 && "Not all NodeSets deallocated");
14391429
}
14401430

1431+
SwiftPassInvocation::~SwiftPassInvocation() {
1432+
if (irgenModule) {
1433+
delete irgenModule;
1434+
irgenModule = nullptr;
1435+
}
1436+
if (irgen) {
1437+
delete irgen;
1438+
irgen = nullptr;
1439+
}
1440+
}
1441+
14411442
//===----------------------------------------------------------------------===//
14421443
// Swift Bridging
14431444
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)