From patchwork Mon Mar 11 10:07:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 1910355 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.a=rsa-sha256 header.s=20230601 header.b=Clza8lwT; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TtXXb34gtz1yWy for ; Mon, 11 Mar 2024 21:08:15 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 621073858C50 for ; Mon, 11 Mar 2024 10:08:13 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by sourceware.org (Postfix) with ESMTPS id 4428C3858C32 for ; Mon, 11 Mar 2024 10:07:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4428C3858C32 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=baylibre.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4428C3858C32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::636 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710151671; cv=none; b=rKobaREgM+92paeFz1cHCOiMU889B+mtDjIriUr6T/Y25g+LREtMhSz2Coh7HEwyLU6GvtvXpsc1jqZ2lkosFjSdOFQZLy3HUY5waDo7ikgD4ewUWqUZIH+uK7auCBDkvwSEGTMKP/HjD2EYy0b0wrsmIMod8wPy+zSyQi/Uc2o= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1710151671; c=relaxed/simple; bh=3aHjrKNEVW4zuwXoktORi7V4TQMynobW3lN89t0BS6c=; h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject; b=dXilHeL+LHzF0AoGxvWjD82uHfx57I1pmFQ6Ibdo7HHrRgJyg5JXUNj5iNCXGwD7j9y/wUQoU2yZGpqsFd+3uoQXtKaT3FfHkJxu0Bd8XAVJEoV3YrexT2XfuFBuc9Csk8QRpAJD/lzgP2IeejLpuX0htZo377GY3fyoKftCofU= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-a45fd0a0980so204165666b.2 for ; Mon, 11 Mar 2024 03:07:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1710151667; x=1710756467; darn=gcc.gnu.org; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=tNvR6qL0lN07LZbf/upOXiPLQWnJdzP3W423mDIMkfg=; b=Clza8lwToQa/gldgkKDTQNRqPfhUx8bfhO0lJ2tZTcLQXCBo97qECTAR2QSRO3WOpY EWnGvMUKTSgeNKQQwOSsPLvpRHvWp3XzAtDCmT49uVLz8Ymv1YtqBHEEZRKZ4UYDSEAD JoIU8qGlE2XAxTHaFhzOnMeGr7/a5kfzaYALvlC+EVPOFxlWSGVTJz2T13sn3jM4zK/h i5cXQaXHjkwjl2T4YJv3ifXZVfMiXJ6vAMWpNHC1uUkx9IGE2JvM7bRKSdsXM601UgI9 /LkyiY1gh2eFdHKsMUcv563YWsBH/bEBCHZ4JQbZbwx+kq+CENz51wN1/CVqiCc2WZdz yqKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710151667; x=1710756467; h=subject:from:to:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=tNvR6qL0lN07LZbf/upOXiPLQWnJdzP3W423mDIMkfg=; b=nA7gtIfTeFM0pz2l7NlTO3J0jSCaDTWXmTk3P5ejF2YXeRnp2Ll+OHo1bNqlg/B9pM 4OR0f0PlDn5KjXT48e/MfBF1nLB8wOigkWWhGsBQcKI/leG/RdC+w86vy7N1gS63J6Wa RONrzet8754sobdN3jc52Y+kJThlskH3V2dur2K4GWmVJwo4/STd78R/pSfyB09FxWfZ wjyT9ycVNe0NbwC7ZtE+ki2TSNTfFNYp4HdryhQDIBGc5ep1dDgJG6KsYn1rB811Zvqr P/X58oDjIABRfIb+Vq+VdYDBoam6BsqmULl2jOHnMVqaoKIYbN9cg+fGZcwVTEhM8CGV VRYg== X-Gm-Message-State: AOJu0Yx3Xy1AKIARucYMjPlRgOr3VvOlpWUZI2f/ERa5i2ehBhr0XggZ xqvDOD6uGVvDbNzxJ9QqSI5DgDaTtMKuNMwTM146oNg4JZs/J69rFPJBkdfvbfXienM9XoP0gp8 wL18= X-Google-Smtp-Source: AGHT+IE5EJlz+D9f9p7TO8AmwzH+PwoD+SFKbaEIt5nDTWvzXKMSsjW9LlPQrLbIm9TIHlEktCTtWA== X-Received: by 2002:a17:907:a801:b0:a45:94bf:18e6 with SMTP id vo1-20020a170907a80100b00a4594bf18e6mr4632769ejc.73.1710151667294; Mon, 11 Mar 2024 03:07:47 -0700 (PDT) Received: from ?IPV6:2001:16b8:3fca:5b00:bf12:a916:639:812e? ([2001:16b8:3fca:5b00:bf12:a916:639:812e]) by smtp.gmail.com with ESMTPSA id zh16-20020a170906881000b00a44d01aff81sm2714444ejb.97.2024.03.11.03.07.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 11 Mar 2024 03:07:46 -0700 (PDT) Message-ID: Date: Mon, 11 Mar 2024 11:07:46 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: gcc-patches , Jakub Jelinek , "fortran@gcc.gnu.org" From: Tobias Burnus Subject: [Patch] OpenMP/Fortran: Fix defaultmap(none) issue with dummy procedures [PR114283] X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, HTML_MESSAGE, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, 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 X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Using dummy procedures in a target region with 'defaultmap(none)' leads to: Error: 'g' not specified in enclosing 'target' and this cannot be fixed by using 'firstprivate' as non-pointer dummy routines are rejected as "Error: Object 'g' is not a variable". Fixed by doing the same for mapping as for data sharing: using predetermined firstprivate. BTW: Only since GCC 14, 'declare target indirect' makes it possible to simply use dummy procedures and procedures pointers in a target region. Comments? Suggestions? Tobias PS: Procedure pointers aren't variables either, but they act even more like variables as they permit changing pointer association such that '(first)private' vs. 'shared'/'map' can both make sense. — GCC accepts those in (nearly) all clauses, ifort only in (first)private while flang not at all. The spec is somewhat silent about it. This is tracked in the same PR (PR114283) and in the specification issue #3823. OpenMP/Fortran: Fix defaultmap(none) issue with dummy procedures [PR114283] Dummy procedures look similar to variables but aren't - neither in Fortran nor in OpenMP. As the middle end sees PARM_DECLs, mark them as predetermined firstprivate for mapping (as already done in gfc_omp_predetermined_sharing). This does not address the isses related to procedure pointers, which are still discussed on spec level [see PR]. PR fortran/114283 gcc/fortran/ChangeLog: * trans-openmp.cc (gfc_omp_predetermined_mapping): Map dummy procedures as firstprivate. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/target4.f90: New test. gcc/fortran/trans-openmp.cc | 9 +++++++++ gcc/testsuite/gfortran.dg/gomp/target4.f90 | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index a2bf15665b3..1dba47126ed 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -343,6 +343,15 @@ gfc_omp_predetermined_mapping (tree decl) && GFC_DECL_SAVED_DESCRIPTOR (decl))) return OMP_CLAUSE_DEFAULTMAP_TO; + /* Dummy procedures aren't considered variables by OpenMP, thus are + disallowed in OpenMP clauses. They are represented as PARM_DECLs + in the middle-end, so return OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE here + to avoid complaining about their uses with defaultmap(none). */ + if (TREE_CODE (decl) == PARM_DECL + && TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == FUNCTION_TYPE) + return OMP_CLAUSE_DEFAULTMAP_FIRSTPRIVATE; + /* These are either array or derived parameters, or vtables. */ if (VAR_P (decl) && TREE_READONLY (decl) && (TREE_STATIC (decl) || DECL_EXTERNAL (decl))) diff --git a/gcc/testsuite/gfortran.dg/gomp/target4.f90 b/gcc/testsuite/gfortran.dg/gomp/target4.f90 new file mode 100644 index 00000000000..09364e707f1 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/target4.f90 @@ -0,0 +1,18 @@ +! { dg-additional-options "-fdump-tree-gimple" } + +! PR fortran/114283 + +! { dg-final { scan-tree-dump "#pragma omp parallel default\\(none\\) firstprivate\\(g\\)" "gimple" } } +! { dg-final { scan-tree-dump "#pragma omp target num_teams\\(-2\\) thread_limit\\(0\\) defaultmap\\(none\\) firstprivate\\(g\\)" "gimple" } } + +subroutine f(g) +procedure() :: g + +!$omp parallel default(none) + call g +!$omp end parallel + +!$omp target defaultmap(none) + call g +!$omp end target +end