From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1130) id 48B803858428; Thu, 29 Sep 2022 10:34:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 48B803858428 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1664447668; bh=ydvwe/ZEkIGznyMZ3WrGLTQYCy/GzlCngJQrnrciTx8=; h=From:To:Subject:Date:From; b=agm+S4e575zxNllRbp9xYuLdYBm/beUpS7XHrG1w6qPtFfYRQo/1TVNslbXIonsnd A9rsubOLKlsddDkmP38P0sOZa7+ciHEX4a8mX6+GDhB49SC1MwGPkDIubvZa1XgsOp kgbHKoDJDPECs7MsvhLj4ctETMQXgGC5f8KT9etg= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Richard Sandiford To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-2941] aarch64: Fix transitive closure of features X-Act-Checkin: gcc X-Git-Author: Richard Sandiford X-Git-Refname: refs/heads/trunk X-Git-Oldrev: 0f244d848cffeda68f0eb4c5bb9c7e629bf2e957 X-Git-Newrev: b754d32d3053a4ba2a82361ac0f2739797a811f1 Message-Id: <20220929103428.48B803858428@sourceware.org> Date: Thu, 29 Sep 2022 10:34:28 +0000 (GMT) List-Id: https://gcc.gnu.org/g:b754d32d3053a4ba2a82361ac0f2739797a811f1 commit r13-2941-gb754d32d3053a4ba2a82361ac0f2739797a811f1 Author: Richard Sandiford Date: Thu Sep 29 11:32:53 2022 +0100 aarch64: Fix transitive closure of features 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. Diff: --- gcc/config/aarch64/aarch64-option-extensions.def | 16 ++++---- gcc/testsuite/gcc.target/aarch64/options_set_6.c | 5 +-- .../gcc.target/aarch64/pragma_cpp_predefs_4.c | 47 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 10 deletions(-) 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