r191120 - Fix return type of _mm_extract_epi8 etc.

Eli Friedman eli.friedman at gmail.com
Fri Sep 20 17:05:25 PDT 2013


Author: efriedma
Date: Fri Sep 20 19:05:25 2013
New Revision: 191120

URL: http://llvm.org/viewvc/llvm-project?rev=191120&view=rev
Log:
Fix return type of _mm_extract_epi8 etc.

PR17300.

Modified:
    cfe/trunk/lib/Headers/smmintrin.h
    cfe/trunk/test/CodeGen/vector.c

Modified: cfe/trunk/lib/Headers/smmintrin.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/smmintrin.h?rev=191120&r1=191119&r2=191120&view=diff
==============================================================================
--- cfe/trunk/lib/Headers/smmintrin.h (original)
+++ cfe/trunk/lib/Headers/smmintrin.h Fri Sep 20 19:05:25 2013
@@ -230,9 +230,10 @@ _mm_max_epu32 (__m128i __V1, __m128i __V
  * as a zero extended value, so it is unsigned.
  */
 #define _mm_extract_epi8(X, N) (__extension__ ({ __v16qi __a = (__v16qi)(X); \
-                                                 (unsigned char)__a[(N)];}))
+                                                 (int)(unsigned char) \
+                                                     __a[(N)];}))
 #define _mm_extract_epi32(X, N) (__extension__ ({ __v4si __a = (__v4si)(X); \
-                                                  (unsigned)__a[(N)];}))
+                                                  __a[(N)];}))
 #ifdef __x86_64__
 #define _mm_extract_epi64(X, N) (__extension__ ({ __v2di __a = (__v2di)(X); \
                                                   __a[(N)];}))

Modified: cfe/trunk/test/CodeGen/vector.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/vector.c?rev=191120&r1=191119&r2=191120&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/vector.c (original)
+++ cfe/trunk/test/CodeGen/vector.c Fri Sep 20 19:05:25 2013
@@ -55,3 +55,10 @@ unsigned long test_epi16(__m128i x) { re
 // CHECK: @test_epi16
 // CHECK: extractelement <8 x i16> {{.*}}, i32 3
 // CHECK: zext i16 {{.*}} to i32
+
+void extractinttypes() {
+  extern int check_extract_result_int;
+  extern __typeof(_mm_extract_epi8(_mm_setzero_si128(), 3)) check_result_int;
+  extern __typeof(_mm_extract_epi16(_mm_setzero_si128(), 3)) check_result_int;
+  extern __typeof(_mm_extract_epi32(_mm_setzero_si128(), 3)) check_result_int;
+}





More information about the cfe-commits mailing list