From patchwork Tue May 21 05:12:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Liu, Hongtao" X-Patchwork-Id: 1937209 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=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=Hqzv8GD5; 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 4Vk2dL2hLpz1ydW for ; Tue, 21 May 2024 15:13:10 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6F7143858D35 for ; Tue, 21 May 2024 05:13:08 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.20]) by sourceware.org (Postfix) with ESMTPS id 3D51E3858D1E for ; Tue, 21 May 2024 05:12:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3D51E3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 3D51E3858D1E Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=198.175.65.20 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1716268365; cv=none; b=m2xbd7XUISPqSOjRvpJ9SfjryXv8loprwj5r3c+ns0nTdNsrwQmMhHsVizNca+71rOXrvHYYVy5TGqZ0gpX8wh/1U+aRm5jew7ofqreQAE6hFx9R2XefSGHy5zGthKIprn9RVCeXdqbtfa0K/og3CuDbeC3A420BqaVVZHoNnF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1716268365; c=relaxed/simple; bh=uOaN5FlkjZxcRGaP6wJiphjf8mjzlR4o/AmDcKOw52U=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=d82sFX8uduu0wOr9aGlX4gssZ/b43+Gu+0cqTixN2F46rIrqXb30zKqOfKbpq/6c+T7Us8ZDgf/r2t6jLTHJdoOeKlb7xpey1senTF792HGLvnwLGBeyJ45h/9ENSsdaVeKetKjI8RsqzH1E58MJ0hcfLhoH6Ty+3N8GS6eZeRU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1716268364; x=1747804364; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=uOaN5FlkjZxcRGaP6wJiphjf8mjzlR4o/AmDcKOw52U=; b=Hqzv8GD5JEQBxa4GAbleN9o5FRGN8gF0da1WgGt6RUZO6cDFRam/JSWA rCQuDxOn88idkrh/PEoNId1MdQGvFZjIml5HTvJ8tIpqLoujz1kaGlbGW 5N8GK8LRXlUySlZ6mHKcf5ghzPCJLER8Uup1ACQl7wuP0c/7Q0oYEoZ8F bGSsUj7zRz57L1auJmNvjp8qJSnfdrwEm2iw2B3cMF4TWI8ceWOEiz0G4 DwkfKKNtWG2z5FRZMI1Xd24ZXtuCzGLq4a6ThVYeso1b9EMMc9VNILF6J BVdh9io8moTEV0WWL1JqKbdXpgphOGXk6aeEuhl3hY3Db4N/p1+TcbPx4 A==; X-CSE-ConnectionGUID: T//I02K/RPm1hmgUPPSQ2Q== X-CSE-MsgGUID: b7GCvFlPSvirTUx6ZIlqdg== X-IronPort-AV: E=McAfee;i="6600,9927,11078"; a="12279389" X-IronPort-AV: E=Sophos;i="6.08,176,1712646000"; d="scan'208";a="12279389" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 May 2024 22:12:23 -0700 X-CSE-ConnectionGUID: 6k90dJtSSum3hWETO8T59w== X-CSE-MsgGUID: zalOTF/uQt2fTkhYcnOXqw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,176,1712646000"; d="scan'208";a="32806244" Received: from shvmail03.sh.intel.com ([10.239.245.20]) by fmviesa006.fm.intel.com with ESMTP; 20 May 2024 22:12:21 -0700 Received: from shliclel4217.sh.intel.com (shliclel4217.sh.intel.com [10.239.240.127]) by shvmail03.sh.intel.com (Postfix) with ESMTP id 65FFA1007C19; Tue, 21 May 2024 13:12:20 +0800 (CST) From: liuhongt To: gcc-patches@gcc.gnu.org Cc: crazylht@gmail.com, hjl.tools@gmail.com Subject: [PATCH 1/2] Simplify (AND (ASHIFTRT A imm) mask) to (LSHIFTRT A imm) for vector mode. Date: Tue, 21 May 2024 13:12:19 +0800 Message-Id: <20240521051220.8653-1-hongtao.liu@intel.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org When mask is (1 << (prec - imm) - 1) which is used to clear upper bits of A, then it can be simplified to LSHIFTRT. i.e Simplify (and:v8hi (ashifrt:v8hi A 8) (const_vector 0xff x8)) to (lshifrt:v8hi A 8) Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}. Ok of trunk? gcc/ChangeLog: PR target/114428 * simplify-rtx.cc (simplify_context::simplify_binary_operation_1): Simplify (AND (ASHIFTRT A imm) mask) to (LSHIFTRT A imm) for specific mask. --- gcc/simplify-rtx.cc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/gcc/simplify-rtx.cc b/gcc/simplify-rtx.cc index 53f54d1d392..6c91409200e 100644 --- a/gcc/simplify-rtx.cc +++ b/gcc/simplify-rtx.cc @@ -4021,6 +4021,31 @@ simplify_context::simplify_binary_operation_1 (rtx_code code, return tem; } + /* (and:v4si + (ashiftrt:v4si A 16) + (const_vector: 0xffff x4)) + is just (lshiftrt:v4si A 16). */ + if (VECTOR_MODE_P (mode) && GET_CODE (op0) == ASHIFTRT + && (CONST_INT_P (XEXP (op0, 1)) + || (GET_CODE (XEXP (op0, 1)) == CONST_VECTOR + && CONST_VECTOR_DUPLICATE_P (XEXP (op0, 1)))) + && GET_CODE (op1) == CONST_VECTOR + && CONST_VECTOR_DUPLICATE_P (op1)) + { + unsigned HOST_WIDE_INT shift_count + = (CONST_INT_P (XEXP (op0, 1)) + ? UINTVAL (XEXP (op0, 1)) + : UINTVAL (XVECEXP (XEXP (op0, 1), 0, 0))); + unsigned HOST_WIDE_INT inner_prec + = GET_MODE_PRECISION (GET_MODE_INNER (mode)); + + /* Avoid UD shift count. */ + if (shift_count < inner_prec + && (UINTVAL (XVECEXP (op1, 0, 0)) + == (HOST_WIDE_INT_1U << (inner_prec - shift_count)) - 1)) + return simplify_gen_binary (LSHIFTRT, mode, XEXP (op0, 0), XEXP (op0, 1)); + } + tem = simplify_byte_swapping_operation (code, mode, op0, op1); if (tem) return tem; From patchwork Tue May 21 05:12:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Liu, Hongtao" X-Patchwork-Id: 1937210 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=intel.com header.i=@intel.com header.a=rsa-sha256 header.s=Intel header.b=ivrx6YWM; 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 4Vk2dM2znVz20dK for ; Tue, 21 May 2024 15:13:11 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 745473858429 for ; Tue, 21 May 2024 05:13:09 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.20]) by sourceware.org (Postfix) with ESMTPS id 307C93858D28 for ; Tue, 21 May 2024 05:12:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 307C93858D28 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=intel.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 307C93858D28 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=198.175.65.20 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1716268368; cv=none; b=DZ3ezo68pz4NZHW6JSJaR9AcH3aW5IVKe/wrKvlVv5SELcvmfmjVO1uVwB+o7Ja9WzPeyaeQKYVcYKVScSaR9UYOhmZPkuim/MPxrfQNtY9AjbLqZLLKThe9LOPiXt2Y1r2IjVND7OVVlWmY6nwJ7TPqfmX/dhJNO95N5gNv/lg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1716268368; c=relaxed/simple; bh=dF29N7W4H5JMPKccOt5uF4wa71Bkvl19E0gdv0RGN00=; h=DKIM-Signature:From:To:Subject:Date:Message-Id:MIME-Version; b=LGLFgeyqJbSK1vraHsmbLDjfRaxpF8v7XlgJR7/eNay70qfMXxamC1Si5ozYSFSJq7d5lktVswgcaupDwQLLcJ4d5bTywvt/Xbdmb/lPgmD6BbmGcFQMLpitpQr4KZdx26j2ziW9EJHLPSFrg4C8X26KQIB2B9zh9ebU+pAQeKk= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1716268367; x=1747804367; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dF29N7W4H5JMPKccOt5uF4wa71Bkvl19E0gdv0RGN00=; b=ivrx6YWM/LrDN6qEd+Di+Dp6rnDScfmxQP9Iy+/4fYxP2F/oJdCF0swb ptT3eDVWuli8KV+E2jVTVTLSJ7q1bFgQo6/82l5afJ/byytatB350ltrH IZ9ym6o2+MzOThWRW3ROuf70F/RHeQRoeQWZm5as9Wo1G9zv5iemxK6/z 8rTPBRdUTL1pRxIMErneDSl/D10N4iUDjUg+lqKiuKRUHYLJQThsVUwQv mkkklD8WOmwMSD5GeCOZIBHTwl5q/diCgp2sX7spFt0j0V40GulNkaNt4 rgauMeLE30s6QSk/RaUl+tsALtE0u13pm++U+cZMnNmVwHDDe91c9NBfz g==; X-CSE-ConnectionGUID: tL9PSjQrQwi2i1a2RA4f4Q== X-CSE-MsgGUID: kzHwKSZJQSqAvGgbqlbBqg== X-IronPort-AV: E=McAfee;i="6600,9927,11078"; a="12279392" X-IronPort-AV: E=Sophos;i="6.08,176,1712646000"; d="scan'208";a="12279392" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by orvoesa112.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 May 2024 22:12:24 -0700 X-CSE-ConnectionGUID: Yi6l42TiRxu+ZejEZI5SiQ== X-CSE-MsgGUID: c2bws09lSA+zWP3UCqcJzQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.08,176,1712646000"; d="scan'208";a="32806243" Received: from shvmail03.sh.intel.com ([10.239.245.20]) by fmviesa006.fm.intel.com with ESMTP; 20 May 2024 22:12:21 -0700 Received: from shliclel4217.sh.intel.com (shliclel4217.sh.intel.com [10.239.240.127]) by shvmail03.sh.intel.com (Postfix) with ESMTP id 67A221007C27; Tue, 21 May 2024 13:12:20 +0800 (CST) From: liuhongt To: gcc-patches@gcc.gnu.org Cc: crazylht@gmail.com, hjl.tools@gmail.com Subject: [PATCH 2/2] [x86] Adjust rtx_cost for MEM to enable more simplication Date: Tue, 21 May 2024 13:12:20 +0800 Message-Id: <20240521051220.8653-2-hongtao.liu@intel.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20240521051220.8653-1-hongtao.liu@intel.com> References: <20240521051220.8653-1-hongtao.liu@intel.com> MIME-Version: 1.0 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, KAM_STOCKGEN, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org For CONST_VECTOR_DUPLICATE_P in constant_pool, it is just broadcast or variants in ix86_vector_duplicate_simode_const. Adjust the cost to COSTS_N_INSNS (2) + speed which should be a little bit larger than broadcast. Bootstrapped and regtested on x86_64-pc-linux-gnu{-m32,}. Ok for trunk? gcc/ChangeLog: PR target/114428 * config/i386/i386.cc (ix86_rtx_costs): Adjust cost for CONST_VECTOR_DUPLICATE_P in constant_pool. gcc/testsuite/ChangeLog: * gcc.target/i386/pr114428.c: New test. --- gcc/config/i386/i386-expand.cc | 2 +- gcc/config/i386/i386-protos.h | 1 + gcc/config/i386/i386.cc | 13 +++++++++++++ gcc/testsuite/gcc.target/i386/pr114428.c | 18 ++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr114428.c diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc index 4e16aedc5c1..d96c365e144 100644 --- a/gcc/config/i386/i386-expand.cc +++ b/gcc/config/i386/i386-expand.cc @@ -588,7 +588,7 @@ ix86_expand_move (machine_mode mode, rtx operands[]) /* OP is a memref of CONST_VECTOR, return scalar constant mem if CONST_VECTOR is a vec_duplicate, else return NULL. */ -static rtx +rtx ix86_broadcast_from_constant (machine_mode mode, rtx op) { int nunits = GET_MODE_NUNITS (mode); diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h index dbc861fb1ea..90712769200 100644 --- a/gcc/config/i386/i386-protos.h +++ b/gcc/config/i386/i386-protos.h @@ -107,6 +107,7 @@ extern void ix86_expand_clear (rtx); extern void ix86_expand_move (machine_mode, rtx[]); extern void ix86_expand_vector_move (machine_mode, rtx[]); extern void ix86_expand_vector_move_misalign (machine_mode, rtx[]); +extern rtx ix86_broadcast_from_constant (machine_mode, rtx); extern rtx ix86_fixup_binary_operands (enum rtx_code, machine_mode, rtx[], bool = false); extern void ix86_fixup_binary_operands_no_copy (enum rtx_code, machine_mode, diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc index b4838b7939e..fdd9343e47a 100644 --- a/gcc/config/i386/i386.cc +++ b/gcc/config/i386/i386.cc @@ -22197,6 +22197,19 @@ ix86_rtx_costs (rtx x, machine_mode mode, int outer_code_i, int opno, return true; case MEM: + /* CONST_VECTOR_DUPLICATE_P in constant_pool is just broadcast. + or variants in ix86_vector_duplicate_simode_const. */ + + if (GET_MODE_SIZE (mode) >= 16 + && VECTOR_MODE_P (mode) + && SYMBOL_REF_P (XEXP (x, 0)) + && CONSTANT_POOL_ADDRESS_P (XEXP (x, 0)) + && ix86_broadcast_from_constant (mode, x)) + { + *total = COSTS_N_INSNS (2) + speed; + return true; + } + /* An insn that accesses memory is slightly more expensive than one that does not. */ if (speed) diff --git a/gcc/testsuite/gcc.target/i386/pr114428.c b/gcc/testsuite/gcc.target/i386/pr114428.c new file mode 100644 index 00000000000..bbbc5a080f6 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr114428.c @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-march=x86-64-v3 -mno-avx512f -O2" } */ +/* { dg-final { scan-assembler-not "vpsra[dw]" } } */ + +void +foo2 (char* __restrict a, short* b) +{ + for (int i = 0; i != 32; i++) + a[i] = b[i] >> (short)8; +} + +void +foo3 (char* __restrict a, short* b) +{ + for (int i = 0; i != 16; i++) + a[i] = b[i] >> (short)8; +} +