From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id 2AC673857806; Fri, 6 Nov 2020 13:16:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 2AC673857806 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Thomas_Schwinge@mentor.com IronPort-SDR: WDCyPGczETuSvp1VJFeMjDI14DbbIsYNljJ0fHqVWnd4+QC3Cx0wrwxzQ2XD2L/ng/fdZq+cOR QZWvw2Ohx5EbeNQKrB+PTlWjhhXaOUuya9LjXbqhNcP91coKRPYKjCie4H7xNhdhmTCN6AM/wv VTsRLVqj7qcnBw0d3ylJ4++cnG19gG2ZT/tGtJNrnvDkkV4exJv0K9PF+E8Bz5jimMDnYQDSZN SEGXh8oft0WNyg1dKFjN1doEJOqvXC8uFSq/uLfFAT9YX5mhPAeQtO4X1Q9slmDlVgdG7KLPYQ 1X0= X-IronPort-AV: E=Sophos;i="5.77,456,1596528000"; d="scan'208,223";a="54889754" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 06 Nov 2020 05:16:45 -0800 IronPort-SDR: dFPRaG7u8PBPkBb2TDSYE8P4/+yNwt7uMBC6MMOoG3RCFrMKuJZuqRQ5/XQKYt56rnpwlo77JK KT+r0REm/+CSLGhvS70N3IGuRG6t6PATC4kShCAEAtPB3cL5RjPwQnhoUgjrgL/eb0wCuN/SYF WggNfh9lXy0+3aEYeaeGEMN/3wsxzE9uCfgySmfylW1uutc5R6aAlSX4yoh44YnUOMw7dvh3uD NHNpSrcmWtbFVrc+jJSKi2qG4KUrNEZcuCr6qir5cpq45TxBNBV1A1F5OusX5XpRjN5gSJJ54w GQ0= From: Thomas Schwinge To: , Subject: Re: Use existing middle end checking for Fortran OpenACC loop clauses In-Reply-To: <87a7lesvp0.fsf@euler.schwinge.homeip.net> References: <87a7lesvp0.fsf@euler.schwinge.homeip.net> User-Agent: Notmuch/0.29.3+94~g74c3f1b (https://notmuchmail.org) Emacs/26.3 (x86_64-pc-linux-gnu) Date: Fri, 6 Nov 2020 14:16:38 +0100 Message-ID: <87d00qeibt.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-09.mgc.mentorg.com (139.181.222.9) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_LOTSOFHASH, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Nov 2020 13:16:48 -0000 --=-=-= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi! On 2018-12-09T13:58:51+0100, I wrote: > Committed to trunk in r266922: > Use existing middle end checking for Fortran OpenACC loop clauses > > Don't duplicate in the Fortran front end what's generically being che= cked in > the middle end. > > gcc/fortran/ > * openmp.c (resolve_oacc_loop_blocks): Remove checking of Ope= nACC > 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. Similar to that, I've noticed inconsistent diagnostics in C/C++ vs. Fortran for OpenACC 'loop' clauses with arguments only allowed inside OpenACC 'kernels' regions, so I pushed "[Fortran] Remove OpenACC 'loop' inside 'parallel' special-case code" to master branch in commit 4c27f900950ed0ecb2897a8931c5cc348b1980be, and backported to releases/gcc-10 in commit f41ca73aa11f28ad7d847ac5bf7e07f8bc763721, see attached. Gr=C3=BC=C3=9Fe Thomas ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstra=C3=9Fe 201, 80634 M=C3=BCnch= en / Germany Registergericht M=C3=BCnchen HRB 106955, Gesch=C3=A4ftsf=C3=BChrer: Thomas = Heurung, Alexander Walter --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename="0001-Fortran-Remove-OpenACC-loop-inside-parallel-special-.patch" >From 4c27f900950ed0ecb2897a8931c5cc348b1980be Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Tue, 27 Oct 2020 10:43:27 +0100 Subject: [PATCH] [Fortran] Remove OpenACC 'loop' inside 'parallel' special-case code Instead, use the generic middle-end code, like already used for Fortran OpenACC 'loop' inside other compute constructs, orphaned 'loop' constructs, and C, C++ generally. gcc/fortran/ * openmp.c (oacc_is_parallel, resolve_oacc_params_in_parallel): Remove. (resolve_oacc_loop_blocks): Don't call the former. gcc/testsuite/ * gfortran.dg/goacc/loop-2-parallel-3.f95: Adjust. --- gcc/fortran/openmp.c | 37 ------------------- .../gfortran.dg/goacc/loop-2-parallel-3.f95 | 24 ++++++------ 2 files changed, 12 insertions(+), 49 deletions(-) diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 1891ac5591b..2270c858f39 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -6403,11 +6403,6 @@ resolve_omp_do (gfc_code *code) } } -static bool -oacc_is_parallel (gfc_code *code) -{ - return code->op == EXEC_OACC_PARALLEL || code->op == EXEC_OACC_PARALLEL_LOOP; -} static gfc_statement omp_code_to_statement (gfc_code *code) @@ -6666,26 +6661,6 @@ resolve_oacc_nested_loops (gfc_code *code, gfc_code* do_code, int collapse, } -static void -resolve_oacc_params_in_parallel (gfc_code *code, const char *clause, - const char *arg) -{ - fortran_omp_context *c; - - if (oacc_is_parallel (code)) - gfc_error ("!$ACC LOOP %s in PARALLEL region doesn't allow " - "%s arguments at %L", clause, arg, &code->loc); - for (c = omp_current_ctx; c; c = c->previous) - { - if (oacc_is_loop (c->code)) - break; - if (oacc_is_parallel (c->code)) - gfc_error ("!$ACC LOOP %s in PARALLEL region doesn't allow " - "%s arguments at %L", clause, arg, &code->loc); - } -} - - static void resolve_oacc_loop_blocks (gfc_code *code) { @@ -6697,18 +6672,6 @@ resolve_oacc_loop_blocks (gfc_code *code) gfc_error ("Tiled loop cannot be parallelized across gangs, workers and " "vectors at the same time at %L", &code->loc); - if (code->ext.omp_clauses->gang - && code->ext.omp_clauses->gang_num_expr) - resolve_oacc_params_in_parallel (code, "GANG", "num"); - - if (code->ext.omp_clauses->worker - && code->ext.omp_clauses->worker_expr) - resolve_oacc_params_in_parallel (code, "WORKER", "num"); - - if (code->ext.omp_clauses->vector - && code->ext.omp_clauses->vector_expr) - resolve_oacc_params_in_parallel (code, "VECTOR", "length"); - if (code->ext.omp_clauses->tile_list) { gfc_expr_list *el; diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-3.f95 b/gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-3.f95 index 03cae74c022..5379fba16ed 100644 --- a/gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-3.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-3.f95 @@ -5,52 +5,52 @@ program test integer :: i !$acc parallel - !$acc loop gang(5) ! { dg-error "num arguments" } + !$acc loop gang(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop gang(num:5) ! { dg-error "num arguments" } + !$acc loop gang(num:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop worker(5) ! { dg-error "num arguments" } + !$acc loop worker(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop worker(num:5) ! { dg-error "num arguments" } + !$acc loop worker(num:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop vector(5) ! { dg-error "length arguments" } + !$acc loop vector(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop vector(length:5) ! { dg-error "length arguments" } + !$acc loop vector(length:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO !$acc end parallel - !$acc parallel loop gang(5) ! { dg-error "num arguments" } + !$acc parallel loop gang(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop gang(num:5) ! { dg-error "num arguments" } + !$acc parallel loop gang(num:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop worker(5) ! { dg-error "num arguments" } + !$acc parallel loop worker(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop worker(num:5) ! { dg-error "num arguments" } + !$acc parallel loop worker(num:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop vector(5) ! { dg-error "length arguments" } + !$acc parallel loop vector(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop vector(length:5) ! { dg-error "length arguments" } + !$acc parallel loop vector(length:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO end -- 2.17.1 --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename="0001-Fortran-Remove-OpenACC-loop-inside-parallel-spec.g10.patch" >From f41ca73aa11f28ad7d847ac5bf7e07f8bc763721 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge Date: Tue, 27 Oct 2020 10:43:27 +0100 Subject: [PATCH] [Fortran] Remove OpenACC 'loop' inside 'parallel' special-case code Instead, use the generic middle-end code, like already used for Fortran OpenACC 'loop' inside other compute constructs, orphaned 'loop' constructs, and C, C++ generally. gcc/fortran/ * openmp.c (oacc_is_parallel, resolve_oacc_params_in_parallel): Remove. (resolve_oacc_loop_blocks): Don't call the former. gcc/testsuite/ * gfortran.dg/goacc/loop-2-parallel-3.f95: Adjust. (cherry picked from commit 4c27f900950ed0ecb2897a8931c5cc348b1980be) --- gcc/fortran/openmp.c | 37 ------------------- .../gfortran.dg/goacc/loop-2-parallel-3.f95 | 24 ++++++------ 2 files changed, 12 insertions(+), 49 deletions(-) diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 4f472dbc936..3175999dd4a 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -5895,11 +5895,6 @@ resolve_omp_do (gfc_code *code) } } -static bool -oacc_is_parallel (gfc_code *code) -{ - return code->op == EXEC_OACC_PARALLEL || code->op == EXEC_OACC_PARALLEL_LOOP; -} static gfc_statement omp_code_to_statement (gfc_code *code) @@ -6158,26 +6153,6 @@ resolve_oacc_nested_loops (gfc_code *code, gfc_code* do_code, int collapse, } -static void -resolve_oacc_params_in_parallel (gfc_code *code, const char *clause, - const char *arg) -{ - fortran_omp_context *c; - - if (oacc_is_parallel (code)) - gfc_error ("!$ACC LOOP %s in PARALLEL region doesn't allow " - "%s arguments at %L", clause, arg, &code->loc); - for (c = omp_current_ctx; c; c = c->previous) - { - if (oacc_is_loop (c->code)) - break; - if (oacc_is_parallel (c->code)) - gfc_error ("!$ACC LOOP %s in PARALLEL region doesn't allow " - "%s arguments at %L", clause, arg, &code->loc); - } -} - - static void resolve_oacc_loop_blocks (gfc_code *code) { @@ -6189,18 +6164,6 @@ resolve_oacc_loop_blocks (gfc_code *code) gfc_error ("Tiled loop cannot be parallelized across gangs, workers and " "vectors at the same time at %L", &code->loc); - if (code->ext.omp_clauses->gang - && code->ext.omp_clauses->gang_num_expr) - resolve_oacc_params_in_parallel (code, "GANG", "num"); - - if (code->ext.omp_clauses->worker - && code->ext.omp_clauses->worker_expr) - resolve_oacc_params_in_parallel (code, "WORKER", "num"); - - if (code->ext.omp_clauses->vector - && code->ext.omp_clauses->vector_expr) - resolve_oacc_params_in_parallel (code, "VECTOR", "length"); - if (code->ext.omp_clauses->tile_list) { gfc_expr_list *el; diff --git a/gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-3.f95 b/gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-3.f95 index 03cae74c022..5379fba16ed 100644 --- a/gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-3.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/loop-2-parallel-3.f95 @@ -5,52 +5,52 @@ program test integer :: i !$acc parallel - !$acc loop gang(5) ! { dg-error "num arguments" } + !$acc loop gang(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop gang(num:5) ! { dg-error "num arguments" } + !$acc loop gang(num:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop worker(5) ! { dg-error "num arguments" } + !$acc loop worker(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop worker(num:5) ! { dg-error "num arguments" } + !$acc loop worker(num:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop vector(5) ! { dg-error "length arguments" } + !$acc loop vector(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc loop vector(length:5) ! { dg-error "length arguments" } + !$acc loop vector(length:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO !$acc end parallel - !$acc parallel loop gang(5) ! { dg-error "num arguments" } + !$acc parallel loop gang(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop gang(num:5) ! { dg-error "num arguments" } + !$acc parallel loop gang(num:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop worker(5) ! { dg-error "num arguments" } + !$acc parallel loop worker(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop worker(num:5) ! { dg-error "num arguments" } + !$acc parallel loop worker(num:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop vector(5) ! { dg-error "length arguments" } + !$acc parallel loop vector(5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO - !$acc parallel loop vector(length:5) ! { dg-error "length arguments" } + !$acc parallel loop vector(length:5) ! { dg-error "argument not permitted" } DO i = 1,10 ENDDO end -- 2.17.1 --=-=-=--