From patchwork Tue Jul 7 15:09:53 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pengfei Li X-Patchwork-Id: 138666 Return-Path: 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 468F74BA23EB for ; Tue, 7 Jul 2026 15:12:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 468F74BA23EB Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=g+3/AZsS; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=g+3/AZsS X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010026.outbound.protection.outlook.com [52.101.84.26]) by sourceware.org (Postfix) with ESMTPS id CC3B24BA23C4 for ; Tue, 7 Jul 2026 15:11:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CC3B24BA23C4 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org CC3B24BA23C4 Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=52.101.84.26 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1783437092; cv=pass; b=AyPueVhbXNOponsizZQQ3c1q0BW0vPWNjN/tdUP86viuqqDyqP4uNMGnqcb3YbSpgQIFOmVwfpNzDt7bgZQp24LxkdyUd++UMzgRt/7aYgu4ViuUSdhn/OPKEIz40Yr5rnRmfIU1BuZWr8nfkkbfPuscCboRDHAnXG69wC71G4c= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1783437092; c=relaxed/simple; bh=Y3Pftwc9qTfsDxmFkrsS0pHWkDQib6jxfNDcKsST4Do=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=EpPsvElyN8+Wp5q7M6QGj0mwIudTTsfjhCsQTmQf/p9inxztbAOAXuLB+VeTnlwOF3CHBXU/+qa4xW5JLA2ns9F9nfOMePc9xzp8yvJxrRG+YH57dtuBsfw5J5IShtslXJPH4YJwSlQbbYQsrpopaAzSacur72DUZRtrx+ZZVI4= ARC-Authentication-Results: i=3; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=g+3/AZsS; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.a=rsa-sha256 header.s=selector1 header.b=g+3/AZsS DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CC3B24BA23C4 ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=sVYEcQndsKaDrXyh43bv2EacYMuwpRP4kBDlM4CqS4lbnBkkzOZs+fFMu2yzqtzCveDx0zI1g6zGj5z5v11XgTzJ1TJla7OJ66glwPr3ZlYZtvGTzCOLmfPfbuoUyjaOYMubGMXxOdx4FrQlL2sNrU+BdFkBV0TFdJSDws2FinekSyGgfeg0xlOT7gA+mcaCXn8YX+ugVaOjfHDG2OftbQ2S772OxpAHwFqTURotMKQ0QJ+yYNKKNdhwFY170smB6fyjVsZWYxqM6xWDRwb8lkyzIEzEN+IWkiX5g/ASx2MvS3H5Olo7Zm8fLKjPeb2zzNo+1bfk3oQVsoYyCShGGA== ARC-Message-Signature: i=2; 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=zqIAslCHmvSbTyvYo5z3BrY4LjVHaiUeMWLIvAQsmbA=; b=YUSDCq60kRSfJjX52pTBNd/Rdf+Iw98RNCXDk/2lO5D8++IzjxRSfuKCqN1eQrbry/pNPFxDVXCh9fU3Iqp20XXFdqcnLCGz5F/yaCmsjg/55IXS+J/iiNJNpcVntdZEYEFDgUA3mjo+YVbnS5PYrs5qfQ5IxaZcfNczRtRX5eH/46x0oRJ0E+AqMmvEw0jt2o9bxMmG0Hi5QHHrYfszqpOp8694nOSTpPPH7eutD25Csa2R4vCoJAeOogG39vNh3IV1at/NC6TPNMCIxrqeY9pTxQR0mUXlfhuDP9ldLotD+S0XtcjpCJM9GJ7K7aKDgj4THHvnksFcgNVmAKvwMA== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zqIAslCHmvSbTyvYo5z3BrY4LjVHaiUeMWLIvAQsmbA=; b=g+3/AZsSaw38dlHxyS38J5osPPNJpfnoT5T8kn71lNY6Y7/INXO/1Au2KnAIhOgfbGGGZh8kKjTWWXXipAhLzBi+XyqppCDzj3c6uaH52szC0AXLWZxtQeSLuOzNjE/MOMpnrJ/e7pOEluNYC2YJ4kmkis5IQ7KRJwsVZvAmZTY= Received: from DB9PR05CA0023.eurprd05.prod.outlook.com (2603:10a6:10:1da::28) by PAVPR08MB9329.eurprd08.prod.outlook.com (2603:10a6:102:305::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.10; Tue, 7 Jul 2026 15:11:27 +0000 Received: from DU2PEPF00028CFD.eurprd03.prod.outlook.com (2603:10a6:10:1da:cafe::89) by DB9PR05CA0023.outlook.office365.com (2603:10a6:10:1da::28) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.181.13 via Frontend Transport; Tue, 7 Jul 2026 15:11:27 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DU2PEPF00028CFD.mail.protection.outlook.com (10.167.242.181) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Tue, 7 Jul 2026 15:11:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=DcatgQJoURPK69xx+d0WPoNdzTffblB/ZvSni5hkSNuFtXZfA3R6IyPhz2OC/UG6cQudlMyEHp2/nSZgfVEiiosd8ElkDhwvNSzFthlYXf+If6OUxpE9B9GY0Le1LLad7eSP42YlbnKKpzXnpmoFL9uDR8DGwl7A/U9cDpP6HSPTEYIvEuAyRrP5/rNAOM3+oL8WRVQ9ToyH12kISiYE3E7NMp5wKNzFwEHV8iOcPVrWPguypf28A1cpGrFCLS8Yjf6ais6FVRpNgEvMtJPXX/NgCP31gqvW/lbJh9e/EQUR9cdMNNTH8QTRjKITeb+RObCK7nJae4oLACV9KYDOLw== 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=zqIAslCHmvSbTyvYo5z3BrY4LjVHaiUeMWLIvAQsmbA=; b=AE03kOHqEO9DhTG1S59L2JFRlpFfELFokEzc3p47rPjaLXwHqIwUxQHOVJlPLib+opMdFA0zTdB3Iicp3UDSCL+jSDTSjEfHFjvuvKdiN77KyGDHShA0QhEGiwQ0UxTzLWTBrTXhABaoq9glX38YqVPFQ8BRAd8kx7gHc2iYS9FDQF4PnyRd2Jd+fHLrIIX4L9Cz/QkbB6/YB3TWTBHY6/gS+pBsFQBfYduYEjw12uOE09a7ObPnKqVj9GLGlmNn2o9r6UjvcvSH2ClywpCVL/1J8iHENE1j9IGjJhig0Qk5+V73plkKQIKubVQp0MD8DmjcFrxb+TZsHke6lkySsA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 172.205.89.229) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zqIAslCHmvSbTyvYo5z3BrY4LjVHaiUeMWLIvAQsmbA=; b=g+3/AZsSaw38dlHxyS38J5osPPNJpfnoT5T8kn71lNY6Y7/INXO/1Au2KnAIhOgfbGGGZh8kKjTWWXXipAhLzBi+XyqppCDzj3c6uaH52szC0AXLWZxtQeSLuOzNjE/MOMpnrJ/e7pOEluNYC2YJ4kmkis5IQ7KRJwsVZvAmZTY= Received: from AM0P309CA0006.EURP309.PROD.OUTLOOK.COM (2603:10a6:20b:28f::13) by PR3PR08MB5755.eurprd08.prod.outlook.com (2603:10a6:102:86::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.13; Tue, 7 Jul 2026 15:10:23 +0000 Received: from AMS0EPF0000019A.eurprd05.prod.outlook.com (2603:10a6:20b:28f:cafe::79) by AM0P309CA0006.outlook.office365.com (2603:10a6:20b:28f::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.21.223.2 via Frontend Transport; Tue, 7 Jul 2026 15:10:23 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 172.205.89.229) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 172.205.89.229 as permitted sender) receiver=protection.outlook.com; client-ip=172.205.89.229; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (172.205.89.229) by AMS0EPF0000019A.mail.protection.outlook.com (10.167.16.246) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.181.6 via Frontend Transport; Tue, 7 Jul 2026 15:10:22 +0000 Received: from AZ-NEU-EX04.Arm.com (10.240.25.138) by AZ-NEU-EX03.Arm.com (10.240.25.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.29; Tue, 7 Jul 2026 15:10:22 +0000 Received: from ip-10-248-139-167.eu-west-1.compute.internal (10.248.139.167) by mail.arm.com (10.240.25.138) with Microsoft SMTP Server id 15.2.2562.29 via Frontend Transport; Tue, 7 Jul 2026 15:10:22 +0000 From: Pengfei Li To: CC: , , , , Pengfei Li Subject: [PATCH] match.pd: Eliminate dead operand in vector permute and insert patterns Date: Tue, 7 Jul 2026 15:09:53 +0000 Message-ID: <20260707150953.112241-1-Pengfei.Li2@arm.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AMS0EPF0000019A:EE_|PR3PR08MB5755:EE_|DU2PEPF00028CFD:EE_|PAVPR08MB9329:EE_ X-MS-Office365-Filtering-Correlation-Id: 45fb095b-74c3-4ba6-a130-08dedc3a0473 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; ARA:13230040|1800799024|376014|36860700016|82310400026|23010399003|56012099006|11063799006|18002099003|6133799003|13003099007; X-Microsoft-Antispam-Message-Info-Original: mMqDdtPVmvlNFxuseyYULOIA7y9lhjusaWso6Ha+2iSAPeFyY4gsRJoxE6ax1mVps7570knlKQBNwxVtjJIcaHpEoIN5OD6FjPRH7OAxXjQqZv4eP+MttVme7BOwVHq98VqD0Q5ZfkwMqUZDjshxMwiCTRbu2LaUNZpe3PNDx0qgTk1dpyygMldxUNg2HMlHbnJIlZHHgPj/72aUeEulhYmNIfy/caHYtpNx/84CdkFYToa45r3XO68fGJ+Md+fhwRYUNZDaUtx5dyAnhrUOVx8xPfNMX7bFXwREj1fItJC4fbla2hLFralaWWSUW2MK9O9RTUBdbFkWrNV0KcEPPGcCljTisNvoG3iJc63IoTFhxbRhvMMXOxRpdUnopx8jT2kaVanoLEzZSOZfMxJOcrZXTp+ziumC+xuk39xtBssU81H7g/OZtiXTEDKI32Kc1IK79kU+DV/aZWP7V7jstQA0gLE43BjfhCkEZuJNVEc4E5dbfRfe8wmVJ0ARGYj+AJaTAXq/g8zp1iE7dkLFNmfhWfwWIUq2Tg70RMpP0WFLMxLFCD/Tn05vbDCJtxJ290ZZVhqyP5iShzC4j/nYGXF08WJoj2nTcZxzjiWOCITIXUcvQzzOQih/E0L16tqEcXMUMeg+lc9R8WPGXP/AHOoOWMIBYpBqecrCzDCqTi8= X-Forefront-Antispam-Report-Untrusted: CIP:172.205.89.229; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(376014)(36860700016)(82310400026)(23010399003)(56012099006)(11063799006)(18002099003)(6133799003)(13003099007); DIR:OUT; SFP:1101; X-Exchange-RoutingPolicyChecked: nQb5jo+VV/WQ29nw34rQmughwbVF+H81wSkwsk7Xtdg1WiJooK+qC62JDjTxz4QKZjZKSQshSPMD/Tx9WG2FROB643HPXOe1wxr/rGxRJOy/dl8b4UpESHcfrLHwXjbjGNfTSFtSoYBNSCTijlEVYUlBrhi425/iefbKB16/+7bezC62TgPSJR/KDBZ16gxB9eGaM2GY4yhbFI7HbPSYflJJJHZYeznBZVkR31uWlcyQdxIlMdAPpWvASd9GP24FXA5p5wUzcfekBstR9kDJNxvyCgFge0kIJpR+xHRN55sTzVerg1U1ru0ZZ+4C95jPj/8ZYaxLqw2gWoG7WnUhUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR08MB5755 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DU2PEPF00028CFD.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 0a5fb6e6-4b31-4e89-c91e-08dedc39de03 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|36860700016|35042699022|82310400026|14060799003|23010399003|376014|56012099006|6133799003|11063799006|18002099003; X-Microsoft-Antispam-Message-Info: hF8RMsEHtXxakN4CRnYLzpSKO9hibaoBjrmg30fWM6VJ00hlzNRoyAzKwOYzYwF7iYy2e7gTOxCEnpJFsRzA5trts+iXtphyjkz2ZtLf84Ett+Av8OLSPmExQSWI7Rk7cSV53AtqNxMQsAaf41VWQHuQtexle1y0mlrWt8hjNcgSbZ0kiYHz/SP+y1wX7dryuRt9mARvJVLk7SzSL2krJ4jfyw5tYOaL4NCHLaqX7z5aqtgj9nXOaCEmDt1Y1SsfzdGzqQ9iY+Rh2SXH6R6YdexQxdRbzgeF7hnWtb5ftvU6DniHFUr/VKpz12LNFCtP4TCP6zhQt6xo9/oxVe6cd9CjaH+PF0rZUuZrCmgkEtRT+jHnDoiyChS2rHr7IK0m0GbhdN6xySvlIlZY798NqCzP1DAsCXhZ8zjfuYfZYOv77INsMGLRfhltyK3p8uRpE7rUhmZ/PyLrpihDeBn3M8zcQeuosQhyWxeYfSaWMURJJaTvD4/5CeOYF55iHf0yg/DRDY1KMuk7sPiMHavvSlGy27f2zYVR1enqFqL8xBAt+9T+ov9zCSCZ5fh1y0j/BXSBQsv52yB7Oo22RxLlCDWpwSpJksAdvZvSwyjQrYEUAyxmjS2/y/O5vd4WsRId1tOTe+FsVbndCpILJQdNiTGnYFR+VI4qZjHVTRIHteg= X-Forefront-Antispam-Report: CIP:4.158.2.129; CTRY:GB; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:outbound-uk1.az.dlp.m.darktrace.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230040)(1800799024)(36860700016)(35042699022)(82310400026)(14060799003)(23010399003)(376014)(56012099006)(6133799003)(11063799006)(18002099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6xyY8t8y4fu7dUVRHJiIf3HR6wmXfVCxV2xQT/H/Bx8iCX+6dkudrYLotumF2VaqF3iyDUCLq8ZlHsCHi/gNgwYkkq5Ap3VlSuCzs2SVd84bZ+DDy8hmguOYR1ZEAqjCABZyLi0/5JMgEKNkAfxLlQK0EZwxJJPyfiIzmbdm4g2mn9Rdn+wC28pEsY0wutVLbuT8s7RCin1PjaI5H94t80kIOv1XVUCbTqaO1aXI5mTn+3OTGcyLMkDO+kgrPD96qcE17gJV/qIpb98GzgaIxIvhbJFxJ01pkuT7hHxKa1xGn4KjU2Yu2mcZjBapSt3athHEucXo88Nl78XuHPR2tiiUFWfQVAwD2wEHxIaN9huDINUNJMVYrfBPuQ3CmUasJxCHQ5AFT2kzrHQuln3vUQEMy3X8hMaa1nrn0xG1mi1BwNDc7lcwuc3S5hwiLMZn X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jul 2026 15:11:27.3109 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 45fb095b-74c3-4ba6-a130-08dedc3a0473 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[4.158.2.129]; Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DU2PEPF00028CFD.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9329 X-Spam-Status: No, score=-11.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FORGED_SPF_HELO, GIT_PATCH_0, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP shortcircuit=no autolearn=ham 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 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org When shifting a vector by one element and then inserting a new element into the vacated lane, GIMPLE can contain a VEC_PERM_EXPR followed by a BIT_INSERT_EXPR. For example, the testcase in this patch has: _1 = VEC_PERM_EXPR ; shifted_4 = BIT_INSERT_EXPR <_1, val_3(D), 96 (32 bits)>; On AArch64, GCC currently generates: movi v31.4s, 0 ext v0.16b, v0.16b, v31.16b, #4 ins v0.s[3], w0 Here the zero vector is only used to fill the lane that is immediately overwritten by the insertion. This patch adds a match.pd pattern to detect when all live lanes of the VEC_PERM_EXPR result come from a single source operand, and replaces the other operand in that case. This helps avoid materializing a zero filler vector. After this patch, GCC will generate: ext v0.16b, v0.16b, v0.16b, #4 ins v0.s[3], w0 Bootstrapped and tested on aarch64-linux-gnu and x86_64-linux-gnu. gcc/ChangeLog: * match.pd: Simplify vector permute and insert patterns. gcc/testsuite/ChangeLog: * gcc.dg/fold-vecperm-insert-1.c: New test. --- gcc/match.pd | 55 ++++++++++++++++++++ gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c | 19 +++++++ 2 files changed, 74 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c diff --git a/gcc/match.pd b/gcc/match.pd index a7cec25dbad..ca6b63a3395 100644 --- a/gcc/match.pd +++ b/gcc/match.pd @@ -12275,6 +12275,61 @@ and, (if (can_fold) (view_convert (vec_perm @0 @1 @2))))) +/* Simplify + v = VEC_PERM_EXPR ; + res = BIT_INSERT_EXPR ; + by replacing either op0 or op1 with the other one when + 1) BIT_INSERT_EXPR inserts exactly one full lane of v. + 2) All other lanes come from a single source, either op0 or op1. + + The vector operand that contributes only to the overwritten lane is dead. + Replacing it avoids materializing a filler vector. */ + +(simplify + (bit_insert (vec_perm @0 @1 VECTOR_CST@2) @3 INTEGER_CST@4) + (with + { + bool from0 = false; + bool from1 = false; + tree single_src = NULL_TREE; + unsigned elt_size = vector_element_bits (type); + + unsigned HOST_WIDE_INT nelts; + vec_perm_builder builder; + unsigned ins_lane_idx; + + /* Require fixed-length vectors, different operands to VEC_PERM_EXPR and + BIT_INSERT_EXPR to insert exactly one full lane. */ + if (TYPE_VECTOR_SUBPARTS (type).is_constant (&nelts) + && @0 != @1 + && tree_to_vec_perm_builder (&builder, @2) + && tree_to_uhwi (TYPE_SIZE (TREE_TYPE (@3))) == elt_size + && multiple_p (tree_to_uhwi (@4), elt_size, &ins_lane_idx)) + { + vec_perm_indices sel (builder, 2, nelts); + for (unsigned i = 0; i < nelts; i++) + { + /* Skip the overwritten lane. */ + if (i == ins_lane_idx) + continue; + + /* Set FROM0 / FROM1 if current lane comes from @0 / @1. */ + unsigned HOST_WIDE_INT elt = sel[i].to_constant (); + if (elt < nelts) + from0 = true; + else + from1 = true; + } + + /* If only one of FROM0 and FROM1 is true, all live lanes come from + a single source. */ + if (from0 ^ from1) + single_src = from0 ? @0 : @1; + } + } + (if (single_src != NULL_TREE) + (bit_insert (vec_perm { single_src; } { single_src; } @2) @3 @4)))) + #if GIMPLE /* Simplify (a >> 1) + (b >> 1) + ((a | b) & 1) to .AVG_CEIL (a, b). Similar for (a | b) - ((a ^ b) >> 1). */ diff --git a/gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c b/gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c new file mode 100644 index 00000000000..121f9999d89 --- /dev/null +++ b/gcc/testsuite/gcc.dg/fold-vecperm-insert-1.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-forwprop3" } */ + +typedef int __attribute__((vector_size(16))) v4si; + +/* Shift vector v by one element and insert the value val. The vector shift + typically requires a zero vector operand in VEC_PERM_EXPR, but it can be + optimized away in this case. */ + +v4si shift_and_insert (v4si v, int val) +{ + v4si zero = { 0, 0, 0, 0 }; + v4si sel = { 1, 2, 3, 4 }; + v4si shifted = __builtin_shuffle (v, zero, sel); + shifted[3] = val; + return shifted; +} + +/* { dg-final { scan-tree-dump-times "VEC_PERM_EXPR.*v_\[0-9\]+.*v_\[0-9\]+" 1 "forwprop3" } } */