Skip to content

Commit f93ed00

Browse files
committed
FineModuleTracing: use requested action type to further gate whether emitting fine-grained module trace is supported.
Emitting fine-grained module tracing files during full compilation should be sufficient for the use case in design. Other swift-frontend invocations, such as emitting modules, doesn't need fully type-checked AST to perform the action, therefore requesting/walking the fully typechecked AST to emit those tracing files may introduce performance overhead.
1 parent 2e97647 commit f93ed00

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

lib/FrontendTool/LoadedModuleTrace.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,8 +899,56 @@ static void createFineModuleTraceFile(CompilerInstance &instance,
899899
}
900900
}
901901

902+
static bool shouldActionTypeEmitFineModuleTrace(FrontendOptions::ActionType action) {
903+
// Only full compilation jobs should emit fine module tracing file.
904+
// Other partial compilation jobs, such as emitting modules, only typecheck partially
905+
// so walking into every function bodies may be risky.
906+
switch(action) {
907+
case swift::FrontendOptions::ActionType::Typecheck:
908+
case swift::FrontendOptions::ActionType::EmitSILGen:
909+
case swift::FrontendOptions::ActionType::EmitSIL:
910+
case swift::FrontendOptions::ActionType::EmitAssembly:
911+
case swift::FrontendOptions::ActionType::EmitLoweredSIL:
912+
case swift::FrontendOptions::ActionType::EmitIRGen:
913+
case swift::FrontendOptions::ActionType::EmitIR:
914+
case swift::FrontendOptions::ActionType::EmitBC:
915+
case swift::FrontendOptions::ActionType::EmitObject:
916+
return true;
917+
case swift::FrontendOptions::ActionType::NoneAction:
918+
case swift::FrontendOptions::ActionType::Parse:
919+
case swift::FrontendOptions::ActionType::ResolveImports:
920+
case swift::FrontendOptions::ActionType::DumpParse:
921+
case swift::FrontendOptions::ActionType::DumpInterfaceHash:
922+
case swift::FrontendOptions::ActionType::DumpAST:
923+
case swift::FrontendOptions::ActionType::PrintAST:
924+
case swift::FrontendOptions::ActionType::PrintASTDecl:
925+
case swift::FrontendOptions::ActionType::DumpScopeMaps:
926+
case swift::FrontendOptions::ActionType::DumpAvailabilityScopes:
927+
case swift::FrontendOptions::ActionType::EmitImportedModules:
928+
case swift::FrontendOptions::ActionType::EmitPCH:
929+
case swift::FrontendOptions::ActionType::EmitModuleOnly:
930+
case swift::FrontendOptions::ActionType::MergeModules:
931+
case swift::FrontendOptions::ActionType::CompileModuleFromInterface:
932+
case swift::FrontendOptions::ActionType::TypecheckModuleFromInterface:
933+
case swift::FrontendOptions::ActionType::EmitSIBGen:
934+
case swift::FrontendOptions::ActionType::EmitSIB:
935+
case swift::FrontendOptions::ActionType::Immediate:
936+
case swift::FrontendOptions::ActionType::REPL:
937+
case swift::FrontendOptions::ActionType::DumpTypeInfo:
938+
case swift::FrontendOptions::ActionType::EmitPCM:
939+
case swift::FrontendOptions::ActionType::DumpPCM:
940+
case swift::FrontendOptions::ActionType::ScanDependencies:
941+
case swift::FrontendOptions::ActionType::PrintVersion:
942+
case swift::FrontendOptions::ActionType::PrintFeature:
943+
return false;
944+
}
945+
}
946+
902947
bool swift::emitFineModuleTraceIfNeeded(CompilerInstance &Instance,
903948
const FrontendOptions &opts) {
949+
if (!shouldActionTypeEmitFineModuleTrace(opts.RequestedAction)) {
950+
return false;
951+
}
904952
ModuleDecl *mainModule = Instance.getMainModule();
905953
ASTContext &ctxt = mainModule->getASTContext();
906954
assert(!ctxt.hadError() &&

test/IDE/objc_send_collector_1.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
// RUN: SWIFT_COMPILER_FINE_GRAINED_TRACE_PATH=%t/given_trace.json %target-swift-frontend -I %t/lib/swift -typecheck %s %S/Inputs/objc_send_collector_2.swift -module-name main -swift-version 5 -F %S/Inputs/mock-sdk -emit-loaded-module-trace-path %t/.MODULE_TRACE
88
// RUN: cat %t/given_trace.json | %{python} -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' | %FileCheck %s
99

10+
// RUN: SWIFT_COMPILER_FINE_GRAINED_TRACE_PATH=%t/given_trace_2.json %target-swift-frontend -I %t/lib/swift -emit-module %s %S/Inputs/objc_send_collector_2.swift -module-name main -swift-version 5 -F %S/Inputs/mock-sdk -emit-loaded-module-trace-path %t/.MODULE_TRACE -enable-library-evolution
11+
// RUN: not ls %t/given_trace_2.json
12+
1013
// REQUIRES: objc_interop
1114

1215
import Foo

0 commit comments

Comments
 (0)