From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1729) id 3BFE23851146; Wed, 29 Jun 2022 14:46:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3BFE23851146 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Kwok Yeung To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/omp/gcc-12] openmp: unified_address support X-Act-Checkin: gcc X-Git-Author: Andrew Stubbs X-Git-Refname: refs/heads/devel/omp/gcc-12 X-Git-Oldrev: 02b4955747ddf2e32f7d01eef19e294f36462ade X-Git-Newrev: 7e14e1a88d5b7dc54f5d4690d83628a13ca0eb72 Message-Id: <20220629144621.3BFE23851146@sourceware.org> Date: Wed, 29 Jun 2022 14:46:21 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 29 Jun 2022 14:46:21 -0000 https://gcc.gnu.org/g:7e14e1a88d5b7dc54f5d4690d83628a13ca0eb72 commit 7e14e1a88d5b7dc54f5d4690d83628a13ca0eb72 Author: Andrew Stubbs Date: Wed Apr 13 16:55:47 2022 +0100 openmp: unified_address support This makes "requires unified_address" work by making it eqivalent to "requires unified_shared_memory". This is more than is strictly necessary, but should be standard compliant. gcc/c/ChangeLog: * c-parser.cc (c_parser_omp_requires): Check requires unified_address for conflict with -foffload-memory=shared. gcc/cp/ChangeLog: * parser.cc (cp_parser_omp_requires): Check requires unified_address for conflict with -foffload-memory=shared. gcc/fortran/ChangeLog: * openmp.cc (gfc_match_omp_requires): Check requires unified_address for conflict with -foffload-memory=shared. gcc/ChangeLog: * omp-low.cc: Do USM transformations for "unified_address". gcc/testsuite/ChangeLog: * c-c++-common/gomp/usm-4.c: New test. * gfortran.dg/gomp/usm-4.f90: New test. Diff: --- gcc/ChangeLog.omp | 4 ++++ gcc/c/ChangeLog.omp | 5 +++++ gcc/c/c-parser.cc | 31 ++++++++++++++++++++----------- gcc/cp/ChangeLog.omp | 5 +++++ gcc/cp/parser.cc | 31 ++++++++++++++++++++----------- gcc/fortran/ChangeLog.omp | 5 +++++ gcc/fortran/openmp.cc | 6 ++++++ gcc/omp-low.cc | 3 ++- gcc/testsuite/ChangeLog.omp | 5 +++++ gcc/testsuite/c-c++-common/gomp/usm-4.c | 4 ++++ gcc/testsuite/gfortran.dg/gomp/usm-4.f90 | 6 ++++++ 11 files changed, 82 insertions(+), 23 deletions(-) diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index a98d8b3cfed..a971ba0acf1 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,7 @@ +2022-04-20 Andrew Stubbs + + * omp-low.cc: Do USM transformations for "unified_address". + 2022-04-02 Andrew Stubbs * omp-low.cc (usm_transform): Transform omp_target_alloc and diff --git a/gcc/c/ChangeLog.omp b/gcc/c/ChangeLog.omp index a918af2a22f..a2284db471f 100644 --- a/gcc/c/ChangeLog.omp +++ b/gcc/c/ChangeLog.omp @@ -1,3 +1,8 @@ +2022-04-20 Andrew Stubbs + + * c-parser.cc (c_parser_omp_requires): Check requires unified_address + for conflict with -foffload-memory=shared. + 2022-03-10 Andrew Stubbs Backport of the patch posted at diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index cd04c6902cb..b234d0b3880 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -22625,18 +22625,27 @@ c_parser_omp_requires (c_parser *parser) enum omp_requires this_req = (enum omp_requires) 0; if (!strcmp (p, "unified_address")) - this_req = OMP_REQUIRES_UNIFIED_ADDRESS; + { + this_req = OMP_REQUIRES_UNIFIED_ADDRESS; + + if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED + && flag_offload_memory != OFFLOAD_MEMORY_NONE) + error_at (cloc, + "unified_address is incompatible with the " + "selected -foffload-memory option"); + flag_offload_memory = OFFLOAD_MEMORY_UNIFIED; + } else if (!strcmp (p, "unified_shared_memory")) - { - this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY; - - if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED - && flag_offload_memory != OFFLOAD_MEMORY_NONE) - error_at (cloc, - "unified_shared_memory is incompatible with the " - "selected -foffload-memory option"); - flag_offload_memory = OFFLOAD_MEMORY_UNIFIED; - } + { + this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY; + + if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED + && flag_offload_memory != OFFLOAD_MEMORY_NONE) + error_at (cloc, + "unified_shared_memory is incompatible with the " + "selected -foffload-memory option"); + flag_offload_memory = OFFLOAD_MEMORY_UNIFIED; + } else if (!strcmp (p, "dynamic_allocators")) this_req = OMP_REQUIRES_DYNAMIC_ALLOCATORS; else if (!strcmp (p, "reverse_offload")) diff --git a/gcc/cp/ChangeLog.omp b/gcc/cp/ChangeLog.omp index 0e90645e094..316b5730ca2 100644 --- a/gcc/cp/ChangeLog.omp +++ b/gcc/cp/ChangeLog.omp @@ -1,3 +1,8 @@ +2022-04-20 Andrew Stubbs + + * parser.cc (cp_parser_omp_requires): Check requires unified_address + for conflict with -foffload-memory=shared. + 2022-03-10 Andrew Stubbs Backport of the patch posted at diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 8b76ea740b8..f4f655f6cc3 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -46919,18 +46919,27 @@ cp_parser_omp_requires (cp_parser *parser, cp_token *pragma_tok) enum omp_requires this_req = (enum omp_requires) 0; if (!strcmp (p, "unified_address")) - this_req = OMP_REQUIRES_UNIFIED_ADDRESS; + { + this_req = OMP_REQUIRES_UNIFIED_ADDRESS; + + if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED + && flag_offload_memory != OFFLOAD_MEMORY_NONE) + error_at (cloc, + "unified_address is incompatible with the " + "selected -foffload-memory option"); + flag_offload_memory = OFFLOAD_MEMORY_UNIFIED; + } else if (!strcmp (p, "unified_shared_memory")) - { - this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY; - - if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED - && flag_offload_memory != OFFLOAD_MEMORY_NONE) - error_at (cloc, - "unified_shared_memory is incompatible with the " - "selected -foffload-memory option"); - flag_offload_memory = OFFLOAD_MEMORY_UNIFIED; - } + { + this_req = OMP_REQUIRES_UNIFIED_SHARED_MEMORY; + + if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED + && flag_offload_memory != OFFLOAD_MEMORY_NONE) + error_at (cloc, + "unified_shared_memory is incompatible with the " + "selected -foffload-memory option"); + flag_offload_memory = OFFLOAD_MEMORY_UNIFIED; + } else if (!strcmp (p, "dynamic_allocators")) this_req = OMP_REQUIRES_DYNAMIC_ALLOCATORS; else if (!strcmp (p, "reverse_offload")) diff --git a/gcc/fortran/ChangeLog.omp b/gcc/fortran/ChangeLog.omp index d172be95123..791dba879c0 100644 --- a/gcc/fortran/ChangeLog.omp +++ b/gcc/fortran/ChangeLog.omp @@ -1,3 +1,8 @@ +2022-04-20 Andrew Stubbs + + * openmp.cc (gfc_match_omp_requires): Check requires unified_address + for conflict with -foffload-memory=shared. + 2022-03-10 Andrew Stubbs Backport of the patch posted at diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index 0067415e489..61a5e0410ba 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -5557,6 +5557,12 @@ gfc_match_omp_requires (void) requires_clause = OMP_REQ_UNIFIED_ADDRESS; if (requires_clauses & OMP_REQ_UNIFIED_ADDRESS) goto duplicate_clause; + + if (flag_offload_memory != OFFLOAD_MEMORY_UNIFIED + && flag_offload_memory != OFFLOAD_MEMORY_NONE) + gfc_error_now ("unified_address at %C is incompatible with " + "the selected -foffload-memory option"); + flag_offload_memory = OFFLOAD_MEMORY_UNIFIED; } else if (gfc_match (clauses[2]) == MATCH_YES) { diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc index 0734a4e9743..dc450c62ef4 100644 --- a/gcc/omp-low.cc +++ b/gcc/omp-low.cc @@ -16267,7 +16267,8 @@ public: { return (flag_openmp || flag_openmp_simd) && (flag_offload_memory == OFFLOAD_MEMORY_UNIFIED - || omp_requires_mask & OMP_REQUIRES_UNIFIED_SHARED_MEMORY); + || omp_requires_mask & OMP_REQUIRES_UNIFIED_SHARED_MEMORY + || omp_requires_mask & OMP_REQUIRES_UNIFIED_ADDRESS); } virtual unsigned int execute (function *) { diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index 9d8026e0006..8ebaa141543 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,8 @@ +2022-04-20 Andrew Stubbs + + * c-c++-common/gomp/usm-4.c: New test. + * gfortran.dg/gomp/usm-4.f90: New test. + 2022-04-02 Andrew Stubbs * c-c++-common/gomp/usm-2.c: Add omp_target_alloc. diff --git a/gcc/testsuite/c-c++-common/gomp/usm-4.c b/gcc/testsuite/c-c++-common/gomp/usm-4.c new file mode 100644 index 00000000000..b19664e9b66 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/usm-4.c @@ -0,0 +1,4 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-foffload-memory=pinned" } */ + +#pragma omp requires unified_address /* { dg-error "unified_address is incompatible with the selected -foffload-memory option" } */ diff --git a/gcc/testsuite/gfortran.dg/gomp/usm-4.f90 b/gcc/testsuite/gfortran.dg/gomp/usm-4.f90 new file mode 100644 index 00000000000..725b07f2f88 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/usm-4.f90 @@ -0,0 +1,6 @@ +! { dg-do compile } +! { dg-additional-options "-foffload-memory=pinned" } + +!$omp requires unified_address ! { dg-error "unified_address at .* is incompatible with the selected -foffload-memory option" } + +end