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>