diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2013-09-21 00:05:25 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2013-09-21 00:05:25 +0000 |
| commit | 9b04f41899c3d5652b21272c0ee6e394f1f7cbdd (patch) | |
| tree | a58c0f3bfbb4266cdad9b8527c18a22054973ecc | |
| parent | 9cd26af8b6e316525347fe9cca648ef1ee60787e (diff) | |
| download | bcm5719-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.h | 5 | ||||
| -rw-r--r-- | clang/test/CodeGen/vector.c | 7 |
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; +} |

