From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id A61893858CDB for ; Thu, 20 Jul 2023 10:00:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A61893858CDB Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="6.01,218,1684828800"; d="scan'208";a="13908252" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa1.mentor.iphmx.com with ESMTP; 20 Jul 2023 02:00:34 -0800 IronPort-SDR: V6NjWYH8NM/6UtkPr07b6R5AXTwzycd+cn2I8ilMs4u+h1faYxkJjwykvC2VgijhQs5egOptAI nHPEpd2dumalFl/iMwSO6Rc1xDT3ncw9KP91Gx15MCNNQBdcRCsWhynBsOIIrBlil8xcYgUpjR mg4y8ll4vtbnJLWbOaOeTczohwHWHaza3D02R6KjgZGxKo/KRkimVl7e5tKR//Mz+cZCq1M03s FpwJDNyKUHv9zsZY8LXQq9soTCOzgM1v8BfwlrkV+Uuu2yq+ORHNtj8kxqc0aZNY25QhunxGbp b5U= From: Thomas Schwinge To: Chung-Lin Tang CC: , Catherine Moore Subject: Re: [PATCH, OpenACC 2.7, v2] Implement host_data must have use_device clause requirement In-Reply-To: References: <3be2222f-48ae-12a1-a83b-415360e0a506@siemens.com> <87legjepn1.fsf@euler.schwinge.homeip.net> User-Agent: Notmuch/0.29.3+94~g74c3f1b (https://notmuchmail.org) Emacs/28.2 (x86_64-pc-linux-gnu) Date: Thu, 20 Jul 2023 12:00:21 +0200 Message-ID: <878rbac37u.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi Chung-Lin! On 2023-07-13T18:54:00+0800, Chung-Lin Tang wro= te: > On 2023/6/16 5:13 PM, Thomas Schwinge wrote: >> OK with one small change, please -- unless there's a reason for doing it >> this way: [...] > I've adjusted the Fortran implementation as you described. Yes, I agree t= his way > more fits current Fortran FE conventions. > > I've re-tested the attached v2 patch, will commit later this week if no m= ajor > objections. ACK, thanks. Gr=C3=BC=C3=9Fe Thomas > gcc/c/ChangeLog: > > * c-parser.cc (c_parser_oacc_host_data): Add checking requiring Ope= nACC > host_data construct to have an use_device clause. > > gcc/cp/ChangeLog: > > * parser.cc (cp_parser_oacc_host_data): Add checking requiring Open= ACC > host_data construct to have an use_device clause. > > gcc/fortran/ChangeLog: > > * openmp.cc (resolve_omp_clauses): Add checking requiring > OpenACC host_data construct to have an use_device clause. > > gcc/testsuite/ChangeLog: > > * c-c++-common/goacc/host_data-2.c: Adjust testcase. > * gfortran.dg/goacc/host_data-error.f90: New testcase. > * gfortran.dg/goacc/pr71704.f90: Adjust testcase. > diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc > index 24a6eb6e459..80920b31f83 100644 > --- a/gcc/c/c-parser.cc > +++ b/gcc/c/c-parser.cc > @@ -18461,8 +18461,13 @@ c_parser_oacc_host_data (location_t loc, c_parse= r *parser, bool *if_p) > tree stmt, clauses, block; > > clauses =3D c_parser_oacc_all_clauses (parser, OACC_HOST_DATA_CLAUSE_M= ASK, > - "#pragma acc host_data"); > - > + "#pragma acc host_data", false); > + if (!omp_find_clause (clauses, OMP_CLAUSE_USE_DEVICE_PTR)) > + { > + error_at (loc, "% construct requires % cl= ause"); > + return error_mark_node; > + } > + clauses =3D c_finish_omp_clauses (clauses, C_ORT_ACC); > block =3D c_begin_omp_parallel (); > add_stmt (c_parser_omp_structured_block (parser, if_p)); > stmt =3D c_finish_oacc_host_data (loc, clauses, block); > diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc > index 5e2b5cba57e..beb5b632e5e 100644 > --- a/gcc/cp/parser.cc > +++ b/gcc/cp/parser.cc > @@ -45895,8 +45895,15 @@ cp_parser_oacc_host_data (cp_parser *parser, cp_= token *pragma_tok, bool *if_p) > unsigned int save; > > clauses =3D cp_parser_oacc_all_clauses (parser, OACC_HOST_DATA_CLAUSE_= MASK, > - "#pragma acc host_data", pragma_tok= ); > - > + "#pragma acc host_data", pragma_tok= , > + false); > + if (!omp_find_clause (clauses, OMP_CLAUSE_USE_DEVICE_PTR)) > + { > + error_at (pragma_tok->location, > + "% construct requires % clause"); > + return error_mark_node; > + } > + clauses =3D finish_omp_clauses (clauses, C_ORT_ACC); > block =3D begin_omp_parallel (); > save =3D cp_parser_begin_omp_structured_block (parser); > cp_parser_statement (parser, NULL_TREE, false, if_p); > diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc > index 8efc4b3ecfa..f7af02845de 100644 > --- a/gcc/fortran/openmp.cc > +++ b/gcc/fortran/openmp.cc > @@ -8764,6 +8764,12 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_claus= es *omp_clauses, > "% clause", &omp_clauses->detach->where); > } > > + if (openacc > + && code->op =3D=3D EXEC_OACC_HOST_DATA > + && omp_clauses->lists[OMP_LIST_USE_DEVICE] =3D=3D NULL) > + gfc_error ("% construct at %L requires % cl= ause", > + &code->loc); > + > if (omp_clauses->assume) > gfc_resolve_omp_assumptions (omp_clauses->assume); > } > diff --git a/gcc/testsuite/c-c++-common/goacc/host_data-2.c b/gcc/testsui= te/c-c++-common/goacc/host_data-2.c > index b3093e575ff..862a764eb3a 100644 > --- a/gcc/testsuite/c-c++-common/goacc/host_data-2.c > +++ b/gcc/testsuite/c-c++-common/goacc/host_data-2.c > @@ -8,7 +8,9 @@ void > f (void) > { > int v2 =3D 3; > -#pragma acc host_data copy(v2) /* { dg-error ".copy. is not valid for ..= pragma acc host_data." } */ > +#pragma acc host_data copy(v2) > + /* { dg-error ".copy. is not valid for ..pragma acc host_data." "" { t= arget *-*-* } .-1 } */ > + /* { dg-error ".host_data. construct requires .use_device. clause" "" = { target *-*-* } .-2 } */ > ; > > #pragma acc host_data use_device(v2) > @@ -20,6 +22,9 @@ f (void) > /* { dg-error ".use_device_ptr. variable is neither a pointer nor an a= rray" "" { target c } .-1 } */ > /* { dg-error ".use_device_ptr. variable is neither a pointer, nor an = array nor reference to pointer or array" "" { target c++ } .-2 } */ > ; > + > +#pragma acc host_data /* { dg-error ".host_data. construct requires .use= _device. clause" } */ > + ; > } > > > diff --git a/gcc/testsuite/gfortran.dg/goacc/host_data-error.f90 b/gcc/te= stsuite/gfortran.dg/goacc/host_data-error.f90 > new file mode 100644 > index 00000000000..bd262989410 > --- /dev/null > +++ b/gcc/testsuite/gfortran.dg/goacc/host_data-error.f90 > @@ -0,0 +1,6 @@ > +! { dg-do compile } > + > +subroutine foo () > +!$acc host_data ! { dg-error "'host_data' construct at .1. requires 'use= _device' clause" } > +!$acc end host_data > +end > diff --git a/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 b/gcc/testsuite/= gfortran.dg/goacc/pr71704.f90 > index 0235e85d42a..31724c8b046 100644 > --- a/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 > +++ b/gcc/testsuite/gfortran.dg/goacc/pr71704.f90 > @@ -47,8 +47,9 @@ real function f8 () > f8 =3D 1 > end > > -real function f9 () > -!$acc host_data > +real function f9 (a) > + integer a(:) > +!$acc host_data use_device(a) > !$acc end host_data > f8 =3D 1 > end ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955