| ! 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! ======= |