Skip to content

Commit eb6933b

Browse files
authored
Merge pull request #78337 from nkcsgexi/141850408
FineModuleTracing/CAS: move the computation of whether fine module trace will be emitted to an early stage.
2 parents 4cbe481 + 049f381 commit eb6933b

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
@@ -392,7 +392,6 @@ bool ArgsToFrontendOptionsConverter::convert(
392392
}
393393

394394
Opts.DisableSandbox = Args.hasArg(OPT_disable_sandbox);
395-
Opts.DisableFineModuleTracing = Args.hasArg(OPT_disable_fine_module_tracing);
396395
return false;
397396
}
398397

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
@@ -884,11 +884,17 @@ static void createFineModuleTraceFile(CompilerInstance &instance,
884884
return;
885885
}
886886
ObjcMethodReferenceCollector collector(MD);
887-
instance.forEachFileToTypeCheck([&](SourceFile& SF) {
888-
collector.setFileBeforeVisiting(&SF);
889-
collector.walk(SF);
890-
return false;
891-
});
887+
888+
auto blocklisted = ctx.blockListConfig.hasBlockListAction(MD->getNameStr(),
889+
BlockListKeyKind::ModuleName, BlockListAction::SkipEmittingFineModuleTrace);
890+
891+
if (!blocklisted) {
892+
instance.forEachFileToTypeCheck([&](SourceFile& SF) {
893+
collector.setFileBeforeVisiting(&SF);
894+
collector.walk(SF);
895+
return false;
896+
});
897+
}
892898

893899
// print this json line.
894900
std::string stringBuffer;
@@ -907,64 +913,10 @@ static void createFineModuleTraceFile(CompilerInstance &instance,
907913
}
908914
}
909915

910-
static bool shouldActionTypeEmitFineModuleTrace(FrontendOptions::ActionType action) {
911-
// Only full compilation jobs should emit fine module tracing file.
912-
// Other partial compilation jobs, such as emitting modules, only typecheck partially
913-
// so walking into every function bodies may be risky.
914-
switch(action) {
915-
case swift::FrontendOptions::ActionType::Typecheck:
916-
case swift::FrontendOptions::ActionType::EmitSILGen:
917-
case swift::FrontendOptions::ActionType::EmitSIL:
918-
case swift::FrontendOptions::ActionType::EmitAssembly:
919-
case swift::FrontendOptions::ActionType::EmitLoweredSIL:
920-
case swift::FrontendOptions::ActionType::EmitIRGen:
921-
case swift::FrontendOptions::ActionType::EmitIR:
922-
case swift::FrontendOptions::ActionType::EmitBC:
923-
case swift::FrontendOptions::ActionType::EmitObject:
924-
return true;
925-
case swift::FrontendOptions::ActionType::NoneAction:
926-
case swift::FrontendOptions::ActionType::Parse:
927-
case swift::FrontendOptions::ActionType::ResolveImports:
928-
case swift::FrontendOptions::ActionType::DumpParse:
929-
case swift::FrontendOptions::ActionType::DumpInterfaceHash:
930-
case swift::FrontendOptions::ActionType::DumpAST:
931-
case swift::FrontendOptions::ActionType::PrintAST:
932-
case swift::FrontendOptions::ActionType::PrintASTDecl:
933-
case swift::FrontendOptions::ActionType::DumpScopeMaps:
934-
case swift::FrontendOptions::ActionType::DumpAvailabilityScopes:
935-
case swift::FrontendOptions::ActionType::EmitImportedModules:
936-
case swift::FrontendOptions::ActionType::EmitPCH:
937-
case swift::FrontendOptions::ActionType::EmitModuleOnly:
938-
case swift::FrontendOptions::ActionType::MergeModules:
939-
case swift::FrontendOptions::ActionType::CompileModuleFromInterface:
940-
case swift::FrontendOptions::ActionType::TypecheckModuleFromInterface:
941-
case swift::FrontendOptions::ActionType::EmitSIBGen:
942-
case swift::FrontendOptions::ActionType::EmitSIB:
943-
case swift::FrontendOptions::ActionType::Immediate:
944-
case swift::FrontendOptions::ActionType::REPL:
945-
case swift::FrontendOptions::ActionType::DumpTypeInfo:
946-
case swift::FrontendOptions::ActionType::EmitPCM:
947-
case swift::FrontendOptions::ActionType::DumpPCM:
948-
case swift::FrontendOptions::ActionType::ScanDependencies:
949-
case swift::FrontendOptions::ActionType::PrintVersion:
950-
case swift::FrontendOptions::ActionType::PrintFeature:
951-
return false;
952-
}
953-
}
954-
955916
bool swift::emitFineModuleTraceIfNeeded(CompilerInstance &Instance,
956917
const FrontendOptions &opts) {
957-
if (opts.DisableFineModuleTracing) {
958-
return false;
959-
}
960-
if (!shouldActionTypeEmitFineModuleTrace(opts.RequestedAction)) {
961-
return false;
962-
}
963918
ModuleDecl *mainModule = Instance.getMainModule();
964919
ASTContext &ctxt = mainModule->getASTContext();
965-
if (ctxt.blockListConfig.hasBlockListAction(mainModule->getNameStr(),
966-
BlockListKeyKind::ModuleName, BlockListAction::SkipEmittingFineModuleTrace))
967-
return false;
968920
assert(!ctxt.hadError() &&
969921
"We should've already exited earlier if there was an error.");
970922

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)