| //===-- Kernel.cpp - General kernel implementation ------------------------===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| /// |
| /// \file |
| /// This file contains the implementation details for kernel types. |
| /// |
| //===----------------------------------------------------------------------===// |
| |
| #include "streamexecutor/Kernel.h" |
| #include "streamexecutor/Device.h" |
| #include "streamexecutor/PlatformInterfaces.h" |
| |
| #include "llvm/DebugInfo/Symbolize/Symbolize.h" |
| |
| namespace streamexecutor { |
| |
| KernelBase::KernelBase(Device *Dev, const std::string &Name, |
| const std::string &DemangledName, |
| std::unique_ptr<KernelInterface> Implementation) |
| : TheDevice(Dev), Name(Name), DemangledName(DemangledName), |
| Implementation(std::move(Implementation)) {} |
| |
| KernelBase::~KernelBase() = default; |
| |
| Expected<KernelBase> KernelBase::create(Device *Dev, |
| const MultiKernelLoaderSpec &Spec) { |
| auto MaybeImplementation = Dev->getKernelImplementation(Spec); |
| if (!MaybeImplementation) { |
| return MaybeImplementation.takeError(); |
| } |
| std::string Name = Spec.getKernelName(); |
| std::string DemangledName = |
| llvm::symbolize::LLVMSymbolizer::DemangleName(Name, nullptr); |
| KernelBase Instance(Dev, Name, DemangledName, |
| std::move(*MaybeImplementation)); |
| return std::move(Instance); |
| } |
| |
| } // namespace streamexecutor |