Skip to content

Commit 2e97647

Browse files
committed
FineModuleTracing: only collect fine-grained tracing for those source files that compiler promises to type check.
rdar://141065994
1 parent 8353a8c commit 2e97647

File tree

3 files changed

+15
-29
lines changed

3 files changed

+15
-29
lines changed

lib/FrontendTool/Dependencies.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class DependencyTracker;
2323
class FrontendOptions;
2424
class InputFile;
2525
class ModuleDecl;
26+
class CompilerInstance;
2627

2728
/// Emit the names of the modules imported by \c mainModule.
2829
bool emitImportedModules(ModuleDecl *mainModule, const FrontendOptions &opts,
@@ -32,7 +33,7 @@ bool emitLoadedModuleTraceIfNeeded(ModuleDecl *mainModule,
3233
const FrontendOptions &opts,
3334
const InputFile &input);
3435

35-
bool emitFineModuleTraceIfNeeded(ModuleDecl *mainModule,
36+
bool emitFineModuleTraceIfNeeded(CompilerInstance &Instance,
3637
const FrontendOptions &opts);
3738

3839
} // end namespace swift

lib/FrontendTool/FrontendTool.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,7 @@ static void performEndOfPipelineActions(CompilerInstance &Instance) {
10011001
Instance.getMainModule(), Instance.getDependencyTracker(), opts);
10021002

10031003
dumpAPIIfNeeded(Instance);
1004-
swift::emitFineModuleTraceIfNeeded(Instance.getMainModule(), opts);
1004+
swift::emitFineModuleTraceIfNeeded(Instance, opts);
10051005
}
10061006

10071007
// Contains the hadError checks internally, we still want to output the

lib/FrontendTool/LoadedModuleTrace.cpp

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "swift/Basic/FileTypes.h"
2323
#include "swift/Basic/JSONSerialization.h"
2424
#include "swift/Basic/SourceManager.h"
25+
#include "swift/Frontend/Frontend.h"
2526
#include "swift/Frontend/FrontendOptions.h"
2627
#include "swift/Frontend/ModuleInterfaceSupport.h"
2728
#include "swift/IDE/SourceEntityWalker.h"
@@ -853,7 +854,8 @@ class ObjcMethodReferenceCollector: public SourceEntityWalker {
853854
}
854855
};
855856

856-
static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
857+
static void createFineModuleTraceFile(CompilerInstance &instance,
858+
const InputFile &input) {
857859
StringRef tracePath = input.getFineModuleTracePath();
858860
if (tracePath.empty()) {
859861
// we basically rely on the passing down of module trace file path
@@ -862,27 +864,8 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
862864
// specifically.
863865
return;
864866
}
867+
ModuleDecl *MD = instance.getMainModule();
865868
auto &ctx = MD->getASTContext();
866-
std::vector<SourceFile*> filesToWalk;
867-
for (auto *FU : MD->getFiles()) {
868-
if (auto *SF = dyn_cast<SourceFile>(FU)) {
869-
switch (SF->Kind) {
870-
case swift::SourceFileKind::Library:
871-
case swift::SourceFileKind::Main:
872-
case swift::SourceFileKind::MacroExpansion:
873-
case swift::SourceFileKind::DefaultArgument:
874-
filesToWalk.push_back(SF);
875-
LLVM_FALLTHROUGH;
876-
case swift::SourceFileKind::SIL:
877-
case swift::SourceFileKind::Interface:
878-
continue;
879-
}
880-
}
881-
}
882-
// No source files to walk, abort.
883-
if (filesToWalk.empty()) {
884-
return;
885-
}
886869
// Write output via atomic append.
887870
llvm::vfs::OutputConfig config;
888871
config.setAppend().setAtomicWrite();
@@ -893,10 +876,11 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
893876
return;
894877
}
895878
ObjcMethodReferenceCollector collector(MD);
896-
for (auto *SF: filesToWalk) {
897-
collector.setFileBeforeVisiting(SF);
898-
collector.walk(*SF);
899-
}
879+
instance.forEachFileToTypeCheck([&](SourceFile& SF) {
880+
collector.setFileBeforeVisiting(&SF);
881+
collector.walk(SF);
882+
return false;
883+
});
900884

901885
// print this json line.
902886
std::string stringBuffer;
@@ -915,14 +899,15 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
915899
}
916900
}
917901

918-
bool swift::emitFineModuleTraceIfNeeded(ModuleDecl *mainModule,
902+
bool swift::emitFineModuleTraceIfNeeded(CompilerInstance &Instance,
919903
const FrontendOptions &opts) {
904+
ModuleDecl *mainModule = Instance.getMainModule();
920905
ASTContext &ctxt = mainModule->getASTContext();
921906
assert(!ctxt.hadError() &&
922907
"We should've already exited earlier if there was an error.");
923908

924909
opts.InputsAndOutputs.forEachInput([&](const InputFile &input) {
925-
createFineModuleTraceFile(input, mainModule);
910+
createFineModuleTraceFile(Instance, input);
926911
return true;
927912
});
928913
return false;

0 commit comments

Comments
 (0)