Skip to content

Commit 408cf02

Browse files
committed
rework cross-module-optimization
* rename the CrossModuleSerializationSetup pass to simply CrossModuleOptimization * remove the CMO specific serializer pass. Instead run the CrossModuleSerializationSetup pass directly before the standard serializer pass. * correctly handle shared functions (e.g. specializations) * refactoring
1 parent c55f040 commit 408cf02

File tree

11 files changed

+357
-333
lines changed

11 files changed

+357
-333
lines changed

include/swift/SILOptimizer/PassManager/Passes.def

+2-4
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ PASS(AccessEnforcementSelection, "access-enforcement-selection",
110110
"Access Enforcement Selection")
111111
PASS(AccessEnforcementWMO, "access-enforcement-wmo",
112112
"Access Enforcement Whole Module Optimization")
113-
PASS(CrossModuleSerializationSetup, "cross-module-serialization-setup",
114-
"Setup serialization flags for cross-module optimization")
113+
PASS(CrossModuleOptimization, "cmo",
114+
"Perform cross-module optimization")
115115
PASS(AccessSummaryDumper, "access-summary-dump",
116116
"Dump Address Parameter Access Summary")
117117
PASS(AccessStorageAnalysisDumper, "access-storage-analysis-dump",
@@ -405,8 +405,6 @@ PASS(SimplifyUnreachableContainingBlocks, "simplify-unreachable-containing-block
405405
"Utility pass. Removes all non-term insts from blocks with unreachable terms")
406406
PASS(SerializeSILPass, "serialize-sil",
407407
"Utility pass. Serializes the current SILModule")
408-
PASS(CMOSerializeSILPass, "cmo-serialize-sil",
409-
"Utility pass. Serializes the current SILModule for cross-module-optimization")
410408
PASS(YieldOnceCheck, "yield-once-check",
411409
"Check correct usage of yields in yield-once coroutines")
412410
PASS(OSLogOptimization, "os-log-optimization", "Optimize os log calls")

lib/AST/Module.cpp

+5-4
Original file line numberDiff line numberDiff line change
@@ -2374,17 +2374,18 @@ canBeUsedForCrossModuleOptimization(DeclContext *ctxt) const {
23742374
// See if context is imported in a "regular" way, i.e. not with
23752375
// @_implementationOnly or @_spi.
23762376
ModuleDecl::ImportFilter filter = {
2377-
ModuleDecl::ImportFilterKind::Exported,
2378-
ModuleDecl::ImportFilterKind::Default};
2377+
ModuleDecl::ImportFilterKind::ImplementationOnly,
2378+
ModuleDecl::ImportFilterKind::SPIAccessControl
2379+
};
23792380
SmallVector<ImportedModule, 4> results;
23802381
getImportedModules(results, filter);
23812382

23822383
auto &imports = getASTContext().getImportCache();
23832384
for (auto &desc : results) {
23842385
if (imports.isImportedBy(moduleOfCtxt, desc.importedModule))
2385-
return true;
2386+
return false;
23862387
}
2387-
return false;
2388+
return true;
23882389
}
23892390

23902391
void SourceFile::lookupImportedSPIGroups(

lib/SILOptimizer/IPO/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
target_sources(swiftSILOptimizer PRIVATE
22
CapturePropagation.cpp
33
ClosureSpecializer.cpp
4-
CrossModuleSerializationSetup.cpp
4+
CrossModuleOptimization.cpp
55
DeadFunctionElimination.cpp
66
GlobalOpt.cpp
77
GlobalPropertyOpt.cpp

0 commit comments

Comments
 (0)