Support the atomic compare option of a fail(memory-order) clauses. Additional tests introduced to check that parsing and semantics checks for the new clause is handled. Lowering for atomic compare is still unsupported and wil end in a TOOD (aka "Not yet implemented"). A test for this case with the fail clause is also present.
292 lines
5.7 KiB
Fortran
292 lines
5.7 KiB
Fortran
! 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
|
|
|
|
|