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.