This patch supports the following checks for ORDERED construct: ``` [5.1] 2.19.9 ORDERED Construct The worksharing-loop or worksharing-loop SIMD region to which an ordered region corresponding to an ordered construct without a depend clause binds must have an ordered clause without the parameter specified on the corresponding worksharing-loop or worksharing-loop SIMD directive. The worksharing-loop region to which an ordered region that corresponds to an ordered construct with any depend clauses binds must have an ordered clause with the parameter specified on the corresponding worksharing-loop directive. An ordered construct with the depend clause specified must be closely nested inside a worksharing-loop (or parallel worksharing-loop) construct. An ordered region that corresponds to an ordered construct with the simd clause specified must be closely nested inside a simd or worksharing-loop SIMD region. ``` Reviewed By: kiranchandramohan, shraiysh, NimishMishra Differential Revision: https://reviews.llvm.org/D113399
68 lines
1.7 KiB
Fortran
68 lines
1.7 KiB
Fortran
!RUN: %python %S/test_errors.py %s %flang -fopenmp
|
|
! OpenMP Version 4.5
|
|
! 2.7.1 Ordered Clause positive cases.
|
|
|
|
!DEF: /omp_doordered MainProgram
|
|
program omp_doordered
|
|
!DEF: /omp_doordered/i ObjectEntity INTEGER(4)
|
|
!DEF: /omp_doordered/j ObjectEntity INTEGER(4)
|
|
integer i, j
|
|
!$omp do ordered(2)
|
|
!DEF: /omp_doordered/Block1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i=1,10
|
|
!DEF: /omp_doordered/Block1/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do j=1,10
|
|
print *, "hello"
|
|
end do
|
|
end do
|
|
!$omp end do
|
|
|
|
!REF: /omp_doordered/i
|
|
do i=1,10
|
|
!REF: /omp_doordered/j
|
|
do j=1,10
|
|
!$omp do ordered(1)
|
|
!DEF: /omp_doordered/Block2/k (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do k=1,10
|
|
print *, "hello"
|
|
end do
|
|
!$omp end do
|
|
end do
|
|
end do
|
|
|
|
!$omp do ordered
|
|
!DEF: /omp_doordered/Block3/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i=1,10
|
|
!$omp ordered
|
|
!REF: /omp_doordered/j
|
|
do j=1,10
|
|
print *, "hello"
|
|
end do
|
|
!$omp end ordered
|
|
end do
|
|
!$omp end do
|
|
|
|
!$omp do collapse(1) ordered(2)
|
|
!DEF: /omp_doordered/Block4/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i=1,10
|
|
!DEF: /omp_doordered/Block4/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do j=1,10
|
|
print *, "hello"
|
|
end do
|
|
end do
|
|
!$omp end do
|
|
|
|
!$omp parallel num_threads(4)
|
|
!$omp do ordered collapse(1)
|
|
!DEF: /omp_doordered/Block5/Block1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i=1,10
|
|
!$omp ordered
|
|
!DEF: /omp_doordered/Block5/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do j=1,10
|
|
print *, "hello"
|
|
end do
|
|
!$omp end ordered
|
|
end do
|
|
!$omp end parallel
|
|
end program omp_doordered
|