1#ifndef PROTEUS_LLVMIRJITMODULE_H
2#define PROTEUS_LLVMIRJITMODULE_H
15struct CompiledLibrary;
30 std::unique_ptr<HashT> ModuleHash;
31 std::unique_ptr<CompiledLibrary> Library;
32 bool IsCompiled =
false;
37 explicit LLVMIRJitModule(
const std::string &Target,
const std::string &Code,
41 void compile(
bool Verify =
false);
55 "Error: getKernelAddress() applies only to device modules");
64 uint64_t ShmemSize,
void *Stream);
77 template <
typename RetT,
typename... ArgT>
83 : M(M), FuncPtr(FuncPtr) {}
86 if constexpr (std::is_void_v<RetT>) {
87 M.Dispatch.template run<RetT(ArgT...)>(FuncPtr,
88 std::forward<ArgT>(
Args)...);
90 return M.Dispatch.template run<RetT(ArgT...)>(
91 FuncPtr, std::forward<ArgT>(
Args)...);
97 template <
typename RetT,
typename... ArgT>
100 void *FuncPtr =
nullptr;
103 : M(M), FuncPtr(FuncPtr) {
104 static_assert(std::is_void_v<RetT>,
"Kernel function must return void");
112 void *Stream, ArgT...
Args) {
113 void *Ptrs[
sizeof...(ArgT)] = {(
void *)&
Args...};
114 return M.
launch(FuncPtr, GridDim, BlockDim, Ptrs, ShmemSize, Stream);
118 template <
typename Sig>
char int void ** Args
Definition CompilerInterfaceHost.cpp:23
Definition Dispatcher.h:75
Definition LLVMIRJitModule.h:24
void setFuncAttribute(void *KernelFunc, JitFuncAttribute Attr, int Value)
Definition LLVMIRJitModule.cpp:122
TargetModelType getTargetModel() const
Definition LLVMIRJitModule.h:45
void * getFunctionAddress(const std::string &Name)
Definition LLVMIRJitModule.cpp:127
void * getKernelAddress(const std::string &Name)
Definition LLVMIRJitModule.h:49
void compile(bool Verify=false)
Definition LLVMIRJitModule.cpp:81
DispatchResult launch(void *KernelFunc, LaunchDims GridDim, LaunchDims BlockDim, void *KernelArgs[], uint64_t ShmemSize, void *Stream)
Definition LLVMIRJitModule.cpp:134
KernelHandle< Sig > getKernel(const std::string &Name)
Definition LLVMIRJitModule.h:130
CompiledLibrary & getLibrary()
Definition LLVMIRJitModule.h:66
FunctionHandle< Sig > getFunction(const std::string &Name)
Definition LLVMIRJitModule.h:119
Definition MemoryCache.h:27
JitFuncAttribute
Definition JitFuncAttribute.h:6
TargetModelType
Definition TargetModel.h:8
LLVMIRInputKind
Definition LLVMIRJitModule.h:18
bool isHostTargetModel(TargetModelType TargetModel)
Definition TargetModel.cpp:49
void reportFatalError(const llvm::Twine &Reason, const char *FILE, unsigned Line)
Definition Error.cpp:14
Definition Dispatcher.h:22
Definition CompiledLibrary.h:18
Definition Dispatcher.h:53
LLVMIRJitModule & M
Definition LLVMIRJitModule.h:79
FunctionHandle(LLVMIRJitModule &M, void *FuncPtr)
Definition LLVMIRJitModule.h:82
void * FuncPtr
Definition LLVMIRJitModule.h:80
RetT run(ArgT... Args)
Definition LLVMIRJitModule.h:85
Definition LLVMIRJitModule.h:76
auto launch(LaunchDims GridDim, LaunchDims BlockDim, uint64_t ShmemSize, void *Stream, ArgT... Args)
Definition LLVMIRJitModule.h:111
KernelHandle(LLVMIRJitModule &M, void *FuncPtr)
Definition LLVMIRJitModule.h:102
LLVMIRJitModule & M
Definition LLVMIRJitModule.h:99
void setFuncAttribute(JitFuncAttribute Attr, int Value)
Definition LLVMIRJitModule.h:107
Definition LLVMIRJitModule.h:96