From patchwork Sun Dec 9 12:58:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 1009946 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-491963-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="hfsO0LyL"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 43CR9n10W5z9s3C for ; Sun, 9 Dec 2018 23:59:23 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:mime-version:content-type :content-transfer-encoding; q=dns; s=default; b=MZS2YCJJC1+n41ho sDpBpVc+946B1F3IvNmX/i9vzghjKS9nmPlK/wjm1ETkkAK/kq3rsAjebgyOYSFJ 7CVP40GQl33ID+Q7dNQ02vTz6+dx+TGXVyckSmG0Tlhnsn3ijnmqSAvZZ+9/NMVn 9+JqCa78dXJHtChDZzsRzy/dY78= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:subject:date:message-id:mime-version:content-type :content-transfer-encoding; s=default; bh=Vn6EXpsKEEGIn+dGJSzhVQ NL/Ic=; b=hfsO0LyLS0poyTlbvYd+BuxzAzDJp/ubFj+S5uXLYyoFlyOeTo0hie KSvdI7Zwp5HfPmABO8Bl9njVCEfa2t0PzFXhB1LkPHsvrfiO+qHCqV8xBwxOSW/u g0JAjV7KKZG70eumw/n+aOqpkyQX9/2bjV77m3NKA4m7fmA2let2E= 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-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@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, 9 Dec 2018 13:58:51 +0100 Message-ID: <87a7lesvp0.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 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 Don't duplicate in the Fortran front end what's generically being checked in the middle end. gcc/fortran/ * openmp.c (resolve_oacc_loop_blocks): Remove checking of OpenACC 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266922 138bc75d-0d04-0410-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(-) Grüße Thomas 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 + * 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 == EXEC_OACC_PARALLEL || code->op == EXEC_OACC_PARALLEL_LOOP; } -static bool -oacc_is_kernels (gfc_code *code) -{ - return code->op == EXEC_OACC_KERNELS || code->op == EXEC_OACC_KERNELS_LOOP; -} - static gfc_statement omp_code_to_statement (gfc_code *code) { @@ -5846,73 +5840,9 @@ resolve_oacc_params_in_parallel (gfc_code *code, const char *clause, static void resolve_oacc_loop_blocks (gfc_code *code) { - fortran_omp_context *c; - if (!oacc_is_loop (code)) return; - if (code->op == EXEC_OACC_LOOP) - for (c = omp_current_ctx; c; c = 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 and " 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 + * 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 DO j = 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "inner loop uses same OpenACC parallelism as containing loop" } DO j = 1,10 ENDDO ENDDO - !$acc loop seq gang ! { dg-error "conflicts with" } + !$acc loop seq gang ! { dg-error "'seq' overrides other OpenACC loop specifiers" } DO i = 1,10 ENDDO @@ -53,14 +53,14 @@ program test !$acc loop vector DO j = 1,10 ENDDO - !$acc loop worker ! { dg-error "not allowed" } + !$acc loop worker ! { dg-error "inner loop uses same OpenACC parallelism as containing loop" } DO j = 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "" "TODO" { xfail *-*-* } } DO j = 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 = 1,10 ENDDO !$acc loop gang worker @@ -78,17 +78,17 @@ program test ENDDO !$acc loop vector DO i = 1,10 - !$acc loop vector ! { dg-error "not allowed" } + !$acc loop vector ! { dg-error "inner loop uses same OpenACC parallelism as containing loop" } DO j = 1,10 ENDDO - !$acc loop worker ! { dg-error "not allowed" } + !$acc loop worker ! { dg-error "" "TODO" { xfail *-*-* } } DO j = 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "" "TODO" { xfail *-*-* } } DO j = 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 = 1,10 ENDDO !$acc loop gang vector @@ -101,16 +101,16 @@ program test !$acc loop auto DO i = 1,10 ENDDO - !$acc loop seq auto ! { dg-error "conflicts with" } + !$acc loop seq auto ! { dg-error "'seq' overrides other OpenACC loop specifiers" } DO i = 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 = 1,10 ENDDO - !$acc loop worker auto ! { dg-error "conflicts with" } + !$acc loop worker auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" } DO i = 1,10 ENDDO - !$acc loop vector auto ! { dg-error "conflicts with" } + !$acc loop vector auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" } DO i = 1,10 ENDDO !$acc end kernels @@ -133,7 +133,7 @@ program test !$acc kernels loop gang(static:*) DO i = 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 = 1,10 ENDDO @@ -146,7 +146,7 @@ program test !$acc kernels loop worker(num:5) DO i = 1,10 ENDDO - !$acc kernels loop seq worker ! { dg-error "conflicts with" } + !$acc kernels loop seq worker ! { dg-error "'seq' overrides other OpenACC loop specifiers" } DO i = 1,10 ENDDO !$acc kernels loop gang worker @@ -162,7 +162,7 @@ program test !$acc kernels loop vector(length:5) DO i = 1,10 ENDDO - !$acc kernels loop seq vector ! { dg-error "conflicts with" } + !$acc kernels loop seq vector ! { dg-error "'seq' overrides other OpenACC loop specifiers" } DO i = 1,10 ENDDO !$acc kernels loop gang vector @@ -175,16 +175,16 @@ program test !$acc kernels loop auto DO i = 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 = 1,10 ENDDO - !$acc kernels loop gang auto ! { dg-error "conflicts with" } + !$acc kernels loop gang auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" } DO i = 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 = 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 = 1,10 ENDDO end diff --git gcc/testsuite/gfortran.dg/goacc/loop-2-parallel.f95 gcc/testsuite/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 DO j = 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "inner loop uses same OpenACC parallelism as containing loop" } DO j = 1,10 ENDDO ENDDO - !$acc loop seq gang ! { dg-error "conflicts with" } + !$acc loop seq gang ! { dg-error "'seq' overrides other OpenACC loop specifiers" } DO i = 1,10 ENDDO @@ -41,14 +41,14 @@ program test !$acc loop vector DO j = 1,10 ENDDO - !$acc loop worker ! { dg-error "not allowed" } + !$acc loop worker ! { dg-error "inner loop uses same OpenACC parallelism as containing loop" } DO j = 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "incorrectly nested OpenACC loop parallelism" } DO j = 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 = 1,10 ENDDO !$acc loop gang worker @@ -60,17 +60,17 @@ program test ENDDO !$acc loop vector DO i = 1,10 - !$acc loop vector ! { dg-error "not allowed" } + !$acc loop vector ! { dg-error "inner loop uses same OpenACC parallelism as containing loop" } DO j = 1,10 ENDDO - !$acc loop worker ! { dg-error "not allowed" } + !$acc loop worker ! { dg-error "incorrectly nested OpenACC loop parallelism" } DO j = 1,10 ENDDO - !$acc loop gang ! { dg-error "not allowed" } + !$acc loop gang ! { dg-error "incorrectly nested OpenACC loop parallelism" } DO j = 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 = 1,10 ENDDO !$acc loop gang vector @@ -83,16 +83,16 @@ program test !$acc loop auto DO i = 1,10 ENDDO - !$acc loop seq auto ! { dg-error "conflicts with" } + !$acc loop seq auto ! { dg-error "'seq' overrides other OpenACC loop specifiers" } DO i = 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 = 1,10 ENDDO - !$acc loop worker auto ! { dg-error "conflicts with" } + !$acc loop worker auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" } DO i = 1,10 ENDDO - !$acc loop vector auto ! { dg-error "conflicts with" } + !$acc loop vector auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" } DO i = 1,10 ENDDO !$acc end parallel @@ -109,14 +109,14 @@ program test !$acc parallel loop gang(static:*) DO i = 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 = 1,10 ENDDO !$acc parallel loop worker DO i = 1,10 ENDDO - !$acc parallel loop seq worker ! { dg-error "conflicts with" } + !$acc parallel loop seq worker ! { dg-error "'seq' overrides other OpenACC loop specifiers" } DO i = 1,10 ENDDO !$acc parallel loop gang worker @@ -126,7 +126,7 @@ program test !$acc parallel loop vector DO i = 1,10 ENDDO - !$acc parallel loop seq vector ! { dg-error "conflicts with" } + !$acc parallel loop seq vector ! { dg-error "'seq' overrides other OpenACC loop specifiers" } DO i = 1,10 ENDDO !$acc parallel loop gang vector @@ -139,16 +139,16 @@ program test !$acc parallel loop auto DO i = 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 = 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 = 1,10 ENDDO - !$acc parallel loop worker auto ! { dg-error "conflicts with" } + !$acc parallel loop worker auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" } DO i = 1,10 ENDDO - !$acc parallel loop vector auto ! { dg-error "conflicts with" } + !$acc parallel loop vector auto ! { dg-error "'auto' conflicts with other OpenACC loop specifiers" } DO i = 1,10 ENDDO end diff --git gcc/testsuite/gfortran.dg/goacc/nested-parallelism.f90 gcc/testsuite/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 !$acc parallel loop gang do i = 1, n - !$acc loop gang ! { dg-error "gangs is not allowed inside another loop parallelized across gangs" } + !$acc loop gang ! { dg-error "inner loop uses same OpenACC parallelism as containing loop" } do j = 1, n end do @@ -21,11 +21,11 @@ program np !$acc parallel loop worker do i = 1, n - !$acc loop gang ! { dg-error "gangs is not allowed inside loop parallelized across workers" } + !$acc loop gang ! { dg-error "incorrectly nested OpenACC loop parallelism" } do j = 1, n end do - !$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 parallelism as containing loop" } do j = 1, n end do @@ -36,15 +36,15 @@ program np !$acc parallel loop vector do i = 1, n - !$acc loop gang ! { dg-error "gangs is not allowed inside loop parallelized across vectors" } + !$acc loop gang ! { dg-error "incorrectly nested OpenACC loop parallelism" } do j = 1, n end do - !$acc loop worker ! { dg-error "workers is not allowed inside another loop parallelized across vectors" } + !$acc loop worker ! { dg-error "incorrectly nested OpenACC loop parallelism" } do j = 1, n end do - !$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 parallelism as containing loop" } do j = 1, n end do end do