From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 121464 invoked by alias); 9 Dec 2018 12:59:11 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 121443 invoked by uid 89); 9 Dec 2018 12:59:10 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=Split, workers, incorrectly, sk:nested X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 09 Dec 2018 12:59:04 +0000 Received: from svr-orw-mbx-06.mgc.mentorg.com ([147.34.90.206]) by relay1.mentorg.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-SHA384:256) id 1gVyfm-000252-Rk from Thomas_Schwinge@mentor.com ; Sun, 09 Dec 2018 04:59:02 -0800 Received: from svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) by SVR-ORW-MBX-06.mgc.mentorg.com (147.34.90.206) with Microsoft SMTP Server (TLS) id 15.0.1320.4; Sun, 9 Dec 2018 04:59:00 -0800 Received: from tftp-cs (147.34.91.1) by svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) with Microsoft SMTP Server id 15.0.1320.4 via Frontend Transport; Sun, 9 Dec 2018 04:59:00 -0800 Received: by tftp-cs (Postfix, from userid 49978) id 9799EC24AB; Sun, 9 Dec 2018 04:58:59 -0800 (PST) From: Thomas Schwinge To: , Subject: Use existing middle end checking for Fortran OpenACC loop clauses User-Agent: Notmuch/0.9-125-g4686d11 (http://notmuchmail.org) Emacs/25.2.2 (x86_64-pc-linux-gnu) Date: Sun, 09 Dec 2018 12:59:00 -0000 Message-ID: <87a7lesvp0.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-SW-Source: 2018-12/txt/msg00537.txt.bz2 Hi! Committed to trunk in r266922: commit fd1f371dd476ba3e76fb62eb76f1c1e23bd77b33 Author: tschwinge Date: Sun Dec 9 12:47:58 2018 +0000 Use existing middle end checking for Fortran OpenACC loop clauses =20=20=20=20 Don't duplicate in the Fortran front end what's generically being check= ed in the middle end. =20=20=20=20 gcc/fortran/ * openmp.c (resolve_oacc_loop_blocks): Remove checking of OpenA= CC loop clauses. gcc/testsuite/ * gfortran.dg/goacc/loop-2-kernels.f95: Update. * gfortran.dg/goacc/loop-2-parallel.f95: Likewise. * gfortran.dg/goacc/nested-parallelism.f90: Likewise. =20=20=20=20 git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266922 138bc75d-0d04-04= 10-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 3 + gcc/fortran/openmp.c | 70 ------------------= ---- gcc/testsuite/ChangeLog | 4 ++ gcc/testsuite/gfortran.dg/goacc/loop-2-kernels.f95 | 40 ++++++------- .../gfortran.dg/goacc/loop-2-parallel.f95 | 40 ++++++------- .../gfortran.dg/goacc/nested-parallelism.f90 | 12 ++-- 6 files changed, 53 insertions(+), 116 deletions(-) diff --git gcc/fortran/ChangeLog gcc/fortran/ChangeLog index ae1871ec7f8d..c6eb05174f69 100644 --- gcc/fortran/ChangeLog +++ gcc/fortran/ChangeLog @@ -1,5 +1,8 @@ 2018-12-09 Thomas Schwinge =20 + * openmp.c (resolve_oacc_loop_blocks): Remove checking of OpenACC + loop clauses. + PR fortran/88420 * openmp.c (resolve_oacc_loop_blocks): Remove "Clause SEQ conflicts with INDEPENDENT" diagnostic. diff --git gcc/fortran/openmp.c gcc/fortran/openmp.c index d97b8bfbb142..261a54a6015e 100644 --- gcc/fortran/openmp.c +++ gcc/fortran/openmp.c @@ -5659,12 +5659,6 @@ oacc_is_parallel (gfc_code *code) return code->op =3D=3D EXEC_OACC_PARALLEL || code->op =3D=3D EXEC_OACC_P= ARALLEL_LOOP; } =20 -static bool -oacc_is_kernels (gfc_code *code) -{ - return code->op =3D=3D EXEC_OACC_KERNELS || code->op =3D=3D EXEC_OACC_KE= RNELS_LOOP; -} - static gfc_statement omp_code_to_statement (gfc_code *code) { @@ -5846,73 +5840,9 @@ resolve_oacc_params_in_parallel (gfc_code *code, con= st char *clause, static void resolve_oacc_loop_blocks (gfc_code *code) { - fortran_omp_context *c; - if (!oacc_is_loop (code)) return; =20 - if (code->op =3D=3D EXEC_OACC_LOOP) - for (c =3D omp_current_ctx; c; c =3D c->previous) - { - if (oacc_is_loop (c->code)) - { - if (code->ext.omp_clauses->gang) - { - if (c->code->ext.omp_clauses->gang) - gfc_error ("Loop parallelized across gangs is not allowed " - "inside another loop parallelized across gangs at %L", - &code->loc); - if (c->code->ext.omp_clauses->worker) - gfc_error ("Loop parallelized across gangs is not allowed " - "inside loop parallelized across workers at %L", - &code->loc); - if (c->code->ext.omp_clauses->vector) - gfc_error ("Loop parallelized across gangs is not allowed " - "inside loop parallelized across vectors at %L", - &code->loc); - } - if (code->ext.omp_clauses->worker) - { - if (c->code->ext.omp_clauses->worker) - gfc_error ("Loop parallelized across workers is not allowed " - "inside another loop parallelized across workers at %L", - &code->loc); - if (c->code->ext.omp_clauses->vector) - gfc_error ("Loop parallelized across workers is not allowed " - "inside another loop parallelized across vectors at %L", - &code->loc); - } - if (code->ext.omp_clauses->vector) - if (c->code->ext.omp_clauses->vector) - gfc_error ("Loop parallelized across vectors is not allowed " - "inside another loop parallelized across vectors at %L", - &code->loc); - } - - if (oacc_is_parallel (c->code) || oacc_is_kernels (c->code)) - break; - } - - if (code->ext.omp_clauses->seq) - { - if (code->ext.omp_clauses->gang) - gfc_error ("Clause SEQ conflicts with GANG at %L", &code->loc); - if (code->ext.omp_clauses->worker) - gfc_error ("Clause SEQ conflicts with WORKER at %L", &code->loc); - if (code->ext.omp_clauses->vector) - gfc_error ("Clause SEQ conflicts with VECTOR at %L", &code->loc); - if (code->ext.omp_clauses->par_auto) - gfc_error ("Clause SEQ conflicts with AUTO at %L", &code->loc); - } - if (code->ext.omp_clauses->par_auto) - { - if (code->ext.omp_clauses->gang) - gfc_error ("Clause AUTO conflicts with GANG at %L", &code->loc); - if (code->ext.omp_clauses->worker) - gfc_error ("Clause AUTO conflicts with WORKER at %L", &code->loc); - if (code->ext.omp_clauses->vector) - gfc_error ("Clause AUTO conflicts with VECTOR at %L", &code->loc); - } if (code->ext.omp_clauses->tile_list && code->ext.omp_clauses->gang && code->ext.omp_clauses->worker && code->ext.omp_clauses->vector) gfc_error ("Tiled loop cannot be parallelized across gangs, workers an= d " diff --git gcc/testsuite/ChangeLog gcc/testsuite/ChangeLog index 7bee068aabf3..192a29ee971c 100644 --- gcc/testsuite/ChangeLog +++ gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2018-12-09 Thomas Schwinge =20 + * gfortran.dg/goacc/loop-2-kernels.f95: Update. + * gfortran.dg/goacc/loop-2-parallel.f95: Likewise. + * gfortran.dg/goacc/nested-parallelism.f90: Likewise. + * gfortran.dg/goacc/loop-2.f95: Split into... * gfortran.dg/goacc/loop-2-kernels-nested.f95: ... this new file... diff --git gcc/testsuite/gfortran.dg/goacc/loop-2-kernels.f95 gcc/testsuite= /gfortran.dg/goacc/loop-2-kernels.f95 index 25a6be162fdd..874c62d42786 100644 --- gcc/testsuite/gfortran.dg/goacc/loop-2-kernels.f95 +++ gcc/testsuite/gfortran.dg/goacc/loop-2-kernels.f95 @@ -31,11 +31,11 @@ program test !$acc loop worker=20 DO j =3D 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "inner loop uses same OpenACC paralleli= sm as containing loop" } DO j =3D 1,10 ENDDO ENDDO - !$acc loop seq gang ! { dg-error "conflicts with" } + !$acc loop seq gang ! { dg-error "'seq' overrides other OpenACC loop s= pecifiers" } DO i =3D 1,10 ENDDO =20 @@ -53,14 +53,14 @@ program test !$acc loop vector=20 DO j =3D 1,10 ENDDO - !$acc loop worker ! { dg-error "not allowed" } + !$acc loop worker ! { dg-error "inner loop uses same OpenACC paralle= lism as containing loop" } DO j =3D 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "" "TODO" { xfail *-*-* } } DO j =3D 1,10 ENDDO ENDDO - !$acc loop seq worker ! { dg-error "conflicts with" } + !$acc loop seq worker ! { dg-error "'seq' overrides other OpenACC loop= specifiers" } DO i =3D 1,10 ENDDO !$acc loop gang worker @@ -78,17 +78,17 @@ program test ENDDO !$acc loop vector DO i =3D 1,10 - !$acc loop vector ! { dg-error "not allowed" } + !$acc loop vector ! { dg-error "inner loop uses same OpenACC paralle= lism as containing loop" } DO j =3D 1,10 ENDDO - !$acc loop worker ! { dg-error "not allowed" } + !$acc loop worker ! { dg-error "" "TODO" { xfail *-*-* } } DO j =3D 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "" "TODO" { xfail *-*-* } } DO j =3D 1,10 ENDDO ENDDO - !$acc loop seq vector ! { dg-error "conflicts with" } + !$acc loop seq vector ! { dg-error "'seq' overrides other OpenACC loop= specifiers" } DO i =3D 1,10 ENDDO !$acc loop gang vector @@ -101,16 +101,16 @@ program test !$acc loop auto DO i =3D 1,10 ENDDO - !$acc loop seq auto ! { dg-error "conflicts with" } + !$acc loop seq auto ! { dg-error "'seq' overrides other OpenACC loop s= pecifiers" } DO i =3D 1,10 ENDDO - !$acc loop gang auto ! { dg-error "conflicts with" } + !$acc loop gang auto ! { dg-error "'auto' conflicts with other OpenACC= loop specifiers" } DO i =3D 1,10 ENDDO - !$acc loop worker auto ! { dg-error "conflicts with" } + !$acc loop worker auto ! { dg-error "'auto' conflicts with other OpenA= CC loop specifiers" } DO i =3D 1,10 ENDDO - !$acc loop vector auto ! { dg-error "conflicts with" } + !$acc loop vector auto ! { dg-error "'auto' conflicts with other OpenA= CC loop specifiers" } DO i =3D 1,10 ENDDO !$acc end kernels @@ -133,7 +133,7 @@ program test !$acc kernels loop gang(static:*) DO i =3D 1,10 ENDDO - !$acc kernels loop seq gang ! { dg-error "conflicts with" } + !$acc kernels loop seq gang ! { dg-error "'seq' overrides other OpenACC = loop specifiers" } DO i =3D 1,10 ENDDO =20 @@ -146,7 +146,7 @@ program test !$acc kernels loop worker(num:5) DO i =3D 1,10 ENDDO - !$acc kernels loop seq worker ! { dg-error "conflicts with" } + !$acc kernels loop seq worker ! { dg-error "'seq' overrides other OpenAC= C loop specifiers" } DO i =3D 1,10 ENDDO !$acc kernels loop gang worker @@ -162,7 +162,7 @@ program test !$acc kernels loop vector(length:5) DO i =3D 1,10 ENDDO - !$acc kernels loop seq vector ! { dg-error "conflicts with" } + !$acc kernels loop seq vector ! { dg-error "'seq' overrides other OpenAC= C loop specifiers" } DO i =3D 1,10 ENDDO !$acc kernels loop gang vector @@ -175,16 +175,16 @@ program test !$acc kernels loop auto DO i =3D 1,10 ENDDO - !$acc kernels loop seq auto ! { dg-error "conflicts with" } + !$acc kernels loop seq auto ! { dg-error "'seq' overrides other OpenACC = loop specifiers" } DO i =3D 1,10 ENDDO - !$acc kernels loop gang auto ! { dg-error "conflicts with" } + !$acc kernels loop gang auto ! { dg-error "'auto' conflicts with other O= penACC loop specifiers" } DO i =3D 1,10 ENDDO - !$acc kernels loop worker auto ! { dg-error "conflicts with" } + !$acc kernels loop worker auto ! { dg-error "'auto' conflicts with other= OpenACC loop specifiers" } DO i =3D 1,10 ENDDO - !$acc kernels loop vector auto ! { dg-error "conflicts with" } + !$acc kernels loop vector auto ! { dg-error "'auto' conflicts with other= OpenACC loop specifiers" } DO i =3D 1,10 ENDDO end diff --git gcc/testsuite/gfortran.dg/goacc/loop-2-parallel.f95 gcc/testsuit= e/gfortran.dg/goacc/loop-2-parallel.f95 index 6338f10fc617..db8187e5903c 100644 --- gcc/testsuite/gfortran.dg/goacc/loop-2-parallel.f95 +++ gcc/testsuite/gfortran.dg/goacc/loop-2-parallel.f95 @@ -25,11 +25,11 @@ program test !$acc loop worker=20 DO j =3D 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "inner loop uses same OpenACC paralleli= sm as containing loop" } DO j =3D 1,10 ENDDO ENDDO - !$acc loop seq gang ! { dg-error "conflicts with" } + !$acc loop seq gang ! { dg-error "'seq' overrides other OpenACC loop s= pecifiers" } DO i =3D 1,10 ENDDO =20 @@ -41,14 +41,14 @@ program test !$acc loop vector=20 DO j =3D 1,10 ENDDO - !$acc loop worker ! { dg-error "not allowed" } + !$acc loop worker ! { dg-error "inner loop uses same OpenACC paralle= lism as containing loop" } DO j =3D 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "incorrectly nested OpenACC loop parall= elism" } DO j =3D 1,10 ENDDO ENDDO - !$acc loop seq worker ! { dg-error "conflicts with" } + !$acc loop seq worker ! { dg-error "'seq' overrides other OpenACC loop= specifiers" } DO i =3D 1,10 ENDDO !$acc loop gang worker @@ -60,17 +60,17 @@ program test ENDDO !$acc loop vector DO i =3D 1,10 - !$acc loop vector ! { dg-error "not allowed" } + !$acc loop vector ! { dg-error "inner loop uses same OpenACC paralle= lism as containing loop" } DO j =3D 1,10 ENDDO - !$acc loop worker ! { dg-error "not allowed" } + !$acc loop worker ! { dg-error "incorrectly nested OpenACC loop para= llelism" } DO j =3D 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "incorrectly nested OpenACC loop parall= elism" } DO j =3D 1,10 ENDDO ENDDO - !$acc loop seq vector ! { dg-error "conflicts with" } + !$acc loop seq vector ! { dg-error "'seq' overrides other OpenACC loop= specifiers" } DO i =3D 1,10 ENDDO !$acc loop gang vector @@ -83,16 +83,16 @@ program test !$acc loop auto DO i =3D 1,10 ENDDO - !$acc loop seq auto ! { dg-error "conflicts with" } + !$acc loop seq auto ! { dg-error "'seq' overrides other OpenACC loop s= pecifiers" } DO i =3D 1,10 ENDDO - !$acc loop gang auto ! { dg-error "conflicts with" } + !$acc loop gang auto ! { dg-error "'auto' conflicts with other OpenACC= loop specifiers" } DO i =3D 1,10 ENDDO - !$acc loop worker auto ! { dg-error "conflicts with" } + !$acc loop worker auto ! { dg-error "'auto' conflicts with other OpenA= CC loop specifiers" } DO i =3D 1,10 ENDDO - !$acc loop vector auto ! { dg-error "conflicts with" } + !$acc loop vector auto ! { dg-error "'auto' conflicts with other OpenA= CC loop specifiers" } DO i =3D 1,10 ENDDO !$acc end parallel @@ -109,14 +109,14 @@ program test !$acc parallel loop gang(static:*) DO i =3D 1,10 ENDDO - !$acc parallel loop seq gang ! { dg-error "conflicts with" } + !$acc parallel loop seq gang ! { dg-error "'seq' overrides other OpenACC= loop specifiers" } DO i =3D 1,10 ENDDO =20 !$acc parallel loop worker DO i =3D 1,10 ENDDO - !$acc parallel loop seq worker ! { dg-error "conflicts with" } + !$acc parallel loop seq worker ! { dg-error "'seq' overrides other OpenA= CC loop specifiers" } DO i =3D 1,10 ENDDO !$acc parallel loop gang worker @@ -126,7 +126,7 @@ program test !$acc parallel loop vector DO i =3D 1,10 ENDDO - !$acc parallel loop seq vector ! { dg-error "conflicts with" } + !$acc parallel loop seq vector ! { dg-error "'seq' overrides other OpenA= CC loop specifiers" } DO i =3D 1,10 ENDDO !$acc parallel loop gang vector @@ -139,16 +139,16 @@ program test !$acc parallel loop auto DO i =3D 1,10 ENDDO - !$acc parallel loop seq auto ! { dg-error "conflicts with" } + !$acc parallel loop seq auto ! { dg-error "'seq' overrides other OpenACC= loop specifiers" } DO i =3D 1,10 ENDDO - !$acc parallel loop gang auto ! { dg-error "conflicts with" } + !$acc parallel loop gang auto ! { dg-error "'auto' conflicts with other = OpenACC loop specifiers" } DO i =3D 1,10 ENDDO - !$acc parallel loop worker auto ! { dg-error "conflicts with" } + !$acc parallel loop worker auto ! { dg-error "'auto' conflicts with othe= r OpenACC loop specifiers" } DO i =3D 1,10 ENDDO - !$acc parallel loop vector auto ! { dg-error "conflicts with" } + !$acc parallel loop vector auto ! { dg-error "'auto' conflicts with othe= r OpenACC loop specifiers" } DO i =3D 1,10 ENDDO end diff --git gcc/testsuite/gfortran.dg/goacc/nested-parallelism.f90 gcc/tests= uite/gfortran.dg/goacc/nested-parallelism.f90 index 6ebef6a4547a..1c192892c160 100644 --- gcc/testsuite/gfortran.dg/goacc/nested-parallelism.f90 +++ gcc/testsuite/gfortran.dg/goacc/nested-parallelism.f90 @@ -6,7 +6,7 @@ program np =20 !$acc parallel loop gang do i =3D 1, n - !$acc loop gang ! { dg-error "gangs is not allowed inside another loo= p parallelized across gangs" } + !$acc loop gang ! { dg-error "inner loop uses same OpenACC parallelis= m as containing loop" } do j =3D 1, n end do =20 @@ -21,11 +21,11 @@ program np =20=20=20 !$acc parallel loop worker do i =3D 1, n - !$acc loop gang ! { dg-error "gangs is not allowed inside loop parall= elized across workers" } + !$acc loop gang ! { dg-error "incorrectly nested OpenACC loop paralle= lism" } do j =3D 1, n end do =20 - !$acc loop worker ! { dg-error "workers is not allowed inside another= loop parallelized across workers" } + !$acc loop worker ! { dg-error "inner loop uses same OpenACC parallel= ism as containing loop" } do j =3D 1, n end do =20 @@ -36,15 +36,15 @@ program np =20 !$acc parallel loop vector do i =3D 1, n - !$acc loop gang ! { dg-error "gangs is not allowed inside loop parall= elized across vectors" } + !$acc loop gang ! { dg-error "incorrectly nested OpenACC loop paralle= lism" } do j =3D 1, n end do =20 - !$acc loop worker ! { dg-error "workers is not allowed inside another= loop parallelized across vectors" } + !$acc loop worker ! { dg-error "incorrectly nested OpenACC loop paral= lelism" } do j =3D 1, n end do =20 - !$acc loop vector ! { dg-error "vectors is not allowed inside another= loop parallelized across vectors" } + !$acc loop vector ! { dg-error "inner loop uses same OpenACC parallel= ism as containing loop" } do j =3D 1, n end do=20=20=20=20=20 end do Gr=C3=BC=C3=9Fe Thomas