PR c++/86342 - -Wdeprecated-copy and system headers.
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / data-4-2.f90
blob6c6a24eaf80fd9a6b59a6dd5ac04ca18d2e27d56
1 ! Copy of data-4.f90 with self exchanged with host for !acc update, and with
2 ! default (present) clauses added.
4 ! { dg-do run }
6 program asyncwait
7 real, allocatable :: a(:), b(:), c(:), d(:), e(:)
8 integer i, N
10 N = 64
12 allocate (a(N))
13 allocate (b(N))
14 allocate (c(N))
15 allocate (d(N))
16 allocate (e(N))
18 a(:) = 3.0
19 b(:) = 0.0
21 !$acc enter data copyin (a(1:N)) copyin (b(1:N)) copyin (N) async
23 !$acc parallel default (present) async wait
24 !$acc loop
25 do i = 1, N
26 b(i) = a(i)
27 end do
28 !$acc end parallel
30 !$acc update self (a(1:N), b(1:N)) async wait
31 !$acc wait
33 do i = 1, N
34 if (a(i) .ne. 3.0) STOP 1
35 if (b(i) .ne. 3.0) STOP 2
36 end do
38 a(:) = 2.0
39 b(:) = 0.0
41 !$acc update device (a(1:N), b(1:N)) async (1)
43 !$acc parallel default (present) async (1) wait (1)
44 !$acc loop
45 do i = 1, N
46 b(i) = a(i)
47 end do
48 !$acc end parallel
50 !$acc update host (a(1:N), b(1:N)) async (1) wait (1)
51 !$acc wait (1)
53 do i = 1, N
54 if (a(i) .ne. 2.0) STOP 3
55 if (b(i) .ne. 2.0) STOP 4
56 end do
58 a(:) = 3.0
59 b(:) = 0.0
60 c(:) = 0.0
61 d(:) = 0.0
63 !$acc enter data copyin (c(1:N), d(1:N)) async (1)
64 !$acc update device (a(1:N), b(1:N)) async (1)
66 !$acc parallel default (present) async (1)
67 do i = 1, N
68 b(i) = (a(i) * a(i) * a(i)) / a(i)
69 end do
70 !$acc end parallel
72 !$acc parallel default (present) async (1)
73 do i = 1, N
74 c(i) = (a(i) * 4) / a(i)
75 end do
76 !$acc end parallel
78 !$acc parallel default (present) async (1)
79 do i = 1, N
80 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
81 end do
82 !$acc end parallel
84 !$acc update self (a(1:N), b(1:N), c(1:N), d(1:N)) async (1) wait (1)
86 !$acc wait (1)
88 do i = 1, N
89 if (a(i) .ne. 3.0) STOP 5
90 if (b(i) .ne. 9.0) STOP 6
91 if (c(i) .ne. 4.0) STOP 7
92 if (d(i) .ne. 1.0) STOP 8
93 end do
95 a(:) = 2.0
96 b(:) = 0.0
97 c(:) = 0.0
98 d(:) = 0.0
99 e(:) = 0.0
101 !$acc enter data copyin (e(1:N)) async (1)
102 !$acc update device (a(1:N), b(1:N), c(1:N), d(1:N)) async (1)
104 !$acc parallel default (present) async (1)
105 do i = 1, N
106 b(i) = (a(i) * a(i) * a(i)) / a(i)
107 end do
108 !$acc end parallel
110 !$acc parallel default (present) async (1)
111 do i = 1, N
112 c(i) = (a(i) * 4) / a(i)
113 end do
114 !$acc end parallel
116 !$acc parallel default (present) async (1)
117 do i = 1, N
118 d(i) = ((a(i) * a(i) + a(i)) / a(i)) - a(i)
119 end do
120 !$acc end parallel
122 !$acc parallel default (present) wait (1) async (1)
123 do i = 1, N
124 e(i) = a(i) + b(i) + c(i) + d(i)
125 end do
126 !$acc end parallel
128 !$acc update self (a(1:N), b(1:N), c(1:N), d(1:N), e(1:N)) async (1) wait (1)
129 !$acc wait (1)
130 !$acc exit data delete (N, a(1:N), b(1:N), c(1:N), d(1:N), e(1:N))
132 do i = 1, N
133 if (a(i) .ne. 2.0) STOP 9
134 if (b(i) .ne. 4.0) STOP 10
135 if (c(i) .ne. 4.0) STOP 11
136 if (d(i) .ne. 1.0) STOP 12
137 if (e(i) .ne. 11.0) STOP 13
138 end do
139 end program asyncwait