From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15900 invoked by alias); 5 Sep 2018 19:52:18 -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 15839 invoked by uid 89); 5 Sep 2018 19:52:17 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL,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=axes, forthcoming, 1821 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; Wed, 05 Sep 2018 19:52:13 +0000 Received: from svr-orw-mbx-04.mgc.mentorg.com ([147.34.90.204]) by relay1.mentorg.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-SHA384:256) id 1fxdqU-0006C5-RZ from Cesar_Philippidis@mentor.com ; Wed, 05 Sep 2018 12:52:10 -0700 Received: from [127.0.0.1] (147.34.91.1) by SVR-ORW-MBX-04.mgc.mentorg.com (147.34.90.204) with Microsoft SMTP Server (TLS) id 15.0.1320.4; Wed, 5 Sep 2018 12:52:07 -0700 From: Cesar Philippidis Subject: [openacc] Teach gfortran to lower OpenACC routine dims To: "gcc-patches@gcc.gnu.org" , Fortran List , Jakub Jelinek Message-ID: Date: Wed, 05 Sep 2018 19:52:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------4E6520EC089714D0F5090F43" X-SW-Source: 2018-09/txt/msg00368.txt.bz2 --------------4E6520EC089714D0F5090F43 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-length: 605 At present, gfortran does not encode the gang, worker or vector parallelism clauses when it creates acc routines dim attribute for subroutines and functions. While support for acc routine is lacking in other areas in gfortran (including modules), this patch is important because it encodes the parallelism attributes using the same function as the C and C++ FEs. This will become important with the forthcoming nvptx vector length extensions, because large vectors are not supported in acc routines yet. Is this OK for trunk? I regtested and bootstrapped for x86_64 with nvptx offloading. Thanks, Cesar --------------4E6520EC089714D0F5090F43 Content-Type: text/x-patch; name="0001-openacc-Make-GFC-default-to-1-for-OpenACC-routine-di.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename*0="0001-openacc-Make-GFC-default-to-1-for-OpenACC-routine-di.pa"; filename*1="tch" Content-length: 20378 [openacc] Teach gfortran to lower OpenACC routine dims gcc/fortran/ * gfortran.h (oacc_function): New enum. (gfc_oacc_routine_name): Add locus loc field. * openmp.c (gfc_oacc_routine_dims): Return oacc_function. (gfc_match_oacc_routine): Update routine clause syntax checking. Populate oacc_function attribute with dims. * trans-decl.c (add_attributes_to_decl): Use oacc_build_routine_dims to construct routine dims. gcc/testsuite/ * gfortran.dg/goacc/classify-routine.f95: Adjust test. * gfortran.dg/goacc/pr71704.f90: Likewise. * gfortran.dg/goacc/routine-6.f90: Likewise. * gfortran.dg/goacc/routine-8.f90: Likewise. * gfortran.dg/goacc/routine-level-of-parallelism-1.f90: Likewise. libgomp/ * testsuite/libgomp.oacc-fortran/routine-1.f90: Adjust test. * testsuite/libgomp.oacc-fortran/routine-2.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-3.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-4.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-5.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-7.f90: Likewise. * testsuite/libgomp.oacc-fortran/routine-9.f90: Likewise. * libgomp.oacc-fortran/host_data-2.f90: Likewise. * libgomp.oacc-fortran/host_data-3.f: Likewise. * libgomp.oacc-fortran/host_data-4.f90: Likewise. diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 04b0024a992..3675f2e8d52 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -316,6 +316,16 @@ enum save_state { SAVE_NONE = 0, SAVE_EXPLICIT, SAVE_IMPLICIT }; +/* Flags to keep track of ACC routine states. */ +enum oacc_function +{ OACC_FUNCTION_NONE = 0, + OACC_FUNCTION_GANG, + OACC_FUNCTION_WORKER, + OACC_FUNCTION_VECTOR, + OACC_FUNCTION_SEQ, + OACC_FUNCTION_AUTO +}; + /* Strings for all symbol attributes. We use these for dumping the parse tree, in error messages, and also when reading and writing modules. In symbol.c. */ @@ -1726,6 +1736,7 @@ typedef struct gfc_oacc_routine_name struct gfc_symbol *sym; struct gfc_omp_clauses *clauses; struct gfc_oacc_routine_name *next; + locus loc; } gfc_oacc_routine_name; diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 94a7f7eaa50..d48c9351e25 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -2234,34 +2234,45 @@ gfc_match_oacc_cache (void) return MATCH_YES; } -/* Determine the loop level for a routine. */ +/* Determine the loop level for a routine. Returns OACC_FUNCTION_NONE + if any error is detected. */ -static int +static oacc_function gfc_oacc_routine_dims (gfc_omp_clauses *clauses) { int level = -1; + oacc_function ret = OACC_FUNCTION_AUTO; if (clauses) { unsigned mask = 0; if (clauses->gang) - level = GOMP_DIM_GANG, mask |= GOMP_DIM_MASK (level); + { + level = GOMP_DIM_GANG, mask |= GOMP_DIM_MASK (level); + ret = OACC_FUNCTION_GANG; + } if (clauses->worker) - level = GOMP_DIM_WORKER, mask |= GOMP_DIM_MASK (level); + { + level = GOMP_DIM_WORKER, mask |= GOMP_DIM_MASK (level); + ret = OACC_FUNCTION_WORKER; + } if (clauses->vector) - level = GOMP_DIM_VECTOR, mask |= GOMP_DIM_MASK (level); + { + level = GOMP_DIM_VECTOR, mask |= GOMP_DIM_MASK (level); + ret = OACC_FUNCTION_VECTOR; + } if (clauses->seq) - level = GOMP_DIM_MAX, mask |= GOMP_DIM_MASK (level); + { + level = GOMP_DIM_MAX, mask |= GOMP_DIM_MASK (level); + ret = OACC_FUNCTION_SEQ; + } if (mask != (mask & -mask)) - gfc_error ("Multiple loop axes specified for routine"); + ret = OACC_FUNCTION_NONE; } - if (level < 0) - level = GOMP_DIM_MAX; - - return level; + return ret; } match @@ -2272,6 +2283,8 @@ gfc_match_oacc_routine (void) match m; gfc_omp_clauses *c = NULL; gfc_oacc_routine_name *n = NULL; + oacc_function dims = OACC_FUNCTION_NONE; + bool seen_error = false; old_loc = gfc_current_locus; @@ -2318,17 +2331,15 @@ gfc_match_oacc_routine (void) } else { - gfc_error ("Syntax error in !$ACC ROUTINE ( NAME ) at %C"); - gfc_current_locus = old_loc; - return MATCH_ERROR; + gfc_error ("Syntax error in !$ACC ROUTINE ( NAME ) at %L", &old_loc); + goto cleanup; } if (gfc_match_char (')') != MATCH_YES) { - gfc_error ("Syntax error in !$ACC ROUTINE ( NAME ) at %C, expecting" - " ')' after NAME"); - gfc_current_locus = old_loc; - return MATCH_ERROR; + gfc_error ("Syntax error in !$ACC ROUTINE ( NAME ) at %L, expecting" + " ')' after NAME", &old_loc); + goto cleanup; } } @@ -2337,26 +2348,83 @@ gfc_match_oacc_routine (void) != MATCH_YES)) return MATCH_ERROR; + /* Scan for invalid routine geometry. */ + dims = gfc_oacc_routine_dims (c); + if (dims == OACC_FUNCTION_NONE) + { + gfc_error ("Multiple loop axes specified in !$ACC ROUTINE at %L", + &old_loc); + + /* Don't abort early, because it's important to let the user + know of any potential duplicate routine directives. */ + seen_error = true; + } + else if (dims == OACC_FUNCTION_AUTO) + { + gfc_warning (0, "Expected one of %, %, % or " + "% clauses in !$ACC ROUTINE at %L", &old_loc); + dims = OACC_FUNCTION_SEQ; + } + if (sym != NULL) { - n = gfc_get_oacc_routine_name (); - n->sym = sym; - n->clauses = NULL; - n->next = NULL; - if (gfc_current_ns->oacc_routine_names != NULL) - n->next = gfc_current_ns->oacc_routine_names; - - gfc_current_ns->oacc_routine_names = n; + bool needs_entry = true; + + /* Scan for any repeated routine directives on 'sym' and report + an error if necessary. TODO: Extend this function to scan + for compatible DEVICE_TYPE dims. */ + for (n = gfc_current_ns->oacc_routine_names; n; n = n->next) + if (n->sym == sym) + { + needs_entry = false; + if (dims != gfc_oacc_routine_dims (n->clauses)) + { + gfc_error ("$!ACC ROUTINE already applied at %L", &old_loc); + goto cleanup; + } + } + + if (needs_entry) + { + n = gfc_get_oacc_routine_name (); + n->sym = sym; + n->clauses = c; + n->next = NULL; + n->loc = old_loc; + + if (gfc_current_ns->oacc_routine_names != NULL) + n->next = gfc_current_ns->oacc_routine_names; + + gfc_current_ns->oacc_routine_names = n; + } + + if (seen_error) + goto cleanup; } else if (gfc_current_ns->proc_name) { + if (gfc_current_ns->proc_name->attr.oacc_function != OACC_FUNCTION_NONE + && !seen_error) + { + gfc_error ("!$ACC ROUTINE already applied at %L", &old_loc); + goto cleanup; + } + if (!gfc_add_omp_declare_target (&gfc_current_ns->proc_name->attr, gfc_current_ns->proc_name->name, &old_loc)) goto cleanup; + gfc_current_ns->proc_name->attr.oacc_function - = gfc_oacc_routine_dims (c) + 1; + = seen_error ? OACC_FUNCTION_SEQ : dims; + + if (seen_error) + goto cleanup; } + else + /* Something has gone wrong. Perhaps there was a syntax error + in the program-stmt. */ + goto cleanup; if (n) n->clauses = c; diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index eea6b81ebfa..eed868f475b 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -46,6 +46,7 @@ along with GCC; see the file COPYING3. If not see #include "trans-stmt.h" #include "gomp-constants.h" #include "gimplify.h" +#include "omp-general.h" #define MAX_LABEL_VALUE 99999 @@ -1403,16 +1404,29 @@ add_attributes_to_decl (symbol_attribute sym_attr, tree list) list = tree_cons (get_identifier ("omp declare target"), NULL_TREE, list); - if (sym_attr.oacc_function) + if (sym_attr.oacc_function != OACC_FUNCTION_NONE) { - tree dims = NULL_TREE; - int ix; - int level = sym_attr.oacc_function - 1; + omp_clause_code code = OMP_CLAUSE_ERROR; + tree clause, dims; - for (ix = GOMP_DIM_MAX; ix--;) - dims = tree_cons (build_int_cst (boolean_type_node, ix >= level), - integer_zero_node, dims); + switch (sym_attr.oacc_function) + { + case OACC_FUNCTION_GANG: + code = OMP_CLAUSE_GANG; + break; + case OACC_FUNCTION_WORKER: + code = OMP_CLAUSE_WORKER; + break; + case OACC_FUNCTION_VECTOR: + code = OMP_CLAUSE_VECTOR; + break; + case OACC_FUNCTION_SEQ: + default: + code = OMP_CLAUSE_SEQ; + } + clause = build_omp_clause (UNKNOWN_LOCATION, code); + dims = oacc_build_routine_dims (clause); list = tree_cons (get_identifier ("oacc function"), dims, list); } diff --git a/gcc/testsuite/gfortran.dg/goacc/classify-routine.f95 b/gcc/testsuite/gfortran.dg/goacc/classify-routine.f95 index 4ca406742f9..445ff9afd4e 100644 --- a/gcc/testsuite/gfortran.dg/goacc/classify-routine.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/classify-routine.f95 @@ -20,10 +20,10 @@ subroutine ROUTINE end subroutine ROUTINE ! Check the offloaded function's attributes. -! { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(omp declare target, oacc function \\(0 0, 1 0, 1 0\\)\\)\\)" 1 "ompexp" } } +! { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(omp declare target, oacc function \\(0 1, 1 0, 1 0\\)\\)\\)" 1 "ompexp" } } ! Check the offloaded function's classification and compute dimensions (will ! always be 1 x 1 x 1 for non-offloading compilation). ! { dg-final { scan-tree-dump-times "(?n)Function is OpenACC routine level 1" 1 "oaccdevlow" } } ! { dg-final { scan-tree-dump-times "(?n)Compute dimensions \\\[1, 1, 1\\\]" 1 "oaccdevlow" } } -! { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(oacc function \\(0 1, 1 1, 1 1\\), omp declare target, oacc function \\(0 0, 1 0, 1 0\\)\\)\\)" 1 "oaccdevlow" } } +! { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(oacc function \\(0 1, 1 1, 1 1\\), omp declare target, oacc function \\(0 1, 1 0, 1 0\\)\\)\\)" 1 "oaccdevlow" } } diff --git a/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 b/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 index 0235e85d42a..92d0c71d75c 100644 --- a/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 @@ -2,7 +2,7 @@ ! { dg-do compile } real function f1 () -!$acc routine (f1) +!$acc routine (f1) seq f1 = 1 end diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-6.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-6.f90 index 10943cff304..5c1f652ff6d 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-6.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/routine-6.f90 @@ -4,8 +4,7 @@ module m contains subroutine subr5 (x) implicit none - !$acc routine (subr5) - !$acc routine (m1int) ! { dg-error "invalid function name" } + !$acc routine (subr5) seq integer, intent(inout) :: x if (x < 1) then x = 1 @@ -19,22 +18,21 @@ program main implicit none interface function subr6 (x) - !$acc routine (subr6) ! { dg-error "without list is allowed in interface" } + !$acc routine (subr6) seq ! { dg-error "without list is allowed in interface" } integer, intent (in) :: x integer :: subr6 end function subr6 end interface integer, parameter :: n = 10 integer :: a(n), i - !$acc routine (subr1) ! { dg-error "invalid function name" } external :: subr2 - !$acc routine (subr2) + !$acc routine (subr2) seq external :: R1, R2 - !$acc routine (R1 R2 R3) ! { dg-error "Syntax error in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\), expecting .\\). after NAME" } - !$acc routine (R1, R2, R3) ! { dg-error "Syntax error in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\), expecting .\\). after NAME" } - !$acc routine (R1) - !$acc routine (R2) + !$acc routine (R1 R2 R3) seq ! { dg-error "Syntax error in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\), expecting .\\). after NAME" } + !$acc routine (R1, R2, R3) seq ! { dg-error "Syntax error in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\), expecting .\\). after NAME" } + !$acc routine (R1) seq + !$acc routine (R2) seq !$acc parallel !$acc loop @@ -46,7 +44,7 @@ program main end program main subroutine subr1 (x) - !$acc routine + !$acc routine seq integer, intent(inout) :: x if (x < 1) then x = 1 @@ -56,7 +54,6 @@ subroutine subr1 (x) end subroutine subr1 subroutine subr2 (x) - !$acc routine (subr1) ! { dg-error "invalid function name" } integer, intent(inout) :: x if (x < 1) then x = 1 @@ -66,7 +63,7 @@ subroutine subr2 (x) end subroutine subr2 subroutine subr3 (x) - !$acc routine (subr3) + !$acc routine (subr3) seq integer, intent(inout) :: x if (x < 1) then x = 1 @@ -76,7 +73,7 @@ subroutine subr3 (x) end subroutine subr3 subroutine subr4 (x) - !$acc routine (subr4) + !$acc routine (subr4) seq integer, intent(inout) :: x if (x < 1) then x = 1 @@ -86,7 +83,6 @@ subroutine subr4 (x) end subroutine subr4 subroutine subr10 (x) - !$acc routine (subr10) device ! { dg-error "Unclassifiable OpenACC directive" } integer, intent(inout) :: x if (x < 1) then x = 1 diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-8.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-8.f90 index c9039153885..beca43f2d60 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-8.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/routine-8.f90 @@ -4,7 +4,7 @@ program main interface function s_1 (a) integer a - !$acc routine + !$acc routine seq end function s_1 end interface @@ -18,7 +18,7 @@ program main interface function s_3 (a) integer a - !$acc routine (s_3) ! { dg-error "Only the ..ACC ROUTINE form without list is allowed in interface block" } + !$acc routine (s_3) seq ! { dg-error "Only the ..ACC ROUTINE form without list is allowed in interface block" } end function s_3 end interface diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90 index 75dd1b01f6f..efc1b400add 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/routine-level-of-parallelism-1.f90 @@ -7,7 +7,7 @@ subroutine g_1 end subroutine g_1 subroutine s_1_2a - !$acc routine + !$acc routine seq end subroutine s_1_2a subroutine s_1_2b @@ -15,7 +15,7 @@ subroutine s_1_2b end subroutine s_1_2b subroutine s_1_2c - !$acc routine (s_1_2c) + !$acc routine (s_1_2c) seq end subroutine s_1_2c subroutine s_1_2d @@ -25,7 +25,7 @@ end subroutine s_1_2d module s_2 contains subroutine s_2_1a - !$acc routine + !$acc routine seq end subroutine s_2_1a subroutine s_2_1b @@ -33,7 +33,7 @@ contains end subroutine s_2_1b subroutine s_2_1c - !$acc routine (s_2_1c) + !$acc routine (s_2_1c) seq end subroutine s_2_1c subroutine s_2_1d @@ -48,7 +48,7 @@ subroutine test interface function s_3_1a (a) integer a - !$acc routine + !$acc routine seq end function s_3_1a end interface diff --git a/libgomp/testsuite/libgomp.oacc-fortran/host_data-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/host_data-2.f90 index ff0921863f6..4cdaa0c4d60 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/host_data-2.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/host_data-2.f90 @@ -81,7 +81,7 @@ subroutine saxpy (nn, aa, xx, yy) integer :: nn real*4 :: aa, xx(nn), yy(nn) integer i - !$acc routine + !$acc routine seq do i = 1, nn yy(i) = yy(i) + aa * xx(i) diff --git a/libgomp/testsuite/libgomp.oacc-fortran/host_data-3.f b/libgomp/testsuite/libgomp.oacc-fortran/host_data-3.f index 05ed949ee5c..fe0b904bb91 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/host_data-3.f +++ b/libgomp/testsuite/libgomp.oacc-fortran/host_data-3.f @@ -67,7 +67,7 @@ integer :: nn real*4 :: aa, xx(nn), yy(nn) integer i -!$acc routine +!$acc routine seq do i = 1, nn yy(i) = yy(i) + aa * xx(i) diff --git a/libgomp/testsuite/libgomp.oacc-fortran/host_data-4.f90 b/libgomp/testsuite/libgomp.oacc-fortran/host_data-4.f90 index 6e379b5485b..e192c59a97c 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/host_data-4.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/host_data-4.f90 @@ -21,7 +21,7 @@ contains integer :: nn real*4 :: aa, xx(nn), yy(nn) integer i - !$acc routine + !$acc routine seq do i = 1, nn yy(i) = yy(i) + aa * xx(i) diff --git a/libgomp/testsuite/libgomp.oacc-fortran/routine-1.f90 b/libgomp/testsuite/libgomp.oacc-fortran/routine-1.f90 index 6a573218b7a..346e875ba00 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/routine-1.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/routine-1.f90 @@ -3,7 +3,7 @@ interface recursive function fact (x) - !$acc routine + !$acc routine seq integer, intent(in) :: x integer :: fact end function fact @@ -21,7 +21,7 @@ end do end recursive function fact (x) result (res) - !$acc routine + !$acc routine seq integer, intent(in) :: x integer :: res if (x < 1) then diff --git a/libgomp/testsuite/libgomp.oacc-fortran/routine-2.f90 b/libgomp/testsuite/libgomp.oacc-fortran/routine-2.f90 index b6979747902..1391979291c 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/routine-2.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/routine-2.f90 @@ -4,7 +4,7 @@ module m1 contains recursive function fact (x) result (res) - !$acc routine + !$acc routine seq integer, intent(in) :: x integer :: res if (x < 1) then diff --git a/libgomp/testsuite/libgomp.oacc-fortran/routine-3.f90 b/libgomp/testsuite/libgomp.oacc-fortran/routine-3.f90 index e7b9d8ab364..6f49db97b80 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/routine-3.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/routine-3.f90 @@ -4,7 +4,7 @@ integer, parameter :: n = 10 integer :: a(n), i integer, external :: fact - !$acc routine (fact) + !$acc routine (fact) seq !$acc parallel !$acc loop do i = 1, n @@ -16,7 +16,7 @@ end do end recursive function fact (x) result (res) - !$acc routine + !$acc routine seq integer, intent(in) :: x integer :: res if (x < 1) then diff --git a/libgomp/testsuite/libgomp.oacc-fortran/routine-4.f90 b/libgomp/testsuite/libgomp.oacc-fortran/routine-4.f90 index a96363b8cde..85bdb2a0a07 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/routine-4.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/routine-4.f90 @@ -17,7 +17,7 @@ end do end subroutine incr (x) - !$acc routine + !$acc routine seq integer, intent(inout) :: x x = x + 1 end subroutine incr diff --git a/libgomp/testsuite/libgomp.oacc-fortran/routine-5.f90 b/libgomp/testsuite/libgomp.oacc-fortran/routine-5.f90 index a803ad96bb5..88d65741b7c 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/routine-5.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/routine-5.f90 @@ -15,7 +15,7 @@ program main contains function func (n) result (rc) - !$acc routine + !$acc routine seq integer, intent (in) :: n integer :: rc diff --git a/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 b/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 index f58a95fe670..a83e92ab129 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 @@ -1,4 +1,3 @@ - ! { dg-do run } ! { dg-additional-options "-cpp" } @@ -100,7 +99,7 @@ subroutine gang (a) integer, intent (inout) :: a(N) integer :: i - !$acc loop gang + !$acc loop gang worker vector do i = 1, N a(i) = a(i) - i end do diff --git a/libgomp/testsuite/libgomp.oacc-fortran/routine-9.f90 b/libgomp/testsuite/libgomp.oacc-fortran/routine-9.f90 index b1a1338dd8c..4a1250405cb 100644 --- a/libgomp/testsuite/libgomp.oacc-fortran/routine-9.f90 +++ b/libgomp/testsuite/libgomp.oacc-fortran/routine-9.f90 @@ -6,7 +6,7 @@ program main integer, parameter :: n = 10 integer :: a(n), i integer, external :: fact - !$acc routine (fact) + !$acc routine (fact) seq !$acc parallel !$acc loop do i = 1, n @@ -20,7 +20,7 @@ end program main recursive function fact (x) result (res) implicit none - !$acc routine (fact) + !$acc routine (fact) seq integer, intent(in) :: x integer :: res if (x < 1) then -- 2.17.1 --------------4E6520EC089714D0F5090F43--