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