LLVM: include/llvm/Object/OffloadBinary.h Source File (original) (raw)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#ifndef LLVM_OBJECT_OFFLOADBINARY_H
18#define LLVM_OBJECT_OFFLOADBINARY_H
19
27#include
28
29namespace llvm {
30
32
33
42
43
54
55
56
57
58
59
60
61
62
63
64class OffloadBinary : public Binary {
65public:
68
69
71
72
79 };
80
81
84
85
87
89
95
99 return StringRef(&Buffer[TheEntry->ImageOffset], TheEntry->ImageSize);
100 }
101
102
104
106
107 static bool classof(const Binary *V) { return V->isOffloadFile(); }
108
116
126
131
132private:
134 const Entry *TheEntry)
136 TheHeader(TheHeader), TheEntry(TheEntry) {
138 reinterpret_cast<const StringEntry *>(&Buffer[TheEntry->StringOffset]);
139 for (uint64_t I = 0, E = TheEntry->NumStrings; I != E; ++I) {
140 StringRef Key = &Buffer[StringMapBegin[I].KeyOffset];
141 StringData[Key] = &Buffer[StringMapBegin[I].ValueOffset];
142 }
143 }
144
146
147
149
150 const char *Buffer;
151
152 const Header *TheHeader;
153
154 const Entry *TheEntry;
155};
156
157
158
160public:
161 using TargetID = std::pair<StringRef, StringRef>;
162
164 std::unique_ptr Buffer)
166
167
170 getBinary()->getMemoryBufferRef().getBuffer(),
171 getBinary()->getMemoryBufferRef().getBufferIdentifier());
172
173
175 assert(NewBinaryOrErr && "Failed to parse a copy of the binary?");
176 if (!NewBinaryOrErr)
178 return OffloadFile(std::move(*NewBinaryOrErr), std::move(Buffer));
179 }
180
181
182
186};
187
188
189
192
193
195
196
198
199
201
202
204
205
206
207
208
209
210
211
212
213
216
217}
218
219}
220#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This file implements a map that provides insertion order iteration.
This file defines the SmallString class.
Lightweight error class with error context and mandatory checking.
Tagged union holding either a T or a Error.
This class implements a map that also provides access to all stored values in a deterministic order.
typename VectorType::const_iterator const_iterator
static std::unique_ptr< MemoryBuffer > getMemBufferCopy(StringRef InputData, const Twine &BufferName="")
Open the specified memory range as a MemoryBuffer, copying the contents and taking ownership of it.
SmallString - A SmallString is just a SmallVector with methods and accessors that make it work better...
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
StringRef - Represent a constant reference to a string, i.e.
A range adaptor for a pair of iterators.
OffloadBinary * getBinary()
Binary(unsigned int Type, MemoryBufferRef Source)
A simple binary serialization of an offloading file.
Definition OffloadBinary.h:64
static uint64_t getAlignment()
Definition OffloadBinary.h:88
OffloadKind getOffloadKind() const
Definition OffloadBinary.h:91
iterator_range< string_iterator > string_iterator_range
Definition OffloadBinary.h:67
StringRef getString(StringRef Key) const
Definition OffloadBinary.h:105
uint32_t getVersion() const
Definition OffloadBinary.h:92
StringRef getImage() const
Definition OffloadBinary.h:98
static LLVM_ABI SmallString< 0 > write(const OffloadingImage &)
Serialize the contents of File to a binary buffer to be read later.
uint32_t getFlags() const
Definition OffloadBinary.h:93
StringRef getTriple() const
Definition OffloadBinary.h:96
ImageKind getImageKind() const
Definition OffloadBinary.h:90
static LLVM_ABI Expected< std::unique_ptr< OffloadBinary > > create(MemoryBufferRef)
Attempt to parse the offloading binary stored in Data.
static bool classof(const Binary *V)
Definition OffloadBinary.h:107
string_iterator_range strings() const
Definition OffloadBinary.h:103
StringRef getArch() const
Definition OffloadBinary.h:97
uint64_t getSize() const
Definition OffloadBinary.h:94
static const uint32_t Version
The current version of the binary used for backwards compatibility.
Definition OffloadBinary.h:70
MapVector< StringRef, StringRef >::const_iterator string_iterator
Definition OffloadBinary.h:66
std::pair< StringRef, StringRef > TargetID
Definition OffloadBinary.h:161
OffloadFile copy() const
Make a deep copy of this offloading file.
Definition OffloadBinary.h:168
OffloadFile(std::unique_ptr< OffloadBinary > Binary, std::unique_ptr< MemoryBuffer > Buffer)
Definition OffloadBinary.h:163
LLVM_ABI Error extractOffloadBinaries(MemoryBufferRef Buffer, SmallVectorImpl< OffloadFile > &Binaries)
Extracts embedded device offloading code from a memory Buffer to a list of Binaries.
LLVM_ABI ImageKind getImageKind(StringRef Name)
Convert a string Name to an image kind.
LLVM_ABI bool areTargetsCompatible(const OffloadFile::TargetID &LHS, const OffloadFile::TargetID &RHS)
If the target is AMD we check the target IDs for mutual compatibility.
OffloadKind
The producer of the associated offloading image.
Definition OffloadBinary.h:34
@ OFK_SYCL
Definition OffloadBinary.h:39
@ OFK_LAST
Definition OffloadBinary.h:40
@ OFK_Cuda
Definition OffloadBinary.h:37
@ OFK_None
Definition OffloadBinary.h:35
@ OFK_HIP
Definition OffloadBinary.h:38
@ OFK_OpenMP
Definition OffloadBinary.h:36
LLVM_ABI OffloadKind getOffloadKind(StringRef Name)
Convert a string Name to an offload kind.
LLVM_ABI StringRef getImageKindName(ImageKind Name)
Convert an image kind to its string representation.
ImageKind
The type of contents the offloading image contains.
Definition OffloadBinary.h:44
@ IMG_Fatbinary
Definition OffloadBinary.h:49
@ IMG_SPIRV
Definition OffloadBinary.h:51
@ IMG_Object
Definition OffloadBinary.h:46
@ IMG_None
Definition OffloadBinary.h:45
@ IMG_LAST
Definition OffloadBinary.h:52
@ IMG_Bitcode
Definition OffloadBinary.h:47
@ IMG_PTX
Definition OffloadBinary.h:50
@ IMG_Cubin
Definition OffloadBinary.h:48
LLVM_ABI StringRef getOffloadKindName(OffloadKind Name)
Convert an offload kind to its string representation.
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ATTRIBUTE_VISIBILITY_DEFAULT AnalysisKey InnerAnalysisManagerProxy< AnalysisManagerT, IRUnitT, ExtraArgTs... >::Key
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
void consumeError(Error Err)
Consume a Error without doing anything.
Implement std::hash so that hash_code can be used in STL containers.
Definition OffloadBinary.h:117
uint64_t NumStrings
Definition OffloadBinary.h:122
uint64_t ImageOffset
Definition OffloadBinary.h:123
ImageKind TheImageKind
Definition OffloadBinary.h:118
uint64_t ImageSize
Definition OffloadBinary.h:124
uint32_t Flags
Definition OffloadBinary.h:120
OffloadKind TheOffloadKind
Definition OffloadBinary.h:119
uint64_t StringOffset
Definition OffloadBinary.h:121
The offloading metadata that will be serialized to a memory buffer.
Definition OffloadBinary.h:73
OffloadKind TheOffloadKind
Definition OffloadBinary.h:75
uint32_t Flags
Definition OffloadBinary.h:76
std::unique_ptr< MemoryBuffer > Image
Definition OffloadBinary.h:78
ImageKind TheImageKind
Definition OffloadBinary.h:74
MapVector< StringRef, StringRef > StringData
Definition OffloadBinary.h:77
Definition OffloadBinary.h:127
uint64_t ValueOffset
Definition OffloadBinary.h:129
uint64_t KeyOffset
Definition OffloadBinary.h:128