From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1534) id 0EBEE3854149; Tue, 5 Jul 2022 08:11:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0EBEE3854149 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Tobias Burnus To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/omp/gcc-12] OpenMP/Fortran: Add support for firstprivate and allocate clauses on scope construct X-Act-Checkin: gcc X-Git-Author: Tobias Burnus X-Git-Refname: refs/heads/devel/omp/gcc-12 X-Git-Oldrev: 0ca11d9d7fb02f96809eb79c5f9128a6701a6ff4 X-Git-Newrev: fc8e0d126aca313606bf1646a4ead1454909c230 Message-Id: <20220705081119.0EBEE3854149@sourceware.org> Date: Tue, 5 Jul 2022 08:11:19 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jul 2022 08:11:19 -0000 https://gcc.gnu.org/g:fc8e0d126aca313606bf1646a4ead1454909c230 commit fc8e0d126aca313606bf1646a4ead1454909c230 Author: Tobias Burnus Date: Tue Jul 5 10:03:25 2022 +0200 OpenMP/Fortran: Add support for firstprivate and allocate clauses on scope construct Fortran commit to C/C++/backend commit r13-862-gf38b20d68fade5a922b9f68c4c3841e653d1b83c gcc/fortran/ChangeLog: * openmp.cc (OMP_SCOPE_CLAUSES): Add firstprivate and allocate. libgomp/ChangeLog: * libgomp.texi (OpenMP 5.2): Mark scope w/ firstprivate/allocate as Y. * testsuite/libgomp.fortran/scope-2.f90: New test. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/scope-5.f90: New test. * gfortran.dg/gomp/scope-6.f90: New test. (cherry picked from commit ff35a75473d28205e52ecbcf9e6b5107b8b5ab90) Diff: --- gcc/fortran/ChangeLog.omp | 7 ++++ gcc/fortran/openmp.cc | 3 +- gcc/testsuite/ChangeLog.omp | 8 ++++ gcc/testsuite/gfortran.dg/gomp/scope-5.f90 | 9 +++++ gcc/testsuite/gfortran.dg/gomp/scope-6.f90 | 23 +++++++++++ libgomp/ChangeLog.omp | 8 ++++ libgomp/libgomp.texi | 2 +- libgomp/testsuite/libgomp.fortran/scope-2.f90 | 57 +++++++++++++++++++++++++++ 8 files changed, 115 insertions(+), 2 deletions(-) diff --git a/gcc/fortran/ChangeLog.omp b/gcc/fortran/ChangeLog.omp index 24d4f84cf43..730308d9b72 100644 --- a/gcc/fortran/ChangeLog.omp +++ b/gcc/fortran/ChangeLog.omp @@ -1,3 +1,10 @@ +2022-07-05 Tobias Burnus + + Backport from mainline: + 2022-06-03 Tobias Burnus + + * openmp.cc (OMP_SCOPE_CLAUSES): Add firstprivate and allocate. + 2022-07-05 Tobias Burnus Backport from mainline: diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index ebc29c65b5b..64529f97336 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -4230,7 +4230,8 @@ cleanup: | OMP_CLAUSE_PRIVATE | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION) #define OMP_SCOPE_CLAUSES \ - (omp_mask (OMP_CLAUSE_PRIVATE) | OMP_CLAUSE_REDUCTION) + (omp_mask (OMP_CLAUSE_PRIVATE) |OMP_CLAUSE_FIRSTPRIVATE \ + | OMP_CLAUSE_REDUCTION | OMP_CLAUSE_ALLOCATE) #define OMP_SECTIONS_CLAUSES \ (omp_mask (OMP_CLAUSE_PRIVATE) | OMP_CLAUSE_FIRSTPRIVATE \ | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION | OMP_CLAUSE_ALLOCATE) diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index db614a4e899..7534b517e4c 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,11 @@ +2022-07-05 Tobias Burnus + + Backport from mainline: + 2022-06-03 Tobias Burnus + + * gfortran.dg/gomp/scope-5.f90: New test. + * gfortran.dg/gomp/scope-6.f90: New test. + 2022-07-05 Tobias Burnus Backport from mainline: diff --git a/gcc/testsuite/gfortran.dg/gomp/scope-5.f90 b/gcc/testsuite/gfortran.dg/gomp/scope-5.f90 new file mode 100644 index 00000000000..baddae51b42 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/scope-5.f90 @@ -0,0 +1,9 @@ +! { dg-do compile } + +subroutine foo () + integer f + f = 0; + !$omp scope firstprivate(f) ! { dg-error "firstprivate variable 'f' is private in outer context" } + f = f + 1 + !$omp end scope +end diff --git a/gcc/testsuite/gfortran.dg/gomp/scope-6.f90 b/gcc/testsuite/gfortran.dg/gomp/scope-6.f90 new file mode 100644 index 00000000000..9c595b1e117 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/scope-6.f90 @@ -0,0 +1,23 @@ +! { dg-additional-options "-fdump-tree-original" } + +module m + use iso_c_binding + !use omp_lib, only: omp_allocator_handle_kind + implicit none + integer, parameter :: omp_allocator_handle_kind = c_intptr_t + integer :: a = 0, b = 42, c = 0 + +contains + subroutine foo (h) + integer(omp_allocator_handle_kind), value :: h + !$omp scope private (a) firstprivate (b) reduction (+: c) allocate ( h : a , b , c) + if (b /= 42) & + error stop + a = 36 + b = 15 + c = c + 1 + !$omp end scope + end +end + +! { dg-final { scan-tree-dump "omp scope private\\(a\\) firstprivate\\(b\\) reduction\\(\\+:c\\) allocate\\(allocator\\(D\\.\[0-9\]+\\):a) allocate\\(allocator\\(D\\.\[0-9\]+\\):b) allocate\\(allocator\\(D\\.\[0-9\]+\\):c)" "original" } } diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp index 37780a713a4..7737c78d88e 100644 --- a/libgomp/ChangeLog.omp +++ b/libgomp/ChangeLog.omp @@ -1,3 +1,11 @@ +2022-07-05 Tobias Burnus + + Backport from mainline: + 2022-06-03 Tobias Burnus + + * libgomp.texi (OpenMP 5.2): Mark scope w/ firstprivate/allocate as Y. + * testsuite/libgomp.fortran/scope-2.f90: New test. + 2022-07-05 Tobias Burnus Backport from mainline: diff --git a/libgomp/libgomp.texi b/libgomp/libgomp.texi index 4c9225d11f6..82c08bf1fef 100644 --- a/libgomp/libgomp.texi +++ b/libgomp/libgomp.texi @@ -386,7 +386,7 @@ The OpenMP 4.5 specification is fully supported. @item Deprecation of delimited form of @code{declare target} @tab N @tab @item Reproducible semantics changed for @code{order(concurrent)} @tab N @tab @item @code{allocate} and @code{firstprivate} clauses on @code{scope} - @tab N @tab + @tab Y @tab @item @code{ompt_callback_work} @tab N @tab @item Default map-type for @code{map} clause in @code{target enter/exit data} @tab N @tab diff --git a/libgomp/testsuite/libgomp.fortran/scope-2.f90 b/libgomp/testsuite/libgomp.fortran/scope-2.f90 new file mode 100644 index 00000000000..f2e1593403e --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/scope-2.f90 @@ -0,0 +1,57 @@ +program main + implicit none + integer a(0:63) + integer r, r2, i, n + a = 0 + r = 0 + r2 = 0 + n = 64 + !$omp parallel + !$omp scope + !$omp scope firstprivate (n) + !$omp do + do i = 0, 63 + a(i) = a(i) + 1 + end do + !$omp end scope nowait + !$omp end scope nowait + + !$omp scope reduction(+: r) firstprivate (n) + !$omp do + do i = 0, 63 + r = r + i + if (a(i) /= 1) & + error stop + end do + !$omp end do nowait + !$omp barrier + if (n /= 64) then + error stop + else + n = 128 + end if + !$omp end scope nowait + + !$omp barrier + if (r /= 64 * 63 / 2) & + error stop + !$omp scope private (i) + !$omp scope reduction(+: r2) + !$omp do + do i = 0, 63 + r2 = r2 + 2 * i + a(i) = a(i) + i + end do + !$omp end do nowait + !$omp end scope + !$omp end scope nowait + if (r2 /= 64 * 63) & + error stop + !$omp do + do i = 0, 63 + if (a(i) /= i + 1) & + error stop + end do + !$omp end do nowait + !$omp end parallel +end program