Hello,
Patch in the bottom fixes PR target/65744
by adding type conversions to x86 intrinsics.

Note, that this patch is not converts type of
masking to unsigned for built-ins.

If no objections - I'll commit it tomorrow and
prepare backport patch for 4.9.x

gcc/
        PR target/65744
        * config/i386/avx512pfintrin.h (_mm512_mask_prefetch_i64scatter_pd):
        Fix mask type.
        (_mm512_mask_prefetch_i64scatter_ps): Ditto.
        * config/i386/avx512vlbwintrin.h (_mm256_cmp_epi8_mask): Fix return
        value.
        (_mm256_cmp_epu8_mask): Ditto.
        (_mm_mask_packus_epi32): Fix mask type.
        (_mm_mask_packs_epi32): Ditto.
        * config/i386/avx512vlintrin.h (_mm_mask_mullo_epi32): Ditto.
        * config/i386/emmintrin.h (_mm_insert_epi16): Explicitly convert
        second argument.
        * config/i386/xmmintrin.h (_mm_insert_pi16): Ditto.
        * config/i386/ia32intrin.h (__bsrq): Explicitly convert return value.


testsuite/
        PR target/65744
        * gcc.target/i386/pr65744.c: New.

--
Thanks, K

commit f69a7bdc20206ec864cb7d8b2556bdf5941d5131
Author: Kirill Yukhin <kirill.yuk...@intel.com>
Date:   Mon Apr 13 20:24:52 2015 +0300

    Fix PR target/65744.

diff --git a/gcc/config/i386/avx512pfintrin.h b/gcc/config/i386/avx512pfintrin.h
index 433e182..8c935bd 100644
--- a/gcc/config/i386/avx512pfintrin.h
+++ b/gcc/config/i386/avx512pfintrin.h
@@ -138,7 +138,7 @@ _mm512_prefetch_i64scatter_ps (void *addr, __m512i index, 
int scale,
 
 extern __inline void
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
-_mm512_mask_prefetch_i64scatter_pd (void *addr, __mmask16 mask,
+_mm512_mask_prefetch_i64scatter_pd (void *addr, __mmask8 mask,
                                    __m512i index, int scale, int hint)
 {
   __builtin_ia32_scatterpfqpd (mask, (__v8di) index, (long long const *) addr,
@@ -147,7 +147,7 @@ _mm512_mask_prefetch_i64scatter_pd (void *addr, __mmask16 
mask,
 
 extern __inline void
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
-_mm512_mask_prefetch_i64scatter_ps (void *addr, __mmask16 mask,
+_mm512_mask_prefetch_i64scatter_ps (void *addr, __mmask8 mask,
                                    __m512i index, int scale, int hint)
 {
   __builtin_ia32_scatterpfqps (mask, (__v8di) index, (int const *) addr,
diff --git a/gcc/config/i386/avx512vlbwintrin.h 
b/gcc/config/i386/avx512vlbwintrin.h
index 601dcdd..7b62df9 100644
--- a/gcc/config/i386/avx512vlbwintrin.h
+++ b/gcc/config/i386/avx512vlbwintrin.h
@@ -1461,7 +1461,7 @@ _mm256_mask_cmp_epi8_mask (__mmask16 __U, __m256i __X, 
__m256i __Y,
                                                  (__mmask32) __U);
 }
 
-extern __inline __mmask16
+extern __inline __mmask32
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm256_cmp_epi8_mask (__m256i __X, __m256i __Y, const int __P)
 {
@@ -1537,7 +1537,7 @@ _mm256_mask_cmp_epu8_mask (__mmask16 __U, __m256i __X, 
__m256i __Y,
                                                   (__mmask32) __U);
 }
 
-extern __inline __mmask16
+extern __inline __mmask32
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
 _mm256_cmp_epu8_mask (__m256i __X, __m256i __Y, const int __P)
 {
@@ -4306,7 +4306,7 @@ _mm_maskz_packus_epi32 (__mmask8 __M, __m128i __A, 
__m128i __B)
 
 extern __inline __m128i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
-_mm_mask_packus_epi32 (__m128i __W, __mmask16 __M, __m128i __A,
+_mm_mask_packus_epi32 (__m128i __W, __mmask8 __M, __m128i __A,
                       __m128i __B)
 {
   return (__m128i) __builtin_ia32_packusdw128_mask ((__v4si) __A,
@@ -4349,7 +4349,7 @@ _mm_maskz_packs_epi32 (__mmask8 __M, __m128i __A, __m128i 
__B)
 
 extern __inline __m128i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
-_mm_mask_packs_epi32 (__m128i __W, __mmask16 __M, __m128i __A,
+_mm_mask_packs_epi32 (__m128i __W, __mmask8 __M, __m128i __A,
                      __m128i __B)
 {
   return (__m128i) __builtin_ia32_packssdw128_mask ((__v4si) __A,
diff --git a/gcc/config/i386/avx512vlintrin.h b/gcc/config/i386/avx512vlintrin.h
index b995cec..d88fe41 100644
--- a/gcc/config/i386/avx512vlintrin.h
+++ b/gcc/config/i386/avx512vlintrin.h
@@ -9042,7 +9042,7 @@ _mm_maskz_mullo_epi32 (__mmask8 __M, __m128i __A, __m128i 
__B)
 
 extern __inline __m128i
 __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
-_mm_mask_mullo_epi32 (__m128i __W, __mmask16 __M, __m128i __A,
+_mm_mask_mullo_epi32 (__m128i __W, __mmask8 __M, __m128i __A,
                      __m128i __B)
 {
   return (__m128i) __builtin_ia32_pmulld128_mask ((__v4si) __A,
diff --git a/gcc/config/i386/emmintrin.h b/gcc/config/i386/emmintrin.h
index b19f05a..dd4a156 100644
--- a/gcc/config/i386/emmintrin.h
+++ b/gcc/config/i386/emmintrin.h
@@ -1352,7 +1352,7 @@ _mm_extract_epi16 (__m128i const __A, int const __N)
 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, 
__artificial__))
 _mm_insert_epi16 (__m128i const __A, int const __D, int const __N)
 {
-  return (__m128i) __builtin_ia32_vec_set_v8hi ((__v8hi)__A, __D, __N);
+  return (__m128i) __builtin_ia32_vec_set_v8hi ((__v8hi)__A, (short int)__D, 
__N);
 }
 #else
 #define _mm_extract_epi16(A, N) \
diff --git a/gcc/config/i386/ia32intrin.h b/gcc/config/i386/ia32intrin.h
index 1f728c8..e578119 100644
--- a/gcc/config/i386/ia32intrin.h
+++ b/gcc/config/i386/ia32intrin.h
@@ -184,7 +184,7 @@ extern __inline int
 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 __bsrq (long long __X)
 {
-  return __builtin_ia32_bsrdi (__X);
+  return (int)__builtin_ia32_bsrdi (__X);
 }
 
 /* 64bit bswap */
diff --git a/gcc/config/i386/smmintrin.h b/gcc/config/i386/smmintrin.h
index b078780..2bc31a7 100644
--- a/gcc/config/i386/smmintrin.h
+++ b/gcc/config/i386/smmintrin.h
@@ -399,7 +399,7 @@ extern __inline __m128i __attribute__((__gnu_inline__, 
__always_inline__, __arti
 _mm_insert_epi8 (__m128i __D, int __S, const int __N)
 {
   return (__m128i) __builtin_ia32_vec_set_v16qi ((__v16qi)__D,
-                                                __S, __N);
+                                                (signed char)__S, __N);
 }
 
 extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, 
__artificial__))
diff --git a/gcc/config/i386/xmmintrin.h b/gcc/config/i386/xmmintrin.h
index 9cd3fa7..1fb246d 100644
--- a/gcc/config/i386/xmmintrin.h
+++ b/gcc/config/i386/xmmintrin.h
@@ -1037,7 +1037,7 @@ _m_pextrw (__m64 const __A, int const __N)
 extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, 
__artificial__))
 _mm_insert_pi16 (__m64 const __A, int const __D, int const __N)
 {
-  return (__m64) __builtin_ia32_vec_set_v4hi ((__v4hi)__A, __D, __N);
+  return (__m64) __builtin_ia32_vec_set_v4hi ((__v4hi)__A, (short int)__D, 
__N);
 }
 
 extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, 
__artificial__))
diff --git a/gcc/testsuite/gcc.target/i386/pr65744.c 
b/gcc/testsuite/gcc.target/i386/pr65744.c
new file mode 100644
index 0000000..0533413
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr65744.c
@@ -0,0 +1,4 @@
+/* { dg-do compile } */
+/* { dg-options "-mavx512f -mavx512er -mavx512cd -mavx512pf -mavx512vl 
-mavx512dq -mavx512bw -mavx512vbmi -mavx512ifma -Werror -Wsystem-headers 
-Wconversion -Wno-sign-conversion" } */
+
+#include <x86intrin.h>

Reply via email to