From patchwork Tue Jun 6 15:10:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chung-Lin Tang X-Patchwork-Id: 70661 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6DDA73858296 for ; Tue, 6 Jun 2023 15:11:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6DDA73858296 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1686064286; bh=MmQk+nCvcfIxrGFyL4Yp7B8/zahq+uu/GJ48+4LSm3M=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=wv2R70YoEYGwMNsMP902Ox/dIFikCQ/WCWedTV8J9uDyQe4IjqnOvYr+Kks2RSt6P aOHIs2vNp+noRBOQJxgSbd8kdZE+6s1Ht8Hdmm2184OrpLcCwfAArFa3tTwi3PPFFn G1bL1bDyYm8QOnp+n31pniVIj/t5NGsV6hxD7Kxg= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2080.outbound.protection.outlook.com [40.107.215.80]) by sourceware.org (Postfix) with ESMTPS id 4693D3858D33 for ; Tue, 6 Jun 2023 15:10:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4693D3858D33 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n5jf6ACG99BCygeD+tyL83IsB/m+RiPzbGrb8q2bA6KvEOctifei6BMVdNd6ac6wkUl4SogilLRTjpQZz31pmWnrXbGsenfrHmkTqhT30GfmMr8LlGL+nrTAXR2qr8j5wVIddKFRPDCMlJXNuOT4rrsSQ33G9itaXW1++Iod4dOWGz7g1sT47nVRfg9w1YKhHbjAEE9kGr2+nWnrkL6Eh3gV6Si+rT99CH9Ey28Y+xp1wc/rjKxO/7IsbRLVQ/at9Tm73KQ18sBtQC4LhkIwFtbmqeUHesnGtej8biHrMIEKKG4NsZP30/DAbTt9doTDUvqZ+tdt4U+zAmTdemGTkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MmQk+nCvcfIxrGFyL4Yp7B8/zahq+uu/GJ48+4LSm3M=; b=RTLVNkMRz+jyRhGoY8ZOJHHQon6ltP0B6AsPiLmzYTv/PEGnjqTHhDdNW0J6hzI0Lt+p/ZuETII7TwMkLFTFB1+HuyPCeEVxGCjziVJrSdcJliPjc8iLXuCdoiPSNNpIgUus6EbUeCz5GBdLFyzaJ10G9eIHPqjb5kDCXIohKrWpMOt2NHEKQvIogACD7H8Irbqsr1DUjzxOU/fqSY/g64DIAF2RJlhQxgP6sRp+qvQ80hugRkEeDE6+FJqH1vv/PzZsDmKF8oFBagTT4VhH/42/mksuH+ch8WvxcZm/dm57rVgKJMEXp4ZZK4nx6lYgsd3b3m0Eg5fZb6JABjwoEA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com; dkim=pass header.d=siemens.com; arc=none Received: from SG2PR06MB5430.apcprd06.prod.outlook.com (2603:1096:4:1ba::14) by TYZPR06MB5975.apcprd06.prod.outlook.com (2603:1096:400:33e::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.32; Tue, 6 Jun 2023 15:10:44 +0000 Received: from SG2PR06MB5430.apcprd06.prod.outlook.com ([fe80::d15a:aa6e:dd53:4fc5]) by SG2PR06MB5430.apcprd06.prod.outlook.com ([fe80::d15a:aa6e:dd53:4fc5%3]) with mapi id 15.20.6455.030; Tue, 6 Jun 2023 15:10:42 +0000 Message-ID: <3be2222f-48ae-12a1-a83b-415360e0a506@siemens.com> Date: Tue, 6 Jun 2023 23:10:37 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.11.2 Content-Language: en-US Subject: [PATCH, OpenACC 2.7] Implement host_data must have use_device clause requirement To: gcc-patches , Thomas Schwinge , Catherine Moore X-ClientProxiedBy: TYWPR01CA0044.jpnprd01.prod.outlook.com (2603:1096:400:17f::11) To SG2PR06MB5430.apcprd06.prod.outlook.com (2603:1096:4:1ba::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SG2PR06MB5430:EE_|TYZPR06MB5975:EE_ X-MS-Office365-Filtering-Correlation-Id: 057b0357-cfa9-4dee-36ee-08db66a031cd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: mRw8d6L+vc3BZXLbJM4TMZSu9O9KhFEVFq9x9rYpkxjoMaxA8FIiLt74L6xQMe3eIAnuHE0roJ4+/BNAZShsoYl1vyJUwxMpl3NR+wk26wIe/fulqPTUoabZD5lP5enVy/iRphkugDVnvAp3q31plJRLvvrIqL2seSJOgMJBxRuaVuybmGqK75j5GH0DGr9cior5sr4FnImkgGipWoDZE03vxURwi/uN+vRRUzYsMCnq+3sf2HFnBKLSVrhpVGDkB6/LlXNFx2mW1Fm3r0t+VHc3Hp7Rggg+72VXyzsE09ElTnq0EQwDn83wyDDRZCit5PK2SnLKILBlhkZGMZDgNG8jYwdJwB9ZGAbRKZUZlghXGFlILuYQ6dNobGvwWECvieCpN9XHPHzwG34A143w5vIhRr5K39BC7VvptDyRR5bmPAyYMl5WBAHBwBcP9YANDHVJFr+FKFOnExvlN9JG8Ln1feBpWECV+Q0xsD4lj6VrkzYEQt62JAU897dWN48HloM02dqEUHt+hKtziWaDIinFqLWiIeTbKBt9m6ruWH8rCmIEbDfy3pqnCuqW1YOUZSsn3cX8TGOhiNOYvQcdlPv0hr7O6SZ4oiagZES3tiVVYWuJ3SvU9XWXeuLvevDzNxISSAJVMN6AGQ479CvUbw== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SG2PR06MB5430.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(376002)(366004)(396003)(39860400002)(136003)(346002)(451199021)(83380400001)(110136005)(82960400001)(478600001)(8676002)(8936002)(41300700001)(66476007)(235185007)(316002)(66946007)(66556008)(31696002)(38100700002)(5660300002)(86362001)(6486002)(33964004)(6666004)(36756003)(2906002)(6512007)(26005)(84970400001)(186003)(6506007)(31686004)(2616005)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?xHlTGNBQT7LhJtrwQaRVtl5+vYwi?= =?utf-8?q?RoB6eLsfEpKS1LeRXMq8DFKBrZ5pVlN80shUpsAC50Rj7ChFCo8eH2OLrwOg81p/k?= =?utf-8?q?yI9Mmjw2histX17Q1pbMfEqGjGqu8+BJqdCIFOph3qWbw6BH7MT8yhQWA4/8xf61i?= =?utf-8?q?yz3CLSlT8xrTUD2QPe8psJdLM5nRnJJGjFXLvfEAWVXk3uge3hNdYV5fifsVadelj?= =?utf-8?q?raoEQhljCNiR1RzwnKUm0Uhds329S2kz8oZnHyuVh9rATZnn3A+b+edvadioU1uex?= =?utf-8?q?CuADY5TRsS6WGtacVq1oqs2yKuXYJotaNCl5eJxs7QhTMHZEyGMttM1Ci3swj3ebI?= =?utf-8?q?bA7QS/6BgTIUbdPZWie1r1LYcjJf5Or9um25nR4bIFt0qRpDryrkMp+Z7WyQrzlxQ?= =?utf-8?q?4k0hBpzSTc2vUWWBgVJSNIKDyvQAVWvG0epd9BJGZl0wqi5fojQV6E8TMcnwD4W0n?= =?utf-8?q?5T5kNMqeH1J/0qze1hui3vF9DXaQQq4eJxbgSKqkuk9wEU+RK6FM++nq/xxIrRMDV?= =?utf-8?q?aoLwd5r7BW+sRXlUrzDKHFi6sMAbykZebSb4LRk/pur9GcBW7w55K6z2lCCTAf4RS?= =?utf-8?q?lsxBz+rMK21jsQIBoqT9+0hrCVMtCanJFMbSW5Ag/IEddvPxYZWNdU86Bg4In3Hat?= =?utf-8?q?OnuQTzCOKXKCykeYCUEORZ1YR5HswrJzMvyLYxQN977R/x6HHQ2caruLuHCUfk8Hh?= =?utf-8?q?c/RE0/eLn63bxPVEA2DhvGbiS0prQLpwEKPTIqt1JtY3WifWEWZbClCM7mfQd83R1?= =?utf-8?q?PtmB15F4EmNW1qutgt1NQAsP6VjNZNpWk2XiNhYKSLC8QcrY3REjE3DJ3GiZMgA13?= =?utf-8?q?io7w41JCRv46zzq7ZtsfP9eymGKyLOtv+NMVf3/JfkuGwkaBAg4oKF13NSVCyZ0MD?= =?utf-8?q?i29Q5NA9SzSivL2XYGmmzIOtNL0c1+GpJSx7gTKC0eQFGsy/t1VfMh6yL4hKCjZZu?= =?utf-8?q?n/2fKy3LES1HYypBzrZU9E7camWJsa0nTF9CZqfTWEjauLv3DlKqX3rAj5yXo57D2?= =?utf-8?q?lFG6KCw+FUpX/ckMnvB8rf149qg6otqDva5Z9OxFyp1FmYWVoPn4InkSM3AKbK+Um?= =?utf-8?q?Ok1FlzDGkWb4/Jnts/2QVkckzKbHUYqiIqvzyVGqBZNEkJLFZl3+DxSuzpAZ5mzIi?= =?utf-8?q?xzq90D4op1yQ+qKkBk9I7H/QDakOsCRWPyBjJUgPK9yUt62eZbOkk1wjEcMXVboOI?= =?utf-8?q?JqZOtdcJ3/8BjNocJPIcxAPZDjS58yBrCot0iNWzrwEVz7ubNQ8U2gw9JrPQFYyY+?= =?utf-8?q?cb7nLxDVNUhtMG3t1f3WVZhG9QRbRKRObiMz+GcaFRsI+dosEGXyXZhEfwTp1B71r?= =?utf-8?q?MGMtP0/AdqRtHDsXGPDMaDTWl/vGF6nyyFTtBD33Wbr3nQN+LJ7zIyHJSHdK9yC4m?= =?utf-8?q?hPD91Aa9rr81Obn2VGUaYKWC8ShYbj6QmoDS93oC5SuqpHxBHmbTJU5YjORfpvSVC?= =?utf-8?q?migp9GQi/U7MMrbxeh0ogwP4ORrwRYuOTxHTAlMGIuR1wk7THmBOlmvzhvs1yj0ar?= =?utf-8?q?m3VpzdYSYOXcMtRIy/fYUtznweeUzPAoqw=3D=3D?= X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-Network-Message-Id: 057b0357-cfa9-4dee-36ee-08db66a031cd X-MS-Exchange-CrossTenant-AuthSource: SG2PR06MB5430.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Jun 2023 15:10:42.1481 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TltmL5HY4hqyZExJYSQfSA3n4hg/FWsA0X2XWQg7SYiwjM0fLFSxVzYnpulXdscgxqdakkj8STmB8qZrEJpXMCpgj5tByylzrV65cxIjtKE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYZPR06MB5975 X-Spam-Status: No, score=-8.1 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Chung-Lin Tang via Gcc-patches From: Chung-Lin Tang Reply-To: Chung-Lin Tang Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi Thomas, this patch implements the OpenACC 2.7 change requiring the host_data construct to have at least one use_device clause. This patch started out with a simple check during gimplify (much smaller patch), but turned out that front-ends removed use_device clauses when they have error, and the gimplify check started to echo a "no use_device clause" message in such cases, which seem confusing for the user. So ended up adding the check in each front-end instead. Tested on powerpc64le-linux/nvptx, x86_64-linux/amdgcn tests in progress (expect no surprises). Is this okay for trunk? Thanks, Chung-Lin gcc/c/ChangeLog: * c-parser.cc (c_parser_oacc_host_data): Add checking requiring OpenACC host_data construct to have an use_device clause. gcc/cp/ChangeLog: * parser.cc (cp_parser_oacc_host_data): Add checking requiring OpenACC host_data construct to have an use_device clause. gcc/fortran/ChangeLog: * trans-openmp.cc (gfc_trans_oacc_construct): 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. From 0d17b8d24fa6079d6c289305e9644c3fecd429f1 Mon Sep 17 00:00:00 2001 From: Chung-Lin Tang Date: Tue, 6 Jun 2023 03:19:33 -0700 Subject: [PATCH 1/2] OpenACC 2.7: host_data must have use_device clause requirement This patch implements the OpenACC 2.7 change requiring the host_data construct to have at least one use_device clause. gcc/c/ChangeLog: * c-parser.cc (c_parser_oacc_host_data): Add checking requiring OpenACC host_data construct to have an use_device clause. gcc/cp/ChangeLog: * parser.cc (cp_parser_oacc_host_data): Add checking requiring OpenACC host_data construct to have an use_device clause. gcc/fortran/ChangeLog: * trans-openmp.cc (gfc_trans_oacc_construct): 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. --- gcc/c/c-parser.cc | 9 +++++++-- gcc/cp/parser.cc | 11 +++++++++-- gcc/fortran/trans-openmp.cc | 6 ++++++ gcc/testsuite/c-c++-common/goacc/host_data-2.c | 7 ++++++- gcc/testsuite/gfortran.dg/goacc/host_data-error.f90 | 6 ++++++ gcc/testsuite/gfortran.dg/goacc/pr71704.f90 | 5 +++-- 6 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/goacc/host_data-error.f90 diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 5baa501dbee..b61aef8b1a2 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -18398,8 +18398,13 @@ c_parser_oacc_host_data (location_t loc, c_parser *parser, bool *if_p) tree stmt, clauses, block; clauses = c_parser_oacc_all_clauses (parser, OACC_HOST_DATA_CLAUSE_MASK, - "#pragma acc host_data"); - + "#pragma acc host_data", false); + if (!omp_find_clause (clauses, OMP_CLAUSE_USE_DEVICE_PTR)) + { + error_at (loc, "% construct requires % clause"); + return error_mark_node; + } + clauses = c_finish_omp_clauses (clauses, C_ORT_ACC); block = c_begin_omp_parallel (); add_stmt (c_parser_omp_structured_block (parser, if_p)); stmt = c_finish_oacc_host_data (loc, clauses, block); diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 1c9aa671851..dd7638f1c93 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -45798,8 +45798,15 @@ cp_parser_oacc_host_data (cp_parser *parser, cp_token *pragma_tok, bool *if_p) unsigned int save; clauses = 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 = finish_omp_clauses (clauses, C_ORT_ACC); block = begin_omp_parallel (); save = cp_parser_begin_omp_structured_block (parser); cp_parser_statement (parser, NULL_TREE, false, if_p); diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index 42b608f3d36..5e0079cce76 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -4677,6 +4677,12 @@ gfc_trans_oacc_construct (gfc_code *code) break; case EXEC_OACC_HOST_DATA: construct_code = OACC_HOST_DATA; + if (code->ext.omp_clauses->lists[OMP_LIST_USE_DEVICE] == NULL) + { + error_at (gfc_get_location (&code->loc), + "% construct requires % clause"); + return NULL_TREE; + } break; default: gcc_unreachable (); diff --git a/gcc/testsuite/c-c++-common/goacc/host_data-2.c b/gcc/testsuite/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 = 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." "" { target *-*-* } .-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 array" "" { 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/testsuite/gfortran.dg/goacc/host_data-error.f90 new file mode 100644 index 00000000000..747a2b201e7 --- /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 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 = 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 = 1 end