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