diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2022-09-09 17:37:09 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2022-09-09 17:37:09 +0200 |
commit | 0fcc0cf9dca9f11acbbc94c9437759bdfbd297f2 (patch) | |
tree | 1fdf0ff7737beb5575c456a4aed681227b07df76 /libgomp | |
parent | a1a53dc7d87969d230e9ca51fcab59f3a72e5f6e (diff) | |
download | gcc-0fcc0cf9dca9f11acbbc94c9437759bdfbd297f2.zip gcc-0fcc0cf9dca9f11acbbc94c9437759bdfbd297f2.tar.gz gcc-0fcc0cf9dca9f11acbbc94c9437759bdfbd297f2.tar.bz2 |
libgomp: Prepare for reverse offload fn lookup
Prepare for reverse-offloading function-pointer lookup by passing
a rev_fn_table argument to GOMP_OFFLOAD_load_image.
The argument will be NULL, unless GOMP_REQUIRES_REVERSE_OFFLOAD is
requested and devices not supported it, are filtered out.
(Up to and including this commit, no non-host device claims such
support and the caller currently always passes NULL.)
libgomp/ChangeLog:
* libgomp-plugin.h (GOMP_OFFLOAD_load_image): Add
'uint64_t **rev_fn_table' argument.
* oacc-host.c (host_load_image): Likewise.
* plugin/plugin-gcn.c (GOMP_OFFLOAD_load_image): Likewise;
currently unused.
* plugin/plugin-nvptx.c (GOMP_OFFLOAD_load_image): Likewise.
* target.c (gomp_load_image_to_device): Update call but pass
NULL for now.
liboffloadmic/ChangeLog:
* plugin/libgomp-plugin-intelmic.cpp (GOMP_OFFLOAD_load_image):
Add (unused) uint64_t **rev_fn_table argument.
Diffstat (limited to 'libgomp')
-rw-r--r-- | libgomp/libgomp-plugin.h | 2 | ||||
-rw-r--r-- | libgomp/oacc-host.c | 3 | ||||
-rw-r--r-- | libgomp/plugin/plugin-gcn.c | 7 | ||||
-rw-r--r-- | libgomp/plugin/plugin-nvptx.c | 7 | ||||
-rw-r--r-- | libgomp/target.c | 2 |
5 files changed, 14 insertions, 7 deletions
diff --git a/libgomp/libgomp-plugin.h b/libgomp/libgomp-plugin.h index 71a307f..6ab5ac6 100644 --- a/libgomp/libgomp-plugin.h +++ b/libgomp/libgomp-plugin.h @@ -130,7 +130,7 @@ extern bool GOMP_OFFLOAD_init_device (int); extern bool GOMP_OFFLOAD_fini_device (int); extern unsigned GOMP_OFFLOAD_version (void); extern int GOMP_OFFLOAD_load_image (int, unsigned, const void *, - struct addr_pair **); + struct addr_pair **, uint64_t **); extern bool GOMP_OFFLOAD_unload_image (int, unsigned, const void *); extern void *GOMP_OFFLOAD_alloc (int, size_t); extern bool GOMP_OFFLOAD_free (int, void *); diff --git a/libgomp/oacc-host.c b/libgomp/oacc-host.c index eb11b9c..4e3971a 100644 --- a/libgomp/oacc-host.c +++ b/libgomp/oacc-host.c @@ -81,7 +81,8 @@ static int host_load_image (int n __attribute__ ((unused)), unsigned v __attribute__ ((unused)), const void *t __attribute__ ((unused)), - struct addr_pair **r __attribute__ ((unused))) + struct addr_pair **r __attribute__ ((unused)), + uint64_t **f __attribute__ ((unused))) { return 0; } diff --git a/libgomp/plugin/plugin-gcn.c b/libgomp/plugin/plugin-gcn.c index 957455a..6c77f89 100644 --- a/libgomp/plugin/plugin-gcn.c +++ b/libgomp/plugin/plugin-gcn.c @@ -3346,11 +3346,14 @@ GOMP_OFFLOAD_init_device (int n) /* Load GCN object-code module described by struct gcn_image_desc in TARGET_DATA and return references to kernel descriptors in TARGET_TABLE. - If there are any constructors then run them. */ + If there are any constructors then run them. If not NULL, REV_FN_TABLE will + contain the on-device addresses of the functions for reverse offload. To be + freed by the caller. */ int GOMP_OFFLOAD_load_image (int ord, unsigned version, const void *target_data, - struct addr_pair **target_table) + struct addr_pair **target_table, + uint64_t **rev_fn_table __attribute__((unused))) { if (GOMP_VERSION_DEV (version) != GOMP_VERSION_GCN) { diff --git a/libgomp/plugin/plugin-nvptx.c b/libgomp/plugin/plugin-nvptx.c index a12f1ac..044bb9c 100644 --- a/libgomp/plugin/plugin-nvptx.c +++ b/libgomp/plugin/plugin-nvptx.c @@ -1266,11 +1266,14 @@ nvptx_set_clocktick (CUmodule module, struct ptx_device *dev) } /* Load the (partial) program described by TARGET_DATA to device - number ORD. Allocate and return TARGET_TABLE. */ + number ORD. Allocate and return TARGET_TABLE. If not NULL, REV_FN_TABLE + will contain the on-device addresses of the functions for reverse offload. + To be freed by the caller. */ int GOMP_OFFLOAD_load_image (int ord, unsigned version, const void *target_data, - struct addr_pair **target_table) + struct addr_pair **target_table, + uint64_t **rev_fn_table __attribute__((unused))) { CUmodule module; const char *const *var_names; diff --git a/libgomp/target.c b/libgomp/target.c index fbc2827..5763483 100644 --- a/libgomp/target.c +++ b/libgomp/target.c @@ -2196,7 +2196,7 @@ gomp_load_image_to_device (struct gomp_device_descr *devicep, unsigned version, num_target_entries = devicep->load_image_func (devicep->target_id, version, - target_data, &target_table); + target_data, &target_table, NULL); if (num_target_entries != num_funcs + num_vars /* "+1" due to the additional ICV struct. */ |