1*a9ac8606Spatrick //===--- IncrementalExecutor.h - Incremental Execution ----------*- C++ -*-===// 2*a9ac8606Spatrick // 3*a9ac8606Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*a9ac8606Spatrick // See https://llvm.org/LICENSE.txt for license information. 5*a9ac8606Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*a9ac8606Spatrick // 7*a9ac8606Spatrick //===----------------------------------------------------------------------===// 8*a9ac8606Spatrick // 9*a9ac8606Spatrick // This file implements the class which performs incremental code execution. 10*a9ac8606Spatrick // 11*a9ac8606Spatrick //===----------------------------------------------------------------------===// 12*a9ac8606Spatrick 13*a9ac8606Spatrick #ifndef LLVM_CLANG_LIB_INTERPRETER_INCREMENTALEXECUTOR_H 14*a9ac8606Spatrick #define LLVM_CLANG_LIB_INTERPRETER_INCREMENTALEXECUTOR_H 15*a9ac8606Spatrick 16*a9ac8606Spatrick #include "llvm/ADT/StringRef.h" 17*a9ac8606Spatrick #include "llvm/ADT/Triple.h" 18*a9ac8606Spatrick #include "llvm/ExecutionEngine/Orc/ExecutionUtils.h" 19*a9ac8606Spatrick 20*a9ac8606Spatrick #include <memory> 21*a9ac8606Spatrick 22*a9ac8606Spatrick namespace llvm { 23*a9ac8606Spatrick class Error; 24*a9ac8606Spatrick class Module; 25*a9ac8606Spatrick namespace orc { 26*a9ac8606Spatrick class LLJIT; 27*a9ac8606Spatrick class ThreadSafeContext; 28*a9ac8606Spatrick } // namespace orc 29*a9ac8606Spatrick } // namespace llvm 30*a9ac8606Spatrick 31*a9ac8606Spatrick namespace clang { 32*a9ac8606Spatrick class IncrementalExecutor { 33*a9ac8606Spatrick using CtorDtorIterator = llvm::orc::CtorDtorIterator; 34*a9ac8606Spatrick std::unique_ptr<llvm::orc::LLJIT> Jit; 35*a9ac8606Spatrick llvm::orc::ThreadSafeContext &TSCtx; 36*a9ac8606Spatrick 37*a9ac8606Spatrick public: 38*a9ac8606Spatrick IncrementalExecutor(llvm::orc::ThreadSafeContext &TSC, llvm::Error &Err, 39*a9ac8606Spatrick const llvm::Triple &Triple); 40*a9ac8606Spatrick ~IncrementalExecutor(); 41*a9ac8606Spatrick 42*a9ac8606Spatrick llvm::Error addModule(std::unique_ptr<llvm::Module> M); 43*a9ac8606Spatrick llvm::Error runCtors() const; 44*a9ac8606Spatrick }; 45*a9ac8606Spatrick 46*a9ac8606Spatrick } // end namespace clang 47*a9ac8606Spatrick 48*a9ac8606Spatrick #endif // LLVM_CLANG_LIB_INTERPRETER_INCREMENTALEXECUTOR_H 49