Hi, The vec_sel intrinsic is overloaded for multiple types. There are a couple of cases in our intrinsic compatibility headers where the types used don't match any allowable type signature. GCC is able to correctly infer which matching built-in function is meant, but not all compilers can. For compatibility, cast the third parameter correctly in the source code.
Bootstrapped and tested on powerpc64le-linux-gnu with no regressions. Is this okay for trunk? Thanks, Bill 2018-10-22 Bill Schmidt <wschm...@linux.ibm.com> Jinsong Ji <j...@us.ibm.com> * config/rs6000/emmintrin.h (_mm_sll_epi64): Explicitly cast third argument of vec_sel to vector unsigned long long. * config/rs6000/xmmintrin.h (_mm_min_ps): Explicitly cast third argument of vec_sel to vector unsigned int. Index: gcc/config/rs6000/emmintrin.h =================================================================== --- gcc/config/rs6000/emmintrin.h (revision 265389) +++ gcc/config/rs6000/emmintrin.h (working copy) @@ -1766,7 +1766,7 @@ _mm_sll_epi64 (__m128i __A, __m128i __B) shmask = lshift < shmax; result = vec_vsld ((__v2du) __A, lshift); result = (__v2du) vec_sel ((__v2df) shmask, (__v2df) result, - (__v2df) shmask); + (vector unsigned long long) shmask); return (__m128i) result; } Index: gcc/config/rs6000/xmmintrin.h =================================================================== --- gcc/config/rs6000/xmmintrin.h (revision 265389) +++ gcc/config/rs6000/xmmintrin.h (working copy) @@ -458,7 +458,7 @@ extern __inline __m128 __attribute__((__gnu_inline _mm_min_ps (__m128 __A, __m128 __B) { __m128 m = (__m128) vec_vcmpgtfp ((__v4sf) __B, (__v4sf) __A); - return vec_sel (__B, __A, m); + return vec_sel (__B, __A, (vector unsigned int)m); } extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))