From patchwork Tue Jan 30 17:44:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Coplan X-Patchwork-Id: 85039 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 C07DA38582BE for ; Tue, 30 Jan 2024 17:45:06 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on2064.outbound.protection.outlook.com [40.107.105.64]) by sourceware.org (Postfix) with ESMTPS id 1C2333858CDA for ; Tue, 30 Jan 2024 17:44:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1C2333858CDA 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 1C2333858CDA Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.105.64 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1706636669; cv=pass; b=v3LzDC91T2tPSpRWBKJ8Ow/P7rrgIJ0NBsPiw9K+vdVeyH/WP/7BxAMbEAE/yRBAvktn+4MXfE1/oxJlr+ofsiOM+l3xEIuc2LodYptOpzVaqHHOkPoqI0fc7IY4zvTi3USRwfUzwf7IW9mQIw240rqbIgpSYBjKbUOAXg097m0= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1706636669; c=relaxed/simple; bh=sEiyuxg7JyXB9kaUKRFwMs0KspjDVW0szhnhPBLHMU0=; h=DKIM-Signature:DKIM-Signature:Date:From:To:Subject:Message-ID: MIME-Version; b=k4UsSuKZUX9CW80fRdOl80XaonFWmKT/4qErKnLY93aGZAtcwBhysKyiGUuOuloN6xXGEceNZtF0M+JNzyUTIgIJL90/8+SMpuiatWrchZoSv6FahLKCkai56D0hFpwWjqGUDimFBcjPIsgDT9nYpFlZTsjZ+/7rHzV6upQyTMg= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=BqSULU0x8FtcrKUJbLP2deQvBahm7lq0vvzUeQBV0Pz0wjo3E3Hqmk5EzsoXUkIdVw+Ms4E+v4KtMc3mkDRe+wmGuN8AMiMDoOtxIaHWzen6IngJp7CBtxMohf5j2rPye5UzbS3opczse6f66AUfN6a1S9BsEAvcg3JSA1dqJJyNuV6V2F8TMDeRFfnsq2qNM1yZUPw9QtNV9x81qR6HRqgKBYDefHU0IXWILft1TyIfH6rS1c7UC0IQSUkUAvUmkgAJLX+uOchjNFSH9qVitK6p0TBbujfAntiosVm7kpRoRkE7/pss2YIHytyz0Qi747Y/lF+vDPyMVtYq8r9SDA== 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=urKFXYGloeGHhin5bARzrhT0wkrM1jkKVkziw0Oigc0=; b=S25VH93CVnx/+BTwsUdOzfeX3znKKQPSwHq4wO4TMBhq/VLluRvdhA6Jufry+AXmQZRtLgtyomUSrwnt6JO8k8e9fwg7vKCYfByJqTapjPp2YxYLXGsjg4ueWjBwI4pmulphUJaa8aR7RyNMtR7jYrNhw7qxj9L+jq/tqC7cXodr/71vPWH4Qa8Tapm8xwzos0BcJOKfR2dJNOLlY568NEysqFiOSvQU+hVqiiWhFrFh1U+UTnIAWnj42pW1NWRsaqAzH3FC5iua5vNpoX0rqYtlLsZnPn8wKw3d/KMxHtyrqnw11sPQyt+P6S3Vc0MYNAimic2Anneqy4laWipQUQ== 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]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=urKFXYGloeGHhin5bARzrhT0wkrM1jkKVkziw0Oigc0=; b=NitPya6EtzqstqGZX2MVFZwzE6rfKYe/L+T+DT/du/q6+zq7rZ31S4uE40FyYYJs4GK9+gyMFV796Twbga3xk0t0UIEmsFO9QahFFD9WbCeZ+w/feq5JhneJ0hezdOzdThB66DAv4U1W1Vol53tORHPdN/UVNK4hlA6JzcDt7YI= Received: from AS4P195CA0039.EURP195.PROD.OUTLOOK.COM (2603:10a6:20b:65a::15) by DBBPR08MB6235.eurprd08.prod.outlook.com (2603:10a6:10:201::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.32; Tue, 30 Jan 2024 17:44:24 +0000 Received: from AM3PEPF0000A78E.eurprd04.prod.outlook.com (2603:10a6:20b:65a:cafe::17) by AS4P195CA0039.outlook.office365.com (2603:10a6:20b:65a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7228.34 via Frontend Transport; Tue, 30 Jan 2024 17:44:24 +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 AM3PEPF0000A78E.mail.protection.outlook.com (10.167.16.117) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.19 via Frontend Transport; Tue, 30 Jan 2024 17:44:24 +0000 Received: ("Tessian outbound c4f080b252bb:v228"); Tue, 30 Jan 2024 17:44:24 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: f56dd07968aa9f6a X-CR-MTA-TID: 64aa7808 Received: from ef8accbd4098.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 9F8215B8-1FFA-47CA-BF05-DDB026370A0F.1; Tue, 30 Jan 2024 17:44:16 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ef8accbd4098.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Tue, 30 Jan 2024 17:44:16 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EoEpW0nxCfshWz203CLKqzSeZku8xsCLsQnPgLnMTMx01opEfORgu2nA7ENpf9fHjEvIi78UmAcTrQvAwWnydLDwZ5JfSdlcaoTGiGYuBu1KSxHdyHfwR4hDDkQYXEBovzGyiHjg7NmGTAj3sencJYmHmd9iIgmBM96kQL8x3PceD8z1J91Di69r0KiLQlTNROHvLF0tW61pDsSKTz3cu7oMrPnhu6bRByOe9S0T6MZjCXnttbWAuLuK5MoF2SaE75+DsZJeAnbIwLB1XQtg+6io6NzSJW3Y5Mpq+Wes+DNXxnG/wdd3bt+gXAjXqw35t9ht3OmhDb08lMVn/k5SvQ== 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=urKFXYGloeGHhin5bARzrhT0wkrM1jkKVkziw0Oigc0=; b=A+RfwdEADAFhv4SvoPSpa76r9enzVl1gASS6g9V3KO1UBCvtXwd9G/rD4YqcddF0Bw1rD7ghUT7caqg1jzrpN3+XWzOg0aeltRW6Ele43q7kSkNFhVbzU4sqgbeyR/baeg+uoypS0f3mBvUTMDYHJDDjKH5D57M4FxXJh4H17TZ7Tt8NSBEhS6wQg692PkkXXfHpYTh9MH3k+HgbhsoG5E4MbumiemnPMjcEVdUWLhheAmbe/pp/YdJwFTbcozpnjye2he57hiiSO0NR5v8Er+7wmZijoInbSLzgW3d/C0adjKduShEnOGnogGa3BQbgeq8NBo+ejdTR9+tT0V9aNA== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=urKFXYGloeGHhin5bARzrhT0wkrM1jkKVkziw0Oigc0=; b=NitPya6EtzqstqGZX2MVFZwzE6rfKYe/L+T+DT/du/q6+zq7rZ31S4uE40FyYYJs4GK9+gyMFV796Twbga3xk0t0UIEmsFO9QahFFD9WbCeZ+w/feq5JhneJ0hezdOzdThB66DAv4U1W1Vol53tORHPdN/UVNK4hlA6JzcDt7YI= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from PAWPR08MB8958.eurprd08.prod.outlook.com (2603:10a6:102:33e::15) by DBAPR08MB5733.eurprd08.prod.outlook.com (2603:10a6:10:1b3::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7249.22; Tue, 30 Jan 2024 17:44:15 +0000 Received: from PAWPR08MB8958.eurprd08.prod.outlook.com ([fe80::48ca:fbcb:84bf:ed17]) by PAWPR08MB8958.eurprd08.prod.outlook.com ([fe80::48ca:fbcb:84bf:ed17%4]) with mapi id 15.20.7228.029; Tue, 30 Jan 2024 17:44:15 +0000 Date: Tue, 30 Jan 2024 17:44:11 +0000 From: Alex Coplan To: gcc-patches@gcc.gnu.org Cc: Richard Earnshaw , Richard Sandiford , Kyrylo Tkachov Subject: [PATCH][GCC 13] aarch64: Avoid out-of-range shrink-wrapped saves [PR111677] Message-ID: Content-Disposition: inline X-ClientProxiedBy: LO4P265CA0151.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2c7::6) To PAWPR08MB8958.eurprd08.prod.outlook.com (2603:10a6:102:33e::15) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: PAWPR08MB8958:EE_|DBAPR08MB5733:EE_|AM3PEPF0000A78E:EE_|DBBPR08MB6235:EE_ X-MS-Office365-Filtering-Correlation-Id: d93ecb79-be3e-472e-2a71-08dc21bb190b 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: 33ZZc6dnkWYooErK8KFfevKFnx0KoaC2O0UDny6r7jHMbOJJ87yeR7GEl0YedqB9hRl1ggoq/xtdb67mRYbsvH4oyxpBoeXUiWueV9qtTleNWd8RvUde/bpIWSV27v1NTOUahR9T3jRfptqt1IHmHpTW/ORrXFsDwBOBODN0GM9GDb/aAApn2T50TdNbIteXDvACxMjgNVm2+jw9MWkHzbdH1/Xt7maUGwMnuvC32s57HYRB/lhLHrO0MCFPk4f4Iur1gSiBmBrwKIiYbd6OK7u0c36Btn5hmriYUrRo8+hEGYZlP2JB/FSfv2xZJjheTFVbJ8jyFalzezO/DUbSKn/yb7v44D1hxskY+e5D+CD6njAZ6o9XivNBGpEICGP5jCZ/y4miFKJ9t1/4ysMuWZ9Y2D7RJv70oAsPjcSAdGyA2StzEn0X7AnpZA1oAWDuYhB8LZST4deAxXC0/kIq2gcIub4d0mt5zH7hW5we0hosTCkgxff/EODxX7Ix4GTT2K31RqrDMiE30/ZqQ3CL1hvB/1uQdBiDHOhTP80r1g388fUbUYVJOW6H7CMDE1spVT41b6dZf41kN5/HlNt4zuQKq9OQG0LC+wX13fk9Ez5SPpIO+X+hJWfWmoNvsp6MNhUs1DX6exV8TrlsmLzcVw== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PAWPR08MB8958.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(396003)(376002)(39860400002)(366004)(346002)(136003)(230922051799003)(1800799012)(186009)(451199024)(64100799003)(2616005)(41300700001)(84970400001)(36756003)(26005)(33964004)(478600001)(6506007)(6666004)(6512007)(966005)(21480400003)(6486002)(44144004)(38100700002)(54906003)(86362001)(5660300002)(2906002)(4326008)(6916009)(316002)(66476007)(66556008)(66946007)(44832011)(235185007)(8676002)(8936002)(2700100001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBAPR08MB5733 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: AM3PEPF0000A78E.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: fb134feb-6612-4dd6-30a4-08dc21bb1380 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1BZ59XmlEcNGtP0cG9rQGzmkbZ1qtVrLdNxyW3fsSyuF9fQkFMvgyvBE1BM32JdHsg7lCBhuOkzXjux3Rdj0ilGfjbxNL2wm+iOp+z/luQxKZPrydc7e5RCQJkr3QVWK1lJ3mKuyZ47xl/U7KmZm+xOsCcnrceLftjfPSf5h3MxaTFUfZgew5zVfe6KWOHNoNq+UiNjyR2pqO3I5x068k9y2ROdZ2NT6IC4d4ixg4shTS/cF0MjBJmF8Eq2Lj0kFLEnNnlv9ZCHs56yxKDitjmS9p1TmxWd9LhOGN/4Kn3X9IZfvNJvsEJBfp6OEVXuA5zt56JHrq8N2Q+PrGXT8UX2CUOAXrzTUes48OKXNOZQy9WTyRYzYx1A5nxhRs/ktg6wJA4q2oCkH+/IHX3piwY8gmDxuoNwDDvw7Yq9c4scKsNU3JvLuvKUDKv5weWb9LEExvfNOySagdJU3Qsq3dxFivZ+CDVHsq4Yotjl3Y+JqDKS4VGNeWDzYO43sUwuyBrlUjnS7W/1gJjV5WSn1FMY701JlDgsvnAU/uuEBSwGjiPqGOUe7srB+LhdUaRrETfIYCu4eCdkNfpEADf039YkmlpVp6R0tYfpM2tpkPanl+Ucv8z+bNLHylqypkVoAsxJYOXln86K7tjdw1k+PZHGBckuCkU9KyWmr1GXUX2Z8kPmOtAM3W5ZCKB4l4rhPqatPRLV8tZ4QSXOqiP6iDMqijuWolasPQx6lCZJcxdOnyp1cNO7WVHjNQgJx1HVXunIzgubylHllVJ++U571NpvdYu2+Rt23E+uaqPaXdCA= 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:(13230031)(4636009)(346002)(39860400002)(376002)(136003)(396003)(230922051799003)(451199024)(1800799012)(186009)(82310400011)(64100799003)(36840700001)(40470700004)(46966006)(47076005)(21480400003)(336012)(26005)(235185007)(6512007)(36860700001)(2616005)(81166007)(44832011)(8936002)(4326008)(5660300002)(966005)(6506007)(54906003)(2906002)(8676002)(478600001)(41300700001)(70586007)(44144004)(82740400003)(33964004)(6666004)(6916009)(6486002)(316002)(70206006)(356005)(86362001)(36756003)(40460700003)(84970400001)(40480700001)(2700100001); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2024 17:44:24.1905 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: d93ecb79-be3e-472e-2a71-08dc21bb190b 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: AM3PEPF0000A78E.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6235 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE, 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.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 Bootstrapped/regtested on aarch64-linux-gnu, OK for the 13 branch after a week of the trunk fix being in? OK for the other active branches if the same changes test cleanly there? GCC 14 patch for reference: https://gcc.gnu.org/pipermail/gcc-patches/2024-January/644441.html Thanks, Alex -- >8 -- The PR shows us ICEing due to an unrecognizable TFmode save emitted by aarch64_process_components. The problem is that for T{I,F,D}mode we conservatively require mems to be in range for x-register ldp/stp. That is because (at least for TImode) it can be allocated to both GPRs and FPRs, and in the GPR case that is an x-reg ldp/stp, and the FPR case is a q-register load/store. As Richard pointed out in the PR, aarch64_get_separate_components already checks that the offsets are suitable for a single load, so we just need to choose a mode in aarch64_reg_save_mode that gives the full q-register range. In this patch, we choose V16QImode as an alternative 16-byte "bag-of-bits" mode that doesn't have the artificial range restrictions imposed on T{I,F,D}mode. For T{F,D}mode in GCC 15 I think we could consider relaxing the restriction imposed in aarch64_classify_address, as AFAIK T{F,D}mode can only be allocated to FPRs (unlike TImode). But such a change seems too invasive to consider for GCC 14 at this stage (let alone backports). Unlike for GCC 14 we need additional handling in the load/store pair code as various cases are not expecting to see V16QImode (particularly the writeback patterns, but also aarch64_gen_load_pair). gcc/ChangeLog: PR target/111677 * config/aarch64/aarch64.cc (aarch64_reg_save_mode): Use V16QImode for the full 16-byte FPR saves in the vector PCS case. (aarch64_gen_storewb_pair): Handle V16QImode. (aarch64_gen_loadwb_pair): Likewise. (aarch64_gen_load_pair): Likewise. * config/aarch64/aarch64.md (loadwb_pair_): Rename to ... (loadwb_pair_): ... this, extending to V16QImode. (storewb_pair_): Rename to ... (storewb_pair_): ... this, extending to V16QImode. * config/aarch64/iterators.md (TX_V16QI): New. gcc/testsuite/ChangeLog: PR target/111677 * gcc.target/aarch64/torture/pr111677.c: New test. diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index 02515d4683a..f546c48ae2d 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -4074,7 +4074,7 @@ aarch64_reg_save_mode (unsigned int regno) case ARM_PCS_SIMD: /* The vector PCS saves the low 128 bits (which is the full register on non-SVE targets). */ - return TFmode; + return V16QImode; case ARM_PCS_SVE: /* Use vectors of DImode for registers that need frame @@ -8863,6 +8863,10 @@ aarch64_gen_storewb_pair (machine_mode mode, rtx base, rtx reg, rtx reg2, return gen_storewb_pairtf_di (base, base, reg, reg2, GEN_INT (-adjustment), GEN_INT (UNITS_PER_VREG - adjustment)); + case E_V16QImode: + return gen_storewb_pairv16qi_di (base, base, reg, reg2, + GEN_INT (-adjustment), + GEN_INT (UNITS_PER_VREG - adjustment)); default: gcc_unreachable (); } @@ -8908,6 +8912,10 @@ aarch64_gen_loadwb_pair (machine_mode mode, rtx base, rtx reg, rtx reg2, case E_TFmode: return gen_loadwb_pairtf_di (base, base, reg, reg2, GEN_INT (adjustment), GEN_INT (UNITS_PER_VREG)); + case E_V16QImode: + return gen_loadwb_pairv16qi_di (base, base, reg, reg2, + GEN_INT (adjustment), + GEN_INT (UNITS_PER_VREG)); default: gcc_unreachable (); } @@ -8991,6 +8999,9 @@ aarch64_gen_load_pair (machine_mode mode, rtx reg1, rtx mem1, rtx reg2, case E_V4SImode: return gen_load_pairv4siv4si (reg1, mem1, reg2, mem2); + case E_V16QImode: + return gen_load_pairv16qiv16qi (reg1, mem1, reg2, mem2); + default: gcc_unreachable (); } diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md index 50239d72fc0..922cc987595 100644 --- a/gcc/config/aarch64/aarch64.md +++ b/gcc/config/aarch64/aarch64.md @@ -1896,17 +1896,18 @@ (define_insn "loadwb_pair_" [(set_attr "type" "neon_load1_2reg")] ) -(define_insn "loadwb_pair_" +(define_insn "loadwb_pair_" [(parallel [(set (match_operand:P 0 "register_operand" "=k") - (plus:P (match_operand:P 1 "register_operand" "0") - (match_operand:P 4 "aarch64_mem_pair_offset" "n"))) - (set (match_operand:TX 2 "register_operand" "=w") - (mem:TX (match_dup 1))) - (set (match_operand:TX 3 "register_operand" "=w") - (mem:TX (plus:P (match_dup 1) + (plus:P (match_operand:P 1 "register_operand" "0") + (match_operand:P 4 "aarch64_mem_pair_offset" "n"))) + (set (match_operand:TX_V16QI 2 "register_operand" "=w") + (mem:TX_V16QI (match_dup 1))) + (set (match_operand:TX_V16QI 3 "register_operand" "=w") + (mem:TX_V16QI (plus:P (match_dup 1) (match_operand:P 5 "const_int_operand" "n"))))])] - "TARGET_SIMD && INTVAL (operands[5]) == GET_MODE_SIZE (mode)" + "TARGET_SIMD + && known_eq (INTVAL (operands[5]), GET_MODE_SIZE (mode))" "ldp\\t%q2, %q3, [%1], %4" [(set_attr "type" "neon_ldp_q")] ) @@ -1945,20 +1946,20 @@ (define_insn "storewb_pair_" [(set_attr "type" "neon_store1_2reg")] ) -(define_insn "storewb_pair_" +(define_insn "storewb_pair_" [(parallel [(set (match_operand:P 0 "register_operand" "=&k") - (plus:P (match_operand:P 1 "register_operand" "0") - (match_operand:P 4 "aarch64_mem_pair_offset" "n"))) - (set (mem:TX (plus:P (match_dup 0) + (plus:P (match_operand:P 1 "register_operand" "0") + (match_operand:P 4 "aarch64_mem_pair_offset" "n"))) + (set (mem:TX_V16QI (plus:P (match_dup 0) (match_dup 4))) - (match_operand:TX 2 "register_operand" "w")) - (set (mem:TX (plus:P (match_dup 0) + (match_operand:TX_V16QI 2 "register_operand" "w")) + (set (mem:TX_V16QI (plus:P (match_dup 0) (match_operand:P 5 "const_int_operand" "n"))) - (match_operand:TX 3 "register_operand" "w"))])] + (match_operand:TX_V16QI 3 "register_operand" "w"))])] "TARGET_SIMD - && INTVAL (operands[5]) - == INTVAL (operands[4]) + GET_MODE_SIZE (mode)" + && known_eq (INTVAL (operands[5]), + INTVAL (operands[4]) + GET_MODE_SIZE (mode))" "stp\\t%q2, %q3, [%0, %4]!" [(set_attr "type" "neon_stp_q")] ) diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md index 6cbc97cc82c..86a196d3536 100644 --- a/gcc/config/aarch64/iterators.md +++ b/gcc/config/aarch64/iterators.md @@ -313,6 +313,9 @@ (define_mode_iterator VS [V2SI V4SI]) (define_mode_iterator TX [TI TF TD]) +;; TX plus V16QImode. +(define_mode_iterator TX_V16QI [TI TF TD V16QI]) + (define_mode_iterator VTX [TI TF TD V16QI V8HI V4SI V2DI V8HF V4SF V2DF V8BF]) ;; Advanced SIMD opaque structure modes. diff --git a/gcc/testsuite/gcc.target/aarch64/torture/pr111677.c b/gcc/testsuite/gcc.target/aarch64/torture/pr111677.c new file mode 100644 index 00000000000..6bb640c42c0 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/torture/pr111677.c @@ -0,0 +1,28 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target fopenmp } */ +/* { dg-options "-ffast-math -fstack-protector-strong -fopenmp" } */ +typedef struct { + long size_z; + int width; +} dt_bilateral_t; +typedef float dt_aligned_pixel_t[4]; +#pragma omp declare simd +void dt_bilateral_splat(dt_bilateral_t *b) { + float *buf; + long offsets[8]; + for (; b;) { + int firstrow; + for (int j = firstrow; j; j++) + for (int i; i < b->width; i++) { + dt_aligned_pixel_t contrib; + for (int k = 0; k < 4; k++) + buf[offsets[k]] += contrib[k]; + } + float *dest; + for (int j = (long)b; j; j++) { + float *src = (float *)b->size_z; + for (int i = 0; i < (long)b; i++) + dest[i] += src[i]; + } + } +}