From patchwork Wed Oct 9 14:38:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Li, Pan2" X-Patchwork-Id: 1994907 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=Funl7zDq; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; 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 [8.43.85.97]) (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 4XNwXx2sbcz1xsc for ; Thu, 10 Oct 2024 01:40:32 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4393F38650D4 for ; Wed, 9 Oct 2024 14:40:30 +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.18]) by sourceware.org (Postfix) with ESMTPS id BF2D4385DDD7 for ; Wed, 9 Oct 2024 14:40:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BF2D4385DDD7 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 BF2D4385DDD7 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=192.198.163.18 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1728484811; cv=none; b=vOthvLOZxD4LxAknBDRZZ6RtCFQC9hDj/tGCV92OYtBMZoFA0TtoQ4X2wcGfjTXJ8kMBjdh2T0ui4Ss6ObZAK05OP5CKhx0o55CgpahIaiAO2u4gvHkJMt9sUraPGJN1eEWlPefNZ9bC1sgemLnJBE4WXoNc/m9LdihwxssSCAM= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1728484811; c=relaxed/simple; bh=0m+DIRmMEqH3WAyrtJ7fV2KKR2VL8ukmjcUoCEnzwBw=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=cyZEV075cjJTreWVkzV+z2ZQMZhUoPUbfKV/HmV4PWl07HFbDoLATK5jE1d1FyW2qWTI2IsxR7mCIgdLTT48TmKSuX+BqndsDWBy4CNBbuX06pANO3sGbFuE9eslKfY7UG1wKqHA88+GEqVOBlPv71pynb/GqZZSN+h55ekuI9w= 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=1728484809; x=1760020809; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=0m+DIRmMEqH3WAyrtJ7fV2KKR2VL8ukmjcUoCEnzwBw=; b=Funl7zDqwpCLDNgDwCcesOv8dsSBbs8oISSPhIEGVV05usXktQhPqsMp ous3iZyGuI6UMYQ0Pvr10a+PC39c4lZBfQ7RtHJQzHxQ1ao0yN5X42bns qtNGBO5nVOzgiiXtnEMRxvptOzBY9VC7DCpMalShbYlTEPnzbi3AJ809n bFR+4aGJtO/UiRJYFsVwmkdJLxQ5HXrArm0meo05xV1Sk0PnIRcak+TBR GdXpJqRXMTm4Z50nsuhOCFtf6jMtbE687kzro0yTTKgaMJ+wssjb/30e2 fr/eFFFJ81EOU8AvoghN7BhCiY+ZQwsvnIuK91Zq1d9zKUbEPinaaLkpA A==; X-CSE-ConnectionGUID: LRwZ8yeGTzatHaCe+KgulA== X-CSE-MsgGUID: nzANFeghRziYgwpQsqF8pA== X-IronPort-AV: E=McAfee;i="6700,10204,11220"; a="27235814" X-IronPort-AV: E=Sophos;i="6.11,190,1725346800"; d="scan'208";a="27235814" Received: from orviesa003.jf.intel.com ([10.64.159.143]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Oct 2024 07:40:07 -0700 X-CSE-ConnectionGUID: 4MNK+pJPR8iJhdy/fYx1rQ== X-CSE-MsgGUID: x7Btbp5mS7y/6MCzNT/wlw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.11,190,1725346800"; d="scan'208";a="81112630" Received: from panli.sh.intel.com ([10.239.154.73]) by orviesa003.jf.intel.com with ESMTP; 09 Oct 2024 07:40:05 -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 v1 1/2] Match: Support form 3 for scalar signed integer SAT_TRUNC Date: Wed, 9 Oct 2024 22:38:36 +0800 Message-ID: <20241009143837.1044138-1-pan2.li@intel.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Spam-Status: No, score=-11.7 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 3 of the scalar signed integer SAT_TRUNC. Aka below example: Form 3: #define DEF_SAT_S_TRUNC_FMT_3(NT, WT, NT_MIN, NT_MAX) \ NT __attribute__((noinline)) \ sat_s_trunc_##WT##_to_##NT##_fmt_3 (WT x) \ { \ NT trunc = (NT)x; \ return (WT)NT_MIN < x && x <= (WT)NT_MAX \ ? trunc \ : x < 0 ? NT_MIN : NT_MAX; \ } DEF_SAT_S_TRUNC_FMT_3(int8_t, int16_t, INT8_MIN, INT8_MAX) Before this patch: 4 │ __attribute__((noinline)) 5 │ int8_t sat_s_sub_int8_t_fmt_3 (int8_t x, int8_t y) 6 │ { 7 │ signed char _1; 8 │ signed char _2; 9 │ int8_t _3; 10 │ __complex__ signed char _6; 11 │ _Bool _8; 12 │ signed char _9; 13 │ signed char _10; 14 │ signed char _11; 15 │ 16 │ ;; basic block 2, loop depth 0 17 │ ;; pred: ENTRY 18 │ _6 = .SUB_OVERFLOW (x_4(D), y_5(D)); 19 │ _2 = IMAGPART_EXPR <_6>; 20 │ if (_2 != 0) 21 │ goto ; [50.00%] 22 │ else 23 │ goto ; [50.00%] 24 │ ;; succ: 4 25 │ ;; 3 26 │ 27 │ ;; basic block 3, loop depth 0 28 │ ;; pred: 2 29 │ _1 = REALPART_EXPR <_6>; 30 │ goto ; [100.00%] 31 │ ;; succ: 5 32 │ 33 │ ;; basic block 4, loop depth 0 34 │ ;; pred: 2 35 │ _8 = x_4(D) < 0; 36 │ _9 = (signed char) _8; 37 │ _10 = -_9; 38 │ _11 = _10 ^ 127; 39 │ ;; succ: 5 40 │ 41 │ ;; basic block 5, loop depth 0 42 │ ;; pred: 3 43 │ ;; 4 44 │ # _3 = PHI <_1(3), _11(4)> 45 │ return _3; 46 │ ;; succ: EXIT 47 │ 48 │ } After this patch: 4 │ __attribute__((noinline)) 5 │ int8_t sat_s_trunc_int16_t_to_int8_t_fmt_3 (int16_t x) 6 │ { 7 │ int8_t _3; 8 │ 9 │ ;; basic block 2, loop depth 0 10 │ ;; pred: ENTRY 11 │ _3 = .SAT_TRUNC (x_4(D)); [tail call] 12 │ return _3; 13 │ ;; succ: EXIT 14 │ 15 │ } 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: Add case 3 matching pattern for signed SAT_TRUNC. Signed-off-by: Pan Li --- gcc/match.pd | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gcc/match.pd b/gcc/match.pd index 70fdd10926f..5e20651c8ce 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -3478,6 +3478,8 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) wide_int limit_0 = wi::mask (otype_prec, false, itype_prec); // Aka 255 wide_int limit_1 = wi::uhwi ((HOST_WIDE_INT_1U << otype_prec) - 3, itype_prec); // Aka 253 + wide_int limit_2 = wi::uhwi ((HOST_WIDE_INT_1U << otype_prec) - 2, + itype_prec); // Aka 254 wide_int otype_max = wi::mask (otype_prec - 1, false, otype_prec); wide_int itype_max = wi::mask (otype_prec - 1, false, itype_prec); wide_int int_cst_1 = wi::to_wide (@1); @@ -3485,6 +3487,7 @@ DEFINE_INT_AND_FLOAT_ROUND_FN (RINT) wide_int int_cst_3 = wi::to_wide (@3); } (if (((wi::eq_p (int_cst_1, offset) && wi::eq_p (int_cst_2, limit_0)) + || (wi::eq_p (int_cst_1, itype_max) && wi::eq_p (int_cst_2, limit_2)) || (wi::eq_p (int_cst_1, itype_max) && wi::eq_p (int_cst_2, limit_1))) && wi::eq_p (int_cst_3, otype_max))))))