> -----Original Message-----
> From: Richard Sandiford <richard.sandif...@arm.com>
> Sent: Monday, May 10, 2021 5:31 PM
> To: Tamar Christina <tamar.christ...@arm.com>
> Cc: gcc-patches@gcc.gnu.org; nd <n...@arm.com>; Richard Earnshaw
> <richard.earns...@arm.com>; Marcus Shawcroft
> <marcus.shawcr...@arm.com>; Kyrylo Tkachov <kyrylo.tkac...@arm.com>
> Subject: Re: [PATCH]AArch64: Have -mcpu=native and -march=native enable
> extensions when CPU is unknown
> 
> 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.

The Attached testcases would fail if we do forget! 😊

Regards,
Tamar


> 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..b58591d497461cae6e8014fa3
> 9af
> > d9dd26ae67bf 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..b0679579d9167d46c832e55cb
> 63d
> > 9077f7a80f70
> > --- /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..b0679579d9167d46c832e55cb
> 63d
> > 9077f7a80f70
> > --- /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..a424e7c56c782ca6e6917248e2
> fa
> > 7a18eb94e06a
> > --- /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..8104761be927275207318a834f
> 03
> > 041b627856b7
> > --- /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.  */

Reply via email to