Fix a race condition between the "ephemeral watchpoint disabling" and commands the...
[lldb.git] / parallel-libs / streamexecutor / lib / Kernel.cpp
1 //===-- Kernel.cpp - General kernel implementation ------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// This file contains the implementation details for kernel types.
12 ///
13 //===----------------------------------------------------------------------===//
14
15 #include <cassert>
16
17 #include "streamexecutor/Device.h"
18 #include "streamexecutor/Kernel.h"
19 #include "streamexecutor/PlatformDevice.h"
20
21 #include "llvm/DebugInfo/Symbolize/Symbolize.h"
22
23 namespace streamexecutor {
24
25 KernelBase::KernelBase(PlatformDevice *D, const void *PlatformKernelHandle,
26                        llvm::StringRef Name)
27     : PDevice(D), PlatformKernelHandle(PlatformKernelHandle), Name(Name),
28       DemangledName(
29           llvm::symbolize::LLVMSymbolizer::DemangleName(Name, nullptr)) {
30   assert(D != nullptr &&
31          "cannot construct a kernel object with a null platform device");
32   assert(PlatformKernelHandle != nullptr &&
33          "cannot construct a kernel object with a null platform kernel handle");
34 }
35
36 KernelBase::KernelBase(KernelBase &&Other) noexcept
37     : PDevice(Other.PDevice), PlatformKernelHandle(Other.PlatformKernelHandle),
38       Name(std::move(Other.Name)),
39       DemangledName(std::move(Other.DemangledName)) {
40   Other.PDevice = nullptr;
41   Other.PlatformKernelHandle = nullptr;
42 }
43
44 KernelBase &KernelBase::operator=(KernelBase &&Other) noexcept {
45   PDevice = Other.PDevice;
46   PlatformKernelHandle = Other.PlatformKernelHandle;
47   Name = std::move(Other.Name);
48   DemangledName = std::move(Other.DemangledName);
49   Other.PDevice = nullptr;
50   Other.PlatformKernelHandle = nullptr;
51   return *this;
52 }
53
54 KernelBase::~KernelBase() {
55   if (PlatformKernelHandle)
56     // TODO(jhen): Handle the error here.
57     consumeError(PDevice->destroyKernel(PlatformKernelHandle));
58 }
59
60 } // namespace streamexecutor