Message ID | 20230118201649.11612-1-christophe.lyon@arm.com |
---|---|
State | Accepted |
Headers |
Return-Path: <gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp2545691wrn; Wed, 18 Jan 2023 12:25:41 -0800 (PST) X-Google-Smtp-Source: AMrXdXuGVHVndgX8ZjuobQY6iVL8MmivbNoLZ0MrZ5WFMRJBED5MFwVC1HoTnr6nuu5mvdN1BmMO X-Received: by 2002:a17:906:9506:b0:86b:1ccc:d434 with SMTP id u6-20020a170906950600b0086b1cccd434mr8127368ejx.67.1674073541843; Wed, 18 Jan 2023 12:25:41 -0800 (PST) Received: from sourceware.org (server2.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id xc2-20020a170907074200b0078dbd939dacsi14813330ejb.545.2023.01.18.12.25.41 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 18 Jan 2023 12:25:41 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) client-ip=8.43.85.97; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=ibInymuN; arc=fail (signature failed); spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 8.43.85.97 as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BA7DE3854811 for <ouuuleilei@gmail.com>; Wed, 18 Jan 2023 20:25:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BA7DE3854811 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1674073524; bh=gJbwu7tZcNTwfU8qCAOypOHE1io+oyB+piWqceK7lss=; h=To:CC:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=ibInymuNXm9DgTT6BgKQQpDMFs+CZ3tfyl5JE1oap8O1GsO4tdhje/jCkJ+sHvxtK RzjT7G6MEYR4EuFkLBdwaSTZEsselNAin6/XWJZFKwiOYsBvl1+qzpRHeQA1eGy0vF L5T/rM/pbaFr8dVeagh19qjh7dk4x+9RFoCmYDOw= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on2053.outbound.protection.outlook.com [40.107.6.53]) by sourceware.org (Postfix) with ESMTPS id 4898E3858C62 for <gcc-patches@gcc.gnu.org>; Wed, 18 Jan 2023 20:24:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4898E3858C62 Received: from AS8PR07CA0052.eurprd07.prod.outlook.com (2603:10a6:20b:459::13) by AS4PR08MB8022.eurprd08.prod.outlook.com (2603:10a6:20b:585::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.12; Wed, 18 Jan 2023 20:24:21 +0000 Received: from AM7EUR03FT051.eop-EUR03.prod.protection.outlook.com (2603:10a6:20b:459:cafe::57) by AS8PR07CA0052.outlook.office365.com (2603:10a6:20b:459::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6023.16 via Frontend Transport; Wed, 18 Jan 2023 20:24:21 +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 AM7EUR03FT051.mail.protection.outlook.com (100.127.140.64) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.13 via Frontend Transport; Wed, 18 Jan 2023 20:24:20 +0000 Received: ("Tessian outbound 43b0faad5a68:v132"); Wed, 18 Jan 2023 20:24:20 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 88869f5a6076239e X-CR-MTA-TID: 64aa7808 Received: from d39057d775c0.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id FF72C899-91C3-46A0-AC91-119E27F12F0B.1; Wed, 18 Jan 2023 20:17:11 +0000 Received: from EUR04-HE1-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d39057d775c0.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 18 Jan 2023 20:17:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KKMtkAgJ1n1BXK8hCzfFPilQl1a3+McbN0bLop0LMls+HxQ3T13b0mX/2X9V9GDiTBLEU0/ThO0RSDSK+Ua0Bzlh0Zi+rIk/sE+ocO69175xYeU4901qmeM8jt96GQ9HEU+GBbGECGwtFFr4ewx9V3U7/r7n82qImJgW7R4DeMlmkkdCsxF/Src96lkEFYcfx8/3vmm5NKYcmqru8MXim3zfmKhS2SxDZCahCxw4jVWt86r96lUvHorwoLMUbV6bQI5tTun/khkUfvobnnIIiR3JuWs0qBsQeEzCzXPg/gcOqp72KbrXpJn7oxdp0PTl/Yobs8sbQWfAoqh8G+UspA== 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=gJbwu7tZcNTwfU8qCAOypOHE1io+oyB+piWqceK7lss=; b=R6ZLo7hThJh0z+vBKshXs4FcRTb6NzhkJcU9d+hPGWE4h4WhwVn2N65vdX5h0MqwhCDaQPCkha01Z2dHEV9q+Zd5/S6AVrx6RtFSpzBDfTSKcs9pTOMx45dxz/g3bLxobqvOlCD1XR0cECyeQl1yjOw1AyuB4D/ZjDy+33Rh1exmyxcQpQkTMbMfRlcAw9KsQtAD3YX+N8WEDwvzoPhF/PTJydB9RZ9VsL3uFCV68wjnyfmmRkvJ0psISmpiOWuTFGdSDIl0KRkddvwn9iVQ9ptS4PYwJ1SMlxjYe6tmADAGzXTuL27fC9NJD+3mHHh5OY7AYYsQIRE35OTOSwQZcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none Received: from AM6P191CA0029.EURP191.PROD.OUTLOOK.COM (2603:10a6:209:8b::42) by PAVPR08MB8894.eurprd08.prod.outlook.com (2603:10a6:102:329::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5986.23; Wed, 18 Jan 2023 20:17:09 +0000 Received: from AM7EUR03FT021.eop-EUR03.prod.protection.outlook.com (2603:10a6:209:8b:cafe::e1) by AM6P191CA0029.outlook.office365.com (2603:10a6:209:8b::42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.24 via Frontend Transport; Wed, 18 Jan 2023 20:17:09 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 40.67.248.234) smtp.mailfrom=arm.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 40.67.248.234 as permitted sender) receiver=protection.outlook.com; client-ip=40.67.248.234; helo=nebula.arm.com; pr=C Received: from nebula.arm.com (40.67.248.234) by AM7EUR03FT021.mail.protection.outlook.com (100.127.140.243) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.20.6002.13 via Frontend Transport; Wed, 18 Jan 2023 20:17:09 +0000 Received: from AZ-NEU-EX04.Arm.com (10.251.24.32) by AZ-NEU-EX04.Arm.com (10.251.24.32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.16; Wed, 18 Jan 2023 20:17:08 +0000 Received: from e129018.arm.com (10.57.46.106) by mail.arm.com (10.251.24.32) with Microsoft SMTP Server id 15.1.2507.16 via Frontend Transport; Wed, 18 Jan 2023 20:17:08 +0000 To: <gcc-patches@gcc.gnu.org> CC: <richard.sandiford@arm.com>, <jakub@redhat.com>, Christophe Lyon <christophe.lyon@arm.com> Subject: [PATCH 1/2] aarch64: fix ICE in aarch64_layout_arg [PR108411] Date: Wed, 18 Jan 2023 21:16:48 +0100 Message-ID: <20230118201649.11612-1-christophe.lyon@arm.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-EOPAttributedMessage: 1 X-MS-TrafficTypeDiagnostic: AM7EUR03FT021:EE_|PAVPR08MB8894:EE_|AM7EUR03FT051:EE_|AS4PR08MB8022:EE_ X-MS-Office365-Filtering-Correlation-Id: f46fd376-bad8-4fa9-3316-08daf991fb67 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: 741kgl1TawRO6RmddALHr7EMjixq8AGkuKBeNh+nHBADCSwSIjcwD6H1LhFP1JBujrvVSAQAA9Z7L9WH5jQaNJ0cvoNBtjZBBhu4iR3d0WW5R8EwyCLM5J4RjrKnltDinO9K3Rm8Jf90ipfq7xjd6Slw6U5nyrufKwi2m69iDjQw0hSHr/gASj14RCJ34zhxT0VdDXSrPMgkzuwH3M1JNtHvnyL2P4fe/XrDqzQFAJO2fBZVLEGk7P2pgWJ+DqhIyDV76vQ45A4GjQ9JLLTeG1q6mgVnf3Phk784iAh220wBXgDzBO94Ktc86hk6hkcXWEr7mEVZ/e6bjV99jWtCsY+gXfncYRslcNqQMnjiKotEYQHQvhmqXQ5A5IR9m4sbEZKXubjjGHJaBXPNCRv6rPmtMBN9EoBdaif4s3EdIBDQCaYGulZvmjyISYMuMjbd6o+sDgLkTs9qMsy6YEAit2JwZ9kmieGqGJX2Pi6HQZX5NhfD0DjmzDuP/d40AifPnw8hCAc8dlE4QEjK6mj0fOv8wW69jXp1RFx8TBcNM3+Vsi4RuugPWVmBLFp4Jmz0ILWKEBfOUiJ8ADxkUYFedjoN5FqFffQoQ0wYSFKUZQpjSxyYRVJbIVGjQkL2qe0E/aldeeR8qtcf01ZRRVV4W8HAzKgB4IYSDZ4t1jO2uh2XDcGUJY7l4NYh8gnAqessUEQFfrlDphDgs5OnzVYbgBY2Vp4WrkngdIX6YNXPrmI= X-Forefront-Antispam-Report-Untrusted: CIP:40.67.248.234; CTRY:IE; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:nebula.arm.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230022)(4636009)(376002)(346002)(396003)(39860400002)(136003)(451199015)(46966006)(40470700004)(36840700001)(82310400005)(40480700001)(36756003)(40460700003)(47076005)(426003)(5660300002)(70206006)(44832011)(8936002)(70586007)(8676002)(478600001)(186003)(83380400001)(6666004)(336012)(4326008)(41300700001)(26005)(6916009)(1076003)(7696005)(54906003)(2616005)(316002)(86362001)(356005)(36860700001)(2906002)(82740400003)(81166007)(36900700001); DIR:OUT; SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB8894 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM7EUR03FT051.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 211a4f3f-dec5-40d5-1aff-08daf990fa2d X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5p2J2TG8k12LDWQ3aIbhHEqlruKiYY0+Kxv/4JBo04MbezEm/i4daQ8U9Eb8PSdrHsgOn2wljjXp8elZ54AHw+W5pdnobvut74+Cavwa7irVJje7SHnUZwFd5pHJ70mT64or4olelrxozDuPbX64L0JJKiV+JkkZH4/V6RHD7QVS6Xr4DvwQ3Hc+Rubab+cR29Hned21cQYCS97arXWUycx7t/JvvIlYuA0OlI09MfmqjxmHMRMk3BU+M8CK6p0irN/wJNJl6tIVWJIEuGjdM1qNsOIUwfAEK4S/VrMZagnGGyAHAWlMQabZ9lf6Gh7uWKZG6G9b3f6nJmM/lmx7ji2Ms5Aw0lQgySMBhAOx1JS3pDpN8SXdoNtTd42E5kBwJq29Cy8hgGGGIUuK7smSgmQ2BoQkjlWAFLOo1bKVKoDOZ7XPn+h/JYn0CUuYiw5sNBCbrEGvbHDK7EwUaKiW2Mwaeu0F2YlSnbof1ko8h9wdUnT+vzkEEg5X1p2QlkVvIqGS4BTWhpcvQ+NtmNXC3ubH6MI5LfWMPvtFTdWK29UkBm4qzRqO0njXJ5oGLxGmdxRVIrW4fHccY4fH4fg30EIEOV/0e4TpQ+dNAMMqz5WQJZSdjfvotui7a+1R9I5oNwM38N+9B+TmmUQzfsJoVBKL3YKqIMtxIythJsY/5MK8FlJCcfXLstvBsbgi98CPdvGPiWYgAgaiSNBeW3/8zQ== 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)(396003)(376002)(39860400002)(451199015)(40470700004)(46966006)(36840700001)(5660300002)(7696005)(54906003)(36756003)(2906002)(8936002)(4326008)(8676002)(44832011)(6916009)(86362001)(36860700001)(83380400001)(316002)(41300700001)(82740400003)(6666004)(40460700003)(26005)(186003)(478600001)(81166007)(70206006)(2616005)(1076003)(426003)(40480700001)(47076005)(336012)(70586007)(82310400005); DIR:OUT; SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2023 20:24:20.9140 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f46fd376-bad8-4fa9-3316-08daf991fb67 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: AM7EUR03FT051.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB8022 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FORGED_SPF_HELO, GIT_PATCH_0, KAM_DMARC_NONE, 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 <gcc-patches.gcc.gnu.org> List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe> List-Archive: <https://gcc.gnu.org/pipermail/gcc-patches/> List-Post: <mailto:gcc-patches@gcc.gnu.org> List-Help: <mailto:gcc-patches-request@gcc.gnu.org?subject=help> List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-patches>, <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe> From: Christophe Lyon via Gcc-patches <gcc-patches@gcc.gnu.org> Reply-To: Christophe Lyon <christophe.lyon@arm.com> Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" <gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org> X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755393338443858159?= X-GMAIL-MSGID: =?utf-8?q?1755393338443858159?= |
Series |
[1/2] aarch64: fix ICE in aarch64_layout_arg [PR108411]
|
|
Checks
Context | Check | Description |
---|---|---|
snail/gcc-patch-check | success | Github commit url |
Commit Message
Christophe Lyon
Jan. 18, 2023, 8:16 p.m. UTC
The previous patch added an assert which should not be applied to PST types (Pure Scalable Types) because alignment does not matter in this case. This patch moves the assert after the PST case is handled to avoid the ICE. PR target/108411 gcc/ * config/aarch64/aarch64.cc (aarch64_layout_arg): Improve comment. Move assert about alignment a bit later. --- gcc/config/aarch64/aarch64.cc | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-)
Comments
Christophe Lyon <christophe.lyon@arm.com> writes: > The previous patch added an assert which should not be applied to PST > types (Pure Scalable Types) because alignment does not matter in this > case. This patch moves the assert after the PST case is handled to > avoid the ICE. > > PR target/108411 > gcc/ > * config/aarch64/aarch64.cc (aarch64_layout_arg): Improve > comment. Move assert about alignment a bit later. > --- > gcc/config/aarch64/aarch64.cc | 28 +++++++++++++++++++++------- > 1 file changed, 21 insertions(+), 7 deletions(-) > > diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc > index d36b57341b3..7175b453b3a 100644 > --- a/gcc/config/aarch64/aarch64.cc > +++ b/gcc/config/aarch64/aarch64.cc > @@ -7659,7 +7659,18 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) > && (currently_expanding_function_start > || currently_expanding_gimple_stmt)); > > - /* There are several things to note here: > + /* HFAs and HVAs can have an alignment greater than 16 bytes. For example: > + > + typedef struct foo { > + __Int8x16_t foo[2] __attribute__((aligned(32))); > + } foo; > + > + is still a HVA despite its larger-than-normal alignment. > + However, such over-aligned HFAs and HVAs are guaranteed to have > + no padding. > + > + If we exclude HFAs and HVAs from the discussion below, then there > + are several things to note: > > - Both the C and AAPCS64 interpretations of a type's alignment should > give a value that is no greater than the type's size. > @@ -7704,12 +7715,6 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) > would treat the alignment as though it was *equal to* 16 bytes. > > Both behaviors were wrong, but in different cases. */ > - unsigned int alignment > - = aarch64_function_arg_alignment (mode, type, &abi_break, > - &abi_break_packed); > - gcc_assert (alignment <= 16 * BITS_PER_UNIT > - && (!alignment || abi_break < alignment) > - && (!abi_break_packed || alignment < abi_break_packed)); > > pcum->aapcs_arg_processed = true; > > @@ -7780,6 +7785,15 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) > &nregs); > gcc_assert (!sve_p || !allocate_nvrn); > > + unsigned int alignment > + = aarch64_function_arg_alignment (mode, type, &abi_break, > + &abi_break_packed); > + > + gcc_assert (allocate_nvrn || (alignment <= 16 * BITS_PER_UNIT > + && (!alignment || abi_break < alignment) > + && (!abi_break_packed > + || alignment < abi_break_packed))); I think allocate_nvrn should only circumvent the first part, so: gcc_assert ((allocate_nvrn || alignment <= 16 * BITS_PER_UNIT) && (!alignment || abi_break < alignment) && (!abi_break_packed || alignment < abi_break_packed)); OK with that change, and sorry for not thinking about this originally. Richard > + > /* allocate_ncrn may be false-positive, but allocate_nvrn is quite reliable. > The following code thus handles passing by SIMD/FP registers first. */
On 1/19/23 10:22, Richard Sandiford wrote: > Christophe Lyon <christophe.lyon@arm.com> writes: >> The previous patch added an assert which should not be applied to PST >> types (Pure Scalable Types) because alignment does not matter in this >> case. This patch moves the assert after the PST case is handled to >> avoid the ICE. >> >> PR target/108411 >> gcc/ >> * config/aarch64/aarch64.cc (aarch64_layout_arg): Improve >> comment. Move assert about alignment a bit later. >> --- >> gcc/config/aarch64/aarch64.cc | 28 +++++++++++++++++++++------- >> 1 file changed, 21 insertions(+), 7 deletions(-) >> >> diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc >> index d36b57341b3..7175b453b3a 100644 >> --- a/gcc/config/aarch64/aarch64.cc >> +++ b/gcc/config/aarch64/aarch64.cc >> @@ -7659,7 +7659,18 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) >> && (currently_expanding_function_start >> || currently_expanding_gimple_stmt)); >> >> - /* There are several things to note here: >> + /* HFAs and HVAs can have an alignment greater than 16 bytes. For example: >> + >> + typedef struct foo { >> + __Int8x16_t foo[2] __attribute__((aligned(32))); >> + } foo; >> + >> + is still a HVA despite its larger-than-normal alignment. >> + However, such over-aligned HFAs and HVAs are guaranteed to have >> + no padding. >> + >> + If we exclude HFAs and HVAs from the discussion below, then there >> + are several things to note: >> >> - Both the C and AAPCS64 interpretations of a type's alignment should >> give a value that is no greater than the type's size. >> @@ -7704,12 +7715,6 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) >> would treat the alignment as though it was *equal to* 16 bytes. >> >> Both behaviors were wrong, but in different cases. */ >> - unsigned int alignment >> - = aarch64_function_arg_alignment (mode, type, &abi_break, >> - &abi_break_packed); >> - gcc_assert (alignment <= 16 * BITS_PER_UNIT >> - && (!alignment || abi_break < alignment) >> - && (!abi_break_packed || alignment < abi_break_packed)); >> >> pcum->aapcs_arg_processed = true; >> >> @@ -7780,6 +7785,15 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) >> &nregs); >> gcc_assert (!sve_p || !allocate_nvrn); >> >> + unsigned int alignment >> + = aarch64_function_arg_alignment (mode, type, &abi_break, >> + &abi_break_packed); >> + >> + gcc_assert (allocate_nvrn || (alignment <= 16 * BITS_PER_UNIT >> + && (!alignment || abi_break < alignment) >> + && (!abi_break_packed >> + || alignment < abi_break_packed))); > > I think allocate_nvrn should only circumvent the first part, so: > > gcc_assert ((allocate_nvrn || alignment <= 16 * BITS_PER_UNIT) > && (!alignment || abi_break < alignment) > && (!abi_break_packed || alignment < abi_break_packed)); > > > OK with that change, and sorry for not thinking about this originally. OK thanks, now committed with that change (and after checking the testsuite still passes :-) ) Christophe > > Richard > >> + >> /* allocate_ncrn may be false-positive, but allocate_nvrn is quite reliable. >> The following code thus handles passing by SIMD/FP registers first. */
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc index d36b57341b3..7175b453b3a 100644 --- a/gcc/config/aarch64/aarch64.cc +++ b/gcc/config/aarch64/aarch64.cc @@ -7659,7 +7659,18 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) && (currently_expanding_function_start || currently_expanding_gimple_stmt)); - /* There are several things to note here: + /* HFAs and HVAs can have an alignment greater than 16 bytes. For example: + + typedef struct foo { + __Int8x16_t foo[2] __attribute__((aligned(32))); + } foo; + + is still a HVA despite its larger-than-normal alignment. + However, such over-aligned HFAs and HVAs are guaranteed to have + no padding. + + If we exclude HFAs and HVAs from the discussion below, then there + are several things to note: - Both the C and AAPCS64 interpretations of a type's alignment should give a value that is no greater than the type's size. @@ -7704,12 +7715,6 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) would treat the alignment as though it was *equal to* 16 bytes. Both behaviors were wrong, but in different cases. */ - unsigned int alignment - = aarch64_function_arg_alignment (mode, type, &abi_break, - &abi_break_packed); - gcc_assert (alignment <= 16 * BITS_PER_UNIT - && (!alignment || abi_break < alignment) - && (!abi_break_packed || alignment < abi_break_packed)); pcum->aapcs_arg_processed = true; @@ -7780,6 +7785,15 @@ aarch64_layout_arg (cumulative_args_t pcum_v, const function_arg_info &arg) &nregs); gcc_assert (!sve_p || !allocate_nvrn); + unsigned int alignment + = aarch64_function_arg_alignment (mode, type, &abi_break, + &abi_break_packed); + + gcc_assert (allocate_nvrn || (alignment <= 16 * BITS_PER_UNIT + && (!alignment || abi_break < alignment) + && (!abi_break_packed + || alignment < abi_break_packed))); + /* allocate_ncrn may be false-positive, but allocate_nvrn is quite reliable. The following code thus handles passing by SIMD/FP registers first. */