aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorWilco Dijkstra <wdijkstr@arm.com>2020-12-03 18:40:34 +0000
committerSebastian Pop <spop@amazon.com>2020-12-14 17:31:46 +0000
commit4dc486b6ba9362f45fe8252b91d0f5c03d85a0d0 (patch)
tree8db61072a2218a5d9c04a29a6ab3d20ccfc287a6 /gcc
parentca086b8b8bb3995f369a523e92db4bf0cb763194 (diff)
downloadgcc-4dc486b6ba9362f45fe8252b91d0f5c03d85a0d0.zip
gcc-4dc486b6ba9362f45fe8252b91d0f5c03d85a0d0.tar.gz
gcc-4dc486b6ba9362f45fe8252b91d0f5c03d85a0d0.tar.bz2
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 <delia.burduv@arm.com> Bootstrap OK, regress pass, OK to commit? 2020-09-03 Wilco Dijkstra <wdijkstr@arm.com> 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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config.gcc15
-rw-r--r--gcc/config/aarch64/aarch64.h10
-rw-r--r--gcc/testsuite/gcc.target/aarch64/with-tune-config.c7
-rw-r--r--gcc/testsuite/gcc.target/aarch64/with-tune-march.c8
-rw-r--r--gcc/testsuite/gcc.target/aarch64/with-tune-mcpu.c8
-rw-r--r--gcc/testsuite/gcc.target/aarch64/with-tune-mtune.c7
-rw-r--r--gcc/testsuite/lib/target-supports.exp5
7 files changed, 54 insertions, 6 deletions
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 3650b46..50c10dc 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 6c145cb..74bb3b5 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 0000000..0940e9e
--- /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 0000000..61039ad
--- /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 0000000..4f8267a
--- /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 0000000..60f795a
--- /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 ad38b75..3c02f76 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.