This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Add TIGERLAKE and COOPERLAKE to GCC


On Fri, Aug 16, 2019 at 5:53 AM Uros Bizjak <ubizjak@gmail.com> wrote:
>
> On Fri, Aug 16, 2019 at 6:10 AM Cui, Lili <lili.cui@intel.com> wrote:
> >
> >
> >
> > > -----Original Message-----
> > > From: H.J. Lu [mailto:hjl.tools@gmail.com]
> > > Sent: Friday, August 16, 2019 6:02 AM
> > > To: Jeff Law <law@redhat.com>
> > > Cc: Cui, Lili <lili.cui@intel.com>; Uros Bizjak <ubizjak@gmail.com>; GCC
> > > Patches <gcc-patches@gcc.gnu.org>; Zhang, Annita
> > > <annita.zhang@intel.com>; Xiao, Wei3 <wei3.xiao@intel.com>; Liu, Hongtao
> > > <hongtao.liu@intel.com>; Wang, Hongyu <hongyu.wang@intel.com>;
> > > Castillo, Jason M <jason.m.castillo@intel.com>
> > > Subject: Re: Add TIGERLAKE and COOPERLAKE to GCC
> > >
> > > On Wed, Aug 14, 2019 at 11:04 AM Jeff Law <law@redhat.com> wrote:
> > > >
> > > > On 8/14/19 1:38 AM, Cui, Lili wrote:
> > > > > Resend this mail for GCC Patches rejected my message, thanks.
> > > > >
> > > > > -----Original Message-----
> > > > >
> > > > > Hi Uros and all:
> > > > >
> > > > > This patch is about to add TIGERLAKE and COOPERLAKE to GCC.
> > > > > TIGERLAKE is based on ICELAKE_CLIENT and plus new ISA
> > > MOVEDIRI/MOVDIR64B/AVX512VP2INTERSECT.
> > > > > COOPERLAKE is based on CASCADELAKE and plus new ISA AVX512BF16.
> > > > >
> > > > > Bootstrap is ok, and no regressions for i386/x86-64 testsuite.
> > > > >
> > > > > Changelog:
> > > > > gcc/
> > > > >       * common/config/i386/i386-common.c
> > > > >       (processor_names): Add tigerlake and cooperlake.
> > > > >       (processor_alias_table): Add tigerlake and cooperlake.
> > > > >       * config.gcc: Add -march=tigerlake and cooperlake.
> > > > >       * config/i386/driver-i386.c
> > > > >        (host_detect_local_cpu): Detect tigerlake and cooperlake.
> > > > >       * config/i386/i386-builtins.c
> > > > >       (processor_model) : Add M_INTEL_COREI7_TIGERLAKE and
> > > M_INTEL_COREI7_COOPERLAKE.
> > > > >       (arch_names_table): Add tigerlake and cooperlake.
> > > > >       (get_builtin_code_for_version) : Handle PROCESSOR_TIGERLAKE and
> > > PROCESSOR_COOPERLAKE.
> > > > >       * config/i386/i386-c.c
> > > > >       (ix86_target_macros_internal): Handle tigerlake and cooperlake.
> > > > >       (ix86_target_macros_internal): Handle
> > > OPTION_MASK_ISA_AVX512VP2INTERSECT.
> > > > >       * config/i386/i386-options.c
> > > > >       (m_TIGERLAKE)  : Define.
> > > > >       (m_COOPERLAKE) : Ditto.
> > > > >       (m_CORE_AVX512): Ditto.
> > > > >       (processor_cost_table): Add cascadelake.
> > > > >       (ix86_target_string)  : Handle -mavx512vp2intersect.
> > > > >       (ix86_valid_target_attribute_inner_p) : Handle avx512vp2intersect.
> > > > >       (ix86_option_override_internal): Hadle PTA_SHSTK, PTA_MOVDIRI,
> > > > >        PTA_MOVDIR64B, PTA_AVX512VP2INTERSECT.
> > > > >       * config/i386/i386.h
> > > > >       (ix86_size_cost) : Define TARGET_TIGERLAKE and
> > > TARGET_COOPERLAKE.
> > > > >       (processor_type) : Add PROCESSOR_TIGERLAKE and
> > > PROCESSOR_COOPERLAKE.
> > > > >       (PTA_SHSTK) : Define.
> > > > >       (PTA_MOVDIRI): Ditto.
> > > > >       (PTA_MOVDIR64B): Ditto.
> > > > >       (PTA_COOPERLAKE) : Ditto.
> > > > >       (PTA_TIGERLAKE)  : Ditto.
> > > > >       (TARGET_AVX512VP2INTERSECT) : Ditto.
> > > > >       (TARGET_AVX512VP2INTERSECT_P(x)) : Ditto.
> > > > >       (processor_type) : Add PROCESSOR_TIGERLAKE and
> > > PROCESSOR_COOPERLAKE.
> > > > >       * doc/extend.texi: Add tigerlake and cooperlake.
> > > > >
> > > > > gcc/testsuite/
> > > > >       * gcc.target/i386/funcspec-56.inc: Handle new march.
> > > > >       * g++.target/i386/mv16.C: Handle new march
> > > > >
> > > > > libgcc/
> > > > >       * config/i386/cpuinfo.h: Add INTEL_COREI7_TIGERLAKE and
> > > INTEL_COREI7_COOPERLAKE.
> > > > >
> > > > ENOPATCH
> > > >
> > > > Note that HJ's reworking of the cost tables may require this patch to
> > > > change for the trunk.
> > > >
> > >
> > > Yes, I have checked in my patch.  Please rebase.
> >
> > Done, there is no conflict , thanks.
>
> @@ -863,36 +863,45 @@ const char *host_detect_local_cpu (int argc,
> const char **argv)
>    if (arch)
>      {
>        /* This is unknown family 0x6 CPU.  */
> -      /* Assume Ice Lake Server.  */
> -      if (has_wbnoinvd)
> - cpu = "icelake-server";
> -      /* Assume Ice Lake.  */
> -      else if (has_gfni)
> - cpu = "icelake-client";
> -      /* Assume Cannon Lake.  */
> -      else if (has_avx512vbmi)
> - cpu = "cannonlake";
> -      /* Assume Knights Mill.  */
> -      else if (has_avx5124vnniw)
> - cpu = "knm";
> -      /* Assume Knights Landing.  */
> -      else if (has_avx512er)
> - cpu = "knl";
> -      /* Assume Skylake with AVX-512.  */
> -      else if (has_avx512f)
> - cpu = "skylake-avx512";
> -      /* Assume Skylake.  */
> -      else if (has_clflushopt)
> - cpu = "skylake";
> -      /* Assume Broadwell.  */
> -      else if (has_adx)
> - cpu = "broadwell";
> -      else if (has_avx2)
> +      if (has_avx)
> +      {
> + /* Assume Tiger Lake */
> + if (has_avx512vp2intersect)
> +  cpu = "tigerlake";
> + /* Assume Cooper Lake */
> + else if (has_avx512bf16)
> +  cpu = "cooperlake";
> + /* Assume Ice Lake Server.  */
> + else if (has_wbnoinvd)
> +  cpu = "icelake-server";
> + /* Assume Ice Lake.  */
> + else if (has_avx512bitalg)
> +  cpu = "icelake-client";
> + /* Assume Cannon Lake.  */
> + else if (has_avx512vbmi)
> +  cpu = "cannonlake";
> + /* Assume Knights Mill.  */
> + else if (has_avx5124vnniw)
> +  cpu = "knm";
> + /* Assume Knights Landing.  */
> + else if (has_avx512er)
> +  cpu = "knl";
> + /* Assume Skylake with AVX-512.  */
> + else if (has_avx512f)
> +  cpu = "skylake-avx512";
> + /* Assume Skylake.  */
> + else if (has_clflushopt)
> +  cpu = "skylake";
> + /* Assume Broadwell.  */
> + else if (has_adx)
> +  cpu = "broadwell";
> + else if (has_avx2)
>   /* Assume Haswell.  */
> - cpu = "haswell";
> -      else if (has_avx)
> +  cpu = "haswell";
> + else
>   /* Assume Sandy Bridge.  */
> - cpu = "sandybridge";
> +  cpu = "sandybridge";
> +      }
>        else if (has_sse4_2)
>   {
>    if (has_gfni)
>
> No need to nest these under AVX, just add two new entries. We assume
> that these ABIs all imply AVX.

We added AVX check due to

              /* Assume Ice Lake.  */
              else if (has_gfni)
                cpu = "icelake-client";

But Tremont also has gfni:

              else if (has_sse4_2)
                {
                  if (has_gfni)
                    /* Assume Tremont.  */
                    cpu = "tremont";

On Tremont, -march=native will use icelake-client without AVX check.

> Otherwise OK.
>
> Thanks,
> Uros.



-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]