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