Path: blob/main/contrib/llvm-project/clang/lib/Interpreter/IncrementalExecutor.h
35233 views
//===--- IncrementalExecutor.h - Incremental Execution ----------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file implements the class which performs incremental code execution.9//10//===----------------------------------------------------------------------===//1112#ifndef LLVM_CLANG_LIB_INTERPRETER_INCREMENTALEXECUTOR_H13#define LLVM_CLANG_LIB_INTERPRETER_INCREMENTALEXECUTOR_H1415#include "llvm/ADT/DenseMap.h"16#include "llvm/ADT/StringRef.h"17#include "llvm/ExecutionEngine/Orc/ExecutionUtils.h"18#include "llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h"1920#include <memory>2122namespace llvm {23class Error;24namespace orc {25class JITTargetMachineBuilder;26class LLJIT;27class LLJITBuilder;28class ThreadSafeContext;29} // namespace orc30} // namespace llvm3132namespace clang {3334struct PartialTranslationUnit;35class TargetInfo;3637class IncrementalExecutor {38using CtorDtorIterator = llvm::orc::CtorDtorIterator;39std::unique_ptr<llvm::orc::LLJIT> Jit;40llvm::orc::ThreadSafeContext &TSCtx;4142llvm::DenseMap<const PartialTranslationUnit *, llvm::orc::ResourceTrackerSP>43ResourceTrackers;4445protected:46IncrementalExecutor(llvm::orc::ThreadSafeContext &TSC);4748public:49enum SymbolNameKind { IRName, LinkerName };5051IncrementalExecutor(llvm::orc::ThreadSafeContext &TSC,52llvm::orc::LLJITBuilder &JITBuilder, llvm::Error &Err);53virtual ~IncrementalExecutor();5455virtual llvm::Error addModule(PartialTranslationUnit &PTU);56virtual llvm::Error removeModule(PartialTranslationUnit &PTU);57virtual llvm::Error runCtors() const;58virtual llvm::Error cleanUp();59llvm::Expected<llvm::orc::ExecutorAddr>60getSymbolAddress(llvm::StringRef Name, SymbolNameKind NameKind) const;6162llvm::orc::LLJIT &GetExecutionEngine() { return *Jit; }6364static llvm::Expected<std::unique_ptr<llvm::orc::LLJITBuilder>>65createDefaultJITBuilder(llvm::orc::JITTargetMachineBuilder JTMB);66};6768} // end namespace clang6970#endif // LLVM_CLANG_LIB_INTERPRETER_INCREMENTALEXECUTOR_H717273