From 12919f7e493553a6f0ddf839c0266b2c583c6507 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Sat, 19 Sep 2015 15:12:38 +0000 Subject: [X86][SSE] Replace 128-bit SSE41 PMOVSX intrinsics with native IR 128-bit vector integer sign extensions correctly lower to the pmovsx instructions even for debug builds. This patch removes the builtins and reimplements the _mm_cvtepi*_epi* intrinsics __using builtin_shufflevector (to extract the bottom most subvector) and __builtin_convertvector (to actually perform the sign extension). Differential Revision: http://reviews.llvm.org/D12835 llvm-svn: 248092 --- clang/test/CodeGen/builtins-x86.c | 6 ------ clang/test/CodeGen/sse41-builtins.c | 12 ++++++------ 2 files changed, 6 insertions(+), 12 deletions(-) (limited to 'clang/test') diff --git a/clang/test/CodeGen/builtins-x86.c b/clang/test/CodeGen/builtins-x86.c index 8de907d86d2..cae88a2359d 100644 --- a/clang/test/CodeGen/builtins-x86.c +++ b/clang/test/CodeGen/builtins-x86.c @@ -372,12 +372,6 @@ void f0() { tmp_V4i = __builtin_ia32_pminsd128(tmp_V4i, tmp_V4i); tmp_V4i = __builtin_ia32_pminud128(tmp_V4i, tmp_V4i); tmp_V8s = __builtin_ia32_pminuw128(tmp_V8s, tmp_V8s); - tmp_V4i = __builtin_ia32_pmovsxbd128(tmp_V16c); - tmp_V2LLi = __builtin_ia32_pmovsxbq128(tmp_V16c); - tmp_V8s = __builtin_ia32_pmovsxbw128(tmp_V16c); - tmp_V2LLi = __builtin_ia32_pmovsxdq128(tmp_V4i); - tmp_V4i = __builtin_ia32_pmovsxwd128(tmp_V8s); - tmp_V2LLi = __builtin_ia32_pmovsxwq128(tmp_V8s); tmp_V4i = __builtin_ia32_pmovzxbd128(tmp_V16c); tmp_V2LLi = __builtin_ia32_pmovzxbq128(tmp_V16c); tmp_V8s = __builtin_ia32_pmovzxbw128(tmp_V16c); diff --git a/clang/test/CodeGen/sse41-builtins.c b/clang/test/CodeGen/sse41-builtins.c index fcb205244ae..b3ba22d3c80 100644 --- a/clang/test/CodeGen/sse41-builtins.c +++ b/clang/test/CodeGen/sse41-builtins.c @@ -86,42 +86,42 @@ __m128i test_mm_cmpeq_epi64(__m128i A, __m128i B) { __m128i test_mm_cvtepi8_epi16(__m128i a) { // CHECK-LABEL: test_mm_cvtepi8_epi16 - // CHECK: call <8 x i16> @llvm.x86.sse41.pmovsxbw(<16 x i8> {{.*}}) + // CHECK: sext <8 x i8> {{.*}} to <8 x i16> // CHECK-ASM: pmovsxbw %xmm{{.*}}, %xmm{{.*}} return _mm_cvtepi8_epi16(a); } __m128i test_mm_cvtepi8_epi32(__m128i a) { // CHECK-LABEL: test_mm_cvtepi8_epi32 - // CHECK: call <4 x i32> @llvm.x86.sse41.pmovsxbd(<16 x i8> {{.*}}) + // CHECK: sext <4 x i8> {{.*}} to <4 x i32> // CHECK-ASM: pmovsxbd %xmm{{.*}}, %xmm{{.*}} return _mm_cvtepi8_epi32(a); } __m128i test_mm_cvtepi8_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepi8_epi64 - // CHECK: call <2 x i64> @llvm.x86.sse41.pmovsxbq(<16 x i8> {{.*}}) + // CHECK: sext <2 x i8> {{.*}} to <2 x i64> // CHECK-ASM: pmovsxbq %xmm{{.*}}, %xmm{{.*}} return _mm_cvtepi8_epi64(a); } __m128i test_mm_cvtepi16_epi32(__m128i a) { // CHECK-LABEL: test_mm_cvtepi16_epi32 - // CHECK: call <4 x i32> @llvm.x86.sse41.pmovsxwd(<8 x i16> {{.*}}) + // CHECK: sext <4 x i16> {{.*}} to <4 x i32> // CHECK-ASM: pmovsxwd %xmm{{.*}}, %xmm{{.*}} return _mm_cvtepi16_epi32(a); } __m128i test_mm_cvtepi16_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepi16_epi64 - // CHECK: call <2 x i64> @llvm.x86.sse41.pmovsxwq(<8 x i16> {{.*}}) + // CHECK: sext <2 x i16> {{.*}} to <2 x i64> // CHECK-ASM: pmovsxwq %xmm{{.*}}, %xmm{{.*}} return _mm_cvtepi16_epi64(a); } __m128i test_mm_cvtepi32_epi64(__m128i a) { // CHECK-LABEL: test_mm_cvtepi32_epi64 - // CHECK: call <2 x i64> @llvm.x86.sse41.pmovsxdq(<4 x i32> {{.*}}) + // CHECK: sext <2 x i32> {{.*}} to <2 x i64> // CHECK-ASM: pmovsxdq %xmm{{.*}}, %xmm{{.*}} return _mm_cvtepi32_epi64(a); } -- cgit v1.2.1