| Message ID | 20260902145254.77832-1-ktkachov@nvidia.com |
|---|---|
| Headers |
Return-Path: <gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org> X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id ACE3C4BA79BB for <patchwork@sourceware.org>; Wed, 2 Sep 2026 14:54:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org ACE3C4BA79BB Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=uoO0zC+I X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012059.outbound.protection.outlook.com [52.101.53.59]) by sourceware.org (Postfix) with ESMTPS id 1454C4BA2E27 for <gcc-patches@gcc.gnu.org>; Wed, 2 Sep 2026 14:53:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1454C4BA2E27 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nvidia.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1454C4BA2E27 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=52.101.53.59 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1788360816; cv=pass; b=v/hjGhSsinOtNRvGPdm56LrsDpftNn6ZZOCcbKPkJ4/SErRoSrWIX6uVfrusUXi0Wi3RVM3NOBiBoJIaosLWIbbO5pP2p1+GTJ1FDXv+BPsXJl9rit8dmoXXqpJL17IvpmcB6H6sEcUGwC6SJvJYQFnGoaNBdpO3z5cORzz4Sic= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1788360816; c=relaxed/simple; bh=4Jm58ouAO9YkrQw3Xbe3RUyqogNqPKDG7ChWj4g/OG0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=bhZnbwTJ1LrUaDsF/YHwmzaLEoSJJMdFPMTrN/yGh6K0L5Y+MteYpcbfjP/+XPt0/A3fr/TfYj6ixvhqxU5vTgxKxfPOdGUE5OCjrwOLoz0qGLk5RsmelguksPO+PyUOEIfZ5HMi+P/8eCHxoBvNYpg+ojvXBWet+jDcZ9qopmQ= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=uoO0zC+I DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1454C4BA2E27 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eWTeLKvNwL5U3opBGuss5Sy80LfVcKExQGG+PIl+OJ/+qK8z9fo0aX/a+xqPeg7WoQ+dnKD1Q7V8D1OsElXY0FTjTUbAjfveeMgNuCJwdnlY//8946AtoEtHlznmz7yxDTLZwBXPsm8MaZ6ocINB1N/S4S0xhyiZWmSIy4MnnMP9jGoYZnuHZ0JK3bCzsGFWycccoNAzowNjkP7gfUA7JnoaH91LpfozztT4f7GepJKAME2dsvBFb0ftEKXxDKC6T3PjkoOI4g402ZLpZ38o4TobcH36pjrhe1z66KUz65xWQGR8cR/nniaqF0laTlAmqgJK64T+VTkDhqZJ9ToZZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hBBvG1ZTfx8WOkMt6xuRzx6YiOXpSQZ9z2TLs3+E3Fg=; b=EctdeHzk7hZipH0eZgQped4prXr85k3S87cZfKqbFXVMxjTucDOyG4HFpn74odoSeUNE6b+Ylktjlmz1AVTlUviClys9N6gOQ0yR1JdDPqTzUbjWNUwuKjiJA3033dIXRSIXx4TvdWPZOCJtv3/Sk45Z+CnmG6P49Ql9d9/Q5ZztZQCrukGyRHW5bHkHlm0aclcrc/xCeCty931wCPg5JAQgqaWVFHcHv+QzrWlZ1LH7cdQSPrW5QL9WpI53/GMURXTgFBkW7iJj0boRor3Zdks7OQbJmzuwKg8ljzqMN4pUfEK4wmcrj8L6K11mm4gXaR6UEYRt20/5HmkPycOdag== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hBBvG1ZTfx8WOkMt6xuRzx6YiOXpSQZ9z2TLs3+E3Fg=; b=uoO0zC+I8wucHyp4HO47FmHQMnpXs11X1NVFlN2aHzvE90CEM0JLcmR8ALbvCo9se+ytq2dAAOqcx+bD3No+uQkFzay3ipogUhHILh+r8LtzoGyl8ia8QRXJz49UWf3fkylHsiKlMjzAUuLnMtVkVBsghL6GO0BgZ5zLEaiWsmtEmMIPpL5MDNhtAAnSAkiFmt0FltGNgTgk7a2pvwYeccklBrTHTK4NrkxdjZ6i0D5MOeFbrffHX2nE3IHQmzzdqfiBPDV6MHdcjpr1M770ITO9ySA16+opzIr+5ZkaUg/cskLq2eJGb7dm9wUbEkfrI1W8ZEV5PKk28/hJTZ0Q0g== Received: from SA0PR11CA0193.namprd11.prod.outlook.com (2603:10b6:806:1bc::18) by SN7PR12MB7809.namprd12.prod.outlook.com (2603:10b6:806:34e::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.13; Wed, 2 Sep 2026 14:53:32 +0000 Received: from SA2PEPF00001504.namprd04.prod.outlook.com (2603:10b6:806:1bc:cafe::2) by SA0PR11CA0193.outlook.office365.com (2603:10b6:806:1bc::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.382.11 via Frontend Transport; Wed, 2 Sep 2026 14:53:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by SA2PEPF00001504.mail.protection.outlook.com (10.167.242.36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.382.8 via Frontend Transport; Wed, 2 Sep 2026 14:53:32 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.46; Wed, 2 Sep 2026 07:53:06 -0700 Received: from ktkachov-mlt.nvidia.com (10.126.230.37) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.46; Wed, 2 Sep 2026 07:53:05 -0700 From: <ktkachov@nvidia.com> To: <gcc-patches@gcc.gnu.org> CC: Kyrylo Tkachov <ktkachov@nvidia.com> Subject: [PATCH 00/13] Saturating arithmetic matching improvements Date: Wed, 2 Sep 2026 16:52:40 +0200 Message-ID: <20260902145254.77832-1-ktkachov@nvidia.com> X-Mailer: git-send-email 2.50.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail202.nvidia.com (10.129.68.7) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA2PEPF00001504:EE_|SN7PR12MB7809:EE_ X-MS-Office365-Filtering-Correlation-Id: a842beb4-d78b-4bbb-7cca-08df0901f522 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|82310400026|36860700016|1800799024|23010399003|376014|18002099003|56012099006|10067099003|11063799006; X-Microsoft-Antispam-Message-Info: 9JT65+PSs/ysIr/d0hRukWiZQG5dNezi8StmxfFMwCbUBJGt+8cfdaifmxuM/yeBwiS7OWf4YQ3+eLS38mEHznA5uRy/FB1gGDlWS5+wR0GD2i8eA39xLdrk8p8OkWRQtQ/KAcW5VyrjSNjbNPPBkJdwwzG4w4MzbRWL+n1qLdPXSm3YcD/PBjaL9ZoKbakATauy4qiJG9vAJnQGFJLajAsGq3H49MxXAAnZpet4m131B02cdHbb7p+hoWBWs863tGI0amZWklO/2yLZb4wb+vIGw/InmP1XfCbuH4ftPPcblEAtYMWfvo7vcfx/EY796kBdCgqYkVnZhANXzTH0WhLCUqi3HFRw/PKlbjkAAI8ICZUiWiFqRcOFH+IZqY69NHGMhJFfouPP316NdejDEOhMjgO4DX8MdS577qy64QFJnZlJrHYPadcCD0VzMAFea+8twUHs0y38GRTQgGDWWw8WBexqFb1/iUAXA11W5orgOtiuqJNJ61x1/WlxnYY3Dl2quOCYmgk9NmPGgiSUjxAmPzXoYJYtSacIvthZSgs86j+aa3oVIVKLv03IjCZofbX9a79rt1j2CoKsz02D+mhHfChmsIhRpe9Vx84RWfkoEt91hl1eFIA/xDYGOyiG0u3qRYr1xGYLMr2kAHyY7bEnxAgdqQJEuh3BZ3b3HLYZmKw4+3wl76cCh8KbPMD98Bx8QymVk3VEJR/mt5xzew== X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230040)(82310400026)(36860700016)(1800799024)(23010399003)(376014)(18002099003)(56012099006)(10067099003)(11063799006); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NgS7X1ptmYV/jRrhoilhQhsnkAnEe+hgwDxPnAa3Cri6M/3Dd8xwXEH1m+Ii/EqUXmxlguCIZma5kFhf6nO01gfp1y1eiDsLmD6kzaA/2bQYz7BWCVcTASt3cnBNjVNGEUyV692uPH5Kx06ZSXdfhy76dxWGDdnrWcBaA0eYwmH+LSEUwLkDG0OgRph6JI42nyDP/678Ojh1co7hEmOFfplHlUVKpfW3TtPada0fFAqqtTE59/O8LH/2OJfBqZJspfhZCMgUeL1JN/um7GcinrR2caM5izGzpsAHtqdbgOW0VdNvLr7M0EcoMPqueijH3mWAWGYDUOnPKZcw+et86ExTmw2fE7wm3NBZMRUrTMhzibrsXjI/NZVNY8d1DcnFrGPAlyTpWuqSRXTOV0YhClVbcsg8sXsnHsk2xy/yW6HNJ+tvGuWRwGCpUu2j2C22 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2026 14:53:32.0789 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: a842beb4-d78b-4bbb-7cca-08df0901f522 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SA2PEPF00001504.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR12MB7809 X-Spam-Status: No, score=-1.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_SHORT, LOCAL_AUTHENTICATION_FAIL_SPF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP shortcircuit=no autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list <gcc-patches.gcc.gnu.org> List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe> List-Archive: <https://gcc.gnu.org/pipermail/gcc-patches/> List-Post: <mailto:gcc-patches@gcc.gnu.org> List-Help: <mailto:gcc-patches-request@gcc.gnu.org?subject=help> List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org |
| Series |
Saturating arithmetic matching improvements
|
|
Message
Kyrylo Tkachov
Sept. 2, 2026, 2:52 p.m. UTC
From: Kyrylo Tkachov <ktkachov@nvidia.com>
Hi all,
This series teaches GCC to recognise some more saturating arithmetic patterns,
primarily through match-sat-alu.pd and match.pd matchers.
These patterns were identified in a number of OSS workloads like video encoding
with the help of AI agents, though the patches themselves are manually written.
Bootstrapped and tested on aarch64-none-linux-gnu.
Ok for trunk?
Thanks,
Kyrill
Kyrylo Tkachov (13):
match-sat-alu.pd: Allow wider ranges for signed saturating truncation
match-sat-alu.pd: Recognize X - MIN (X, Y) as saturating subtraction
match-sat-alu.pd: Recognize signed saturation clamps
match-sat-alu.pd: Recognize borrow-test saturating subtraction
match-sat-alu.pd: Recognize more unsigned saturating subtraction forms
match-sat-alu.pd: Recognize complement tests for unsigned saturating
addition
match-sat-alu.pd: Recognize X + MIN (~X, Y) as unsigned saturating
addition
match-sat-alu.pd: Recognize strict widened unsigned saturation clamps
match-sat-alu.pd: Recognize signed saturating truncation after a shift
match-sat-alu.pd: Recognize unsigned constant-clamp truncation
match-sat-alu.pd: Recognize signed constant-clamp truncation
match-sat-alu.pd: Recognize complement masks for unsigned saturating
truncation
match.pd: Narrow promoted saturating addition and subtraction
gcc/match-sat-alu.pd | 341 ++++++++++++++++--
gcc/match.pd | 37 ++
gcc/testsuite/gcc.dg/sat-trunc-signed-cmp-2.c | 42 +++
.../gcc.dg/vect/vect-sat-trunc-clamp-1.c | 121 +++++++
.../gcc.dg/vect/vect-sat-trunc-clamp-2.c | 126 +++++++
.../gcc.dg/vect/vect-sat-trunc-complement-1.c | 70 ++++
.../vect/vect-sat-trunc-range-precision-1.c | 122 +++++++
.../vect/vect-sat-trunc-shift-sign-source-1.c | 221 ++++++++++++
.../gcc.target/aarch64/sat_s_clamp-1.c | 78 ++++
.../gcc.target/aarch64/sat_s_clamp-2.c | 43 +++
.../gcc.target/aarch64/sat_s_val_ashr-1.c | 30 ++
.../gcc.target/aarch64/sat_u_add_min_not-1.c | 18 +
.../gcc.target/aarch64/sat_u_add_not_cmp-1.c | 30 ++
.../gcc.target/aarch64/sat_u_add_not_cmp-2.c | 17 +
.../gcc.target/aarch64/sat_u_add_widen_lt-1.c | 32 ++
.../gcc.target/aarch64/sat_u_promoted-1.c | 29 ++
.../gcc.target/aarch64/sat_u_promoted-2.c | 32 ++
.../gcc.target/aarch64/sat_u_sub_borrow-1.c | 22 ++
.../gcc.target/aarch64/sat_u_sub_minmax-1.c | 18 +
.../gcc.target/aarch64/sat_u_sub_minmax-2.c | 32 ++
.../gcc.target/aarch64/sat_u_sub_minmax-3.c | 27 ++
.../gcc.target/aarch64/sat_u_sub_swapped-1.c | 27 ++
.../aarch64/saturating_arithmetic_1.c | 2 +-
.../aarch64/sve/saturating_arithmetic_1.c | 2 +-
.../aarch64/sve/saturating_arithmetic_3.c | 2 +-
.../aarch64/sve/saturating_arithmetic_4.c | 2 +-
.../vect-sat-trunc-clamp-inner-use-1.c | 22 ++
.../vect-sat-trunc-clamp-multi-use-1.c | 21 ++
.../aarch64/vect-sat-trunc-clamp-s-1.c | 7 +
.../vect-sat-trunc-clamp-s-negative-1.c | 30 ++
.../aarch64/vect-sat-trunc-clamp-u-1.c | 7 +
.../vect-sat-trunc-clamp-u-negative-1.c | 30 ++
.../aarch64/vect-sat-trunc-complement-1.c | 30 ++
.../vect-sat-trunc-range-precision-1.c | 7 +
...ect-sat-trunc-range-precision-negative-1.c | 24 ++
.../vect-sat-trunc-shift-sign-source-1.c | 7 +
...t-sat-trunc-shift-sign-source-negative-1.c | 122 +++++++
gcc/tree-ssa-math-opts.cc | 17 +-
38 files changed, 1807 insertions(+), 40 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/sat-trunc-signed-cmp-2.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-clamp-1.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-clamp-2.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-complement-1.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-range-precision-1.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-shift-sign-source-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_s_clamp-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_s_clamp-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_s_val_ashr-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_add_min_not-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_add_not_cmp-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_add_not_cmp-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_add_widen_lt-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_promoted-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_promoted-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_borrow-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_minmax-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_minmax-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_minmax-3.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_swapped-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-inner-use-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-multi-use-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-s-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-s-negative-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-u-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-u-negative-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-complement-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-range-precision-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-range-precision-negative-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-shift-sign-source-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-shift-sign-source-negative-1.c
Comments
From: Kyrylo Tkachov <ktkachov@nvidia.com>
Hi all,
This series teaches GCC to recognise some more saturating arithmetic patterns,
primarily through match-sat-alu.pd and match.pd matchers.
These patterns were identified in a number of OSS workloads like video encoding
with the help of AI agents, though the patches themselves are manually written.
Bootstrapped and tested on aarch64-none-linux-gnu.
Ok for trunk?
Thanks,
Kyrill
Kyrylo Tkachov (13):
match-sat-alu.pd: Allow wider ranges for signed saturating truncation
match-sat-alu.pd: Recognize X - MIN (X, Y) as saturating subtraction
match-sat-alu.pd: Recognize signed saturation clamps
match-sat-alu.pd: Recognize borrow-test saturating subtraction
match-sat-alu.pd: Recognize more unsigned saturating subtraction forms
match-sat-alu.pd: Recognize complement tests for unsigned saturating
addition
match-sat-alu.pd: Recognize X + MIN (~X, Y) as unsigned saturating
addition
match-sat-alu.pd: Recognize strict widened unsigned saturation clamps
match-sat-alu.pd: Recognize signed saturating truncation after a shift
match-sat-alu.pd: Recognize unsigned constant-clamp truncation
match-sat-alu.pd: Recognize signed constant-clamp truncation
match-sat-alu.pd: Recognize complement masks for unsigned saturating
truncation
match.pd: Narrow promoted saturating addition and subtraction
gcc/match-sat-alu.pd | 341 ++++++++++++++++--
gcc/match.pd | 37 ++
gcc/testsuite/gcc.dg/sat-trunc-signed-cmp-2.c | 42 +++
.../gcc.dg/vect/vect-sat-trunc-clamp-1.c | 121 +++++++
.../gcc.dg/vect/vect-sat-trunc-clamp-2.c | 126 +++++++
.../gcc.dg/vect/vect-sat-trunc-complement-1.c | 70 ++++
.../vect/vect-sat-trunc-range-precision-1.c | 122 +++++++
.../vect/vect-sat-trunc-shift-sign-source-1.c | 221 ++++++++++++
.../gcc.target/aarch64/sat_s_clamp-1.c | 78 ++++
.../gcc.target/aarch64/sat_s_clamp-2.c | 43 +++
.../gcc.target/aarch64/sat_s_val_ashr-1.c | 30 ++
.../gcc.target/aarch64/sat_u_add_min_not-1.c | 18 +
.../gcc.target/aarch64/sat_u_add_not_cmp-1.c | 30 ++
.../gcc.target/aarch64/sat_u_add_not_cmp-2.c | 17 +
.../gcc.target/aarch64/sat_u_add_widen_lt-1.c | 32 ++
.../gcc.target/aarch64/sat_u_promoted-1.c | 29 ++
.../gcc.target/aarch64/sat_u_promoted-2.c | 32 ++
.../gcc.target/aarch64/sat_u_sub_borrow-1.c | 22 ++
.../gcc.target/aarch64/sat_u_sub_minmax-1.c | 18 +
.../gcc.target/aarch64/sat_u_sub_minmax-2.c | 32 ++
.../gcc.target/aarch64/sat_u_sub_minmax-3.c | 27 ++
.../gcc.target/aarch64/sat_u_sub_swapped-1.c | 27 ++
.../aarch64/saturating_arithmetic_1.c | 2 +-
.../aarch64/sve/saturating_arithmetic_1.c | 2 +-
.../aarch64/sve/saturating_arithmetic_3.c | 2 +-
.../aarch64/sve/saturating_arithmetic_4.c | 2 +-
.../vect-sat-trunc-clamp-inner-use-1.c | 22 ++
.../vect-sat-trunc-clamp-multi-use-1.c | 21 ++
.../aarch64/vect-sat-trunc-clamp-s-1.c | 7 +
.../vect-sat-trunc-clamp-s-negative-1.c | 30 ++
.../aarch64/vect-sat-trunc-clamp-u-1.c | 7 +
.../vect-sat-trunc-clamp-u-negative-1.c | 30 ++
.../aarch64/vect-sat-trunc-complement-1.c | 30 ++
.../vect-sat-trunc-range-precision-1.c | 7 +
...ect-sat-trunc-range-precision-negative-1.c | 24 ++
.../vect-sat-trunc-shift-sign-source-1.c | 7 +
...t-sat-trunc-shift-sign-source-negative-1.c | 122 +++++++
gcc/tree-ssa-math-opts.cc | 17 +-
38 files changed, 1807 insertions(+), 40 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/sat-trunc-signed-cmp-2.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-clamp-1.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-clamp-2.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-complement-1.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-range-precision-1.c
create mode 100644 gcc/testsuite/gcc.dg/vect/vect-sat-trunc-shift-sign-source-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_s_clamp-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_s_clamp-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_s_val_ashr-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_add_min_not-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_add_not_cmp-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_add_not_cmp-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_add_widen_lt-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_promoted-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_promoted-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_borrow-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_minmax-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_minmax-2.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_minmax-3.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/sat_u_sub_swapped-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-inner-use-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-multi-use-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-s-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-s-negative-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-u-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-clamp-u-negative-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-complement-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-range-precision-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-range-precision-negative-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-shift-sign-source-1.c
create mode 100644 gcc/testsuite/gcc.target/aarch64/vect-sat-trunc-shift-sign-source-negative-1.c