5#include <llvm/ExecutionEngine/Orc/IRCompileLayer.h>
6#include <llvm/ExecutionEngine/Orc/JITTargetMachineBuilder.h>
7#include <llvm/Support/Error.h>
8#include <llvm/Support/MemoryBuffer.h>
9#include <llvm/Target/TargetMachine.h>
13#include "tpde-llvm/LLVMCompiler.hpp"
20class OrcCompiler :
public llvm::orc::IRCompileLayer::IRCompiler {
21 std::unique_ptr<LLVMCompiler> owned_compiler;
23 llvm::TargetMachine *tm;
29 : IRCompiler({}), compiler(compiler), tm(tm) {}
32 OrcCompiler(
const llvm::Triple &triple, llvm::TargetMachine *tm =
nullptr)
35 compiler(owned_compiler.get()),
41 compiler(owned_compiler.get()),
44 llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
45 operator()(llvm::Module &)
override;
53 llvm::orc::JITTargetMachineBuilder jtmb;
60 : IRCompiler({}), jtmb(std::move(jtmb)) {}
62 llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
63 operator()(llvm::Module &)
override;
ConcurrentOrcCompiler(llvm::orc::JITTargetMachineBuilder jtmb)
Compiler for LLVM modules.
static std::unique_ptr< LLVMCompiler > create(const llvm::Triple &triple) noexcept
OrcCompiler(llvm::TargetMachine &tm)
Constructor, compatible with llvm::orc::SimpleCompiler.
OrcCompiler(const llvm::Triple &triple, llvm::TargetMachine *tm=nullptr)
OrcCompiler(LLVMCompiler *compiler, llvm::TargetMachine *tm=nullptr)