diff options
Diffstat (limited to 'llvm/test/CodeGen')
| -rw-r--r-- | llvm/test/CodeGen/X86/sse2-intrinsics-fast-isel.ll | 35 |
1 files changed, 26 insertions, 9 deletions
diff --git a/llvm/test/CodeGen/X86/sse2-intrinsics-fast-isel.ll b/llvm/test/CodeGen/X86/sse2-intrinsics-fast-isel.ll index b1e6e6c73b4..03e9130c97e 100644 --- a/llvm/test/CodeGen/X86/sse2-intrinsics-fast-isel.ll +++ b/llvm/test/CodeGen/X86/sse2-intrinsics-fast-isel.ll @@ -3104,6 +3104,25 @@ define void @test_mm_store_pd(double *%a0, <2 x double> %a1) { ret void } +define void @test_mm_store_pd1(double *%a0, <2 x double> %a1) { +; X32-LABEL: test_mm_store_pd1: +; X32: # BB#0: +; X32-NEXT: movl {{[0-9]+}}(%esp), %eax +; X32-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0,0] +; X32-NEXT: movaps %xmm0, (%eax) +; X32-NEXT: retl +; +; X64-LABEL: test_mm_store_pd1: +; X64: # BB#0: +; X64-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0,0] +; X64-NEXT: movaps %xmm0, (%rdi) +; X64-NEXT: retq + %arg0 = bitcast double * %a0 to <2 x double>* + %shuf = shufflevector <2 x double> %a1, <2 x double> undef, <2 x i32> zeroinitializer + store <2 x double> %shuf, <2 x double>* %arg0, align 16 + ret void +} + define void @test_mm_store_sd(double *%a0, <2 x double> %a1) { ; X32-LABEL: test_mm_store_sd: ; X32: # BB#0: @@ -3139,20 +3158,18 @@ define void @test_mm_store1_pd(double *%a0, <2 x double> %a1) { ; X32-LABEL: test_mm_store1_pd: ; X32: # BB#0: ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax -; X32-NEXT: movsd %xmm0, (%eax) -; X32-NEXT: movsd %xmm0, 8(%eax) +; X32-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0,0] +; X32-NEXT: movaps %xmm0, (%eax) ; X32-NEXT: retl ; ; X64-LABEL: test_mm_store1_pd: ; X64: # BB#0: -; X64-NEXT: movsd %xmm0, (%rdi) -; X64-NEXT: movsd %xmm0, 8(%rdi) +; X64-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0,0] +; X64-NEXT: movaps %xmm0, (%rdi) ; X64-NEXT: retq - %ext = extractelement <2 x double> %a1, i32 0 - %ptr0 = getelementptr inbounds double, double* %a0, i32 0 - %ptr1 = getelementptr inbounds double, double* %a0, i32 1 - store double %ext, double* %ptr0, align 1 - store double %ext, double* %ptr1, align 1 + %arg0 = bitcast double * %a0 to <2 x double>* + %shuf = shufflevector <2 x double> %a1, <2 x double> undef, <2 x i32> zeroinitializer + store <2 x double> %shuf, <2 x double>* %arg0, align 16 ret void } |

