This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
RE: Add TIGERLAKE and COOPERLAKE to GCC
- From: "Cui, Lili" <lili dot cui at intel dot com>
- To: Uros Bizjak <ubizjak at gmail dot com>, "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: Jeff Law <law at redhat dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>, "Zhang, Annita" <annita dot zhang at intel dot com>, "Xiao, Wei3" <wei3 dot xiao at intel dot com>, "Liu, Hongtao" <hongtao dot liu at intel dot com>, "Wang, Hongyu" <hongyu dot wang at intel dot com>, "Castillo, Jason M" <jason dot m dot castillo at intel dot com>
- Date: Tue, 20 Aug 2019 07:42:09 +0000
- Subject: RE: Add TIGERLAKE and COOPERLAKE to GCC
- References: <B1254C1F3D65A641B4143C8E9793D9FD48177448@shsmsx102.ccr.corp.intel.com> <819cff9f-e64f-c238-65b7-d2effa0bf611@redhat.com> <CAMe9rOof7ht7g-J4hqGvcCBVADzzc6+LAs8XUsoLGZo7GjQgjg@mail.gmail.com> <B1254C1F3D65A641B4143C8E9793D9FD4817816D@shsmsx102.ccr.corp.intel.com> <CAFULd4aYmN11SeUv=PRy22xBNgm-YGHwmFDbjimybiDbtMEJqA@mail.gmail.com> <CAMe9rOo5_vzCbtwzc76TTah_UAXW7W14aDA1YuENJb1rZQG24Q@mail.gmail.com> <CAFULd4Ym5GeeQ8CEE5hyH4R_mbLdTGdKFrL_feJKXBJPogjWGg@mail.gmail.com>
> -----Original Message-----
> From: Uros Bizjak [mailto:ubizjak@gmail.com]
> Sent: Friday, August 16, 2019 11:07 PM
> To: H.J. Lu <hjl.tools@gmail.com>
> Cc: Cui, Lili <lili.cui@intel.com>; Jeff Law <law@redhat.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 Fri, Aug 16, 2019 at 5:01 PM H.J. Lu <hjl.tools@gmail.com> wrote:
> >
> > 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.
>
> Hm, I see.
>
> OK then; this is driver code, and not performance critical.
This patch already upstream now, Revision 274693.
Thanks,
Lili.