Re: [PATCH][AVX512] Add forgotten intrinsics.

2014-01-23 Thread Ilya Tocar
   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?
...
 
  This is the same as the second alternative of the
  avx512f_codepmov_src_lower2_mask pattern. Please change the above
  into an expander to reuse existing pattern.
 
  Uros.
 
  Fixed.
 
 OK for mainline if tested properly (you didn't say how the patch was tested).

Yeah, it bootstraps, passes make-check, runs spec2006.
I'll ask Kirill to commit, thanks.


Re: [PATCH][AVX512] Add forgotten intrinsics.

2014-01-22 Thread Uros Bizjak
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_codepmov_src_lowermode2_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
  +  vpmovtrunsuffixpmov_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_codepmov_src_lower2_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_codepmov_src_lowermode2_mask_store): New.
 (*avx512f_codev8div16qi2_store_mask): Renamed to ...
 (avx512f_codev8div16qi2_mask_store): This.
 (avx512f_expandmode): 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.
 * 

Re: [PATCH][AVX512] Add forgotten intrinsics.

2014-01-21 Thread Uros Bizjak
On Tue, Jan 21, 2014 at 2:42 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_codepmov_src_lowermode2_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
 +  vpmovtrunsuffixpmov_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_codepmov_src_lower2_mask pattern. Please change the above
into an expander to reuse existing pattern.

Uros.