Summary: This is only really meaningful for the NVPTX target. Not all build environments support host LTO and these are redundant tests, just clean this up and make it run faster.
165 lines
3.6 KiB
Fortran
165 lines
3.6 KiB
Fortran
! 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: x86_64-unknown-linux-gnu
|
|
|
|
! 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
|