Lines Matching +full:push +full:- +full:ci +full:- +full:container
1 //===------ Interpreter.cpp - Incremental Compilation and Execution -------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
12 //===----------------------------------------------------------------------===//
56 #define DEBUG_TYPE "clang-repl"
60 // tools/clang-import-test/clang-import-test.cpp
69 const driver::JobList &Jobs = Compilation->getJobs();
77 if (llvm::StringRef(Cmd->getCreator().getName()) != "clang")
81 return &Cmd->getArguments();
89 // Register the support for object-file-wrapped Clang modules.
90 // FIXME: Clang should register these container operations automatically.
91 auto PCHOps = Clang->getPCHContainerOperations();
92 PCHOps->registerWriter(std::make_unique<ObjectFilePCHContainerWriter>());
93 PCHOps->registerReader(std::make_unique<ObjectFilePCHContainerReader>());
101 Clang->getInvocation(), llvm::ArrayRef(Argv.begin(), Argv.size()), Diags);
104 if (Clang->getHeaderSearchOpts().UseBuiltinIncludes &&
105 Clang->getHeaderSearchOpts().ResourceDir.empty())
106 Clang->getHeaderSearchOpts().ResourceDir =
110 Clang->createDiagnostics(*llvm::vfs::getRealFileSystem());
111 if (!Clang->hasDiagnostics())
116 DiagsBuffer->FlushDiagnostics(Clang->getDiagnostics());
124 Clang->getPreprocessorOpts().addRemappedFile("<<< inputs >>>", MB);
126 Clang->setTarget(TargetInfo::CreateTargetInfo(
127 Clang->getDiagnostics(), Clang->getInvocation().TargetOpts));
128 if (!Clang->hasTarget())
133 Clang->getTarget().adjust(Clang->getDiagnostics(), Clang->getLangOpts());
137 Clang->getCodeGenOpts().ClearASTBeforeBackend = false;
139 Clang->getFrontendOpts().DisableFree = false;
140 Clang->getCodeGenOpts().DisableFree = false;
159 // Prepending -c to force the driver to do something if no action was
163 // We do C++ by default; append right after argv[0] if no "-x" given
164 ClangArgv.insert(ClangArgv.end(), "-Xclang");
165 ClangArgv.insert(ClangArgv.end(), "-fincremental-extensions");
166 ClangArgv.insert(ClangArgv.end(), "-c");
185 if (Compilation->getArgs().hasArg(driver::options::OPT_v))
186 Compilation->getJobs().Print(llvm::errs(), "\n", /*Quote=*/false);
199 Argv.push_back("-xc++");
201 Argv.push_back("-target");
202 Argv.push_back("wasm32-unknown-emscripten");
203 Argv.push_back("-fvisibility=default");
216 Argv.push_back("-xcuda");
218 Argv.push_back("--cuda-device-only");
220 Argv.push_back("--cuda-host-only");
222 std::string SDKPathArg = "--cuda-path=";
228 std::string ArchArg = "--offload-arch=";
262 if (TLSD && TLSD->isSemiMissing()) {
264 Interp.ExtractValueFromExpr(cast<Expr>(TLSD->getStmt()));
270 TLSD->setStmt(*ExprOrErr);
293 IncrementalAction(CompilerInstance &CI, llvm::LLVMContext &LLVMCtx,
299 switch (CI.getFrontendOpts().ProgramAction) {
305 CI.getFrontendOpts().ProgramAction);
310 Act = CreateFrontendAction(CI);
329 std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
332 WrapperFrontendAction::CreateASTConsumer(CI, InFile);
369 CI = std::move(Instance);
374 Act = std::make_unique<IncrementalAction>(*CI, *TSCtx->getContext(), ErrOut,
378 CI->ExecuteAction(*Act);
380 IncrParser = std::make_unique<IncrementalParser>(*CI, ErrOut);
387 // The initial PTU is filled by `-include` or by CUDA includes
389 if (!CI->getPreprocessorOpts().Includes.empty()) {
394 ASTContext &C = CI->getASTContext();
403 // Not all frontends support code-generation, e.g. ast-dump actions don't
405 // Process the PTUs that came from initialization. For example -include will
417 Act->FinalizeAction();
419 if (llvm::Error Err = IncrExecutor->cleanUp())
453 Interpreter::create(std::unique_ptr<CompilerInstance> CI) {
456 std::unique_ptr<Interpreter>(new Interpreter(std::move(CI), Err));
462 auto PTU = Interp->Parse(Runtimes);
465 Interp->markUserCodeStart();
467 Interp->ValuePrintingInfo.resize(4);
472 Interpreter::createWithCUDA(std::unique_ptr<CompilerInstance> CI,
474 // avoid writing fat binary to disk using an in-memory virtual file system
480 OverlayVFS->pushOverlay(IMVFS);
481 CI->createFileManager(OverlayVFS);
483 auto Interp = Interpreter::create(std::move(CI));
489 std::move(DCI), *(*Interp)->getCompilerInstance(), IMVFS, Err,
490 (*Interp)->PTUs);
494 (*Interp)->DeviceParser = std::move(DeviceParser);
500 return CI.get();
503 CompilerInstance *Interpreter::getCompilerInstance() { return CI.get(); }
511 return IncrExecutor->GetExecutionEngine();
515 return getCompilerInstance()->getASTContext();
519 return getCompilerInstance()->getASTContext();
529 return PTUs.size() - InitPTUSize;
545 LLVM_DEBUG(llvm::dbgs() << "compile-ptu " << PTUs.size() - 1
549 << LastPTU.TheModule->getName() << ")");
559 llvm::Expected<TranslationUnitDecl *> DeviceTU = DeviceParser->Parse(Code);
566 getCompilerInstance()->getDiagnostics().setSeverity(
569 llvm::Expected<TranslationUnitDecl *> TuOrErr = IncrParser->Parse(Code);
596 const std::string &TT = getCompilerInstance()->getTargetOpts().Triple;
624 << "execute-ptu "
628 : -1)
630 << T.TheModule->getName() << ")]\n");
637 if (auto Err = IncrExecutor->addModule(T))
640 if (auto Err = IncrExecutor->runCtors())
651 if (PTU->TheModule)
671 llvm::StringRef MangledName = getCodeGen()->GetMangledName(GD);
682 return IncrExecutor->getSymbolAddress(IRName, IncrementalExecutor::IRName);
692 return IncrExecutor->getSymbolAddress(Name, IncrementalExecutor::LinkerName);
703 if (llvm::Error Err = IncrExecutor->removeModule(PTUs.back()))
707 IncrParser->CleanUpPTU(PTUs.back().TUPart);
718 auto &DL = EE->getDataLayout();
722 EE->getMainJITDylib().addGenerator(std::move(*DLSG));
740 !getCompilerInstance()->getPreprocessorOpts().Includes.empty()) ||
741 (CachedInCodeGenModule->empty() &&
742 CachedInCodeGenModule->global_empty() &&
743 CachedInCodeGenModule->alias_empty() &&
744 CachedInCodeGenModule->ifunc_empty())) &&
746 std::unique_ptr<llvm::Module> M(CG->ReleaseModule());
747 CG->StartModule("incr_module_" + std::to_string(ID++), M->getContext());
754 FrontendAction *WrappedAct = Act->getWrapped();
755 if (!WrappedAct->hasIRSupport())
757 return static_cast<CodeGenAction *>(WrappedAct)->getCodeGenerator();