blob: 914d10d8144113592b2d35420fe763e590e0300f [file] [log] [blame]
! { dg-additional-options "-foffload-options=nvptx-none=-misa=sm_35" { target { offload_target_nvptx } } }
! Copying on-device allocated memory fails with cuMemcpyDtoHAsync error: invalid argument
! Hence, reverse-offload-5.f90 has been copied to *this* file,
! which uses on-host allocated vars - but only on the device side stack variables
implicit none
!$omp requires reverse_offload
integer, allocatable :: A(:), A2(:), s1, s2
integer :: i,D(4)
logical :: shared_mem
shared_mem = .false.
a = [1,2,3,4]
a2 = [8,7,6,5]
s1 = 532
s2 = 55
!$omp target map(to: shared_mem)
shared_mem = .true.
!$omp end target
!$omp target map(to: A, A2, s1, s2)
block
! stack variables:
integer :: ai(4), ai2(4), si1, si2
a = a * 2
a2 = a2 * 3
s1 = s1 * 4
s2 = s2 * 5
ai = [23,35,86,43]
ai2 = [8,4,7,1]
si1 = 64
si2 = 765
!$omp target device (ancestor:1) &
!$omp& map(to: A, s1, ai, si1) map(always, to: a2, s2) &
!$omp& map(tofrom: ai2, si2)
if (shared_mem) then
if (any (a /= 2 * [1,2,3,4])) stop 1
if (s1 /= 4 * 532) stop 2
else
if (any (a /= [1,2,3,4])) stop 3
if (s1 /= 532) stop 4
endif
if (any (a2 /= 3 * [8,7,6,5])) stop 5
if (s2 /= 5 * 55) stop 6
if (any (ai /= [23,35,86,43])) stop 7
if (any (ai2 /= [8,4,7,1])) stop 8
if (si1 /= 64) stop 9
if (si2 /= 765) stop 10
a = a*3
a2 = a2*7
s1 = s1*11
s2 = s2*5
ai = ai*13
ai2 = ai2*21
si1 = si1*27
si2 = si2*31
!$omp end target
if (shared_mem) then
if (any (a /= 3 * 2 * [1,2,3,4])) stop 11
if (any (a2 /= 7 * 3 * [8,7,6,5])) stop 12
if (s1 /= 11 * 4 * 532) stop 13
if (s2 /= 5 * 5 * 55) stop 14
if (any (ai /= 13 * [23,35,86,43])) stop 15
if (si1 /= 27 * 64) stop 16
else
if (any (a /= 2 * [1,2,3,4])) stop 17
if (any (a2 /= 3 * [8,7,6,5])) stop 18
if (s1 /= 4 * 532) stop 19
if (s2 /= 5 * 55) stop 20
if (any (ai /= [23,35,86,43])) stop 22
if (si1 /= 64) stop 23
endif
if (any (ai2 /= 21 * [8,4,7,1])) stop 24
if (si2 /= 31 * 765) stop 25
end block
if (shared_mem) then
if (any (a /= 3 * 2 * [1,2,3,4])) stop 30
if (any (a2 /= 7 * 3 * [8,7,6,5])) stop 31
if (s1 /= 11 * 4 * 532) stop 32
if (s2 /= 5 * 5 * 55) stop 33
else
if (any (a /= 3 * [1,2,3,4])) stop 34
if (any (a2 /= 3 * 7 * [8,7,6,5])) stop 35
if (s1 /= 11 * 532) stop 36
if (s2 /= 5 * 5 * 55) stop 37
endif
deallocate (a, a2, s1, s2)
end