blob: d1c7b90e751e6a1a834b63bad8f02290872a853d [file] [log] [blame] [edit]
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file contains the implementation of helpers and non-template member
/// functions for the device resource classes.
///
//===----------------------------------------------------------------------===//
#include "mathtest/DeviceResources.hpp"
#include "mathtest/ErrorHandling.hpp"
#include <OffloadAPI.h>
using namespace mathtest;
//===----------------------------------------------------------------------===//
// Helpers
//===----------------------------------------------------------------------===//
void detail::freeDeviceMemory(void *Address) noexcept {
if (Address)
OL_CHECK(olMemFree(Address));
}
//===----------------------------------------------------------------------===//
// DeviceImage
//===----------------------------------------------------------------------===//
DeviceImage::~DeviceImage() noexcept {
if (Handle)
OL_CHECK(olDestroyProgram(Handle));
}
DeviceImage &DeviceImage::operator=(DeviceImage &&Other) noexcept {
if (this == &Other)
return *this;
if (Handle)
OL_CHECK(olDestroyProgram(Handle));
DeviceHandle = Other.DeviceHandle;
Handle = Other.Handle;
Other.DeviceHandle = nullptr;
Other.Handle = nullptr;
return *this;
}
DeviceImage::DeviceImage(DeviceImage &&Other) noexcept
: DeviceHandle(Other.DeviceHandle), Handle(Other.Handle) {
Other.DeviceHandle = nullptr;
Other.Handle = nullptr;
}
DeviceImage::DeviceImage(ol_device_handle_t DeviceHandle,
ol_program_handle_t Handle) noexcept
: DeviceHandle(DeviceHandle), Handle(Handle) {}