Skip to content

Commit 3cd4258

Browse files
authored
Merge pull request #33770 from compnerd/pruned-pruning-date
SILOptimizer: make vtable pruning less aggressive
2 parents 29f2f77 + a92e9b3 commit 3cd4258

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

lib/SILOptimizer/Transforms/PruneVTables.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,16 @@ using namespace swift;
2727

2828
namespace {
2929
class PruneVTables : public SILModuleTransform {
30-
void runOnVTable(SILModule *M,
31-
SILVTable *vtable) {
30+
void runOnVTable(SILModule *M, SILVTable *vtable) {
3231
LLVM_DEBUG(llvm::dbgs() << "PruneVTables inspecting table:\n";
3332
vtable->print(llvm::dbgs()));
33+
if (!M->isWholeModule() &&
34+
vtable->getClass()->getEffectiveAccess() >= AccessLevel::FilePrivate) {
35+
LLVM_DEBUG(llvm::dbgs() << "Ignoring visible table: ";
36+
vtable->print(llvm::dbgs()));
37+
return;
38+
}
39+
3440
for (auto &entry : vtable->getMutableEntries()) {
3541

3642
// We don't need to worry about entries that are overridden,

test/SILOptimizer/prune-vtables.sil

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ sil @PrivateA_yesOverrides : $@convention(method) (@guaranteed PrivateA) -> ()
1414
sil @PrivateA_isFinal : $@convention(method) (@guaranteed PrivateA) -> ()
1515

1616
// NOWMO-LABEL: sil_vtable PrivateA {
17-
// NOWMO: #PrivateA.noOverrides{{.*}} [nonoverridden]
17+
// NOWMO: #PrivateA.noOverrides{{[^[]]*}}
1818
// NOWMO-NOT: #PrivateA.yesOverrides{{.*}} [nonoverridden]
19-
// NOWMO: #PrivateA.isFinal{{.*}} [nonoverridden]
19+
// NOWMO: #PrivateA.isFinal{{[^[]]*}}
2020

2121
// WMO-LABEL: sil_vtable PrivateA {
2222
// WMO: #PrivateA.noOverrides{{.*}} [nonoverridden]
@@ -35,9 +35,9 @@ private class PrivateB: PrivateA {
3535
sil @PrivateB_yesOverrides : $@convention(method) (@guaranteed PrivateB) -> ()
3636

3737
// NOWMO-LABEL: sil_vtable PrivateB {
38-
// NOWMO: #PrivateA.noOverrides{{.*}} [nonoverridden]
38+
// NOWMO: #PrivateA.noOverrides{{[^[]]*}}
3939
// NOWMO-NOT: #PrivateA.yesOverrides{{.*}} [nonoverridden]
40-
// NOWMO: #PrivateA.isFinal{{.*}} [nonoverridden]
40+
// NOWMO: #PrivateA.isFinal{{[^[]]*}}
4141

4242
// WMO-LABEL: sil_vtable PrivateB {
4343
// WMO: #PrivateA.noOverrides{{.*}} [nonoverridden]
@@ -62,7 +62,7 @@ sil @InternalA_isFinal : $@convention(method) (@guaranteed InternalA) -> ()
6262
// NOWMO-LABEL: sil_vtable InternalA {
6363
// NOWMO-NOT: #InternalA.noOverrides{{.*}} [nonoverridden]
6464
// NOWMO-NOT: #InternalA.yesOverrides{{.*}} [nonoverridden]
65-
// NOWMO: #InternalA.isFinal{{.*}} [nonoverridden]
65+
// NOWMO: #InternalA.isFinal{{[^[]]*}}
6666

6767
// WMO-LABEL: sil_vtable InternalA {
6868
// WMO: #InternalA.noOverrides{{.*}} [nonoverridden]
@@ -83,7 +83,7 @@ sil @InternalB_yesOverrides : $@convention(method) (@guaranteed InternalB) -> ()
8383
// NOWMO-LABEL: sil_vtable InternalB {
8484
// NOWMO-NOT: #InternalA.noOverrides{{.*}} [nonoverridden]
8585
// NOWMO-NOT: #InternalA.yesOverrides{{.*}} [nonoverridden]
86-
// NOWMO: #InternalA.isFinal{{.*}} [nonoverridden]
86+
// NOWMO: #InternalA.isFinal{{[^[]]*}}
8787

8888
// WMO-LABEL: sil_vtable InternalB {
8989
// WMO: #InternalA.noOverrides{{.*}} [nonoverridden]
@@ -108,7 +108,7 @@ sil @PublicA_isFinal : $@convention(method) (@guaranteed PublicA) -> ()
108108
// NOWMO-LABEL: sil_vtable PublicA {
109109
// NOWMO-NOT: #PublicA.noOverrides{{.*}} [nonoverridden]
110110
// NOWMO-NOT: #PublicA.yesOverrides{{.*}} [nonoverridden]
111-
// NOWMO: #PublicA.isFinal{{.*}} [nonoverridden]
111+
// NOWMO: #PublicA.isFinal{{[^[]]*}}
112112

113113
// WMO-LABEL: sil_vtable PublicA {
114114
// WMO: #PublicA.noOverrides{{.*}} [nonoverridden]
@@ -129,7 +129,7 @@ sil @PublicB_yesOverrides : $@convention(method) (@guaranteed PublicB) -> ()
129129
// NOWMO-LABEL: sil_vtable PublicB {
130130
// NOWMO-NOT: #PublicA.noOverrides{{.*}} [nonoverridden]
131131
// NOWMO-NOT: #PublicA.yesOverrides{{.*}} [nonoverridden]
132-
// NOWMO: #PublicA.isFinal{{.*}} [nonoverridden]
132+
// NOWMO: #PublicA.isFinal{{[^[]]*}}
133133

134134
// WMO-LABEL: sil_vtable PublicB {
135135
// WMO: #PublicA.noOverrides{{.*}} [nonoverridden]
@@ -154,7 +154,7 @@ sil @OpenA_isFinal : $@convention(method) (@guaranteed OpenA) -> ()
154154
// NOWMO-LABEL: sil_vtable OpenA {
155155
// NOWMO-NOT: #OpenA.noOverrides{{.*}} [nonoverridden]
156156
// NOWMO-NOT: #OpenA.yesOverrides{{.*}} [nonoverridden]
157-
// NOWMO: #OpenA.isFinal{{.*}} [nonoverridden]
157+
// NOWMO: #OpenA.isFinal{{[^[]]*}}
158158

159159
// WMO-LABEL: sil_vtable OpenA {
160160
// WMO-NOT: #OpenA.noOverrides{{.*}} [nonoverridden]
@@ -175,7 +175,7 @@ sil @OpenB_yesOverrides : $@convention(method) (@guaranteed OpenB) -> ()
175175
// NOWMO-LABEL: sil_vtable OpenB {
176176
// NOWMO-NOT: #OpenA.noOverrides{{.*}} [nonoverridden]
177177
// NOWMO-NOT: #OpenA.yesOverrides{{.*}} [nonoverridden]
178-
// NOWMO: #OpenA.isFinal{{.*}} [nonoverridden]
178+
// NOWMO: #OpenA.isFinal{{[^[]]*}}
179179

180180
// WMO-LABEL: sil_vtable OpenB {
181181
// WMO-NOT: #OpenA.noOverrides{{.*}} [nonoverridden]

0 commit comments

Comments
 (0)