From patchwork Sun Nov 10 12:55:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 2009219 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=UnTZKEAE; 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 4XmXkP1xHbz1xyk for ; Sun, 10 Nov 2024 23:56:45 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 81832385842D for ; Sun, 10 Nov 2024 12:56:43 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yw1-x1133.google.com (mail-yw1-x1133.google.com [IPv6:2607:f8b0:4864:20::1133]) by sourceware.org (Postfix) with ESMTPS id E70C9385840B for ; Sun, 10 Nov 2024 12:55:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E70C9385840B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E70C9385840B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::1133 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243368; cv=none; b=E5qHdaT4ysg1bnvujz1Jt7cCA+xyqYRFi5ICpa7/S8njUxo2h9dhMtq/jXgUhr2x/bhQDzFNo0+INn5EIdvpNytyj7lrkTy+lkQLHKJcD/mlBnLfwQRscR4UxWX6Tz2HYg48pt5kDn8pSfLv+fr344siVOgU71wra5wD1Abxq1w= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243368; c=relaxed/simple; bh=kM3TNtEEQ4Eezo7ImAllZlCJrG0M1ee3zO0Sod1i2HQ=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=AcoufnVfHu2joLSpf8QSeGddMJpM1+YRaWPjMxU+l+jI7HVyZksZdqdALGybWKRd8tlSQF7danxTg4RcrlyROwIbQT8dfAWEROgf6EDbixyYeABx2q3lQx92vxD2wZ5wpRABvtakW4Sl/1wPWzVFYCe9OawnF8Lqk4naKGRNjUM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yw1-x1133.google.com with SMTP id 00721157ae682-6ea5003deccso38202947b3.0 for ; Sun, 10 Nov 2024 04:55:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731243358; x=1731848158; 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=NuSnpsktDjo/omLXUhskXhppIfiStsaQJl4mOXRB+1A=; b=UnTZKEAEj/9cN3ZrYKckQPVuqg1YvOLr/bdb6jaRY/Pntdets7TU+mRIsvQoqwa26Z QipmpZOvYrCeW6x1HP80/20uBHCfyWDLo1JuPIXo0wzlF1UosBD29L4oorGYN6/aBzC/ s2KEPYIJqZmd6ENTlLKvh1QpzFpraTlo7SjLlacU71/hdjdkhY/fCY/XIsnukSbCq9Do roSli/u3mY6BEIxmLO2pR6UDeMgKPwxU8LQSzUkaoHOzFM1kq1Qvic2obu+KhLsdntE1 kt9m0kDUJD4fCumKv0+tS9G69ZTjnLJuGT8Jbm/2JrwbuquNpJnABSyVsXChLytd3URU QPRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731243358; x=1731848158; 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=NuSnpsktDjo/omLXUhskXhppIfiStsaQJl4mOXRB+1A=; b=C8vH/2In6ntd/s2dEM/Yj0UhhvcOqCg2N+Umk7LVyIy7kUfRGCKXpLRv2FihKhneJU md3qEf5qXQIyHLNmYENkNGZJYZJd5FerFBj6ogxqw276SYyYhHsHPywsuOG7qY/2TqFY J+5aKU8luzRvQaJaL8J0q66JM7liy/taqaeKy+iufeQR/KGjXZxTe/mYT/le6q0QEghG laA4gcepltx0zIEVdXBROGeL04LeIzAmCqBwNCzk5ngRfF2uo3XqZy+i9aSe1w+LMiVh XDMYYPiQD4L6YFdrBrfDughbvKEbxgq3ATNNfF7gm6RzRRRnE46ejKii/swxJ6OcDW+G AgdA== X-Gm-Message-State: AOJu0YwfQJHu3PcWVtNZJODW4iNmhQVpqwzh42T57/+uzpUVH5g6Pl4g 5XEsX1Amt2OBup7q4wAh2fJr2pIa2TACSsMhbhC7zmpp07QCvcKkKNre9NWOuEnfGg== X-Google-Smtp-Source: AGHT+IH7fHRop3+x94vF86VzAT5Xcu6RjLcObjhOSv5FGNfG5qGDF+vsSDvy0bKSt71CPo/pwilvDg== X-Received: by 2002:a81:b306:0:b0:6ea:ebba:3059 with SMTP id 00721157ae682-6eaebba3653mr46561027b3.0.1731243357664; Sun, 10 Nov 2024 04:55:57 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.142.161]) by smtp.gmail.com with ESMTPSA id 00721157ae682-6eace8f0bdbsm15347587b3.47.2024.11.10.04.55.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Nov 2024 04:55:56 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id 8CFDAC0216; Sun, 10 Nov 2024 20:55:50 +0800 (CST) From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, ubizjak@gmail.com, hongtao.liu@intel.com Subject: [PATCH v3 1/7] Improve outgoing integer argument promotion Date: Sun, 10 Nov 2024 20:55:44 +0800 Message-ID: <20241110125550.787007-2-hjl.tools@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241110125550.787007-1-hjl.tools@gmail.com> References: <20241110125550.787007-1-hjl.tools@gmail.com> MIME-Version: 1.0 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 For targets, like x86, which define TARGET_PROMOTE_PROTOTYPES to return true, all integer arguments smaller than int are passed as int: [hjl@gnu-tgl-3 pr14907]$ cat x.c extern int baz (char c1); int foo (char c1) { return baz (c1); } [hjl@gnu-tgl-3 pr14907]$ gcc -S -O2 -m32 x.c [hjl@gnu-tgl-3 pr14907]$ cat x.s .file "x.c" .text .p2align 4 .globl foo .type foo, @function foo: .LFB0: .cfi_startproc movsbl 4(%esp), %eax movl %eax, 4(%esp) jmp baz .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (GNU) 14.2.1 20240912 (Red Hat 14.2.1-3)" .section .note.GNU-stack,"",@progbits [hjl@gnu-tgl-3 pr14907]$ But integer promotion: movsbl 4(%esp), %eax movl %eax, 4(%esp) isn't necessary if incoming arguments and outgoing arguments are the same. Drop targetm.promote_prototypes from C, C++ and Ada frontends and apply targetm.promote_prototypes during RTL call expansion. gcc/ PR middle-end/14907 * calls.cc: Include "ssa.h", "tree-ssa-live.h" and "tree-outof-ssa.h". (get_promoted_int_value_from_ssa_name): New function. (get_promoted_int_value): Likewise. (initialize_argument_information): Call get_promoted_int_value to promote integer function argument. * gimple.cc (gimple_builtin_call_types_compatible_p): Remove the targetm.calls.promote_prototypes call. * tree.cc (tree_builtin_call_types_compatible_p): Likewise. gcc/ada/ PR middle-end/14907 * gcc-interface/utils.cc (create_param_decl): Remove the targetm.calls.promote_prototypes call. gcc/c/ PR middle-end/14907 * c-decl.cc (start_decl): Remove the targetm.calls.promote_prototypes call. (store_parm_decls_oldstyle): Likewise. (finish_function): Likewise. * c-typeck.cc (convert_argument): Likewise. (c_safe_arg_type_equiv_p): Likewise. gcc/cp/ PR middle-end/14907 * call.cc (type_passed_as): Remove the targetm.calls.promote_prototypes call. (convert_for_arg_passing): Likewise. * typeck.cc (cxx_safe_arg_type_equiv_p): Likewise. gcc/testsuite/ PR middle-end/14907 * gcc.target/i386/pr14907-1.c: New test. * gcc.target/i386/pr14907-2.c: Likewise. * gcc.target/i386/pr14907-3.c: Likewise. * gcc.target/i386/pr14907-4.c: Likewise. * gcc.target/i386/pr14907-5.c: Likewise. * gcc.target/i386/pr14907-6.c: Likewise. * gcc.target/i386/pr14907-7.c: Likewise. * gcc.target/i386/pr14907-8.c: Likewise. * gcc.target/i386/pr14907-9.c: Likewise. * gcc.target/i386/pr14907-10.c: Likewise. * gcc.target/i386/pr14907-11.c: Likewise. * gcc.target/i386/pr14907-12.c: Likewise. * gcc.target/i386/pr14907-13.c: Likewise. * gcc.target/i386/pr14907-14.c: Likewise. * gcc.target/i386/pr14907-15.c: Likewise. * gcc.target/i386/pr14907-16.c: Likewise. * gfortran.dg/pr14907-1.f90: Likewise. Signed-off-by: H.J. Lu --- gcc/ada/gcc-interface/utils.cc | 24 ------- gcc/c/c-decl.cc | 40 ----------- gcc/c/c-typeck.cc | 19 ++--- gcc/calls.cc | 81 ++++++++++++++++++++++ gcc/cp/call.cc | 10 --- gcc/cp/typeck.cc | 13 ++-- gcc/gimple.cc | 10 +-- gcc/testsuite/gcc.target/i386/pr14907-1.c | 21 ++++++ gcc/testsuite/gcc.target/i386/pr14907-10.c | 23 ++++++ gcc/testsuite/gcc.target/i386/pr14907-11.c | 12 ++++ gcc/testsuite/gcc.target/i386/pr14907-12.c | 17 +++++ gcc/testsuite/gcc.target/i386/pr14907-13.c | 12 ++++ gcc/testsuite/gcc.target/i386/pr14907-14.c | 17 +++++ gcc/testsuite/gcc.target/i386/pr14907-15.c | 26 +++++++ gcc/testsuite/gcc.target/i386/pr14907-16.c | 24 +++++++ gcc/testsuite/gcc.target/i386/pr14907-2.c | 21 ++++++ gcc/testsuite/gcc.target/i386/pr14907-3.c | 21 ++++++ gcc/testsuite/gcc.target/i386/pr14907-4.c | 21 ++++++ gcc/testsuite/gcc.target/i386/pr14907-5.c | 21 ++++++ gcc/testsuite/gcc.target/i386/pr14907-6.c | 21 ++++++ gcc/testsuite/gcc.target/i386/pr14907-7.c | 22 ++++++ gcc/testsuite/gcc.target/i386/pr14907-8.c | 23 ++++++ gcc/testsuite/gcc.target/i386/pr14907-9.c | 22 ++++++ gcc/testsuite/gfortran.dg/pr14907-1.f90 | 17 +++++ gcc/tree.cc | 14 ---- 25 files changed, 431 insertions(+), 121 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-10.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-11.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-12.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-13.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-14.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-15.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-16.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-2.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-3.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-4.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-5.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-6.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-7.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-8.c create mode 100644 gcc/testsuite/gcc.target/i386/pr14907-9.c create mode 100644 gcc/testsuite/gfortran.dg/pr14907-1.f90 diff --git a/gcc/ada/gcc-interface/utils.cc b/gcc/ada/gcc-interface/utils.cc index 3a571e0077b..127a83b13b6 100644 --- a/gcc/ada/gcc-interface/utils.cc +++ b/gcc/ada/gcc-interface/utils.cc @@ -3283,30 +3283,6 @@ tree create_param_decl (tree name, tree type) { tree param_decl = build_decl (input_location, PARM_DECL, name, type); - - /* Honor TARGET_PROMOTE_PROTOTYPES like the C compiler, as not doing so - can lead to various ABI violations. */ - if (targetm.calls.promote_prototypes (NULL_TREE) - && INTEGRAL_TYPE_P (type) - && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)) - { - /* We have to be careful about biased types here. Make a subtype - of integer_type_node with the proper biasing. */ - if (TREE_CODE (type) == INTEGER_TYPE - && TYPE_BIASED_REPRESENTATION_P (type)) - { - tree subtype - = make_unsigned_type (TYPE_PRECISION (integer_type_node)); - TREE_TYPE (subtype) = integer_type_node; - TYPE_BIASED_REPRESENTATION_P (subtype) = 1; - SET_TYPE_RM_MIN_VALUE (subtype, TYPE_MIN_VALUE (type)); - SET_TYPE_RM_MAX_VALUE (subtype, TYPE_MAX_VALUE (type)); - type = subtype; - } - else - type = integer_type_node; - } - DECL_ARG_TYPE (param_decl) = type; return param_decl; } diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index ac47ef24a3d..d4e87bcf420 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -5709,26 +5709,6 @@ start_decl (struct c_declarator *declarator, struct c_declspecs *declspecs, DECL_EXTERNAL (decl) = !DECL_EXTERNAL (decl); } - if (TREE_CODE (decl) == FUNCTION_DECL - && targetm.calls.promote_prototypes (TREE_TYPE (decl))) - { - struct c_declarator *ce = declarator; - - if (ce->kind == cdk_pointer) - ce = declarator->declarator; - if (ce->kind == cdk_function) - { - tree args = ce->u.arg_info->parms; - for (; args; args = DECL_CHAIN (args)) - { - tree type = TREE_TYPE (args); - if (type && INTEGRAL_TYPE_P (type) - && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)) - DECL_ARG_TYPE (args) = c_type_promotes_to (type); - } - } - } - if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl) && DECL_UNINLINABLE (decl) @@ -11145,13 +11125,6 @@ store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info) useful for argument types like uid_t. */ DECL_ARG_TYPE (parm) = TREE_TYPE (parm); - if (targetm.calls.promote_prototypes (TREE_TYPE (current_function_decl)) - && INTEGRAL_TYPE_P (TREE_TYPE (parm)) - && (TYPE_PRECISION (TREE_TYPE (parm)) - < TYPE_PRECISION (integer_type_node))) - DECL_ARG_TYPE (parm) - = c_type_promotes_to (TREE_TYPE (parm)); - /* ??? Is it possible to get here with a built-in prototype or will it always have been diagnosed as conflicting with an @@ -11379,19 +11352,6 @@ finish_function (location_t end_loc) if (c_dialect_objc ()) objc_finish_function (); - if (TREE_CODE (fndecl) == FUNCTION_DECL - && targetm.calls.promote_prototypes (TREE_TYPE (fndecl))) - { - tree args = DECL_ARGUMENTS (fndecl); - for (; args; args = DECL_CHAIN (args)) - { - tree type = TREE_TYPE (args); - if (INTEGRAL_TYPE_P (type) - && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)) - DECL_ARG_TYPE (args) = c_type_promotes_to (type); - } - } - if (DECL_INITIAL (fndecl) && DECL_INITIAL (fndecl) != error_mark_node) BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 201d75d2e9c..cc1ccda4424 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -4085,12 +4085,6 @@ convert_argument (location_t ploc, tree function, tree fundecl, val, origtype, ic_argpass, npc, fundecl, function, parmnum + 1, warnopt); - - if (targetm.calls.promote_prototypes (fundecl ? TREE_TYPE (fundecl) : 0) - && INTEGRAL_TYPE_P (type) - && (TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node))) - parmval = default_conversion (parmval); - return parmval; } @@ -6572,17 +6566,12 @@ c_safe_arg_type_equiv_p (tree t1, tree t2) && TREE_CODE (t2) == POINTER_TYPE) return true; - /* The signedness of the parameter matters only when an integral - type smaller than int is promoted to int, otherwise only the - precision of the parameter matters. - This check should make sure that the callee does not see - undefined values in argument registers. */ + /* Only the precision of the parameter matters. This check should + make sure that the callee does not see undefined values in argument + registers. */ if (INTEGRAL_TYPE_P (t1) && INTEGRAL_TYPE_P (t2) - && TYPE_PRECISION (t1) == TYPE_PRECISION (t2) - && (TYPE_UNSIGNED (t1) == TYPE_UNSIGNED (t2) - || !targetm.calls.promote_prototypes (NULL_TREE) - || TYPE_PRECISION (t1) >= TYPE_PRECISION (integer_type_node))) + && TYPE_PRECISION (t1) == TYPE_PRECISION (t2)) return true; return comptypes (t1, t2); diff --git a/gcc/calls.cc b/gcc/calls.cc index f67067acad4..246abe34243 100644 --- a/gcc/calls.cc +++ b/gcc/calls.cc @@ -62,6 +62,9 @@ along with GCC; see the file COPYING3. If not see #include "value-query.h" #include "tree-pretty-print.h" #include "tree-eh.h" +#include "ssa.h" +#include "tree-ssa-live.h" +#include "tree-outof-ssa.h" /* Like PREFERRED_STACK_BOUNDARY but in units of bytes, not bits. */ #define STACK_BYTES (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT) @@ -1281,6 +1284,74 @@ maybe_complain_about_tail_call (tree call_expr, const char *reason) CALL_EXPR_MUST_TAIL_CALL (call_expr) = 0; } +/* Return the integer argument promoted from TYPE to PROMOTED_TYPE if ARG + isn't copied from the incoming argument. Otherwise return the original + argument ORIGIN_ARG. */ + +static tree +get_promoted_int_value_from_ssa_name (tree type, tree promoted_type, + tree arg, tree orig_arg) +{ + tree var = SSA_NAME_VAR (arg); + if (TREE_CODE (var) != PARM_DECL + || TYPE_MODE (type) != TYPE_MODE (DECL_ARG_TYPE (var))) + return fold_convert (promoted_type, var); + return orig_arg; +} + +/* Return the promoted integer argument if ARG is smaller than int and + isn't copied from the incoming argument. Otherwise return the original + argument. */ + +static tree +get_promoted_int_value (tree arg) +{ + tree type = TREE_TYPE (arg); + if (!INTEGRAL_TYPE_P (type) + || TYPE_PRECISION (type) >= TYPE_PRECISION (integer_type_node)) + return arg; + + tree promoted_type = (TYPE_UNSIGNED (type) + ? unsigned_type_node : integer_type_node); + + if (TREE_CODE (arg) != SSA_NAME) + return fold_convert (promoted_type, arg); + + if (SSA_NAME_IS_DEFAULT_DEF (arg)) + return get_promoted_int_value_from_ssa_name (type, promoted_type, + arg, arg); + else + { + gimple *stmt = get_gimple_for_ssa_name (arg); + if (stmt == nullptr) + return fold_convert (promoted_type, arg); + + gassign *g = as_a (stmt); + tree_code rhs_code = gimple_assign_rhs_code (g); + gimple_rhs_class rhs_class = get_gimple_rhs_class (rhs_code); + + if (rhs_class == GIMPLE_SINGLE_RHS || gimple_assign_cast_p (g)) + { + tree rhs = gimple_assign_rhs1 (g); + if (gimple_assign_cast_p (g)) + { + tree lhs = gimple_assign_lhs (g); + if (!tree_nop_conversion_p (TREE_TYPE (lhs), + TREE_TYPE (rhs))) + return fold_convert (promoted_type, arg); + } + + if (TREE_CODE (rhs) == SSA_NAME + && SSA_NAME_IS_DEFAULT_DEF (rhs)) + return get_promoted_int_value_from_ssa_name (type, + promoted_type, + rhs, arg); + } + } + + return fold_convert (promoted_type, arg); +} + /* Fill in ARGS_SIZE and ARGS array based on the parameters found in CALL_EXPR EXP. @@ -1375,6 +1446,11 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED, } } + bool promote_p + = targetm.calls.promote_prototypes (fndecl + ? TREE_TYPE (fndecl) + : fntype); + /* I counts args in order (to be) pushed; ARGPOS counts in order written. */ for (argpos = 0; argpos < num_actuals; i--, argpos++) { @@ -1384,6 +1460,11 @@ initialize_argument_information (int num_actuals ATTRIBUTE_UNUSED, /* Replace erroneous argument with constant zero. */ if (type == error_mark_node || !COMPLETE_TYPE_P (type)) args[i].tree_value = integer_zero_node, type = integer_type_node; + else if (promote_p) + { + args[i].tree_value = get_promoted_int_value (args[i].tree_value); + type = TREE_TYPE (args[i].tree_value); + } /* If TYPE is a transparent union or record, pass things the way we would pass the first field of the union or record. We have diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 220ac130b0b..8e9818538e1 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -9436,11 +9436,6 @@ type_passed_as (tree type) /* Pass classes with copy ctors by invisible reference. */ if (TREE_ADDRESSABLE (type)) type = build_reference_type (type); - else if (targetm.calls.promote_prototypes (NULL_TREE) - && INTEGRAL_TYPE_P (type) - && COMPLETE_TYPE_P (type) - && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node))) - type = integer_type_node; return type; } @@ -9476,11 +9471,6 @@ convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain) /* Pass classes with copy ctors by invisible reference. */ else if (TREE_ADDRESSABLE (type)) val = build1 (ADDR_EXPR, build_reference_type (type), val); - else if (targetm.calls.promote_prototypes (NULL_TREE) - && INTEGRAL_TYPE_P (type) - && COMPLETE_TYPE_P (type) - && tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (integer_type_node))) - val = cp_perform_integral_promotions (val, complain); if (complain & tf_warning) { if (warn_suggest_attribute_format) diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc index 4c15e26f692..2aa5347ec1c 100644 --- a/gcc/cp/typeck.cc +++ b/gcc/cp/typeck.cc @@ -1373,17 +1373,12 @@ cxx_safe_arg_type_equiv_p (tree t1, tree t2) && TYPE_PTR_P (t2)) return true; - /* The signedness of the parameter matters only when an integral - type smaller than int is promoted to int, otherwise only the - precision of the parameter matters. - This check should make sure that the callee does not see - undefined values in argument registers. */ + /* Only the precision of the parameter matters. This check should + make sure that the callee does not see undefined values in argument + registers. */ if (INTEGRAL_TYPE_P (t1) && INTEGRAL_TYPE_P (t2) - && TYPE_PRECISION (t1) == TYPE_PRECISION (t2) - && (TYPE_UNSIGNED (t1) == TYPE_UNSIGNED (t2) - || !targetm.calls.promote_prototypes (NULL_TREE) - || TYPE_PRECISION (t1) >= TYPE_PRECISION (integer_type_node))) + && TYPE_PRECISION (t1) == TYPE_PRECISION (t2)) return true; return same_type_p (t1, t2); diff --git a/gcc/gimple.cc b/gcc/gimple.cc index f7b313be40e..9f77d77d56d 100644 --- a/gcc/gimple.cc +++ b/gcc/gimple.cc @@ -2843,15 +2843,7 @@ gimple_builtin_call_types_compatible_p (const gimple *stmt, tree fndecl) return true; tree arg = gimple_call_arg (stmt, i); tree type = TREE_VALUE (targs); - if (!useless_type_conversion_p (type, TREE_TYPE (arg)) - /* char/short integral arguments are promoted to int - by several frontends if targetm.calls.promote_prototypes - is true. Allow such promotion too. */ - && !(INTEGRAL_TYPE_P (type) - && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node) - && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)) - && useless_type_conversion_p (integer_type_node, - TREE_TYPE (arg)))) + if (!useless_type_conversion_p (type, TREE_TYPE (arg))) return false; targs = TREE_CHAIN (targs); } diff --git a/gcc/testsuite/gcc.target/i386/pr14907-1.c b/gcc/testsuite/gcc.target/i386/pr14907-1.c new file mode 100644 index 00000000000..231819ed675 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-1.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x86*" "" "" { target *-*-linux* *-*-gnu* } {^\t?\.} } } */ + +/* +x86*foo: +x86*.LFB0: +x86* .cfi_startproc +x86* jmp baz +x86* .cfi_endproc +x86*... +*/ + +extern int baz (char); + +int +foo (char c1) +{ + return baz (c1); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-10.c b/gcc/testsuite/gcc.target/i386/pr14907-10.c new file mode 100644 index 00000000000..099c4dc81d1 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-10.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "ia32*" "" "" { target { { *-*-linux* *-*-gnu* } && ia32 } } {^\t?\.} } } */ + +/* +ia32*foo: +ia32*.LFB0: +ia32* .cfi_startproc +ia32* movsbl 4\(%esp\), %eax +ia32* movl %eax, 4\(%esp\) +ia32* jmp baz +ia32* .cfi_endproc +ia32*... +*/ + +extern int baz (short); + +int +foo (char c1) +{ + return baz (c1); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-11.c b/gcc/testsuite/gcc.target/i386/pr14907-11.c new file mode 100644 index 00000000000..12ac165c298 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-11.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +extern int baz (char, char); + +int +foo (char c1, char c2) +{ + return baz (c1, c2) + 1; +} + +/* { dg-final { scan-assembler-not "movsbl" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr14907-12.c b/gcc/testsuite/gcc.target/i386/pr14907-12.c new file mode 100644 index 00000000000..6cda72ef3a2 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-12.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct s +{ + char c[20]; +}; + +extern struct s baz (char, char); + +struct s +foo (char c1, char c2) +{ + return baz (c1, c2); +} + +/* { dg-final { scan-assembler-not "movsbl" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr14907-13.c b/gcc/testsuite/gcc.target/i386/pr14907-13.c new file mode 100644 index 00000000000..b4130fdcb57 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-13.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +extern int baz (char, char, ...); + +int +foo (char c1, char c2) +{ + return baz (c1, c2, 0, 0, 0, 1); +} + +/* { dg-final { scan-assembler-not "movsbl" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr14907-14.c b/gcc/testsuite/gcc.target/i386/pr14907-14.c new file mode 100644 index 00000000000..9b8d7a7607d --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-14.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct s +{ + char c[20]; +}; + +extern struct s baz (char, char, ...); + +struct s +foo (char c1, char c2) +{ + return baz (c1, c2, 0, 1); +} + +/* { dg-final { scan-assembler-not "movsbl" } } */ diff --git a/gcc/testsuite/gcc.target/i386/pr14907-15.c b/gcc/testsuite/gcc.target/i386/pr14907-15.c new file mode 100644 index 00000000000..08bc4ea9ac8 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-15.c @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x64*" "" "" { target { { *-*-linux* *-*-gnu* } && { ! ia32 } } } {^\t?\.} } } */ + +/* +x64*foo: +x64*.LFB1: +x64* .cfi_startproc +x64* jmp baz +x64* .cfi_endproc +x64*... +*/ + + __attribute__ ((noinline)) +static int +baz (char c1) +{ + return c1; +} + +int +foo (char c1) +{ + return baz (c1); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-16.c b/gcc/testsuite/gcc.target/i386/pr14907-16.c new file mode 100644 index 00000000000..48c255ffb20 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-16.c @@ -0,0 +1,24 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x64*" "" "" { target { { *-*-linux* *-*-gnu* } && { ! ia32 } } } {^\t?\.} } } */ + +/* +x64*foo: +x64*.LFB0: +x64* .cfi_startproc +x64* andl \$1, %edi +x64* jmp baz +x64* .cfi_endproc +x64*... +*/ + +#include + +extern int baz (bool); + +int +foo (int c1) +{ + return baz (c1 & 0x1); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-2.c b/gcc/testsuite/gcc.target/i386/pr14907-2.c new file mode 100644 index 00000000000..5da7b029279 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-2.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x86*" "" "" { target *-*-linux* *-*-gnu* } {^\t?\.} } } */ + +/* +x86*foo: +x86*.LFB0: +x86* .cfi_startproc +x86* jmp baz +x86* .cfi_endproc +x86*... +*/ + +extern int baz (int, int, int, int, int, int, char, char); + +int +foo (int a1, int a2, int a3, int a4, int a5, int a6, char c1, char c2) +{ + return baz (a1, a2, a3, a4, a5, a6, c1, c2); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-3.c b/gcc/testsuite/gcc.target/i386/pr14907-3.c new file mode 100644 index 00000000000..a8fb13f28f8 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-3.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x86*" "" "" { target *-*-linux* *-*-gnu* } {^\t?\.} } } */ + +/* +x86*c1: +x86*.LFB0: +x86* .cfi_startproc +x86* jmp c2 +x86* .cfi_endproc +x86*... +*/ + +extern char c2 (char); + +char +c1 (char c) +{ + return c2 (c); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-4.c b/gcc/testsuite/gcc.target/i386/pr14907-4.c new file mode 100644 index 00000000000..b5fb92fefcc --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-4.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x86*" "" "" { target *-*-linux* *-*-gnu* } {^\t?\.} } } */ + +/* +x86*foo: +x86*.LFB0: +x86* .cfi_startproc +x86* jmp baz +x86* .cfi_endproc +x86*... +*/ + +extern int baz (short); + +int +foo (short c1) +{ + return baz (c1); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-5.c b/gcc/testsuite/gcc.target/i386/pr14907-5.c new file mode 100644 index 00000000000..d9abb5c8cfb --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-5.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x86*" "" "" { target *-*-linux* *-*-gnu* } {^\t?\.} } } */ + +/* +x86*foo: +x86*.LFB0: +x86* .cfi_startproc +x86* jmp baz +x86* .cfi_endproc +x86*... +*/ + +extern int baz (int, int, int, int, int, int, short, short); + +int +foo (int a1, int a2, int a3, int a4, int a5, int a6, short c1, short c2) +{ + return baz (a1, a2, a3, a4, a5, a6, c1, c2); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-6.c b/gcc/testsuite/gcc.target/i386/pr14907-6.c new file mode 100644 index 00000000000..b6d0183656a --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-6.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x86*" "" "" { target *-*-linux* *-*-gnu* } {^\t?\.} } } */ + +/* +x86*c1: +x86*.LFB0: +x86* .cfi_startproc +x86* jmp c2 +x86* .cfi_endproc +x86*... +*/ + +extern short c2 (short); + +short +c1 (short c) +{ + return c2 (c); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-7.c b/gcc/testsuite/gcc.target/i386/pr14907-7.c new file mode 100644 index 00000000000..fbf511f691e --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-7.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x64*" "" "" { target { { *-*-linux* *-*-gnu* } && { ! ia32 } } } {^\t?\.} } } */ + +/* +x64*foo: +x64*.LFB0: +x64* .cfi_startproc +x64* movsbl %dil, %edi +x64* jmp baz +x64* .cfi_endproc +x64*... +*/ + +extern int baz (int); + +int +foo (char c1) +{ + return baz (c1); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-8.c b/gcc/testsuite/gcc.target/i386/pr14907-8.c new file mode 100644 index 00000000000..7d2611398c0 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-8.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "ia32*" "" "" { target { { *-*-linux* *-*-gnu* } && ia32 } } {^\t?\.} } } */ + +/* +ia32*foo: +ia32*.LFB0: +ia32* .cfi_startproc +ia32* movsbl 4\(%esp\), %eax +ia32* movl %eax, 4\(%esp\) +ia32* jmp baz +ia32* .cfi_endproc +ia32*... +*/ + +extern int baz (int); + +int +foo (char c1) +{ + return baz (c1); +} diff --git a/gcc/testsuite/gcc.target/i386/pr14907-9.c b/gcc/testsuite/gcc.target/i386/pr14907-9.c new file mode 100644 index 00000000000..a22383694bf --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr14907-9.c @@ -0,0 +1,22 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -g0" } */ +/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc'). */ +/* { dg-final { check-function-bodies "x64*" "" "" { target { { *-*-linux* *-*-gnu* } && { ! ia32 } } } {^\t?\.} } } */ + +/* +x64*foo: +x64*.LFB0: +x64* .cfi_startproc +x64* movsbl %dil, %edi +x64* jmp baz +x64* .cfi_endproc +x64*... +*/ + +extern int baz (short); + +int +foo (char c1) +{ + return baz (c1); +} diff --git a/gcc/testsuite/gfortran.dg/pr14907-1.f90 b/gcc/testsuite/gfortran.dg/pr14907-1.f90 new file mode 100644 index 00000000000..5e41cd6f54f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr14907-1.f90 @@ -0,0 +1,17 @@ +! { dg-do compile } +! { dg-options "-Os" } + +program test + use iso_c_binding, only: c_short + interface + subroutine foo(a) bind(c) + import c_short + integer(kind=c_short), intent(in), value :: a + end subroutine foo + end interface + integer(kind=c_short) a(5); + call foo (a(3)) +end + +! { dg-final { scan-assembler "movswl\t10\\(%rsp\\), %edi" { target { { *-*-linux* *-*-gnu* } && { ! ia32 } } } } } +! { dg-final { scan-assembler "movswl\t-14\\(%ebp\\), %eax" { target { { *-*-linux* *-*-gnu* } && { ia32 } } } } } diff --git a/gcc/tree.cc b/gcc/tree.cc index b4c059d3b0d..2c3bf27a678 100644 --- a/gcc/tree.cc +++ b/gcc/tree.cc @@ -8676,20 +8676,6 @@ tree_builtin_call_types_compatible_p (const_tree call, tree fndecl) && POINTER_TYPE_P (TREE_TYPE (arg)) && tree_nop_conversion_p (type, TREE_TYPE (arg))) continue; - /* char/short integral arguments are promoted to int - by several frontends if targetm.calls.promote_prototypes - is true. Allow such promotion too. */ - if (INTEGRAL_TYPE_P (type) - && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node) - && INTEGRAL_TYPE_P (TREE_TYPE (arg)) - && !TYPE_UNSIGNED (TREE_TYPE (arg)) - && targetm.calls.promote_prototypes (TREE_TYPE (fndecl)) - && (gimple_form - ? useless_type_conversion_p (integer_type_node, - TREE_TYPE (arg)) - : tree_nop_conversion_p (integer_type_node, - TREE_TYPE (arg)))) - continue; return false; } } From patchwork Sun Nov 10 12:55:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 2009218 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=IYSPUxPY; 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 4XmXk84xJmz1xyk for ; Sun, 10 Nov 2024 23:56:32 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E0ED53858C2B for ; Sun, 10 Nov 2024 12:56:30 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yb1-xb36.google.com (mail-yb1-xb36.google.com [IPv6:2607:f8b0:4864:20::b36]) by sourceware.org (Postfix) with ESMTPS id 0EEDC385840C for ; Sun, 10 Nov 2024 12:55:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0EEDC385840C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 0EEDC385840C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b36 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243364; cv=none; b=cSkUFBcvsMtwClijmfK/YitsIvRsCKOgKmdD4QxUmFCPZJSK6VXMZ/EoyoY9SwN3GbglXEr5xFd5rr3uXrCLCcUWxTuKOx8PHYCwVxoXYyy1UsqVYDBPVq7WGsYcrce7xXLnf45FUbsHbKMq/Vx3jNRsRB98dMN8h7vwkl+iCbA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243364; c=relaxed/simple; bh=53MMpVNaztxEqzDFEUyHJzmKBKDUHLaCEnHEUS5AW58=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=WFiATNEf2GydlZ14ZPXv1S0tLpRy/MYtp2ihzzx6nzeSd5eIUv8hclvnaluhLjE3xzDiio5loMsngHAVvQtaU208KuP1do53nmhQfYmwSSifkcGEzmUW9sUjzYOPsoFRJBP+0x8RxqOYB6bPaV/vzwdrKcmedEWsXmqQpUIyBbs= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb36.google.com with SMTP id 3f1490d57ef6-e30d212b6b1so3354255276.0 for ; Sun, 10 Nov 2024 04:55:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731243358; x=1731848158; 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=xveWmWeM3I1zFr6QRlsxnhFDWBEcKzNViUsTfSvZuZc=; b=IYSPUxPY7tzESrtq5nMyMziAcsgtHC1VHnbEwVaD+j+zhQetMn2rIcAUpkZoiRpvYO 2/uzQ9KH0X75RSk2/eI58Npdf725W8YKQEp+RtUBZuVBV1YV+/4GbXTnolnCJamGjeLx TIVTmXhC9jQnnbBULWxWOLlSF6s40saPAZHTfDlNypj192whduRwec6QOFaqQhvedvwH CyKqzGPIVLAmaIGqprR7PgWqZSLPtg0rOHrVNVmtEpWfjzT2KNhAqbHBMyi+/w5dd1zk kgsi9a5ETbzUpIRtyd4+h5PKwc3r+JaKWQ7WwDhnJOHrcQaputY5zYEQDdkcARKwf55i LrGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731243358; x=1731848158; 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=xveWmWeM3I1zFr6QRlsxnhFDWBEcKzNViUsTfSvZuZc=; b=IPj5mFXLZNwa2+/QGuzSd6VykgIjv8mnnUvhW3U/l1filhDPbnXKCM2n/CiQUFAiRw bFh92c6msmh2a02gFSliHgUn1TnikBK9eBUwQ7xaUNgIwbNNbRdgkXO4TBOxMQ2uHq0j lQ68+kbUVw60CCp0B2ohzEousQl2Tv3JQlEILnOwoKFHgD/QwKU90McyuH716jYMAC4L cJYlmN7YpTjhU6kuRtO63+ZXaHSsx91+35rsJPl4LDUqiZKKxJWn1eXJWiIjBF/NIljG ot6b7SN26qPZiRGdVr8QZtp+LcmLd/LmFqcQp68sVfsH0UzCo0oyajhYBR9U3DMJHyE/ yq4g== X-Gm-Message-State: AOJu0Yw8rB57LukCIG6Ak7W/NTbV7TXMnV1rJXbIave1PeLN7ZX5rInu 0U4Rifqwt9Gf8plgV0w1OC2v1XNXBQvJTa0MyalaKXw8pxcSn3yR2hsDXkB/pILgGA== X-Google-Smtp-Source: AGHT+IFGhftKx7bVTamBn1gg1LZRR9Tc9tI5G9Sf+rH8+vzRQx3zgPPsPXk0H8j/c6K0oLvH00riag== X-Received: by 2002:a05:6902:150b:b0:e29:1630:785c with SMTP id 3f1490d57ef6-e337f840d8emr8773615276.10.1731243358084; Sun, 10 Nov 2024 04:55:58 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.142.161]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e336ef20095sm1729586276.15.2024.11.10.04.55.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Nov 2024 04:55:57 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id 981BEC02EF; Sun, 10 Nov 2024 20:55:50 +0800 (CST) From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, ubizjak@gmail.com, hongtao.liu@intel.com Subject: [PATCH v3 2/7] Add expand_promote_outgoing_argument Date: Sun, 10 Nov 2024 20:55:45 +0800 Message-ID: <20241110125550.787007-3-hjl.tools@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241110125550.787007-1-hjl.tools@gmail.com> References: <20241110125550.787007-1-hjl.tools@gmail.com> MIME-Version: 1.0 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 Since the C/C++/Ada frontends no longer promote integer argument smaller than int, add expand_promote_outgoing_argument to promote it when expanding builtin functions. PR middle-end/14907 * expr.cc (expand_promote_outgoing_argument): New function. * expr.h (expand_promote_outgoing_argument): New prototype. * config/i386/i386-expand.cc (ix86_expand_binop_builtin): Call expand_promote_outgoing_argument to expand the outgoing argument. (ix86_expand_multi_arg_builtin): Likewise. (ix86_expand_unop_vec_merge_builtin): Likewise. (ix86_expand_sse_compare): Likewise. (ix86_expand_sse_comi): Likewise. (ix86_expand_sse_round): Likewise. (ix86_expand_sse_round_vec_pack_sfix): Likewise. (ix86_expand_sse_ptest): Likewise. (ix86_expand_sse_pcmpestr): Likewise. (ix86_expand_sse_pcmpistr): Likewise. (ix86_expand_args_builtin): Likewise. (ix86_expand_sse_comi_round): Likewise. (ix86_expand_round_builtin): Likewise. (ix86_expand_special_args_builtin): Likewise. (ix86_expand_vec_init_builtin): Likewise. (ix86_expand_vec_ext_builtin): Likewise. (ix86_expand_builtin): Likewise. Signed-off-by: H.J. Lu --- gcc/config/i386/i386-expand.cc | 244 ++++++++++++++++----------------- gcc/expr.cc | 18 +++ gcc/expr.h | 1 + 3 files changed, 141 insertions(+), 122 deletions(-) diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 5c4a8e07d62..ce887d96f6a 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -10415,8 +10415,8 @@ ix86_expand_binop_builtin (enum insn_code icode, tree exp, rtx target) rtx pat; tree arg0 = CALL_EXPR_ARG (exp, 0); tree arg1 = CALL_EXPR_ARG (exp, 1); - rtx op0 = expand_normal (arg0); - rtx op1 = expand_normal (arg1); + rtx op0 = expand_promote_outgoing_argument (arg0); + rtx op1 = expand_promote_outgoing_argument (arg1); machine_mode tmode = insn_data[icode].operand[0].mode; machine_mode mode0 = insn_data[icode].operand[1].mode; machine_mode mode1 = insn_data[icode].operand[2].mode; @@ -10564,7 +10564,7 @@ ix86_expand_multi_arg_builtin (enum insn_code icode, tree exp, rtx target, for (i = 0; i < nargs; i++) { tree arg = CALL_EXPR_ARG (exp, i); - rtx op = expand_normal (arg); + rtx op = expand_promote_outgoing_argument (arg); int adjust = (comparison_p) ? 1 : 0; machine_mode mode = insn_data[icode].operand[i+adjust+1].mode; @@ -10691,7 +10691,7 @@ ix86_expand_unop_vec_merge_builtin (enum insn_code icode, tree exp, { rtx pat; tree arg0 = CALL_EXPR_ARG (exp, 0); - rtx op1, op0 = expand_normal (arg0); + rtx op1, op0 = expand_promote_outgoing_argument (arg0); machine_mode tmode = insn_data[icode].operand[0].mode; machine_mode mode0 = insn_data[icode].operand[1].mode; @@ -10727,8 +10727,8 @@ ix86_expand_sse_compare (const struct builtin_description *d, rtx pat; tree arg0 = CALL_EXPR_ARG (exp, 0); tree arg1 = CALL_EXPR_ARG (exp, 1); - rtx op0 = expand_normal (arg0); - rtx op1 = expand_normal (arg1); + rtx op0 = expand_promote_outgoing_argument (arg0); + rtx op1 = expand_promote_outgoing_argument (arg1); rtx op2; machine_mode tmode = insn_data[d->icode].operand[0].mode; machine_mode mode0 = insn_data[d->icode].operand[1].mode; @@ -10823,8 +10823,8 @@ ix86_expand_sse_comi (const struct builtin_description *d, tree exp, rtx pat, set_dst; tree arg0 = CALL_EXPR_ARG (exp, 0); tree arg1 = CALL_EXPR_ARG (exp, 1); - rtx op0 = expand_normal (arg0); - rtx op1 = expand_normal (arg1); + rtx op0 = expand_promote_outgoing_argument (arg0); + rtx op1 = expand_promote_outgoing_argument (arg1); enum insn_code icode = d->icode; const struct insn_data_d *insn_p = &insn_data[icode]; machine_mode mode0 = insn_p->operand[0].mode; @@ -10916,7 +10916,7 @@ ix86_expand_sse_round (const struct builtin_description *d, tree exp, { rtx pat; tree arg0 = CALL_EXPR_ARG (exp, 0); - rtx op1, op0 = expand_normal (arg0); + rtx op1, op0 = expand_promote_outgoing_argument (arg0); machine_mode tmode = insn_data[d->icode].operand[0].mode; machine_mode mode0 = insn_data[d->icode].operand[1].mode; @@ -10948,8 +10948,8 @@ ix86_expand_sse_round_vec_pack_sfix (const struct builtin_description *d, rtx pat; tree arg0 = CALL_EXPR_ARG (exp, 0); tree arg1 = CALL_EXPR_ARG (exp, 1); - rtx op0 = expand_normal (arg0); - rtx op1 = expand_normal (arg1); + rtx op0 = expand_promote_outgoing_argument (arg0); + rtx op1 = expand_promote_outgoing_argument (arg1); rtx op2; machine_mode tmode = insn_data[d->icode].operand[0].mode; machine_mode mode0 = insn_data[d->icode].operand[1].mode; @@ -10988,8 +10988,8 @@ ix86_expand_sse_ptest (const struct builtin_description *d, tree exp, rtx pat; tree arg0 = CALL_EXPR_ARG (exp, 0); tree arg1 = CALL_EXPR_ARG (exp, 1); - rtx op0 = expand_normal (arg0); - rtx op1 = expand_normal (arg1); + rtx op0 = expand_promote_outgoing_argument (arg0); + rtx op1 = expand_promote_outgoing_argument (arg1); machine_mode mode0 = insn_data[d->icode].operand[0].mode; machine_mode mode1 = insn_data[d->icode].operand[1].mode; enum rtx_code comparison = d->comparison; @@ -11047,11 +11047,11 @@ ix86_expand_sse_pcmpestr (const struct builtin_description *d, tree arg3 = CALL_EXPR_ARG (exp, 3); tree arg4 = CALL_EXPR_ARG (exp, 4); rtx scratch0, scratch1; - rtx op0 = expand_normal (arg0); - rtx op1 = expand_normal (arg1); - rtx op2 = expand_normal (arg2); - rtx op3 = expand_normal (arg3); - rtx op4 = expand_normal (arg4); + rtx op0 = expand_promote_outgoing_argument (arg0); + rtx op1 = expand_promote_outgoing_argument (arg1); + rtx op2 = expand_promote_outgoing_argument (arg2); + rtx op3 = expand_promote_outgoing_argument (arg3); + rtx op4 = expand_promote_outgoing_argument (arg4); machine_mode tmode0, tmode1, modev2, modei3, modev4, modei5, modeimm; tmode0 = insn_data[d->icode].operand[0].mode; @@ -11150,9 +11150,9 @@ ix86_expand_sse_pcmpistr (const struct builtin_description *d, tree arg1 = CALL_EXPR_ARG (exp, 1); tree arg2 = CALL_EXPR_ARG (exp, 2); rtx scratch0, scratch1; - rtx op0 = expand_normal (arg0); - rtx op1 = expand_normal (arg1); - rtx op2 = expand_normal (arg2); + rtx op0 = expand_promote_outgoing_argument (arg0); + rtx op1 = expand_promote_outgoing_argument (arg1); + rtx op2 = expand_promote_outgoing_argument (arg2); machine_mode tmode0, tmode1, modev2, modev3, modeimm; tmode0 = insn_data[d->icode].operand[0].mode; @@ -12135,7 +12135,7 @@ ix86_expand_args_builtin (const struct builtin_description *d, for (i = 0; i < nargs; i++) { tree arg = CALL_EXPR_ARG (exp, i); - rtx op = expand_normal (arg); + rtx op = expand_promote_outgoing_argument (arg); machine_mode mode = insn_p->operand[i + 1].mode; /* Need to fixup modeless constant before testing predicate. */ op = fixup_modeless_constant (op, mode); @@ -12400,10 +12400,10 @@ ix86_expand_sse_comi_round (const struct builtin_description *d, tree arg1 = CALL_EXPR_ARG (exp, 1); tree arg2 = CALL_EXPR_ARG (exp, 2); tree arg3 = CALL_EXPR_ARG (exp, 3); - rtx op0 = expand_normal (arg0); - rtx op1 = expand_normal (arg1); - rtx op2 = expand_normal (arg2); - rtx op3 = expand_normal (arg3); + rtx op0 = expand_promote_outgoing_argument (arg0); + rtx op1 = expand_promote_outgoing_argument (arg1); + rtx op2 = expand_promote_outgoing_argument (arg2); + rtx op3 = expand_promote_outgoing_argument (arg3); enum insn_code icode = d->icode; const struct insn_data_d *insn_p = &insn_data[icode]; machine_mode mode0 = insn_p->operand[0].mode; @@ -12870,7 +12870,7 @@ ix86_expand_round_builtin (const struct builtin_description *d, for (i = 0; i < nargs; i++) { tree arg = CALL_EXPR_ARG (exp, i); - rtx op = expand_normal (arg); + rtx op = expand_promote_outgoing_argument (arg); machine_mode mode = insn_p->operand[i + 1].mode; bool match = insn_p->operand[i + 1].predicate (op, mode); @@ -13318,7 +13318,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, if (klass == store) { arg = CALL_EXPR_ARG (exp, 0); - op = expand_normal (arg); + op = expand_promote_outgoing_argument (arg); gcc_assert (target == 0); if (memory) { @@ -13355,7 +13355,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d, machine_mode mode = insn_p->operand[i + 1].mode; arg = CALL_EXPR_ARG (exp, i + arg_adjust); - op = expand_normal (arg); + op = expand_promote_outgoing_argument (arg); if (i == memory) { @@ -13479,7 +13479,7 @@ ix86_expand_vec_init_builtin (tree type, tree exp, rtx target) for (i = 0; i < n_elt; ++i) { - rtx x = expand_normal (CALL_EXPR_ARG (exp, i)); + rtx x = expand_promote_outgoing_argument (CALL_EXPR_ARG (exp, i)); RTVEC_ELT (v, i) = gen_lowpart (inner_mode, x); } @@ -13505,7 +13505,7 @@ ix86_expand_vec_ext_builtin (tree exp, rtx target) arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); elt = get_element_number (TREE_TYPE (arg0), arg1); tmode = TYPE_MODE (TREE_TYPE (TREE_TYPE (arg0))); @@ -13727,9 +13727,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg1 = CALL_EXPR_ARG (exp, 0); arg2 = CALL_EXPR_ARG (exp, 1); arg0 = CALL_EXPR_ARG (exp, 2); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); mode0 = insn_data[icode].operand[0].mode; mode1 = insn_data[icode].operand[1].mode; mode2 = insn_data[icode].operand[2].mode; @@ -13750,7 +13750,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, return 0; case IX86_BUILTIN_LDMXCSR: - op0 = expand_normal (CALL_EXPR_ARG (exp, 0)); + op0 = expand_promote_outgoing_argument (CALL_EXPR_ARG (exp, 0)); target = assign_stack_temp (SImode, GET_MODE_SIZE (SImode)); emit_move_insn (target, op0); emit_insn (gen_sse_ldmxcsr (target)); @@ -13763,7 +13763,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_CLFLUSH: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); icode = CODE_FOR_sse2_clflush; if (!insn_data[icode].operand[0].predicate (op0, Pmode)) op0 = ix86_zero_extend_to_Pmode (op0); @@ -13773,7 +13773,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_CLWB: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); icode = CODE_FOR_clwb; if (!insn_data[icode].operand[0].predicate (op0, Pmode)) op0 = ix86_zero_extend_to_Pmode (op0); @@ -13783,7 +13783,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_CLFLUSHOPT: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); icode = CODE_FOR_clflushopt; if (!insn_data[icode].operand[0].predicate (op0, Pmode)) op0 = ix86_zero_extend_to_Pmode (op0); @@ -13796,9 +13796,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); arg2 = CALL_EXPR_ARG (exp, 2); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); if (!REG_P (op0)) op0 = ix86_zero_extend_to_Pmode (op0); if (!REG_P (op1)) @@ -13814,8 +13814,8 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_MWAIT: arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); if (!REG_P (op0)) op0 = copy_to_mode_reg (SImode, op0); if (!REG_P (op1)) @@ -13827,9 +13827,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); arg2 = CALL_EXPR_ARG (exp, 2); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); if (!REG_P (op0)) op0 = copy_to_mode_reg (SImode, op0); if (!REG_P (op1)) @@ -13841,7 +13841,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_UMONITOR: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); op0 = ix86_zero_extend_to_Pmode (op0); emit_insn (gen_umonitor (Pmode, op0)); @@ -13851,8 +13851,8 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_TPAUSE: arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); if (!REG_P (op0)) op0 = copy_to_mode_reg (SImode, op0); @@ -13925,7 +13925,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_CLZERO: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); if (!REG_P (op0)) op0 = ix86_zero_extend_to_Pmode (op0); emit_insn (gen_clzero (Pmode, op0)); @@ -13933,7 +13933,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_CLDEMOTE: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); icode = CODE_FOR_cldemote; if (!insn_data[icode].operand[0].predicate (op0, Pmode)) op0 = ix86_zero_extend_to_Pmode (op0); @@ -13948,10 +13948,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg2 = CALL_EXPR_ARG (exp, 2); arg3 = CALL_EXPR_ARG (exp, 3); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); - op3 = expand_normal (arg3); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); + op3 = expand_promote_outgoing_argument (arg3); if (!REG_P (op0)) op0 = copy_to_mode_reg (V2DImode, op0); @@ -13988,9 +13988,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg1 = CALL_EXPR_ARG (exp, 1); // __m128i idata arg2 = CALL_EXPR_ARG (exp, 2); // const void *p - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); if (!address_operand (op0, V2DImode)) { @@ -14060,9 +14060,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg1 = CALL_EXPR_ARG (exp, 1); // const __m128i * idata arg2 = CALL_EXPR_ARG (exp, 2); // const void *p - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); if (!address_operand (op2, VOIDmode)) { @@ -14116,9 +14116,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg1 = CALL_EXPR_ARG (exp, 1); // __m128i key arg2 = CALL_EXPR_ARG (exp, 2); // void *h - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); if (!REG_P (op0)) op0 = copy_to_mode_reg (SImode, op0); @@ -14152,10 +14152,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg2 = CALL_EXPR_ARG (exp, 2); // __m128i keyhi arg3 = CALL_EXPR_ARG (exp, 3); // void *h - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); - op3 = expand_normal (arg3); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); + op3 = expand_promote_outgoing_argument (arg3); if (!REG_P (op0)) op0 = copy_to_mode_reg (SImode, op0); @@ -14191,10 +14191,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg2 = CALL_EXPR_ARG (exp, 2); // const int arg3 = CALL_EXPR_ARG (exp, 3); // const int - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); - op3 = expand_normal (arg3); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); + op3 = expand_promote_outgoing_argument (arg3); if (!CONST_INT_P (op1) || !CONST_INT_P (op2) || !CONST_INT_P (op3)) { @@ -14264,8 +14264,8 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg0 = CALL_EXPR_ARG (exp, 0); // const void * arg1 = CALL_EXPR_ARG (exp, 1); // const int - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); if (!CONST_INT_P (op1)) { @@ -14295,7 +14295,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_UWRMSR: { arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); if (CONST_INT_P (op0)) { @@ -14309,7 +14309,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, if (fcode == IX86_BUILTIN_UWRMSR) { arg1 = CALL_EXPR_ARG (exp, 1); - op1 = expand_normal (arg1); + op1 = expand_promote_outgoing_argument (arg1); op1 = force_reg (DImode, op1); icode = CODE_FOR_uwrmsr; target = 0; @@ -14384,10 +14384,10 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg1 = CALL_EXPR_ARG (exp, 1); arg2 = CALL_EXPR_ARG (exp, 2); arg3 = CALL_EXPR_ARG (exp, 3); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); - op3 = expand_normal (arg3); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); + op3 = expand_promote_outgoing_argument (arg3); if (!address_operand (op0, VOIDmode)) { @@ -14458,7 +14458,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, if (fcode == IX86_BUILTIN_RDPMC) { arg0 = CALL_EXPR_ARG (exp, 0); - op2 = expand_normal (arg0); + op2 = expand_promote_outgoing_argument (arg0); if (!register_operand (op2, SImode)) op2 = copy_to_mode_reg (SImode, op2); @@ -14470,7 +14470,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, else if (fcode == IX86_BUILTIN_XGETBV) { arg0 = CALL_EXPR_ARG (exp, 0); - op2 = expand_normal (arg0); + op2 = expand_promote_outgoing_argument (arg0); if (!register_operand (op2, SImode)) op2 = copy_to_mode_reg (SImode, op2); @@ -14496,7 +14496,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, emit_insn (insn); arg0 = CALL_EXPR_ARG (exp, 0); - op4 = expand_normal (arg0); + op4 = expand_promote_outgoing_argument (arg0); if (!address_operand (op4, VOIDmode)) { op4 = convert_memory_address (Pmode, op4); @@ -14526,8 +14526,8 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); op0 = ix86_zero_extend_to_Pmode (op0); if (!address_operand (op1, VOIDmode)) @@ -14597,7 +14597,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, } arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); if (!address_operand (op0, VOIDmode)) { @@ -14614,8 +14614,8 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_XSETBV: arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); if (!REG_P (op0)) op0 = copy_to_mode_reg (SImode, op0); @@ -14657,8 +14657,8 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_XSAVEC64: arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); if (!address_operand (op0, VOIDmode)) { @@ -14754,7 +14754,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_LDTILECFG: case IX86_BUILTIN_STTILECFG: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); if (!address_operand (op0, VOIDmode)) { @@ -14772,7 +14772,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, case IX86_BUILTIN_LLWPCB: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); if (!register_operand (op0, Pmode)) op0 = ix86_zero_extend_to_Pmode (op0); @@ -14803,9 +14803,9 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); arg2 = CALL_EXPR_ARG (exp, 2); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); mode0 = insn_data[icode].operand[0].mode; if (!insn_data[icode].operand[0].predicate (op0, mode0)) @@ -14843,8 +14843,8 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, arg0 = CALL_EXPR_ARG (exp, 0); arg1 = CALL_EXPR_ARG (exp, 1); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); if (!CONST_INT_P (op1)) { @@ -14898,7 +14898,7 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, rdrand_step: arg0 = CALL_EXPR_ARG (exp, 0); - op1 = expand_normal (arg0); + op1 = expand_promote_outgoing_argument (arg0); if (!address_operand (op1, VOIDmode)) { op1 = convert_memory_address (Pmode, op1); @@ -14958,7 +14958,7 @@ rdrand_step: rdseed_step: arg0 = CALL_EXPR_ARG (exp, 0); - op1 = expand_normal (arg0); + op1 = expand_promote_outgoing_argument (arg0); if (!address_operand (op1, VOIDmode)) { op1 = convert_memory_address (Pmode, op1); @@ -15020,17 +15020,17 @@ rdseed_step: arg2 = CALL_EXPR_ARG (exp, 2); /* unsigned int src2. */ arg3 = CALL_EXPR_ARG (exp, 3); /* unsigned int *sum_out. */ - op1 = expand_normal (arg0); + op1 = expand_promote_outgoing_argument (arg0); - op2 = expand_normal (arg1); + op2 = expand_promote_outgoing_argument (arg1); if (!register_operand (op2, mode0)) op2 = copy_to_mode_reg (mode0, op2); - op3 = expand_normal (arg2); + op3 = expand_promote_outgoing_argument (arg2); if (!register_operand (op3, mode0)) op3 = copy_to_mode_reg (mode0, op3); - op4 = expand_normal (arg3); + op4 = expand_promote_outgoing_argument (arg3); if (!address_operand (op4, VOIDmode)) { op4 = convert_memory_address (Pmode, op4); @@ -15087,7 +15087,7 @@ rdseed_step: case IX86_BUILTIN_WRITE_FLAGS: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); if (!general_no_elim_operand (op0, word_mode)) op0 = copy_to_mode_reg (word_mode, op0); @@ -15177,8 +15177,8 @@ rdseed_step: kortest: arg0 = CALL_EXPR_ARG (exp, 0); /* Mask reg src1. */ arg1 = CALL_EXPR_ARG (exp, 1); /* Mask reg src2. */ - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); mode0 = insn_data[icode].operand[0].mode; mode1 = insn_data[icode].operand[1].mode; @@ -15482,11 +15482,11 @@ rdseed_step: arg2 = CALL_EXPR_ARG (exp, 2); arg3 = CALL_EXPR_ARG (exp, 3); arg4 = CALL_EXPR_ARG (exp, 4); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); - op3 = expand_normal (arg3); - op4 = expand_normal (arg4); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); + op3 = expand_promote_outgoing_argument (arg3); + op4 = expand_promote_outgoing_argument (arg4); /* Note the arg order is different from the operand order. */ mode0 = insn_data[icode].operand[1].mode; mode2 = insn_data[icode].operand[3].mode; @@ -15699,11 +15699,11 @@ rdseed_step: arg2 = CALL_EXPR_ARG (exp, 2); arg3 = CALL_EXPR_ARG (exp, 3); arg4 = CALL_EXPR_ARG (exp, 4); - op0 = expand_normal (arg0); - op1 = expand_normal (arg1); - op2 = expand_normal (arg2); - op3 = expand_normal (arg3); - op4 = expand_normal (arg4); + op0 = expand_promote_outgoing_argument (arg0); + op1 = expand_promote_outgoing_argument (arg1); + op2 = expand_promote_outgoing_argument (arg2); + op3 = expand_promote_outgoing_argument (arg3); + op4 = expand_promote_outgoing_argument (arg4); mode1 = insn_data[icode].operand[1].mode; mode2 = insn_data[icode].operand[2].mode; mode3 = insn_data[icode].operand[3].mode; @@ -15812,7 +15812,7 @@ rdseed_step: case IX86_BUILTIN_XABORT: icode = CODE_FOR_xabort; arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); mode0 = insn_data[icode].operand[0].mode; if (!insn_data[icode].operand[0].predicate (op0, mode0)) { @@ -15841,7 +15841,7 @@ rdseed_step: mode = (fcode == IX86_BUILTIN_INCSSPD ? SImode : DImode); arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); op0 = force_reg (mode, op0); @@ -15851,7 +15851,7 @@ rdseed_step: case IX86_BUILTIN_HRESET: icode = CODE_FOR_hreset; arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); op0 = force_reg (SImode, op0); emit_insn (gen_hreset (op0)); return 0; @@ -15859,7 +15859,7 @@ rdseed_step: case IX86_BUILTIN_RSTORSSP: case IX86_BUILTIN_CLRSSBSY: arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); icode = (fcode == IX86_BUILTIN_RSTORSSP ? CODE_FOR_rstorssp : CODE_FOR_clrssbsy); @@ -15881,9 +15881,9 @@ rdseed_step: ? SImode : DImode); arg0 = CALL_EXPR_ARG (exp, 0); - op0 = expand_normal (arg0); + op0 = expand_promote_outgoing_argument (arg0); arg1 = CALL_EXPR_ARG (exp, 1); - op1 = expand_normal (arg1); + op1 = expand_promote_outgoing_argument (arg1); op0 = force_reg (mode, op0); diff --git a/gcc/expr.cc b/gcc/expr.cc index caa1a72ba0b..0a1a70dab3c 100644 --- a/gcc/expr.cc +++ b/gcc/expr.cc @@ -14136,3 +14136,21 @@ int_expr_size (const_tree exp) return tree_to_shwi (size); } + +/* Expand an outgoing argument ARG with promotion. Since the C/C++ + frontends no longer promote integer argument smaller than int, + promote it when expanding built functions. */ + +rtx +expand_promote_outgoing_argument (tree arg) +{ + tree type = TREE_TYPE (arg); + if (INTEGRAL_TYPE_P (type) + && TYPE_PRECISION (type) < TYPE_PRECISION (integer_type_node)) + { + tree promoted_type = (TYPE_UNSIGNED (type) + ? unsigned_type_node : integer_type_node); + arg = fold_convert (promoted_type, arg); + } + return expand_normal (arg); +} diff --git a/gcc/expr.h b/gcc/expr.h index 04782b15f19..ed14750614b 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -312,6 +312,7 @@ extern rtx expand_expr_real_2 (const_sepops, rtx, machine_mode, extern rtx expand_expr_real_gassign (gassign *, rtx, machine_mode, enum expand_modifier modifier, rtx * = nullptr, bool = false); +extern rtx expand_promote_outgoing_argument (tree); /* Generate code for computing expression EXP. An rtx for the computed value is returned. The value is never null. From patchwork Sun Nov 10 12:55:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 2009226 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Ot+mJh8U; 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 4XmXlW6tgSz1xyk for ; Sun, 10 Nov 2024 23:57:43 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3CDA73857C58 for ; Sun, 10 Nov 2024 12:57:42 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yb1-xb36.google.com (mail-yb1-xb36.google.com [IPv6:2607:f8b0:4864:20::b36]) by sourceware.org (Postfix) with ESMTPS id C62033858C32 for ; Sun, 10 Nov 2024 12:55:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C62033858C32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C62033858C32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b36 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243368; cv=none; b=qiccWj0TNRKIyRrwtMAjspFGbTSRd7iZGX2wDLQ0V9M03jD52j1AI2XRwmehRTNK7aZLRTZyV8I9X94GkJ0FGu+xGrJ/OFzCKU1u8AQlFn7mXsOsZcSwTBoxeGb5Kp/8ZUnwoF7Nh/Id6btpmhwFJ/eXQ9qsbJnV9EaTgO5Vs54= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243368; c=relaxed/simple; bh=BAyhpzBQ9Ef/MbkX9gfjeCDwrFqqR0VDPviUr9i5+Po=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=d3m7lA2a8EXBRmLQNUY11KxjIA9+D8T7W0aa9YRlm1KEXSDvo7AER8XzoCwpJlzCwbz5hCTls1wJ/B7wFwlSL7UNQLbUR1C/HiOpnG5rzv5jL7/qiTz66q5BSmt8YQY/wMaU6cDca8yIWKsnd8h7l8+bnHSWdEPxDvuH8wOjHso= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb36.google.com with SMTP id 3f1490d57ef6-e290222fdd0so3573952276.2 for ; Sun, 10 Nov 2024 04:55:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731243357; x=1731848157; 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=SXysPPFAljhWPPhCmacYQkfKfwejyU/Muzs088GVOsE=; b=Ot+mJh8U220aATjZBHuiPT6hpSvEfh+n8hdMJSPtGYBYZRUbGOqUsZSQp9YRTAXsoa IfROJOA4JJREj1nVclSynDdGV2uQa9eB6RBnl+SQB95THqjBCd0Fv3jrIe8xtY19QnDX AR2349tO0Jo3tebLFMviJW+28PSO4Rl+P5w+kan94bbL6KXWXSHWfPZO4KXOtI1BjVeX kwyS/h33OBDoj27S3btVxGjYlq2q1kGxUO3B/aOLin+PSwnJEwb61uichgWJDyHtc66T AC1paAIVB9QGAUyhA3I59trb+ojqb6I2A/n3mUPf1dp9KXfO7AEvCiNBZA6LC/oOkEgl BmBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731243357; x=1731848157; 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=SXysPPFAljhWPPhCmacYQkfKfwejyU/Muzs088GVOsE=; b=LYn0NmG6eTJPtecI/zTjxNcK7prwxOFCjL343Vpz5iW5k/cUQGD7G4D3MfRsvNrHPc 3tKUAAsA5Yony8aotA6g9E7jaXb260MwobPBP4hsV6aX06DWIVU9eSodcEh2YCBA8+dL WZcF+Y0f49P74UyLHeWnDVmvP/hEf14N6UI9H9zsYfMvjPAkcb9wN8xEVeLzhd/P9xVH uL83L6pEuu6095EszNB7CBW31hUBYGs26+YtIIS8u7czdglSteEmCl4xahlN23+HB1EA x0tvmIeM46rw68vvtsNApEoPU22FvecH/eE2ZtXfWhMTHT04GjvDJ2T6o5HcDnOAeZWX 8HxA== X-Gm-Message-State: AOJu0Yw4y/7b1dbfFl6bmMCX+26PsCXIYe5GFhF+NYz0kj3y+KT+hx73 gvDwh4RtFTxqVDeBnb9Yxop+BnFAOyQjLLgq6ZsFi18Q+uBD1MxS5ZBMsb9VyM98xQ== X-Google-Smtp-Source: AGHT+IGWGJqGrEtcN+P3w4zVFVC8fdHPAveM1KtBYZV0EUWq8dLgATO/m6kvVUsD44s1lmrN5r1yDw== X-Received: by 2002:a05:6902:26ca:b0:e33:2db4:bc0b with SMTP id 3f1490d57ef6-e337f8da5ecmr6380702276.50.1731243356966; Sun, 10 Nov 2024 04:55:56 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.142.161]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e336f1ed149sm1597758276.49.2024.11.10.04.55.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Nov 2024 04:55:56 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id A2CABC031A; Sun, 10 Nov 2024 20:55:50 +0800 (CST) From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, ubizjak@gmail.com, hongtao.liu@intel.com Subject: [PATCH v3 3/7] i386: Use GET_MODE with lowpart_subreg Date: Sun, 10 Nov 2024 20:55:46 +0800 Message-ID: <20241110125550.787007-4-hjl.tools@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241110125550.787007-1-hjl.tools@gmail.com> References: <20241110125550.787007-1-hjl.tools@gmail.com> MIME-Version: 1.0 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 With expand_promote_outgoing_argument, op3 in op3 = lowpart_subreg (QImode, op3, HImode); may not be in HImode. Call lowpart_subreg on op3 only if it isn't integer constant and pass GET_MODE (op3) to lowpart_subreg instead of HImode. PR middle-end/14907 * config/i386/i386-expand.cc (ix86_expand_builtin): Use GET_MODE with lowpart_subreg. Signed-off-by: H.J. Lu --- gcc/config/i386/i386-expand.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index ce887d96f6a..4c7aa316ae5 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -15532,7 +15532,8 @@ rdseed_step: op0 = copy_to_mode_reg (GET_MODE (op0), op0); emit_insn (gen (half, op0)); op0 = half; - op3 = lowpart_subreg (QImode, op3, HImode); + if (!CONST_INT_P (op3)) + op3 = lowpart_subreg (QImode, op3, GET_MODE (op3)); break; case IX86_BUILTIN_GATHER3ALTDIV8SF: case IX86_BUILTIN_GATHER3ALTDIV8SI: From patchwork Sun Nov 10 12:55:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 2009217 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=ckNl9+0e; 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 4XmXk63F5Qz1xyk for ; Sun, 10 Nov 2024 23:56:26 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6090F385841D for ; Sun, 10 Nov 2024 12:56:24 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yb1-xb35.google.com (mail-yb1-xb35.google.com [IPv6:2607:f8b0:4864:20::b35]) by sourceware.org (Postfix) with ESMTPS id 12F5E3858C33 for ; Sun, 10 Nov 2024 12:55:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 12F5E3858C33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 12F5E3858C33 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b35 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243359; cv=none; b=fSLa0EzVLVZZn3pWRnWHi2+6APDbtvyZCH28qJ4nhml8rTDWG+9zabUDRreRjGpRU0rDVZWJT2nZR7axZNGUYEyDa/luUrAUmyDUKq3SQC+2Bzvkt2LGqvzOMACAxwhukDix3Itlhr3Bv055tlFxmciMVvM9+GZGv26fnLBVe4Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243359; c=relaxed/simple; bh=OamylmFYZBfUIt0QDZx6ap8i0EE/GxKYgR7rmX7vmJI=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Ma7qWb+cfdwTK7CxVWQ0xkGGTJwDZpBzlXaoANZUDxHxLYNg8aUx87E8sLbyDGeqhpPWH+omI6FCtooVnIWoz19Le5RHbe6MH2/bimXKzWEDHWPPnBvmG5AQjJY6125wFJszitQYMfOxZPIjGAF47df591jPh08F9ReF+WI0zu8= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb35.google.com with SMTP id 3f1490d57ef6-e330f2e9fc0so3817953276.2 for ; Sun, 10 Nov 2024 04:55:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731243356; x=1731848156; 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=pk53GRKQPU6yaB/WDmsNRMh54pABh7pKch1v4OwuaVg=; b=ckNl9+0eJfWo2dy9ECKDF+1Jx8o5yBw3ZF2SIHZA4fLM6b+fO3f426zYoSnteJHt5p L5tdjnOpgTwMQy4BRj3gR+yW3P9uG8etQ+m3eiBFD+xEOlRlugaQrxg8JDFrpi+bQjXG j4jKuBuyyE817lSBDrBjKPcsYzHla0oLJDZ32jTwBg4N9X2LwbPwcWDHSmG9T4VUbLyk hfLbiojkkgaerhro6qvSMTLOJyxbWLEciA7ROjLfGve+RBMyR549bZTzfjGHtVcem109 gPXkJQaptI6SfhuqsM6IlturwDlPdbOeYleYrO0DMTANjgtKBpqsyGAuGNGI71LWpOaS 5HQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731243356; x=1731848156; 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=pk53GRKQPU6yaB/WDmsNRMh54pABh7pKch1v4OwuaVg=; b=uOhyncMGHDbT5fUS6q2L4vAiKDKnm2MDJ2pEyjfjXRefsS+dMM425YFGEGMsifh2Qg 5FeSwXiSvaFwfvEkhoF/IBlEyAz6D/B67KvqB55Z9Frbdy7R/B8G7G031fS4rUrfMM0h EkJuewF3LUxE1RbHO/8qmwqL3Q8h2lEBEVQtnizf8kkGNrvAdLHtLBMsKj/+BMMnDll+ 2j5ZAqDjBgQt2aJGaoYlE41MAnJwx0gQTkdy7F+PYeJUquKYTRWox6FrrtZisw9jKhKm aZHoxD+a82UTAdNtODX4lBjkAwQI2lDLAnLYGUUIbfEwPao9Mc/Puoc3oBU67O8FZcQz 888w== X-Gm-Message-State: AOJu0YzrkLEaGdo27S/yc2e1aoXhzkoeq8T3xonaOBBiw2d7TcYG5WJw qtYlgnpw26Rlgfp8cDlCFhtI5u22YzaCxXO0Yc+T7/fwzSlz+kqsK1YM2G0fDexZlQ== X-Google-Smtp-Source: AGHT+IHGa1q3V9KSx80XJLh47vuMYgNQ9FUUEg5esuJzpLnc0wQAKwRaGNGH967KFtgOz0URVcr3tA== X-Received: by 2002:a05:6902:3210:b0:e30:e35c:c2fa with SMTP id 3f1490d57ef6-e337f886e6bmr7618545276.25.1731243356074; Sun, 10 Nov 2024 04:55:56 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.142.161]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e336ee15907sm1609641276.4.2024.11.10.04.55.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Nov 2024 04:55:55 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id AD9A3C055A; Sun, 10 Nov 2024 20:55:50 +0800 (CST) From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, ubizjak@gmail.com, hongtao.liu@intel.com Subject: [PATCH v3 4/7] i386: Adjust apx-ndd.c for frontend promotion removal Date: Sun, 10 Nov 2024 20:55:47 +0800 Message-ID: <20241110125550.787007-5-hjl.tools@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241110125550.787007-1-hjl.tools@gmail.com> References: <20241110125550.787007-1-hjl.tools@gmail.com> MIME-Version: 1.0 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 Since the C frontend no longer promotes integer argument smaller than int, the apx-ndd.c codgen is slightly different: --- apx-ndd.s (original) 2024-11-10 06:07:09.894876973 +0800 +++ apx-ndd.s (updated) 2024-11-10 06:06:59.371860565 +0800 @@ -17,7 +17,7 @@ foo_add_char: foo1_add_char: .LFB1: .cfi_startproc - leal (%rsi,%rdi), %eax + leal (%rdi,%rsi), %eax ret .cfi_endproc .LFE1: @@ -50,7 +50,7 @@ foo_add_short: foo1_add_short: .LFB4: .cfi_startproc - leal (%rsi,%rdi), %eax + leal (%rdi,%rsi), %eax ret .cfi_endproc .LFE4: @@ -413,7 +413,7 @@ foo_and_char: foo1_and_char: .LFB37: .cfi_startproc - andl %edi, %esi, %eax + andl %esi, %edi, %eax ret .cfi_endproc .LFE37: @@ -435,7 +435,7 @@ foo_and_short: foo1_and_short: .LFB39: .cfi_startproc - andl %edi, %esi, %eax + andl %esi, %edi, %eax ret .cfi_endproc .LFE39: @@ -501,7 +501,7 @@ foo_or_char: foo1_or_char: .LFB45: .cfi_startproc - orl %edi, %esi, %eax + orl %esi, %edi, %eax ret .cfi_endproc .LFE45: @@ -523,7 +523,7 @@ foo_or_short: foo1_or_short: .LFB47: .cfi_startproc - orl %edi, %esi, %eax + orl %esi, %edi, %eax ret .cfi_endproc .LFE47: @@ -589,7 +589,7 @@ foo_xor_char: foo1_xor_char: .LFB53: .cfi_startproc - xorl %edi, %esi, %eax + xorl %esi, %edi, %eax ret .cfi_endproc .LFE53: @@ -611,7 +611,7 @@ foo_xor_short: foo1_xor_short: .LFB55: .cfi_startproc - xorl %edi, %esi, %eax + xorl %esi, %edi, %eax ret .cfi_endproc .LFE55: @@ -1018,7 +1018,7 @@ foo4_rol_uint64_t: foo1_imul_short: .LFB92: .cfi_startproc - imull %edi, %esi, %eax + imull %esi, %edi, %eax ret .cfi_endproc .LFE92: Adjust the assembler scans. PR middle-end/14907 * gcc.target/i386/apx-ndd.c: Adjusted. Signed-off-by: H.J. Lu --- gcc/testsuite/gcc.target/i386/apx-ndd.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/gcc/testsuite/gcc.target/i386/apx-ndd.c b/gcc/testsuite/gcc.target/i386/apx-ndd.c index ce77630a47c..2b2f4fc4b0f 100644 --- a/gcc/testsuite/gcc.target/i386/apx-ndd.c +++ b/gcc/testsuite/gcc.target/i386/apx-ndd.c @@ -188,16 +188,13 @@ FOO2 (int64_t, imul, *) /* { dg-final { scan-assembler-times "not(?:l|w|q)\[^\n\r]%(?:|r|e)di, %(?:|r|e)ax" 4 } } */ /* { dg-final { scan-assembler-times "andb\[^\n\r]*1, \\(%(?:r|e)di\\), %al" 1 } } */ /* { dg-final { scan-assembler-times "and(?:l|w|q)\[^\n\r]*1, \\(%(?:r|e)di\\), %(?:|r|e)ax" 3 } } */ -/* { dg-final { scan-assembler-times "and(?:l|w|q)\[^\n\r]%(?:|r|e)di, %(?:|r|e)si, %(?:|r|e)ax" 2 } } */ -/* { dg-final { scan-assembler-times "and(?:l|w|q)\[^\n\r]%(?:|r|e)si, %(?:|r|e)di, %(?:|r|e)ax" 2 } } */ +/* { dg-final { scan-assembler-times "and(?:l|w|q)\[^\n\r]%(?:|r|e)si, %(?:|r|e)di, %(?:|r|e)ax" 4 } } */ /* { dg-final { scan-assembler-times "orb\[^\n\r]*1, \\(%(?:r|e)di\\), %al" 2} } */ /* { dg-final { scan-assembler-times "or(?:l|w|q)\[^\n\r]*1, \\(%(?:r|e)di\\), %(?:|r|e)ax" 6 } } */ -/* { dg-final { scan-assembler-times "or(?:l|w|q)\[^\n\r]%(?:|r|e)di, %(?:|r|e)si, %(?:|r|e)ax" 4 } } */ -/* { dg-final { scan-assembler-times "or(?:l|w|q)\[^\n\r]%(?:|r|e)si, %(?:|r|e)di, %(?:|r|e)ax" 4 } } */ +/* { dg-final { scan-assembler-times "or(?:l|w|q)\[^\n\r]%(?:|r|e)si, %(?:|r|e)di, %(?:|r|e)ax" 8 } } */ /* { dg-final { scan-assembler-times "xorb\[^\n\r]*1, \\(%(?:r|e)di\\), %al" 1 } } */ /* { dg-final { scan-assembler-times "xor(?:l|w|q)\[^\n\r]*1, \\(%(?:r|e)di\\), %(?:|r|e)ax" 3 } } */ -/* { dg-final { scan-assembler-times "xor(?:l|w|q)\[^\n\r]%(?:|r|e)di, %(?:|r|e)si, %(?:|r|e)ax" 2 } } */ -/* { dg-final { scan-assembler-times "xor(?:l|w|q)\[^\n\r]%(?:|r|e)si, %(?:|r|e)di, %(?:|r|e)ax" 2 } } */ +/* { dg-final { scan-assembler-times "xor(?:l|w|q)\[^\n\r]%(?:|r|e)si, %(?:|r|e)di, %(?:|r|e)ax" 4 } } */ /* { dg-final { scan-assembler-times "sal(?:b|l|w|q)\[^\n\r]*1, \\(%(?:r|e)di\\), %(?:|r|e)a(?:x|l)" 4 } } */ /* { dg-final { scan-assembler-times "sal(?:l|w|q)\[^\n\r]*7, %(?:|r|e)di, %(?:|r|e)ax" 4 } } */ /* { dg-final { scan-assembler-times "sar(?:b|l|w|q)\[^\n\r]*1, \\(%(?:r|e)di\\), %(?:|r|e)a(?:x|l)" 4 } } */ From patchwork Sun Nov 10 12:55:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 2009227 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=eBclj+Ib; 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 4XmXmk6yqhz1xyk for ; Sun, 10 Nov 2024 23:58:46 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 22F5C385841D for ; Sun, 10 Nov 2024 12:58:45 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yb1-xb2e.google.com (mail-yb1-xb2e.google.com [IPv6:2607:f8b0:4864:20::b2e]) by sourceware.org (Postfix) with ESMTPS id 1154F3858417 for ; Sun, 10 Nov 2024 12:56:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1154F3858417 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1154F3858417 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b2e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243371; cv=none; b=UccZ7+UKYHDj2L8Iap6tXXZwK67qwNu1+Q9KRGnGlzjW3P/xLn/M4pfMw8NLZJC5nnnazO/Lwgd5e1M1L5PTLokHz+3GGvw4QSx/pyEu0/QR80BxRsnzac4kSwjcG+QS4eEIq1Qc7pbjaISa+D6/uVuwKl6cImrtHPjUnBWXAcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243371; c=relaxed/simple; bh=NAgXW226oMQKQ14Kjf75eE7VotGKSXqHlIenzwyBvgU=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=C84V8xslrD23ojSV4quopeFJf7S7Jzr1TNELyM8GdB0XPX5cQS3Ieu26HD0wKb6963rGYMkCg/NgZN8aDmh9NYHb0aR6MSn7xIHTmpu+nWiJuk+RWVA4ObkK/PdU0GIypDetZsQX6ja2e1r3hmbAaQuOPJotTbbZNwn9KUNMUJE= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb2e.google.com with SMTP id 3f1490d57ef6-e28fd8cdfb8so3466453276.3 for ; Sun, 10 Nov 2024 04:56:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731243360; x=1731848160; 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=nbXBJ+O2bxswqczCSpg7xf3UNv96f4GSntkKYKMtUAo=; b=eBclj+IbY36w+JeymelmEkY+HfLyXVjL/HxuC9nP8ujIhMWlUycXIVVpPxaXtpH83B dRe2jHwDB0gPrrEciilhKvh9BsgdjS9i60CVCEfRrfPXA+7NuW8IWSNh/8EM803EL1mX vDlTG5ENNFdDX5zpgXbi+I1y0OAJMSKjC+XiHc7qKLKHYcyYa6pZLdXTWzy7/LxqtgZd nqVFaNCt1RL+vUMT3Y3cuWNZajEZy6WWwhs/IvIZ5WdIh9kb91ianOCwGR+0rzz5qE/e wGH3/HkCbNQxkkK1hMVIC6d3Zbcf8JyHuAV9Pvv0sYRwtisXTcGFezGG8Kx5vDYcVw2b n7Sw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731243360; x=1731848160; 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=nbXBJ+O2bxswqczCSpg7xf3UNv96f4GSntkKYKMtUAo=; b=aCpQQpUv6hR3SXLlQtdhmGujys7YBYI+72Nj/EwUSPs573E4Cw49sjDC2XRFq7B5i7 nSm0Y5iD/1OZb67im1CR/MUHR3f2ULOlJzm3wdvX9lh6T4Tv7hYCew0ecrh8SdDBMizT Wq40K51Mv6l9jDDjnLImZ2CFLTQrmulvkaWxHW9GTtVL1QIuOt8Ek9v1ylMydNAfZNWF mZx0WYaVi2X8RyYTb0FAUZcxDtnG/x2qO8FWN1eAHxuJIkBVk09yzcDJlkbIvU+48ZXz KpXIs443FrU5njKMAKwnLTkShWXOUSry1QFsWNr5O0b0eGUUuTuIi57gcBXN6RE/F32X X/lg== X-Gm-Message-State: AOJu0YyZmiIzfA7apvHXaoxcZ9LVle8gvkHmp0epksr/hdFoAzo4z+Cm Wxny5EJYGgRHpDGxG9RU/PoPYXBYRNVOwWMW7PLXIqO+ZN6KeZ/gW6sttzFX6zpMVw== X-Google-Smtp-Source: AGHT+IHoxXSEBFIeMveLia6eLz8tJmpTj/w8yEquWO7QN/MSQuusaA/W3CWm49kD8rsU8VH0wmxjRw== X-Received: by 2002:a05:6902:728:b0:e30:cc34:af1f with SMTP id 3f1490d57ef6-e337f840d83mr8718585276.2.1731243360033; Sun, 10 Nov 2024 04:56:00 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.142.161]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e336ef20095sm1729637276.15.2024.11.10.04.55.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Nov 2024 04:55:59 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id B85E5C0632; Sun, 10 Nov 2024 20:55:50 +0800 (CST) From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, ubizjak@gmail.com, hongtao.liu@intel.com Subject: [PATCH v3 5/7] vect-simd-clone-1[6-8][cd].c: Expect in-branch clones for x86 Date: Sun, 10 Nov 2024 20:55:48 +0800 Message-ID: <20241110125550.787007-6-hjl.tools@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241110125550.787007-1-hjl.tools@gmail.com> References: <20241110125550.787007-1-hjl.tools@gmail.com> MIME-Version: 1.0 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 Since the C frontend no longer promotes char and short arguments, expect in-branch clones for x86. PR middle-end/14907 * gcc.dg/vect/vect-simd-clone-16c.c: Expect in-branch clones for x86. * gcc.dg/vect/vect-simd-clone-16d.c: Likewise. * gcc.dg/vect/vect-simd-clone-17c.c: Likewise. * gcc.dg/vect/vect-simd-clone-17d.c: Likewise. * gcc.dg/vect/vect-simd-clone-18c.c: Likewise. * gcc.dg/vect/vect-simd-clone-18d.c: Likewise. Signed-off-by: H.J. Lu --- gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c | 5 +---- gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c | 4 +--- gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c | 5 +---- gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c | 5 +---- gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c | 5 +---- gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c | 5 +---- 6 files changed, 6 insertions(+), 23 deletions(-) diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c index 4fdf25d06c6..628d4575673 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16c.c @@ -7,11 +7,8 @@ /* Ensure the the in-branch simd clones are used on targets that support them. Some targets use another call for the epilogue loops. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! { x86_64-*-* || { i?86-*-* || aarch64*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */ /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */ -/* x86_64 fails to use in-branch clones for TYPE=short. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 0 "vect" { target x86_64-*-* i?86-*-* } } } */ - /* The LTO test produces two dump files and we scan the wrong one. */ /* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c index 55d3c0afae5..d1f85b0703e 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-16d.c @@ -7,11 +7,9 @@ /* Ensure the the in-branch simd clones are used on targets that support them. Some targets use another call for the epilogue loops. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! { x86_64-*-* || { i?86-*-* || aarch64*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */ /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */ -/* x86_64 fails to use in-branch clones for TYPE=char. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 0 "vect" { target x86_64-*-* i?86-*-* } } } */ /* The LTO test produces two dump files and we scan the wrong one. */ /* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c index 6afa2fd595e..6148abee806 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17c.c @@ -7,11 +7,8 @@ /* Ensure the the in-branch simd clones are used on targets that support them. Some targets use another call for the epilogue loops. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! { x86_64-*-* || { i?86-*-* || aarch64*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */ /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */ -/* x86_64 fails to use in-branch clones for TYPE=short. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 0 "vect" { target x86_64-*-* i?86-*-* } } } */ - /* The LTO test produces two dump files and we scan the wrong one. */ /* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c index 56177880b6b..63687984598 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-17d.c @@ -7,11 +7,8 @@ /* Ensure the the in-branch simd clones are used on targets that support them. Some targets use another call for the epilogue loops. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! { x86_64-*-* || { i?86-*-* || aarch64*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */ /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */ -/* x86_64 fails to use in-branch clones for TYPE=char. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 0 "vect" { target x86_64-*-* i?86-*-* } } } */ - /* The LTO test produces two dump files and we scan the wrong one. */ /* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c index e56e6bca4a0..ee049e7d003 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18c.c @@ -7,11 +7,8 @@ /* Ensure the the in-branch simd clones are used on targets that support them. Some targets use another call for the epilogue loops. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! { x86_64-*-* || { i?86-*-* || aarch64*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */ /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */ -/* x86_64 fails to use in-branch clones for TYPE=short. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 0 "vect" { target x86_64-*-* i?86-*-* } } } */ - /* The LTO test produces two dump files and we scan the wrong one. */ /* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c index 87e7379733e..bad9bcb731f 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c +++ b/gcc/testsuite/gcc.dg/vect/vect-simd-clone-18d.c @@ -7,11 +7,8 @@ /* Ensure the the in-branch simd clones are used on targets that support them. Some targets use another call for the epilogue loops. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { ! { x86_64-*-* || { i?86-*-* || aarch64*-*-* } } } } } } */ +/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 2 "vect" { target { !aarch64*-*-* } } } } */ /* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 3 "vect" { target { aarch64*-*-* } } } } */ -/* x86_64 fails to use in-branch clones for TYPE=char. */ -/* { dg-final { scan-tree-dump-times {[\n\r] [^\n]* = foo\.simdclone} 0 "vect" { target x86_64-*-* i?86-*-* } } } */ - /* The LTO test produces two dump files and we scan the wrong one. */ /* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ From patchwork Sun Nov 10 12:55:49 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 2009225 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Gqxm6lyl; 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 4XmXlL6Wfbz1xyk for ; Sun, 10 Nov 2024 23:57:34 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 19811385841D for ; Sun, 10 Nov 2024 12:57:33 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yb1-xb30.google.com (mail-yb1-xb30.google.com [IPv6:2607:f8b0:4864:20::b30]) by sourceware.org (Postfix) with ESMTPS id 970043858C66 for ; Sun, 10 Nov 2024 12:56:00 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 970043858C66 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 970043858C66 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b30 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243368; cv=none; b=l2VWGRn4pqN0781WglC4IyOZg4M4AzebyOs4puoH+Jg/xxbsiuByflh+OOQ+UDPktO3ghY5z6UL/znZruOMmnVUXWphqthu5zH8AXXEladbEct0YbdtJZnMfv4UL97L64CTn59Akj9ahd7dakugVB7NyPp/S4kc3ZHDjzc9/WcM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243368; c=relaxed/simple; bh=1VUOLqM/8fC33Z7rBVQVfTfAbQsJ/PtBSJQ7+NQH10U=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=fAJaNDYbMhzJdeItOW7F5FCjxWIxGJ5CCNx6alhQmrrCwLqrhk5LRK1PhiSEBwqbq4rpT9cATUrcT3biV+IIqeN5r78EYTesMj8VZl5gJazNnUXWJS9AnpRbipd79isstOw+9aqvW+lMbyBaJKAxjHyNGNnrhYZ3p+eW+Z8rNmI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb30.google.com with SMTP id 3f1490d57ef6-e2915f00c12so3538750276.0 for ; Sun, 10 Nov 2024 04:56:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731243360; x=1731848160; 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=W5R63VZm0pQaqWq6fhQFF1hmFFrkM9TMZ8JCbvjbrJM=; b=Gqxm6lyl+P7nAmcCuq/32wRZ4lgy91WXmm14uPC2ziFMUkh7G6RW08FHtz+C+IfBZi bT+bLBVT5JrUG3waY3s/E3kD+dinGYDmSmzO82/tsY8sM3f7XCCvsq32Ktlawd6Mg9uF e9f1Eu51x9JoXGqs+niV0d/p3gm4lhCbqN5GrMHUiJ2TwCe7aQgsMcV26hUvNg0W6U3r V3+GTzN0eYZuqCbRS5nLQvW8lUpTN4E05zypaWBnYfKRY7QWTzcsJ/QDD0k2VEMOUdpD SIKIWqKk5ZE3XDGTEQpTueVJKryFMN/Bq76ZqA2AjM5A5L6KpSvJxtXQ5OYT3GM2asOa 17ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731243360; x=1731848160; 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=W5R63VZm0pQaqWq6fhQFF1hmFFrkM9TMZ8JCbvjbrJM=; b=Zeimg/9OvYMhvr4ZHc2+nlYc0SR0yMFSWAZgdiz3UMOwPDmxkWcs8v84tAv75u29Uc YXssTY+1JRwhmdSmn0t+ccbxoqk/gkN2ROH5F0yRk44mT8swT246m7SstA6Gi399CVCL mPrS+QckMDnbPFUXr0Tu+/u4sQJgJJm1VWbalcCxi8N1SiOVTPB6NJwBZ9d/qQ9cs4L5 r/lD+OwTGBOOfSaUsK8tH9N4XRqouUERlRlo40faIpwNSVAuVHo3OjzKFnT2Xm4GQ2Fo IwvnGi+9L+i4XejfqVb1XVmAjwYrpMjsOIZMHILzCqlrgGbmMNGUBQHqDdLvgYHe/eEL a6Gg== X-Gm-Message-State: AOJu0Yye5Skvn8UjpZ7jAUMjfYc4/KESkf23dWYZwBBwX3gDyI0A+EQH 8Lukdd8RjnbnYplA58Ey7NSEYZSYgpmgk/Zs4RBxsEWfOlC5gMAsLY+KtskA0YtOQw== X-Google-Smtp-Source: AGHT+IFBZ9A01ni80EZRDpZeK5rClTxzApwPIrpqRtW9fdy7E0jhfJPxgApMZCtfW4Um3XxQAJm1KQ== X-Received: by 2002:a05:6902:704:b0:e28:6d3c:f869 with SMTP id 3f1490d57ef6-e337f820c25mr7218283276.11.1731243359827; Sun, 10 Nov 2024 04:55:59 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.142.161]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e336f1ed338sm1695587276.54.2024.11.10.04.55.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Nov 2024 04:55:59 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id C3009C071E; Sun, 10 Nov 2024 20:55:50 +0800 (CST) From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, ubizjak@gmail.com, hongtao.liu@intel.com Subject: [PATCH v3 6/7] scev-cast.c: Adjusted Date: Sun, 10 Nov 2024 20:55:49 +0800 Message-ID: <20241110125550.787007-7-hjl.tools@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241110125550.787007-1-hjl.tools@gmail.com> References: <20241110125550.787007-1-hjl.tools@gmail.com> MIME-Version: 1.0 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 Since the C frontend no longer promotes char argument, adjust scev-cast.c. PR middle-end/14907 * gcc.dg/tree-ssa/scev-cast.c: Adjusted. Signed-off-by: H.J. Lu --- gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c b/gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c index c569523ffa7..1a3c150a884 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/scev-cast.c @@ -22,6 +22,6 @@ void tst(void) blau ((unsigned char) i); } -/* { dg-final { scan-tree-dump-times "& 255" 1 "optimized" } } */ -/* { dg-final { scan-tree-dump-times "= \\(signed char\\)" 1 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "= \\(unsigned char\\)" 2 "optimized" } } */ +/* { dg-final { scan-tree-dump-times "= \\(signed char\\)" 3 "optimized" } } */ From patchwork Sun Nov 10 12:55:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 2009228 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Yb0185/C; 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 4XmXny2mh4z1xyk for ; Sun, 10 Nov 2024 23:59:49 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 893373858290 for ; Sun, 10 Nov 2024 12:59:45 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-yb1-xb2f.google.com (mail-yb1-xb2f.google.com [IPv6:2607:f8b0:4864:20::b2f]) by sourceware.org (Postfix) with ESMTPS id 580F6385841E for ; Sun, 10 Nov 2024 12:56:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 580F6385841E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 580F6385841E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::b2f ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243375; cv=none; b=ArvLtA5E56Xyt2BgIUUGJupVTJjJ1oONjwPdywYBmTR/UBScPaM7A0iAfYM7out2v3KMqWJR10vh8mKdHj83stLFMSRuZ+Gu01OwUwJZ1aBD1Kh7yOvzAZw4qQhgk+KOoEGPDIa7pKIzBEFDLLYRy1AJfxDGbxvkEkqblErvLYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1731243375; c=relaxed/simple; bh=qy3SODFqgAiUxmoS4Qva4NwhFiPMTSIiwi7Amq1VrsY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=Flk7f70/d4hjqvDL4+sABiyyz32dpDtDzydv6792ppVXmVkEAlzDw4tDGjjV+ti3Z0IfOUZWyaSHdOU7R7P3C5z9cWTNxHCNTZ0vUddsfVZaHGlkLbkgNmA4/bQYxR7nz6BwOJYv/5Uq25NAakYEqLU39iMXd+tnAFi83/13I+E= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yb1-xb2f.google.com with SMTP id 3f1490d57ef6-e291f1d659aso3402587276.3 for ; Sun, 10 Nov 2024 04:56:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731243360; x=1731848160; 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=dz/DjSQskQzTSCKdDvU6ngHZ4LmipnppjfiXxpQ5WTs=; b=Yb0185/CHAOka0oJhB2vMtiMfEuBclO2pJaIsG0WCOgFPslvaSu38vwTi3kclZWQLD sGXjRuxwjXj2ryZaEZrifNuuDYfY91Gh6iO9tACl8FYqWE4OEaNReTn8JHLW+s9GIMaO 1oegA+AbdfafhSlK8q041GmsdUTTowz4Fh+ddKHZKJPDyWYeX+uBvq4vE6mK2GhWRf5b 1tk7h/fh0P8c7BAUssZKUv4Go5hV+xtkcyY52SbAvcvcTZw44Oax6ISrvsis21ZAzDUY Jfe/afkWJzx4d6bYb8RMPY4myjZlXQHCR3bS8PFJiAACGhVhuZ4q7nkItYuf6s0Wd6um GZTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731243360; x=1731848160; 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=dz/DjSQskQzTSCKdDvU6ngHZ4LmipnppjfiXxpQ5WTs=; b=CDokGPu1Kq3Ko+hmK0V+kc7pRpJm0kicx9xNebgLlHwOmsQDnCMUUFKVLd3SJlgv4R lUX9qHLHxcUjzMKokvYe79IdYsdB7xvwx9rUciZnFg/vxPYRorTxP8DptcA5VBQpSfEh OIOtDYgBImxEQ7e6YoL6iLl2BYI0Jeh6VRPTjIM464rRO7kiSTQnsXwaseMAASTHLRAW rqJEEKbK/jVgqegkXl2DMsFIpe3ngCEBXLRJyqa2jCV4BuJTbs4XevhsRKiI/wOOjSMD lOVbB5O4IVAaPuTeLvboECFDrNH6MhGrcxqCPuJvGsspsHShSTYNuU+vE0lUvM6okJPr /2pA== X-Gm-Message-State: AOJu0Yz6vL4A1ta2AJhTQRrfWvoV1CARGIVJQJg4Ol23t70zqPcXIqq3 NNL8chrDMcn7FJjOGi9qM0X7R7dLVXUU/AhlIgMSMbueEYS/NuZXBrZqzbwi4RnOtA== X-Google-Smtp-Source: AGHT+IELi7y/nI3WVqrXmExWLbyNcYB+jDrANHn9UJiZwXZm7BI953D4YkTuYTLwRCWgO2fO+dmsnQ== X-Received: by 2002:a05:6902:2d04:b0:e33:68e1:9f8c with SMTP id 3f1490d57ef6-e337f81ef51mr9435770276.5.1731243360479; Sun, 10 Nov 2024 04:56:00 -0800 (PST) Received: from gnu-tgl-3.localdomain ([172.58.142.161]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e336f1ed4b2sm1700977276.56.2024.11.10.04.55.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 10 Nov 2024 04:56:00 -0800 (PST) Received: from gnu-tgl-3.. (localhost [IPv6:::1]) by gnu-tgl-3.localdomain (Postfix) with ESMTP id CDD11C07F3; Sun, 10 Nov 2024 20:55:50 +0800 (CST) From: "H.J. Lu" To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, ubizjak@gmail.com, hongtao.liu@intel.com Subject: [PATCH v3 7/7] ssa-fre-4.c: Skip for all targets Date: Sun, 10 Nov 2024 20:55:50 +0800 Message-ID: <20241110125550.787007-8-hjl.tools@gmail.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241110125550.787007-1-hjl.tools@gmail.com> References: <20241110125550.787007-1-hjl.tools@gmail.com> MIME-Version: 1.0 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 Since the C frontend no longer promotes char argument, ssa-fre-4.c will fail for all targets. Skip it for all targets. PR middle-end/14907 * gcc.dg/tree-ssa/ssa-fre-4.c: Skip for all targets. Signed-off-by: H.J. Lu --- gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c index 5a7588febaa..07d4d81996a 100644 --- a/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-fre-4.c @@ -1,6 +1,6 @@ -/* If the target returns false for TARGET_PROMOTE_PROTOTYPES, then there - will be no casts for FRE to eliminate and the test will fail. */ -/* { dg-do compile { target i?86-*-* x86_64-*-* hppa*-*-* m68k*-*-* } } */ +/* Since the C frontend no longer promotes char argument, there will be + no casts for FRE to eliminate and the test will fail. */ +/* { dg-do compile { target !*-*-* } } */ /* { dg-options "-O -fno-tree-ccp -fno-tree-forwprop -fdump-tree-fre1-details" } */ /* From PR21608. */