blob: 16dc7a1a92bf9e7eff92cd0a75b286f1d97b5d0f [file] [log] [blame]
! RUN: %flang_fc1 -fdebug-unparse-no-sema -fopenmp %s | FileCheck %s
program main
implicit none
integer :: i, j = 10
integer :: k
!READ
!$omp atomic read
i = j
!$omp atomic seq_cst read
i = j
!$omp atomic read seq_cst
i = j
!$omp atomic release read
i = j
!$omp atomic read release
i = j
!$omp atomic acq_rel read
i = j
!$omp atomic read acq_rel
i = j
!$omp atomic acquire read
i = j
!$omp atomic read acquire
i = j
!$omp atomic relaxed read
i = j
!$omp atomic read relaxed
i = j
! WRITE
!$omp atomic write
i = j
!$omp atomic seq_cst write
i = j
!$omp atomic write seq_cst
i = j
!$omp atomic release write
i = j
!$omp atomic write release
i = j
!$omp atomic acq_rel write
i = j
!$omp atomic write acq_rel
i = j
!$omp atomic acquire write
i = j
!$omp atomic write acquire
i = j
!$omp atomic relaxed write
i = j
!$omp atomic write relaxed
i = j
!UPDATE
!$omp atomic update
i = j
!$omp atomic seq_cst update
i = j
!$omp atomic update seq_cst
i = j
!$omp atomic release update
i = j
!$omp atomic update release
i = j
!$omp atomic acq_rel update
i = j
!$omp atomic update acq_rel
i = j
!$omp atomic acquire update
i = j
!$omp atomic update acquire
i = j
!$omp atomic relaxed update
i = j
!$omp atomic update relaxed
i = j
!CAPTURE
!$omp atomic capture
i = j
i = j
!$omp end atomic
!$omp atomic seq_cst capture
i = j
i = j
!$omp end atomic
!$omp atomic capture seq_cst
i = j
i = j
!$omp end atomic
!$omp atomic release capture
i = j
i = j
!$omp end atomic
!$omp atomic capture release
i = j
i = j
!$omp end atomic
!$omp atomic acq_rel capture
i = j
i = j
!$omp end atomic
!$omp atomic capture acq_rel
i = j
i = j
!$omp end atomic
!$omp atomic acquire capture
i = j
i = j
!$omp end atomic
!$omp atomic capture acquire
i = j
i = j
!$omp end atomic
!$omp atomic relaxed capture
i = j
i = j
!$omp end atomic
!$omp atomic capture relaxed
i = j
i = j
!$omp end atomic
!COMPARE
!$omp atomic compare
if (k == i) k = j
!$omp atomic seq_cst compare
if (k == j) then
k = i
end if
!$omp atomic compare seq_cst
if (k .eq. j) then
k = i
end if
!$omp atomic release compare
if (i .eq. j) k = i
!$omp atomic compare release
if (i .eq. j) then
i = k
end if
!$omp atomic acq_rel compare
if (k .eq. j) then
j = i
end if
!$omp atomic compare acq_rel
if (i .eq. j) then
i = k
end if
!$omp atomic acquire compare
if (i .eq. j + 1) then
i = j
end if
!$omp atomic compare acquire
if (i .eq. j) then
i = k
end if
!$omp atomic relaxed compare
if (i .eq. j) then
i = k
end if
!$omp atomic compare relaxed
if (i .eq. k) then
i = j
end if
!$omp atomic compare fail(relaxed)
if (i .eq. k) then
i = j
end if
!$omp atomic fail(relaxed) compare
if (i .eq. k) then
i = j
end if
!$omp atomic fail(relaxed) compare acquire
if (i .eq. k) then
i = j
end if
!ATOMIC
!$omp atomic
i = j
!$omp atomic seq_cst
i = j
!$omp atomic release
i = j
!$omp atomic acq_rel
i = j
!$omp atomic acquire
i = j
!$omp atomic relaxed
i = j
end program main
!CHECK-LABEL: PROGRAM main
!READ
!CHECK: !$OMP ATOMIC READ
!CHECK: !$OMP ATOMIC SEQ_CST READ
!CHECK: !$OMP ATOMIC READ SEQ_CST
!CHECK: !$OMP ATOMIC RELEASE READ
!CHECK: !$OMP ATOMIC READ RELEASE
!CHECK: !$OMP ATOMIC ACQ_REL READ
!CHECK: !$OMP ATOMIC READ ACQ_REL
!CHECK: !$OMP ATOMIC ACQUIRE READ
!CHECK: !$OMP ATOMIC READ ACQUIRE
!CHECK: !$OMP ATOMIC RELAXED READ
!CHECK: !$OMP ATOMIC READ RELAXED
!WRITE
!CHECK: !$OMP ATOMIC WRITE
!CHECK: !$OMP ATOMIC SEQ_CST WRITE
!CHECK: !$OMP ATOMIC WRITE SEQ_CST
!CHECK: !$OMP ATOMIC RELEASE WRITE
!CHECK: !$OMP ATOMIC WRITE RELEASE
!CHECK: !$OMP ATOMIC ACQ_REL WRITE
!CHECK: !$OMP ATOMIC WRITE ACQ_REL
!CHECK: !$OMP ATOMIC ACQUIRE WRITE
!CHECK: !$OMP ATOMIC WRITE ACQUIRE
!CHECK: !$OMP ATOMIC RELAXED WRITE
!CHECK: !$OMP ATOMIC WRITE RELAXED
!UPDATE
!CHECK: !$OMP ATOMIC UPDATE
!CHECK: !$OMP ATOMIC SEQ_CST UPDATE
!CHECK: !$OMP ATOMIC UPDATE SEQ_CST
!CHECK: !$OMP ATOMIC RELEASE UPDATE
!CHECK: !$OMP ATOMIC UPDATE RELEASE
!CHECK: !$OMP ATOMIC ACQ_REL UPDATE
!CHECK: !$OMP ATOMIC UPDATE ACQ_REL
!CHECK: !$OMP ATOMIC ACQUIRE UPDATE
!CHECK: !$OMP ATOMIC UPDATE ACQUIRE
!CHECK: !$OMP ATOMIC RELAXED UPDATE
!CHECK: !$OMP ATOMIC UPDATE RELAXED
!CAPTURE
!CHECK: !$OMP ATOMIC CAPTURE
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC SEQ_CST CAPTURE
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC CAPTURE SEQ_CST
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC RELEASE CAPTURE
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC CAPTURE RELEASE
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC ACQ_REL CAPTURE
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC CAPTURE ACQ_REL
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC ACQUIRE CAPTURE
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC CAPTURE ACQUIRE
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC RELAXED CAPTURE
!CHECK: !$OMP END ATOMIC
!CHECK: !$OMP ATOMIC CAPTURE RELAXED
!CHECK: !$OMP END ATOMIC
!COMPARE
!CHECK: !$OMP ATOMIC COMPARE
!CHECK: !$OMP ATOMIC SEQ_CST COMPARE
!CHECK: !$OMP ATOMIC COMPARE SEQ_CST
!CHECK: !$OMP ATOMIC RELEASE COMPARE
!CHECK: !$OMP ATOMIC COMPARE RELEASE
!CHECK: !$OMP ATOMIC ACQ_REL COMPARE
!CHECK: !$OMP ATOMIC COMPARE ACQ_REL
!CHECK: !$OMP ATOMIC ACQUIRE COMPARE
!CHECK: !$OMP ATOMIC COMPARE ACQUIRE
!CHECK: !$OMP ATOMIC RELAXED COMPARE
!CHECK: !$OMP ATOMIC COMPARE RELAXED
!CHECK: !$OMP ATOMIC COMPARE FAIL(RELAXED)
!CHECK: !$OMP ATOMIC FAIL(RELAXED) COMPARE
!CHECK: !$OMP ATOMIC FAIL(RELAXED) COMPARE ACQUIRE
!ATOMIC
!CHECK: !$OMP ATOMIC
!CHECK: !$OMP ATOMIC SEQ_CST
!CHECK: !$OMP ATOMIC RELEASE
!CHECK: !$OMP ATOMIC ACQ_REL
!CHECK: !$OMP ATOMIC ACQUIRE
!CHECK: !$OMP ATOMIC RELAXED