Hi, I tried to replace 2 flags variable with c++ bitset(in patch attached). 
What do you think?

> Please add these options first.
2 options left(they are under Kirill's review currently), I'll add PTAs for 
them to the patch, as soon as they will be commited.

Thanks,
Julia


> -----Original Message-----
> From: gcc-patches-ow...@gcc.gnu.org [mailto:gcc-patches-
> ow...@gcc.gnu.org] On Behalf Of Uros Bizjak
> Sent: Sunday, November 12, 2017 5:30 PM
> To: Koval, Julia <julia.ko...@intel.com>
> Cc: GCC Patches <gcc-patches@gcc.gnu.org>; Kirill Yukhin
> <kirill.yuk...@gmail.com>
> Subject: Re: [patch][x86] -march=icelake
> 
> On Sun, Nov 12, 2017 at 1:04 AM, Koval, Julia <julia.ko...@intel.com> wrote:
> > Hi, this patch adds new option -march=icelake. Isasets defined in:
> https://software.intel.com/sites/default/files/managed/c5/15/architecture-
> instruction-set-extensions-programming-reference.pdf
> > I didn't add arch code to driver-i386.c, because there is no code available 
> > in
> SDM yet, only for cannonlake
> (https://software.intel.com/sites/default/files/managed/39/c5/325462-sdm-
> vol-1-2abcd-3abcd.pdf Chapter 2).
> 
> This means the driver will go through generic detection for
> -march=native. Perhaps a comment should be added, so we won't forget
> to add the model number when one is available.
> 
> > gcc/
> >         * config.gcc: Add -march=icelake.
> >         * config/i386/driver-i386.c (host_detect_local_cpu): Detect icelake.
> >         * config/i386/i386-c.c (ix86_target_macros_internal): Handle 
> > icelake.
> >         * config/i386/i386.c (processor_costs): Add m_ICELAKE.
> >         (PTA_ICELAKE, PTA2_ICELAKE, PTA2_GFNI, PTA2_AVX512VBMI2,
> PTA2_VAES,
> >         PTA2_AVX512VNNI, PTA2_VPCLMULQDQ, PTA2_RDPID,
> PTA2_AVX512BITALG): New.
> >         (processor_target_table): Add icelake.
> >         (ix86_option_override_internal): Add flags2 for new PTA, handle 
> > GFNI,
> RDPID.
> >         (get_builtin_code_for_version): Handle icelake.
> >         (M_INTEL_COREI7_ICELAKE): New.
> >         * config/i386/i386.h (TARGET_ICELAKE, PROCESSOR_ICELAKE): New.
> >         * doc/invoke.texi: Add -march=icelake.
> > gcc/testsuite/
> >         * gcc.target/i386/funcspec-56.inc: Handle new march.
> >         * g++.dg/ext/mv16.C: Ditto.
> > libgcc/
> >         * config/i386/cpuinfo.h (processor_subtypes): Add
> INTEL_COREI7_ICELAKE.
> 
> @@ -3425,6 +3427,13 @@ ix86_option_override_internal (bool main_args_p,
>  #define PTA_AVX5124FMAPS    (HOST_WIDE_INT_1 << 61)
>  #define PTA_AVX512VPOPCNTDQ    (HOST_WIDE_INT_1 << 62)
>  #define PTA_SGX            (HOST_WIDE_INT_1 << 63)
> +#define PTA2_GFNI        (HOST_WIDE_INT_1 << 0)
> +#define PTA2_AVX512VBMI2    (HOST_WIDE_INT_1 << 1)
> +#define PTA2_VAES        (HOST_WIDE_INT_1 << 2)
> +#define PTA2_AVX512VNNI        (HOST_WIDE_INT_1 << 3)
> +#define PTA2_VPCLMULQDQ        (HOST_WIDE_INT_1 << 4)
> +#define PTA2_RDPID        (HOST_WIDE_INT_1 << 5)
> +#define PTA2_AVX512BITALG    (HOST_WIDE_INT_1 << 6)
> 
> Please add these options first.
> 
> On a related note, there should probably be a better way to extend
> various bitmapped flag variables beyond 64bit words. We are constantly
> going over 64bit sizes in target option masks, now the number of
> processor flags doesn't fit in a word anymore. There are several
> places one has to keep in mind in which word some specific flag lives,
> and this  approach opens several ways to make a hard to detect
> mistake. Does C++ offer a more elegant way?
> 
> Bellow, please find a suggestion of a couple of cosmetic changes.
> 
> Thanks,
> Uros.
> 
> @@ -3425,6 +3427,13 @@ ix86_option_override_internal (bool main_args_p,
>  #define PTA_AVX5124FMAPS    (HOST_WIDE_INT_1 << 61)
>  #define PTA_AVX512VPOPCNTDQ    (HOST_WIDE_INT_1 << 62)
>  #define PTA_SGX            (HOST_WIDE_INT_1 << 63)
> 
> Please add a comment here, that the folowing belongs to flags2.
> 
> +#define PTA2_GFNI        (HOST_WIDE_INT_1 << 0)
> +#define PTA2_AVX512VBMI2    (HOST_WIDE_INT_1 << 1)
> +#define PTA2_VAES        (HOST_WIDE_INT_1 << 2)
> 
> 
> @@ -4105,6 +4124,12 @@ ix86_option_override_internal (bool main_args_p,
>      if (processor_alias_table[i].flags & PTA_SGX
>          && !(opts->x_ix86_isa_flags2_explicit & OPTION_MASK_ISA_SGX))
>        opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_SGX;
> 
> Please add vertical space here to visually separate flags and flags2 
> processing.
> 
> +    if (processor_alias_table[i].flags2 & PTA2_RDPID
> +        && !(opts->x_ix86_isa_flags2_explicit & OPTION_MASK_ISA_RDPID))
> +      opts->x_ix86_isa_flags2 |= OPTION_MASK_ISA_RDPID;

Attachment: 0001-icelake.patch
Description: 0001-icelake.patch

Reply via email to