PR c++/86342 - -Wdeprecated-copy and system headers.
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / data-3.f90
blob19eb4bd6a4501f81145b890e2ad6a916d6c7e00a
1 ! { dg-do run }
3 program asyncwait
4 real, allocatable :: a(:), b(:), c(:), d(:), e(:)
5 integer i, N
7 N = 64
9 allocate (a(N))
10 allocate (b(N))
11 allocate (c(N))
12 allocate (d(N))
13 allocate (e(N))
15 a(:) = 3.0
16 b(:) = 0.0
18 !$acc enter data copyin (a(1:N)) copyin (b(1:N)) copyin (N) async
20 !$acc parallel async wait
21 do i = 1, N
22 b(i) = a(i)
23 end do
24 !$acc end parallel
26 !$acc wait
27 !$acc exit data copyout (a(1:N)) copyout (b(1:N))
29 do i = 1, N
30 if (a(i) .ne. 3.0) STOP 1
31 if (b(i) .ne. 3.0) STOP 2
32 end do
34 a(:) = 2.0
35 b(:) = 0.0
37 !$acc enter data copyin (a(1:N)) copyin (b(1:N)) async (1)
39 !$acc parallel async (1) wait (1)
40 do i = 1, N
41 b(i) = a(i)
42 end do
43 !$acc end parallel
45 !$acc wait (1)
46 !$acc exit data copyout (a(1:N)) copyout (b(1:N))
48 do i = 1, N
49 if (a(i) .ne. 2.0) STOP 3
50 if (b(i) .ne. 2.0) STOP 4
51 end do
53 a(:) = 3.0
54 b(:) = 0.0
55 c(:) = 0.0
56 d(:) = 0.0
58 !$acc enter data copyin (a(1:N)) create (b(1:N)) create (c(1:N)) create (d(1:N))
60 !$acc parallel async (1)
61 do i = 1, N
62 b(i) = (a(i) * a(i) * a(i)) / a(i)
63 end do
64 !$acc end parallel
66 !$acc parallel async (1)
67 do i = 1, N
68 c(i) = (a(i) * 4) / a(i)
69 end do
70 !$acc end parallel
72 !$acc parallel async (1)
73 do i = 1, N
74 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
75 end do
76 !$acc end parallel
78 !$acc wait (1)
79 !$acc exit data copyout (a(1:N)) copyout (b(1:N)) copyout (c(1:N)) copyout (d(1:N))
81 do i = 1, N
82 if (a(i) .ne. 3.0) STOP 5
83 if (b(i) .ne. 9.0) STOP 6
84 if (c(i) .ne. 4.0) STOP 7
85 if (d(i) .ne. 1.0) STOP 8
86 end do
88 a(:) = 2.0
89 b(:) = 0.0
90 c(:) = 0.0
91 d(:) = 0.0
92 e(:) = 0.0
94 !$acc enter data copyin (a(1:N)) create (b(1:N)) create (c(1:N)) create (d(1:N)) copyin (e(1:N))
96 !$acc parallel async (1)
97 do i = 1, N
98 b(i) = (a(i) * a(i) * a(i)) / a(i)
99 end do
100 !$acc end parallel
102 !$acc parallel async (1)
103 do i = 1, N
104 c(i) = (a(i) * 4) / a(i)
105 end do
106 !$acc end parallel
108 !$acc parallel async (1)
109 do i = 1, N
110 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
111 end do
112 !$acc end parallel
114 !$acc parallel wait (1) async (1)
115 do i = 1, N
116 e(i) = a(i) + b(i) + c(i) + d(i)
117 end do
118 !$acc end parallel
120 !$acc wait (1)
121 !$acc exit data copyout (a(1:N)) copyout (b(1:N)) copyout (c(1:N)) copyout (d(1:N)) copyout (e(1:N))
122 !$acc exit data delete (N)
124 do i = 1, N
125 if (a(i) .ne. 2.0) STOP 9
126 if (b(i) .ne. 4.0) STOP 10
127 if (c(i) .ne. 4.0) STOP 11
128 if (d(i) .ne. 1.0) STOP 12
129 if (e(i) .ne. 11.0) STOP 13
130 end do
131 end program asyncwait