From patchwork Thu Nov 10 10:46:46 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chung-Lin Tang X-Patchwork-Id: 693141 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org 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 3tF09t2h1jz9t25 for ; Thu, 10 Nov 2016 21:47:30 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="ejrg7Cqr"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :subject:to:cc:message-id:date:mime-version:content-type; q=dns; s=default; b=Snbodbi+y2KPzgcDYCUcbNaEmc4X67S+PMP/097NmhJItf0Iiw IrCwyOoKBWru8/BNiHdymOzOpQ8E4o3Audgqzs1OUE3RWewkNM1gKlEdo6qs3yas 3U7vUPO7N85fHjxpWrqpj1hTpRrJNxUeNhn//nPS6RztX/VDZ2Iw2h1LY= 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 :subject:to:cc:message-id:date:mime-version:content-type; s= default; bh=37RPqvF2sTkDTy02trKlNQBQdfY=; b=ejrg7CqrQRnDRbwujEPS ErgBT7DQFVLIoDezidIYjHabOyHfKbh0Jz7bXTmHMZDCHkLlSHip/Gl0iB7J3faR 6W3y7w6R+AJdZQQA3Oz3maJnfKLQulhUHaZif0tT2FhMzanOFPZF3jP3QJEKqrzr iVucH4p9oS06dTjX73HdCZw= Received: (qmail 46585 invoked by alias); 10 Nov 2016 10:47:13 -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 44227 invoked by uid 89); 10 Nov 2016 10:47:08 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL, BAYES_00, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_PASS, URIBL_RED autolearn=no version=3.3.2 spammy=ts.type, tstype, UD:ts.type, *2 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; Thu, 10 Nov 2016 10:46:58 +0000 Received: from svr-orw-mbx-02.mgc.mentorg.com ([147.34.90.202]) by relay1.mentorg.com with esmtp id 1c4msj-0002rV-3W from ChungLin_Tang@mentor.com ; Thu, 10 Nov 2016 02:46:57 -0800 Received: from svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) by svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) with Microsoft SMTP Server (TLS) id 15.0.1210.3; Thu, 10 Nov 2016 02:46:53 -0800 Received: from [0.0.0.0] (147.34.91.1) by svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) with Microsoft SMTP Server (TLS) id 15.0.1210.3 via Frontend Transport; Thu, 10 Nov 2016 02:46:50 -0800 From: Chung-Lin Tang Subject: [Patch 4/5] OpenACC tile clause support, Fortran front-end parts To: gcc-patches , Jakub Jelinek CC: Nathan Sidwell , Cesar Philippidis , Chung-Lin Tang Message-ID: <87a13495-a378-b5e1-8223-0f5679f98356@mentor.com> Date: Thu, 10 Nov 2016 18:46:46 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 The Fortran front-end patches. These were originally written by Cesar. Thanks, Chung-Lin 2016-XX-XX Cesar Philippidis fortran/ * openmp.c (resolve_oacc_positive_int_expr): Promote the warning to an error. (resolve_oacc_loop_blocks): Use integer zero to represent the '*' tile argument. (resolve_omp_clauses): Error on directives containing both tile and collapse clauses. * trans-openmp.c (gfc_trans_omp_do): Lower tiled loops like collapsed loops. gcc/testsuite/ * gfortran.dg/goacc/loop-2.f95: Change expected tile clause warnings to errors. * gfortran.dg/goacc/loop-5.f95: Likewise. * gfortran.dg/goacc/sie.f95: Likewise. * gfortran.dg/goacc/tile-1.f90: New test. * gfortran.dg/goacc/tile-2.f90: New test * gfortran.dg/goacc/tile-lowering.f95: New test. Index: fortran/openmp.c =================================================================== --- fortran/openmp.c (revision 241809) +++ fortran/openmp.c (working copy) @@ -3024,8 +3024,8 @@ resolve_oacc_positive_int_expr (gfc_expr *expr, co resolve_oacc_scalar_int_expr (expr, clause); if (expr->expr_type == EXPR_CONSTANT && expr->ts.type == BT_INTEGER && mpz_sgn(expr->value.integer) <= 0) - gfc_warning (0, "INTEGER expression of %s clause at %L must be positive", - clause, &expr->where); + gfc_error ("INTEGER expression of %s clause at %L must be positive", + clause, &expr->where); } /* Emits error when symbol is pointer, cray pointer or cray pointee @@ -3859,6 +3859,8 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_claus if (omp_clauses->wait_list) for (el = omp_clauses->wait_list; el; el = el->next) resolve_oacc_scalar_int_expr (el->expr, "WAIT"); + if (omp_clauses->collapse && omp_clauses->tile_list) + gfc_error ("Incompatible use of TILE and COLLAPSE at %L", &code->loc); } @@ -4964,11 +4966,11 @@ resolve_oacc_loop_blocks (gfc_code *code) if (el->expr == NULL) { /* NULL expressions are used to represent '*' arguments. - Convert those to a -1 expressions. */ + Convert those to a 0 expressions. */ el->expr = gfc_get_constant_expr (BT_INTEGER, gfc_default_integer_kind, &code->loc); - mpz_set_si (el->expr->value.integer, -1); + mpz_set_si (el->expr->value.integer, 0); } else { Index: fortran/trans-openmp.c =================================================================== --- fortran/trans-openmp.c (revision 241809) +++ fortran/trans-openmp.c (working copy) @@ -3162,7 +3162,18 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, vec inits = vNULL; dovar_init *di; unsigned ix; + gfc_expr_list *tile = do_clauses ? do_clauses->tile_list : clauses->tile_list; + /* Both collapsed and tiled loops are lowered the same way. In + OpenACC, those clauses are not compatible, so prioritize the tile + clause, if present. */ + if (tile) + { + collapse = 0; + for (gfc_expr_list *el = tile; el; el = el->next) + collapse++; + } + if (collapse <= 0) collapse = 1; Index: testsuite/gfortran.dg/goacc/loop-5.f95 =================================================================== --- testsuite/gfortran.dg/goacc/loop-5.f95 (revision 241809) +++ testsuite/gfortran.dg/goacc/loop-5.f95 (working copy) @@ -93,9 +93,6 @@ program test DO j = 1,10 ENDDO ENDDO - !$acc loop tile(-1) ! { dg-warning "must be positive" } - do i = 1,10 - enddo !$acc loop vector tile(*) DO i = 1,10 ENDDO @@ -129,9 +126,6 @@ program test DO j = 1,10 ENDDO ENDDO - !$acc loop tile(-1) ! { dg-warning "must be positive" } - do i = 1,10 - enddo !$acc loop vector tile(*) DO i = 1,10 ENDDO @@ -242,9 +236,6 @@ program test DO j = 1,10 ENDDO ENDDO - !$acc kernels loop tile(-1) ! { dg-warning "must be positive" } - do i = 1,10 - enddo !$acc kernels loop vector tile(*) DO i = 1,10 ENDDO @@ -333,9 +324,6 @@ program test DO j = 1,10 ENDDO ENDDO - !$acc parallel loop tile(-1) ! { dg-warning "must be positive" } - do i = 1,10 - enddo !$acc parallel loop vector tile(*) DO i = 1,10 ENDDO Index: testsuite/gfortran.dg/goacc/tile-1.f90 =================================================================== --- testsuite/gfortran.dg/goacc/tile-1.f90 (revision 0) +++ testsuite/gfortran.dg/goacc/tile-1.f90 (revision 0) @@ -0,0 +1,339 @@ +subroutine parloop + integer, parameter :: n = 100 + integer i, j, k, a + + !$acc parallel loop tile(10) + do i = 1, n + end do + + !$acc parallel loop tile(*) + do i = 1, n + end do + + !$acc parallel loop tile(10, *) + do i = 1, n + do j = 1, n + end do + end do + + !$acc parallel loop tile(10, *, i) ! { dg-error "" } + do i = 1, n + do j = 1, n + do k = 1, n + end do + end do + end do + + !$acc parallel loop tile ! { dg-error "Unclassifiable" } + do i = 1, n + end do + + !$acc parallel loop tile() ! { dg-error "Syntax error" } + do i = 1, n + end do + + !$acc parallel loop tile(,1) ! { dg-error "Syntax error" } + do i = 1, n + end do + + !$acc parallel loop tile(,,) ! { dg-error "Syntax error" } + do i = 1, n + end do + + !$acc parallel loop tile(1.1) ! { dg-error "requires a scalar INTEGER" } + do i = 1, n + end do + + !$acc parallel loop tile(-3) ! { dg-error "must be positive" } + do i = 1, n + end do + + !$acc parallel loop tile(10, -3) ! { dg-error "must be positive" } + do i = 1, n + do j = 1, n + end do + end do + + !$acc parallel loop tile(-100, 10, 5) ! { dg-error "must be positive" } + do i = 1, n + do j = 1, n + do k = 1, n + end do + end do + end do + + !$acc parallel loop tile(10, .true.) ! { dg-error "requires a scalar" } + do i = 1, n + do j = 1, n + end do + end do + + !$acc parallel loop tile(1, a) ! { dg-error "constant expression" } + do i = 1, n + do j = 1, n + end do + end do + + !$acc parallel loop tile(a, 1) ! { dg-error "constant expression" } + do i = 1, n + do j = 1, n + end do + end do + + !$acc parallel loop tile(2, 3) collapse (2) ! { dg-error "Incompatible use" } + do i = 1, n + do j = 1, n + end do + end do +end subroutine parloop + +subroutine par + integer, parameter :: n = 100 + integer i, j, k + + !$acc parallel + !$acc loop tile ! { dg-error "Unclassifiable" } + do i = 1, n + end do + + !$acc loop tile() ! { dg-error "Syntax error" } + do i = 1, n + end do + + !$acc loop tile(1) + do i = 1, n + end do + + !$acc loop tile(*) + do i = 1, n + end do + + !$acc loop tile(2) + do i = 1, n + do j = 1, n + end do + end do + + !$acc loop tile(-2) ! { dg-error "must be positive" } + do i = 1, n + end do + + !$acc loop tile(i) ! { dg-error "constant expression" } + do i = 1, n + end do + + !$acc loop tile(2, 2, 1) + do i = 1, n + do j = 1, n + do k = 1, n + end do + end do + end do + + !$acc parallel loop tile(2, 2) + do i = 1, n + do j = i+1, n, j ! { dg-error "rectangular iteration space" } + end do + end do + + !$acc loop vector tile(*) + do i = 1, n + end do + + !$acc loop worker tile(*) + do i = 1, n + end do + + !$acc loop gang tile(*) + do i = 1, n + end do + + !$acc loop vector gang tile(*) + do i = 1, n + end do + + !$acc loop vector worker tile(*) + do i = 1, n + end do + + !$acc loop gang worker tile(*) + do i = 1, n + end do + + !$acc loop tile(2, 3) collapse (2) ! { dg-error "Incompatible use" } + do i = 1, n + do j = 1, n + end do + end do + !$acc end parallel +end subroutine par + +subroutine kern + integer, parameter :: n = 100 + integer i, j, k + + !$acc kernels + !$acc loop tile ! { dg-error "Unclassifiable" } + do i = 1, n + end do + + !$acc loop tile() ! { dg-error "Syntax error" } + do i = 1, n + end do + + !$acc loop tile(1) + do i = 1, n + end do + + !$acc loop tile(*) + do i = 1, n + end do + + !$acc loop tile(2) + do i = 1, n + do j = 1, n + end do + end do + + !$acc loop tile(-2) ! { dg-error "must be positive" } + do i = 1, n + end do + + !$acc loop tile(i) ! { dg-error "constant expression" } + do i = 1, n + end do + + !$acc loop tile(2, 2, 1) + do i = 1, n + do j = 1, n + do k = 1, n + end do + end do + end do + + !$acc parallel loop tile(2, 2) + do i = 1, n + do j = 1, n + end do + end do + + !$acc loop vector tile(*) + do i = 1, n + end do + + !$acc loop worker tile(*) + do i = 1, n + end do + + !$acc loop gang tile(*) + do i = 1, n + end do + + !$acc loop vector gang tile(*) + do i = 1, n + end do + + !$acc loop vector worker tile(*) + do i = 1, n + end do + + !$acc loop gang worker tile(*) + do i = 1, n + end do + + !$acc loop tile(2, 3) collapse (2) ! { dg-error "Incompatible use" } + do i = 1, n + do j = 1, n + end do + end do + !$acc end kernels +end subroutine kern + +subroutine kernsloop + integer, parameter :: n = 100 + integer i, j, k, a + + !$acc kernels loop tile(10) + do i = 1, n + end do + + !$acc kernels loop tile(*) + do i = 1, n + end do + + !$acc kernels loop tile(10, *) + do i = 1, n + do j = 1, n + end do + end do + + !$acc kernels loop tile(10, *, i) ! { dg-error "" } + do i = 1, n + do j = 1, n + do k = 1, n + end do + end do + end do + + !$acc kernels loop tile ! { dg-error "Unclassifiable" } + do i = 1, n + end do + + !$acc kernels loop tile() ! { dg-error "Syntax error" } + do i = 1, n + end do + + !$acc kernels loop tile(,1) ! { dg-error "Syntax error" } + do i = 1, n + end do + + !$acc kernels loop tile(,,) ! { dg-error "Syntax error" } + do i = 1, n + end do + + !$acc kernels loop tile(1.1) ! { dg-error "requires a scalar INTEGER" } + do i = 1, n + end do + + !$acc kernels loop tile(-3) ! { dg-error "must be positive" } + do i = 1, n + end do + + !$acc kernels loop tile(10, -3) ! { dg-error "must be positive" } + do i = 1, n + do j = 1, n + end do + end do + + !$acc kernels loop tile(-100, 10, 5) ! { dg-error "must be positive" } + do i = 1, n + do j = 1, n + do k = 1, n + end do + end do + end do + + !$acc kernels loop tile(10, .true.) ! { dg-error "requires a scalar" } + do i = 1, n + do j = 1, n + end do + end do + + !$acc kernels loop tile(1, a) ! { dg-error "constant expression" } + do i = 1, n + do j = 1, n + end do + end do + + !$acc kernels loop tile(a, 1) ! { dg-error "constant expression" } + do i = 1, n + do j = 1, n + end do + end do + + !$acc kernels loop tile(2, 3) collapse (2) ! { dg-error "Incompatible use" } + do i = 1, n + do j = 1, n + end do + end do +end subroutine kernsloop Index: testsuite/gfortran.dg/goacc/tile-2.f90 =================================================================== --- testsuite/gfortran.dg/goacc/tile-2.f90 (revision 0) +++ testsuite/gfortran.dg/goacc/tile-2.f90 (revision 0) @@ -0,0 +1,21 @@ +subroutine par + integer ix, jx + + !$acc parallel + !$acc loop tile (*,*) ! { dg-error "not enough DO loops for tiled" } + do ix = 1, 30 + end do + + !$acc loop tile (*,*) + do ix = 1, 30 + do jx = 1, ix ! { dg-error "tiled loops don.t form rectangular" } + end do + end do + + !$acc loop tile (*) + do ix = 1, 30 + do jx = 1, ix + end do + end do + !$acc end parallel +end subroutine par Index: testsuite/gfortran.dg/goacc/sie.f95 =================================================================== --- testsuite/gfortran.dg/goacc/sie.f95 (revision 241809) +++ testsuite/gfortran.dg/goacc/sie.f95 (working copy) @@ -78,10 +78,10 @@ program test !$acc parallel num_gangs(i+1) !$acc end parallel - !$acc parallel num_gangs(-1) ! { dg-warning "must be positive" } + !$acc parallel num_gangs(-1) ! { dg-error "must be positive" } !$acc end parallel - !$acc parallel num_gangs(0) ! { dg-warning "must be positive" } + !$acc parallel num_gangs(0) ! { dg-error "must be positive" } !$acc end parallel !$acc parallel num_gangs() ! { dg-error "Invalid character in name" } @@ -107,10 +107,10 @@ program test !$acc parallel num_workers(i+1) !$acc end parallel - !$acc parallel num_workers(-1) ! { dg-warning "must be positive" } + !$acc parallel num_workers(-1) ! { dg-error "must be positive" } !$acc end parallel - !$acc parallel num_workers(0) ! { dg-warning "must be positive" } + !$acc parallel num_workers(0) ! { dg-error "must be positive" } !$acc end parallel !$acc parallel num_workers() ! { dg-error "Invalid character in name" } @@ -136,10 +136,10 @@ program test !$acc parallel vector_length(i+1) !$acc end parallel - !$acc parallel vector_length(-1) ! { dg-warning "must be positive" } + !$acc parallel vector_length(-1) ! { dg-error "must be positive" } !$acc end parallel - !$acc parallel vector_length(0) ! { dg-warning "must be positive" } + !$acc parallel vector_length(0) ! { dg-error "must be positive" } !$acc end parallel !$acc parallel vector_length() ! { dg-error "Invalid character in name" } @@ -166,10 +166,10 @@ program test !$acc loop gang(i+1) do i = 1,10 enddo - !$acc loop gang(-1) ! { dg-warning "must be positive" } + !$acc loop gang(-1) ! { dg-error "must be positive" } do i = 1,10 enddo - !$acc loop gang(0) ! { dg-warning "must be positive" } + !$acc loop gang(0) ! { dg-error "must be positive" } do i = 1,10 enddo !$acc loop gang() ! { dg-error "Invalid character in name" } @@ -198,10 +198,10 @@ program test !$acc loop worker(i+1) do i = 1,10 enddo - !$acc loop worker(-1) ! { dg-warning "must be positive" } + !$acc loop worker(-1) ! { dg-error "must be positive" } do i = 1,10 enddo - !$acc loop worker(0) ! { dg-warning "must be positive" } + !$acc loop worker(0) ! { dg-error "must be positive" } do i = 1,10 enddo !$acc loop worker() ! { dg-error "Invalid character in name" } @@ -230,10 +230,10 @@ program test !$acc loop vector(i+1) do i = 1,10 enddo - !$acc loop vector(-1) ! { dg-warning "must be positive" } + !$acc loop vector(-1) ! { dg-error "must be positive" } do i = 1,10 enddo - !$acc loop vector(0) ! { dg-warning "must be positive" } + !$acc loop vector(0) ! { dg-error "must be positive" } do i = 1,10 enddo !$acc loop vector() ! { dg-error "Invalid character in name" } @@ -249,4 +249,4 @@ program test do i = 1,10 enddo -end program test \ No newline at end of file +end program test Index: testsuite/gfortran.dg/goacc/tile-lowering.f95 =================================================================== --- testsuite/gfortran.dg/goacc/tile-lowering.f95 (revision 0) +++ testsuite/gfortran.dg/goacc/tile-lowering.f95 (revision 0) @@ -0,0 +1,292 @@ +! { dg-do compile } +! { dg-additional-options "-fdump-tree-original" } + +subroutine par + integer i, j, k + + !$acc parallel + !$acc loop tile (1) + do i = 1, 10 + end do + + !$acc loop tile (*) + do i = 1, 10 + end do + + !$acc loop tile (1,2) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc loop tile (*,2) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc loop tile (1,*) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc loop tile (*,*) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc loop tile (1,2,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc loop tile (*,2,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc loop tile (1,*,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc loop tile (1,2,*) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + !$acc end parallel +end subroutine par + +subroutine kerns + integer i, j, k + + !$acc kernels + !$acc loop tile (1) + do i = 1, 10 + end do + + !$acc loop tile (*) + do i = 1, 10 + end do + + !$acc loop tile (1,2) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc loop tile (*,2) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc loop tile (1,*) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc loop tile (*,*) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc loop tile (1,2,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc loop tile (*,2,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc loop tile (1,*,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc loop tile (1,2,*) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + !$acc end kernels +end subroutine kerns + +subroutine parloop + integer i, j, k + + !$acc parallel loop tile (1) + do i = 1, 10 + end do + + !$acc parallel loop tile (*) + do i = 1, 10 + end do + + !$acc parallel loop tile (1,2) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc parallel loop tile (*,2) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc parallel loop tile (1,*) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc parallel loop tile (*,*) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc parallel loop tile (1,2,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc parallel loop tile (*,2,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc parallel loop tile (1,*,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc parallel loop tile (1,2,*) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do +end subroutine parloop + +subroutine kernloop + integer i, j, k + + !$acc kernels loop tile (1) + do i = 1, 10 + end do + + !$acc kernels loop tile (*) + do i = 1, 10 + end do + + !$acc kernels loop tile (1,2) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc kernels loop tile (*,2) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc kernels loop tile (1,*) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc kernels loop tile (*,*) + do i = 1, 10 + do j = 1, 10 + end do + end do + + !$acc kernels loop tile (1,2,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc kernels loop tile (*,2,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc kernels loop tile (1,*,3) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do + + !$acc kernels loop tile (1,2,*) + do i = 1, 10 + do j = 1, 10 + do k = 1, 10 + end do + end do + end do +end subroutine kernloop + + +! { dg-final { scan-tree-dump-times "tile\\(1\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(0\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(1, 2\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(0, 2\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(1, 0\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(0, 0\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(1, 2, 3\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(0, 2, 3\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(1, 0, 3\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "tile\\(1, 2, 0\\)" 4 "original" } } +! { dg-final { scan-tree-dump-times "for \\(" 88 "original" } } +! { dg-final { scan-tree-dump-times "while \\(" 0 "original" } } Index: testsuite/gfortran.dg/goacc/loop-2.f95 =================================================================== --- testsuite/gfortran.dg/goacc/loop-2.f95 (revision 241809) +++ testsuite/gfortran.dg/goacc/loop-2.f95 (working copy) @@ -143,7 +143,7 @@ program test DO j = 1,10 ENDDO ENDDO - !$acc loop tile(-1) ! { dg-warning "must be positive" } + !$acc loop tile(-1) ! { dg-error "must be positive" } do i = 1,10 enddo !$acc loop tile(i) ! { dg-error "constant expression" } @@ -307,7 +307,7 @@ program test DO j = 1,10 ENDDO ENDDO - !$acc loop tile(-1) ! { dg-warning "must be positive" } + !$acc loop tile(-1) ! { dg-error "must be positive" } do i = 1,10 enddo !$acc loop tile(i) ! { dg-error "constant expression" } @@ -460,7 +460,7 @@ program test DO j = 1,10 ENDDO ENDDO - !$acc kernels loop tile(-1) ! { dg-warning "must be positive" } + !$acc kernels loop tile(-1) ! { dg-error "must be positive" } do i = 1,10 enddo !$acc kernels loop tile(i) ! { dg-error "constant expression" } @@ -612,7 +612,7 @@ program test DO j = 1,10 ENDDO ENDDO - !$acc parallel loop tile(-1) ! { dg-warning "must be positive" } + !$acc parallel loop tile(-1) ! { dg-error "must be positive" } do i = 1,10 enddo !$acc parallel loop tile(i) ! { dg-error "constant expression" }