Joseph Huber c722ef4874
[OpenMP] Remove testing LTO variant on CPU targets (#175187)
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.
2026-01-09 10:13:44 -06:00

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