From patchwork Wed Sep 30 11:37:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 1374321 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=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4C1Z4m2tccz9sSC for ; Wed, 30 Sep 2020 21:37:58 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E4EC23943550; Wed, 30 Sep 2020 11:37:55 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from esa2.mentor.iphmx.com (esa2.mentor.iphmx.com [68.232.141.98]) by sourceware.org (Postfix) with ESMTPS id DE9D5386F46F for ; Wed, 30 Sep 2020 11:37:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org DE9D5386F46F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Tobias_Burnus@mentor.com IronPort-SDR: NSUySntSzW0RLWfrGshtQMDO0IvKfpQVZLTE/Zk5GuabJgyBSbliM5EKklm3DOz5tmiPbkrIVT CU0TXmX1+zodB77s/RKeYStzhMgYJt0Vwev3eOnHy5a156Oe+drKPyaa/HYFTJNTSPt/vuXsai tpcRnZMqvtsIDZMkVZThcxp2uwRMXucVkP3SKnkkMp5QcbqcrVXVUqIWK12xQWwJBOEuBbXdeM apLecHABoWP+8dr0KSPAzaIATTQx6KUJEPFgJ/YBqhNTn5if5xMEM1w/SmBgVebEgbIQKSeNij wTA= X-IronPort-AV: E=Sophos;i="5.77,322,1596528000"; d="diff'?scan'208";a="53475301" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa2.mentor.iphmx.com with ESMTP; 30 Sep 2020 03:37:51 -0800 IronPort-SDR: K3KK831NfbZ7qTRDdHISIhS2Dj/uNeXhNB9BqoyS2K75uyQT/oQqN6vIM/D52FNEVSlT/QCrDW FafhASyO8Ot0E/wyfT5iMB1a62f/4Ux7UyvYqGoEReM2y/rxuA7C8RIN9Q3wQvpDjrhKkBVPUT t1gWRvnQfrSv7+h+wrZI/XGsplXxpzPi8Ya+ad9oC7A0eiMcX7WiehTvJ26aRaY4T7VUDT0qwz /ikntpWLnryUY3Wp/hgASr1AsHckthplAmcfYwqxioMwvYMKIvFwTQi9zfraZGzRBSxaGEsoYf jUs= To: gcc-patches , Jakub Jelinek From: Tobias Burnus Subject: [Patch] OpenMP: Add implicit declare target for nested procedures Message-ID: Date: Wed, 30 Sep 2020 13:37:46 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 Content-Language: en-US X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) 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 autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: , Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" We missed to handle nested procedures. OK for the trunk? Tobias ----------------- Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter OpenMP: Add implicit declare target for nested procedures gcc/ChangeLog: * omp-offload.c (omp_discover_implicit_declare_target): Also handled nested functions. libgomp/ChangeLog: * testsuite/libgomp.fortran/declare-target-3.f90: New test. gcc/omp-offload.c | 7 ++++ .../testsuite/libgomp.fortran/declare-target-3.f90 | 45 ++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c index a89275b3a7a..7fb3a72ec55 100644 --- a/gcc/omp-offload.c +++ b/gcc/omp-offload.c @@ -327,11 +327,18 @@ omp_discover_implicit_declare_target (void) FOR_EACH_DEFINED_FUNCTION (node) if (DECL_SAVED_TREE (node->decl)) { + struct cgraph_node *cgn; if (omp_declare_target_fn_p (node->decl)) worklist.safe_push (node->decl); else if (DECL_STRUCT_FUNCTION (node->decl) && DECL_STRUCT_FUNCTION (node->decl)->has_omp_target) worklist.safe_push (node->decl); + for (cgn = node->nested; cgn; cgn = cgn->next_nested) + if (omp_declare_target_fn_p (cgn->decl)) + worklist.safe_push (cgn->decl); + else if (DECL_STRUCT_FUNCTION (cgn->decl) + && DECL_STRUCT_FUNCTION (cgn->decl)->has_omp_target) + worklist.safe_push (cgn->decl); } FOR_EACH_STATIC_INITIALIZER (vnode) if (omp_declare_target_var_p (vnode->decl)) diff --git a/libgomp/testsuite/libgomp.fortran/declare-target-3.f90 b/libgomp/testsuite/libgomp.fortran/declare-target-3.f90 new file mode 100644 index 00000000000..6e5301de0a9 --- /dev/null +++ b/libgomp/testsuite/libgomp.fortran/declare-target-3.f90 @@ -0,0 +1,45 @@ +! { dg-additional-options "-fdump-tree-omplower" } + +module m + implicit none (type, external) +contains + subroutine mod_proc(x) + integer :: x(2) + x = x + 5 + end subroutine +end module m + +program main + use m + implicit none (type, external) + if (any (foo() /= [48, 49])) stop 1 +contains + integer function fourty_two(y) + integer :: y + fourty_two = y + 42 + end function + + integer function wrapper (x, y) + integer :: x, y(2) + call mod_proc(y) + wrapper = fourty_two(x) + 1 + end function + + function foo() + integer :: foo(2) + integer :: a(2) + integer :: b, summed(2) + a = [1, 2] + b = -1 + !$omp target map (tofrom: a, b, summed) + summed = wrapper (b, a) + !$omp end target + if (b /= -1) stop 2 ! unchanged + if (any (summed /= 42)) stop 3 ! b + 42 + 1 = 42 + if (any (a /= [6, 7])) stop 4 ! [1, 2] + 5 + foo = summed + a ! [48, 49] + end function +end + +! 3 times: mod_proc, fourty_two and wrapper: +! { dg-final { scan-tree-dump-times "__attribute__..omp declare target" 3 "omplower" } }