* [PATCH, i386] [PR target/65744] Add type conversions to some intrinsics.
@ 2015-04-14 9:29 Kirill Yukhin
0 siblings, 0 replies; only message in thread
From: Kirill Yukhin @ 2015-04-14 9:29 UTC (permalink / raw)
To: GCC Patches; +Cc: Uros Bizjak
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 --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>
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2015-04-14 9:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-14 9:29 [PATCH, i386] [PR target/65744] Add type conversions to some intrinsics Kirill Yukhin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).