| !Offloading test for AUTOMAP modifier in declare target enter |
| ! REQUIRES: flang, amdgpu |
| |
| ! FIXME: https://github.com/llvm/llvm-project/issues/161265 |
| ! XFAIL: amdgpu |
| |
| ! RUN: %libomptarget-compile-fortran-run-and-check-generic |
| program automap_program |
| use iso_c_binding, only: c_loc |
| use omp_lib, only: omp_get_default_device, omp_target_is_present |
| integer, parameter :: N = 10 |
| integer :: i |
| integer, allocatable, target :: automap_array(:) |
| !$omp declare target enter(automap:automap_array) |
| |
| ! false since the storage is not present even though the descriptor is present |
| write (*, *) omp_target_is_present(c_loc(automap_array), omp_get_default_device()) |
| ! CHECK: 0 |
| |
| allocate (automap_array(N)) |
| ! true since the storage should be allocated and reference count incremented by the allocate |
| write (*, *) omp_target_is_present(c_loc(automap_array), omp_get_default_device()) |
| ! CHECK: 1 |
| |
| ! since storage is present this should not be a runtime error |
| !$omp target teams loop |
| do i = 1, N |
| automap_array(i) = i |
| end do |
| |
| !$omp target update from(automap_array) |
| write (*, *) automap_array |
| ! CHECK: 1 2 3 4 5 6 7 8 9 10 |
| |
| deallocate (automap_array) |
| |
| ! automap_array should have it's storage unmapped on device here |
| write (*, *) omp_target_is_present(c_loc(automap_array), omp_get_default_device()) |
| ! CHECK: 0 |
| end program |