Tamar Christina <tamar.christ...@arm.com> writes: > Hi All, > > Currently when using -mcpu=native or -march=native on a CPU that is unknown to > the compiler the compiler currently just used -march=armv8-a and enables none > of the extensions. > > To make this a bit more useful this patch changes it to still use > -march=armv8.a > but to enable the extensions. We still cannot do tuning but at least if using > this on a future SVE core the compiler will at the very least enable SVE etc. > > Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. > > Ok for master?
OK, thanks. We'll have to collectively remember that this means we shouldn't try to enforce minimum architecture versions for features in future. E.g. -march=armv8-a+sve should remain valid. Richard > Thanks, > Tamar > > gcc/ChangeLog: > > * config/aarch64/driver-aarch64.c (DEFAULT_ARCH): New. > (host_detect_local_cpu): Use it. > > gcc/testsuite/ChangeLog: > > * gcc.target/aarch64/cpunative/info_16: New test. > * gcc.target/aarch64/cpunative/info_17: New test. > * gcc.target/aarch64/cpunative/native_cpu_16.c: New test. > * gcc.target/aarch64/cpunative/native_cpu_17.c: New test. > > --- inline copy of patch -- > diff --git a/gcc/config/aarch64/driver-aarch64.c > b/gcc/config/aarch64/driver-aarch64.c > index > e2935a1156412c898ea086feb0d698ec92107652..b58591d497461cae6e8014fa39afd9dd26ae67bf > 100644 > --- a/gcc/config/aarch64/driver-aarch64.c > +++ b/gcc/config/aarch64/driver-aarch64.c > @@ -58,6 +58,8 @@ struct aarch64_core_data > #define INVALID_IMP ((unsigned char) -1) > #define INVALID_CORE ((unsigned)-1) > #define ALL_VARIANTS ((unsigned)-1) > +/* Default architecture to use if -mcpu=native did not detect a known CPU. > */ > +#define DEFAULT_ARCH "8A" > > #define AARCH64_CORE(CORE_NAME, CORE_IDENT, SCHED, ARCH, FLAGS, COSTS, IMP, > PART, VARIANT) \ > { CORE_NAME, #ARCH, IMP, PART, VARIANT, FLAGS }, > @@ -390,10 +392,18 @@ host_detect_local_cpu (int argc, const char **argv) > && (aarch64_cpu_data[i].variant == ALL_VARIANTS > || variants[0] == aarch64_cpu_data[i].variant)) > break; > + > if (aarch64_cpu_data[i].name == NULL) > - goto not_found; > + { > + aarch64_arch_driver_info* arch_info > + = get_arch_from_id (DEFAULT_ARCH); > + > + gcc_assert (arch_info); > > - if (arch) > + res = concat ("-march=", arch_info->name, NULL); > + default_flags = arch_info->flags; > + } > + else if (arch) > { > const char *arch_id = aarch64_cpu_data[i].arch; > aarch64_arch_driver_info* arch_info = get_arch_from_id (arch_id); > diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_16 > b/gcc/testsuite/gcc.target/aarch64/cpunative/info_16 > new file mode 100644 > index > 0000000000000000000000000000000000000000..b0679579d9167d46c832e55cb63d9077f7a80f70 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_16 > @@ -0,0 +1,8 @@ > +processor : 0 > +BogoMIPS : 100.00 > +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 > +CPU implementer : 0xff > +CPU architecture: 8 > +CPU variant : 0x0 > +CPU part : 0xd08 > +CPU revision : 2 > diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/info_17 > b/gcc/testsuite/gcc.target/aarch64/cpunative/info_17 > new file mode 100644 > index > 0000000000000000000000000000000000000000..b0679579d9167d46c832e55cb63d9077f7a80f70 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/info_17 > @@ -0,0 +1,8 @@ > +processor : 0 > +BogoMIPS : 100.00 > +Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 asimddp sve sve2 > +CPU implementer : 0xff > +CPU architecture: 8 > +CPU variant : 0x0 > +CPU part : 0xd08 > +CPU revision : 2 > diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_16.c > b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_16.c > new file mode 100644 > index > 0000000000000000000000000000000000000000..a424e7c56c782ca6e6917248e2fa7a18eb94e06a > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_16.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile { target { { aarch64*-*-linux*} && native } } } */ > +/* { dg-set-compiler-env-var GCC_CPUINFO > "$srcdir/gcc.target/aarch64/cpunative/info_16" } */ > +/* { dg-additional-options "-mcpu=native" } */ > + > +int main() > +{ > + return 0; > +} > + > +/* { dg-final { scan-assembler {\.arch armv8-a\+crypto\+crc\+dotprod\+sve2} > } } */ > + > +/* Test a normal looking procinfo. */ > diff --git a/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_17.c > b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_17.c > new file mode 100644 > index > 0000000000000000000000000000000000000000..8104761be927275207318a834f03041b627856b7 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/aarch64/cpunative/native_cpu_17.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile { target { { aarch64*-*-linux*} && native } } } */ > +/* { dg-set-compiler-env-var GCC_CPUINFO > "$srcdir/gcc.target/aarch64/cpunative/info_16" } */ > +/* { dg-additional-options "-march=native" } */ > + > +int main() > +{ > + return 0; > +} > + > +/* { dg-final { scan-assembler {\.arch armv8-a\+crypto\+crc\+dotprod\+sve2} > } } */ > + > +/* Test a normal looking procinfo. */