//===-- 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 #include "streamexecutor/Device.h" #include "streamexecutor/Kernel.h" #include "streamexecutor/PlatformDevice.h" #include "llvm/DebugInfo/Symbolize/Symbolize.h" namespace streamexecutor { KernelBase::KernelBase(PlatformDevice *D, const void *PlatformKernelHandle, llvm::StringRef Name) : PDevice(D), PlatformKernelHandle(PlatformKernelHandle), Name(Name), DemangledName( llvm::symbolize::LLVMSymbolizer::DemangleName(Name, nullptr)) { assert(D != nullptr && "cannot construct a kernel object with a null platform device"); assert(PlatformKernelHandle != nullptr && "cannot construct a kernel object with a null platform kernel handle"); } KernelBase::KernelBase(KernelBase &&Other) noexcept : PDevice(Other.PDevice), PlatformKernelHandle(Other.PlatformKernelHandle), Name(std::move(Other.Name)), DemangledName(std::move(Other.DemangledName)) { Other.PDevice = nullptr; Other.PlatformKernelHandle = nullptr; } KernelBase &KernelBase::operator=(KernelBase &&Other) noexcept { PDevice = Other.PDevice; PlatformKernelHandle = Other.PlatformKernelHandle; Name = std::move(Other.Name); DemangledName = std::move(Other.DemangledName); Other.PDevice = nullptr; Other.PlatformKernelHandle = nullptr; return *this; } KernelBase::~KernelBase() { if (PlatformKernelHandle) // TODO(jhen): Handle the error here. consumeError(PDevice->destroyKernel(PlatformKernelHandle)); } } // namespace streamexecutor