Re: [PATCH 2/4][x86] Add clwb,pcommit,avx512avbmi,avx512ifma.

2014-11-21 Thread Ilya Tocar
On 20 Nov 09:43, Uros Bizjak wrote:
 On Wed, Nov 19, 2014 at 6:32 PM, Ilya Tocar tocarip.in...@gmail.com wrote:
  Hi,
 
  New revision of Intel ISA reference [1] has new instructions:
  Clwb, pcommit and new flavors of AVX512. Patch bellow adds them.
  I understand that stage 1 is closed, however those changes shouldn't
  affect anything outside if i386 backend. And are extremely unlikely to
  break existing functionality, and I personally think it's desirable for
  newest GCC to support newest spec.
  Bootstrapped/regtestsed on x86_64-unknown-linux-gnu.
  Ok for trunk?
 
 Please split the patch into patch series, like it was done previously
 for AVX512F patches.
 
 Uros.

This part adds avx512vbmi.
I'll send vpermi2b autogen patch together with v64qi const perm later.
Boostraps/passes make check.
Ok for trunk?


gcc/
* common/config/i386/i386-common.c (OPTION_MASK_ISA_AVX512VBMI_SET
OPTION_MASK_ISA_AVX512VBMI_UNSET): New.
(ix86_handle_option): Handle OPT_mavx512vbmi.
* config.gcc: Add avx512vbmiintrin.h, avx512vbmivlintrin.h.
* config/i386/avx512vbmiintrin.h: New file.
* config/i386/avx512vbmivlintrin.h: Ditto.
* config/i386/cpuid.h (bit_AVX512VBMI): New.
* config/i386/driver-i386.c (host_detect_local_cpu): Detect avx512vbmi.
* config/i386/i386-c.c (ix86_target_macros_internal): Define
__AVX512VBMI__.
* config/i386/i386.c (ix86_target_string): Add -mavx512vbmi.
(PTA_AVX512VBMI): Define.
(ix86_option_override_internal): Handle new options.
(ix86_valid_target_attribute_inner_p): Add avx512vbmi,
(ix86_builtins): Add IX86_BUILTIN_VPMULTISHIFTQB512,
IX86_BUILTIN_VPMULTISHIFTQB256, IX86_BUILTIN_VPMULTISHIFTQB128,
IX86_BUILTIN_VPERMVARQI512_MASK, IX86_BUILTIN_VPERMT2VARQI512,
IX86_BUILTIN_VPERMT2VARQI512_MASKZ, IX86_BUILTIN_VPERMI2VARQI512,
IX86_BUILTIN_VPERMVARQI256_MASK, IX86_BUILTIN_VPERMVARQI128_MASK,
IX86_BUILTIN_VPERMT2VARQI256, IX86_BUILTIN_VPERMT2VARQI256_MASKZ,
IX86_BUILTIN_VPERMT2VARQI128, IX86_BUILTIN_VPERMI2VARQI256,
IX86_BUILTIN_VPERMI2VARQI128.
(bdesc_special_args): Add __builtin_ia32_vpmultishiftqb512_mask,
__builtin_ia32_vpmultishiftqb256_mask,
__builtin_ia32_vpmultishiftqb128_mask,
__builtin_ia32_permvarqi512_mask, __builtin_ia32_vpermt2varqi512_mask,
__builtin_ia32_vpermt2varqi512_maskz,
__builtin_ia32_vpermi2varqi512_mask, __builtin_ia32_permvarqi256_mask,
__builtin_ia32_permvarqi128_mask, __builtin_ia32_vpermt2varqi256_mask,
__builtin_ia32_vpermt2varqi256_maskz,
__builtin_ia32_vpermt2varqi128_mask,
__builtin_ia32_vpermt2varqi128_maskz,
__builtin_ia32_vpermi2varqi256_mask,
__builtin_ia32_vpermi2varqi128_mask.
(ix86_hard_regno_mode_ok): Allow big masks for AVX512VBMI.
* config/i386/i386.h (TARGET_AVX512VBMI, TARGET_AVX512VBMI_P): Define.
* config/i386/i386.opt: Add mavx512vbmi.
* config/i386/immintrin.h: Include avx512vbmiintrin.h,
avx512vbmivlintrin.h.
* config/i386/sse.md (unspec): Add UNSPEC_VPMULTISHIFT.
(VI1_AVX512VL): New iterator.
(avx512_permvarmodemask_name): Use it.
(avx512_vpermi2varmode3_maskz): Ditto.
(avx512_vpermi2varmode3sd_maskz_name): Ditto.
(avx512_vpermi2varmode3_mask): Ditto.
(avx512_vpermt2varmode3_maskz): Ditto.
(avx512_vpermt2varmode3sd_maskz_name): Ditto.
(avx512_vpermt2varmode3_mask): Ditto.
(vpmultishiftqbmodemask_name): Ditto.

gcc/testsuite/

* g++.dg/other/i386-2.C: Add -mavx512vbmi.
* g++.dg/other/i386-3.C: Ditto.
* gcc.target/i386/avx512f-helper.h: Add avx512vbmi-check.h.
* gcc.target/i386/avx512vbmi-check.h: Ditto.
* gcc.target/i386/avx512vbmi-vpermb-1.c: Ditto.
* gcc.target/i386/avx512vbmi-vpermb-2.c: Ditto.
* gcc.target/i386/avx512vbmi-vpermi2b-1.c: Ditto.
* gcc.target/i386/avx512vbmi-vpermi2b-2.c: Ditto.
* gcc.target/i386/avx512vbmi-vpermt2b-1.c: Ditto.
* gcc.target/i386/avx512vbmi-vpermt2b-2.c: Ditto.
* gcc.target/i386/avx512vbmi-vpmultishiftqb-1.c: Ditto.
* gcc.target/i386/avx512vbmi-vpmultishiftqb-2.c: Ditto.
* gcc.target/i386/avx512vl-vpermb-2.c: Ditto.
* gcc.target/i386/avx512vl-vpermi2b-2.c: Ditto.
* gcc.target/i386/avx512vl-vpermt2b-2.c: Ditto.
* gcc.target/i386/avx512vl-vpmaddhuq-2.c: Ditto.
* gcc.target/i386/avx512vl-vpmaddluq-2.c: Ditto.
* gcc.target/i386/avx512vl-vpmultishiftqb-2.c: Ditto.
* gcc.target/i386/i386.exp (check_effective_target_avx512vbmi): New.
* gcc.target/i386/sse-12.c: Add new options.
* gcc.target/i386/sse-13.c: Ditto.
* gcc.target/i386/sse-14.c: Ditto.
* gcc.target/i386/sse-22.c: Ditto.
* gcc.target/i386/sse-23.c: Ditto.

---
 

Re: [PATCH 2/4][x86] Add clwb,pcommit,avx512avbmi,avx512ifma.

2014-11-21 Thread Uros Bizjak
On Fri, Nov 21, 2014 at 12:38 PM, Ilya Tocar tocarip.in...@gmail.com wrote:
 On 20 Nov 09:43, Uros Bizjak wrote:
 On Wed, Nov 19, 2014 at 6:32 PM, Ilya Tocar tocarip.in...@gmail.com wrote:
  Hi,
 
  New revision of Intel ISA reference [1] has new instructions:
  Clwb, pcommit and new flavors of AVX512. Patch bellow adds them.
  I understand that stage 1 is closed, however those changes shouldn't
  affect anything outside if i386 backend. And are extremely unlikely to
  break existing functionality, and I personally think it's desirable for
  newest GCC to support newest spec.
  Bootstrapped/regtestsed on x86_64-unknown-linux-gnu.
  Ok for trunk?

 Please split the patch into patch series, like it was done previously
 for AVX512F patches.

 Uros.

 This part adds avx512vbmi.
 I'll send vpermi2b autogen patch together with v64qi const perm later.
 Boostraps/passes make check.
 Ok for trunk?


 gcc/
 * common/config/i386/i386-common.c (OPTION_MASK_ISA_AVX512VBMI_SET

Please remove  in the above line.

 OPTION_MASK_ISA_AVX512VBMI_UNSET): New.
 (ix86_handle_option): Handle OPT_mavx512vbmi.
 * config.gcc: Add avx512vbmiintrin.h, avx512vbmivlintrin.h.
 * config/i386/avx512vbmiintrin.h: New file.
 * config/i386/avx512vbmivlintrin.h: Ditto.
 * config/i386/cpuid.h (bit_AVX512VBMI): New.
 * config/i386/driver-i386.c (host_detect_local_cpu): Detect 
 avx512vbmi.
 * config/i386/i386-c.c (ix86_target_macros_internal): Define
 __AVX512VBMI__.
 * config/i386/i386.c (ix86_target_string): Add -mavx512vbmi.
 (PTA_AVX512VBMI): Define.
 (ix86_option_override_internal): Handle new options.
 (ix86_valid_target_attribute_inner_p): Add avx512vbmi,
 (ix86_builtins): Add IX86_BUILTIN_VPMULTISHIFTQB512,
 IX86_BUILTIN_VPMULTISHIFTQB256, IX86_BUILTIN_VPMULTISHIFTQB128,
 IX86_BUILTIN_VPERMVARQI512_MASK, IX86_BUILTIN_VPERMT2VARQI512,
 IX86_BUILTIN_VPERMT2VARQI512_MASKZ, IX86_BUILTIN_VPERMI2VARQI512,
 IX86_BUILTIN_VPERMVARQI256_MASK, IX86_BUILTIN_VPERMVARQI128_MASK,
 IX86_BUILTIN_VPERMT2VARQI256, IX86_BUILTIN_VPERMT2VARQI256_MASKZ,
 IX86_BUILTIN_VPERMT2VARQI128, IX86_BUILTIN_VPERMI2VARQI256,
 IX86_BUILTIN_VPERMI2VARQI128.
 (bdesc_special_args): Add __builtin_ia32_vpmultishiftqb512_mask,
 __builtin_ia32_vpmultishiftqb256_mask,
 __builtin_ia32_vpmultishiftqb128_mask,
 __builtin_ia32_permvarqi512_mask, __builtin_ia32_vpermt2varqi512_mask,
 __builtin_ia32_vpermt2varqi512_maskz,
 __builtin_ia32_vpermi2varqi512_mask, __builtin_ia32_permvarqi256_mask,
 __builtin_ia32_permvarqi128_mask, __builtin_ia32_vpermt2varqi256_mask,
 __builtin_ia32_vpermt2varqi256_maskz,
 __builtin_ia32_vpermt2varqi128_mask,
 __builtin_ia32_vpermt2varqi128_maskz,
 __builtin_ia32_vpermi2varqi256_mask,
 __builtin_ia32_vpermi2varqi128_mask.
 (ix86_hard_regno_mode_ok): Allow big masks for AVX512VBMI.
 * config/i386/i386.h (TARGET_AVX512VBMI, TARGET_AVX512VBMI_P): Define.
 * config/i386/i386.opt: Add mavx512vbmi.
 * config/i386/immintrin.h: Include avx512vbmiintrin.h,
 avx512vbmivlintrin.h.
 * config/i386/sse.md (unspec): Add UNSPEC_VPMULTISHIFT.
 (VI1_AVX512VL): New iterator.
 (avx512_permvarmodemask_name): Use it.
 (avx512_vpermi2varmode3_maskz): Ditto.
 (avx512_vpermi2varmode3sd_maskz_name): Ditto.
 (avx512_vpermi2varmode3_mask): Ditto.
 (avx512_vpermt2varmode3_maskz): Ditto.
 (avx512_vpermt2varmode3sd_maskz_name): Ditto.
 (avx512_vpermt2varmode3_mask): Ditto.
 (vpmultishiftqbmodemask_name): Ditto.

 gcc/testsuite/

 * g++.dg/other/i386-2.C: Add -mavx512vbmi.
 * g++.dg/other/i386-3.C: Ditto.
 * gcc.target/i386/avx512f-helper.h: Add avx512vbmi-check.h.
 * gcc.target/i386/avx512vbmi-check.h: Ditto.
 * gcc.target/i386/avx512vbmi-vpermb-1.c: Ditto.
 * gcc.target/i386/avx512vbmi-vpermb-2.c: Ditto.
 * gcc.target/i386/avx512vbmi-vpermi2b-1.c: Ditto.
 * gcc.target/i386/avx512vbmi-vpermi2b-2.c: Ditto.
 * gcc.target/i386/avx512vbmi-vpermt2b-1.c: Ditto.
 * gcc.target/i386/avx512vbmi-vpermt2b-2.c: Ditto.
 * gcc.target/i386/avx512vbmi-vpmultishiftqb-1.c: Ditto.
 * gcc.target/i386/avx512vbmi-vpmultishiftqb-2.c: Ditto.
 * gcc.target/i386/avx512vl-vpermb-2.c: Ditto.
 * gcc.target/i386/avx512vl-vpermi2b-2.c: Ditto.
 * gcc.target/i386/avx512vl-vpermt2b-2.c: Ditto.
 * gcc.target/i386/avx512vl-vpmaddhuq-2.c: Ditto.
 * gcc.target/i386/avx512vl-vpmaddluq-2.c: Ditto.
 * gcc.target/i386/avx512vl-vpmultishiftqb-2.c: Ditto.
 * gcc.target/i386/i386.exp (check_effective_target_avx512vbmi): New.
 * gcc.target/i386/sse-12.c: Add new options.
 *