1#ifndef PROTEUS_FRONTEND_DISPATCHER_CUDA_H
2#define PROTEUS_FRONTEND_DISPATCHER_CUDA_H
11#include <llvm/Bitcode/BitcodeReader.h>
12#include <llvm/Linker/Linker.h>
13#include <llvm/Support/MemoryBuffer.h>
17class DispatcherCUDA :
public DispatcherDevice<JitEngineDeviceCUDA> {
19 static DispatcherCUDA &instance() {
20 static DispatcherCUDA D{
"DispatcherCUDA", JitEngineDeviceCUDA::instance()};
24 DispatcherCUDA(
const std::string &Label, JitEngineDeviceCUDA &Jit)
28 void linkDeviceLibraries(Module &M)
override {
29 TIMESCOPE(DispatcherCUDA, linkDeviceLibraries);
31 auto LibDeviceBuffer = llvm::MemoryBuffer::getFile(Toolchain.LibDevicePath);
32 if (!LibDeviceBuffer || !LibDeviceBuffer.get())
34 Toolchain.LibDevicePath +
" (" + Toolchain.Origin +
")");
36 auto LibDeviceModule = llvm::parseBitcodeFile(
37 LibDeviceBuffer->get()->getMemBufferRef(), M.getContext());
40 Toolchain.LibDevicePath +
" (" + Toolchain.Origin +
")");
42 llvm::Linker Linker(M);
43 Linker.linkInModule(std::move(LibDeviceModule.get()),
44 llvm::Linker::Flags::LinkOnlyNeeded);
#define TIMESCOPE(...)
Definition TimeTracing.h:66
Definition MemoryCache.h:27
TargetModelType
Definition TargetModel.h:8
void reportFatalError(const llvm::Twine &Reason, const char *FILE, unsigned Line)
Definition Error.cpp:14
const ResolvedCUDAToolchain & resolveCUDAToolchain()
Definition CUDAToolchain.cpp:245