Proteus
Programmable JIT compilation and optimization for C/C++ using LLVM
Loading...
Searching...
No Matches
CppJitCompiler.h
Go to the documentation of this file.
1#ifndef PROTEUS_RUNTIME_FRONTEND_CPPJITCOMPILER_H
2#define PROTEUS_RUNTIME_FRONTEND_CPPJITCOMPILER_H
3
7
8#include <memory>
9#include <string>
10#include <vector>
11
12namespace llvm {
13class LLVMContext;
14class MemoryBuffer;
15class Module;
16} // namespace llvm
17
18namespace proteus {
19
21 std::string Path;
22 std::string Origin;
23};
24
25// Compiler-facing input assembled by CppJitModule.
29 const std::string &Code;
30 const std::vector<std::string> &ExtraArgs;
32 std::string DeviceArch;
33};
34
35// Transport object returned by the compiler layer before registration.
38
40 std::string Path;
41 std::unique_ptr<llvm::MemoryBuffer> ObjectBuffer;
42 std::unique_ptr<llvm::LLVMContext> Ctx;
43 std::unique_ptr<llvm::Module> Mod;
44
48
49 static CppJitArtifact sharedLibrary(std::string Path);
50 static CppJitArtifact deviceBinary(std::unique_ptr<llvm::MemoryBuffer> Obj);
51 static CppJitArtifact llvmIR(std::unique_ptr<llvm::LLVMContext> Ctx,
52 std::unique_ptr<llvm::Module> Mod);
53
54private:
56};
57
58// Abstract compiler interface used by CppJitModule.
60public:
61 static constexpr const char *FrontendOptLevelFlag = "-O3";
62
64 CppJitCompilerBackend Backend);
65 virtual ~CppJitCompiler() = default;
66 virtual CppJitArtifact compile(const CppJitCompileRequest &Request) = 0;
67};
68
70 const std::string &Code,
71 const std::vector<std::string> &ExtraArgs);
73#if PROTEUS_ENABLE_CUDA
74const ResolvedToolPath &resolveNvcc();
75#endif
76std::unique_ptr<CppJitCompiler>
78
79std::unique_ptr<CppJitCompiler> createCppJitCompilerClang();
80#if PROTEUS_ENABLE_CUDA
81std::unique_ptr<CppJitCompiler> createCppJitCompilerNvcc();
82#endif
83
84} // namespace proteus
85
86#endif
Definition CppJitCompiler.h:59
static constexpr const char * FrontendOptLevelFlag
Definition CppJitCompiler.h:61
virtual ~CppJitCompiler()=default
static bool isBackendSupported(TargetModelType TM, CppJitCompilerBackend Backend)
Definition CppJitCompiler.cpp:80
virtual CppJitArtifact compile(const CppJitCompileRequest &Request)=0
Definition Hashing.h:22
Definition CompiledLibrary.h:7
Definition MemoryCache.h:27
TargetModelType
Definition TargetModel.h:8
const ResolvedToolPath & resolveClangxx()
Definition CppJitCompiler.cpp:151
std::unique_ptr< CppJitCompiler > createCppJitCompiler(const CppJitCompileRequest &Request)
Definition CppJitCompiler.cpp:135
CppJitCompilerBackend
Definition CppJitCompilerBackend.h:6
HashT computeCppJitModuleHash(TargetModelType TM, CppJitCompilerBackend Backend, const std::string &Code, const std::vector< std::string > &ExtraArgs)
Definition CppJitCompiler.cpp:123
std::unique_ptr< CppJitCompiler > createCppJitCompilerClang()
Definition CppJitCompilerClang.cpp:265
Definition CppJitCompiler.h:36
CppJitArtifact(CppJitArtifact &&)
static CppJitArtifact sharedLibrary(std::string Path)
Definition CppJitCompiler.cpp:99
Kind
Definition CppJitCompiler.h:37
std::unique_ptr< llvm::MemoryBuffer > ObjectBuffer
Definition CppJitCompiler.h:41
~CppJitArtifact()
Definition CppJitCompiler.cpp:94
std::string Path
Definition CppJitCompiler.h:40
std::unique_ptr< llvm::LLVMContext > Ctx
Definition CppJitCompiler.h:42
std::unique_ptr< llvm::Module > Mod
Definition CppJitCompiler.h:43
static CppJitArtifact llvmIR(std::unique_ptr< llvm::LLVMContext > Ctx, std::unique_ptr< llvm::Module > Mod)
Definition CppJitCompiler.cpp:114
static CppJitArtifact deviceBinary(std::unique_ptr< llvm::MemoryBuffer > Obj)
Definition CppJitCompiler.cpp:107
CppJitArtifact & operator=(CppJitArtifact &&)
Kind ArtifactKind
Definition CppJitCompiler.h:39
Definition CppJitCompiler.h:26
const std::vector< std::string > & ExtraArgs
Definition CppJitCompiler.h:30
const std::string & Code
Definition CppJitCompiler.h:29
std::string DeviceArch
Definition CppJitCompiler.h:32
const HashT & ModuleHash
Definition CppJitCompiler.h:31
CppJitCompilerBackend Backend
Definition CppJitCompiler.h:28
TargetModelType TargetModel
Definition CppJitCompiler.h:27
Definition CppJitCompiler.h:20
std::string Origin
Definition CppJitCompiler.h:22
std::string Path
Definition CppJitCompiler.h:21