! Offloading test checking the use of the depend clause on the target construct ! REQUIRES: flang, amdgcn-amd-amdhsa ! UNSUPPORTED: nvptx64-nvidia-cuda ! UNSUPPORTED: nvptx64-nvidia-cuda-LTO ! UNSUPPORTED: aarch64-unknown-linux-gnu ! UNSUPPORTED: aarch64-unknown-linux-gnu-LTO ! UNSUPPORTED: x86_64-unknown-linux-gnu ! UNSUPPORTED: x86_64-unknown-linux-gnu-LTO ! RUN: %libomptarget-compile-fortran-run-and-check-generic subroutine defaultmap_allocatable_present() implicit none integer, dimension(:), allocatable :: arr integer :: N = 16 integer :: i allocate(arr(N)) !$omp target enter data map(to: arr) !$omp target defaultmap(present: allocatable) do i = 1,N arr(i) = N + 40 end do !$omp end target !$omp target exit data map(from: arr) print *, arr deallocate(arr) return end subroutine subroutine defaultmap_scalar_tofrom() implicit none integer :: scalar_int scalar_int = 10 !$omp target defaultmap(tofrom: scalar) scalar_int = 20 !$omp end target print *, scalar_int return end subroutine subroutine defaultmap_all_default() implicit none integer, dimension(:), allocatable :: arr integer :: aggregate(16) integer :: N = 16 integer :: i, scalar_int allocate(arr(N)) scalar_int = 10 aggregate = scalar_int !$omp target defaultmap(default: all) scalar_int = 20 do i = 1,N arr(i) = scalar_int + aggregate(i) end do !$omp end target print *, scalar_int print *, arr deallocate(arr) return end subroutine subroutine defaultmap_pointer_to() implicit none integer, dimension(:), pointer :: arr_ptr(:) integer :: scalar_int, i allocate(arr_ptr(10)) arr_ptr = 10 scalar_int = 20 !$omp target defaultmap(to: pointer) do i = 1,10 arr_ptr(i) = scalar_int + 20 end do !$omp end target print *, arr_ptr deallocate(arr_ptr) return end subroutine subroutine defaultmap_scalar_from() implicit none integer :: scalar_test scalar_test = 10 !$omp target defaultmap(from: scalar) scalar_test = 20 !$omp end target print *, scalar_test return end subroutine subroutine defaultmap_aggregate_to() implicit none integer :: aggregate_arr(16) integer :: i, scalar_test = 0 aggregate_arr = 0 !$omp target map(tofrom: scalar_test) defaultmap(to: aggregate) do i = 1,16 aggregate_arr(i) = i scalar_test = scalar_test + aggregate_arr(i) enddo !$omp end target print *, scalar_test print *, aggregate_arr return end subroutine subroutine defaultmap_dtype_aggregate_to() implicit none type :: dtype real(4) :: i real(4) :: j integer(4) :: array_i(10) integer(4) :: k integer(4) :: array_j(10) end type dtype type(dtype) :: aggregate_type aggregate_type%k = 20 aggregate_type%array_i = 30 !$omp target defaultmap(to: aggregate) aggregate_type%k = 40 aggregate_type%array_i(1) = 50 !$omp end target print *, aggregate_type%k print *, aggregate_type%array_i(1) return end subroutine program map_present implicit none ! CHECK: 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 56 call defaultmap_allocatable_present() ! CHECK: 20 call defaultmap_scalar_tofrom() ! CHECK: 10 ! CHECK: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 call defaultmap_all_default() ! CHECK: 10 10 10 10 10 10 10 10 10 10 call defaultmap_pointer_to() ! CHECK: 20 call defaultmap_scalar_from() ! CHECK: 136 ! CHECK: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 call defaultmap_aggregate_to() ! CHECK: 20 ! CHECK: 30 call defaultmap_dtype_aggregate_to() end program