gcc/libgomp/testsuite/libgomp.oacc-fortran/dynamic-incr-structural-1.f90

50 lines
1.1 KiB
Fortran
Raw Normal View History

openacc: Adjust dynamic reference count semantics This patch adjusts how dynamic reference counts work so that they match the semantics of the source program more closely, instead of representing "excess" reference counts beyond those that represent pointers in the internal libgomp splay-tree data structure. This allows some corner cases to be handled more gracefully. 2020-07-10 Julian Brown <julian@codesourcery.com> Thomas Schwinge <thomas@codesourcery.com> libgomp/ * libgomp.h (struct splay_tree_key_s): Change virtual_refcount to dynamic_refcount. (struct gomp_device_descr): Remove GOMP_MAP_VARS_OPENACC_ENTER_DATA. * oacc-mem.c (acc_map_data): Substitute virtual_refcount for dynamic_refcount. (acc_unmap_data): Update comment. (goacc_map_var_existing, goacc_enter_datum): Adjust for dynamic_refcount semantics. (goacc_exit_datum_1, goacc_exit_datum): Re-add some error checking. Adjust for dynamic_refcount semantics. (goacc_enter_data_internal): Implement "present" case of dynamic memory-map handling here. Update "non-present" case for dynamic_refcount semantics. (goacc_exit_data_internal): Use goacc_exit_datum_1. * target.c (gomp_map_vars_internal): Remove GOMP_MAP_VARS_OPENACC_ENTER_DATA handling. Update for dynamic_refcount handling. (gomp_unmap_vars_internal): Remove virtual_refcount handling. (gomp_load_image_to_device): Substitute dynamic_refcount for virtual_refcount. * testsuite/libgomp.oacc-c-c++-common/pr92843-1.c: Remove XFAILs. * testsuite/libgomp.oacc-c-c++-common/refcounting-1.c: New test. * testsuite/libgomp.oacc-c-c++-common/refcounting-2.c: New test. * testsuite/libgomp.oacc-c-c++-common/struct-3-1-1.c: New test. * testsuite/libgomp.oacc-fortran/deep-copy-6.f90: Remove XFAILs and trace output. * testsuite/libgomp.oacc-fortran/deep-copy-6-no_finalize.F90: Remove trace output. * testsuite/libgomp.oacc-fortran/dynamic-incr-structural-1.f90: New test. * testsuite/libgomp.oacc-c-c++-common/structured-dynamic-lifetimes-4.c: Remove stale comment. * testsuite/libgomp.oacc-fortran/mdc-refcount-1-1-1.f90: Remove XFAILs. * testsuite/libgomp.oacc-fortran/mdc-refcount-1-1-2.F90: Likewise. * testsuite/libgomp.oacc-fortran/mdc-refcount-1-2-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/mdc-refcount-1-2-2.f90: Likewise. * testsuite/libgomp.oacc-fortran/mdc-refcount-1-3-1.f90: Likewise. * testsuite/libgomp.oacc-fortran/mdc-refcount-1-4-1.f90: Adjust XFAIL. Co-Authored-By: Thomas Schwinge <thomas@codesourcery.com>
2020-05-22 13:06:10 +02:00
! { dg-do run }
! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
program map_multi
use openacc
implicit none
integer, parameter :: n = 512
integer, allocatable :: a(:), b(:), c(:)
allocate(a(1:n))
allocate(b(1:n))
allocate(c(1:n))
!$acc data copy(a, b, c)
! These arrays have descriptors, so use multiple mappings. Make sure those
! are matched up properly with the mappings in the enclosing data region.
!$acc enter data copyin(a)
!$acc enter data copyin(b)
!$acc enter data copyin(c)
!$acc end data
if (.not.acc_is_present (a)) stop 1
if (.not.acc_is_present (b)) stop 2
if (.not.acc_is_present (c)) stop 3
!$acc exit data delete(a)
if (acc_is_present (a)) stop 4
if (.not.acc_is_present (b)) stop 5
if (.not.acc_is_present (c)) stop 6
!$acc exit data delete(b)
if (acc_is_present (a)) stop 7
if (acc_is_present (b)) stop 8
if (.not.acc_is_present (c)) stop 9
!$acc exit data delete(c)
if (acc_is_present (a)) stop 10
if (acc_is_present (b)) stop 11
if (acc_is_present (c)) stop 12
deallocate(a)
deallocate(b)
deallocate(c)
end program map_multi