diff mbox

[i386,PR,target/65744] Add type conversions to some intrinsics.

Message ID 20150414092909.GC25660@msticlxl57.ims.intel.com
State New
Headers show

Commit Message

Kirill Yukhin April 14, 2015, 9:29 a.m. UTC
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.yukhin@intel.com>
Date:   Mon Apr 13 20:24:52 2015 +0300

    Fix PR target/65744.
diff mbox

Patch

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>