From patchwork Wed Sep 4 13:26:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christophe Lyon X-Patchwork-Id: 97062 X-Patchwork-Delegate: rearnsha@gcc.gnu.org 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 184E7384A84F for ; Wed, 4 Sep 2024 13:32:24 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-oo1-xc34.google.com (mail-oo1-xc34.google.com [IPv6:2607:f8b0:4864:20::c34]) by sourceware.org (Postfix) with ESMTPS id 807ED385F028 for ; Wed, 4 Sep 2024 13:27:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 807ED385F028 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 807ED385F028 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::c34 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1725456464; cv=none; b=mpXDNIoo68igtrCJcmVUACICIRsSmGaor/JKHGiYe193j/mE7L5F6j5eOunN4FXeALikAEcSQC4VPSbmJgfx2srNKjKKe1xQpxdtPdPTrun4vyTPb3hU8NIYBPNkOW2JBSJzb66BWCuZlYFrEU2CX18TxJSvfTy68FAy2GRlXE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1725456464; c=relaxed/simple; bh=RWSrh1cC5VGo1YAxBs7oPHVpUOr4ghDmZTH08aJhPbg=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=V/3GgPqbAHN2p3PrIUz7M4edQFWo19bUG1yudGnfa/6bFR1kpD4/ii+ISLwNvNiQ0y5n72mqGn9TZHEUyT5Bsim20L9PEEwsm+FcwDglV7E4U7bgWMifVvPiGbRDjZnRTmRXDolYEbBPkRsSccJWHpsujCOJpRPNRwAphUHkaXk= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-oo1-xc34.google.com with SMTP id 006d021491bc7-5da6865312eso4158988eaf.3 for ; Wed, 04 Sep 2024 06:27:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1725456460; x=1726061260; 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=i3DaR+0yjaE+U9eesfKNu1o0srroBt4hQa1k1QjByGg=; b=pijqZtsDF0qO6iI7bh3FvxsZ1ewvjPWWNVBbjmwT6AwFdRA4dw2CzhSrhiDQlCPwRk Zw9dGLED/wJ74m+uIMR8uOp6czAKfl3mI8OHQT42WmCIkrufaEegcZUYGaFxakRmKhK3 JsVfUkpzcSIETgNtPfQl3fs9X1lwS7Q5S2VV67PwWkllk620k7kIzisKfTEme/hfoo4R KzxwImR4SwSD4BTS5OO419TOmBoWMTtTNg8C8+sy07hPqaAsIpZnk+Ze1Id7W4CH7QX0 D5jAy17IewLg/OaEAVhTdGgyHEgFvuwJ3/0ffHqRRDaoUaRzYWBIrsOOopoTuw7RRXEM sW8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725456460; x=1726061260; 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=i3DaR+0yjaE+U9eesfKNu1o0srroBt4hQa1k1QjByGg=; b=IzdO1IfHo9MOFmpnND3XfwZZCBe7PmITmwhBm89cGlt15FKQq6FNsayjIXbXCrsQSk upZ/5mcIHKOmQ3S1XnDjvvNblneYUUQ1EJRXfKgEcS2Fo+wqBt53uXoVb0LEk11PNa9e IUbIUkxAB7nL9fJOqNN7xZPA31f+t7G3IUirvBFmJfJSy75J04GkdKWlHsyeCDSkaLiL EuuVZdYLJoUWtZO2KeUu6Q0z0GLF35/J0ZA51MUv5TP8copbNUIvxjM+OvODtsqJk/EG ujjJSu96VSma91ilpG3Unr/h3gLaE8TJj9W6YPltLehavy3Hy5EDGsC5O6wvdj6tDMQ0 0nsA== X-Gm-Message-State: AOJu0YwlGXksKtfHv8GXJxZ9qeVwdTOBQW0IUNCAloopKw0UwJlFDTso 16ghQ8m8U07DsdZ+XMFJQiUsUE4kXU/G2GEm3TG1Eb0AvvexAlA9KQMy76LMiyP/YWUFbN6KtZr tXknWFw== X-Google-Smtp-Source: AGHT+IGcpf13mH+1r8d9g1yUgcmIdVK9aQd9NANWOlZVdnZii+5KNbqlCDtImkNXNKLkOk0WZDHZTg== X-Received: by 2002:a05:6820:278b:b0:5ba:ec8b:44b5 with SMTP id 006d021491bc7-5dfacef8751mr15974503eaf.3.1725456460316; Wed, 04 Sep 2024 06:27:40 -0700 (PDT) Received: from localhost.localdomain ([139.178.84.207]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-5dfa0580692sm2308062eaf.46.2024.09.04.06.27.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 04 Sep 2024 06:27:39 -0700 (PDT) From: Christophe Lyon To: gcc-patches@gcc.gnu.org, richard.earnshaw@arm.com, ramanara@nvidia.com Cc: Christophe Lyon Subject: [PATCH v2 22/36] arm: [MVE intrinsics] fix checks of immediate arguments Date: Wed, 4 Sep 2024 13:26:36 +0000 Message-Id: <20240904132650.2720446-23-christophe.lyon@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240904132650.2720446-1-christophe.lyon@linaro.org> References: <20240711214305.3193022-1-christophe.lyon@linaro.org> <20240904132650.2720446-1-christophe.lyon@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, 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~patchwork=sourceware.org@gcc.gnu.org As discussed in [1], it is better to use "su64" for immediates in intrinsics signatures in order to provide better diagnostics (erroneous constants are not truncated for instance). This patch thus uses su64 instead of ss32 in binary_lshift_unsigned, binary_rshift_narrow, binary_rshift_narrow_unsigned, ternary_lshift, ternary_rshift. In addition, we fix cases where we called require_integer_immediate whereas we just want to check that the argument is a scalar, and thus use require_scalar_type in binary_acca_int32, binary_acca_int64, unary_int32_acc. Finally, in binary_lshift_unsigned we just want to check that 'imm' is an immediate, not the optional predicates. [1] https://gcc.gnu.org/pipermail/gcc-patches/2024-August/660262.html 2024-08-21 Christophe Lyon gcc/ * config/arm/arm-mve-builtins-shapes.cc (binary_acca_int32): Fix check of scalar argument. (binary_acca_int64): Likewise. (binary_lshift_unsigned): Likewise. (binary_rshift_narrow): Likewise. (binary_rshift_narrow_unsigned): Likewise. (ternary_lshift): Likewise. (ternary_rshift): Likewise. (unary_int32_acc): Likewise. --- gcc/config/arm/arm-mve-builtins-shapes.cc | 47 +++++++++++++++-------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/gcc/config/arm/arm-mve-builtins-shapes.cc b/gcc/config/arm/arm-mve-builtins-shapes.cc index 971e86a2727..a1d2e243128 100644 --- a/gcc/config/arm/arm-mve-builtins-shapes.cc +++ b/gcc/config/arm/arm-mve-builtins-shapes.cc @@ -477,18 +477,23 @@ struct binary_acca_int32_def : public overloaded_base<0> { unsigned int i, nargs; type_suffix_index type; + const char *first_type_name; + if (!r.check_gp_argument (3, i, nargs) || (type = r.infer_vector_type (1)) == NUM_TYPE_SUFFIXES) return error_mark_node; + first_type_name = (type_suffixes[type].unsigned_p + ? "uint32_t" + : "int32_t"); + if (!r.require_scalar_type (0, first_type_name)) + return error_mark_node; + unsigned int last_arg = i + 1; for (i = 1; i < last_arg; i++) if (!r.require_matching_vector_type (i, type)) return error_mark_node; - if (!r.require_integer_immediate (0)) - return error_mark_node; - return r.resolve_to (r.mode_suffix_id, type); } }; @@ -514,18 +519,24 @@ struct binary_acca_int64_def : public overloaded_base<0> { unsigned int i, nargs; type_suffix_index type; + const char *first_type_name; + if (!r.check_gp_argument (3, i, nargs) || (type = r.infer_vector_type (1)) == NUM_TYPE_SUFFIXES) return error_mark_node; + + first_type_name = (type_suffixes[type].unsigned_p + ? "uint64_t" + : "int64_t"); + if (!r.require_scalar_type (0, first_type_name)) + return error_mark_node; + unsigned int last_arg = i + 1; for (i = 1; i < last_arg; i++) if (!r.require_matching_vector_type (i, type)) return error_mark_node; - if (!r.require_integer_immediate (0)) - return error_mark_node; - return r.resolve_to (r.mode_suffix_id, type); } }; @@ -613,7 +624,7 @@ struct binary_lshift_unsigned_def : public overloaded_base<0> bool preserve_user_namespace) const override { b.add_overloaded_functions (group, MODE_n, preserve_user_namespace); - build_all (b, "vu0,vs0,ss32", group, MODE_n, preserve_user_namespace); + build_all (b, "vu0,vs0,su64", group, MODE_n, preserve_user_namespace); } tree @@ -622,6 +633,7 @@ struct binary_lshift_unsigned_def : public overloaded_base<0> unsigned int i, nargs; type_suffix_index type; if (!r.check_gp_argument (2, i, nargs) + || !r.require_integer_immediate (i) || (type = r.infer_vector_type (i-1)) == NUM_TYPE_SUFFIXES) return error_mark_node; @@ -636,10 +648,6 @@ struct binary_lshift_unsigned_def : public overloaded_base<0> return error_mark_node; } - for (; i < nargs; ++i) - if (!r.require_integer_immediate (i)) - return error_mark_node; - return r.resolve_to (r.mode_suffix_id, type); } @@ -1097,7 +1105,7 @@ struct binary_rshift_narrow_def : public overloaded_base<0> bool preserve_user_namespace) const override { b.add_overloaded_functions (group, MODE_n, preserve_user_namespace); - build_all (b, "vh0,vh0,v0,ss32", group, MODE_n, preserve_user_namespace); + build_all (b, "vh0,vh0,v0,su64", group, MODE_n, preserve_user_namespace); } tree @@ -1144,7 +1152,7 @@ struct binary_rshift_narrow_unsigned_def : public overloaded_base<0> bool preserve_user_namespace) const override { b.add_overloaded_functions (group, MODE_n, preserve_user_namespace); - build_all (b, "vhu0,vhu0,v0,ss32", group, MODE_n, preserve_user_namespace); + build_all (b, "vhu0,vhu0,v0,su64", group, MODE_n, preserve_user_namespace); } tree @@ -1588,7 +1596,7 @@ struct ternary_lshift_def : public overloaded_base<0> bool preserve_user_namespace) const override { b.add_overloaded_functions (group, MODE_n, preserve_user_namespace); - build_all (b, "v0,v0,v0,ss32", group, MODE_n, preserve_user_namespace); + build_all (b, "v0,v0,v0,su64", group, MODE_n, preserve_user_namespace); } tree @@ -1683,7 +1691,7 @@ struct ternary_rshift_def : public overloaded_base<0> bool preserve_user_namespace) const override { b.add_overloaded_functions (group, MODE_n, preserve_user_namespace); - build_all (b, "v0,v0,v0,ss32", group, MODE_n, preserve_user_namespace); + build_all (b, "v0,v0,v0,su64", group, MODE_n, preserve_user_namespace); } tree @@ -1838,11 +1846,18 @@ struct unary_int32_acc_def : public overloaded_base<0> { unsigned int i, nargs; type_suffix_index type; + const char *first_type_name; + if (!r.check_gp_argument (2, i, nargs) - || !r.require_integer_immediate (0) || (type = r.infer_vector_type (1)) == NUM_TYPE_SUFFIXES) return error_mark_node; + first_type_name = (type_suffixes[type].unsigned_p + ? "uint32_t" + : "int32_t"); + if (!r.require_scalar_type (0, first_type_name)) + return error_mark_node; + return r.resolve_to (r.mode_suffix_id, type); } };