1! Exercise the data movement runtime library functions on non-shared memory
2! targets.
3
4! { dg-do run { target openacc_nvidia_accel_selected } }
5
6program main
7  use openacc
8  implicit none
9
10  integer, parameter :: N = 256
11  integer, allocatable :: h(:)
12  integer :: i
13
14  allocate (h(N))
15
16  do i = 1, N
17    h(i) = i
18  end do
19
20  call acc_present_or_copyin (h)
21
22  if (acc_is_present (h) .neqv. .TRUE.) stop 1
23
24  call acc_copyout (h)
25
26  if (acc_is_present (h) .neqv. .FALSE.) stop 1
27
28  do i = 1, N
29    if (h(i) /= i) stop 1
30  end do
31
32  do i = 1, N
33    h(i) = i + i
34  end do
35
36  call acc_pcopyin (h, sizeof (h))
37
38  if (acc_is_present (h) .neqv. .TRUE.) stop 1
39
40  call acc_copyout (h)
41
42  if (acc_is_present (h) .neqv. .FALSE.) stop 1
43
44  do i = 1, N
45    if (h(i) /= i + i) stop 1
46  end do
47
48  call acc_create (h)
49
50  if (acc_is_present (h) .neqv. .TRUE.) stop 1
51
52  !$acc parallel loop
53    do i = 1, N
54      h(i) = i
55    end do
56  !$end acc parallel
57
58  call acc_copyout (h)
59
60  if (acc_is_present (h) .neqv. .FALSE.) stop 1
61
62  do i = 1, N
63    if (h(i) /= i) stop 1
64  end do
65
66  call acc_present_or_create (h, sizeof (h))
67
68  if (acc_is_present (h) .neqv. .TRUE.) stop 1
69
70  call acc_delete (h)
71
72  if (acc_is_present (h) .neqv. .FALSE.) stop 1
73
74  call acc_pcreate (h)
75
76  if (acc_is_present (h) .neqv. .TRUE.) stop 1
77
78  call acc_delete (h)
79
80  if (acc_is_present (h) .neqv. .FALSE.) stop 1
81
82end program
83