Daily bump.
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-fortran / update-1.f90
blob4e1d2c012786baf2ee101dd21b84578ab8be2fa5
1 ! { dg-do run }
2 ! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } }
4 program update
5 use openacc
6 implicit none
7 integer, parameter :: N = 8
8 integer, parameter :: NDIV2 = N / 2
9 real :: a(N), b(N)
10 integer i
12 do i = 1, N
13 a(i) = 3.0
14 b(i) = 0.0
15 end do
17 !$acc enter data copyin (a, b)
19 !$acc parallel present (a, b)
20 do i = 1, N
21 b(i) = a(i)
22 end do
23 !$acc end parallel
25 !$acc update host (a, b)
27 do i = 1, N
28 if (a(i) .ne. 3.0) call abort
29 if (b(i) .ne. 3.0) call abort
30 end do
32 if (acc_is_present (a) .neqv. .TRUE.) call abort
33 if (acc_is_present (b) .neqv. .TRUE.) call abort
35 do i = 1, N
36 a(i) = 5.0
37 b(i) = 1.0
38 end do
40 !$acc update device (a, b)
42 !$acc parallel present (a, b)
43 do i = 1, N
44 b(i) = a(i)
45 end do
46 !$acc end parallel
48 !$acc update host (a, b)
50 do i = 1, N
51 if (a(i) .ne. 5.0) call abort
52 if (b(i) .ne. 5.0) call abort
53 end do
55 if (acc_is_present (a) .neqv. .TRUE.) call abort
56 if (acc_is_present (b) .neqv. .TRUE.) call abort
58 !$acc parallel present (a, b)
59 do i = 1, N
60 b(i) = a(i)
61 end do
62 !$acc end parallel
64 !$acc update host (a, b)
66 do i = 1, N
67 if (a(i) .ne. 5.0) call abort
68 if (b(i) .ne. 5.0) call abort
69 end do
71 if (acc_is_present (a) .neqv. .TRUE.) call abort
72 if (acc_is_present (b) .neqv. .TRUE.) call abort
74 do i = 1, N
75 a(i) = 6.0
76 b(i) = 0.0
77 end do
79 !$acc update device (a, b)
81 do i = 1, N
82 a(i) = 9.0
83 end do
85 !$acc parallel present (a, b)
86 do i = 1, N
87 b(i) = a(i)
88 end do
89 !$acc end parallel
91 !$acc update host (a, b)
93 do i = 1, N
94 if (a(i) .ne. 6.0) call abort
95 if (b(i) .ne. 6.0) call abort
96 end do
98 if (acc_is_present (a) .neqv. .TRUE.) call abort
99 if (acc_is_present (b) .neqv. .TRUE.) call abort
101 do i = 1, N
102 a(i) = 7.0
103 b(i) = 2.0
104 end do
106 !$acc update device (a, b)
108 do i = 1, N
109 a(i) = 9.0
110 end do
112 !$acc parallel present (a, b)
113 do i = 1, N
114 b(i) = a(i)
115 end do
116 !$acc end parallel
118 !$acc update host (a, b)
120 do i = 1, N
121 if (a(i) .ne. 7.0) call abort
122 if (b(i) .ne. 7.0) call abort
123 end do
125 do i = 1, N
126 a(i) = 9.0
127 end do
129 !$acc update device (a)
131 !$acc parallel present (a, b)
132 do i = 1, N
133 b(i) = a(i)
134 end do
135 !$acc end parallel
137 !$acc update host (a, b)
139 do i = 1, N
140 if (a(i) .ne. 9.0) call abort
141 if (b(i) .ne. 9.0) call abort
142 end do
144 if (acc_is_present (a) .neqv. .TRUE.) call abort
145 if (acc_is_present (b) .neqv. .TRUE.) call abort
147 do i = 1, N
148 a(i) = 5.0
149 end do
151 !$acc update device (a)
153 do i = 1, N
154 a(i) = 6.0
155 end do
157 !$acc update device (a(1:NDIV2))
159 !$acc parallel present (a, b)
160 do i = 1, N
161 b(i) = a(i)
162 end do
163 !$acc end parallel
165 !$acc update host (a, b)
167 do i = 1, NDIV2
168 if (a(i) .ne. 6.0) call abort
169 if (b(i) .ne. 6.0) call abort
170 end do
172 do i = NDIV2 + 1, N
173 if (a(i) .ne. 5.0) call abort
174 if (b(i) .ne. 5.0) call abort
175 end do
177 if (acc_is_present (a) .neqv. .TRUE.) call abort
178 if (acc_is_present (b) .neqv. .TRUE.) call abort
180 do i = 1, N
181 a(i) = 0.0
182 end do
184 !$acc update device (a(1:4))
186 !$acc parallel present (a)
187 do i = 1, N
188 a(i) = a(i) + 1.0
189 end do
190 !$acc end parallel
192 !$acc update host (a(5:N))
194 do i = 1, NDIV2
195 if (a(i) .ne. 0.0) call abort
196 end do
198 do i = NDIV2 + 1, N
199 if (a(i) .ne. 6.0) call abort
200 end do
202 !$acc update host (a(1:4))
204 do i = 1, NDIV2
205 if (a(i) .ne. 1.0) call abort
206 end do
208 do i = NDIV2 + 1, N
209 if (a(i) .ne. 6.0) call abort
210 end do
212 a(3) = 9
213 a(4) = 9
214 a(5) = 9
215 a(6) = 9
217 !$acc update device (a(3:6))
219 !$acc parallel present (a(1:N))
220 do i = 1, N
221 a(i) = a(i) + 1.0
222 end do
223 !$acc end parallel
225 !$acc update host (a(3:6))
227 do i = 1, 2
228 if (a(i) .ne. 1.0) call abort
229 end do
231 do i = 3, 6
232 if (a(i) .ne. 10.0) call abort
233 end do
235 do i = 7, N
236 if (a(i) .ne. 6.0) call abort
237 end do
239 !$acc exit data delete (a, b)
241 end program