mirror of
https://github.com/intel/llvm.git
synced 2026-01-23 07:58:23 +08:00
This patch adds support to emit default declare mappers for implicit mapping of derived types when not supplied by user. This especially helps tackle mapping of allocatables of derived types.
66 lines
1.4 KiB
Fortran
66 lines
1.4 KiB
Fortran
! REQUIRES: flang, amdgpu
|
|
|
|
! RUN: %libomptarget-compile-fortran-generic
|
|
! RUN: %libomptarget-run-generic 2>&1 | %fcheck-generic
|
|
|
|
module enter_exit_mapper_mod
|
|
implicit none
|
|
|
|
type :: field_type
|
|
real, allocatable :: values(:)
|
|
end type field_type
|
|
|
|
type :: tile_type
|
|
type(field_type) :: field
|
|
integer, allocatable :: neighbors(:)
|
|
end type tile_type
|
|
|
|
contains
|
|
subroutine init_tile(tile)
|
|
type(tile_type), intent(inout) :: tile
|
|
integer :: j
|
|
|
|
allocate(tile%field%values(4))
|
|
allocate(tile%neighbors(4))
|
|
do j = 1, 4
|
|
tile%field%values(j) = 10.0 * j
|
|
tile%neighbors(j) = j
|
|
end do
|
|
end subroutine init_tile
|
|
|
|
end module enter_exit_mapper_mod
|
|
|
|
program implicit_enter_exit
|
|
use enter_exit_mapper_mod
|
|
implicit none
|
|
integer :: j
|
|
type(tile_type) :: tile
|
|
|
|
call init_tile(tile)
|
|
|
|
!$omp target enter data map(alloc: tile%field%values)
|
|
|
|
!$omp target
|
|
do j = 1, size(tile%field%values)
|
|
tile%field%values(j) = 5.0 * j
|
|
end do
|
|
!$omp end target
|
|
|
|
!$omp target exit data map(from: tile%field%values)
|
|
|
|
do j = 1, size(tile%field%values)
|
|
if (tile%field%values(j) /= 5.0 * j) then
|
|
print *, "======= Test Failed! ======="
|
|
stop 1
|
|
end if
|
|
if (tile%neighbors(j) /= j) then
|
|
print *, "======= Test Failed! ======="
|
|
stop 1
|
|
end if
|
|
end do
|
|
|
|
print *, "======= Test Passed! ======="
|
|
end program implicit_enter_exit
|
|
|
|
! CHECK: ======= Test Passed! =======
|