summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Bataev <a.bataev@hotmail.com>2018-07-09 17:46:55 +0000
committerAlexey Bataev <a.bataev@hotmail.com>2018-07-09 17:46:55 +0000
commit2622e9e5b3d658aacaf50aca44ecfdeeacbaf064 (patch)
tree810cf3d4967596db3270945cf80fc882f342ead0
parent39ada85446d29ffe95a9c8dd558dbd68118f4525 (diff)
downloadbcm5719-llvm-2622e9e5b3d658aacaf50aca44ecfdeeacbaf064.tar.gz
bcm5719-llvm-2622e9e5b3d658aacaf50aca44ecfdeeacbaf064.zip
[OPENMP, NVPTX] Support several images in the executable.
Summary: Currently Cuda plugin supports loading of the single image, though we may have the executable with the several images, if it has target regions inside of the dynamically loaded library. Patch allows to load multiple images. Reviewers: grokos Subscribers: guansong, openmp-commits, kkwli0 Differential Revision: https://reviews.llvm.org/D49036 llvm-svn: 336569
-rw-r--r--openmp/libomptarget/plugins/cuda/src/rtl.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/openmp/libomptarget/plugins/cuda/src/rtl.cpp b/openmp/libomptarget/plugins/cuda/src/rtl.cpp
index fe2f9f67c4b..872e7f02aed 100644
--- a/openmp/libomptarget/plugins/cuda/src/rtl.cpp
+++ b/openmp/libomptarget/plugins/cuda/src/rtl.cpp
@@ -92,7 +92,7 @@ std::list<KernelTy> KernelsList;
/// Class containing all the device information.
class RTLDeviceInfoTy {
- std::vector<FuncOrGblEntryTy> FuncGblEntries;
+ std::vector<std::list<FuncOrGblEntryTy>> FuncGblEntries;
public:
int NumberOfDevices;
@@ -122,7 +122,7 @@ public:
void addOffloadEntry(int32_t device_id, __tgt_offload_entry entry) {
assert(device_id < (int32_t)FuncGblEntries.size() &&
"Unexpected device id!");
- FuncOrGblEntryTy &E = FuncGblEntries[device_id];
+ FuncOrGblEntryTy &E = FuncGblEntries[device_id].back();
E.Entries.push_back(entry);
}
@@ -131,7 +131,7 @@ public:
bool findOffloadEntry(int32_t device_id, void *addr) {
assert(device_id < (int32_t)FuncGblEntries.size() &&
"Unexpected device id!");
- FuncOrGblEntryTy &E = FuncGblEntries[device_id];
+ FuncOrGblEntryTy &E = FuncGblEntries[device_id].back();
for (auto &it : E.Entries) {
if (it.addr == addr)
@@ -145,7 +145,7 @@ public:
__tgt_target_table *getOffloadEntriesTable(int32_t device_id) {
assert(device_id < (int32_t)FuncGblEntries.size() &&
"Unexpected device id!");
- FuncOrGblEntryTy &E = FuncGblEntries[device_id];
+ FuncOrGblEntryTy &E = FuncGblEntries[device_id].back();
int32_t size = E.Entries.size();
@@ -167,7 +167,8 @@ public:
void clearOffloadEntriesTable(int32_t device_id) {
assert(device_id < (int32_t)FuncGblEntries.size() &&
"Unexpected device id!");
- FuncOrGblEntryTy &E = FuncGblEntries[device_id];
+ FuncGblEntries[device_id].emplace_back();
+ FuncOrGblEntryTy &E = FuncGblEntries[device_id].back();
E.Entries.clear();
E.Table.EntriesBegin = E.Table.EntriesEnd = 0;
}
OpenPOWER on IntegriCloud