1! PR middle-end/45423 - for the original C/C++ testcase
2! { dg-do compile }
3! { dg-options "-fopenmp -fdump-tree-gimple -g0 -Wno-deprecated" }
4! atomicvar should never be referenced in between the barrier and
5! following #pragma omp atomic_load.
6! { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } }
7
8module m
9  implicit none
10  logical :: atomicvar, c
11  integer :: i, atomicvar2, c2
12contains
13integer function foo ()
14  !$omp barrier
15  !$omp atomic
16    atomicvar = atomicvar .or. .true.
17  !$omp barrier
18  !$omp atomic
19    atomicvar = atomicvar .or. .false.
20  !$omp barrier
21  !$omp atomic
22    atomicvar = atomicvar .or. c
23  !$omp barrier
24  !$omp atomic
25    atomicvar = atomicvar .and. .true.
26  !$omp barrier
27  !$omp atomic
28    atomicvar = atomicvar .and. .false.
29  !$omp barrier
30  !$omp atomic
31    atomicvar = atomicvar .and. c
32  !$omp barrier
33  !$omp atomic
34    atomicvar = atomicvar .neqv. .true.
35  !$omp barrier
36  !$omp atomic
37    atomicvar = atomicvar .neqv. .false.
38  !$omp barrier
39  !$omp atomic
40    atomicvar = atomicvar .neqv. c
41  !$omp barrier
42  !$omp atomic
43    atomicvar = atomicvar .eqv. .true.
44  !$omp barrier
45  !$omp atomic
46    atomicvar = atomicvar .eqv. .false.
47  !$omp barrier
48  !$omp atomic
49    atomicvar = atomicvar .eqv. c
50  !$omp barrier
51  !$omp atomic
52    atomicvar = .true. .or. atomicvar
53  !$omp barrier
54  !$omp atomic
55    atomicvar = .false. .or. atomicvar
56  !$omp barrier
57  !$omp atomic
58    atomicvar = c .or. atomicvar
59  !$omp barrier
60  !$omp atomic
61    atomicvar = .true. .and. atomicvar
62  !$omp barrier
63  !$omp atomic
64    atomicvar = .false. .and. atomicvar
65  !$omp barrier
66  !$omp atomic
67    atomicvar = c .and. atomicvar
68  !$omp barrier
69  !$omp atomic
70    atomicvar = .true. .neqv. atomicvar
71  !$omp barrier
72  !$omp atomic
73    atomicvar = .false. .neqv. atomicvar
74  !$omp barrier
75  !$omp atomic
76    atomicvar = c .neqv. atomicvar
77  !$omp barrier
78  !$omp atomic
79    atomicvar = .true. .eqv. atomicvar
80  !$omp barrier
81  !$omp atomic
82    atomicvar = .false. .eqv. atomicvar
83  !$omp barrier
84  !$omp atomic
85    atomicvar = c .eqv. atomicvar
86  !$omp barrier
87  foo = 0
88end
89
90integer function bar ()
91  !$omp barrier
92  !$omp atomic
93    atomicvar2 = ior (atomicvar2, -1)
94  !$omp barrier
95  !$omp atomic
96    atomicvar2 = ior (atomicvar2, 0)
97  !$omp barrier
98  !$omp atomic
99    atomicvar2 = ior (atomicvar2, 1)
100  !$omp barrier
101  !$omp atomic
102    atomicvar2 = ior (atomicvar2, 2)
103  !$omp barrier
104  !$omp atomic
105    atomicvar2 = ior (atomicvar2, c2)
106  !$omp barrier
107  !$omp atomic
108    atomicvar2 = ior (-1, atomicvar2)
109  !$omp barrier
110  !$omp atomic
111    atomicvar2 = ior (0, atomicvar2)
112  !$omp barrier
113  !$omp atomic
114    atomicvar2 = ior (1, atomicvar2)
115  !$omp barrier
116  !$omp atomic
117    atomicvar2 = ior (2, atomicvar2)
118  !$omp barrier
119  !$omp atomic
120    atomicvar2 = ior (c2, atomicvar2)
121  !$omp barrier
122  !$omp atomic
123    atomicvar2 = ieor (atomicvar2, -1)
124  !$omp barrier
125  !$omp atomic
126    atomicvar2 = ieor (atomicvar2, 0)
127  !$omp barrier
128  !$omp atomic
129    atomicvar2 = ieor (atomicvar2, 1)
130  !$omp barrier
131  !$omp atomic
132    atomicvar2 = ieor (atomicvar2, 2)
133  !$omp barrier
134  !$omp atomic
135    atomicvar2 = ieor (atomicvar2, c2)
136  !$omp barrier
137  !$omp atomic
138    atomicvar2 = ieor (-1, atomicvar2)
139  !$omp barrier
140  !$omp atomic
141    atomicvar2 = ieor (0, atomicvar2)
142  !$omp barrier
143  !$omp atomic
144    atomicvar2 = ieor (1, atomicvar2)
145  !$omp barrier
146  !$omp atomic
147    atomicvar2 = ior (2, atomicvar2)
148  !$omp barrier
149  !$omp atomic
150    atomicvar2 = ior (c2, atomicvar2)
151  !$omp barrier
152  !$omp atomic
153    atomicvar2 = iand (atomicvar2, -1)
154  !$omp barrier
155  !$omp atomic
156    atomicvar2 = iand (atomicvar2, 0)
157  !$omp barrier
158  !$omp atomic
159    atomicvar2 = iand (atomicvar2, 1)
160  !$omp barrier
161  !$omp atomic
162    atomicvar2 = iand (atomicvar2, 2)
163  !$omp barrier
164  !$omp atomic
165    atomicvar2 = iand (atomicvar2, c2)
166  !$omp barrier
167  !$omp atomic
168    atomicvar2 = iand (-1, atomicvar2)
169  !$omp barrier
170  !$omp atomic
171    atomicvar2 = iand (0, atomicvar2)
172  !$omp barrier
173  !$omp atomic
174    atomicvar2 = iand (1, atomicvar2)
175  !$omp barrier
176  !$omp atomic
177    atomicvar2 = iand (2, atomicvar2)
178  !$omp barrier
179  !$omp atomic
180    atomicvar2 = iand (c2, atomicvar2)
181  !$omp barrier
182  !$omp atomic
183    atomicvar2 = min (atomicvar2, -1)
184  !$omp barrier
185  !$omp atomic
186    atomicvar2 = min (atomicvar2, 0)
187  !$omp barrier
188  !$omp atomic
189    atomicvar2 = min (atomicvar2, 1)
190  !$omp barrier
191  !$omp atomic
192    atomicvar2 = min (atomicvar2, 2)
193  !$omp barrier
194  !$omp atomic
195    atomicvar2 = min (atomicvar2, c2)
196  !$omp barrier
197  !$omp atomic
198    atomicvar2 = min (-1, atomicvar2)
199  !$omp barrier
200  !$omp atomic
201    atomicvar2 = min (0, atomicvar2)
202  !$omp barrier
203  !$omp atomic
204    atomicvar2 = min (1, atomicvar2)
205  !$omp barrier
206  !$omp atomic
207    atomicvar2 = min (2, atomicvar2)
208  !$omp barrier
209  !$omp atomic
210    atomicvar2 = min (c2, atomicvar2)
211  !$omp barrier
212  !$omp atomic
213    atomicvar2 = max (atomicvar2, -1)
214  !$omp barrier
215  !$omp atomic
216    atomicvar2 = max (atomicvar2, 0)
217  !$omp barrier
218  !$omp atomic
219    atomicvar2 = max (atomicvar2, 1)
220  !$omp barrier
221  !$omp atomic
222    atomicvar2 = max (atomicvar2, 2)
223  !$omp barrier
224  !$omp atomic
225    atomicvar2 = max (atomicvar2, c2)
226  !$omp barrier
227  !$omp atomic
228    atomicvar2 = max (-1, atomicvar2)
229  !$omp barrier
230  !$omp atomic
231    atomicvar2 = max (0, atomicvar2)
232  !$omp barrier
233  !$omp atomic
234    atomicvar2 = max (1, atomicvar2)
235  !$omp barrier
236  !$omp atomic
237    atomicvar2 = max (2, atomicvar2)
238  !$omp barrier
239  !$omp atomic
240    atomicvar2 = max (c2, atomicvar2)
241  !$omp barrier
242  !$omp atomic
243    atomicvar2 = atomicvar2 + (-1)
244  !$omp barrier
245  !$omp atomic
246    atomicvar2 = atomicvar2 + 0
247  !$omp barrier
248  !$omp atomic
249    atomicvar2 = atomicvar2 + 1
250  !$omp barrier
251  !$omp atomic
252    atomicvar2 = atomicvar2 + 2
253  !$omp barrier
254  !$omp atomic
255    atomicvar2 = atomicvar2 + c2
256  !$omp barrier
257  !$omp atomic
258    atomicvar2 = -1 + atomicvar2
259  !$omp barrier
260  !$omp atomic
261    atomicvar2 = 0 + atomicvar2
262  !$omp barrier
263  !$omp atomic
264    atomicvar2 = 1 + atomicvar2
265  !$omp barrier
266  !$omp atomic
267    atomicvar2 = 2 + atomicvar2
268  !$omp barrier
269  !$omp atomic
270    atomicvar2 = c2 + atomicvar2
271  !$omp barrier
272  !$omp atomic
273    atomicvar2 = atomicvar2 - (-1)
274  !$omp barrier
275  !$omp atomic
276    atomicvar2 = atomicvar2 - 0
277  !$omp barrier
278  !$omp atomic
279    atomicvar2 = atomicvar2 - 1
280  !$omp barrier
281  !$omp atomic
282    atomicvar2 = atomicvar2 - 2
283  !$omp barrier
284  !$omp atomic
285    atomicvar2 = atomicvar2 - c2
286  !$omp barrier
287  !$omp atomic
288    atomicvar2 = -1 - atomicvar2
289  !$omp barrier
290  !$omp atomic
291    atomicvar2 = 0 - atomicvar2
292  !$omp barrier
293  !$omp atomic
294    atomicvar2 = 1 - atomicvar2
295  !$omp barrier
296  !$omp atomic
297    atomicvar2 = 2 - atomicvar2
298  !$omp barrier
299  !$omp atomic
300    atomicvar2 = c2 - atomicvar2
301  !$omp barrier
302  !$omp atomic
303    atomicvar2 = atomicvar2 * (-1)
304  !$omp barrier
305  !$omp atomic
306    atomicvar2 = atomicvar2 * 0
307  !$omp barrier
308  !$omp atomic
309    atomicvar2 = atomicvar2 * 1
310  !$omp barrier
311  !$omp atomic
312    atomicvar2 = atomicvar2 * 2
313  !$omp barrier
314  !$omp atomic
315    atomicvar2 = atomicvar2 * c2
316  !$omp barrier
317  !$omp atomic
318    atomicvar2 = (-1) * atomicvar2
319  !$omp barrier
320  !$omp atomic
321    atomicvar2 = 0 * atomicvar2
322  !$omp barrier
323  !$omp atomic
324    atomicvar2 = 1 * atomicvar2
325  !$omp barrier
326  !$omp atomic
327    atomicvar2 = 2 * atomicvar2
328  !$omp barrier
329  !$omp atomic
330    atomicvar2 = c2 * atomicvar2
331  !$omp barrier
332  !$omp atomic
333    atomicvar2 = atomicvar2 / (-1)
334  !$omp barrier
335  !$omp atomic
336    atomicvar2 = atomicvar2 / 0
337  !$omp barrier
338  !$omp atomic
339    atomicvar2 = atomicvar2 / 1
340  !$omp barrier
341  !$omp atomic
342    atomicvar2 = atomicvar2 / 2
343  !$omp barrier
344  !$omp atomic
345    atomicvar2 = atomicvar2 / c2
346  !$omp barrier
347  !$omp atomic
348    atomicvar2 = (-1) / atomicvar2
349  !$omp barrier
350  !$omp atomic
351    atomicvar2 = 0 / atomicvar2
352  !$omp barrier
353  !$omp atomic
354    atomicvar2 = 1 / atomicvar2
355  !$omp barrier
356  !$omp atomic
357    atomicvar2 = 2 / atomicvar2
358  !$omp barrier
359  !$omp atomic
360    atomicvar2 = c2 / atomicvar2
361  !$omp barrier
362  bar = 0
363end
364end module
365