11#ifndef PROTEUS_JITENGINEDEVICE_H
12#define PROTEUS_JITENGINEDEVICE_H
33#include <llvm/ADT/SmallPtrSet.h>
34#include <llvm/ADT/SmallVector.h>
35#include <llvm/ADT/StringRef.h>
36#include <llvm/Analysis/CallGraph.h>
37#include <llvm/Analysis/TargetTransformInfo.h>
38#include <llvm/Bitcode/BitcodeWriter.h>
39#include <llvm/CodeGen/CommandFlags.h>
40#include <llvm/CodeGen/MachineModuleInfo.h>
41#include <llvm/Config/llvm-config.h>
42#include <llvm/Demangle/Demangle.h>
43#include <llvm/ExecutionEngine/Orc/ThreadSafeModule.h>
44#include <llvm/IR/Constants.h>
45#include <llvm/IR/GlobalVariable.h>
46#include <llvm/IR/Instruction.h>
47#include <llvm/IR/Instructions.h>
48#include <llvm/IR/LLVMContext.h>
49#include <llvm/IR/LegacyPassManager.h>
50#include <llvm/IR/Module.h>
51#include <llvm/IR/ReplaceConstant.h>
52#include <llvm/IR/Type.h>
53#include <llvm/IR/Verifier.h>
54#include <llvm/IRReader/IRReader.h>
55#include <llvm/Linker/Linker.h>
56#include <llvm/MC/TargetRegistry.h>
57#include <llvm/Object/ELFObjectFile.h>
58#include <llvm/Passes/PassBuilder.h>
59#include <llvm/Support/Error.h>
60#include <llvm/Support/MemoryBuffer.h>
61#include <llvm/Support/MemoryBufferRef.h>
62#include <llvm/Target/TargetMachine.h>
63#include <llvm/Transforms/IPO/Internalize.h>
64#include <llvm/Transforms/Utils/Cloning.h>
65#include <llvm/Transforms/Utils/ModuleUtils.h>
87 std::unique_ptr<LLVMContext> Ctx;
88 SmallVector<std::string> LinkedModuleIds;
90 std::optional<SmallVector<std::unique_ptr<Module>>> ExtractedModules;
91 std::optional<HashT> ExtractedModuleHash;
92 std::optional<CallGraph> ModuleCallGraph;
93 std::unique_ptr<MemoryBuffer> DeviceBinary;
94 std::unordered_map<std::string, GlobalVarInfo> VarNameToGlobalInfo;
100 SmallVector<std::string> &&LinkedModuleIds)
102 LinkedModuleIds(LinkedModuleIds), LinkedModule(nullptr),
103 ExtractedModules(
std::nullopt), ModuleCallGraph(
std::nullopt),
104 DeviceBinary(nullptr) {}
120 if (ExtractedModules->size() == 1) {
121 LinkedModule = ExtractedModules->front().get();
122 if (
auto E = LinkedModule->materializeAll())
129 auto GeneratedLinkedModule =
131 SmallVector<std::unique_ptr<Module>> NewExtractedModules;
132 NewExtractedModules.emplace_back(std::move(GeneratedLinkedModule));
135 LinkedModule = ExtractedModules->front().get();
139 <<
"getLinkedModule " << T.
elapsed() <<
" ms\n");
142 return *LinkedModule;
146 const SmallVector<std::reference_wrapper<Module>>
150 SmallVector<std::reference_wrapper<Module>> ModulesRef;
151 for (
auto &M : ExtractedModules.value())
152 ModulesRef.emplace_back(*M);
157 ExtractedModules = std::move(Modules);
165 return ExtractedModuleHash.value();
169 if (ExtractedModuleHash)
170 ExtractedModuleHash =
hashCombine(ExtractedModuleHash.value(), HashValue);
172 ExtractedModuleHash = HashValue;
176 if (!ModuleCallGraph.has_value()) {
179 ModuleCallGraph.emplace(CallGraph(*LinkedModule));
181 return ModuleCallGraph.value();
188 return DeviceBinary->getMemBufferRef();
191 DeviceBinary = std::move(DeviceBinaryBuffer);
195 LinkedModuleIds.push_back(
ModuleId);
199 const void *DeviceAddr, uint64_t
VarSize) {
200 auto KV = VarNameToGlobalInfo.emplace(
203 auto TraceOut = [&KV]() {
204 auto GlobalName = KV.first->first;
205 auto &GVI = KV.first->second;
208 raw_svector_ostream OS(S);
209 OS <<
"[GVarInfo]: " << GlobalName <<
" HAddr:" << GVI.HostAddr
210 <<
" DevAddr:" << GVI.DevAddr <<
" VarSize:" << GVI.VarSize <<
"\n";
220 return VarNameToGlobalInfo;
227 std::optional<void *> Kernel;
228 std::unique_ptr<LLVMContext> Ctx;
230 ArrayRef<RuntimeConstantInfo *> RCInfoArray;
231 std::optional<std::unique_ptr<Module>> ExtractedModule;
232 std::optional<std::unique_ptr<MemoryBuffer>> Bitcode;
233 std::optional<std::reference_wrapper<BinaryInfo>> BinInfo;
234 std::optional<HashT> StaticHash;
237 std::optional<SmallVector<uint64_t>> LambdaCalleeInfo;
238 std::optional<LambdaCallsiteLocationMap> LambdaCallsiteLocationInfo;
242 ArrayRef<RuntimeConstantInfo *> RCInfoArray)
244 RCInfoArray(RCInfoArray), ExtractedModule(
std::nullopt),
245 Bitcode{
std::nullopt}, BinInfo(BinInfo), LambdaCalleeInfo(
std::nullopt),
246 LambdaCallsiteLocationInfo(
std::nullopt) {}
250 assert(
Kernel.has_value() &&
"Expected Kernel is inited");
254 const std::string &
getName()
const {
return Name; }
256 bool hasModule()
const {
return ExtractedModule.has_value(); }
257 Module &
getModule()
const {
return *ExtractedModule->get(); }
260 ExtractedModule = std::move(Mod);
264 void setBitcode(std::unique_ptr<MemoryBuffer> ExtractedBitcode) {
265 Bitcode = std::move(ExtractedBitcode);
272 StaticHash =
hash(Name);
273 StaticHash =
hashCombine(StaticHash.value(), ModuleHash);
279 LambdaCalleeInfo = std::move(LambdaInfo);
283 return LambdaCallsiteLocationInfo.has_value();
286 return LambdaCallsiteLocationInfo.value();
289 LambdaCallsiteLocationInfo = std::move(Info);
293 if (!LambdaCallsiteLocationInfo)
294 LambdaCallsiteLocationInfo.emplace();
296 auto &Callsites = (*LambdaCallsiteLocationInfo)[
LambdaID];
298 if (It != Callsites.end()) {
300 It->second.Offset != Location.
Offset ||
320 void **KernelArgs, uint64_t ShmemSize,
323 std::pair<std::unique_ptr<Module>, std::unique_ptr<MemoryBuffer>>
327 std::unique_ptr<Module> KernelModule =
328 static_cast<ImplT &
>(*this).tryExtractKernelModule(BinInfo,
KernelName,
330 std::unique_ptr<MemoryBuffer>
Bitcode =
nullptr;
337 static_cast<ImplT &
>(*this).extractModules(BinInfo);
339 std::unique_ptr<Module> KernelModuleTmp =
nullptr;
343 KernelModule = llvm::CloneModule(LinkedModule);
374 if (&KernelModule->getContext() != &Ctx) {
375 SmallVector<char> CloneBuffer;
376 raw_svector_ostream OS(CloneBuffer);
377 WriteBitcodeToFile(*KernelModule, OS);
378 StringRef CloneStr = StringRef(CloneBuffer.data(), CloneBuffer.size());
379 auto ExpectedKernelModule =
380 parseBitcodeFile(MemoryBufferRef{CloneStr,
KernelName}, Ctx);
381 if (
auto E = ExpectedKernelModule.takeError())
384 KernelModule = std::move(*ExpectedKernelModule);
385 Bitcode = MemoryBuffer::getMemBufferCopy(CloneStr);
389 SmallVector<char> BitcodeBuffer;
390 raw_svector_ostream OS(BitcodeBuffer);
391 WriteBitcodeToFile(*KernelModule, OS);
392 auto BitcodeStr = StringRef{BitcodeBuffer.data(), BitcodeBuffer.size()};
393 Bitcode = MemoryBuffer::getMemBufferCopy(BitcodeStr);
396 return std::make_pair(std::move(KernelModule), std::move(
Bitcode));
422 KernelInfo.
setModule(std::move(KernelModule));
423 KernelInfo.
setBitcode(std::move(BitcodeBuffer));
425 <<
"Extract kernel module " << T.
elapsed() <<
" ms\n");
453 auto LaunchInfo =
LR.takeDeviceLaunchInfo();
454 if (LaunchInfo.CallsiteRuntimeConstants.empty()) {
457 LambdaCalleeInfo = std::move(LaunchInfo.LambdaCalleeInfo);
458 LambdaJitValuesMap = std::move(LaunchInfo.CallsiteRuntimeConstants);
469 "Expected non-null device address for global variable");
480 ArrayRef<RuntimeConstantInfo *> RCInfoArray);
494 std::optional<std::reference_wrapper<JITKernelInfo>>
513 HashT ModuleHash =
static_cast<ImplT &
>(*this).getModuleHash(BinInfo);
527 for (
auto &[Handle, FatbinInfo] :
JitEngineInfo.FatbinaryMap) {
529 Handle,
reinterpret_cast<FatbinWrapperT *
>(FatbinInfo.FatbinWrapper),
530 FatbinInfo.ModuleId);
532 for (
auto &LinkedBin : FatbinInfo.LinkedBinaries)
534 Handle,
reinterpret_cast<FatbinWrapperT *
>(LinkedBin.FatbinWrapper),
537 for (
auto &
Func : FatbinInfo.Functions)
541 for (
auto &
Var : FatbinInfo.Vars)
549 std::make_unique<CompilerAsync>(
Config::get().ProteusAsyncThreads);
569 DenseMap<const void *, LambdaCallsiteLocationMap>
574template <
typename ImplT>
577 JITKernelInfo &KernelInfo, dim3 GridDim, dim3 BlockDim,
void **KernelArgs,
583 SmallVector<RuntimeConstant> RCVec =
584 getRuntimeConstantValues(KernelArgs, KernelInfo.
getRCInfoArray());
586 SmallVector<uint64_t> LambdaCalleeInfoToSpecialize;
588 getLambdaJitValues(LambdaCalleeInfoToSpecialize, LambdaJitValuesMap);
594 hash(getStaticHash(KernelInfo), RCVec, LambdaJitValuesMap, BlockDim.x,
597 if (CGConfig.specializeDims() || CGConfig.specializeDimsRange())
598 HashValue =
hash(HashValue, GridDim.x, GridDim.y, GridDim.z);
602 if (
void *KernelFunc =
605 .
launch(KernelFunc, GridDim, BlockDim,
606 KernelArgs, ShmemSize, Stream)
616 Library.VarNameToGlobalInfo = &BinInfo.getVarNameToGlobalInfo();
623 .
launch(LoadKernel(*CompiledLib),
624 GridDim, BlockDim, KernelArgs,
628 MemoryBufferRef KernelBitcode = getBitcode(KernelInfo);
629 std::unique_ptr<MemoryBuffer> ObjBuf =
nullptr;
632 LambdaJitValuesMap.empty() ? EmptyLambdaCallsiteRuntimeConstants
633 : LambdaJitValuesMap;
635 auto CreateTask = [&]() {
644 LambdaCalleeInfoToSpecialize,
646 BinInfo.getVarNameToGlobalInfo(),
655 if (!AsyncCompiler->isCompilationPending(HashValue)) {
659 AsyncCompiler->compile(CreateTask());
665 ObjBuf = AsyncCompiler->takeCompilationResult(
666 HashValue,
Config::get().ProteusAsyncTestBlocking);
669 KernelArgs, ShmemSize, Stream);
685 .
launch(LoadKernel(Library), GridDim,
686 BlockDim, KernelArgs, ShmemSize,
691template <
typename ImplT>
697 <<
"Register fatbinary Handle " << Handle <<
" FatbinWrapper "
699 <<
" ModuleId " <<
ModuleId <<
"\n");
704 SmallVector<std::string>{});
708 for (
int I = 0; Ptr !=
nullptr;
711 <<
"I " << I <<
" PrelinkedFatbin " << Ptr <<
"\n");
712 GlobalLinkedBinaries.insert(Ptr);
719 SmallVector<std::string>{
ModuleId});
732template <
typename ImplT>
735 ArrayRef<RuntimeConstantInfo *> RCInfoArray) {
737 <<
" To Handle " << Handle <<
"\n");
742 if (JITKernelInfoMap.contains(
Kernel)) {
744 <<
"Warning: duplicate register function for kernel " +
750 if (!HandleToBinaryInfo.count(Handle))
752 BinaryInfo &BinInfo = HandleToBinaryInfo[Handle];
755 <<
"Register function " <<
KernelName <<
" with binary handle "
758 JITKernelInfoMap[
Kernel] =
760 auto PendingIt = PendingLambdaCallsiteLocationInfo.find(
Kernel);
761 if (PendingIt != PendingLambdaCallsiteLocationInfo.end()) {
762 JITKernelInfoMap[
Kernel].setLambdaCallsiteLocationInfo(
763 std::move(PendingIt->second));
764 PendingLambdaCallsiteLocationInfo.erase(PendingIt);
768template <
typename ImplT>
773 auto It = JITKernelInfoMap.find(
Kernel);
774 if (It == JITKernelInfoMap.end()) {
783template <
typename ImplT>
790 <<
" Binary " << (
void *)
FatbinWrapper->Binary <<
" ModuleId "
792 if (!HandleToBinaryInfo.count(Handle))
795 HandleToBinaryInfo[Handle].addModuleId(
ModuleId);
void const char * ModuleId
Definition CompilerInterfaceDevice.cpp:44
void * FatbinWrapper
Definition CompilerInterfaceDevice.cpp:43
uint64_t uint32_t CallsiteIndex
Definition CompilerInterfaceDevice.cpp:73
const void const char * VarName
Definition CompilerInterfaceDevice.cpp:32
auto & JitEngineInfo
Definition CompilerInterfaceDevice.cpp:67
uint64_t LambdaID
Definition CompilerInterfaceDevice.cpp:72
uint64_t uint32_t uint32_t int64_t Offset
Definition CompilerInterfaceDevice.cpp:75
void * Kernel
Definition CompilerInterfaceDevice.cpp:62
JitEngineInfo registerFatBinary(Handle, FatbinWrapper, ModuleId)
uint64_t uint32_t uint32_t KernelArgIndex
Definition CompilerInterfaceDevice.cpp:74
const void const char uint64_t VarSize
Definition CompilerInterfaceDevice.cpp:33
const void * HostAddr
Definition CompilerInterfaceDevice.cpp:31
auto & LR
Definition CompilerInterfaceDevice.cpp:129
uint64_t uint32_t uint32_t int64_t int32_t StorageType
Definition CompilerInterfaceDevice.cpp:76
JitEngineInfo registerLinkedBinary(FatbinWrapper, ModuleId)
#define PROTEUS_TIMER_OUTPUT(x)
Definition Config.h:483
#define PROTEUS_DBG(x)
Definition Debug.h:9
#define TIMESCOPE(...)
Definition TimeTracing.h:66
Definition JitEngineDevice.h:84
FatbinWrapperT * getFatbinWrapper() const
Definition JitEngineDevice.h:106
void setExtractedModules(SmallVector< std::unique_ptr< Module > > &Modules)
Definition JitEngineDevice.h:156
std::unordered_map< std::string, GlobalVarInfo > & getVarNameToGlobalInfo()
Definition JitEngineDevice.h:219
MemoryBufferRef getDeviceBinary()
Definition JitEngineDevice.h:185
bool hasModuleHash() const
Definition JitEngineDevice.h:160
std::unique_ptr< LLVMContext > & getLLVMContext()
Definition JitEngineDevice.h:108
Module & getLinkedModule()
Definition JitEngineDevice.h:111
auto & getModuleIds()
Definition JitEngineDevice.h:223
bool hasLinkedModule() const
Definition JitEngineDevice.h:110
bool hasDeviceBinary()
Definition JitEngineDevice.h:184
const SmallVector< std::reference_wrapper< Module > > getExtractedModules() const
Definition JitEngineDevice.h:147
void updateModuleHash(HashT HashValue)
Definition JitEngineDevice.h:168
HashT getModuleHash() const
Definition JitEngineDevice.h:161
void insertGlobalVar(const char *VarName, const void *HostAddr, const void *DeviceAddr, uint64_t VarSize)
Definition JitEngineDevice.h:198
bool hasExtractedModules() const
Definition JitEngineDevice.h:145
void addModuleId(const char *ModuleId)
Definition JitEngineDevice.h:194
CallGraph & getCallGraph()
Definition JitEngineDevice.h:175
BinaryInfo(FatbinWrapperT *FatbinWrapper, SmallVector< std::string > &&LinkedModuleIds)
Definition JitEngineDevice.h:99
void setModuleHash(HashT HashValue)
Definition JitEngineDevice.h:167
void setDeviceBinary(std::unique_ptr< MemoryBuffer > DeviceBinaryBuffer)
Definition JitEngineDevice.h:190
Definition CompilationTask.h:21
std::unique_ptr< MemoryBuffer > compile(CompilationTask &&CT)
Definition CompilerSync.h:22
static CompilerSync & instance()
Definition CompilerSync.h:17
static Config & get()
Definition Config.h:371
bool ProteusRelinkGlobalsByCopy
Definition Config.h:380
bool ProteusDumpLLVMIR
Definition Config.h:379
const CodeGenerationConfig & getCGConfig(llvm::StringRef KName="") const
Definition Config.h:397
Definition Dispatcher.h:79
virtual void * lookupFunction(llvm::StringRef BaseName, const HashT &ModuleHash)=0
std::unique_ptr< CompiledLibrary > lookupCompiledLibrary(const HashT &ModuleHash)
Definition Dispatcher.cpp:124
void registerObject(const HashT &HashValue, const llvm::MemoryBufferRef &Obj)
Definition Dispatcher.cpp:141
virtual void * insertFunction(const KernelName &Name, const HashT &ModuleHash, CompiledLibrary &Library)=0
virtual DispatchResult launch(void *KernelFunc, LaunchDims GridDim, LaunchDims BlockDim, void *KernelArgs[], uint64_t ShmemSize, void *Stream)=0
std::string toString() const
Definition Hashing.h:35
Definition JitEngineDevice.h:226
bool hasBitcode()
Definition JitEngineDevice.h:263
bool hasLambdaCallsiteLocationInfo() const
Definition JitEngineDevice.h:282
const std::string & getName() const
Definition JitEngineDevice.h:254
void createStaticHash(HashT ModuleHash)
Definition JitEngineDevice.h:271
void setLambdaCallsiteLocationInfo(LambdaCallsiteLocationMap &&Info)
Definition JitEngineDevice.h:288
void addLambdaCallsiteLocation(uint64_t LambdaID, uint32_t CallsiteIndex, LambdaKernelArgLocation Location)
Definition JitEngineDevice.h:291
JITKernelInfo(void *Kernel, BinaryInfo &BinInfo, char const *Name, ArrayRef< RuntimeConstantInfo * > RCInfoArray)
Definition JitEngineDevice.h:241
void * getKernel() const
Definition JitEngineDevice.h:249
bool hasModule() const
Definition JitEngineDevice.h:256
const HashT getStaticHash() const
Definition JitEngineDevice.h:270
void setLambdaCalleeInfo(SmallVector< uint64_t > &&LambdaInfo)
Definition JitEngineDevice.h:278
BinaryInfo & getBinaryInfo() const
Definition JitEngineDevice.h:258
ArrayRef< RuntimeConstantInfo * > getRCInfoArray() const
Definition JitEngineDevice.h:255
Module & getModule() const
Definition JitEngineDevice.h:257
void setModule(std::unique_ptr< llvm::Module > Mod)
Definition JitEngineDevice.h:259
const auto & getLambdaCalleeInfo()
Definition JitEngineDevice.h:277
bool hasLambdaCalleeInfo()
Definition JitEngineDevice.h:276
MemoryBufferRef getBitcode()
Definition JitEngineDevice.h:267
bool hasStaticHash() const
Definition JitEngineDevice.h:269
std::unique_ptr< LLVMContext > & getLLVMContext()
Definition JitEngineDevice.h:253
const auto & getLambdaCallsiteLocationInfo() const
Definition JitEngineDevice.h:285
void setBitcode(std::unique_ptr< MemoryBuffer > ExtractedBitcode)
Definition JitEngineDevice.h:264
Definition JitEngineDevice.h:312
MemoryBufferRef getBitcode(JITKernelInfo &KernelInfo)
Definition JitEngineDevice.h:438
void getLambdaJitValues(SmallVector< uint64_t > &LambdaCalleeInfo, LambdaCallsiteRuntimeConstantsMap &LambdaJitValuesMap)
Definition JitEngineDevice.h:449
~JitEngineDevice()
Definition JitEngineDevice.h:552
typename DeviceTraits< ImplT >::DeviceError_t DeviceError_t
Definition JitEngineDevice.h:314
void extractModuleAndBitcode(JITKernelInfo &KernelInfo)
Definition JitEngineDevice.h:399
JitEngineDevice()
Definition JitEngineDevice.h:523
std::unique_ptr< CompilerAsync > AsyncCompiler
Definition JitEngineDevice.h:571
std::unordered_map< const void *, BinaryInfo > HandleToBinaryInfo
Definition JitEngineDevice.h:487
DenseMap< const void *, JITKernelInfo > JITKernelInfoMap
Definition JitEngineDevice.h:568
void registerLambdaCallsiteLocation(void *Kernel, uint64_t LambdaID, uint32_t CallsiteIndex, uint32_t KernelArgIndex, int64_t Offset, RuntimeConstantType StorageType)
Definition JitEngineDevice.h:769
typename DeviceTraits< ImplT >::DeviceStream_t DeviceStream_t
Definition JitEngineDevice.h:315
void finalizeRegistration()
Definition JitEngineDevice.h:723
DenseMap< const void *, LambdaCallsiteLocationMap > PendingLambdaCallsiteLocationInfo
Definition JitEngineDevice.h:570
std::unique_ptr< Dispatcher > Dispatch
Definition JitEngineDevice.h:565
Module & getModule(JITKernelInfo &KernelInfo)
Definition JitEngineDevice.h:428
bool containsJITKernelInfo(const void *Func)
Definition JitEngineDevice.h:490
std::optional< std::reference_wrapper< JITKernelInfo > > getJITKernelInfo(const void *Func)
Definition JitEngineDevice.h:495
std::pair< std::unique_ptr< Module >, std::unique_ptr< MemoryBuffer > > extractKernelModule(BinaryInfo &BinInfo, StringRef KernelName, LLVMContext &Ctx)
Definition JitEngineDevice.h:324
SmallPtrSet< void *, 8 > GlobalLinkedBinaries
Definition JitEngineDevice.h:488
void registerFunction(void *Handle, void *Kernel, char *KernelName, ArrayRef< RuntimeConstantInfo * > RCInfoArray)
Definition JitEngineDevice.h:733
Dispatcher & getDispatcher()
Definition JitEngineDevice.h:560
void registerFatBinary(void *Handle, FatbinWrapperT *FatbinWrapper, const char *ModuleId)
Definition JitEngineDevice.h:692
DeviceError_t compileAndRun(JITKernelInfo &KernelInfo, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, typename DeviceTraits< ImplT >::DeviceStream_t Stream)
Definition JitEngineDevice.h:576
void registerLinkedBinary(void *Handle, FatbinWrapperT *FatbinWrapper, const char *ModuleId)
Definition JitEngineDevice.h:784
std::unordered_map< std::string, FatbinWrapperT * > ModuleIdToFatBinary
Definition JitEngineDevice.h:486
typename DeviceTraits< ImplT >::KernelFunction_t KernelFunction_t
Definition JitEngineDevice.h:316
StringRef getDeviceArch() const
Definition JitEngineDevice.h:520
void registerVar(void *Handle, const char *VarName, const void *HostAddr, uint64_t VarSize)
Definition JitEngineDevice.h:461
std::string DeviceArch
Definition JitEngineDevice.h:566
HashT getStaticHash(JITKernelInfo &KernelInfo)
Definition JitEngineDevice.h:502
static JitEngineInfoRegistry & instance()
Definition JitEngineInfoRegistry.h:58
Definition JitEngine.h:32
Definition KernelName.h:18
Definition LambdaRegistry.h:25
static LambdaRegistry & instance()
Definition LambdaRegistry.h:27
static llvm::raw_ostream & outs(const std::string &Name)
Definition Logger.h:25
static void trace(llvm::StringRef Msg)
Definition Logger.h:30
static llvm::raw_ostream & logs(const std::string &Name)
Definition Logger.h:19
Definition TimeTracing.h:33
uint64_t elapsed()
Definition TimeTracing.cpp:66
Definition CompiledLibrary.h:8
Definition MemoryCache.h:27
DenseMap< uint64_t, DenseMap< uint32_t, LambdaKernelArgLocation > > LambdaCallsiteLocationMap
Definition LambdaCallsite.h:29
RuntimeConstantType
Definition CompilerInterfaceTypes.h:20
std::unique_ptr< Module > cloneKernelFromModules(ArrayRef< std::reference_wrapper< Module > > Mods, StringRef EntryName, function_ref< bool(const GlobalValue *)> ShouldCloneDefinition=nullptr)
Definition Cloning.h:513
HashT hash(FirstT &&First, RestTs &&...Rest)
Definition Hashing.h:268
void reportFatalError(const llvm::Twine &Reason, const char *FILE, unsigned Line)
Definition Error.cpp:14
cudaError_t launchKernelDirect(void *KernelFunc, dim3 GridDim, dim3 BlockDim, void **KernelArgs, uint64_t ShmemSize, CUstream Stream)
Definition CoreDeviceCUDA.h:41
HashT hashRuntimeSpecializationConfig(const CodeGenerationConfig &CGConfig)
Definition Hashing.h:252
HashT hashCodeGenConfig(const CodeGenerationConfig &CGConfig)
Definition Hashing.h:232
HashT hashCombine(HashT A, HashT B)
Definition Hashing.h:228
std::string toString(CodegenOption Option)
Definition Config.h:31
void * resolveDeviceGlobalAddr(const void *Addr)
Definition CoreDeviceCUDA.h:29
void internalize(Module &M, StringRef PreserveFunctionName)
Definition CoreLLVM.h:503
DenseMap< uint64_t, LambdaCallsiteRuntimeConstants > LambdaCallsiteRuntimeConstantsMap
Definition LambdaCallsite.h:32
SmallVector< RuntimeConstant, 8 > LambdaCallsiteRuntimeConstants
Definition LambdaCallsite.h:30
void runCleanupPassPipeline(Module &M)
Definition CoreLLVM.h:398
std::unique_ptr< Module > linkModules(LLVMContext &Ctx, SmallVector< std::unique_ptr< Module > > LinkedModules)
Definition CoreLLVM.h:351
Definition CompiledLibrary.h:21
bool GlobalsRelinked
Definition CompiledLibrary.h:36
Definition JitEngineDevice.h:310
int Ret
Definition Dispatcher.h:58
Definition JitEngineDevice.h:77
const char * Binary
Definition JitEngineDevice.h:80
void ** PrelinkedFatbins
Definition JitEngineDevice.h:81
int32_t Magic
Definition JitEngineDevice.h:78
int32_t Version
Definition JitEngineDevice.h:79
Definition GlobalVarInfo.h:5
Definition LambdaCallsite.h:19
int64_t Offset
Definition LambdaCallsite.h:21
RuntimeConstantType StorageType
Definition LambdaCallsite.h:22
uint32_t KernelArgIndex
Definition LambdaCallsite.h:20