re PR libgomp/92028 (OpenACC 'host_data' execution test regressions with nvptx offloading)
PR libgomp/92028 * target.c (gomp_map_vars_internal): Readd the previous GOMP_MAP_USE_DEVICE_PTR handling code in the first loop, though do that just in the !not_found_cnt case. From-SVN: r276753
This commit is contained in:
parent
f78347996e
commit
7d48e14fc6
|
@ -1,3 +1,10 @@
|
|||
2019-10-09 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR libgomp/92028
|
||||
* target.c (gomp_map_vars_internal): Readd the previous
|
||||
GOMP_MAP_USE_DEVICE_PTR handling code in the first loop,
|
||||
though do that just in the !not_found_cnt case.
|
||||
|
||||
2019-10-08 Tobias Burnus <tobias@codesourcery.com>
|
||||
|
||||
* gfortran.dg/gomp/target-simd.f90: New.
|
||||
|
|
|
@ -593,6 +593,30 @@ gomp_map_vars_internal (struct gomp_device_descr *devicep,
|
|||
tgt->list[i].key = NULL;
|
||||
if (!not_found_cnt)
|
||||
{
|
||||
/* In OpenMP < 5.0 and OpenACC the mapping has to be done
|
||||
on a separate construct prior to using use_device_{addr,ptr}.
|
||||
In OpenMP 5.0, map directives need to be ordered by the
|
||||
middle-end before the use_device_* clauses. If
|
||||
!not_found_cnt, all mappings requested (if any) are already
|
||||
mapped, so use_device_{addr,ptr} can be resolved right away.
|
||||
Otherwise, if not_found_cnt, gomp_map_lookup might fail
|
||||
now but would succeed after performing the mappings in the
|
||||
following loop. We can't defer this always to the second
|
||||
loop, because it is not even invoked when !not_found_cnt
|
||||
after the first loop. */
|
||||
cur_node.host_start = (uintptr_t) hostaddrs[i];
|
||||
cur_node.host_end = cur_node.host_start;
|
||||
splay_tree_key n = gomp_map_lookup (mem_map, &cur_node);
|
||||
if (n == NULL)
|
||||
{
|
||||
gomp_mutex_unlock (&devicep->lock);
|
||||
gomp_fatal ("use_device_ptr pointer wasn't mapped");
|
||||
}
|
||||
cur_node.host_start -= n->host_start;
|
||||
hostaddrs[i]
|
||||
= (void *) (n->tgt->tgt_start + n->tgt_offset
|
||||
+ cur_node.host_start);
|
||||
tgt->list[i].offset = ~(uintptr_t) 0;
|
||||
}
|
||||
else
|
||||
tgt->list[i].offset = 0;
|
||||
|
|
Loading…
Reference in New Issue