From patchwork Fri Oct 16 10:48:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Srinath Parvathaneni X-Patchwork-Id: 1383240 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gcc.gnu.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=s7vdm2Qi; dkim-atps=neutral Received: from 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 RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CCNTH4dxDz9sSs for ; Fri, 16 Oct 2020 21:59:45 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E4A123857034; Fri, 16 Oct 2020 10:59:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E4A123857034 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1602845983; bh=Xce3bXWGS9VnUoXfwsHg8RkVqq7XqqV5L/DG/0IsH6Q=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=s7vdm2Qio9dbKlLrONLM0FOVeiGYAXXyn32z601NefTkY2C/PgyHYv6EBdmK5efR5 G5pjdlB5dlYHsJ8vUH6F9+PrYFmzf+Zsm+D+Ap5r9SVDfsOisqW6H6qULXtodBPukM QvsVHKh4eO/D2vpsAOj2/3j1hq3FAAdMml92LGc0= 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-eopbgr70045.outbound.protection.outlook.com [40.107.7.45]) by sourceware.org (Postfix) with ESMTPS id C8DF93857813 for ; Fri, 16 Oct 2020 10:59:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org C8DF93857813 Received: from DBBPR09CA0045.eurprd09.prod.outlook.com (2603:10a6:10:d4::33) by AM0PR08MB4305.eurprd08.prod.outlook.com (2603:10a6:208:140::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.22; Fri, 16 Oct 2020 10:59:32 +0000 Received: from DB5EUR03FT061.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:d4:cafe::58) by DBBPR09CA0045.outlook.office365.com (2603:10a6:10:d4::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.23 via Frontend Transport; Fri, 16 Oct 2020 10:59:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; gcc.gnu.org; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;gcc.gnu.org; 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; Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DB5EUR03FT061.mail.protection.outlook.com (10.152.21.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.21 via Frontend Transport; Fri, 16 Oct 2020 10:59:32 +0000 Received: ("Tessian outbound e6c55a0b9ba9:v64"); Fri, 16 Oct 2020 10:59:32 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 86b87fd4d6e712af X-CR-MTA-TID: 64aa7808 Received: from 74c78b4f95dd.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id D5D54E52-31BC-4D5C-8FA8-A7FD87FE312E.1; Fri, 16 Oct 2020 10:59:26 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 74c78b4f95dd.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Fri, 16 Oct 2020 10:59:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UP2xni0ETcKxmhB68DATbYRFznx7EWR1kigtLcZXvnfw8LGP90ZR/r1JV0r8a8WUOb/oQXaToEsNdKpYDWZCi4FqdKNNN2Y5M/112BePdrBTzDzy5AvpQ6/DMdKw1vMqia/4NEKcuFenhKi/7A0VMBOsy5LAmiQZKkzQeweiXildmxBbxRepHbzi/XjehEfGPYfRpMcPzevDOYZz8eKO4gbLlARmUJ9X0X/FdWy0Nr9tNxzR9kbdSkLo7OB/Vhvkt2FgOq3l9yTh/aO9Wt5xsj+cQ8AyvmumOG98g6oo/R7opD6A5fdt2UllvMvGobfqnyMamJH8Bdh2xqhq3aMlnA== 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-SenderADCheck; bh=Xce3bXWGS9VnUoXfwsHg8RkVqq7XqqV5L/DG/0IsH6Q=; b=K08Fb3GY6oLXlebfo83nRfkG4rVUWe0S5PWPZ57Z3EVEKzEkn2hc06f1OO15WeTYtDjoBuBTz3eA4saT/DukcVjTIuGPye1uQEn1Xth8ueJQA1Y1UQB6s46jbnCei+OT/gDNTS8PPYdyBlmlulwx9zhfuPIrNcPgU9l800BlbmFp/Dir07KN0EY4tbp+KolQimDGmzWsPVn9wGb8eFiYJwsNh3/xnzJwpc9suo2v/0kLiBr4pVDFNE+80nf9JJd+/NK+dcRDqapKu0sWa4fw5u82PGt3dTQmqEAUCDSUOYRbFfLpDX1AlWhaVbNY/CZCa1N+VR6vXtm0u6LikWB9oA== 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: gcc.gnu.org; dkim=none (message not signed) header.d=none;gcc.gnu.org; dmarc=none action=none header.from=arm.com; Received: from VI1PR0802MB2368.eurprd08.prod.outlook.com (2603:10a6:800:9d::10) by VE1PR08MB5774.eurprd08.prod.outlook.com (2603:10a6:800:1a1::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.24; Fri, 16 Oct 2020 10:59:24 +0000 Received: from VI1PR0802MB2368.eurprd08.prod.outlook.com ([fe80::2152:9219:a034:3547]) by VI1PR0802MB2368.eurprd08.prod.outlook.com ([fe80::2152:9219:a034:3547%11]) with mapi id 15.20.3477.020; Fri, 16 Oct 2020 10:59:24 +0000 Date: Fri, 16 Oct 2020 11:48:28 +0100 To: gcc-patches@gcc.gnu.org Subject: [PATCH][COMMITTED][GCC-10 backport] arm: Fix wrong code generated for mve scatter store with writeback intrinsics with -O2 (PR97271). X-Originating-IP: [217.140.106.54] X-ClientProxiedBy: LO2P265CA0287.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a1::35) To VI1PR0802MB2368.eurprd08.prod.outlook.com (2603:10a6:800:9d::10) Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from e120703-lin.cambridge.arm.com (217.140.106.54) by LO2P265CA0287.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:a1::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3477.22 via Frontend Transport; Fri, 16 Oct 2020 10:59:23 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 7b616f42-9453-4dbd-9875-08d871c28fd8 X-MS-TrafficTypeDiagnostic: VE1PR08MB5774:|AM0PR08MB4305: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: x-checkrecipientrouted: true NoDisclaimer: true X-MS-Oob-TLC-OOBClassifiers: OLM:94;OLM:94; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: swQjFoM9JyZj+c4jfflAV//dWs+Xl8DROPk9e1asc2aZwvODILMCUYVdEZvvfpv4Rp7eysRpdPNldtvq9GrWCLuWgqhV6IKtHg1NQtpL331j1J4UiarvKxgaUzNPSm6pvv0HrfVVQtxeSNQc5CXp78hEykFO6RS4SccG7Et7yW+i2HCJ0R1pO4hY9/9xqlZir2pyNDJzviO9QgNJf2R7PBPYbPNHeZLDU3wYvs2Bqhf2LECyG0+DwdF6f3V4iu9lW727n8Nk3YRS31CaK3CVtrakKOb90ui2OUlUjQlfwH774vy3Wd8dl1m34wi61OxZC/NhQ/4d3XSQYh9y7FeDtsvs46O6EBetxz2xudYUOaafI2WvyuVBjeCGOFDKprKBH8kvcwulVNXEe313Nx3dKDAoMrK2ySb6rbT3M1oO0NWybPnK9mYL6WCKyqSEcIiCzPp1iMU0+OcMiWx/nQYSnA== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VI1PR0802MB2368.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(376002)(39860400002)(136003)(396003)(346002)(66616009)(6486002)(33964004)(66476007)(66946007)(52116002)(8676002)(2906002)(6512007)(9686003)(86362001)(66556008)(34490700002)(4326008)(8936002)(30864003)(966005)(33656002)(956004)(6916009)(478600001)(5660300002)(235185007)(316002)(186003)(16526019)(52536014)(26005)(44832011); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: XWYexCi8BqevXSJY7NfhRKb9O0KDWPZ9BYb2ugLoX2aPT1txTFN3hnSkdzyfrJlV+U5p5yByJUPVth2edELJE5FCtmEw80klKnENXnP3xRgwOybqydIW+AcgjZPZIF0uZkZ/ztwhz2807QbQ3t1f+2KAwn2ZIgzvLEqneLnTeFrJBZPMyvwIXPauDukU3IuD/FWrV2IvaKM4SiWdHJJ+xsq86I7K/UmuF4AD3fVihfnFikAdgvxQ2F4ql8Eu3bJ3pSGTF+OWGNI8T2bFtd17GDSNuxOpFXXwZMqu3Wq6grL6sMjshnBRFUDAxruo9ayu2NFt8wJhvOsZyzlcdKDfYK/WhsGxD8BeGsNfno0TnnRfkl2vGv9/KwLUckGov0JI+Yrb8thJ8jOptzk7ZeOQv3heMnzdzAPevvXaF1mHcFxSbwS2Su3wJrarWcslO4UOtOdp2s2wDWOva/7C9rqHORb0yLxtsAmCBBQ4VzerpglqFCHAkzXc8v00xreWb+KA9JBsbhj49hNHCkZgrkEwR71HpdzOtwwXTd5qqJMdtCJibpu2jYUFNGmHTxxtw81rpMYqsfjo77WwpTibtNC+BIzdFIiLaJReW2vAxb52+rUvvT/oSoQqnZIRiYL7Uo5FRUW/1Yas7JUuuO39mjSmIA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VE1PR08MB5774 Original-Authentication-Results: gcc.gnu.org; dkim=none (message not signed) header.d=none;gcc.gnu.org; dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-Office365-Filtering-Correlation-Id-Prvs: 62c42f51-9d1b-4b15-86fd-08d871c28ac1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Vb5tygAsCf2FcAZnXmvyPXobl2LUoRe2ne/6T0CuzR5EkCUWuNml1tuWoN5zIHMMtcBDOLBef32gG+XsP+EUTCS10UBVYudkFnOmGercy84lblIDZ5xEn52NMKWqyzkgU779kal5X4haXDpAsF1UKBLOExPC1I6a/jLAO8/5wbQwVX07n6jzhSmn0/3OUEy/GxteAzO97FC/4eud/jy3qtfmCCdIt9uT5LbucDrH0/srJHAfDFb43Uh248vuQmtAlpVWS8b/JqPcaw0l/Unn51e4W5U9qxEML8yaTgyr9JPY/WkaSdEt0Vt8YsFpkRKUNm2K/2jf0qRXhB1Axizl3sS3lA1S8XkQHP36utEhrirtXmtvh1qcG1NuMqgbC65eumntUw3cysv8K0Rh72qvKbUOCRcnj9aI6dspaaiS/o3iTuwsJwFpPbc0dW5jbeQXPmEHikC++sas4sN3xXCRBEByN8hHa1WS2kjPcLBMO/8= 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:(4636009)(376002)(39860400002)(396003)(136003)(346002)(46966005)(33964004)(6916009)(6486002)(6512007)(478600001)(4326008)(9686003)(966005)(33656002)(47076004)(52536014)(16526019)(70586007)(8936002)(66616009)(82310400003)(2906002)(5660300002)(956004)(81166007)(70206006)(8676002)(82740400003)(316002)(186003)(26005)(86362001)(356005)(44832011)(235185007)(30864003)(336012); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2020 10:59:32.3756 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7b616f42-9453-4dbd-9875-08d871c28fd8 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: DB5EUR03FT061.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4305 X-Spam-Status: No, score=-15.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, KAM_LOTSOFHASH, KAM_SHORT, MSGID_FROM_MTA_HEADER, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_PASS, TXREP, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Srinath Parvathaneni via Gcc-patches From: Srinath Parvathaneni Reply-To: Srinath Parvathaneni Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" This patch fixes (PR97271) the wrong code-gen for mve scatter store with writeback intrinsics with -O2. $cat bug.c void foo (uint32x4_t * addr, const int offset, int32x4_t value) { vstrwq_scatter_base_wb_s32 (addr, 8, value); } $ arm-none-eabi-gcc bug.c -S -O2 -march=armv8.1-m.main+mve -mfloat-abi=hard -o - Without this patch: ... foo: vldrw.32 q3, [r0] vstrw.u32 q0, [q3, #8]! ---> (A) vldr.64 d4, .L3 vldr.64 d5, .L3+8 vldrw.32 q3, [r0] vstrw.u32 q2, [q3, #8]! ---> (B) bx lr ... With this patch: ... foo: vldrw.32 q3, [r0] vstrw.u32 q0, [q3, #8]! --> (C) vstrw.32 q3, [r0] bx lr ... Without this patch 2 vstrw assembly instructions (A and B) are generated for vstrwq_scatter_base_wb_s32 intrinsic where as fix generates only one vstrw assembly instruction (C). Patch backport approved here https://gcc.gnu.org/pipermail/gcc-patches/2020-October/556373.html gcc/ChangeLog: 2020-10-06 Srinath Parvathaneni PR target/97271 * config/arm/arm-builtins.c (arm_strsbwbs_qualifiers): Modify array. (arm_strsbwbu_qualifiers): Likewise. (arm_strsbwbs_p_qualifiers): Likewise. (arm_strsbwbu_p_qualifiers): Likewise. * config/arm/arm_mve.h (__arm_vstrdq_scatter_base_wb_s64): Modify function definition. (__arm_vstrdq_scatter_base_wb_u64): Likewise. (__arm_vstrdq_scatter_base_wb_p_s64): Likewise. (__arm_vstrdq_scatter_base_wb_p_u64): Likewise. (__arm_vstrwq_scatter_base_wb_p_s32): Likewise. (__arm_vstrwq_scatter_base_wb_p_u32): Likewise. (__arm_vstrwq_scatter_base_wb_s32): Likewise. (__arm_vstrwq_scatter_base_wb_u32): Likewise. (__arm_vstrwq_scatter_base_wb_f32): Likewise. (__arm_vstrwq_scatter_base_wb_p_f32): Likewise. * config/arm/arm_mve_builtins.def (vstrwq_scatter_base_wb_add_u): Remove expansion for the builtin. (vstrwq_scatter_base_wb_add_s): Likewise. (vstrwq_scatter_base_wb_add_f): Likewise. (vstrdq_scatter_base_wb_add_u): Likewise. (vstrdq_scatter_base_wb_add_s): Likewise. (vstrwq_scatter_base_wb_p_add_u): Likewise. (vstrwq_scatter_base_wb_p_add_s): Likewise. (vstrwq_scatter_base_wb_p_add_f): Likewise. (vstrdq_scatter_base_wb_p_add_u): Likewise. (vstrdq_scatter_base_wb_p_add_s): Likewise. * config/arm/mve.md (mve_vstrwq_scatter_base_wb_v4si): Remove expand. (mve_vstrwq_scatter_base_wb_add_v4si): Likewise. (mve_vstrwq_scatter_base_wb_v4si_insn): Rename pattern to ... (mve_vstrwq_scatter_base_wb_v4si): This. (mve_vstrwq_scatter_base_wb_p_v4si): Remove expand. (mve_vstrwq_scatter_base_wb_p_add_v4si): Likewise. (mve_vstrwq_scatter_base_wb_p_v4si_insn): Rename pattern to ... (mve_vstrwq_scatter_base_wb_p_v4si): This. (mve_vstrwq_scatter_base_wb_fv4sf): Remove expand. (mve_vstrwq_scatter_base_wb_add_fv4sf): Likewise. (mve_vstrwq_scatter_base_wb_fv4sf_insn): Rename pattern to ... (mve_vstrwq_scatter_base_wb_fv4sf): This. (mve_vstrwq_scatter_base_wb_p_fv4sf): Remove expand. (mve_vstrwq_scatter_base_wb_p_add_fv4sf): Likewise. (mve_vstrwq_scatter_base_wb_p_fv4sf_insn): Rename pattern to ... (mve_vstrwq_scatter_base_wb_p_fv4sf): This. (mve_vstrdq_scatter_base_wb_v2di): Remove expand. (mve_vstrdq_scatter_base_wb_add_v2di): Likewise. (mve_vstrdq_scatter_base_wb_v2di_insn): Rename pattern to ... (mve_vstrdq_scatter_base_wb_v2di): This. (mve_vstrdq_scatter_base_wb_p_v2di): Remove expand. (mve_vstrdq_scatter_base_wb_p_add_v2di): Likewise. (mve_vstrdq_scatter_base_wb_p_v2di_insn): Rename pattern to ... (mve_vstrdq_scatter_base_wb_p_v2di): This. gcc/testsuite/ChangeLog: PR target/97271 * gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c: Modify. * gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c: Likewise. * gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c: Likewise. (cherry picked from commit 377535881166969dba43794f298170978d797ef6) ############### Attachment also inlined for ease of reply ############### diff --git a/gcc/config/arm/arm-builtins.c b/gcc/config/arm/arm-builtins.c index 658dacfb5bff6e045f0e5eacc93d3e182962ca52..4716771d7e45729cbd42878aaf5d530d61c8ac58 100644 --- a/gcc/config/arm/arm-builtins.c +++ b/gcc/config/arm/arm-builtins.c @@ -811,23 +811,23 @@ arm_ldrgbwbu_z_qualifiers[SIMD_MAX_BUILTIN_ARGS] static enum arm_type_qualifiers arm_strsbwbs_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_void, qualifier_unsigned, qualifier_const, qualifier_none}; + = { qualifier_unsigned, qualifier_unsigned, qualifier_const, qualifier_none}; #define STRSBWBS_QUALIFIERS (arm_strsbwbs_qualifiers) static enum arm_type_qualifiers arm_strsbwbu_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_void, qualifier_unsigned, qualifier_const, qualifier_unsigned}; + = { qualifier_unsigned, qualifier_unsigned, qualifier_const, qualifier_unsigned}; #define STRSBWBU_QUALIFIERS (arm_strsbwbu_qualifiers) static enum arm_type_qualifiers arm_strsbwbs_p_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_void, qualifier_unsigned, qualifier_const, + = { qualifier_unsigned, qualifier_unsigned, qualifier_const, qualifier_none, qualifier_unsigned}; #define STRSBWBS_P_QUALIFIERS (arm_strsbwbs_p_qualifiers) static enum arm_type_qualifiers arm_strsbwbu_p_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_void, qualifier_unsigned, qualifier_const, + = { qualifier_unsigned, qualifier_unsigned, qualifier_const, qualifier_unsigned, qualifier_unsigned}; #define STRSBWBU_P_QUALIFIERS (arm_strsbwbu_p_qualifiers) diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 26c83c7efefa34f17d8f8d30e5a3141f680041df..02dd216cb6039c20dbeda0c2ee1ca7ee8cb77549 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -13993,64 +13993,56 @@ __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrdq_scatter_base_wb_s64 (uint64x2_t * __addr, const int __offset, int64x2_t __value) { - __builtin_mve_vstrdq_scatter_base_wb_sv2di (*__addr, __offset, __value); - __builtin_mve_vstrdq_scatter_base_wb_add_sv2di (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrdq_scatter_base_wb_sv2di (*__addr, __offset, __value); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrdq_scatter_base_wb_u64 (uint64x2_t * __addr, const int __offset, uint64x2_t __value) { - __builtin_mve_vstrdq_scatter_base_wb_uv2di (*__addr, __offset, __value); - __builtin_mve_vstrdq_scatter_base_wb_add_uv2di (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrdq_scatter_base_wb_uv2di (*__addr, __offset, __value); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrdq_scatter_base_wb_p_s64 (uint64x2_t * __addr, const int __offset, int64x2_t __value, mve_pred16_t __p) { - __builtin_mve_vstrdq_scatter_base_wb_p_sv2di (*__addr, __offset, __value, __p); - __builtin_mve_vstrdq_scatter_base_wb_p_add_sv2di (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrdq_scatter_base_wb_p_sv2di (*__addr, __offset, __value, __p); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrdq_scatter_base_wb_p_u64 (uint64x2_t * __addr, const int __offset, uint64x2_t __value, mve_pred16_t __p) { - __builtin_mve_vstrdq_scatter_base_wb_p_uv2di (*__addr, __offset, __value, __p); - __builtin_mve_vstrdq_scatter_base_wb_p_add_uv2di (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrdq_scatter_base_wb_p_uv2di (*__addr, __offset, __value, __p); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_p_s32 (uint32x4_t * __addr, const int __offset, int32x4_t __value, mve_pred16_t __p) { - __builtin_mve_vstrwq_scatter_base_wb_p_sv4si (*__addr, __offset, __value, __p); - __builtin_mve_vstrwq_scatter_base_wb_p_add_sv4si (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_p_sv4si (*__addr, __offset, __value, __p); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_p_u32 (uint32x4_t * __addr, const int __offset, uint32x4_t __value, mve_pred16_t __p) { - __builtin_mve_vstrwq_scatter_base_wb_p_uv4si (*__addr, __offset, __value, __p); - __builtin_mve_vstrwq_scatter_base_wb_p_add_uv4si (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_p_uv4si (*__addr, __offset, __value, __p); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_s32 (uint32x4_t * __addr, const int __offset, int32x4_t __value) { - __builtin_mve_vstrwq_scatter_base_wb_sv4si (*__addr, __offset, __value); - __builtin_mve_vstrwq_scatter_base_wb_add_sv4si (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_sv4si (*__addr, __offset, __value); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_u32 (uint32x4_t * __addr, const int __offset, uint32x4_t __value) { - __builtin_mve_vstrwq_scatter_base_wb_uv4si (*__addr, __offset, __value); - __builtin_mve_vstrwq_scatter_base_wb_add_uv4si (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_uv4si (*__addr, __offset, __value); } __extension__ extern __inline uint8x16_t @@ -19158,16 +19150,14 @@ __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_f32 (uint32x4_t * __addr, const int __offset, float32x4_t __value) { - __builtin_mve_vstrwq_scatter_base_wb_fv4sf (*__addr, __offset, __value); - __builtin_mve_vstrwq_scatter_base_wb_add_fv4sf (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_fv4sf (*__addr, __offset, __value); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_p_f32 (uint32x4_t * __addr, const int __offset, float32x4_t __value, mve_pred16_t __p) { - __builtin_mve_vstrwq_scatter_base_wb_p_fv4sf (*__addr, __offset, __value, __p); - __builtin_mve_vstrwq_scatter_base_wb_p_add_fv4sf (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_p_fv4sf (*__addr, __offset, __value, __p); } __extension__ extern __inline float16x8_t diff --git a/gcc/config/arm/arm_mve_builtins.def b/gcc/config/arm/arm_mve_builtins.def index 753e40a951d071c1ab77476a1cc4779e91689178..55d426fbd14da6a536209f04f7f38de21c68b720 100644 --- a/gcc/config/arm/arm_mve_builtins.def +++ b/gcc/config/arm/arm_mve_builtins.def @@ -828,19 +828,9 @@ VAR3 (QUADOP_UNONE_UNONE_UNONE_IMM_UNONE, vidupq_m_n_u, v16qi, v8hi, v4si) VAR3 (TERNOP_UNONE_UNONE_UNONE_IMM, vdwdupq_n_u, v16qi, v4si, v8hi) VAR3 (TERNOP_UNONE_UNONE_UNONE_IMM, viwdupq_n_u, v16qi, v4si, v8hi) VAR1 (STRSBWBU, vstrwq_scatter_base_wb_u, v4si) -VAR1 (STRSBWBU, vstrwq_scatter_base_wb_add_u, v4si) -VAR1 (STRSBWBU, vstrwq_scatter_base_wb_add_s, v4si) -VAR1 (STRSBWBU, vstrwq_scatter_base_wb_add_f, v4sf) VAR1 (STRSBWBU, vstrdq_scatter_base_wb_u, v2di) -VAR1 (STRSBWBU, vstrdq_scatter_base_wb_add_u, v2di) -VAR1 (STRSBWBU, vstrdq_scatter_base_wb_add_s, v2di) VAR1 (STRSBWBU_P, vstrwq_scatter_base_wb_p_u, v4si) -VAR1 (STRSBWBU_P, vstrwq_scatter_base_wb_p_add_u, v4si) -VAR1 (STRSBWBU_P, vstrwq_scatter_base_wb_p_add_s, v4si) -VAR1 (STRSBWBU_P, vstrwq_scatter_base_wb_p_add_f, v4sf) VAR1 (STRSBWBU_P, vstrdq_scatter_base_wb_p_u, v2di) -VAR1 (STRSBWBU_P, vstrdq_scatter_base_wb_p_add_u, v2di) -VAR1 (STRSBWBU_P, vstrdq_scatter_base_wb_p_add_s, v2di) VAR1 (STRSBWBS, vstrwq_scatter_base_wb_s, v4si) VAR1 (STRSBWBS, vstrwq_scatter_base_wb_f, v4sf) VAR1 (STRSBWBS, vstrdq_scatter_base_wb_s, v2di) diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 4322adfa59fd1ce02429427098bf5df0abe40e7d..357718c12d9a290af3c9e00c294557f9fc2d3c4d 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -9667,38 +9667,10 @@ [(set_attr "type" "mve_move") (set_attr "length""8")]) -(define_expand "mve_vstrwq_scatter_base_wb_v4si" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "w") - (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_wb = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_v4si_insn (ignore_wb, operands[0], - operands[1], operands[2])); - DONE; -}) - -(define_expand "mve_vstrwq_scatter_base_wb_add_v4si" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "0") - (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_vec = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_v4si_insn (operands[0], operands[2], - operands[1], ignore_vec)); - DONE; -}) - ;; -;; [vstrwq_scatter_base_wb_s vstrdq_scatter_base_wb_u] +;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u] ;; -(define_insn "mve_vstrwq_scatter_base_wb_v4si_insn" +(define_insn "mve_vstrwq_scatter_base_wb_v4si" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V4SI 1 "s_register_operand" "0") @@ -9720,42 +9692,10 @@ } [(set_attr "length" "4")]) -(define_expand "mve_vstrwq_scatter_base_wb_p_v4si" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "w") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_wb = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_p_v4si_insn (ignore_wb, operands[0], - operands[1], operands[2], - operands[3])); - DONE; -}) - -(define_expand "mve_vstrwq_scatter_base_wb_p_add_v4si" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "0") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_vec = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_p_v4si_insn (operands[0], operands[2], - operands[1], ignore_vec, - operands[3])); - DONE; -}) - ;; ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u] ;; -(define_insn "mve_vstrwq_scatter_base_wb_p_v4si_insn" +(define_insn "mve_vstrwq_scatter_base_wb_p_v4si" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V4SI 1 "s_register_operand" "0") @@ -9778,38 +9718,10 @@ } [(set_attr "length" "8")]) -(define_expand "mve_vstrwq_scatter_base_wb_fv4sf" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SF 2 "s_register_operand" "w") - (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" -{ - rtx ignore_wb = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_fv4sf_insn (ignore_wb,operands[0], - operands[1], operands[2])); - DONE; -}) - -(define_expand "mve_vstrwq_scatter_base_wb_add_fv4sf" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "0") - (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" -{ - rtx ignore_vec = gen_reg_rtx (V4SFmode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_fv4sf_insn (operands[0], operands[2], - operands[1], ignore_vec)); - DONE; -}) - ;; ;; [vstrwq_scatter_base_wb_f] ;; -(define_insn "mve_vstrwq_scatter_base_wb_fv4sf_insn" +(define_insn "mve_vstrwq_scatter_base_wb_fv4sf" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V4SI 1 "s_register_operand" "0") @@ -9831,42 +9743,10 @@ } [(set_attr "length" "4")]) -(define_expand "mve_vstrwq_scatter_base_wb_p_fv4sf" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SF 2 "s_register_operand" "w") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" -{ - rtx ignore_wb = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_p_fv4sf_insn (ignore_wb, operands[0], - operands[1], operands[2], - operands[3])); - DONE; -}) - -(define_expand "mve_vstrwq_scatter_base_wb_p_add_fv4sf" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "0") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" -{ - rtx ignore_vec = gen_reg_rtx (V4SFmode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_p_fv4sf_insn (operands[0], operands[2], - operands[1], ignore_vec, - operands[3])); - DONE; -}) - ;; ;; [vstrwq_scatter_base_wb_p_f] ;; -(define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf_insn" +(define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V4SI 1 "s_register_operand" "0") @@ -9889,38 +9769,10 @@ } [(set_attr "length" "8")]) -(define_expand "mve_vstrdq_scatter_base_wb_v2di" - [(match_operand:V2DI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V2DI 2 "s_register_operand" "w") - (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_wb = gen_reg_rtx (V2DImode); - emit_insn ( - gen_mve_vstrdq_scatter_base_wb_v2di_insn (ignore_wb, operands[0], - operands[1], operands[2])); - DONE; -}) - -(define_expand "mve_vstrdq_scatter_base_wb_add_v2di" - [(match_operand:V2DI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V2DI 2 "s_register_operand" "0") - (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_vec = gen_reg_rtx (V2DImode); - emit_insn ( - gen_mve_vstrdq_scatter_base_wb_v2di_insn (operands[0], operands[2], - operands[1], ignore_vec)); - DONE; -}) - ;; ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u] ;; -(define_insn "mve_vstrdq_scatter_base_wb_v2di_insn" +(define_insn "mve_vstrdq_scatter_base_wb_v2di" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V2DI 1 "s_register_operand" "0") @@ -9942,42 +9794,10 @@ } [(set_attr "length" "4")]) -(define_expand "mve_vstrdq_scatter_base_wb_p_v2di" - [(match_operand:V2DI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V2DI 2 "s_register_operand" "w") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_wb = gen_reg_rtx (V2DImode); - emit_insn ( - gen_mve_vstrdq_scatter_base_wb_p_v2di_insn (ignore_wb, operands[0], - operands[1], operands[2], - operands[3])); - DONE; -}) - -(define_expand "mve_vstrdq_scatter_base_wb_p_add_v2di" - [(match_operand:V2DI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V2DI 2 "s_register_operand" "0") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_vec = gen_reg_rtx (V2DImode); - emit_insn ( - gen_mve_vstrdq_scatter_base_wb_p_v2di_insn (operands[0], operands[2], - operands[1], ignore_vec, - operands[3])); - DONE; -}) - ;; ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u] ;; -(define_insn "mve_vstrdq_scatter_base_wb_p_v2di_insn" +(define_insn "mve_vstrdq_scatter_base_wb_p_v2di" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V2DI 1 "s_register_operand" "0") @@ -9995,7 +9815,7 @@ ops[0] = operands[1]; ops[1] = operands[2]; ops[2] = operands[3]; - output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]!",ops); + output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops); return ""; } [(set_attr "length" "8")]) diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c index 6570d4abd23ecfaf9d279760814fddeb848712f5..319188b706fb737aef49dfd3a6e64545a63f2087 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c @@ -10,12 +10,10 @@ foo (uint64x2_t * addr, const int offset, int64x2_t value, mve_pred16_t p) vstrdq_scatter_base_wb_p_s64 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrdt.u64" } } */ - void foo1 (uint64x2_t * addr, const int offset, int64x2_t value, mve_pred16_t p) { vstrdq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrdt.u64" } } */ +/* { dg-final { scan-assembler-times "vstrdt.u64\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c index 8444a3acd4c090f182bae7a8e144715f0dd56ba7..940b5421c840a1841d7e018abeef2342ab653f1b 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c @@ -10,12 +10,10 @@ foo (uint64x2_t * addr, const int offset, uint64x2_t value, mve_pred16_t p) vstrdq_scatter_base_wb_p_u64 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrdt.u64" } } */ - void foo1 (uint64x2_t * addr, const int offset, uint64x2_t value, mve_pred16_t p) { vstrdq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrdt.u64" } } */ +/* { dg-final { scan-assembler-times "vstrdt.u64\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c index e0ec283d10068da7db0847e11611adbcb386cfbc..33926d5c9e2e85188b222a9c903a966c52195fa5 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c @@ -10,12 +10,10 @@ foo (uint64x2_t * addr, const int offset, int64x2_t value) vstrdq_scatter_base_wb_s64 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrd.u64" } } */ - void foo1 (uint64x2_t * addr, const int offset, int64x2_t value) { vstrdq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrd.u64" } } */ +/* { dg-final { scan-assembler-times "vstrd.u64\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c index fe41d6b5c74514cdec25a69e9f44f3df3493342b..b7ffcf9b5dd13db0f4785c3ee55231ec2b75d240 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c @@ -10,12 +10,10 @@ foo (uint64x2_t * addr, const int offset, uint64x2_t value) vstrdq_scatter_base_wb_u64 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrd.u64" } } */ - void foo1 (uint64x2_t * addr, const int offset, uint64x2_t value) { vstrdq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrd.u64" } } */ +/* { dg-final { scan-assembler-times "vstrd.u64\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c index f4ceabb8680c5044dae38bea3af351d5cd5d6085..b2cc6e555aeb0ce5415cefe2970b8d7a711661f3 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, float32x4_t value) vstrwq_scatter_base_wb_f32 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, float32x4_t value) { vstrwq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ +/* { dg-final { scan-assembler-times "vstrw.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c index cb2eb685139fe0db53281136e1ba235988bc731a..4befd49d7b92b0fc4de4988db91f9eec7b3d33ec 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, float32x4_t value, mve_pred16_t p) vstrwq_scatter_base_wb_p_f32 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, float32x4_t value, mve_pred16_t p) { vstrwq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ +/* { dg-final { scan-assembler-times "vstrwt.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c index d973c021ba372ef31b493cca61655134def723d8..dfb1827c4f08232b63ceccf89b2604fec2890a3f 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, int32x4_t value, mve_pred16_t p) vstrwq_scatter_base_wb_p_s32 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, int32x4_t value, mve_pred16_t p) { vstrwq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ +/* { dg-final { scan-assembler-times "vstrwt.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c index c0f0964c657711b45b5ecdda6386ee3656bb221c..4eb78c600be9749fca86e289c67e388f78753532 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, uint32x4_t value, mve_pred16_t p) vstrwq_scatter_base_wb_p_u32 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, uint32x4_t value, mve_pred16_t p) { vstrwq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ +/* { dg-final { scan-assembler-times "vstrwt.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c index 6ef095526e5eb21b3ed5d27c85566dadad07966e..618dbaf5aa69421ee80aca62904ce915306c54fd 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, int32x4_t value) vstrwq_scatter_base_wb_s32 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, int32x4_t value) { vstrwq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ +/* { dg-final { scan-assembler-times "vstrw.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c index 620dffa8391eb3685288128fdcd076672babc0d6..912a4590cf54b10a91caee8d4ccc24ce59ab7950 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, uint32x4_t value) vstrwq_scatter_base_wb_u32 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ - void foo1 (uint32x4_t * addr, uint32x4_t value) { vstrwq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ +/* { dg-final { scan-assembler-times "vstrw.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/config/arm/arm-builtins.c b/gcc/config/arm/arm-builtins.c index 658dacfb5bff6e045f0e5eacc93d3e182962ca52..4716771d7e45729cbd42878aaf5d530d61c8ac58 100644 --- a/gcc/config/arm/arm-builtins.c +++ b/gcc/config/arm/arm-builtins.c @@ -811,23 +811,23 @@ arm_ldrgbwbu_z_qualifiers[SIMD_MAX_BUILTIN_ARGS] static enum arm_type_qualifiers arm_strsbwbs_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_void, qualifier_unsigned, qualifier_const, qualifier_none}; + = { qualifier_unsigned, qualifier_unsigned, qualifier_const, qualifier_none}; #define STRSBWBS_QUALIFIERS (arm_strsbwbs_qualifiers) static enum arm_type_qualifiers arm_strsbwbu_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_void, qualifier_unsigned, qualifier_const, qualifier_unsigned}; + = { qualifier_unsigned, qualifier_unsigned, qualifier_const, qualifier_unsigned}; #define STRSBWBU_QUALIFIERS (arm_strsbwbu_qualifiers) static enum arm_type_qualifiers arm_strsbwbs_p_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_void, qualifier_unsigned, qualifier_const, + = { qualifier_unsigned, qualifier_unsigned, qualifier_const, qualifier_none, qualifier_unsigned}; #define STRSBWBS_P_QUALIFIERS (arm_strsbwbs_p_qualifiers) static enum arm_type_qualifiers arm_strsbwbu_p_qualifiers[SIMD_MAX_BUILTIN_ARGS] - = { qualifier_void, qualifier_unsigned, qualifier_const, + = { qualifier_unsigned, qualifier_unsigned, qualifier_const, qualifier_unsigned, qualifier_unsigned}; #define STRSBWBU_P_QUALIFIERS (arm_strsbwbu_p_qualifiers) diff --git a/gcc/config/arm/arm_mve.h b/gcc/config/arm/arm_mve.h index 26c83c7efefa34f17d8f8d30e5a3141f680041df..02dd216cb6039c20dbeda0c2ee1ca7ee8cb77549 100644 --- a/gcc/config/arm/arm_mve.h +++ b/gcc/config/arm/arm_mve.h @@ -13993,64 +13993,56 @@ __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrdq_scatter_base_wb_s64 (uint64x2_t * __addr, const int __offset, int64x2_t __value) { - __builtin_mve_vstrdq_scatter_base_wb_sv2di (*__addr, __offset, __value); - __builtin_mve_vstrdq_scatter_base_wb_add_sv2di (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrdq_scatter_base_wb_sv2di (*__addr, __offset, __value); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrdq_scatter_base_wb_u64 (uint64x2_t * __addr, const int __offset, uint64x2_t __value) { - __builtin_mve_vstrdq_scatter_base_wb_uv2di (*__addr, __offset, __value); - __builtin_mve_vstrdq_scatter_base_wb_add_uv2di (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrdq_scatter_base_wb_uv2di (*__addr, __offset, __value); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrdq_scatter_base_wb_p_s64 (uint64x2_t * __addr, const int __offset, int64x2_t __value, mve_pred16_t __p) { - __builtin_mve_vstrdq_scatter_base_wb_p_sv2di (*__addr, __offset, __value, __p); - __builtin_mve_vstrdq_scatter_base_wb_p_add_sv2di (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrdq_scatter_base_wb_p_sv2di (*__addr, __offset, __value, __p); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrdq_scatter_base_wb_p_u64 (uint64x2_t * __addr, const int __offset, uint64x2_t __value, mve_pred16_t __p) { - __builtin_mve_vstrdq_scatter_base_wb_p_uv2di (*__addr, __offset, __value, __p); - __builtin_mve_vstrdq_scatter_base_wb_p_add_uv2di (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrdq_scatter_base_wb_p_uv2di (*__addr, __offset, __value, __p); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_p_s32 (uint32x4_t * __addr, const int __offset, int32x4_t __value, mve_pred16_t __p) { - __builtin_mve_vstrwq_scatter_base_wb_p_sv4si (*__addr, __offset, __value, __p); - __builtin_mve_vstrwq_scatter_base_wb_p_add_sv4si (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_p_sv4si (*__addr, __offset, __value, __p); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_p_u32 (uint32x4_t * __addr, const int __offset, uint32x4_t __value, mve_pred16_t __p) { - __builtin_mve_vstrwq_scatter_base_wb_p_uv4si (*__addr, __offset, __value, __p); - __builtin_mve_vstrwq_scatter_base_wb_p_add_uv4si (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_p_uv4si (*__addr, __offset, __value, __p); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_s32 (uint32x4_t * __addr, const int __offset, int32x4_t __value) { - __builtin_mve_vstrwq_scatter_base_wb_sv4si (*__addr, __offset, __value); - __builtin_mve_vstrwq_scatter_base_wb_add_sv4si (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_sv4si (*__addr, __offset, __value); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_u32 (uint32x4_t * __addr, const int __offset, uint32x4_t __value) { - __builtin_mve_vstrwq_scatter_base_wb_uv4si (*__addr, __offset, __value); - __builtin_mve_vstrwq_scatter_base_wb_add_uv4si (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_uv4si (*__addr, __offset, __value); } __extension__ extern __inline uint8x16_t @@ -19158,16 +19150,14 @@ __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_f32 (uint32x4_t * __addr, const int __offset, float32x4_t __value) { - __builtin_mve_vstrwq_scatter_base_wb_fv4sf (*__addr, __offset, __value); - __builtin_mve_vstrwq_scatter_base_wb_add_fv4sf (*__addr, __offset, *__addr); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_fv4sf (*__addr, __offset, __value); } __extension__ extern __inline void __attribute__ ((__always_inline__, __gnu_inline__, __artificial__)) __arm_vstrwq_scatter_base_wb_p_f32 (uint32x4_t * __addr, const int __offset, float32x4_t __value, mve_pred16_t __p) { - __builtin_mve_vstrwq_scatter_base_wb_p_fv4sf (*__addr, __offset, __value, __p); - __builtin_mve_vstrwq_scatter_base_wb_p_add_fv4sf (*__addr, __offset, *__addr, __p); + *__addr = __builtin_mve_vstrwq_scatter_base_wb_p_fv4sf (*__addr, __offset, __value, __p); } __extension__ extern __inline float16x8_t diff --git a/gcc/config/arm/arm_mve_builtins.def b/gcc/config/arm/arm_mve_builtins.def index 753e40a951d071c1ab77476a1cc4779e91689178..55d426fbd14da6a536209f04f7f38de21c68b720 100644 --- a/gcc/config/arm/arm_mve_builtins.def +++ b/gcc/config/arm/arm_mve_builtins.def @@ -828,19 +828,9 @@ VAR3 (QUADOP_UNONE_UNONE_UNONE_IMM_UNONE, vidupq_m_n_u, v16qi, v8hi, v4si) VAR3 (TERNOP_UNONE_UNONE_UNONE_IMM, vdwdupq_n_u, v16qi, v4si, v8hi) VAR3 (TERNOP_UNONE_UNONE_UNONE_IMM, viwdupq_n_u, v16qi, v4si, v8hi) VAR1 (STRSBWBU, vstrwq_scatter_base_wb_u, v4si) -VAR1 (STRSBWBU, vstrwq_scatter_base_wb_add_u, v4si) -VAR1 (STRSBWBU, vstrwq_scatter_base_wb_add_s, v4si) -VAR1 (STRSBWBU, vstrwq_scatter_base_wb_add_f, v4sf) VAR1 (STRSBWBU, vstrdq_scatter_base_wb_u, v2di) -VAR1 (STRSBWBU, vstrdq_scatter_base_wb_add_u, v2di) -VAR1 (STRSBWBU, vstrdq_scatter_base_wb_add_s, v2di) VAR1 (STRSBWBU_P, vstrwq_scatter_base_wb_p_u, v4si) -VAR1 (STRSBWBU_P, vstrwq_scatter_base_wb_p_add_u, v4si) -VAR1 (STRSBWBU_P, vstrwq_scatter_base_wb_p_add_s, v4si) -VAR1 (STRSBWBU_P, vstrwq_scatter_base_wb_p_add_f, v4sf) VAR1 (STRSBWBU_P, vstrdq_scatter_base_wb_p_u, v2di) -VAR1 (STRSBWBU_P, vstrdq_scatter_base_wb_p_add_u, v2di) -VAR1 (STRSBWBU_P, vstrdq_scatter_base_wb_p_add_s, v2di) VAR1 (STRSBWBS, vstrwq_scatter_base_wb_s, v4si) VAR1 (STRSBWBS, vstrwq_scatter_base_wb_f, v4sf) VAR1 (STRSBWBS, vstrdq_scatter_base_wb_s, v2di) diff --git a/gcc/config/arm/mve.md b/gcc/config/arm/mve.md index 4322adfa59fd1ce02429427098bf5df0abe40e7d..357718c12d9a290af3c9e00c294557f9fc2d3c4d 100644 --- a/gcc/config/arm/mve.md +++ b/gcc/config/arm/mve.md @@ -9667,38 +9667,10 @@ [(set_attr "type" "mve_move") (set_attr "length""8")]) -(define_expand "mve_vstrwq_scatter_base_wb_v4si" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "w") - (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_wb = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_v4si_insn (ignore_wb, operands[0], - operands[1], operands[2])); - DONE; -}) - -(define_expand "mve_vstrwq_scatter_base_wb_add_v4si" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "0") - (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_vec = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_v4si_insn (operands[0], operands[2], - operands[1], ignore_vec)); - DONE; -}) - ;; -;; [vstrwq_scatter_base_wb_s vstrdq_scatter_base_wb_u] +;; [vstrwq_scatter_base_wb_s vstrwq_scatter_base_wb_u] ;; -(define_insn "mve_vstrwq_scatter_base_wb_v4si_insn" +(define_insn "mve_vstrwq_scatter_base_wb_v4si" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V4SI 1 "s_register_operand" "0") @@ -9720,42 +9692,10 @@ } [(set_attr "length" "4")]) -(define_expand "mve_vstrwq_scatter_base_wb_p_v4si" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "w") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_wb = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_p_v4si_insn (ignore_wb, operands[0], - operands[1], operands[2], - operands[3])); - DONE; -}) - -(define_expand "mve_vstrwq_scatter_base_wb_p_add_v4si" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "0") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V4SI [(const_int 0)] VSTRWSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_vec = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_p_v4si_insn (operands[0], operands[2], - operands[1], ignore_vec, - operands[3])); - DONE; -}) - ;; ;; [vstrwq_scatter_base_wb_p_s vstrwq_scatter_base_wb_p_u] ;; -(define_insn "mve_vstrwq_scatter_base_wb_p_v4si_insn" +(define_insn "mve_vstrwq_scatter_base_wb_p_v4si" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V4SI 1 "s_register_operand" "0") @@ -9778,38 +9718,10 @@ } [(set_attr "length" "8")]) -(define_expand "mve_vstrwq_scatter_base_wb_fv4sf" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SF 2 "s_register_operand" "w") - (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" -{ - rtx ignore_wb = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_fv4sf_insn (ignore_wb,operands[0], - operands[1], operands[2])); - DONE; -}) - -(define_expand "mve_vstrwq_scatter_base_wb_add_fv4sf" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "0") - (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" -{ - rtx ignore_vec = gen_reg_rtx (V4SFmode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_fv4sf_insn (operands[0], operands[2], - operands[1], ignore_vec)); - DONE; -}) - ;; ;; [vstrwq_scatter_base_wb_f] ;; -(define_insn "mve_vstrwq_scatter_base_wb_fv4sf_insn" +(define_insn "mve_vstrwq_scatter_base_wb_fv4sf" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V4SI 1 "s_register_operand" "0") @@ -9831,42 +9743,10 @@ } [(set_attr "length" "4")]) -(define_expand "mve_vstrwq_scatter_base_wb_p_fv4sf" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SF 2 "s_register_operand" "w") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" -{ - rtx ignore_wb = gen_reg_rtx (V4SImode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_p_fv4sf_insn (ignore_wb, operands[0], - operands[1], operands[2], - operands[3])); - DONE; -}) - -(define_expand "mve_vstrwq_scatter_base_wb_p_add_fv4sf" - [(match_operand:V4SI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V4SI 2 "s_register_operand" "0") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V4SI [(const_int 0)] VSTRWQSBWB_F)] - "TARGET_HAVE_MVE && TARGET_HAVE_MVE_FLOAT" -{ - rtx ignore_vec = gen_reg_rtx (V4SFmode); - emit_insn ( - gen_mve_vstrwq_scatter_base_wb_p_fv4sf_insn (operands[0], operands[2], - operands[1], ignore_vec, - operands[3])); - DONE; -}) - ;; ;; [vstrwq_scatter_base_wb_p_f] ;; -(define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf_insn" +(define_insn "mve_vstrwq_scatter_base_wb_p_fv4sf" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V4SI 1 "s_register_operand" "0") @@ -9889,38 +9769,10 @@ } [(set_attr "length" "8")]) -(define_expand "mve_vstrdq_scatter_base_wb_v2di" - [(match_operand:V2DI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V2DI 2 "s_register_operand" "w") - (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_wb = gen_reg_rtx (V2DImode); - emit_insn ( - gen_mve_vstrdq_scatter_base_wb_v2di_insn (ignore_wb, operands[0], - operands[1], operands[2])); - DONE; -}) - -(define_expand "mve_vstrdq_scatter_base_wb_add_v2di" - [(match_operand:V2DI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V2DI 2 "s_register_operand" "0") - (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_vec = gen_reg_rtx (V2DImode); - emit_insn ( - gen_mve_vstrdq_scatter_base_wb_v2di_insn (operands[0], operands[2], - operands[1], ignore_vec)); - DONE; -}) - ;; ;; [vstrdq_scatter_base_wb_s vstrdq_scatter_base_wb_u] ;; -(define_insn "mve_vstrdq_scatter_base_wb_v2di_insn" +(define_insn "mve_vstrdq_scatter_base_wb_v2di" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V2DI 1 "s_register_operand" "0") @@ -9942,42 +9794,10 @@ } [(set_attr "length" "4")]) -(define_expand "mve_vstrdq_scatter_base_wb_p_v2di" - [(match_operand:V2DI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V2DI 2 "s_register_operand" "w") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_wb = gen_reg_rtx (V2DImode); - emit_insn ( - gen_mve_vstrdq_scatter_base_wb_p_v2di_insn (ignore_wb, operands[0], - operands[1], operands[2], - operands[3])); - DONE; -}) - -(define_expand "mve_vstrdq_scatter_base_wb_p_add_v2di" - [(match_operand:V2DI 0 "s_register_operand" "=w") - (match_operand:SI 1 "mve_vldrd_immediate" "Ri") - (match_operand:V2DI 2 "s_register_operand" "0") - (match_operand:HI 3 "vpr_register_operand") - (unspec:V2DI [(const_int 0)] VSTRDSBWBQ)] - "TARGET_HAVE_MVE" -{ - rtx ignore_vec = gen_reg_rtx (V2DImode); - emit_insn ( - gen_mve_vstrdq_scatter_base_wb_p_v2di_insn (operands[0], operands[2], - operands[1], ignore_vec, - operands[3])); - DONE; -}) - ;; ;; [vstrdq_scatter_base_wb_p_s vstrdq_scatter_base_wb_p_u] ;; -(define_insn "mve_vstrdq_scatter_base_wb_p_v2di_insn" +(define_insn "mve_vstrdq_scatter_base_wb_p_v2di" [(set (mem:BLK (scratch)) (unspec:BLK [(match_operand:V2DI 1 "s_register_operand" "0") @@ -9995,7 +9815,7 @@ ops[0] = operands[1]; ops[1] = operands[2]; ops[2] = operands[3]; - output_asm_insn ("vpst\;\tvstrdt.u64\t%q2, [%q0, %1]!",ops); + output_asm_insn ("vpst;vstrdt.u64\t%q2, [%q0, %1]!",ops); return ""; } [(set_attr "length" "8")]) diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c index 6570d4abd23ecfaf9d279760814fddeb848712f5..319188b706fb737aef49dfd3a6e64545a63f2087 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_s64.c @@ -10,12 +10,10 @@ foo (uint64x2_t * addr, const int offset, int64x2_t value, mve_pred16_t p) vstrdq_scatter_base_wb_p_s64 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrdt.u64" } } */ - void foo1 (uint64x2_t * addr, const int offset, int64x2_t value, mve_pred16_t p) { vstrdq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrdt.u64" } } */ +/* { dg-final { scan-assembler-times "vstrdt.u64\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c index 8444a3acd4c090f182bae7a8e144715f0dd56ba7..940b5421c840a1841d7e018abeef2342ab653f1b 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_p_u64.c @@ -10,12 +10,10 @@ foo (uint64x2_t * addr, const int offset, uint64x2_t value, mve_pred16_t p) vstrdq_scatter_base_wb_p_u64 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrdt.u64" } } */ - void foo1 (uint64x2_t * addr, const int offset, uint64x2_t value, mve_pred16_t p) { vstrdq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrdt.u64" } } */ +/* { dg-final { scan-assembler-times "vstrdt.u64\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c index e0ec283d10068da7db0847e11611adbcb386cfbc..33926d5c9e2e85188b222a9c903a966c52195fa5 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_s64.c @@ -10,12 +10,10 @@ foo (uint64x2_t * addr, const int offset, int64x2_t value) vstrdq_scatter_base_wb_s64 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrd.u64" } } */ - void foo1 (uint64x2_t * addr, const int offset, int64x2_t value) { vstrdq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrd.u64" } } */ +/* { dg-final { scan-assembler-times "vstrd.u64\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c index fe41d6b5c74514cdec25a69e9f44f3df3493342b..b7ffcf9b5dd13db0f4785c3ee55231ec2b75d240 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrdq_scatter_base_wb_u64.c @@ -10,12 +10,10 @@ foo (uint64x2_t * addr, const int offset, uint64x2_t value) vstrdq_scatter_base_wb_u64 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrd.u64" } } */ - void foo1 (uint64x2_t * addr, const int offset, uint64x2_t value) { vstrdq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrd.u64" } } */ +/* { dg-final { scan-assembler-times "vstrd.u64\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c index f4ceabb8680c5044dae38bea3af351d5cd5d6085..b2cc6e555aeb0ce5415cefe2970b8d7a711661f3 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_f32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, float32x4_t value) vstrwq_scatter_base_wb_f32 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, float32x4_t value) { vstrwq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ +/* { dg-final { scan-assembler-times "vstrw.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c index cb2eb685139fe0db53281136e1ba235988bc731a..4befd49d7b92b0fc4de4988db91f9eec7b3d33ec 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_f32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, float32x4_t value, mve_pred16_t p) vstrwq_scatter_base_wb_p_f32 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, float32x4_t value, mve_pred16_t p) { vstrwq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ +/* { dg-final { scan-assembler-times "vstrwt.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c index d973c021ba372ef31b493cca61655134def723d8..dfb1827c4f08232b63ceccf89b2604fec2890a3f 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_s32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, int32x4_t value, mve_pred16_t p) vstrwq_scatter_base_wb_p_s32 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, int32x4_t value, mve_pred16_t p) { vstrwq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ +/* { dg-final { scan-assembler-times "vstrwt.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c index c0f0964c657711b45b5ecdda6386ee3656bb221c..4eb78c600be9749fca86e289c67e388f78753532 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_p_u32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, uint32x4_t value, mve_pred16_t p) vstrwq_scatter_base_wb_p_u32 (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, uint32x4_t value, mve_pred16_t p) { vstrwq_scatter_base_wb_p (addr, 8, value, p); } -/* { dg-final { scan-assembler "vstrwt.u32" } } */ +/* { dg-final { scan-assembler-times "vstrwt.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c index 6ef095526e5eb21b3ed5d27c85566dadad07966e..618dbaf5aa69421ee80aca62904ce915306c54fd 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_s32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, const int offset, int32x4_t value) vstrwq_scatter_base_wb_s32 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ - void foo1 (uint32x4_t * addr, const int offset, int32x4_t value) { vstrwq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ +/* { dg-final { scan-assembler-times "vstrw.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */ diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c index 620dffa8391eb3685288128fdcd076672babc0d6..912a4590cf54b10a91caee8d4ccc24ce59ab7950 100644 --- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c +++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/vstrwq_scatter_base_wb_u32.c @@ -10,12 +10,10 @@ foo (uint32x4_t * addr, uint32x4_t value) vstrwq_scatter_base_wb_u32 (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ - void foo1 (uint32x4_t * addr, uint32x4_t value) { vstrwq_scatter_base_wb (addr, 8, value); } -/* { dg-final { scan-assembler "vstrw.u32" } } */ +/* { dg-final { scan-assembler-times "vstrw.u32\tq\[0-9\]+, \\\[q\[0-9\]+, #\[0-9\]+\\\]!" 2 } } */