Implementation of Do loop iteration variable check, Do while loop check, Do loop cycle restrictions. Also to check whether the ordered clause is present on the loop construct if any ordered region ever binds to a loop region arising from the loop construct. Files: check-omp-structure.h check-omp-structure.cpp resolve-directives.cpp Testcases: omp-do06-positivecases.f90 omp-do06.f90 omp-do08.f90 omp-do09.f90 omp-do10.f90 omp-do11.f90 omp-do12.f90 omp-do13.f90 omp-do14.f90 omp-do15.f90 omp-do16.f90 omp-do17.f90 Reviewed by: Kiran Chandramohan @kiranchandramohan , Valentin Clement @clementval Differential Revision: https://reviews.llvm.org/D92732
92 lines
2.4 KiB
Fortran
92 lines
2.4 KiB
Fortran
! RUN: %S/test_symbols.sh %s %t %f18 -fopenmp
|
|
! OpenMP Version 4.5
|
|
! 2.7.1 Do Loop constructs.
|
|
|
|
!DEF: /omp_cycle MainProgram
|
|
program omp_cycle
|
|
!$omp do collapse(1)
|
|
!DEF: /omp_cycle/Block1/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i=0,10
|
|
cycle
|
|
!DEF: /omp_cycle/j (Implicit) ObjectEntity INTEGER(4)
|
|
do j=0,10
|
|
!DEF: /omp_cycle/k (Implicit) ObjectEntity INTEGER(4)
|
|
do k=0,10
|
|
!REF: /omp_cycle/Block1/i
|
|
!REF: /omp_cycle/j
|
|
!REF: /omp_cycle/k
|
|
print *, i, j, k
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end do
|
|
|
|
!$omp do collapse(1)
|
|
!DEF: /omp_cycle/Block2/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i=0,10
|
|
!REF: /omp_cycle/j
|
|
do j=0,10
|
|
cycle
|
|
!REF: /omp_cycle/k
|
|
do k=0,10
|
|
!REF: /omp_cycle/Block2/i
|
|
!REF: /omp_cycle/j
|
|
!REF: /omp_cycle/k
|
|
print *, i, j, k
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end do
|
|
|
|
!$omp do collapse(2)
|
|
!DEF: /omp_cycle/Block3/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i=0,10
|
|
!DEF: /omp_cycle/Block3/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do j=0,10
|
|
!REF: /omp_cycle/k
|
|
do k=0,10
|
|
cycle
|
|
!REF: /omp_cycle/Block3/i
|
|
!REF: /omp_cycle/Block3/j
|
|
!REF: /omp_cycle/k
|
|
print *, i, j, k
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end do
|
|
|
|
!$omp do collapse(3)
|
|
!DEF: /omp_cycle/Block4/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do i=0,10
|
|
!DEF: /omp_cycle/Block4/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do j=0,10
|
|
!DEF: /omp_cycle/Block4/k (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
do k=0,10
|
|
cycle
|
|
!REF: /omp_cycle/Block4/i
|
|
!REF: /omp_cycle/Block4/j
|
|
!REF: /omp_cycle/Block4/k
|
|
print *, i, j, k
|
|
end do
|
|
end do
|
|
end do
|
|
!$omp end do
|
|
|
|
!$omp do ordered(3)
|
|
!DEF: /omp_cycle/Block5/i (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
foo:do i=0,10
|
|
!DEF: /omp_cycle/Block5/j (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
foo1:do j=0,10
|
|
!DEF: /omp_cycle/Block5/k (OmpPrivate, OmpPreDetermined) HostAssoc INTEGER(4)
|
|
foo2:do k=0,10
|
|
cycle foo2
|
|
!REF: /omp_cycle/Block5/i
|
|
!REF: /omp_cycle/Block5/j
|
|
!REF: /omp_cycle/Block5/k
|
|
print *, i, j, k
|
|
end do foo2
|
|
end do foo1
|
|
end do foo
|
|
!$omp end do
|
|
end program omp_cycle
|