[Caching] Add fast swift instance setup for cache replay

Add a fast path to create swift CompilerInstance when it is only used to
replay output when there is a cache hit. The normal `setup` function is
very expensive to call, especially in cache mode to setup inputs, and it
needs to be called once per input file from libSwiftScan API due to the
current caching granularity.

The fast path will only construct the part that is needed for output
replay, including the CAS, the output backend and caching diagnostic
processor.

rdar://127062609
This commit is contained in:
Steven Wu
2024-04-25 12:31:22 -07:00
parent 3fe8b713d4
commit facfe45bf5
3 changed files with 23 additions and 1 deletions

View File

@@ -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();