Skip to content

Commit e3dbccc

Browse files
committed
[OpenMP] Replace copy and paste code with instantiation
1 parent c64bac6 commit e3dbccc

File tree

3 files changed

+67
-135
lines changed

3 files changed

+67
-135
lines changed

openmp/libomptarget/include/PluginManager.h

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -38,48 +38,12 @@ struct PluginAdaptorTy {
3838
std::string RTLName;
3939
#endif
4040

41-
#define DEFINE_PLUGIN_API_HANDLE(NAME) \
41+
#define PLUGIN_API_HANDLE(NAME, MANDATORY) \
4242
using NAME##_ty = decltype(__tgt_rtl_##NAME); \
4343
NAME##_ty *NAME = nullptr;
4444

45-
// Functions implemented in the RTL.
46-
DEFINE_PLUGIN_API_HANDLE(init_plugin);
47-
DEFINE_PLUGIN_API_HANDLE(is_valid_binary);
48-
DEFINE_PLUGIN_API_HANDLE(is_valid_binary_info);
49-
DEFINE_PLUGIN_API_HANDLE(is_data_exchangable);
50-
DEFINE_PLUGIN_API_HANDLE(number_of_devices);
51-
DEFINE_PLUGIN_API_HANDLE(init_device);
52-
DEFINE_PLUGIN_API_HANDLE(load_binary);
53-
DEFINE_PLUGIN_API_HANDLE(data_alloc);
54-
DEFINE_PLUGIN_API_HANDLE(data_submit);
55-
DEFINE_PLUGIN_API_HANDLE(data_submit_async);
56-
DEFINE_PLUGIN_API_HANDLE(data_retrieve);
57-
DEFINE_PLUGIN_API_HANDLE(data_retrieve_async);
58-
DEFINE_PLUGIN_API_HANDLE(data_exchange);
59-
DEFINE_PLUGIN_API_HANDLE(data_exchange_async);
60-
DEFINE_PLUGIN_API_HANDLE(data_delete);
61-
DEFINE_PLUGIN_API_HANDLE(launch_kernel);
62-
DEFINE_PLUGIN_API_HANDLE(init_requires);
63-
DEFINE_PLUGIN_API_HANDLE(synchronize);
64-
DEFINE_PLUGIN_API_HANDLE(query_async);
65-
DEFINE_PLUGIN_API_HANDLE(supports_empty_images);
66-
DEFINE_PLUGIN_API_HANDLE(set_info_flag);
67-
DEFINE_PLUGIN_API_HANDLE(print_device_info);
68-
DEFINE_PLUGIN_API_HANDLE(create_event);
69-
DEFINE_PLUGIN_API_HANDLE(record_event);
70-
DEFINE_PLUGIN_API_HANDLE(wait_event);
71-
DEFINE_PLUGIN_API_HANDLE(sync_event);
72-
DEFINE_PLUGIN_API_HANDLE(destroy_event);
73-
DEFINE_PLUGIN_API_HANDLE(init_async_info);
74-
DEFINE_PLUGIN_API_HANDLE(init_device_info);
75-
DEFINE_PLUGIN_API_HANDLE(data_lock);
76-
DEFINE_PLUGIN_API_HANDLE(data_unlock);
77-
DEFINE_PLUGIN_API_HANDLE(data_notify_mapped);
78-
DEFINE_PLUGIN_API_HANDLE(data_notify_unmapped);
79-
DEFINE_PLUGIN_API_HANDLE(set_device_offset);
80-
DEFINE_PLUGIN_API_HANDLE(initialize_record_replay);
81-
82-
#undef DEFINE_PLUGIN_API_HANDLE
45+
#include "Shared/PluginAPI.inc"
46+
#undef PLUGIN_API_HANDLE
8347

8448
// Are there images associated with this RTL.
8549
bool IsUsed = false;
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//===-- Shared/PluginAPI.inc - Target independent plugin API ----*- C++ -*-===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
//
9+
// This file defines the names of the interface functions between target
10+
// independent offload runtime library and target dependent plugins.
11+
//
12+
//===----------------------------------------------------------------------===//
13+
14+
// No include guards!
15+
16+
PLUGIN_API_HANDLE(init_plugin, true);
17+
PLUGIN_API_HANDLE(is_valid_binary, true);
18+
PLUGIN_API_HANDLE(is_valid_binary_info, false);
19+
PLUGIN_API_HANDLE(is_data_exchangable, false);
20+
PLUGIN_API_HANDLE(number_of_devices, true);
21+
PLUGIN_API_HANDLE(init_device, true);
22+
PLUGIN_API_HANDLE(load_binary, true);
23+
PLUGIN_API_HANDLE(data_alloc, true);
24+
PLUGIN_API_HANDLE(data_submit, true);
25+
PLUGIN_API_HANDLE(data_submit_async, false);
26+
PLUGIN_API_HANDLE(data_retrieve, true);
27+
PLUGIN_API_HANDLE(data_retrieve_async, false);
28+
PLUGIN_API_HANDLE(data_exchange, false);
29+
PLUGIN_API_HANDLE(data_exchange_async, false);
30+
PLUGIN_API_HANDLE(data_delete, true);
31+
PLUGIN_API_HANDLE(launch_kernel, true);
32+
PLUGIN_API_HANDLE(init_requires, false);
33+
PLUGIN_API_HANDLE(synchronize, false);
34+
PLUGIN_API_HANDLE(query_async, false);
35+
PLUGIN_API_HANDLE(supports_empty_images, false);
36+
PLUGIN_API_HANDLE(set_info_flag, false);
37+
PLUGIN_API_HANDLE(print_device_info, false);
38+
PLUGIN_API_HANDLE(create_event, false);
39+
PLUGIN_API_HANDLE(record_event, false);
40+
PLUGIN_API_HANDLE(wait_event, false);
41+
PLUGIN_API_HANDLE(sync_event, false);
42+
PLUGIN_API_HANDLE(destroy_event, false);
43+
PLUGIN_API_HANDLE(init_async_info, false);
44+
PLUGIN_API_HANDLE(init_device_info, false);
45+
PLUGIN_API_HANDLE(data_lock, false);
46+
PLUGIN_API_HANDLE(data_unlock, false);
47+
PLUGIN_API_HANDLE(data_notify_mapped, false);
48+
PLUGIN_API_HANDLE(data_notify_unmapped, false);
49+
PLUGIN_API_HANDLE(set_device_offset, false);
50+
PLUGIN_API_HANDLE(initialize_record_replay, false);

openmp/libomptarget/src/rtl.cpp

Lines changed: 14 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include "OpenMP/OMPT/Callback.h"
1616
#include "PluginManager.h"
17+
#include "Shared/Debug.h"
1718
#include "device.h"
1819
#include "private.h"
1920
#include "rtl.h"
@@ -132,50 +133,21 @@ bool PluginAdaptorManagerTy::attemptLoadRTL(const std::string &RTLName, PluginAd
132133

133134
DP("Successfully loaded library '%s'!\n", Name);
134135

135-
// Remove plugin on failure to call optional init_plugin
136-
*((void **)&RTL.init_plugin) =
137-
DynLibrary->getAddressOfSymbol("__tgt_rtl_init_plugin");
138-
if (RTL.init_plugin) {
139-
int32_t Rc = RTL.init_plugin();
140-
if (Rc != OFFLOAD_SUCCESS) {
141-
DP("Unable to initialize library '%s': %u!\n", Name, Rc);
142-
return false;
143-
}
136+
#define PLUGIN_API_HANDLE(NAME, MANDATORY) \
137+
*((void **)&RTL.NAME) = \
138+
DynLibrary->getAddressOfSymbol(GETNAME(__tgt_rtl_##NAME)); \
139+
if (MANDATORY && !RTL.NAME) { \
140+
DP("Invalid plugin as necessary interface is not found.\n"); \
141+
return false; \
144142
}
145143

146-
bool ValidPlugin = true;
147-
148-
if (!(*((void **)&RTL.is_valid_binary) =
149-
DynLibrary->getAddressOfSymbol("__tgt_rtl_is_valid_binary")))
150-
ValidPlugin = false;
151-
if (!(*((void **)&RTL.number_of_devices) =
152-
DynLibrary->getAddressOfSymbol("__tgt_rtl_number_of_devices")))
153-
ValidPlugin = false;
154-
if (!(*((void **)&RTL.init_device) =
155-
DynLibrary->getAddressOfSymbol("__tgt_rtl_init_device")))
156-
ValidPlugin = false;
157-
if (!(*((void **)&RTL.load_binary) =
158-
DynLibrary->getAddressOfSymbol("__tgt_rtl_load_binary")))
159-
ValidPlugin = false;
160-
if (!(*((void **)&RTL.data_alloc) =
161-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_alloc")))
162-
ValidPlugin = false;
163-
if (!(*((void **)&RTL.data_submit) =
164-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_submit")))
165-
ValidPlugin = false;
166-
if (!(*((void **)&RTL.data_retrieve) =
167-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_retrieve")))
168-
ValidPlugin = false;
169-
if (!(*((void **)&RTL.data_delete) =
170-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_delete")))
171-
ValidPlugin = false;
172-
if (!(*((void **)&RTL.launch_kernel) =
173-
DynLibrary->getAddressOfSymbol("__tgt_rtl_launch_kernel")))
174-
ValidPlugin = false;
175-
176-
// Invalid plugin
177-
if (!ValidPlugin) {
178-
DP("Invalid plugin as necessary interface is not found.\n");
144+
#include "Shared/PluginAPI.inc"
145+
#undef PLUGIN_API_HANDLE
146+
147+
// Remove plugin on failure to call optional init_plugin
148+
int32_t Rc = RTL.init_plugin();
149+
if (Rc != OFFLOAD_SUCCESS) {
150+
DP("Unable to initialize library '%s': %u!\n", Name, Rc);
179151
return false;
180152
}
181153

@@ -192,60 +164,6 @@ bool PluginAdaptorManagerTy::attemptLoadRTL(const std::string &RTLName, PluginAd
192164

193165
DP("Registering RTL %s supporting %d devices!\n", Name, RTL.NumberOfDevices);
194166

195-
// Optional functions
196-
*((void **)&RTL.is_valid_binary_info) =
197-
DynLibrary->getAddressOfSymbol("__tgt_rtl_is_valid_binary_info");
198-
*((void **)&RTL.init_requires) =
199-
DynLibrary->getAddressOfSymbol("__tgt_rtl_init_requires");
200-
*((void **)&RTL.data_submit_async) =
201-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_submit_async");
202-
*((void **)&RTL.data_retrieve_async) =
203-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_retrieve_async");
204-
*((void **)&RTL.synchronize) =
205-
DynLibrary->getAddressOfSymbol("__tgt_rtl_synchronize");
206-
*((void **)&RTL.query_async) =
207-
DynLibrary->getAddressOfSymbol("__tgt_rtl_query_async");
208-
*((void **)&RTL.data_exchange) =
209-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_exchange");
210-
*((void **)&RTL.data_exchange_async) =
211-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_exchange_async");
212-
*((void **)&RTL.is_data_exchangable) =
213-
DynLibrary->getAddressOfSymbol("__tgt_rtl_is_data_exchangable");
214-
*((void **)&RTL.supports_empty_images) =
215-
DynLibrary->getAddressOfSymbol("__tgt_rtl_supports_empty_images");
216-
*((void **)&RTL.set_info_flag) =
217-
DynLibrary->getAddressOfSymbol("__tgt_rtl_set_info_flag");
218-
*((void **)&RTL.print_device_info) =
219-
DynLibrary->getAddressOfSymbol("__tgt_rtl_print_device_info");
220-
*((void **)&RTL.create_event) =
221-
DynLibrary->getAddressOfSymbol("__tgt_rtl_create_event");
222-
*((void **)&RTL.record_event) =
223-
DynLibrary->getAddressOfSymbol("__tgt_rtl_record_event");
224-
*((void **)&RTL.wait_event) =
225-
DynLibrary->getAddressOfSymbol("__tgt_rtl_wait_event");
226-
*((void **)&RTL.sync_event) =
227-
DynLibrary->getAddressOfSymbol("__tgt_rtl_sync_event");
228-
*((void **)&RTL.destroy_event) =
229-
DynLibrary->getAddressOfSymbol("__tgt_rtl_destroy_event");
230-
*((void **)&RTL.init_async_info) =
231-
DynLibrary->getAddressOfSymbol("__tgt_rtl_init_async_info");
232-
*((void **)&RTL.init_device_info) =
233-
DynLibrary->getAddressOfSymbol("__tgt_rtl_init_device_info");
234-
*((void **)&RTL.data_lock) =
235-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_lock");
236-
*((void **)&RTL.data_unlock) =
237-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_unlock");
238-
*((void **)&RTL.data_notify_mapped) =
239-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_notify_mapped");
240-
*((void **)&RTL.data_notify_unmapped) =
241-
DynLibrary->getAddressOfSymbol("__tgt_rtl_data_notify_unmapped");
242-
*((void **)&RTL.set_device_offset) =
243-
DynLibrary->getAddressOfSymbol("__tgt_rtl_set_device_offset");
244-
245-
// Record Replay RTL
246-
*((void **)&RTL.initialize_record_replay) =
247-
DynLibrary->getAddressOfSymbol("__tgt_rtl_initialize_record_replay");
248-
249167
RTL.LibraryHandler = std::move(DynLibrary);
250168

251169
// Successfully loaded

0 commit comments

Comments
 (0)