From patchwork Thu Sep 29 10:41:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Sandiford X-Patchwork-Id: 1534 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:f2ce:0:0:0:0:0 with SMTP id d14csp617707wrp; Thu, 29 Sep 2022 03:45:55 -0700 (PDT) X-Google-Smtp-Source: AMsMyM63kPZeTEY5OJ8KokAgjgXzbmHvglcn0UHXw3Ro02yvSzDEgMC8NR+upd9Fk8kcCBlkVRbj X-Received: by 2002:a17:907:2d14:b0:784:8e6e:aec5 with SMTP id gs20-20020a1709072d1400b007848e6eaec5mr2259414ejc.477.1664448355714; Thu, 29 Sep 2022 03:45:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664448355; cv=none; d=google.com; s=arc-20160816; b=AwlT+tbO8G2KN4mReISm/I/UcJ0DenqvVwGbMlXNB36wYgBIYHNO9SDEq8dq00bItA wQ3qXhyTnWd/XdDwLUxEUe8fvECqiz6+/C0tGcde4wZ+P/sRf6EjSfo+Z+2fPcr6GPix 6Rd0yC0BKW64fHnOp0hdB+8A3HHelKNeMrX8Pg7HsdIoLS5ougHoavKullExCYTXDEPR sSg2VcF1+/PYF5qc4Cdx4+dfBjvtPhJt/4nZwkeuTaWHtjdR+Ng6cS2pli5mEcIHilj7 S7CBQjVpBFnn1rPAsMKqwNjNrGFCG6Ca+f+CbULVMJbf28iyEN+6iIGwhVm3/CATJ5tD ifLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:mime-version :user-agent:message-id:in-reply-to:date:references:subject :mail-followup-to:to:dmarc-filter:delivered-to:dkim-signature :dkim-filter; bh=c4Iz7+EjSQCtGFTUsqh8vAQ3l+2lx9L408mKApR+K4M=; b=hJc8nEDQnSVv+o4Tj6FZt+jmK1rQL8cNvDQR5SL22V593sQhoR6tQ1D1XW9/bq3U98 i2I3/5Pz1pgGxHVOE4RO/2FVfMjRyfAWs+oT28t/psxWhSql3AHNXDiej5Ios7EnYZuR 49daeJ8doUKPpH1ppy18QhzG3QVDqM4LISm4wpeV29Hjz998Ih8xLt1gl6UoleiaLt00 Oenn91ilRmfPryoDcURczhonkukRtt0uyKvEM1SxSeJO5triNviZ2g5sgR0Agkbm318N w7z0UaewBwkg6+ZWmF91HYdL8Dgnqo+Hauwx1hZL3+Lvbu/EOcecqC/iceWOHON4PsOR dpVw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=TtgayMsk; 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 sourceware.org (ip-8-43-85-97.sourceware.org. [8.43.85.97]) by mx.google.com with ESMTPS id b14-20020a0564021f0e00b00445f660de5asi7145293edb.141.2022.09.29.03.45.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Sep 2022 03:45:55 -0700 (PDT) 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=TtgayMsk; 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 930C93857822 for ; Thu, 29 Sep 2022 10:43:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 930C93857822 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1664448190; bh=c4Iz7+EjSQCtGFTUsqh8vAQ3l+2lx9L408mKApR+K4M=; h=To:Subject:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=TtgayMskAv5+KQWxbadwRiGFYWY8CEV/ClXWef0c6HWL06ks+u6ieuGSAlaG+E4cC A+yhYwHseYgs4ZiivH0orLjQ32AGhD9ncbo11dxKKFipVYaBMjaOaXc2edx+jvFnPd CMsqRk1ogb+ZfTEmxQvxxU5mqTeK+QdWLPvnVmrE= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 102453857429 for ; Thu, 29 Sep 2022 10:41:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 102453857429 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 65D3515BF for ; Thu, 29 Sep 2022 03:41:14 -0700 (PDT) Received: from localhost (e121540-lin.manchester.arm.com [10.32.98.62]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 5FBB03F73B for ; Thu, 29 Sep 2022 03:41:07 -0700 (PDT) To: gcc-patches@gcc.gnu.org Mail-Followup-To: gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Subject: [PATCH 08/17] aarch64: Fix transitive closure of features References: Date: Thu, 29 Sep 2022 11:41:06 +0100 In-Reply-To: (Richard Sandiford's message of "Thu, 29 Sep 2022 11:39:11 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 X-Spam-Status: No, score=-46.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Richard Sandiford via Gcc-patches From: Richard Sandiford Reply-To: Richard Sandiford Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1745300598825000511?= X-GMAIL-MSGID: =?utf-8?q?1745300598825000511?= aarch64-option-extensions.def requires us to maintain the transitive closure of options by hand. This patch fixes a few cases where a flag was missed. +noaes and +nosha2 now disable +crypto, which IMO makes more sense and is consistent with the Clang behaviour. gcc/ * config/aarch64/aarch64-option-extensions.def (dotprod): Depend on fp as well as simd. (sha3): Likewise. (aes): Likewise. Make +noaes disable crypto. (sha2): Likewise +nosha2. Also make +nosha2 disable sha3 and sve2-sha3. (sve2-sha3): Depend on sha2 as well as sha3. gcc/testsuite/ * gcc.target/aarch64/options_set_6.c: Expect +crypto+nosha2 to disable crypto but keep aes. * gcc.target/aarch64/pragma_cpp_predefs_4.c: New test. --- .../aarch64/aarch64-option-extensions.def | 16 ++++--- .../gcc.target/aarch64/options_set_6.c | 5 +- .../gcc.target/aarch64/pragma_cpp_predefs_4.c | 47 +++++++++++++++++++ 3 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index b4d0ac8b600..b9800812738 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -113,28 +113,29 @@ AARCH64_OPT_EXTENSION("rdma", AARCH64_FL_RDMA, \ /* Enabling "dotprod" also enables "simd". Disabling "dotprod" only disables "dotprod". */ -AARCH64_OPT_EXTENSION("dotprod", AARCH64_FL_DOTPROD, AARCH64_FL_SIMD, 0, \ +AARCH64_OPT_EXTENSION("dotprod", AARCH64_FL_DOTPROD, AARCH64_FL_FPSIMD, 0, \ false, "asimddp") /* Enabling "aes" also enables "simd". Disabling "aes" disables "aes" and "sve2-aes'. */ -AARCH64_OPT_EXTENSION("aes", AARCH64_FL_AES, AARCH64_FL_SIMD, \ - AARCH64_FL_SVE2_AES, false, "aes") +AARCH64_OPT_EXTENSION("aes", AARCH64_FL_AES, AARCH64_FL_FPSIMD, \ + AARCH64_FL_SVE2_AES | AARCH64_FL_CRYPTO, false, "aes") /* Enabling "sha2" also enables "simd". Disabling "sha2" just disables "sha2". */ -AARCH64_OPT_EXTENSION("sha2", AARCH64_FL_SHA2, AARCH64_FL_SIMD, 0, false, \ - "sha1 sha2") +AARCH64_OPT_EXTENSION("sha2", AARCH64_FL_SHA2, AARCH64_FL_FPSIMD, \ + AARCH64_FL_CRYPTO | AARCH64_FL_SHA3 | \ + AARCH64_FL_SVE2_SHA3, false, "sha1 sha2") /* Enabling "sha3" enables "simd" and "sha2". Disabling "sha3" disables "sha3" and "sve2-sha3". */ -AARCH64_OPT_EXTENSION("sha3", AARCH64_FL_SHA3, AARCH64_FL_SIMD | \ +AARCH64_OPT_EXTENSION("sha3", AARCH64_FL_SHA3, AARCH64_FL_FPSIMD | \ AARCH64_FL_SHA2, AARCH64_FL_SVE2_SHA3, false, \ "sha3 sha512") /* Enabling "sm4" also enables "simd". Disabling "sm4" disables "sm4" and "sve2-sm4". */ -AARCH64_OPT_EXTENSION("sm4", AARCH64_FL_SM4, AARCH64_FL_SIMD, \ +AARCH64_OPT_EXTENSION("sm4", AARCH64_FL_SM4, AARCH64_FL_FPSIMD, \ AARCH64_FL_SVE2_SM4, false, "sm3 sm4") /* Enabling "fp16fml" also enables "fp" and "fp16". @@ -192,6 +193,7 @@ AARCH64_OPT_EXTENSION("sve2-aes", AARCH64_FL_SVE2_AES, AARCH64_FL_AES | \ /* Enabling "sve2-sha3" also enables "sha3", "simd", "fp16", "fp", "sve", and "sve2". Disabling "sve2-sha3" just disables "sve2-sha3". */ AARCH64_OPT_EXTENSION("sve2-sha3", AARCH64_FL_SVE2_SHA3, AARCH64_FL_SHA3 | \ + AARCH64_FL_SHA2 | \ AARCH64_FL_SIMD | AARCH64_FL_F16 | AARCH64_FL_FP | \ AARCH64_FL_SVE | AARCH64_FL_SVE2, 0, false, "svesha3") diff --git a/gcc/testsuite/gcc.target/aarch64/options_set_6.c b/gcc/testsuite/gcc.target/aarch64/options_set_6.c index 90a055928a2..2a1d7fe5b8e 100644 --- a/gcc/testsuite/gcc.target/aarch64/options_set_6.c +++ b/gcc/testsuite/gcc.target/aarch64/options_set_6.c @@ -6,7 +6,6 @@ int main () return 0; } -/* { dg-final { scan-assembler-times {\.arch armv8\.2\-a\+crypto\+crc} 1 } } */ +/* { dg-final { scan-assembler-times {\.arch armv8\.2\-a\+crc\+aes} 1 } } */ -/* Group as a whole was requested to be turned on, crypto itself is a bit and so - just turning off one feature can't turn it off. */ +/* +crypto turns on +aes and +sha2, but +nosha2 disables +crypto. */ diff --git a/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c new file mode 100644 index 00000000000..0e6461fa439 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/pragma_cpp_predefs_4.c @@ -0,0 +1,47 @@ +#pragma GCC target "+nothing+dotprod" +#ifndef __ARM_FEATURE_FMA +#error Foo +#endif + +#pragma GCC target "+nothing+aes" +#ifndef __ARM_FEATURE_FMA +#error Foo +#endif + +#pragma GCC target "+nothing+sha2" +#ifndef __ARM_FEATURE_FMA +#error Foo +#endif + +#pragma GCC target "+nothing+sha3" +#ifndef __ARM_FEATURE_FMA +#error Foo +#endif + +#pragma GCC target "+nothing+sm4" +#ifndef __ARM_FEATURE_FMA +#error Foo +#endif + +#pragma GCC target "+crypto+noaes" +#ifdef __ARM_FEATURE_CRYPTO +#error Foo +#endif + +#pragma GCC target "+crypto+nosha2" +#ifdef __ARM_FEATURE_CRYPTO +#error Foo +#endif + +#pragma GCC target "+nothing+sve2-sha3" +#ifndef __ARM_FEATURE_SHA2 +#error Foo +#endif + +#pragma GCC target "+sve2-sha3+nosha2" +#ifdef __ARM_FEATURE_SHA3 +#error Foo +#endif +#ifdef __ARM_FEATURE_SVE2_SHA3 +#error Foo +#endif