xref: /llvm-project/flang/test/Parser/OpenMP/atomic-unparse.f90 (revision 00e1cc4c9d002c78cf890b630343b052ebca0399)
1! RUN: %flang_fc1 -fdebug-unparse-no-sema -fopenmp %s | FileCheck %s
2
3program main
4   implicit none
5   integer :: i, j = 10
6   integer :: k
7!READ
8!$omp atomic read
9   i = j
10!$omp atomic seq_cst read
11   i = j
12!$omp atomic read seq_cst
13   i = j
14!$omp atomic release read
15   i = j
16!$omp atomic read release
17   i = j
18!$omp atomic acq_rel read
19   i = j
20!$omp atomic read acq_rel
21   i = j
22!$omp atomic acquire read
23   i = j
24!$omp atomic read acquire
25   i = j
26!$omp atomic relaxed read
27   i = j
28!$omp atomic read relaxed
29   i = j
30
31! WRITE
32!$omp atomic write
33   i = j
34!$omp atomic seq_cst write
35   i = j
36!$omp atomic write seq_cst
37   i = j
38!$omp atomic release write
39   i = j
40!$omp atomic write release
41   i = j
42!$omp atomic acq_rel write
43   i = j
44!$omp atomic write acq_rel
45   i = j
46!$omp atomic acquire write
47   i = j
48!$omp atomic write acquire
49   i = j
50!$omp atomic relaxed write
51   i = j
52!$omp atomic write relaxed
53   i = j
54
55!UPDATE
56!$omp atomic update
57   i = j
58!$omp atomic seq_cst update
59   i = j
60!$omp atomic update seq_cst
61   i = j
62!$omp atomic release update
63   i = j
64!$omp atomic update release
65   i = j
66!$omp atomic acq_rel update
67   i = j
68!$omp atomic update acq_rel
69   i = j
70!$omp atomic acquire update
71   i = j
72!$omp atomic update acquire
73   i = j
74!$omp atomic relaxed update
75   i = j
76!$omp atomic update relaxed
77   i = j
78
79!CAPTURE
80!$omp atomic capture
81   i = j
82   i = j
83!$omp end atomic
84!$omp atomic seq_cst capture
85   i = j
86   i = j
87!$omp end atomic
88!$omp atomic capture seq_cst
89   i = j
90   i = j
91!$omp end atomic
92!$omp atomic release capture
93   i = j
94   i = j
95!$omp end atomic
96!$omp atomic capture release
97   i = j
98   i = j
99!$omp end atomic
100!$omp atomic acq_rel capture
101   i = j
102   i = j
103!$omp end atomic
104!$omp atomic capture acq_rel
105   i = j
106   i = j
107!$omp end atomic
108!$omp atomic acquire capture
109   i = j
110   i = j
111!$omp end atomic
112!$omp atomic capture acquire
113   i = j
114   i = j
115!$omp end atomic
116!$omp atomic relaxed capture
117   i = j
118   i = j
119!$omp end atomic
120!$omp atomic capture relaxed
121   i = j
122   i = j
123!$omp end atomic
124
125!COMPARE
126!$omp atomic compare
127   if (k == i) k = j
128!$omp atomic seq_cst compare
129   if (k == j) then
130      k = i
131   end if
132!$omp atomic compare seq_cst
133   if (k .eq. j) then
134      k = i
135   end if
136!$omp atomic release compare
137   if (i .eq. j) k = i
138!$omp atomic compare release
139   if (i .eq. j) then
140      i = k
141   end if
142!$omp atomic acq_rel compare
143   if (k .eq. j) then
144      j = i
145   end if
146!$omp atomic compare acq_rel
147   if (i .eq. j) then
148      i = k
149   end if
150!$omp atomic acquire compare
151   if (i .eq. j + 1) then
152      i = j
153   end if
154
155!$omp atomic compare acquire
156   if (i .eq. j) then
157      i = k
158   end if
159!$omp atomic relaxed compare
160   if (i .eq. j) then
161      i = k
162   end if
163!$omp atomic compare relaxed
164   if (i .eq. k) then
165      i = j
166   end if
167
168
169!$omp atomic compare fail(relaxed)
170   if (i .eq. k) then
171      i = j
172   end if
173!$omp atomic fail(relaxed) compare
174   if (i .eq. k) then
175      i = j
176   end if
177!$omp atomic fail(relaxed) compare acquire
178   if (i .eq. k) then
179      i = j
180   end if
181
182!ATOMIC
183!$omp atomic
184   i = j
185!$omp atomic seq_cst
186   i = j
187!$omp atomic release
188   i = j
189!$omp atomic acq_rel
190   i = j
191!$omp atomic acquire
192   i = j
193!$omp atomic relaxed
194   i = j
195
196end program main
197!CHECK-LABEL: PROGRAM main
198
199!READ
200
201!CHECK: !$OMP ATOMIC READ
202!CHECK: !$OMP ATOMIC SEQ_CST READ
203!CHECK: !$OMP ATOMIC READ SEQ_CST
204!CHECK: !$OMP ATOMIC RELEASE READ
205!CHECK: !$OMP ATOMIC READ RELEASE
206!CHECK: !$OMP ATOMIC ACQ_REL READ
207!CHECK: !$OMP ATOMIC READ ACQ_REL
208!CHECK: !$OMP ATOMIC ACQUIRE READ
209!CHECK: !$OMP ATOMIC READ ACQUIRE
210!CHECK: !$OMP ATOMIC RELAXED READ
211!CHECK: !$OMP ATOMIC READ RELAXED
212
213!WRITE
214
215!CHECK: !$OMP ATOMIC WRITE
216!CHECK: !$OMP ATOMIC SEQ_CST WRITE
217!CHECK: !$OMP ATOMIC WRITE SEQ_CST
218!CHECK: !$OMP ATOMIC RELEASE WRITE
219!CHECK: !$OMP ATOMIC WRITE RELEASE
220!CHECK: !$OMP ATOMIC ACQ_REL WRITE
221!CHECK: !$OMP ATOMIC WRITE ACQ_REL
222!CHECK: !$OMP ATOMIC ACQUIRE WRITE
223!CHECK: !$OMP ATOMIC WRITE ACQUIRE
224!CHECK: !$OMP ATOMIC RELAXED WRITE
225!CHECK: !$OMP ATOMIC WRITE RELAXED
226
227!UPDATE
228
229!CHECK: !$OMP ATOMIC UPDATE
230!CHECK: !$OMP ATOMIC SEQ_CST UPDATE
231!CHECK: !$OMP ATOMIC UPDATE SEQ_CST
232!CHECK: !$OMP ATOMIC RELEASE UPDATE
233!CHECK: !$OMP ATOMIC UPDATE RELEASE
234!CHECK: !$OMP ATOMIC ACQ_REL UPDATE
235!CHECK: !$OMP ATOMIC UPDATE ACQ_REL
236!CHECK: !$OMP ATOMIC ACQUIRE UPDATE
237!CHECK: !$OMP ATOMIC UPDATE ACQUIRE
238!CHECK: !$OMP ATOMIC RELAXED UPDATE
239!CHECK: !$OMP ATOMIC UPDATE RELAXED
240
241!CAPTURE
242
243!CHECK: !$OMP ATOMIC CAPTURE
244!CHECK: !$OMP END ATOMIC
245!CHECK: !$OMP ATOMIC SEQ_CST CAPTURE
246!CHECK: !$OMP END ATOMIC
247!CHECK: !$OMP ATOMIC CAPTURE SEQ_CST
248!CHECK: !$OMP END ATOMIC
249!CHECK: !$OMP ATOMIC RELEASE CAPTURE
250!CHECK: !$OMP END ATOMIC
251!CHECK: !$OMP ATOMIC CAPTURE RELEASE
252!CHECK: !$OMP END ATOMIC
253!CHECK: !$OMP ATOMIC ACQ_REL CAPTURE
254!CHECK: !$OMP END ATOMIC
255!CHECK: !$OMP ATOMIC CAPTURE ACQ_REL
256!CHECK: !$OMP END ATOMIC
257!CHECK: !$OMP ATOMIC ACQUIRE CAPTURE
258!CHECK: !$OMP END ATOMIC
259!CHECK: !$OMP ATOMIC CAPTURE ACQUIRE
260!CHECK: !$OMP END ATOMIC
261!CHECK: !$OMP ATOMIC RELAXED CAPTURE
262!CHECK: !$OMP END ATOMIC
263!CHECK: !$OMP ATOMIC CAPTURE RELAXED
264!CHECK: !$OMP END ATOMIC
265
266!COMPARE
267
268!CHECK: !$OMP ATOMIC COMPARE
269!CHECK: !$OMP ATOMIC SEQ_CST COMPARE
270!CHECK: !$OMP ATOMIC COMPARE SEQ_CST
271!CHECK: !$OMP ATOMIC RELEASE COMPARE
272!CHECK: !$OMP ATOMIC COMPARE RELEASE
273!CHECK: !$OMP ATOMIC ACQ_REL COMPARE
274!CHECK: !$OMP ATOMIC COMPARE ACQ_REL
275!CHECK: !$OMP ATOMIC ACQUIRE COMPARE
276!CHECK: !$OMP ATOMIC COMPARE ACQUIRE
277!CHECK: !$OMP ATOMIC RELAXED COMPARE
278!CHECK: !$OMP ATOMIC COMPARE RELAXED
279!CHECK: !$OMP ATOMIC COMPARE FAIL(RELAXED)
280!CHECK: !$OMP ATOMIC FAIL(RELAXED) COMPARE
281!CHECK: !$OMP ATOMIC FAIL(RELAXED) COMPARE ACQUIRE
282
283!ATOMIC
284!CHECK: !$OMP ATOMIC
285!CHECK: !$OMP ATOMIC SEQ_CST
286!CHECK: !$OMP ATOMIC RELEASE
287!CHECK: !$OMP ATOMIC ACQ_REL
288!CHECK: !$OMP ATOMIC ACQUIRE
289!CHECK: !$OMP ATOMIC RELAXED
290
291
292