From patchwork Wed Dec 18 06:02:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Julian Brown X-Patchwork-Id: 1211977 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-516169-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="AEAKDDbA"; dkim-atps=neutral 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 47d4F25Q3rz9sRs for ; Wed, 18 Dec 2019 17:03:15 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:mime-version :content-transfer-encoding:content-type; q=dns; s=default; b=cIF rwLQGBZpXdIHQtrF1ldyO1JgA3mCoUlW6htiwPtBgLzp3169NkUEXYlAlJxnWuss xbES3T9KbkPzNNW8WZt2243l1Wx27GawZCGcMb2kbn8dc/GlEZjPbJdrMdjj45bW KXf2+iqNOzR2ylkDvwzRwmEGeaVrCoH0jWGn8cDg= 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 :to:cc:subject:date:message-id:mime-version :content-transfer-encoding:content-type; s=default; bh=PAFGXx28t zrid2U5nwvipUW8NQQ=; b=AEAKDDbAjoZ9NanAvb+lgIpxX0t5PmIYIr12eBLvV ykvC3N7UkUistE1jHjIbtnEmNZlflhQROSALvJG+T9OZY3SdKg5hqShPGBRlP7HF XEO5Jtd3+p4EVSqr6Unf0waYkeDuGDdzwPGgW2bKu0H0jeO6EOy4USqGU20UcWTO II= Received: (qmail 96040 invoked by alias); 18 Dec 2019 06:03:01 -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 95994 invoked by uid 89); 18 Dec 2019 06:03:00 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-16.3 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.1 spammy=sk:derived, UD:c-c, UD:libgomp.c-c, libgomp.c-c X-HELO: esa1.mentor.iphmx.com Received: from esa1.mentor.iphmx.com (HELO esa1.mentor.iphmx.com) (68.232.129.153) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 18 Dec 2019 06:02:59 +0000 IronPort-SDR: +4Ag2tNrOKNRiQeHdRkDEVIZRhtph+XcRa05glQQGtsVthGE3TqYREvHUBaagGkLRolQrj9O+U WYiKte4ELxTzfywjxMPhi2SvWhyKI4W82wvG+4iHsZZXSXk/JTy5GLLq/mIela0YV+b0s0i6Kn BD+Cz68kMvjE4HvygaiX8tfs6D2lcOCR3DO6xaf100CbWdarSxJ7pQstn/GVy2PXVV+8W5X6nL Oa40Aqa8l47hNTVLTW2GUd70OpdVGjr/+l7Kst2QbDGroJjK4pTSmZm+Pwmp0j+6qTcEI7gWKg pP8= Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 17 Dec 2019 22:02:57 -0800 IronPort-SDR: +0KAk3gzqYIkFFERbHqsZ7tISGgzLWNLAJZBI1QcpkQeG4iavn35xQT5gIf8JCJNSJBe2Bta4T Kony+1t4eaC4SCLI1I1jqCB9UU65mlvV0muL1KqHwTVutMi5vUd++Ywev7btcaLfr0az8664Ed sVcfRSq7MQXRR4whQLqVSLKzG7wA+k/0nBTfXN0AP5r8j859/Y3x7vqdsMSZrMglysrRXU+ql0 1q6Wq5wm7EBDoZsAmEbkPHBl9kpGrQvDtzJNfcRghKHQVY6pv8R8EBsXIH6S8Otlllswq2QZum 1EU= From: Julian Brown To: CC: Thomas Schwinge , Jakub Jelinek , Tobias Burnus , , Subject: [PATCH 00/13] OpenACC 2.6 manual deep copy support Date: Tue, 17 Dec 2019 22:02:25 -0800 Message-ID: MIME-Version: 1.0 X-IsSubscribed: yes Hi, This patch series provides support for OpenACC 2.6's manual deep copy (attach/detach) feature. Many of these patches have been submitted previously, but this series has been rebased and the large deep-copy part proper has been split into several pieces for ease of review. Tested with offloading to NVPTX. Further commentary (together with links to previous submissions) is provided alongside individual patches, where relevant. Thanks, Julian Julian Brown (13): Use aux struct in libgomp for infrequently-used/API-specific data OpenACC reference count overhaul OpenACC reference count consistency checking Use gomp_map_val for OpenACC host-to-device address translation Factor out duplicate code in gimplify_scan_omp_clauses OpenACC 2.6 deep copy: attach/detach API routines OpenACC 2.6 deep copy: libgomp parts OpenACC 2.6 deep copy: middle-end parts OpenACC 2.6 deep copy: C and C++ front-end parts OpenACC 2.6 deep copy: Fortran front-end parts OpenACC 2.6 deep copy: C and C++ execution tests OpenACC 2.6 deep copy: Fortran execution tests Fortran polymorphic class-type support for OpenACC gcc/c-family/c-common.h | 1 + gcc/c-family/c-omp.c | 33 ++ gcc/c-family/c-pragma.h | 2 + gcc/c/c-parser.c | 53 +- gcc/c/c-typeck.c | 76 ++- gcc/cp/parser.c | 56 +- gcc/cp/semantics.c | 98 +++- gcc/fortran/gfortran.h | 2 + gcc/fortran/openmp.c | 166 ++++-- gcc/fortran/trans-expr.c | 184 +++--- gcc/fortran/trans-openmp.c | 342 ++++++++--- gcc/fortran/trans.h | 8 + gcc/gimplify.c | 514 ++++++++++++----- gcc/omp-low.c | 3 + .../goacc/deep-copy-arrayofstruct.c | 84 +++ gcc/testsuite/c-c++-common/goacc/mdc-1.c | 55 ++ gcc/testsuite/c-c++-common/goacc/mdc-2.c | 62 ++ gcc/testsuite/g++.dg/goacc/mdc.C | 68 +++ .../gfortran.dg/goacc/data-clauses.f95 | 38 +- .../gfortran.dg/goacc/derived-types-2.f90 | 14 + .../gfortran.dg/goacc/derived-types.f90 | 77 +++ .../gfortran.dg/goacc/enter-exit-data.f95 | 24 +- gcc/tree-pretty-print.c | 18 + include/gomp-constants.h | 16 +- libgomp/libgomp.h | 50 +- libgomp/libgomp.map | 10 + libgomp/oacc-init.c | 10 +- libgomp/oacc-mem.c | 544 ++++++++++-------- libgomp/oacc-parallel.c | 35 +- libgomp/openacc.h | 6 + libgomp/target.c | 440 ++++++++++++-- .../libgomp.c-c++-common/unmap-infinity-2.c | 19 + .../testsuite/libgomp.oacc-c++/deep-copy-12.C | 72 +++ .../testsuite/libgomp.oacc-c++/deep-copy-13.C | 72 +++ .../libgomp.oacc-c-c++-common/deep-copy-1.c | 24 + .../libgomp.oacc-c-c++-common/deep-copy-10.c | 53 ++ .../libgomp.oacc-c-c++-common/deep-copy-11.c | 72 +++ .../libgomp.oacc-c-c++-common/deep-copy-14.c | 63 ++ .../libgomp.oacc-c-c++-common/deep-copy-2.c | 29 + .../libgomp.oacc-c-c++-common/deep-copy-3.c | 34 ++ .../libgomp.oacc-c-c++-common/deep-copy-4.c | 87 +++ .../libgomp.oacc-c-c++-common/deep-copy-5.c | 81 +++ .../libgomp.oacc-c-c++-common/deep-copy-6.c | 59 ++ .../libgomp.oacc-c-c++-common/deep-copy-7.c | 45 ++ .../libgomp.oacc-c-c++-common/deep-copy-8.c | 54 ++ .../libgomp.oacc-c-c++-common/deep-copy-9.c | 53 ++ .../libgomp.oacc-c-c++-common/pr92843-1.c | 1 + .../subset-subarray-mappings-1-r-p.c | 16 - .../unmap-infinity-1.c | 17 + .../libgomp.oacc-fortran/class-ptr-param.f95 | 34 ++ .../libgomp.oacc-fortran/classtypes-1.f95 | 48 ++ .../libgomp.oacc-fortran/classtypes-2.f95 | 106 ++++ .../libgomp.oacc-fortran/deep-copy-1.f90 | 35 ++ .../libgomp.oacc-fortran/deep-copy-2.f90 | 33 ++ .../libgomp.oacc-fortran/deep-copy-3.f90 | 34 ++ .../libgomp.oacc-fortran/deep-copy-4.f90 | 49 ++ .../libgomp.oacc-fortran/deep-copy-5.f90 | 57 ++ .../libgomp.oacc-fortran/deep-copy-6.f90 | 61 ++ .../libgomp.oacc-fortran/deep-copy-7.f90 | 89 +++ .../libgomp.oacc-fortran/deep-copy-8.f90 | 41 ++ .../libgomp.oacc-fortran/derived-type-1.f90 | 28 + .../libgomp.oacc-fortran/derivedtype-1.f95 | 30 + .../libgomp.oacc-fortran/derivedtype-2.f95 | 41 ++ .../libgomp.oacc-fortran/multidim-slice.f95 | 50 ++ .../libgomp.oacc-fortran/update-2.f90 | 284 +++++++++ 65 files changed, 4225 insertions(+), 735 deletions(-) create mode 100644 gcc/testsuite/c-c++-common/goacc/deep-copy-arrayofstruct.c create mode 100644 gcc/testsuite/c-c++-common/goacc/mdc-1.c create mode 100644 gcc/testsuite/c-c++-common/goacc/mdc-2.c create mode 100644 gcc/testsuite/g++.dg/goacc/mdc.C create mode 100644 gcc/testsuite/gfortran.dg/goacc/derived-types-2.f90 create mode 100644 gcc/testsuite/gfortran.dg/goacc/derived-types.f90 create mode 100644 libgomp/testsuite/libgomp.c-c++-common/unmap-infinity-2.c create mode 100644 libgomp/testsuite/libgomp.oacc-c++/deep-copy-12.C create mode 100644 libgomp/testsuite/libgomp.oacc-c++/deep-copy-13.C create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-1.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-10.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-11.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-14.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-2.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-3.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-4.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-5.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-6.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-7.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-8.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/deep-copy-9.c create mode 100644 libgomp/testsuite/libgomp.oacc-c-c++-common/unmap-infinity-1.c create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/class-ptr-param.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/classtypes-1.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/classtypes-2.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-1.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-2.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-3.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-4.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-5.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-6.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-7.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/deep-copy-8.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/derived-type-1.f90 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/derivedtype-1.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/derivedtype-2.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/multidim-slice.f95 create mode 100644 libgomp/testsuite/libgomp.oacc-fortran/update-2.f90