1! RUN: %flang_fc1 -fdebug-unparse-no-sema -fopenmp %s | FileCheck %s
2
3program main
4   implicit none
5   integer :: i, j = 10
6!READ
7!$omp atomic read
8   i = j
9!$omp atomic seq_cst read
10   i = j
11!$omp atomic read seq_cst
12   i = j
13!$omp atomic release read
14   i = j
15!$omp atomic read release
16   i = j
17!$omp atomic acq_rel read
18   i = j
19!$omp atomic read acq_rel
20   i = j
21!$omp atomic acquire read
22   i = j
23!$omp atomic read acquire
24   i = j
25!$omp atomic relaxed read
26   i = j
27!$omp atomic read relaxed
28   i = j
29
30! WRITE
31!$omp atomic write
32   i = j
33!$omp atomic seq_cst write
34   i = j
35!$omp atomic write seq_cst
36   i = j
37!$omp atomic release write
38   i = j
39!$omp atomic write release
40   i = j
41!$omp atomic acq_rel write
42   i = j
43!$omp atomic write acq_rel
44   i = j
45!$omp atomic acquire write
46   i = j
47!$omp atomic write acquire
48   i = j
49!$omp atomic relaxed write
50   i = j
51!$omp atomic write relaxed
52   i = j
53
54!UPDATE
55!$omp atomic update
56   i = j
57!$omp atomic seq_cst update
58   i = j
59!$omp atomic update seq_cst
60   i = j
61!$omp atomic release update
62   i = j
63!$omp atomic update release
64   i = j
65!$omp atomic acq_rel update
66   i = j
67!$omp atomic update acq_rel
68   i = j
69!$omp atomic acquire update
70   i = j
71!$omp atomic update acquire
72   i = j
73!$omp atomic relaxed update
74   i = j
75!$omp atomic update relaxed
76   i = j
77
78!CAPTURE
79!$omp atomic capture
80   i = j
81   i = j
82!$omp end atomic
83!$omp atomic seq_cst capture
84   i = j
85   i = j
86!$omp end atomic
87!$omp atomic capture seq_cst
88   i = j
89   i = j
90!$omp end atomic
91!$omp atomic release capture
92   i = j
93   i = j
94!$omp end atomic
95!$omp atomic capture release
96   i = j
97   i = j
98!$omp end atomic
99!$omp atomic acq_rel capture
100   i = j
101   i = j
102!$omp end atomic
103!$omp atomic capture acq_rel
104   i = j
105   i = j
106!$omp end atomic
107!$omp atomic acquire capture
108   i = j
109   i = j
110!$omp end atomic
111!$omp atomic capture acquire
112   i = j
113   i = j
114!$omp end atomic
115!$omp atomic relaxed capture
116   i = j
117   i = j
118!$omp end atomic
119!$omp atomic capture relaxed
120   i = j
121   i = j
122!$omp end atomic
123
124!ATOMIC
125!$omp atomic
126   i = j
127!$omp atomic seq_cst
128   i = j
129!$omp atomic release
130   i = j
131!$omp atomic acq_rel
132   i = j
133!$omp atomic acquire
134   i = j
135!$omp atomic relaxed
136   i = j
137
138end program main
139!CHECK-LABEL: PROGRAM main
140
141!READ
142
143!CHECK: !$OMP ATOMIC READ
144!CHECK: !$OMP ATOMIC SEQ_CST READ
145!CHECK: !$OMP ATOMIC READ SEQ_CST
146!CHECK: !$OMP ATOMIC RELEASE READ
147!CHECK: !$OMP ATOMIC READ RELEASE
148!CHECK: !$OMP ATOMIC ACQ_REL READ
149!CHECK: !$OMP ATOMIC READ ACQ_REL
150!CHECK: !$OMP ATOMIC ACQUIRE READ
151!CHECK: !$OMP ATOMIC READ ACQUIRE
152!CHECK: !$OMP ATOMIC RELAXED READ
153!CHECK: !$OMP ATOMIC READ RELAXED
154
155!WRITE
156
157!CHECK: !$OMP ATOMIC WRITE
158!CHECK: !$OMP ATOMIC SEQ_CST WRITE
159!CHECK: !$OMP ATOMIC WRITE SEQ_CST
160!CHECK: !$OMP ATOMIC RELEASE WRITE
161!CHECK: !$OMP ATOMIC WRITE RELEASE
162!CHECK: !$OMP ATOMIC ACQ_REL WRITE
163!CHECK: !$OMP ATOMIC WRITE ACQ_REL
164!CHECK: !$OMP ATOMIC ACQUIRE WRITE
165!CHECK: !$OMP ATOMIC WRITE ACQUIRE
166!CHECK: !$OMP ATOMIC RELAXED WRITE
167!CHECK: !$OMP ATOMIC WRITE RELAXED
168
169!UPDATE
170
171!CHECK: !$OMP ATOMIC UPDATE
172!CHECK: !$OMP ATOMIC SEQ_CST UPDATE
173!CHECK: !$OMP ATOMIC UPDATE SEQ_CST
174!CHECK: !$OMP ATOMIC RELEASE UPDATE
175!CHECK: !$OMP ATOMIC UPDATE RELEASE
176!CHECK: !$OMP ATOMIC ACQ_REL UPDATE
177!CHECK: !$OMP ATOMIC UPDATE ACQ_REL
178!CHECK: !$OMP ATOMIC ACQUIRE UPDATE
179!CHECK: !$OMP ATOMIC UPDATE ACQUIRE
180!CHECK: !$OMP ATOMIC RELAXED UPDATE
181!CHECK: !$OMP ATOMIC UPDATE RELAXED
182
183!CAPTURE
184
185!CHECK: !$OMP ATOMIC CAPTURE
186!CHECK: !$OMP END ATOMIC
187!CHECK: !$OMP ATOMIC SEQ_CST CAPTURE
188!CHECK: !$OMP END ATOMIC
189!CHECK: !$OMP ATOMIC CAPTURE SEQ_CST
190!CHECK: !$OMP END ATOMIC
191!CHECK: !$OMP ATOMIC RELEASE CAPTURE
192!CHECK: !$OMP END ATOMIC
193!CHECK: !$OMP ATOMIC CAPTURE RELEASE
194!CHECK: !$OMP END ATOMIC
195!CHECK: !$OMP ATOMIC ACQ_REL CAPTURE
196!CHECK: !$OMP END ATOMIC
197!CHECK: !$OMP ATOMIC CAPTURE ACQ_REL
198!CHECK: !$OMP END ATOMIC
199!CHECK: !$OMP ATOMIC ACQUIRE CAPTURE
200!CHECK: !$OMP END ATOMIC
201!CHECK: !$OMP ATOMIC CAPTURE ACQUIRE
202!CHECK: !$OMP END ATOMIC
203!CHECK: !$OMP ATOMIC RELAXED CAPTURE
204!CHECK: !$OMP END ATOMIC
205!CHECK: !$OMP ATOMIC CAPTURE RELAXED
206!CHECK: !$OMP END ATOMIC
207
208!ATOMIC
209!CHECK: !$OMP ATOMIC
210!CHECK: !$OMP ATOMIC SEQ_CST
211!CHECK: !$OMP ATOMIC RELEASE
212!CHECK: !$OMP ATOMIC ACQ_REL
213!CHECK: !$OMP ATOMIC ACQUIRE
214!CHECK: !$OMP ATOMIC RELAXED
215