aboutsummaryrefslogtreecommitdiff
path: root/libgomp
diff options
context:
space:
mode:
authorJulian Brown <julian@codesourcery.com>2019-12-20 01:20:19 +0000
committerJulian Brown <jules@gcc.gnu.org>2019-12-20 01:20:19 +0000
commit5bcd470bf0749e1f56d05dd43aa9584ff2e3a090 (patch)
tree0ee2ecab91ac2cde55242703052242660832f5c6 /libgomp
parent378da98fcc907d05002bcd3d6ff7951f0cf485e5 (diff)
downloadgcc-5bcd470bf0749e1f56d05dd43aa9584ff2e3a090.zip
gcc-5bcd470bf0749e1f56d05dd43aa9584ff2e3a090.tar.gz
gcc-5bcd470bf0749e1f56d05dd43aa9584ff2e3a090.tar.bz2
Use gomp_map_val for OpenACC host-to-device address translation
libgomp/ * libgomp.h (gomp_map_val): Add prototype. * oacc-parallel.c (GOACC_parallel_keyed): Use gomp_map_val instead of open-coding device-address calculation. * target.c (gomp_map_val): Make global. Use OFFSET_POINTER in non-present case. Co-Authored-By: Cesar Philippidis <cesar@codesourcery.com> From-SVN: r279622
Diffstat (limited to 'libgomp')
-rw-r--r--libgomp/ChangeLog9
-rw-r--r--libgomp/libgomp.h1
-rw-r--r--libgomp/oacc-parallel.c8
-rw-r--r--libgomp/target.c4
4 files changed, 14 insertions, 8 deletions
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index c08d7b0..6c14621 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,4 +1,13 @@
2019-12-19 Julian Brown <julian@codesourcery.com>
+ Cesar Philippidis <cesar@codesourcery.com>
+
+ * libgomp.h (gomp_map_val): Add prototype.
+ * oacc-parallel.c (GOACC_parallel_keyed): Use gomp_map_val instead of
+ open-coding device-address calculation.
+ * target.c (gomp_map_val): Make global. Use OFFSET_POINTER in
+ non-present case.
+
+2019-12-19 Julian Brown <julian@codesourcery.com>
* libgomp.h (struct splay_tree_key_s): Substitute dynamic_refcount
field for virtual_refcount.
diff --git a/libgomp/libgomp.h b/libgomp/libgomp.h
index b9301bd..8139cd7 100644
--- a/libgomp/libgomp.h
+++ b/libgomp/libgomp.h
@@ -1157,6 +1157,7 @@ extern void gomp_copy_host2dev (struct gomp_device_descr *,
extern void gomp_copy_dev2host (struct gomp_device_descr *,
struct goacc_asyncqueue *, void *, const void *,
size_t);
+extern uintptr_t gomp_map_val (struct target_mem_desc *, void **, size_t);
extern struct target_mem_desc *gomp_map_vars (struct gomp_device_descr *,
size_t, void **, void **,
diff --git a/libgomp/oacc-parallel.c b/libgomp/oacc-parallel.c
index 5c13a7e..c853f01 100644
--- a/libgomp/oacc-parallel.c
+++ b/libgomp/oacc-parallel.c
@@ -303,12 +303,8 @@ GOACC_parallel_keyed (int flags_m, void (*fn) (void *),
devaddrs = gomp_alloca (sizeof (void *) * mapnum);
for (i = 0; i < mapnum; i++)
- if (tgt->list[i].key != NULL)
- devaddrs[i] = (void *) (tgt->list[i].key->tgt->tgt_start
- + tgt->list[i].key->tgt_offset
- + tgt->list[i].offset);
- else
- devaddrs[i] = NULL;
+ devaddrs[i] = (void *) gomp_map_val (tgt, hostaddrs, i);
+
if (aq == NULL)
acc_dev->openacc.exec_func (tgt_fn, mapnum, hostaddrs, devaddrs, dims,
tgt);
diff --git a/libgomp/target.c b/libgomp/target.c
index f2a6061..ef8e9ab 100644
--- a/libgomp/target.c
+++ b/libgomp/target.c
@@ -493,7 +493,7 @@ gomp_map_fields_existing (struct target_mem_desc *tgt,
(void *) cur_node.host_end);
}
-static inline uintptr_t
+attribute_hidden uintptr_t
gomp_map_val (struct target_mem_desc *tgt, void **hostaddrs, size_t i)
{
if (tgt->list[i].key != NULL)
@@ -713,7 +713,7 @@ gomp_map_vars_internal (struct gomp_device_descr *devicep,
{
/* Not present, hence, skip entry - including its MAP_POINTER,
when existing. */
- tgt->list[i].offset = 0;
+ tgt->list[i].offset = OFFSET_POINTER;
if (i + 1 < mapnum
&& ((typemask & get_kind (short_mapkind, kinds, i + 1))
== GOMP_MAP_POINTER))