forked from OSchip/llvm-project
61 lines
2.0 KiB
C++
61 lines
2.0 KiB
C++
//===-- 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 <cassert>
|
|
|
|
#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
|