Fix various x86 avx512{bitalg, vpopcntdq, vbmi2} issues (PR target/83488)
authorJulia Koval <julia.koval@intel.com>
Fri, 26 Jan 2018 04:14:15 +0000 (05:14 +0100)
committerKirill Yukhin <kyukhin@gcc.gnu.org>
Fri, 26 Jan 2018 04:14:15 +0000 (04:14 +0000)
gcc/
* config/i386/avx512bitalgintrin.h (_mm512_bitshuffle_epi64_mask,
_mm512_mask_bitshuffle_epi64_mask, _mm256_bitshuffle_epi64_mask,
_mm256_mask_bitshuffle_epi64_mask, _mm_bitshuffle_epi64_mask,
_mm_mask_bitshuffle_epi64_mask): Fix type.
* config/i386/i386-builtin-types.def (UHI_FTYPE_V2DI_V2DI_UHI,
USI_FTYPE_V4DI_V4DI_USI): Remove.
* config/i386/i386-builtin.def (__builtin_ia32_vpshufbitqmb512_mask,
__builtin_ia32_vpshufbitqmb256_mask,
__builtin_ia32_vpshufbitqmb128_mask): Fix types.
* config/i386/i386.c (ix86_expand_args_builtin): Remove old types.
* config/i386/sse.md (VI1_AVX512VLBW): Change types.

gcc/testsuite/
* gcc.target/i386/avx512bitalg-vpshufbitqmb-1.c: Add -mavx512f -mavx512bw.
* gcc.target/i386/avx512bitalgvl-vpshufbitqmb-1.c: Add -mavx512bw.
* gcc.target/i386/i386.exp: Fix types.

From-SVN: r257075

gcc/ChangeLog
gcc/config/i386/avx512bitalgintrin.h
gcc/config/i386/i386-builtin-types.def
gcc/config/i386/i386-builtin.def
gcc/config/i386/i386.c
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/avx512bitalg-vpshufbitqmb-1.c
gcc/testsuite/gcc.target/i386/avx512bitalgvl-vpshufbitqmb-1.c
gcc/testsuite/gcc.target/i386/i386.exp

index 62dbe56ba80af076b76136e9ee773a1f7d27b3ba..f92720c0284705b9338ea4f6adbf9f40bb10f713 100644 (file)
@@ -1,3 +1,17 @@
+2018-01-26  Julia Koval  <julia.koval@intel.com>
+
+       * config/i386/avx512bitalgintrin.h (_mm512_bitshuffle_epi64_mask,
+       _mm512_mask_bitshuffle_epi64_mask, _mm256_bitshuffle_epi64_mask,
+       _mm256_mask_bitshuffle_epi64_mask, _mm_bitshuffle_epi64_mask,
+       _mm_mask_bitshuffle_epi64_mask): Fix type.
+       * config/i386/i386-builtin-types.def (UHI_FTYPE_V2DI_V2DI_UHI,
+       USI_FTYPE_V4DI_V4DI_USI): Remove.
+       * config/i386/i386-builtin.def (__builtin_ia32_vpshufbitqmb512_mask,
+       __builtin_ia32_vpshufbitqmb256_mask,
+       __builtin_ia32_vpshufbitqmb128_mask): Fix types.
+       * config/i386/i386.c (ix86_expand_args_builtin): Remove old types.
+       * config/i386/sse.md (VI1_AVX512VLBW): Change types.
+
 2018-01-26  Alan Modra  <amodra@gmail.com>
 
        PR target/84033
index a9c60f015241d2711e7d294e2afcdc73a771e8c7..54f03eec3e93fa238174ab5e7c16ed5dab1ee2af 100644 (file)
@@ -100,8 +100,8 @@ extern __inline __mmask64
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_bitshuffle_epi64_mask (__m512i __A, __m512i __B)
 {
-  return (__mmask64) __builtin_ia32_vpshufbitqmb512_mask ((__v8di) __A,
-                                                (__v8di) __B,
+  return (__mmask64) __builtin_ia32_vpshufbitqmb512_mask ((__v64qi) __A,
+                                                (__v64qi) __B,
                                                 (__mmask64) -1);
 }
 
@@ -109,8 +109,8 @@ extern __inline __mmask64
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm512_mask_bitshuffle_epi64_mask (__mmask8 __M, __m512i __A, __m512i __B)
 {
-  return (__mmask64) __builtin_ia32_vpshufbitqmb512_mask ((__v8di) __A,
-                                                (__v8di) __B,
+  return (__mmask64) __builtin_ia32_vpshufbitqmb512_mask ((__v64qi) __A,
+                                                (__v64qi) __B,
                                                 (__mmask64) __M);
 }
 
@@ -148,8 +148,8 @@ extern __inline __mmask32
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm256_bitshuffle_epi64_mask (__m256i __A, __m256i __B)
 {
-  return (__mmask32) __builtin_ia32_vpshufbitqmb256_mask ((__v4di) __A,
-                                                (__v4di) __B,
+  return (__mmask32) __builtin_ia32_vpshufbitqmb256_mask ((__v32qi) __A,
+                                                (__v32qi) __B,
                                                 (__mmask32) -1);
 }
 
@@ -157,8 +157,8 @@ extern __inline __mmask32
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm256_mask_bitshuffle_epi64_mask (__mmask32 __M, __m256i __A, __m256i __B)
 {
-  return (__mmask32) __builtin_ia32_vpshufbitqmb256_mask ((__v4di) __A,
-                                                (__v4di) __B,
+  return (__mmask32) __builtin_ia32_vpshufbitqmb256_mask ((__v32qi) __A,
+                                                (__v32qi) __B,
                                                 (__mmask32) __M);
 }
 
@@ -178,8 +178,8 @@ extern __inline __mmask16
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm_bitshuffle_epi64_mask (__m128i __A, __m128i __B)
 {
-  return (__mmask16) __builtin_ia32_vpshufbitqmb128_mask ((__v2di) __A,
-                                                (__v2di) __B,
+  return (__mmask16) __builtin_ia32_vpshufbitqmb128_mask ((__v16qi) __A,
+                                                (__v16qi) __B,
                                                 (__mmask16) -1);
 }
 
@@ -187,8 +187,8 @@ extern __inline __mmask16
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 _mm_mask_bitshuffle_epi64_mask (__mmask16 __M, __m128i __A, __m128i __B)
 {
-  return (__mmask16) __builtin_ia32_vpshufbitqmb128_mask ((__v2di) __A,
-                                                (__v2di) __B,
+  return (__mmask16) __builtin_ia32_vpshufbitqmb128_mask ((__v16qi) __A,
+                                                (__v16qi) __B,
                                                 (__mmask16) __M);
 }
 
index 9ecdcc08736f82182f14e0eacf32588b5799111c..ba3354904897e9af8270565ab873c2c78be877e1 100644 (file)
@@ -1260,8 +1260,6 @@ DEF_FUNCTION_TYPE (V16SI, V16SI, V16SI, V16SI, INT)
 DEF_FUNCTION_TYPE (V2DI, V2DI, V2DI, V2DI, INT)
 
 # BITALG builtins
-DEF_FUNCTION_TYPE (UHI, V2DI, V2DI, UHI)
-DEF_FUNCTION_TYPE (USI, V4DI, V4DI, USI)
 DEF_FUNCTION_TYPE (V4DI, V4DI)
 DEF_FUNCTION_TYPE (V4SI, V4SI, V4SI, UHI)
 DEF_FUNCTION_TYPE (V8SI, V8SI, V8SI, UHI)
index ee21f3deca39f1b4c38f21de3e675c20dde9e2ee..0b8347206d35d6402d45235dbab0aa16d4ebb961 100644 (file)
@@ -2626,9 +2626,9 @@ BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512VL, CODE_FOR_vpopcou
 BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512VL, CODE_FOR_vpopcountv8hi, "__builtin_ia32_vpopcountw_v8hi", IX86_BUILTIN_VPOPCOUNTWV8HI, UNKNOWN, (int) V8HI_FTYPE_V8HI)
 BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512VL, CODE_FOR_vpopcountv8hi_mask, "__builtin_ia32_vpopcountw_v8hi_mask", IX86_BUILTIN_VPOPCOUNTQV8HI_MASK, UNKNOWN, (int) V8HI_FTYPE_V8HI_V8HI_UQI)
 
-BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512BW, CODE_FOR_avx512vl_vpshufbitqmbv8di_mask, "__builtin_ia32_vpshufbitqmb512_mask", IX86_BUILTIN_VPSHUFBITQMB512_MASK, UNKNOWN, (int) UQI_FTYPE_V8DI_V8DI_UQI)
-BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512BW, CODE_FOR_avx512vl_vpshufbitqmbv4di_mask, "__builtin_ia32_vpshufbitqmb256_mask", IX86_BUILTIN_VPSHUFBITQMB256_MASK, UNKNOWN, (int) USI_FTYPE_V4DI_V4DI_USI)
-BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpshufbitqmbv2di_mask, "__builtin_ia32_vpshufbitqmb128_mask", IX86_BUILTIN_VPSHUFBITQMB128_MASK, UNKNOWN, (int) UHI_FTYPE_V2DI_V2DI_UHI)
+BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512BW, CODE_FOR_avx512vl_vpshufbitqmbv64qi_mask, "__builtin_ia32_vpshufbitqmb512_mask", IX86_BUILTIN_VPSHUFBITQMB512_MASK, UNKNOWN, (int) UDI_FTYPE_V64QI_V64QI_UDI)
+BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512VL | OPTION_MASK_ISA_AVX512BW, CODE_FOR_avx512vl_vpshufbitqmbv32qi_mask, "__builtin_ia32_vpshufbitqmb256_mask", IX86_BUILTIN_VPSHUFBITQMB256_MASK, UNKNOWN, (int) USI_FTYPE_V32QI_V32QI_USI)
+BDESC (OPTION_MASK_ISA_AVX512BITALG | OPTION_MASK_ISA_AVX512VL, CODE_FOR_avx512vl_vpshufbitqmbv16qi_mask, "__builtin_ia32_vpshufbitqmb128_mask", IX86_BUILTIN_VPSHUFBITQMB128_MASK, UNKNOWN, (int) UHI_FTYPE_V16QI_V16QI_UHI)
 
 /* Builtins with rounding support.  */
 BDESC_END (ARGS, ROUND_ARGS)
index 6a49c1a161014443f9e3eb57047ed593f06ab36e..3653ddd6e2de983f5e027e2fccd20fe821bad997 100644 (file)
@@ -34739,8 +34739,6 @@ ix86_expand_args_builtin (const struct builtin_description *d,
     case HI_FTYPE_V16SF_INT_UHI:
     case QI_FTYPE_V8SF_INT_UQI:
     case QI_FTYPE_V4SF_INT_UQI:
-    case UHI_FTYPE_V2DI_V2DI_UHI:
-    case USI_FTYPE_V4DI_V4DI_USI:
     case V4SI_FTYPE_V4SI_V4SI_UHI:
     case V8SI_FTYPE_V8SI_V8SI_UHI:
       nargs = 3;
index 24197a8b3c38a7d7cab5295161d3c5f0aed94b38..4bb06e25615a2246a2d2bd0e2c4e5de2d118ea28 100644 (file)
    (V4SI "TARGET_AVX2") (V2DI "TARGET_AVX2")
    (V8SI "TARGET_AVX2") (V4DI "TARGET_AVX2")])
 
-(define_mode_iterator VI48_AVX512VLBW
-  [(V8DI "TARGET_AVX512BW") (V4DI  "TARGET_AVX512VL")
-       (V2DI  "TARGET_AVX512VL")])
+(define_mode_iterator VI1_AVX512VLBW
+  [(V64QI "TARGET_AVX512BW") (V32QI  "TARGET_AVX512VL")
+       (V16QI  "TARGET_AVX512VL")])
 
 (define_mode_attr avx512
   [(V16QI "avx512vl") (V32QI "avx512vl") (V64QI "avx512bw")
 (define_insn "avx512vl_vpshufbitqmb<mode><mask_scalar_merge_name>"
   [(set (match_operand:<avx512fmaskmode> 0 "register_operand" "=Yk")
        (unspec:<avx512fmaskmode>
-         [(match_operand:VI48_AVX512VLBW 1 "register_operand" "v")
-          (match_operand:VI48_AVX512VLBW 2 "nonimmediate_operand" "vm")]
+         [(match_operand:VI1_AVX512VLBW 1 "register_operand" "v")
+          (match_operand:VI1_AVX512VLBW 2 "nonimmediate_operand" "vm")]
          UNSPEC_VPSHUFBIT))]
   "TARGET_AVX512BITALG"
   "vpshufbitqmb\t{%2, %1, %0<mask_scalar_merge_operand3>|%0<mask_scalar_merge_operand3>, %1, %2}"
index 6b3c743bb346678d4c1b7d626d8a074303d54f84..72a0069eb9c4773de22d14ba0e4a4b415f6d71db 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-26  Julia Koval  <julia.koval@intel.com>
+
+       * gcc.target/i386/avx512bitalg-vpshufbitqmb-1.c: Add -mavx512f -mavx512bw.
+       * gcc.target/i386/avx512bitalgvl-vpshufbitqmb-1.c: Add -mavx512bw.
+       * gcc.target/i386/i386.exp: Fix types.
+
 2018-01-26  Alan Modra  <amodra@gmail.com>
 
        PR target/84033
index 2ee6ca641317d174de0c4502ace4b3b9137a73cd..727fb130ab581c2757afd4b7ae5ee448eebf4496 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do run } */
-/* { dg-options "-O2 -mavx512bitalg" } */
+/* { dg-options "-O2 -mavx512bitalg -mavx512f -mavx512bw" } */
 /* { dg-require-effective-target avx512bitalg } */
 
 #include "avx512f-helper.h"
index 497e369bf80b309941104be0b5a7d3858ec17adb..76598c449466d8349aa2134e3a4799d60ecb9b92 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do run } */
-/* { dg-options "-O2 -mavx512vl -mavx512bitalg" } */
+/* { dg-options "-O2 -mavx512vl -mavx512bitalg -mavx512bw" } */
 /* { dg-require-effective-target avx512vl } */
 /* { dg-require-effective-target avx512bitalg } */
 
index 57e23a91676c59ee6ccd6951f002fadc923e4a1a..6b30de3022f3884658dd3eb1aa3ae350293d88de 100644 (file)
@@ -487,12 +487,12 @@ proc check_effective_target_vpclmulqdq { } {
 # Return 1 if avx512_bitalg instructions can be compiled.
 proc check_effective_target_avx512bitalg { } {
     return [check_no_compiler_messages avx512bitalg object {
-        typedef int __v32hi __attribute__ ((__vector_size__ (64)));
+        typedef short int __v32hi __attribute__ ((__vector_size__ (64)));
 
         __v32hi
         _mm512_popcnt_epi16 (__v32hi __A)
         {
-            return (__v32hi) __builtin_ia32_vpopcountd_v32hi ((__v32hi) __A);
+            return (__v32hi) __builtin_ia32_vpopcountw_v32hi ((__v32hi) __A);
         }
     } "-mavx512bitalg" ]
 }