From patchwork Mon Oct 14 11:10:48 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Li, Pan2" X-Patchwork-Id: 1996817 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=NrGJ2WQb; 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 4XRvjf3Br5z1xvK for ; Mon, 14 Oct 2024 22:13:26 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 94CD2385AC31 for ; Mon, 14 Oct 2024 11:13:23 +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 [192.198.163.13]) by sourceware.org (Postfix) with ESMTPS id 776A73858C98 for ; Mon, 14 Oct 2024 11:12:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 776A73858C98 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 776A73858C98 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.13 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1728904366; cv=none; b=Eta2CCahpRzVl21L1BTFSdzRiBgz0Of2u0e2PtB0JcjBV/92YrZ0NiPGnPQ6XCt2CBHlS6FDv40RZnZOsk3YdHuSRVeJC9Jsp8o2tyxCTgjAtTXBFhvKD5juKsotT0QZgVUnQkymtpjsQVjYUzbA2zykhbT/5upCe5X6UztrKAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1728904366; c=relaxed/simple; bh=L+01gVg4ieQSu+M7lCy41/dyXUVuriwcoYp71Q0SN5Q=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=NszuwauKMv0IjR4/MWpyqlj+8GUxBbusNTsi1ooiwDpFIRShc7qWH9AWqiODj7MuWdETeulC4S1bT1yMsTW2eCvpZZSnT7lLZk4s0ZfFJPoKC+nYqADChOFZ1aolVvqZEzSHHXgG54kv9aRlCSV737Mbp9cXm4xy8Qdvxq5wRSY= 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=1728904356; x=1760440356; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=L+01gVg4ieQSu+M7lCy41/dyXUVuriwcoYp71Q0SN5Q=; b=NrGJ2WQbGn/vnSRg3q3T/U8K0wcppSY0Xb+u1BYLg4JS99qq1c2jgwih DwvHtNC/50mvQzdGBLsW3c0vsvfpwSCsePYEhHTbmbnvxtzYngDtK7d5x i6/VLQ3kdxwwmdzoAkFW2NIHpLEJI17W5Aoatts9vBAX1bGsQxHm0ojg/ IhMbZqp/J2hWq1ahfHkKm5uL5av0SwBS69dLDr2H3HiZvQ+L/aWHEcyaJ lE9XKFA5Fx8IHBhDtswPkf4WuIgvN5rvvViT73Q2AWEDVsZ0wsmKBBERc ItbESa/L2d5vtuZ+EazyZKp4W5x5rR7ELCV/2N7trXzYpdeRyr66f1xn+ w==; X-CSE-ConnectionGUID: k6GEy1nRQ+KMfoHotrOUJw== X-CSE-MsgGUID: IoYvKDtfQ1a7ePW0hsTRrQ== X-IronPort-AV: E=McAfee;i="6700,10204,11224"; a="31129474" X-IronPort-AV: E=Sophos;i="6.11,202,1725346800"; d="scan'208";a="31129474" Received: from orviesa001.jf.intel.com ([10.64.159.141]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Oct 2024 04:12:34 -0700 X-CSE-ConnectionGUID: yYM+kEHLQou9WvwGZPHQig== X-CSE-MsgGUID: wLehR6kvTC6uPnxbFIe1hQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,202,1725346800"; d="scan'208";a="114998485" Received: from panli.sh.intel.com ([10.239.154.73]) by orviesa001.jf.intel.com with ESMTP; 14 Oct 2024 04:12:31 -0700 From: pan2.li@intel.com To: gcc-patches@gcc.gnu.org Cc: richard.guenther@gmail.com, Tamar.Christina@arm.com, juzhe.zhong@rivai.ai, kito.cheng@gmail.com, jeffreyalaw@gmail.com, rdapp.gcc@gmail.com, Pan Li Subject: [PATCH 01/11] Match: Support form 1 for vector signed integer SAT_TRUNC Date: Mon, 14 Oct 2024 19:10:48 +0800 Message-ID: <20241014111058.1033886-1-pan2.li@intel.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Spam-Status: No, score=-11.5 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 From: Pan Li This patch would like to support the form 1 of the vector signed integer SAT_TRUNC. Aka below example: Form 1: #define DEF_VEC_SAT_S_TRUNC_FMT_1(NT, WT, NT_MIN, NT_MAX) \ void __attribute__((noinline)) \ vec_sat_s_trunc_##NT##_##WT##_fmt_1 (NT *out, WT *in, unsigned limit) \ { \ unsigned i; \ for (i = 0; i < limit; i++) \ { \ WT x = in[i]; \ NT trunc = (NT)x; \ out[i] = (WT)NT_MIN <= x && x <= (WT)NT_MAX \ ? trunc \ : x < 0 ? NT_MIN : NT_MAX; \ } \ } DEF_VEC_SAT_S_TRUNC_FMT_1(int32_t, int64_t, INT32_MIN, INT32_MAX) Before this patch: 48 │ _87 = .SELECT_VL (ivtmp_85, POLY_INT_CST [2, 2]); 49 │ ivtmp_64 = _87 * 8; 50 │ vect_x_14.10_67 = .MASK_LEN_LOAD (vectp_in.8_65, 64B, { -1, ... }, _87, 0); 51 │ vect_trunc_15.21_78 = (vector([2,2]) int) vect_x_14.10_67; 52 │ _61 = VIEW_CONVERT_EXPR(vect_x_14.10_67); 53 │ _32 = _61 >> 63; 54 │ vect_patt_52.16_73 = (vector([2,2]) int) _32; 55 │ vect__46.17_74 = VIEW_CONVERT_EXPR(vect_patt_52.16_73); 56 │ vect__47.18_75 = -vect__46.17_74; 57 │ vect__21.19_76 = VIEW_CONVERT_EXPR(vect__47.18_75); 58 │ vect_x.11_68 = VIEW_CONVERT_EXPR(vect_x_14.10_67); 59 │ vect__5.12_69 = vect_x.11_68 + { 2147483648, ... }; 60 │ mask__34.13_70 = vect__5.12_69 > { 4294967295, ... }; 61 │ _25 = .COND_XOR (mask__34.13_70, vect__21.19_76, { 2147483647, ... }, vect_trunc_15.21_78); 62 │ ivtmp_80 = _87 * 4; 63 │ .MASK_LEN_STORE (vectp_out.23_81, 32B, { -1, ... }, _87, 0, _25); 64 │ vectp_in.8_66 = vectp_in.8_65 + ivtmp_64; 65 │ vectp_out.23_82 = vectp_out.23_81 + ivtmp_80; 66 │ ivtmp_86 = ivtmp_85 - _87; After this patch: 38 │ _77 = .SELECT_VL (ivtmp_75, POLY_INT_CST [2, 2]); 39 │ ivtmp_65 = _77 * 8; 40 │ vect_x_14.10_68 = .MASK_LEN_LOAD (vectp_in.8_66, 64B, { -1, ... }, _77, 0); 41 │ vect_patt_53.11_69 = .SAT_TRUNC (vect_x_14.10_68); 42 │ ivtmp_70 = _77 * 4; 43 │ .MASK_LEN_STORE (vectp_out.12_71, 32B, { -1, ... }, _77, 0, vect_patt_53.11_69); 44 │ vectp_in.8_67 = vectp_in.8_66 + ivtmp_65; 45 │ vectp_out.12_72 = vectp_out.12_71 + ivtmp_70; 46 │ ivtmp_76 = ivtmp_75 - _77; The below test suites are passed for this patch. * The rv64gcv fully regression test. * The x86 bootstrap test. * The x86 fully regression test. gcc/ChangeLog: * match.pd: Refine matching for vector signed SAT_TRUNC form 1. Signed-off-by: Pan Li --- gcc/match.pd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/gcc/match.pd b/gcc/match.pd index 2ab76f9d055..36195d0c920 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3493,7 +3493,9 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) SAT_S_TRUNC(X) = (unsigned)X + NT_MAX + 1 > Unsigned_MAX ? (NT)X. */ (match (signed_integer_sat_trunc @0) (cond^ (gt (plus:c (convert@4 @0) INTEGER_CST@1) INTEGER_CST@2) - (bit_xor:c (negate (convert (lt @0 integer_zerop))) INTEGER_CST@3) + (bit_xor:c (nop_convert? + (negate (nop_convert? (convert (lt @0 integer_zerop))))) + INTEGER_CST@3) (convert @0)) (if (INTEGRAL_TYPE_P (type) && !TYPE_UNSIGNED (type) && !TYPE_UNSIGNED (TREE_TYPE (@0)) && TYPE_UNSIGNED (TREE_TYPE (@4)))