gcc/fortran/ChangeLog: * gfortran.h (gfc_omp_namelist): Add lastprivate_conditional. * openmp.c (gfc_match_omp_clauses): Handle 'conditional:' modifier of 'lastprivate'. * trans-openmp.c (gfc_omp_clause_default_ctor): Don't assert on OMP_CLAUSE__CONDTEMP_ and other OMP_*TEMP_. (gfc_trans_omp_variable_list): Handle lastprivate_conditional. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/lastprivate-conditional-1.f90: New test. * gfortran.dg/gomp/lastprivate-conditional-2.f90: New test. * gfortran.dg/gomp/lastprivate-conditional-3.f90: New test. * gfortran.dg/gomp/lastprivate-conditional-4.f90: New test. * gfortran.dg/gomp/lastprivate-conditional-5.f90: New test.
47 lines
1.6 KiB
Fortran
47 lines
1.6 KiB
Fortran
! { dg-additional-options "-fdump-tree-original" }
|
|
subroutine foo (p)
|
|
logical :: p(:)
|
|
integer i
|
|
integer a, b, c, d, e, f, g, h
|
|
a = -1; b = -1; c = -1; d = -1; e = -1; f = -1; g = -1; h = -1
|
|
!$omp parallel
|
|
!$omp do lastprivate (conditional: a)
|
|
do i = 1, 32
|
|
if (p(i)) &
|
|
a = i
|
|
end do
|
|
!$omp end parallel
|
|
!$omp simd lastprivate (conditional: b)
|
|
do i = 1, 32
|
|
if (p(i)) &
|
|
b = i
|
|
end do
|
|
!$omp parallel
|
|
!$omp do simd lastprivate (conditional: c)
|
|
do i = 1, 32
|
|
if (p(i)) &
|
|
c = i
|
|
end do
|
|
!$omp end parallel
|
|
!$omp parallel do lastprivate (conditional: d)
|
|
do i = 1, 32
|
|
if (p(i)) &
|
|
d = i
|
|
end do
|
|
!$omp end parallel do
|
|
!$omp parallel do simd lastprivate (conditional: e)
|
|
do i = 1, 32
|
|
if (p(i)) &
|
|
e = i
|
|
end do
|
|
!$omp end parallel do simd
|
|
end subroutine
|
|
|
|
! { dg-final { scan-tree-dump-times "#pragma omp for lastprivate\\(conditional:a\\)" 1 "original" } }
|
|
! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\) lastprivate\\(conditional:b\\)" 1 "original" } }
|
|
! { dg-final { scan-tree-dump-times "#pragma omp for lastprivate\\(conditional:c\\)" 1 "original" } }
|
|
! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\) lastprivate\\(conditional:c\\)" 1 "original" } }
|
|
! { dg-final { scan-tree-dump-times "#pragma omp parallel lastprivate\\(conditional:d\\)" 1 "original" } }
|
|
! { dg-final { scan-tree-dump-times "#pragma omp parallel lastprivate\\(conditional:e\\)" 1 "original" } }
|
|
! { dg-final { scan-tree-dump-times "#pragma omp simd linear\\(i:1\\) lastprivate\\(conditional:e\\)" 1 "original" } }
|