84 lines · plain
1! REQUIRES: flang, amdgpu2 3! RUN: %libomptarget-compile-fortran-generic4! RUN: env LIBOMPTARGET_INFO=16 %libomptarget-run-generic 2>&1 | %fcheck-generic5module test6implicit none7 8TYPE field_type9 REAL, DIMENSION(:,:), ALLOCATABLE :: density0, density110END TYPE field_type11 12TYPE tile_type13 TYPE(field_type) :: field14 INTEGER :: tile_neighbours(4)15END TYPE tile_type16 17TYPE chunk_type18 INTEGER :: filler19 TYPE(tile_type), DIMENSION(:), ALLOCATABLE :: tiles20END TYPE chunk_type21 22end module test23 24program reproducer25 use test26 implicit none27 integer :: i, j28 TYPE(chunk_type) :: chunk29 30 allocate(chunk%tiles(2))31 do i = 1, 232 allocate(chunk%tiles(i)%field%density0(2, 2))33 allocate(chunk%tiles(i)%field%density1(2, 2))34 do j = 1, 435 chunk%tiles(i)%tile_neighbours(j) = j * 1036 end do37 end do38 39 !$omp target enter data map(alloc: &40 !$omp chunk%tiles(2)%field%density0)41 42 !$omp target43 chunk%tiles(2)%field%density0(1,1) = 2544 chunk%tiles(2)%field%density0(1,2) = 5045 chunk%tiles(2)%field%density0(2,1) = 7546 chunk%tiles(2)%field%density0(2,2) = 10047 !$omp end target48 49 !$omp target exit data map(from: &50 !$omp chunk%tiles(2)%field%density0)51 52 if (chunk%tiles(2)%field%density0(1,1) /= 25) then53 print*, "======= Test Failed! ======="54 stop 155 end if56 57 if (chunk%tiles(2)%field%density0(1,2) /= 50) then58 print*, "======= Test Failed! ======="59 stop 160 end if61 62 if (chunk%tiles(2)%field%density0(2,1) /= 75) then63 print*, "======= Test Failed! ======="64 stop 165 end if66 67 if (chunk%tiles(2)%field%density0(2,2) /= 100) then68 print*, "======= Test Failed! ======="69 stop 170 end if71 72 do j = 1, 473 if (chunk%tiles(2)%tile_neighbours(j) /= j * 10) then74 print*, "======= Test Failed! ======="75 stop 176 end if77 end do78 79 print *, "======= Test Passed! ======="80end program reproducer81 82! CHECK: "PluginInterface" device {{[0-9]+}} info: Launching kernel {{.*}}83! CHECK: ======= Test Passed! =======84