On Fri, Aug 29, 2014 at 3:55 PM, Kirill Yukhin <kirill.yuk...@gmail.com> wrote:

> Patch in the bottom adds support for reduce,range,fpclass.
>
> Bootstrapped.
> AVX-512* tests on top of patch-set all pass
> under simulator.
>
> Is it ok for trunk?
>
> gcc/
>         * config/i386/i386.c
>         (ix86_expand_args_builtin): Handle avx512dq_rangepv8df_mask_round,
>         avx512dq_rangepv16sf_mask_round, avx512dq_rangepv4df_mask,
>         avx512dq_rangepv8sf_mask, avx512dq_rangepv2df_mask,
>         avx512dq_rangepv4sf_mask.
>         * config/i386/sse.md
>         (define_c_enum "unspec"): Add UNSPEC_REDUCE, UNSPEC_FPCLASS,
>         UNSPEC_FPCLASS_SCALAR, UNSPEC_RANGE, UNSPEC_RANGE_SCALAR.
>         (define_insn "<mask_codefor>reducep<mode><mask_name>"): New.
>         (define_insn "reduces<mode>"): Ditto.
>         (define_insn "avx512dq_rangep<mode><mask_name><round_saeonly_name>"):
>         Ditto.
>         (define_insn "avx512dq_ranges<mode><round_saeonly_name>"): Ditto.
>         (define_insn "avx512dq_fpclass<mode><mask_scalar_merge_name>"): Ditto.
>         (define_insn "avx512dq_vmfpclass<mode>"): Ditto.
>
> --
> Thanks, K
>
> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
> index ff37ffe..15cdb5e 100644
> --- a/gcc/config/i386/i386.c
> +++ b/gcc/config/i386/i386.c
> @@ -34114,6 +34114,12 @@ ix86_expand_args_builtin (const struct 
> builtin_description *d,
>               case CODE_FOR_avx512vl_getmantv4df_mask:
>               case CODE_FOR_avx512vl_getmantv4sf_mask:
>               case CODE_FOR_avx512vl_getmantv2df_mask:
> +             case CODE_FOR_avx512dq_rangepv8df_mask_round:
> +             case CODE_FOR_avx512dq_rangepv16sf_mask_round:
> +             case CODE_FOR_avx512dq_rangepv4df_mask:
> +             case CODE_FOR_avx512dq_rangepv8sf_mask:
> +             case CODE_FOR_avx512dq_rangepv2df_mask:
> +             case CODE_FOR_avx512dq_rangepv4sf_mask:
>                 error ("the last argument must be a 4-bit immediate");
>                 return const0_rtx;
>
> diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
> index d85f9a4..c505526 100644
> --- a/gcc/config/i386/sse.md
> +++ b/gcc/config/i386/sse.md
> @@ -128,6 +128,13 @@
>    UNSPEC_SHA256MSG1
>    UNSPEC_SHA256MSG2
>    UNSPEC_SHA256RNDS2
> +
> +  ;; For AVX512DQ support
> +  UNSPEC_REDUCE
> +  UNSPEC_FPCLASS
> +  UNSPEC_FPCLASS_SCALAR
> +  UNSPEC_RANGE
> +  UNSPEC_RANGE_SCALAR
>  ])

It looks to me that _SCALAR unspecs are redundant, and should be
possible to use UNSPEC_REDUCE for all patterns without unwanted
matching.

Uros.

Reply via email to