Add libgomp.oacc-fortran/lib-16-2.f90
[gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / lib-16-2.f90
1 ! See also "lib-16.f90".
2 ! { dg-do run }
3 ! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
4
5 program main
6 implicit none
7 include "openacc_lib.h"
8
9 integer, parameter :: N = 256
10 integer, allocatable :: h(:)
11 integer :: i
12 integer :: async = 5
13
14 allocate (h(N))
15
16 do i = 1, N
17 h(i) = i
18 end do
19
20 call acc_copyin (h)
21
22 do i = 1, N
23 h(i) = i + i
24 end do
25
26 call acc_update_device_async (h, sizeof (h), async)
27
28 if (acc_is_present (h) .neqv. .TRUE.) call abort
29
30 h(:) = 0
31
32 call acc_copyout_async (h, sizeof (h), async)
33
34 call acc_wait (async)
35
36 do i = 1, N
37 if (h(i) /= i + i) call abort
38 end do
39
40 call acc_copyin (h, sizeof (h))
41
42 h(:) = 0
43
44 call acc_update_self_async (h, sizeof (h), async)
45
46 if (acc_is_present (h) .neqv. .TRUE.) call abort
47
48 do i = 1, N
49 if (h(i) /= i + i) call abort
50 end do
51
52 call acc_delete_async (h, async)
53
54 call acc_wait (async)
55
56 if (acc_is_present (h) .neqv. .FALSE.) call abort
57
58 end program