From 4dc486b6ba9362f45fe8252b91d0f5c03d85a0d0 Mon Sep 17 00:00:00 2001 From: Wilco Dijkstra Date: Thu, 3 Dec 2020 18:40:34 +0000 Subject: [PATCH] AArch64: Add support for --with-tune Add support for --with-tune. Like --with-cpu and --with-arch, the argument is validated and transformed into a -mtune option to be processed like any other command-line option. --with-tune has no effect if a -mcpu or -mtune option is used. The validating code didn't allow --with-cpu=native, so explicitly allow that. Co-authored-by: Delia Burduv Bootstrap OK, regress pass, OK to commit? 2020-09-03 Wilco Dijkstra gcc/ * config.gcc (aarch64*-*-*): Add --with-tune. Support --with-cpu=native. * config/aarch64/aarch64.h (OPTION_DEFAULT_SPECS): Add --with-tune. gcc/testsuite/ * lib/target-supports.exp (check_effective_target_tune_cortex_a76): New effective target test. * gcc.target/aarch64/with-tune-config.c: New test. * gcc.target/aarch64/with-tune-march.c: Likewise. * gcc.target/aarch64/with-tune-mcpu.c: Likewise. * gcc.target/aarch64/with-tune-mtune.c: Likewise. --- gcc/config.gcc | 15 +++++++++++++-- gcc/config/aarch64/aarch64.h | 10 ++++++---- .../gcc.target/aarch64/with-tune-config.c | 7 +++++++ .../gcc.target/aarch64/with-tune-march.c | 8 ++++++++ gcc/testsuite/gcc.target/aarch64/with-tune-mcpu.c | 8 ++++++++ .../gcc.target/aarch64/with-tune-mtune.c | 7 +++++++ gcc/testsuite/lib/target-supports.exp | 5 +++++ 7 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gcc.target/aarch64/with-tune-config.c create mode 100644 gcc/testsuite/gcc.target/aarch64/with-tune-march.c create mode 100644 gcc/testsuite/gcc.target/aarch64/with-tune-mcpu.c create mode 100644 gcc/testsuite/gcc.target/aarch64/with-tune-mtune.c diff --git a/gcc/config.gcc b/gcc/config.gcc index 3650b46734a..50c10dc39f7 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4157,6 +4157,12 @@ case "${target}" in sed -e 's/,.*$//'` fi + # Disallow extensions in --with-tune=cortex-a53+crc. + if [ $which = tune ] && [ x"$ext_val" != x ]; then + echo "Architecture extensions not supported in --with-$which=$val" 1>&2 + exit 1 + fi + # Use the pre-processor to strip flatten the options. # This makes the format less rigid than if we use # grep and sed directly here. @@ -4214,8 +4220,13 @@ case "${target}" in fi true else - echo "Unknown $which used in --with-$which=$val" 1>&2 - exit 1 + # Allow --with-$which=native. + if [ "$val" = native ]; then + true + else + echo "Unknown $which used in --with-$which=$val" 1>&2 + exit 1 + fi fi done ;; diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 6c145cbc309..74bb3b53087 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -1219,12 +1219,14 @@ extern enum aarch64_code_model aarch64_cmodel; #define ENDIAN_LANE_N(NUNITS, N) \ (BYTES_BIG_ENDIAN ? NUNITS - 1 - N : N) -/* Support for a configure-time default CPU, etc. We currently support - --with-arch and --with-cpu. Both are ignored if either is specified - explicitly on the command line at run time. */ +/* Support for configure-time --with-arch, --with-cpu and --with-tune. + --with-arch and --with-cpu are ignored if either -mcpu or -march is used. + --with-tune is ignored if either -mtune or -mcpu is used (but is not + affected by -march). */ #define OPTION_DEFAULT_SPECS \ {"arch", "%{!march=*:%{!mcpu=*:-march=%(VALUE)}}" }, \ - {"cpu", "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}" }, + {"cpu", "%{!march=*:%{!mcpu=*:-mcpu=%(VALUE)}}" }, \ + {"tune", "%{!mcpu=*:%{!mtune=*:-mtune=%(VALUE)}}"}, #define MCPU_TO_MARCH_SPEC \ " %{mcpu=*:-march=%:rewrite_mcpu(%{mcpu=*:%*})}" diff --git a/gcc/testsuite/gcc.target/aarch64/with-tune-config.c b/gcc/testsuite/gcc.target/aarch64/with-tune-config.c new file mode 100644 index 00000000000..0940e9eea89 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/with-tune-config.c @@ -0,0 +1,7 @@ +/* { dg-do compile { target { tune_cortex_a76 } } } */ +/* { dg-additional-options " -dA " } */ + +void foo () +{} + +/* { dg-final { scan-assembler "//.tune cortex-a76" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/with-tune-march.c b/gcc/testsuite/gcc.target/aarch64/with-tune-march.c new file mode 100644 index 00000000000..61039adea71 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/with-tune-march.c @@ -0,0 +1,8 @@ +/* { dg-do compile { target { tune_cortex_a76 } } } */ +/* { dg-additional-options " -dA -march=armv8.6-a " } */ + +void foo () +{} + +/* { dg-final { scan-assembler "//.tune cortex-a76" } } */ +/* { dg-final { scan-assembler ".arch armv8.6-a" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/with-tune-mcpu.c b/gcc/testsuite/gcc.target/aarch64/with-tune-mcpu.c new file mode 100644 index 00000000000..4f8267a5c16 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/with-tune-mcpu.c @@ -0,0 +1,8 @@ +/* { dg-do compile { target { tune_cortex_a76 } } } */ +/* { dg-additional-options " -dA -mcpu=cortex-a73" } */ + +void foo () +{} + +/* { dg-final { scan-assembler "//.tune cortex-a73" } } */ +/* { dg-final { scan-assembler ".arch armv8-a" } } */ diff --git a/gcc/testsuite/gcc.target/aarch64/with-tune-mtune.c b/gcc/testsuite/gcc.target/aarch64/with-tune-mtune.c new file mode 100644 index 00000000000..60f795a3919 --- /dev/null +++ b/gcc/testsuite/gcc.target/aarch64/with-tune-mtune.c @@ -0,0 +1,7 @@ +/* { dg-do compile { target { tune_cortex_a76 } } } */ +/* { dg-additional-options " -dA -mtune=cortex-a73" } */ + +void foo () +{} + +/* { dg-final { scan-assembler "//.tune cortex-a73" } } */ diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index ad38b75659b..3c02f763e7e 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -10744,6 +10744,11 @@ proc check_effective_target_msp430_large {} { } ""] } +# Return 1 if GCC was configured with --with-tune=cortex-a76 +proc check_effective_target_tune_cortex_a76 { } { + return [check_configured_with "with-tune=cortex-a76"] +} + # Return 1 if the target has an efficient means to encode large initializers # in the assembly. -- 2.30.2