Summary: The offloading entries right now are assumed to be baked into the binary itself, and thus always valid whenever the library is executing. This means that we don't need to copy them to additional storage and can instead simply pass around references to it. This is not likely to change in the expected operation of the OpenMP library. Additionally, the indirection for the offload entry struct is simply two pointers, so moving it by value is trivial.
45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
//===-- DeviceImage.h - Representation of the device code/image -*- C++ -*-===//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef OMPTARGET_DEVICE_IMAGE_H
|
|
#define OMPTARGET_DEVICE_IMAGE_H
|
|
|
|
#include "OffloadEntry.h"
|
|
#include "Shared/APITypes.h"
|
|
|
|
#include "llvm/ADT/SmallVector.h"
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/ADT/iterator.h"
|
|
#include "llvm/ADT/iterator_range.h"
|
|
#include "llvm/Object/OffloadBinary.h"
|
|
|
|
#include <memory>
|
|
|
|
class DeviceImageTy {
|
|
|
|
std::unique_ptr<llvm::object::OffloadBinary> Binary;
|
|
|
|
__tgt_bin_desc *BinaryDesc;
|
|
__tgt_device_image Image;
|
|
|
|
public:
|
|
DeviceImageTy(__tgt_bin_desc &BinaryDesc, __tgt_device_image &Image);
|
|
|
|
__tgt_device_image &getExecutableImage() { return Image; }
|
|
__tgt_bin_desc &getBinaryDesc() { return *BinaryDesc; }
|
|
|
|
auto entries() {
|
|
return llvm::make_range(Image.EntriesBegin, Image.EntriesEnd);
|
|
}
|
|
};
|
|
|
|
#endif // OMPTARGET_DEVICE_IMAGE_H
|