204 lines
4.7 KiB
Fortran
204 lines
4.7 KiB
Fortran
! { dg-do run }
|
|
|
|
call dep ()
|
|
call dep2 ()
|
|
call dep3 ()
|
|
call firstpriv ()
|
|
call antidep ()
|
|
call antidep2 ()
|
|
call antidep3 ()
|
|
call outdep ()
|
|
call concurrent ()
|
|
call concurrent2 ()
|
|
call concurrent3 ()
|
|
contains
|
|
subroutine dep
|
|
integer :: x
|
|
x = 1
|
|
!$omp parallel
|
|
!$omp single
|
|
!$omp task shared (x) depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine dep
|
|
|
|
subroutine dep2
|
|
integer :: x
|
|
!$omp parallel
|
|
!$omp single private (x)
|
|
x = 1
|
|
!$omp task shared (x) depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp taskwait
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine dep2
|
|
|
|
subroutine dep3
|
|
integer :: x
|
|
!$omp parallel private (x)
|
|
x = 1
|
|
!$omp single
|
|
!$omp task shared (x) depend(out: x)
|
|
x = 2
|
|
!$omp endtask
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp endtask
|
|
!$omp endsingle
|
|
!$omp endparallel
|
|
end subroutine dep3
|
|
|
|
subroutine firstpriv
|
|
integer :: x
|
|
!$omp parallel private (x)
|
|
!$omp single
|
|
x = 1
|
|
!$omp task depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp task depend(in: x)
|
|
if (x.ne.1) call abort
|
|
!$omp end task
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine firstpriv
|
|
|
|
subroutine antidep
|
|
integer :: x
|
|
x = 1
|
|
!$omp parallel
|
|
!$omp single
|
|
!$omp task shared(x) depend(in: x)
|
|
if (x.ne.1) call abort
|
|
!$omp end task
|
|
!$omp task shared(x) depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine antidep
|
|
|
|
subroutine antidep2
|
|
integer :: x
|
|
!$omp parallel private (x)
|
|
!$omp single
|
|
x = 1
|
|
!$omp taskgroup
|
|
!$omp task shared(x) depend(in: x)
|
|
if (x.ne.1) call abort
|
|
!$omp end task
|
|
!$omp task shared(x) depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp end taskgroup
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine antidep2
|
|
|
|
subroutine antidep3
|
|
integer :: x
|
|
!$omp parallel
|
|
x = 1
|
|
!$omp single
|
|
!$omp task shared(x) depend(in: x)
|
|
if (x.ne.1) call abort
|
|
!$omp end task
|
|
!$omp task shared(x) depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine antidep3
|
|
|
|
subroutine outdep
|
|
integer :: x
|
|
!$omp parallel private (x)
|
|
!$omp single
|
|
x = 0
|
|
!$omp task shared(x) depend(out: x)
|
|
x = 1
|
|
!$omp end task
|
|
!$omp task shared(x) depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp taskwait
|
|
if (x.ne.2) call abort
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine outdep
|
|
|
|
subroutine concurrent
|
|
integer :: x
|
|
x = 1
|
|
!$omp parallel
|
|
!$omp single
|
|
!$omp task shared (x) depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine concurrent
|
|
|
|
subroutine concurrent2
|
|
integer :: x
|
|
!$omp parallel private (x)
|
|
!$omp single
|
|
x = 1
|
|
!$omp task shared (x) depend(out: x)
|
|
x = 2;
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp taskwait
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine concurrent2
|
|
|
|
subroutine concurrent3
|
|
integer :: x
|
|
!$omp parallel private (x)
|
|
x = 1
|
|
!$omp single
|
|
!$omp task shared (x) depend(out: x)
|
|
x = 2
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp task shared (x) depend(in: x)
|
|
if (x.ne.2) call abort
|
|
!$omp end task
|
|
!$omp end single
|
|
!$omp end parallel
|
|
end subroutine concurrent3
|
|
end
|