Skip to content

Commit b8ea6cf

Browse files
authored
Merge pull request #78338 from nkcsgexi/141850408-6.1
🍒[6.1] FineModuleTracing/CAS: move the computation of whether fine module trace will be emitted to an early stage.
2 parents 4889b94 + 3572986 commit b8ea6cf

File tree

5 files changed

+62
-65
lines changed

5 files changed

+62
-65
lines changed

include/swift/Frontend/FrontendOptions.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -563,9 +563,6 @@ class FrontendOptions {
563563
/// All block list configuration files to be honored in this compilation.
564564
std::vector<std::string> BlocklistConfigFilePaths;
565565

566-
/// Whether explicitly disble fine-grained module tracing in this compiler
567-
/// invocation.
568-
bool DisableFineModuleTracing = false;
569566
private:
570567
static bool canActionEmitDependencies(ActionType);
571568
static bool canActionEmitReferenceDependencies(ActionType);

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,6 @@ bool ArgsToFrontendOptionsConverter::convert(
386386
}
387387

388388
Opts.DisableSandbox = Args.hasArg(OPT_disable_sandbox);
389-
Opts.DisableFineModuleTracing = Args.hasArg(OPT_disable_fine_module_tracing);
390389
return false;
391390
}
392391

lib/Frontend/ArgsToFrontendOutputsConverter.cpp

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,51 @@ SupplementaryOutputPathsComputer::getSupplementaryFilenamesFromArguments(
411411
return std::nullopt;
412412
}
413413

414+
static bool shouldEmitFineModuleTrace(FrontendOptions::ActionType action) {
415+
// Only full compilation jobs should emit fine module tracing file.
416+
// Other partial compilation jobs, such as emitting modules, only typecheck partially
417+
// so walking into every function bodies may be risky.
418+
switch(action) {
419+
case swift::FrontendOptions::ActionType::Typecheck:
420+
case swift::FrontendOptions::ActionType::EmitSILGen:
421+
case swift::FrontendOptions::ActionType::EmitSIL:
422+
case swift::FrontendOptions::ActionType::EmitAssembly:
423+
case swift::FrontendOptions::ActionType::EmitLoweredSIL:
424+
case swift::FrontendOptions::ActionType::EmitIRGen:
425+
case swift::FrontendOptions::ActionType::EmitIR:
426+
case swift::FrontendOptions::ActionType::EmitBC:
427+
case swift::FrontendOptions::ActionType::EmitObject:
428+
return true;
429+
case swift::FrontendOptions::ActionType::NoneAction:
430+
case swift::FrontendOptions::ActionType::Parse:
431+
case swift::FrontendOptions::ActionType::ResolveImports:
432+
case swift::FrontendOptions::ActionType::DumpParse:
433+
case swift::FrontendOptions::ActionType::DumpInterfaceHash:
434+
case swift::FrontendOptions::ActionType::DumpAST:
435+
case swift::FrontendOptions::ActionType::PrintAST:
436+
case swift::FrontendOptions::ActionType::PrintASTDecl:
437+
case swift::FrontendOptions::ActionType::DumpScopeMaps:
438+
case swift::FrontendOptions::ActionType::DumpAvailabilityScopes:
439+
case swift::FrontendOptions::ActionType::EmitImportedModules:
440+
case swift::FrontendOptions::ActionType::EmitPCH:
441+
case swift::FrontendOptions::ActionType::EmitModuleOnly:
442+
case swift::FrontendOptions::ActionType::MergeModules:
443+
case swift::FrontendOptions::ActionType::CompileModuleFromInterface:
444+
case swift::FrontendOptions::ActionType::TypecheckModuleFromInterface:
445+
case swift::FrontendOptions::ActionType::EmitSIBGen:
446+
case swift::FrontendOptions::ActionType::EmitSIB:
447+
case swift::FrontendOptions::ActionType::Immediate:
448+
case swift::FrontendOptions::ActionType::REPL:
449+
case swift::FrontendOptions::ActionType::DumpTypeInfo:
450+
case swift::FrontendOptions::ActionType::EmitPCM:
451+
case swift::FrontendOptions::ActionType::DumpPCM:
452+
case swift::FrontendOptions::ActionType::ScanDependencies:
453+
case swift::FrontendOptions::ActionType::PrintVersion:
454+
case swift::FrontendOptions::ActionType::PrintFeature:
455+
return false;
456+
}
457+
}
458+
414459
std::optional<SupplementaryOutputPaths>
415460
SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(
416461
StringRef outputFile, const SupplementaryOutputPaths &pathsFromArguments,
@@ -461,7 +506,9 @@ SupplementaryOutputPathsComputer::computeOutputPathsForOneInput(
461506
// SWIFT_COMPILER_FINE_GRAINED_TRACE_PATH.
462507
// FIXME: we probably need to move this to a frontend argument.
463508
llvm::SmallString<128> FineModuleTracePath;
464-
if (!loadedModuleTracePath.empty()) {
509+
if (!loadedModuleTracePath.empty() &&
510+
shouldEmitFineModuleTrace(RequestedAction) &&
511+
!Args.hasArg(OPT_disable_fine_module_tracing)) {
465512
if (const char *P = ::getenv("SWIFT_COMPILER_FINE_GRAINED_TRACE_PATH")) {
466513
StringRef FilePath = P;
467514
llvm::sys::path::append(FineModuleTracePath, FilePath);

lib/FrontendTool/LoadedModuleTrace.cpp

Lines changed: 11 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -876,11 +876,17 @@ static void createFineModuleTraceFile(CompilerInstance &instance,
876876
return;
877877
}
878878
ObjcMethodReferenceCollector collector(MD);
879-
instance.forEachFileToTypeCheck([&](SourceFile& SF) {
880-
collector.setFileBeforeVisiting(&SF);
881-
collector.walk(SF);
882-
return false;
883-
});
879+
880+
auto blocklisted = ctx.blockListConfig.hasBlockListAction(MD->getNameStr(),
881+
BlockListKeyKind::ModuleName, BlockListAction::SkipEmittingFineModuleTrace);
882+
883+
if (!blocklisted) {
884+
instance.forEachFileToTypeCheck([&](SourceFile& SF) {
885+
collector.setFileBeforeVisiting(&SF);
886+
collector.walk(SF);
887+
return false;
888+
});
889+
}
884890

885891
// print this json line.
886892
std::string stringBuffer;
@@ -899,64 +905,10 @@ static void createFineModuleTraceFile(CompilerInstance &instance,
899905
}
900906
}
901907

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-
947908
bool swift::emitFineModuleTraceIfNeeded(CompilerInstance &Instance,
948909
const FrontendOptions &opts) {
949-
if (opts.DisableFineModuleTracing) {
950-
return false;
951-
}
952-
if (!shouldActionTypeEmitFineModuleTrace(opts.RequestedAction)) {
953-
return false;
954-
}
955910
ModuleDecl *mainModule = Instance.getMainModule();
956911
ASTContext &ctxt = mainModule->getASTContext();
957-
if (ctxt.blockListConfig.hasBlockListAction(mainModule->getNameStr(),
958-
BlockListKeyKind::ModuleName, BlockListAction::SkipEmittingFineModuleTrace))
959-
return false;
960912
assert(!ctxt.hadError() &&
961913
"We should've already exited earlier if there was an error.");
962914

test/IDE/objc_send_collector_1.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
// RUN: echo " - FooBar" >> %t/blocklist.yml
1818

1919
// RUN: SWIFT_COMPILER_FINE_GRAINED_TRACE_PATH=%t/given_trace_3.json %target-swift-frontend -I %t/lib/swift -typecheck %s %S/Inputs/objc_send_collector_2.swift -module-name FooBar -swift-version 5 -F %S/Inputs/mock-sdk -emit-loaded-module-trace-path %t/.MODULE_TRACE -blocklist-file %t/blocklist.yml
20-
// RUN: not ls %t/given_trace_3.json
20+
// RUN: cat %t/given_trace_3.json | %{python} -c 'import json, sys; json.dump(json.loads(sys.stdin.read()), sys.stdout, sort_keys=True, indent=2)' | %FileCheck %s --check-prefix=CHECK-BLOCKED
2121

2222
// RUN: SWIFT_COMPILER_FINE_GRAINED_TRACE_PATH=%t/given_trace_4.json %target-swift-frontend -I %t/lib/swift -typecheck %s %S/Inputs/objc_send_collector_2.swift -module-name FooBar -swift-version 5 -F %S/Inputs/mock-sdk -emit-loaded-module-trace-path %t/.MODULE_TRACE -disable-fine-module-tracing
2323
// RUN: not ls %t/given_trace_4.json
@@ -45,3 +45,5 @@ public func testProperties(_ x: FooClassBase, _ y: FooProtocolBase) {
4545
// CHECK-DAG: "file_path": "SOURCE_DIR/test/IDE/objc_send_collector_1.swift"
4646
// CHECK-DAG: "file_path": "SOURCE_DIR/test/IDE/Inputs/objc_send_collector_2.swift"
4747
// CHECK-DAG: "swift-compiler-version":
48+
49+
// CHECK-BLOCKED-NOT: "FooClassBase"

0 commit comments

Comments
 (0)