Skip to content

Commit

Permalink
Merge pull request #73305 from cachemeifyoucan/eng/PR-127062609-swift…
Browse files Browse the repository at this point in the history
…-6.0

[6.0][Caching] Add fast swift instance setup for cache replay
  • Loading branch information
cachemeifyoucan committed Apr 29, 2024
2 parents 717c341 + cfe87ec commit 56e1fee
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 1 deletion.
4 changes: 4 additions & 0 deletions include/swift/Frontend/Frontend.h
Original file line number Diff line number Diff line change
Expand Up @@ -691,6 +691,10 @@ class CompilerInstance {
bool setup(const CompilerInvocation &Invocation, std::string &Error,
ArrayRef<const char *> Args = {});

/// The fast setup function for cache replay.
bool setupForReplay(const CompilerInvocation &Invocation, std::string &Error,
ArrayRef<const char *> Args = {});

const CompilerInvocation &getInvocation() const { return Invocation; }

/// If a IDE inspection buffer has been set, returns the corresponding source
Expand Down
17 changes: 17 additions & 0 deletions lib/Frontend/Frontend.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,23 @@ bool CompilerInstance::setup(const CompilerInvocation &Invoke,
return false;
}

bool CompilerInstance::setupForReplay(const CompilerInvocation &Invoke,
std::string &Error,
ArrayRef<const char *> Args) {
// This is the fast path for setup an instance for replay but cannot run
// regular compilation.
Invocation = Invoke;

if (setupCASIfNeeded(Args)) {
Error = "Setting up CAS failed";
return true;
}

setupOutputBackend();
setupCachingDiagnosticsProcessorIfNeeded();
return false;
}

bool CompilerInstance::setUpVirtualFileSystemOverlays() {
if (Invocation.getCASOptions().requireCASFS()) {
const auto &Opts = getInvocation().getCASOptions();
Expand Down
3 changes: 2 additions & 1 deletion tools/libSwiftScan/SwiftCaching.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -932,7 +932,8 @@ static llvm::Error replayCompilation(SwiftScanReplayInstance &Instance,
Invocation.getDiagnosticOptions().EmitMacroExpansionFiles);

std::string InstanceSetupError;
if (Inst.setup(Instance.Invocation, InstanceSetupError, Instance.Args))
if (Inst.setupForReplay(Instance.Invocation, InstanceSetupError,
Instance.Args))
return createStringError(inconvertibleErrorCode(), InstanceSetupError);

auto *CDP = Inst.getCachingDiagnosticsProcessor();
Expand Down

0 comments on commit 56e1fee

Please sign in to comment.