summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2013-09-21 00:05:25 +0000
committerEli Friedman <eli.friedman@gmail.com>2013-09-21 00:05:25 +0000
commit9b04f41899c3d5652b21272c0ee6e394f1f7cbdd (patch)
treea58c0f3bfbb4266cdad9b8527c18a22054973ecc
parent9cd26af8b6e316525347fe9cca648ef1ee60787e (diff)
downloadbcm5719-llvm-9b04f41899c3d5652b21272c0ee6e394f1f7cbdd.tar.gz
bcm5719-llvm-9b04f41899c3d5652b21272c0ee6e394f1f7cbdd.zip
Fix return type of _mm_extract_epi8 etc.
PR17300. llvm-svn: 191120
-rw-r--r--clang/lib/Headers/smmintrin.h5
-rw-r--r--clang/test/CodeGen/vector.c7
2 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Headers/smmintrin.h b/clang/lib/Headers/smmintrin.h
index 498f6f0dcd8..5b6db6c4456 100644
--- a/clang/lib/Headers/smmintrin.h
+++ b/clang/lib/Headers/smmintrin.h
@@ -230,9 +230,10 @@ _mm_max_epu32 (__m128i __V1, __m128i __V2)
* 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)];}))
diff --git a/clang/test/CodeGen/vector.c b/clang/test/CodeGen/vector.c
index 3fa5f1441d2..6c14b7fa79e 100644
--- a/clang/test/CodeGen/vector.c
+++ b/clang/test/CodeGen/vector.c
@@ -55,3 +55,10 @@ unsigned long test_epi16(__m128i x) { return _mm_extract_epi16(x, 3); }
// 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;
+}
OpenPOWER on IntegriCloud