| ! REQUIRES: flang, amdgpu | |
| ! RUN: %libomptarget-compile-fortran-generic | |
| ! RUN: env LIBOMPTARGET_INFO=16 %libomptarget-run-generic 2>&1 | %fcheck-generic | |
| module test | |
| implicit none | |
| TYPE field_type | |
| REAL, DIMENSION(:,:), ALLOCATABLE :: density0, density1 | |
| END TYPE field_type | |
| TYPE tile_type | |
| TYPE(field_type) :: field | |
| INTEGER :: tile_neighbours(4) | |
| END TYPE tile_type | |
| TYPE chunk_type | |
| INTEGER :: filler | |
| TYPE(tile_type), DIMENSION(:), ALLOCATABLE :: tiles | |
| END TYPE chunk_type | |
| end module test | |
| program reproducer | |
| use test | |
| implicit none | |
| integer :: i, j | |
| TYPE(chunk_type) :: chunk | |
| allocate(chunk%tiles(2)) | |
| do i = 1, 2 | |
| allocate(chunk%tiles(i)%field%density0(2, 2)) | |
| allocate(chunk%tiles(i)%field%density1(2, 2)) | |
| do j = 1, 4 | |
| chunk%tiles(i)%tile_neighbours(j) = j * 10 | |
| end do | |
| end do | |
| !$omp target enter data map(alloc: & | |
| !$omp chunk%tiles(2)%field%density0) | |
| !$omp target | |
| chunk%tiles(2)%field%density0(1,1) = 25 | |
| chunk%tiles(2)%field%density0(1,2) = 50 | |
| chunk%tiles(2)%field%density0(2,1) = 75 | |
| chunk%tiles(2)%field%density0(2,2) = 100 | |
| !$omp end target | |
| !$omp target exit data map(from: & | |
| !$omp chunk%tiles(2)%field%density0) | |
| if (chunk%tiles(2)%field%density0(1,1) /= 25) then | |
| print*, "======= Test Failed! =======" | |
| stop 1 | |
| end if | |
| if (chunk%tiles(2)%field%density0(1,2) /= 50) then | |
| print*, "======= Test Failed! =======" | |
| stop 1 | |
| end if | |
| if (chunk%tiles(2)%field%density0(2,1) /= 75) then | |
| print*, "======= Test Failed! =======" | |
| stop 1 | |
| end if | |
| if (chunk%tiles(2)%field%density0(2,2) /= 100) then | |
| print*, "======= Test Failed! =======" | |
| stop 1 | |
| end if | |
| do j = 1, 4 | |
| if (chunk%tiles(2)%tile_neighbours(j) /= j * 10) then | |
| print*, "======= Test Failed! =======" | |
| stop 1 | |
| end if | |
| end do | |
| print *, "======= Test Passed! =======" | |
| end program reproducer | |
| ! CHECK: PluginInterface device {{[0-9]+}} info: Launching kernel {{.*}} | |
| ! CHECK: ======= Test Passed! ======= |