Skip to content

Commit c8fa52b

Browse files
committed
FineModuleTracing/CAS: move the computation of whether fine module trace will be emitted to an early stage.
CAS needs to determine if an output is needed very early (when computing supplementary outputs) in the pipeline so we can do caching and replays. Resolves: rdar://141850408
1 parent bfd7752 commit c8fa52b

File tree

4 files changed

+48
-56
lines changed

4 files changed

+48
-56
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: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -899,59 +899,8 @@ 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-
947902
bool swift::emitFineModuleTraceIfNeeded(CompilerInstance &Instance,
948903
const FrontendOptions &opts) {
949-
if (opts.DisableFineModuleTracing) {
950-
return false;
951-
}
952-
if (!shouldActionTypeEmitFineModuleTrace(opts.RequestedAction)) {
953-
return false;
954-
}
955904
ModuleDecl *mainModule = Instance.getMainModule();
956905
ASTContext &ctxt = mainModule->getASTContext();
957906
if (ctxt.blockListConfig.hasBlockListAction(mainModule->getNameStr(),

0 commit comments

Comments
 (0)