On Wed, Jan 22, 2014 at 2:55 PM, Ilya Tocar <tocarip.in...@gmail.com> wrote:

>> > I found out that we forgot to implement some of AVX512 intrinsics.
>> > Here is a patch that adds them. Sorry for huge patch, but changes are
>> > mostly trivial.
>> > Ok for trunk?
>>
>> > +(define_insn "avx512f_<code><pmov_src_lower><mode>2_mask_store"
>> > +  [(set (match_operand:PMOV_DST_MODE 0 "nonimmediate_operand" "=m")
>> > +    (vec_merge:PMOV_DST_MODE
>> > +      (any_truncate:PMOV_DST_MODE
>> > +        (match_operand:<pmov_src_mode> 1 "register_operand" "v"))
>> > +      (match_dup 0)
>> > +      (match_operand:<avx512fmaskmode> 2 "register_operand" "k")))]
>> > +  "TARGET_AVX512F"
>> > +  "vpmov<trunsuffix><pmov_suff>\t{%1, %0%{%2%}|%0%{%2%}, %1}"
>> > +  [(set_attr "type" "ssemov")
>> > +   (set_attr "memory" "store")
>> > +   (set_attr "prefix" "evex")
>> > +   (set_attr "mode" "<sseinsnmode>")])
>>
>> This is the same as the second alternative of the
>> avx512f_<code><pmov_src_lower>2_mask pattern. Please change the above
>> into an expander to reuse existing pattern.
>>
>> Uros.
>
> Fixed.
>
> Changelog:
>
> 2014-01-21  Ilya Tocar  <ilya.to...@intel.com>
>
>         * config/i386/avx512fintrin.h (_mm512_mask_cvtepi32_storeu_epi8): New.
>         (_mm512_mask_cvtsepi32_storeu_epi8): Ditto.
>         (_mm512_mask_cvtusepi32_storeu_epi8): Ditto.
>         (_mm512_mask_cvtepi32_storeu_epi16): Ditto.
>         (_mm512_mask_cvtsepi32_storeu_epi16): Ditto.
>         (_mm512_mask_cvtusepi32_storeu_epi16): Ditto.
>         (_mm512_mask_cvtepi64_storeu_epi32): Ditto.
>         (_mm512_mask_cvtsepi64_storeu_epi32): Ditto.
>         (_mm512_mask_cvtusepi64_storeu_epi32): Ditto.
>         (_mm512_mask_cvtepi64_storeu_epi16): Ditto.
>         (_mm512_mask_cvtsepi64_storeu_epi16): Ditto.
>         (_mm512_mask_cvtusepi64_storeu_epi16): Ditto.
>         (_mm512_mask_cvtepi64_storeu_epi8): Ditto.
>         (_mm512_mask_cvtsepi64_storeu_epi8): Ditto.
>         (_mm512_mask_cvtusepi64_storeu_epi8): Ditto.
>         (_mm512_storeu_epi64): Ditto.
>         (_mm512_cmpge_epi32_mask): Ditto.
>         (_mm512_cmpge_epu32_mask): Ditto.
>         (_mm512_cmpge_epi64_mask): Ditto.
>         (_mm512_cmpge_epu64_mask): Ditto.
>         (_mm512_cmple_epi32_mask): Ditto.
>         (_mm512_cmple_epu32_mask): Ditto.
>         (_mm512_cmple_epi64_mask): Ditto.
>         (_mm512_cmple_epu64_mask): Ditto.
>         (_mm512_cmplt_epi32_mask): Ditto.
>         (_mm512_cmplt_epu32_mask): Ditto.
>         (_mm512_cmplt_epi64_mask): Ditto.
>         (_mm512_cmplt_epu64_mask): Ditto.
>         (_mm512_cmpneq_epi32_mask): Ditto.
>         (_mm512_cmpneq_epu32_mask): Ditto.
>         (_mm512_cmpneq_epi64_mask): Ditto.
>         (_mm512_cmpneq_epu64_mask): Ditto.
>         (_mm512_expand_pd): Ditto.
>         (_mm512_expand_ps): Ditto.
>         * config/i386/i386-builtin-types.def: Add PV16QI, PV16QI, PV16HI,
>         VOID_PV8SI_V8DI_QI, VOID_PV8HI_V8DI_QI, VOID_PV16QI_V8DI_QI,
>         VOID_PV16QI_V16SI_HI, VOID_PV16HI_V16SI_HI.
>         * config/i386/i386.c (ix86_builtins): Add
>         IX86_BUILTIN_EXPANDPD512_NOMASK, IX86_BUILTIN_EXPANDPS512_NOMASK,
>         IX86_BUILTIN_PMOVDB512_MEM, IX86_BUILTIN_PMOVDW512_MEM,
>         IX86_BUILTIN_PMOVQB512_MEM, IX86_BUILTIN_PMOVQD512_MEM,
>         IX86_BUILTIN_PMOVQW512_MEM, IX86_BUILTIN_PMOVSDB512_MEM,
>         IX86_BUILTIN_PMOVSDW512_MEM, IX86_BUILTIN_PMOVSQB512_MEM,
>         IX86_BUILTIN_PMOVSQD512_MEM, IX86_BUILTIN_PMOVSQW512_MEM,
>         IX86_BUILTIN_PMOVUSDB512_MEM, IX86_BUILTIN_PMOVUSDW512_MEM,
>         IX86_BUILTIN_PMOVUSQB512_MEM, IX86_BUILTIN_PMOVUSQD512_MEM,
>         IX86_BUILTIN_PMOVUSQW512_MEM.
>         (bdesc_special_args): Add __builtin_ia32_pmovusqd512mem_mask,
>         __builtin_ia32_pmovsqd512mem_mask,
>         __builtin_ia32_pmovqd512mem_mask,
>         __builtin_ia32_pmovusqw512mem_mask,
>         __builtin_ia32_pmovsqw512mem_mask,
>         __builtin_ia32_pmovqw512mem_mask,
>         __builtin_ia32_pmovusdw512mem_mask,
>         __builtin_ia32_pmovsdw512mem_mask,
>         __builtin_ia32_pmovdw512mem_mask,
>         __builtin_ia32_pmovqb512mem_mask,
>         __builtin_ia32_pmovusqb512mem_mask,
>         __builtin_ia32_pmovsqb512mem_mask,
>         __builtin_ia32_pmovusdb512mem_mask,
>         __builtin_ia32_pmovsdb512mem_mask,
>         __builtin_ia32_pmovdb512mem_mask.
>         (bdesc_args): Add __builtin_ia32_expanddf512,
>         __builtin_ia32_expandsf512.
>         (ix86_expand_special_args_builtin): Handle VOID_FTYPE_PV8SI_V8DI_QI,
>         VOID_FTYPE_PV8HI_V8DI_QI, VOID_FTYPE_PV16HI_V16SI_HI,
>         VOID_FTYPE_PV16QI_V8DI_QI, VOID_FTYPE_PV16QI_V16SI_HI.
>         * config/i386/sse.md (unspec): Add UNSPEC_EXPAND_NOMASK.
>         (avx512f_<code><pmov_src_lower><mode>2_mask_store): New.
>         (*avx512f_<code>v8div16qi2_store_mask): Renamed to ...
>         (avx512f_<code>v8div16qi2_mask_store): This.
>         (avx512f_expand<mode>): New.
>
>
> Chagelog for tests:
>
> 2014-01-21 Ilya Tocar  <ilya.to...@intel.com>
>
>         * gcc.target/i386/avx512f-vexpandpd-1.c: Also test _mm512_expand_pd.
>         * gcc.target/i386/avx512f-vexpandpd-2.c: Ditto.
>         * gcc.target/i386/avx512f-vexpandps-1.c: Also test _mm512_expand_ps.
>         * gcc.target/i386/avx512f-vexpandps-2.c: Ditto.
>         * gcc.target/i386/avx512f-vmovdqu64-1.c: Also test 
> _mm512_storeu_epi64.
>         * gcc.target/i386/avx512f-vmovdqu64-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpged-1.c: New.
>         * gcc.target/i386/avx512f-vpcmpged-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpgeq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpgeq-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpgeud-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpgeud-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpgeuq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpgeuq-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpled-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpled-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpleq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpleq-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpleud-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpleud-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpleuq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpleuq-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpltd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpltd-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpltq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpltq-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpltud-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpltud-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpltuq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpltuq-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpneqd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpneqd-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpneqq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpneqq-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpnequd-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpnequd-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpnequq-1.c: Ditto.
>         * gcc.target/i386/avx512f-vpcmpnequq-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovdb-1.c: Also test
>         _mm512_mask_cvtepi32_storeu_epi8.
>         * gcc.target/i386/avx512f-vpmovdb-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovdw-1.c: Also test
>         _mm512_mask_cvtepi32_storeu_epi16.
>         * gcc.target/i386/avx512f-vpmovdw-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovqb-1.c: Also test
>         _mm512_mask_cvtepi64_storeu_epi8.
>         * gcc.target/i386/avx512f-vpmovqb-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovqw-1.c: Also test
>         _mm512_mask_cvtepi64_storeu_epi16.
>         * gcc.target/i386/avx512f-vpmovqw-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovqd-1.c: Also test
>         _mm512_mask_cvtepi64_storeu_epi32.
>         * gcc.target/i386/avx512f-vpmovqd-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovsdb-1.c: Also test
>         _mm512_mask_cvtsepi32_storeu_epi8.
>         * gcc.target/i386/avx512f-vpmovsdb-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovsdw-1.c: Also test
>         _mm512_mask_cvtsepi32_storeu_epi16.
>         * gcc.target/i386/avx512f-vpmovsdw-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovsqb-1.c: Also test
>         _mm512_mask_cvtsepi64_storeu_epi8.
>         * gcc.target/i386/avx512f-vpmovsqb-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovsqw-1.c: Also test
>         _mm512_mask_cvtsepi64_storeu_epi16.
>         * gcc.target/i386/avx512f-vpmovsqw-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovsqd-1.c: Also test
>         _mm512_mask_cvtsepi64_storeu_epi32.
>         * gcc.target/i386/avx512f-vpmovsqd-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovusdb-1.c: Also test
>         _mm512_mask_cvtusepi32_storeu_epi8.
>         * gcc.target/i386/avx512f-vpmovusdb-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovusdw-1.c: Also test
>         _mm512_mask_cvtusepi32_storeu_epi16.
>         * gcc.target/i386/avx512f-vpmovusdw-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovusqb-1.c: Also test
>         _mm512_mask_cvtusepi64_storeu_epi8.
>         * gcc.target/i386/avx512f-vpmovusqb-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovusqw-1.c: Also test
>         _mm512_mask_cvtusepi64_storeu_epi16.
>         * gcc.target/i386/avx512f-vpmovusqw-2.c: Ditto.
>         * gcc.target/i386/avx512f-vpmovusqd-1.c: Also test
>         _mm512_mask_cvtusepi64_storeu_epi32.
>         * gcc.target/i386/avx512f-vpmovusqd-2.c: Ditto.
>         * gcc.target/i386/m128-check.h: Add checkVs, checkVb.

OK for mainline if tested properly (you didn't say how the patch was tested).

Thanks,
Uros.

Reply via email to