From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2076.outbound.protection.outlook.com [40.107.21.76]) by sourceware.org (Postfix) with ESMTPS id 48BF63857017 for ; Thu, 9 Nov 2023 11:26:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 48BF63857017 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 48BF63857017 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.21.76 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1699529178; cv=pass; b=s8GNrxQUe+KNwqwxNGFVNtDoRUKqtREMSDF+5Cf4mxx+XkjRNRQkT1gSJkS3FvJ2b2F8Y527jBAzvBi6NLMo12Qm7ao/I0mzm8kh4yYJANNYX4TatQlgOLZ1wS6go28GUw2+OLhsvdsZWx1DCn5nXw0c8vf6yTcb+0PqhCZqqWY= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1699529178; c=relaxed/simple; bh=UHUX69cvwSTR0rNICagnjtW3XjZtlwfFFt3yFpqLuWA=; h=DKIM-Signature:DKIM-Signature:Date:From:To:Subject:Message-ID: MIME-Version; b=xLvcYtbvVpBqYXZtAdZ+VQGbMK7qHhRXal1rR5ME+8Qb16Ok5vN8EBLkuybJszJxmcyZAo/5xjzQxlqDG3/o/7nbYMJVszz8TqIe5/XMtTY761L93dQpDwtMwxsQUvEf19msW9QScqBNHErtT6DlPk7T/uwD7OevychH5tZVJJc= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=WHck6YjlzGsRhtXF2mYOvRGixhE/XGUT/JtJH9bqYzOug65yIKtfbfq1t380orMTZ2rmHjFUMO26osRtX8gQCeWZWU8+xEUsAWiHTO+XUtDEazah0hzwhVsurIP+bvFZgPXnpLi7xt2Uhd8YWKGtlzNgeb64QAAjgaxUN0B+Fwuy6hk+h2J6KW36HEZ0gjSOo6q8LFXt5pLWrJfNaF/8vx+AconP+0KzmVxHT+az5xpPbmsksr2BR9mwpNfZIMkSatONz35qNNdnjeeKhrZZyqu2dDIgBFU5Dhv8F9EmWhTZexsVV8nkSBnx7W/Wj+i7YA+mwJwyn527w5Oscr8LYQ== 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=XfF0efaFWlRivDWtHeLSuV9W30W3+0KpCpld3Dk/p7s=; b=UYSyOUEvo/1O+bIK3+LIx8fHq2+o3YEzekmHF5KDFPCwCInZQBBViSKYJ6HbDwvfpgTL1u5KGNz4kjXC1nj/bYXUzkFTl7PP7Vo/lQ80RjSU+22WKPxvOakJNvXIPvjh0IP2cwWfvKow4r3f/i4LNtBr4HAn81b3WCPhD9/CPy+19GRYT9RPtXfhPCrNszeAWrc+wLp1BpRumXKxcmSzWuJXsuRTdsIa08M/UykrrtH/mCCXVdb+Mn/sjOG1EtLGdSX2lWl0M3QG3ucdJsJjsz9JEfBXwbsqrsRSLO51L9hG3+phgrKK3yTxNEFtIKrnfEp28ZsXFSmHNQg67BNsXw== 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=XfF0efaFWlRivDWtHeLSuV9W30W3+0KpCpld3Dk/p7s=; b=vjU6XwOteKOpqKNNV5BDk+jqp1xO5akO3C5I62xiP+LPv6jZkdBhR/ZB4rYS2jokONiO8qF/+wCxsn9VmniheJWshVjH5QQ9F4/qcuB0PdedLQ/9Z82VLSOD2TP3OZFu8S6rKNTN7ZVxNii/6fbku/Z9j7Xa1C1LVTbN83iajOI= Received: from AS9PR05CA0012.eurprd05.prod.outlook.com (2603:10a6:20b:488::30) by PAXPR08MB6541.eurprd08.prod.outlook.com (2603:10a6:102:15a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28; Thu, 9 Nov 2023 11:26:13 +0000 Received: from AMS1EPF00000049.eurprd04.prod.outlook.com (2603:10a6:20b:488:cafe::e) by AS9PR05CA0012.outlook.office365.com (2603:10a6:20b:488::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.19 via Frontend Transport; Thu, 9 Nov 2023 11:26:13 +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 AMS1EPF00000049.mail.protection.outlook.com (10.167.16.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.17 via Frontend Transport; Thu, 9 Nov 2023 11:26:11 +0000 Received: ("Tessian outbound 5d213238733f:v228"); Thu, 09 Nov 2023 11:26:11 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: fca5188d60d7d7cc X-CR-MTA-TID: 64aa7808 Received: from da4be85a6427.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id 807563DF-519A-4A72-8C95-CEE0963F5E5D.1; Thu, 09 Nov 2023 11:26:05 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id da4be85a6427.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Thu, 09 Nov 2023 11:26:05 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=FoBzmjbFzGxJd0xeQzaGH2IP/DFCTRgOXMDSSDRGpiuuH9YZV3C5CmTQKQhHUtGPoHbVWET5pvT/K2VNxjoVjS8dBmlut0gh4e5qSho7B/ejFamx9Wg/WEWtSU4AYQ5nv9qcZMByGZ9bs+IYXU+vf1Q5eavJw2GN9pK/EohjnKb75wns9MocHlFYRNtRPfUNUWCdTcMugifnvFBBbvnIHPJPScgbxIAup2xI6/JBSp8ecA5gNGcCeL8nhbZJDrzwSyPLefT5s6fj577PG98Ue6H4+2BXdPg/7oMsj9X2zmmUyVc1Dtb7yKqh1y5l0X4qU2xI70eeoFHjWzecI/BAoQ== 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=XfF0efaFWlRivDWtHeLSuV9W30W3+0KpCpld3Dk/p7s=; b=QAGmFKmlPt4Eep+Z5DDib8+V0hJtBxoTpTJeMUnEaS2qU4eMkK5PBDmYM77z5nTgLKaurUCZThyq6e+hQu+y1krxxC2O4uGBf7+a7DCQ0thul9PHd+kgIJrLkAWA1VwqIX8gWAhrH+0rpRkX/Hd30Dcr9Pr/Odp/pOxVmh0jG3PiafmaqV8OcRgzR979H3zRFajEMA6pt9/ZDy+L6t+vqHtoYnM58eLhupcEQ2xHX0w9ic5OSEfbwbhb0icyVSsztlnjGg9Zyimb49DM3Y2HinyEP6Mpr+aqMWHKOSZeFuFkwheoVUkLoumodp7vCURB8GrqKmBNqB4MC0H3gBYG0w== 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=XfF0efaFWlRivDWtHeLSuV9W30W3+0KpCpld3Dk/p7s=; b=vjU6XwOteKOpqKNNV5BDk+jqp1xO5akO3C5I62xiP+LPv6jZkdBhR/ZB4rYS2jokONiO8qF/+wCxsn9VmniheJWshVjH5QQ9F4/qcuB0PdedLQ/9Z82VLSOD2TP3OZFu8S6rKNTN7ZVxNii/6fbku/Z9j7Xa1C1LVTbN83iajOI= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AS8PR08MB6678.eurprd08.prod.outlook.com (2603:10a6:20b:398::8) by PA4PR08MB7548.eurprd08.prod.outlook.com (2603:10a6:102:26e::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28; Thu, 9 Nov 2023 11:26:03 +0000 Received: from AS8PR08MB6678.eurprd08.prod.outlook.com ([fe80::af15:c9d7:cd8c:6da2]) by AS8PR08MB6678.eurprd08.prod.outlook.com ([fe80::af15:c9d7:cd8c:6da2%7]) with mapi id 15.20.6954.029; Thu, 9 Nov 2023 11:26:03 +0000 Date: Thu, 9 Nov 2023 11:25:59 +0000 From: Andrew Carlotti To: gcc-patches@gcc.gnu.org Cc: richard.earnshaw@arm.com, richard.sandiford@arm.com, kyrylo.tkachov@arm.com Subject: [1/4] aarch64: Refactor check_required_extensions Message-ID: <8079fe11-86e3-b112-7c0b-beccfdbcde97@e124511.cambridge.arm.com> References: <6dccdd32-6c7b-5962-24e4-8acc7910a76d@e124511.cambridge.arm.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <6dccdd32-6c7b-5962-24e4-8acc7910a76d@e124511.cambridge.arm.com> X-ClientProxiedBy: LO2P265CA0388.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:f::16) To AS8PR08MB6678.eurprd08.prod.outlook.com (2603:10a6:20b:398::8) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AS8PR08MB6678:EE_|PA4PR08MB7548:EE_|AMS1EPF00000049:EE_|PAXPR08MB6541:EE_ X-MS-Office365-Filtering-Correlation-Id: b9e1b96d-06da-4b05-5f99-08dbe116ad90 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: slTbTbiXamIZvHw9fXo98W4eLk9Kosle2+73ZnvjGgk8vGiYKGc5Qg/NZtvmHSwuYU9V53lMmNOKFwT9gMeikdj4mnQT3rJSm6/V6xfcoofhlRDLPByk1/tenUoWwYMtivqsGe8RJjlp8h4SriMdrgLJT4NGGawMj8auJI3MANinsAJtztXhMlPksw9jjpEcPDQbss2S9onjH3HTkNUn6MmIE/dbdWa0RE4JzMH+1tkYb4WkQvUzUuqm+wa25NJPIJHE0thXOI93j0rqitszKnCY+hsDO1bf7kCq9/LJiISPksANMvJ6na5+lU1wS24gfDtLFs5dlhnvqObO007GWoUbTK7GEkD2UT87DeDKzPBhoRNby7Z32w40WE/mzP3xEoBA/GFGHSGVgcp1L33A7VWzyUfKQDAR9q1b1lBO2n7T5tqxaewx7zYCRq6PwyBAzcmEfzWI4Xl7UzBBizb6Ch188zjt/UppSjHHZ/mXUi3CXLesEUWT6+0AVxwAk4deXF8v0Jn18vbGBAhkxR9N2mTcRZ1fALiPHhEvFSzbigkkwayHkUb3ciLgbq0pte19 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR08MB6678.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(346002)(376002)(396003)(39860400002)(366004)(136003)(230922051799003)(451199024)(64100799003)(186009)(1800799009)(31686004)(6512007)(6486002)(478600001)(6506007)(6666004)(86362001)(26005)(66476007)(5660300002)(66556008)(44832011)(41300700001)(66946007)(8676002)(2906002)(83380400001)(38100700002)(31696002)(316002)(8936002)(6916009)(4326008);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA4PR08MB7548 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: AMS1EPF00000049.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: e1d2d24c-a0b8-400c-8aaf-08dbe116a857 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AemTp0ekJdYRTSA1fokJHpOh1oMWG5hsUkJ+OtEIdPDqR9bqvrvHovpZuvFUEwoRMPuyUMuvCXW0hBfFNyYG3nBIHu3eI1T9EIsWkSBlf4DcBqrZ8uqYm2vYlu3BEtnhEhvHXkpO6FlaIcG8J/AoGvrUWc556Ho3on/E/aLrnvDQwHczyatgQgglTCUIVp8hJLaR5IvBZE6hQCTuiiKkVEpxDSAPUz0ulAgY7WiTYc1C6yUxUODNdO2epzXl0BQiQa6Yg0Iw/b3AoSn5MMxQbw0NbUrl0t/IpT/aHVctZDqJIcq9pMfvNZiCoAf7/DPg88g/FA6l6nMSXU1QPkVGbipnJrdfe91unrHd+0fgc9sn4XIb2VDzUjPm/8EgRpk8DiEAKQyzFgvRGLLKcW+E1HdmdOr41m2zWO52OpZAoxor7Cs3r25yoyf8Kc6yhVt2UIx7qUzZPCImk+fNxiG9S8QBYXv5QAeiLYCx/2zaE1WViC5vvcjkL3SLITTUB/rU00IqHzI6XYq2OcqJ+qgfNtASXEkzWzJBYJC9C6ArX5qhoq8N81QU6IzxO73TXxkKqVtJ1fxExOXJDZ1FFrSZPRN6PkbbflIn7c26PRv7sDU6k1Q6qBI8DWj9AmeOLKDITf+PQuVz0/3vZ8r7WJlZB6UBZJdZR+m7gnHZuJ80yqV95urYDfq3Vl8v/jqD4WSH62n3F8dgYalMcmALTkxfHQcyiQ7/B/1WfcxkGos/LTj8NTMUs559m4EXDyeb0HT0 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)(376002)(136003)(346002)(396003)(39860400002)(230922051799003)(451199024)(186009)(64100799003)(1800799009)(82310400011)(40470700004)(46966006)(36840700001)(40460700003)(40480700001)(4326008)(8936002)(8676002)(83380400001)(70206006)(6916009)(70586007)(36860700001)(5660300002)(316002)(2906002)(26005)(47076005)(6512007)(478600001)(41300700001)(6486002)(6666004)(6506007)(44832011)(31696002)(31686004)(82740400003)(86362001)(356005)(336012)(81166007);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Nov 2023 11:26:11.9882 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b9e1b96d-06da-4b05-5f99-08dbe116ad90 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: AMS1EPF00000049.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR08MB6541 X-Spam-Status: No, score=-12.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_LOTSOFHASH,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,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 List-Id: Move SVE extension checking functionality to aarch64-builtins.cc, so that it can be shared by non-SVE intrinsics. gcc/ChangeLog: * config/aarch64/aarch64-sve-builtins.cc (check_builtin_call) (expand_builtin): Update calls to the below. (report_missing_extension, check_required_registers) (check_required_extensions): Move out of aarch64_sve namespace, rename, and move into... * config/aarch64/aarch64-builtins.cc (aarch64_report_missing_extension) (aarch64_check_non_general_registers) (aarch64_check_required_extensions) ...here. * config/aarch64/aarch64-protos.h (aarch64_check_required_extensions): Add prototype. diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc index 04f59fd9a54306d6422b03e32dce79bc00aed4f8..11a9ba2256f105d8cb9cdc4d6decb5b2be3d69af 100644 --- a/gcc/config/aarch64/aarch64-builtins.cc +++ b/gcc/config/aarch64/aarch64-builtins.cc @@ -2054,6 +2054,90 @@ aarch64_general_builtin_decl (unsigned code, bool) return aarch64_builtin_decls[code]; } +/* True if we've already complained about attempts to use functions + when the required extension is disabled. */ +static bool reported_missing_extension_p; + +/* True if we've already complained about attempts to use functions + which require registers that are missing. */ +static bool reported_missing_registers_p; + +/* Report an error against LOCATION that the user has tried to use + function FNDECL when extension EXTENSION is disabled. */ +static void +aarch64_report_missing_extension (location_t location, tree fndecl, + const char *extension) +{ + /* Avoid reporting a slew of messages for a single oversight. */ + if (reported_missing_extension_p) + return; + + error_at (location, "ACLE function %qD requires ISA extension %qs", + fndecl, extension); + inform (location, "you can enable %qs using the command-line" + " option %<-march%>, or by using the %" + " attribute or pragma", extension); + reported_missing_extension_p = true; +} + +/* Check whether non-general registers required by ACLE function fndecl are + * available. Report an error against LOCATION and return false if not. */ +static bool +aarch64_check_non_general_registers (location_t location, tree fndecl) +{ + /* Avoid reporting a slew of messages for a single oversight. */ + if (reported_missing_registers_p) + return false; + + if (TARGET_GENERAL_REGS_ONLY) + { + /* FP/SIMD/SVE registers are not usable when -mgeneral-regs-only option + is specified. */ + error_at (location, + "ACLE function %qD is incompatible with the use of %qs", + fndecl, "-mgeneral-regs-only"); + reported_missing_registers_p = true; + return false; + } + + return true; +} + +/* Check whether all the AARCH64_FL_* values in REQUIRED_EXTENSIONS are + enabled, given that those extensions are required for function FNDECL. + Report an error against LOCATION if not. + If REQUIRES_NON_GENERAL_REGISTERS is true, then also check whether + non-general registers are available. */ +bool +aarch64_check_required_extensions (location_t location, tree fndecl, + aarch64_feature_flags required_extensions, + bool requires_non_general_registers) +{ + auto missing_extensions = required_extensions & ~aarch64_asm_isa_flags; + if (missing_extensions == 0) + return requires_non_general_registers + ? aarch64_check_non_general_registers (location, fndecl) + : true; + + static const struct { + aarch64_feature_flags flag; + const char *name; + } extensions[] = { +#define AARCH64_OPT_EXTENSION(EXT_NAME, IDENT, C, D, E, F) \ + { AARCH64_FL_##IDENT, EXT_NAME }, +#include "aarch64-option-extensions.def" + }; + + for (unsigned int i = 0; i < ARRAY_SIZE (extensions); ++i) + if (missing_extensions & extensions[i].flag) + { + aarch64_report_missing_extension (location, fndecl, extensions[i].name); + return false; + } + gcc_unreachable (); +} + + typedef enum { SIMD_ARG_COPY_TO_REG, diff --git a/gcc/config/aarch64/aarch64-protos.h b/gcc/config/aarch64/aarch64-protos.h index 60a55f4bc1956786ea687fc7cad7ec9e4a84e1f0..30726140a6945dcb86b787f8f47952810d99379f 100644 --- a/gcc/config/aarch64/aarch64-protos.h +++ b/gcc/config/aarch64/aarch64-protos.h @@ -988,6 +988,9 @@ tree aarch64_general_builtin_rsqrt (unsigned int); void handle_arm_acle_h (void); void handle_arm_neon_h (void); +bool aarch64_check_required_extensions (location_t, tree, + aarch64_feature_flags, bool = true); + namespace aarch64_sve { void init_builtins (); void handle_arm_sve_h (); diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc index 161a14edde7c9fb1b13b146cf50463e2d78db264..c72baed08759e143e6b9bc4fabf115a8374af7c8 100644 --- a/gcc/config/aarch64/aarch64-sve-builtins.cc +++ b/gcc/config/aarch64/aarch64-sve-builtins.cc @@ -558,14 +558,6 @@ static GTY(()) vec *registered_functions; overloaded functions. */ static hash_table *function_table; -/* True if we've already complained about attempts to use functions - when the required extension is disabled. */ -static bool reported_missing_extension_p; - -/* True if we've already complained about attempts to use functions - which require registers that are missing. */ -static bool reported_missing_registers_p; - /* Record that TYPE is an ABI-defined SVE type that contains NUM_ZR SVE vectors and NUM_PR SVE predicates. MANGLED_NAME, if nonnull, is the ABI-defined mangling of the type. ACLE_NAME is the name of the type. */ @@ -648,75 +640,6 @@ find_type_suffix_for_scalar_type (const_tree type) return NUM_TYPE_SUFFIXES; } -/* Report an error against LOCATION that the user has tried to use - function FNDECL when extension EXTENSION is disabled. */ -static void -report_missing_extension (location_t location, tree fndecl, - const char *extension) -{ - /* Avoid reporting a slew of messages for a single oversight. */ - if (reported_missing_extension_p) - return; - - error_at (location, "ACLE function %qD requires ISA extension %qs", - fndecl, extension); - inform (location, "you can enable %qs using the command-line" - " option %<-march%>, or by using the %" - " attribute or pragma", extension); - reported_missing_extension_p = true; -} - -/* Check whether the registers required by SVE function fndecl are available. - Report an error against LOCATION and return false if not. */ -static bool -check_required_registers (location_t location, tree fndecl) -{ - /* Avoid reporting a slew of messages for a single oversight. */ - if (reported_missing_registers_p) - return false; - - if (TARGET_GENERAL_REGS_ONLY) - { - /* SVE registers are not usable when -mgeneral-regs-only option - is specified. */ - error_at (location, - "ACLE function %qD is incompatible with the use of %qs", - fndecl, "-mgeneral-regs-only"); - reported_missing_registers_p = true; - return false; - } - - return true; -} - -/* Check whether all the AARCH64_FL_* values in REQUIRED_EXTENSIONS are - enabled, given that those extensions are required for function FNDECL. - Report an error against LOCATION if not. */ -static bool -check_required_extensions (location_t location, tree fndecl, - aarch64_feature_flags required_extensions) -{ - auto missing_extensions = required_extensions & ~aarch64_asm_isa_flags; - if (missing_extensions == 0) - return check_required_registers (location, fndecl); - - static const struct { - aarch64_feature_flags flag; - const char *name; - } extensions[] = { -#define AARCH64_OPT_EXTENSION(EXT_NAME, IDENT, C, D, E, F) \ - { AARCH64_FL_##IDENT, EXT_NAME }, -#include "aarch64-option-extensions.def" - }; - - for (unsigned int i = 0; i < ARRAY_SIZE (extensions); ++i) - if (missing_extensions & extensions[i].flag) - { - report_missing_extension (location, fndecl, extensions[i].name); - return false; - } - gcc_unreachable (); -} /* Report that LOCATION has a call to FNDECL in which argument ARGNO was not an integer constant expression. ARGNO counts from zero. */ @@ -3605,7 +3528,8 @@ check_builtin_call (location_t location, vec, unsigned int code, tree fndecl, unsigned int nargs, tree *args) { const registered_function &rfn = *(*registered_functions)[code]; - if (!check_required_extensions (location, rfn.decl, rfn.required_extensions)) + if (!aarch64_check_required_extensions (location, rfn.decl, + rfn.required_extensions)) return false; return function_checker (location, rfn.instance, fndecl, TREE_TYPE (rfn.decl), nargs, args).check (); @@ -3628,8 +3552,8 @@ rtx expand_builtin (unsigned int code, tree exp, rtx target) { registered_function &rfn = *(*registered_functions)[code]; - if (!check_required_extensions (EXPR_LOCATION (exp), rfn.decl, - rfn.required_extensions)) + if (!aarch64_check_required_extensions (EXPR_LOCATION (exp), rfn.decl, + rfn.required_extensions)) return target; return function_expander (rfn.instance, rfn.decl, exp, target).expand (); }