Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
JitEngineHost.h
Go to the documentation of this file.
1//===-- JitEngineHost.h -- JIT Engine for CPU header --===//
2//
3// Part of Proteus Project, under the Apache License v2.0 with LLVM Exceptions.
4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5//
6//===----------------------------------------------------------------------===//
7//
8// Implements the JitEngine interface for dynamic compilation and optimization
9// of CPU code.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef PROTEUS_JITENGINEHOST_H
14#define PROTEUS_JITENGINEHOST_H
15
16#include <optional>
17#include <string>
18
19#include <llvm/ExecutionEngine/Orc/LLJIT.h>
20
22#include "proteus/Error.h"
23#include "proteus/Init.h"
27#include "proteus/impl/Config.h"
29
30namespace proteus {
31
32using namespace llvm;
33
34class JitEngineHost : public JitEngine {
35public:
36 std::unique_ptr<orc::LLJIT> LLJITPtr;
37 ExitOnError ExitOnErr;
38
39 static JitEngineHost &instance();
40
41 static void dumpSymbolInfo(const object::ObjectFile &LoadedObj,
42 const RuntimeDyld::LoadedObjectInfo &ObjInfo);
43 static void notifyLoaded(orc::MaterializationResponsibility &R,
44 const object::ObjectFile &Obj,
45 const RuntimeDyld::LoadedObjectInfo &LOI);
47
48 void specializeIR(Module &M, StringRef FnName, StringRef Suffix,
49 ArrayRef<RuntimeConstant> RCArray);
50
51 void *compileAndLink(StringRef FnName, char *IR, int IRSize, void **Args,
52 ArrayRef<RuntimeConstantInfo *> RCInfoArray);
53
54 std::unique_ptr<MemoryBuffer> compileOnly(Module &M,
55 bool DisableIROpt = false);
56
58
59 void *getFunctionAddress(StringRef FnName, CompiledLibrary &Library);
60
61private:
63 void addStaticLibrarySymbols();
64 MemoryCache<void *> CodeCache{"JitEngineHost"};
65 std::optional<ObjectCacheChain> CacheChain;
66};
67
68} // namespace proteus
69
70#endif
char * IR
Definition CompilerInterfaceHost.cpp:22
char int void ** Args
Definition CompilerInterfaceHost.cpp:22
char int IRSize
Definition CompilerInterfaceHost.cpp:22
ArrayRef< RuntimeConstantInfo * > RCInfoArray
Definition CompilerInterfaceHost.cpp:26
Definition JitEngineHost.h:34
std::unique_ptr< orc::LLJIT > LLJITPtr
Definition JitEngineHost.h:36
void specializeIR(Module &M, StringRef FnName, StringRef Suffix, ArrayRef< RuntimeConstant > RCArray)
Definition JitEngineHost.cpp:136
std::unique_ptr< MemoryBuffer > compileOnly(Module &M, bool DisableIROpt=false)
Definition JitEngineHost.cpp:279
~JitEngineHost()
Definition JitEngineHost.cpp:128
void loadCompiledLibrary(CompiledLibrary &Library)
Definition JitEngineHost.cpp:322
void * getFunctionAddress(StringRef FnName, CompiledLibrary &Library)
Definition JitEngineHost.cpp:357
static void dumpSymbolInfo(const object::ObjectFile &LoadedObj, const RuntimeDyld::LoadedObjectInfo &ObjInfo)
Definition JitEngineHost.cpp:80
static JitEngineHost & instance()
Definition JitEngineHost.cpp:43
static void notifyLoaded(orc::MaterializationResponsibility &R, const object::ObjectFile &Obj, const RuntimeDyld::LoadedObjectInfo &LOI)
Definition JitEngineHost.cpp:122
ExitOnError ExitOnErr
Definition JitEngineHost.h:37
void * compileAndLink(StringRef FnName, char *IR, int IRSize, void **Args, ArrayRef< RuntimeConstantInfo * > RCInfoArray)
Definition JitEngineHost.cpp:199
Definition JitEngine.h:32
Definition MemoryCache.h:30
Definition CompiledLibrary.h:7
Definition MemoryCache.h:26
Definition CompiledLibrary.h:18