From patchwork Mon Oct 31 11:59:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tamar Christina X-Patchwork-Id: 59650 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DD8AB3887F48 for ; Mon, 31 Oct 2022 12:00:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DD8AB3887F48 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1667217629; bh=NMByqjfRKqOASUbUkrPjwQO+J7oSNrjaV3ZkTi1BOQ0=; h=Date:To:Subject:In-Reply-To:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:Cc:From; b=IfweRBL6qIYYM/LaUriO5i68DSbKSMOKT18ia4nV/xzspE84g9lQkTX8MSs2/j0Og bW4KmdKANZPwoAQD1AqN+biB36zAZo+gL4yOp3/BJw9xoov1J2zof33f5j6cU3ZEhJ KHyn0Bffht59lQPzVYSkNuHaX6pX81J40J+B7iqA= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70083.outbound.protection.outlook.com [40.107.7.83]) by sourceware.org (Postfix) with ESMTPS id BECA2385381D for ; Mon, 31 Oct 2022 11:59:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BECA2385381D ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=I2AXpv8BbiVZN7q4pjgu/eJv3uSfp7h5IF/D3JWMu7PFbMUz1H0C9ek6bfhftey0ecub4LIhyjjjFvSpCiG+peVbNGr7lPv8gK8dS6ZkL9ZxS+nxsotAo4CBufShdWRm/tgJ+9gFznTKSoLvtIgLBwwfk+V+0CsojqhmfJJwsiz47W6qVf3lsiOt3bP/YIjGkrDALkYfKAnBz7wy0OQLwuS1XbFim5bb/DmHxXGs/ZrJm3GFY7pTPND0OCKdtINp2vWhyYI2xuSiAHcl2nzbTKWeyCVyZVQXN2V04N/XxL9OsU66BM+OesTQWKC3h12q/nTjc8LJUhx+pihyXUAmqQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=NMByqjfRKqOASUbUkrPjwQO+J7oSNrjaV3ZkTi1BOQ0=; b=QB20LsCkLsZJLASnhSG1jo5IbdAadS7Gvw8TBajInC2/NGlDal5lNfMKUZiAYnPguauQCtz1X9K75tCLHmELYJ+Ljl+b7Y64edzrvI6OxUTSn3oOzQHwcDMB8hyCtWZX+WYA+2yZdVxB0XbxA0gmrQxydrs7O82WWJqpVc0EU52H0/ULBh4vWzlaCwHQujUmDbe3nw2m5P4N1XLJYCLm6wANuydsf/OcE1GghaHChSffmvStuPwiDe39MV7qbbbC0VhMt/jzs8rxWmOEWjTRja3trBm0uNgGy3MYmFVyc9snPsA51SoDUTMUF9+WiEsN2QCdZYlxdHlKGAw2WUNCUQ== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) 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=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) Received: from AS9PR04CA0128.eurprd04.prod.outlook.com (2603:10a6:20b:531::10) by PA4PR08MB6254.eurprd08.prod.outlook.com (2603:10a6:102:f3::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.18; Mon, 31 Oct 2022 11:59:31 +0000 Received: from AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:531:cafe::89) by AS9PR04CA0128.outlook.office365.com (2603:10a6:20b:531::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.14 via Frontend Transport; Mon, 31 Oct 2022 11:59:31 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM7EUR03FT056.mail.protection.outlook.com (100.127.140.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.14 via Frontend Transport; Mon, 31 Oct 2022 11:59:31 +0000 Received: ("Tessian outbound 6c699027a257:v130"); Mon, 31 Oct 2022 11:59:31 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 86b378ac9063a837 X-CR-MTA-TID: 64aa7808 Received: from 23c15775faa1.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 79764953-D9D6-4575-B055-B007F5552F0E.1; Mon, 31 Oct 2022 11:59:20 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 23c15775faa1.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 31 Oct 2022 11:59:20 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LosX++JY6fBhj/i+7wIFWFpY6/WozxsjPUzcjDVnqdMxU6G0I0O9IZqkVpmBjW7kqGYZYQibMed4F2JMPyav43CJoJNhQl6dAxUdsfqAFVOyuA4GFjzN4fWNRgt2ZdYhkpLyY1pli0Yz8gLKzRQEJ6zzUzptS8kaOkSQUsLeA2AmtVwTQKyf9GuY3mormnHB1tY1fwKRSQGP3xTzfirheRXC9Y1xnhEpyGMBsfHrDjlQwaW7/lVNESsE4Yw3sJra8tKHT9twgxGWit6EF4FBCjjHYqpoOTmmVN5hOBcbQt8/MYehEK9gmpR3qRbX97aQeoIImc2vu68TFk31CW6KBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=NMByqjfRKqOASUbUkrPjwQO+J7oSNrjaV3ZkTi1BOQ0=; b=oC49Ko2EHnE8dt8EFhfUTz797X3yjjXkt/JCQGn0tjWlBj3jdup8+RE4KhqnZBUbmNuzSVz3KaSAeWS0V10O+al9xxNUPR0vA2ps7IG9CRNItGIB1XJqF5wOJLNWiQ3MtiUMJuLB3aGQqkmsLmDmlMwSpnrKPVd1tle+hAEH2LdiGoQVqwsngXTcqdS4lv3vbHnMVT98vhZLu3Iiv3mVx7YKDzvCYplyiljOIFfNq6QGbe0E/gdG+kXu+RlKzdgNKlgHTPVbCHarhd73FOdq8Wm9roq9jjV47sjpykaOpgfcrwmnLc9UwePDOYhZ4EuC2L3nIooPvMzU6bEEWWHIqg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) by DBBPR08MB6268.eurprd08.prod.outlook.com (2603:10a6:10:202::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5769.19; Mon, 31 Oct 2022 11:59:17 +0000 Received: from VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::c57d:50c2:3502:a52]) by VI1PR08MB5325.eurprd08.prod.outlook.com ([fe80::c57d:50c2:3502:a52%4]) with mapi id 15.20.5769.019; Mon, 31 Oct 2022 11:59:17 +0000 Date: Mon, 31 Oct 2022 11:59:14 +0000 To: gcc-patches@gcc.gnu.org Subject: [PATCH 6/8]AArch64: Add peephole and scheduling logic for pairwise operations that appear late in RTL. Message-ID: Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: LO2P265CA0031.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:61::19) To VI1PR08MB5325.eurprd08.prod.outlook.com (2603:10a6:803:13e::17) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: VI1PR08MB5325:EE_|DBBPR08MB6268:EE_|AM7EUR03FT056:EE_|PA4PR08MB6254:EE_ X-MS-Office365-Filtering-Correlation-Id: fd0488e7-f991-4d0f-23ac-08dabb375ef5 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: OBcggxxwVXZdJlgF1bA6d3Yx10fbv2/xCk3y3roGqQL0UiBu9RlsiFUK3kz1ka6TvJsFHlmxwBETV4hIWQSVN2S/j7Kf24OzA2IoVmI/jiY75DSa2R8ssX+jg4dWm6K6pIqQ6ODdcRz5wnp0caZNLBFvOBcSd+7oZly4ZUZ4L7Y0t17xFzVk644fvqK7E5oPg02HhBeo6n0dpH9W9SabvTPgzaYRRsSZZ+J+GnzdfYo/T5XkqNjJa0Fu3veDvWnWb7L4QDBaF30ZGvK2ennOOQaDFP2bGRVz+vIRmqz3lc9eUblkXyj49gqMxD2t6zHzv2x6B45W9/2bPw0tnv68oA5NJP5hhwmH0RsqE5VRbh1gjKJafB/LiCFlmb4dWZ1Wijafo+vWN5QuUKsLqd++6KqyBaS+5k+h26ek5jO5JV6CuO8MqDUL0LaRLDt6mXGu31tnmXe7pNIHfmq6PZ6Ex7m/OaJDBwKa5O7xgle1G32G0YwEYRhlp6wLhKwEXniTssc7HaORxsCLK/tqzUNW7jffhKRBux4Cy2smkTDdXHzwW4DOpruMgojpcSBfyLQW6mWkdxsTqWsVwb0VgtHkruotXV6gL1JNdoSct7reE9VCLNXubxOw9ptEn2xjH4bO6oBXWym6DQKCSGGCYDCif0SYuFX/oIWTdMmspeB1ZeadthzFrUel8+f2PPVhBQ9XjPmgcUaEh+/nq6VmO5qDPBUusdBPhZ0B0T2N2yzn+iWLfvWB2LNEhClEgYKs4qjy//hulhpbWXeK8TTKK5uHVQ== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR08MB5325.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(346002)(366004)(39860400002)(136003)(376002)(396003)(451199015)(478600001)(2906002)(38100700002)(66476007)(66556008)(66946007)(4326008)(8676002)(33964004)(44832011)(2616005)(186003)(41300700001)(86362001)(235185007)(5660300002)(6506007)(6486002)(44144004)(316002)(36756003)(6916009)(6666004)(8936002)(26005)(4743002)(6512007)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6268 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: a1852387-5bfd-404a-6efd-08dabb375622 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2hfWXmx9zh1XRzJjDfa2n2Rn34fUWM4gsae/5Nnb6He/omTEobAw+H0SUxU+ogw4wkK+EsQ43ShHzzjYtLxcMnpWit0IZBJWkjH3llb1nj8xCLfbbRawk5odqnFaAek6LjpDy38ypFbXKJe1emJMDyLeadbRfDUMo60XPiDvyr5pICZRAs2XJhfjnHs9Be1EYKKnPsEIG62+jhBelCl3H8JzKWd8OCtZSYoyl9Iviw5yGhAQor6ZpATRnSEFROxZFxJqLXzX5AJtRnRYLvsP2IAPYumuPcnkSCp5/+2huEZJWq1OV8+xjSYS3TS3+pe8rLId7yULiFnj1Ba1pv5rdpu5p3IgCAMD1zgCBYq4bZdmqSXjPywdycyieku0881os4Zksd7JI9rXF0FKZ1gYw2Uo2CTZK0SzcLKJFf32TTKTmYwn8xNDeR//NZ3E3rMdYIcCoNsFMWe4yyoiEGv3hZcS4fVUOI+yI5ugsSxxaFuEcavEAlN0Upby9plQMzipWtXlbwdAyqTeKJBL1IsUoczVsYTY3rYo1og/HUI9aR3hbtC/MFOdDO7HbNMEvyWzzJVMz/G5fcfSAfsc/6WgoTj4+Z9RfaVnZv2XzESpH7i2rSE1gs8xizklVlktfrQPvLw+2UQV7EV1uxG9zOMCUtzRrH/Cr3LKwvQiPqsNcQgo5MXc/P7Ai23zOgI0KuCVrEloKTXonB3hddVU3cXkyXblH6oCDPrx0SVBL19+R2QG8axGeRQWWHqoHe4spJFZE81lOSt0HjG006niOBOsHn3nFiUQ3p/d2zHVZzxb+tA= X-Forefront-Antispam-Report: CIP:63.35.35.123; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:64aa7808-outbound-1.mta.getcheckrecipient.com; PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; CAT:NONE; SFS:(13230022)(4636009)(346002)(136003)(376002)(396003)(39860400002)(451199015)(40470700004)(46966006)(36840700001)(47076005)(336012)(40480700001)(40460700003)(6666004)(6486002)(2906002)(44832011)(44144004)(356005)(81166007)(36756003)(86362001)(82740400003)(82310400005)(4743002)(6512007)(33964004)(26005)(36860700001)(2616005)(186003)(316002)(70206006)(8676002)(478600001)(4326008)(70586007)(41300700001)(6506007)(235185007)(8936002)(5660300002)(6916009)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Oct 2022 11:59:31.6284 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fd0488e7-f991-4d0f-23ac-08dabb375ef5 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123]; Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM7EUR03FT056.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB6254 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, KAM_LOTSOFHASH, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, UNPARSEABLE_RELAY 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.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Tamar Christina via Gcc-patches From: Tamar Christina Reply-To: Tamar Christina Cc: Richard.Earnshaw@arm.com, nd@arm.com, richard.sandiford@arm.com, Marcus.Shawcroft@arm.com Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Hi All, Says what it does on the tin. In case some operations form in RTL due to a split, combine or any RTL pass then still try to recognize them. Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. Ok for master? Thanks, Tamar gcc/ChangeLog: * config/aarch64/aarch64-simd.md: Add new peepholes. * config/aarch64/aarch64.cc (aarch_macro_fusion_pair_p): Schedule sequential PLUS operations next to each other to increase the chance of forming pairwise operations. --- inline copy of patch -- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 93a2888f567460ad10ec050ea7d4f701df4729d1..20e9adbf7b9b484f9a19f0c62770930dc3941eb2 100644 --- diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 93a2888f567460ad10ec050ea7d4f701df4729d1..20e9adbf7b9b484f9a19f0c62770930dc3941eb2 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -3425,6 +3425,22 @@ (define_insn "aarch64_faddp" [(set_attr "type" "neon_fp_reduc_add_")] ) +(define_peephole2 + [(set (match_operand: 0 "register_operand") + (vec_select: + (match_operand:VHSDF 1 "register_operand") + (parallel [(match_operand 2 "const_int_operand")]))) + (set (match_operand: 3 "register_operand") + (plus: + (match_dup 0) + (match_operand: 5 "register_operand")))] + "TARGET_SIMD + && ENDIAN_LANE_N (, INTVAL (operands[2])) == 1 + && REGNO (operands[5]) == REGNO (operands[1]) + && peep2_reg_dead_p (2, operands[0])" + [(set (match_dup 3) (unspec: [(match_dup 1)] UNSPEC_FADDV))] +) + (define_insn "reduc_plus_scal_" [(set (match_operand: 0 "register_operand" "=w") (unspec: [(match_operand:VDQV 1 "register_operand" "w")] diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index f3bd71c9f10868f9e6ab50d8e36ed3ee3d48ac22..4023b1729d92bf37f5a2fc8fc8cd3a5194532079 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -25372,6 +25372,29 @@ aarch_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) } } + /* Try to schedule vec_select and add together so the peephole works. */ + if (simple_sets_p && REG_P (SET_DEST (prev_set)) && REG_P (SET_DEST (curr_set)) + && GET_CODE (SET_SRC (prev_set)) == VEC_SELECT && GET_CODE (SET_SRC (curr_set)) == PLUS) + { + /* We're trying to match: + prev (vec_select) == (set (reg r0) + (vec_select (reg r1) n) + curr (plus) == (set (reg r2) + (plus (reg r0) (reg r1))) */ + rtx prev_src = SET_SRC (prev_set); + rtx curr_src = SET_SRC (curr_set); + rtx parallel = XEXP (prev_src, 1); + auto idx + = ENDIAN_LANE_N (GET_MODE_NUNITS (GET_MODE (XEXP (prev_src, 0))), 1); + if (GET_CODE (parallel) == PARALLEL + && XVECLEN (parallel, 0) == 1 + && known_eq (INTVAL (XVECEXP (parallel, 0, 0)), idx) + && GET_MODE (SET_DEST (prev_set)) == GET_MODE (curr_src) + && GET_MODE_INNER (GET_MODE (XEXP (prev_src, 0))) + == GET_MODE (XEXP (curr_src, 1))) + return true; + } + /* Fuse compare (CMP/CMN/TST/BICS) and conditional branch. */ if (aarch64_fusion_enabled_p (AARCH64_FUSE_CMP_BRANCH) && prev_set && curr_set && any_condjump_p (curr) --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -3425,6 +3425,22 @@ (define_insn "aarch64_faddp" [(set_attr "type" "neon_fp_reduc_add_")] ) +(define_peephole2 + [(set (match_operand: 0 "register_operand") + (vec_select: + (match_operand:VHSDF 1 "register_operand") + (parallel [(match_operand 2 "const_int_operand")]))) + (set (match_operand: 3 "register_operand") + (plus: + (match_dup 0) + (match_operand: 5 "register_operand")))] + "TARGET_SIMD + && ENDIAN_LANE_N (, INTVAL (operands[2])) == 1 + && REGNO (operands[5]) == REGNO (operands[1]) + && peep2_reg_dead_p (2, operands[0])" + [(set (match_dup 3) (unspec: [(match_dup 1)] UNSPEC_FADDV))] +) + (define_insn "reduc_plus_scal_" [(set (match_operand: 0 "register_operand" "=w") (unspec: [(match_operand:VDQV 1 "register_operand" "w")] diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index f3bd71c9f10868f9e6ab50d8e36ed3ee3d48ac22..4023b1729d92bf37f5a2fc8fc8cd3a5194532079 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -25372,6 +25372,29 @@ aarch_macro_fusion_pair_p (rtx_insn *prev, rtx_insn *curr) } } + /* Try to schedule vec_select and add together so the peephole works. */ + if (simple_sets_p && REG_P (SET_DEST (prev_set)) && REG_P (SET_DEST (curr_set)) + && GET_CODE (SET_SRC (prev_set)) == VEC_SELECT && GET_CODE (SET_SRC (curr_set)) == PLUS) + { + /* We're trying to match: + prev (vec_select) == (set (reg r0) + (vec_select (reg r1) n) + curr (plus) == (set (reg r2) + (plus (reg r0) (reg r1))) */ + rtx prev_src = SET_SRC (prev_set); + rtx curr_src = SET_SRC (curr_set); + rtx parallel = XEXP (prev_src, 1); + auto idx + = ENDIAN_LANE_N (GET_MODE_NUNITS (GET_MODE (XEXP (prev_src, 0))), 1); + if (GET_CODE (parallel) == PARALLEL + && XVECLEN (parallel, 0) == 1 + && known_eq (INTVAL (XVECEXP (parallel, 0, 0)), idx) + && GET_MODE (SET_DEST (prev_set)) == GET_MODE (curr_src) + && GET_MODE_INNER (GET_MODE (XEXP (prev_src, 0))) + == GET_MODE (XEXP (curr_src, 1))) + return true; + } + /* Fuse compare (CMP/CMN/TST/BICS) and conditional branch. */ if (aarch64_fusion_enabled_p (AARCH64_FUSE_CMP_BRANCH) && prev_set && curr_set && any_condjump_p (curr)