From patchwork Mon Feb 10 18:07:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sandra Loosemore X-Patchwork-Id: 106299 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 9740F385772D for ; Mon, 10 Feb 2025 18:18:23 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9740F385772D Authentication-Results: sourceware.org; dkim=pass (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=fiJguyiw X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-il1-x12f.google.com (mail-il1-x12f.google.com [IPv6:2607:f8b0:4864:20::12f]) by sourceware.org (Postfix) with ESMTPS id DDEA83857003 for ; Mon, 10 Feb 2025 18:07:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DDEA83857003 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 DDEA83857003 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::12f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1739210863; cv=none; b=otz4krmtOML8ucVugF0KR7zQpFSavUBbb0Xw0YF0FbvPoA3xTbuBfZQxTsXR9yhr8oi6qfQXY1NGaRr9MlutVHvXyWYPUn48A4DOaHcSeV6sjjHLvFNrXW0azRNFewIOyy6KnXbQd2jlat5b85DZOV+UaWVALiwcbKPnT1H980s= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1739210863; c=relaxed/simple; bh=5z6cdyKMIljuFYZn1FZev0tdPnrKwJd//K8gk0AseMU=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=ONA3EVo48x8c0cjDb05AVq8kh2LrpN/EzXdeCBlsuzaoldvrNflBsFYfbggCNYtLOCVND7Pdl6/FZfjmdz6oU846lP65f4oiMYEZTIcZuLNAGfVhVBsaDB+BglCBSS+5MWtBrK8n10RB/Cf6qml1r8mOxYRYCGn8I2O8qxjYdY4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DDEA83857003 Received: by mail-il1-x12f.google.com with SMTP id e9e14a558f8ab-3d144f1f68bso10684865ab.3 for ; Mon, 10 Feb 2025 10:07:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1739210861; x=1739815661; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Mm+Fs2WplkqSxu0tLENdTMnRucMVPdxCKU/JIxBQvD4=; b=fiJguyiwx3zemdzFdffwA6cAMLZGr0wAln9VhS7lh00Hpen2GRdFtOrZbqkZecpUzF 0KGllGxQzeddc+jL28Gnd9ReM/DN5fsNNEjtTg/6+rkrGmh4nsKynJqd9gMs9pwIgDq/ RD2e7A7QBlfUx4Baf2XncgKmhrY+0oUv0sXhP2nTmg1eZBoWvxuwZ7K0obw95OpeHGe6 8Az4V+7QZA4IhFml8HcOmsqUPrBtYSyCySh3EMJvS3D5SV3+2qf+cEOkP39mlWgUELYs qlVTGDyat7ukmVG71txmeE7XxpQUTcNgwQV63sDcpreTFKpJvpb5pLWwsZVHGbavAXd9 Ui7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739210861; x=1739815661; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Mm+Fs2WplkqSxu0tLENdTMnRucMVPdxCKU/JIxBQvD4=; b=uFgUKtGP+I5WIHpWrB6nhv1HUBMFPlMTsCTOqirywgkcxjQxdCytVLs3HLNMbbjCyk f7oxsvGMCtEwoZ2goReC+tGLFxce7rMFZoUuKfQzd/p5kPclpyuNWxQb+mUwI7Ehj8vl pznSemFae1GUuM7wSpkrguROrQq4hzmekaYbGNKmrDplS2AQA4SWgFm/KZb2rmRWD8nT n5XVdQRfRZV2Oso+NEHu7o5yuka9nW+Q32Yy1tpWCpleLF5Vljym/96p8LW4YU6rhQlB MkmJlHsoqJtovA9AjZdVmG/XaaorfxKNhtbMVr1bPJfWrDXafVnlf8cQVuQ7JYF4O39c K4bw== X-Gm-Message-State: AOJu0YwhhKrI1M6S8eA7kPPDBUhZ6XOBQvYnDnsHJZ1S0lU1oFjzfLYw yBj8C5E8pWlG9Q+Q7C2Tz7s00CQNvZ/cRml/uwdaOzzHcsAZNV4URQgZ2XpQBXIFGS+wEg2xe3P b X-Gm-Gg: ASbGncuOl5sVBLZC1mHLrz2U9GLvuFmsLcADMsc72qEL9kmgIOdV3X43n0QZjhHspd1 q/FYkb+netPzjRKxCfSCr9phkeXCZ/SNcBk5UTZRlF/tXluVWugiRAxhp03DbPzAOF87xkxejBW E0YvhPf4s1X2kNf3LRu/YByDCqWtL+jhVzECu75ju6crJog2zIy4pXg/19HuQKw5cLNAI3Xz365 Bo5Z2a0M1SNOPnN2g3J8tXZzytfyBVJcAdeYq/MCyu9tdrfWwli8r8+/Lky8OmZczSmQxA+WRuI qddoTI6YIu/jLmsnST8qHJpoBvA= X-Google-Smtp-Source: AGHT+IHVZqEHTquT0Dom/JoAAKtNyD/bk6J/254OHlOFLQQjV7+VjGl9z/00NdujQSdMixMvCHYC9g== X-Received: by 2002:a05:6e02:3b84:b0:3d0:1ee6:731b with SMTP id e9e14a558f8ab-3d13df00890mr131974195ab.15.1739210861092; Mon, 10 Feb 2025 10:07:41 -0800 (PST) Received: from pondscum.hsd1.co.comcast.net ([2601:281:d901:97c0::af71]) by smtp.gmail.com with ESMTPSA id e9e14a558f8ab-3d13d83c967sm19615365ab.45.2025.02.10.10.07.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Feb 2025 10:07:39 -0800 (PST) From: Sandra Loosemore To: gcc-patches@gcc.gnu.org Cc: jakub@redhat.com, tburnus@baylibre.com Subject: [PATCH 2/7] OpenMP: Pass a 3-way flag to omp_check_context_selector instead of a bool. Date: Mon, 10 Feb 2025 11:07:20 -0700 Message-Id: <20250210180725.2076678-3-sloosemore@baylibre.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250210180725.2076678-1-sloosemore@baylibre.com> References: <20250210180725.2076678-1-sloosemore@baylibre.com> MIME-Version: 1.0 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP 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~patchwork=sourceware.org@gcc.gnu.org The OpenMP "begin declare variant" directive has slightly different requirements for context selectors than regular "declare variant", so something more than a bool is required to tell the error-checking routine what to check. gcc/ChangeLog * omp-general.cc (omp_check_context_selector): Change metadirective_p argument to a 3-way flag. Add extra check for OMP_CTX_BEGIN_DECLARE_VARIANT. * omp-general.h (enum omp_ctx_directive): New. (omp_check_context_selector): Adjust declaration. gcc/c/ChangeLog * c-parser.cc (c_finish_omp_declare_variant): Update call to omp_check_context_selector. (c_parser_omp_metadirective): Likewise. gcc/cp/ChangeLog * parser.cc (cp_finish_omp_declare_variant): Update call to omp_check_context_selector. (cp_parser_omp_metadirective): Likewise. gcc/fortran/ChangeLog * trans-openmp.cc (gfc_trans_omp_declare_variant): Update call to omp_check_context_selector. (gfc_trans_omp_metadirective): Likewise. --- gcc/c/c-parser.cc | 6 ++++-- gcc/cp/parser.cc | 6 ++++-- gcc/fortran/trans-openmp.cc | 5 +++-- gcc/omp-general.cc | 18 +++++++++++++++--- gcc/omp-general.h | 6 +++++- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc index 106a5b48093..62c6bc031d6 100644 --- a/gcc/c/c-parser.cc +++ b/gcc/c/c-parser.cc @@ -26982,7 +26982,8 @@ c_finish_omp_declare_variant (c_parser *parser, tree fndecl, tree parms) ctx = c_parser_omp_context_selector_specification (parser, parms); if (ctx == error_mark_node) goto fail; - ctx = omp_check_context_selector (match_loc, ctx, false); + ctx = omp_check_context_selector (match_loc, ctx, + OMP_CTX_DECLARE_VARIANT); if (ctx != error_mark_node && variant != error_mark_node) { if (TREE_CODE (variant) != FUNCTION_DECL) @@ -29099,7 +29100,8 @@ c_parser_omp_metadirective (c_parser *parser, bool *if_p) NULL_TREE); if (ctx == error_mark_node) goto error; - ctx = omp_check_context_selector (match_loc, ctx, true); + ctx = omp_check_context_selector (match_loc, ctx, + OMP_CTX_METADIRECTIVE); if (ctx == error_mark_node) goto error; diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index bd43f885ebe..9d0970b4d83 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -50437,7 +50437,8 @@ cp_finish_omp_declare_variant (cp_parser *parser, cp_token *pragma_tok, ctx = cp_parser_omp_context_selector_specification (parser, true); if (ctx == error_mark_node) goto fail; - ctx = omp_check_context_selector (match_loc, ctx, false); + ctx = omp_check_context_selector (match_loc, ctx, + OMP_CTX_DECLARE_VARIANT); if (ctx != error_mark_node && variant != error_mark_node) { tree match_loc_node @@ -51424,7 +51425,8 @@ cp_parser_omp_metadirective (cp_parser *parser, cp_token *pragma_tok, ctx = cp_parser_omp_context_selector_specification (parser, false); if (ctx == error_mark_node) goto fail; - ctx = omp_check_context_selector (match_loc, ctx, true); + ctx = omp_check_context_selector (match_loc, ctx, + OMP_CTX_METADIRECTIVE); if (ctx == error_mark_node) goto fail; diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc index e9103cd3bac..580d5837bd5 100644 --- a/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -8776,7 +8776,8 @@ gfc_trans_omp_declare_variant (gfc_namespace *ns) continue; } set_selectors = omp_check_context_selector - (gfc_get_location (&odv->where), set_selectors, false); + (gfc_get_location (&odv->where), set_selectors, + OMP_CTX_DECLARE_VARIANT); if (set_selectors != error_mark_node) { if (!variant_proc_sym->attr.implicit_type @@ -9082,7 +9083,7 @@ gfc_trans_omp_metadirective (gfc_code *code) tree ctx = gfc_trans_omp_set_selector (variant->selectors, variant->where); ctx = omp_check_context_selector (gfc_get_location (&variant->where), - ctx, true); + ctx, OMP_CTX_METADIRECTIVE); if (ctx == error_mark_node) return error_mark_node; diff --git a/gcc/omp-general.cc b/gcc/omp-general.cc index 0d6f02ece31..0a2dd6b5be7 100644 --- a/gcc/omp-general.cc +++ b/gcc/omp-general.cc @@ -1302,7 +1302,8 @@ expr_uses_parm_decl (tree *tp, int *walk_subtrees ATTRIBUTE_UNUSED, it is correct or error_mark_node otherwise. */ tree -omp_check_context_selector (location_t loc, tree ctx, bool metadirective_p) +omp_check_context_selector (location_t loc, tree ctx, + enum omp_ctx_directive directive) { bool tss_seen[OMP_TRAIT_SET_LAST], ts_seen[OMP_TRAIT_LAST]; @@ -1398,7 +1399,7 @@ omp_check_context_selector (location_t loc, tree ctx, bool metadirective_p) /* This restriction is documented in the spec in the section for the metadirective "when" clause (7.4.1 in the 5.2 spec). */ - if (metadirective_p + if (directive == OMP_CTX_METADIRECTIVE && ts_code == OMP_TRAIT_CONSTRUCT_SIMD && OMP_TS_PROPERTIES (ts)) { @@ -1408,10 +1409,21 @@ omp_check_context_selector (location_t loc, tree ctx, bool metadirective_p) return error_mark_node; } + /* "simd" is not allowed at all in "begin declare variant" + selectors. */ + if (directive == OMP_CTX_BEGIN_DECLARE_VARIANT + && ts_code == OMP_TRAIT_CONSTRUCT_SIMD) + { + error_at (loc, + "the % selector is not permitted in a " + "% context selector"); + return error_mark_node; + } + /* Reject expressions that reference parameter variables in "declare variant", as this is not yet implemented. FIXME; see PR middle-end/113904. */ - if (!metadirective_p + if (directive != OMP_CTX_METADIRECTIVE && (ts_code == OMP_TRAIT_DEVICE_NUM || ts_code == OMP_TRAIT_USER_CONDITION)) { diff --git a/gcc/omp-general.h b/gcc/omp-general.h index 4e143ed586b..5d44ff979f0 100644 --- a/gcc/omp-general.h +++ b/gcc/omp-general.h @@ -194,8 +194,12 @@ extern tree find_combined_omp_for (tree *, int *, void *); extern poly_uint64 omp_max_vf (bool); extern int omp_max_simt_vf (void); extern const char *omp_context_name_list_prop (tree); +enum omp_ctx_directive + { OMP_CTX_DECLARE_VARIANT, + OMP_CTX_BEGIN_DECLARE_VARIANT, + OMP_CTX_METADIRECTIVE }; extern tree omp_check_context_selector (location_t loc, tree ctx, - bool metadirective_p); + enum omp_ctx_directive directive); extern void omp_mark_declare_variant (location_t loc, tree variant, tree construct); extern int omp_context_selector_matches (tree, tree, bool);