From b1c989d798d0fc7cf8a9750d2184de8fd7114a53 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Thu, 20 Dec 2018 17:05:57 +0000 Subject: [PATCH] [x86] add test to show missed movddup load fold; NFC git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@349773 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/build-vector-128.ll | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/test/CodeGen/X86/build-vector-128.ll b/test/CodeGen/X86/build-vector-128.ll index 9702e4be22a..d859be16083 100644 --- a/test/CodeGen/X86/build-vector-128.ll +++ b/test/CodeGen/X86/build-vector-128.ll @@ -508,6 +508,54 @@ define <4 x i32> @test_buildvector_v4i32_splat_zext_i8(i8 %in) { ret <4 x i32> %splat } +define <4 x float> @movddup_load_fold(float %x, float %y) { +; SSE2-32-LABEL: movddup_load_fold: +; SSE2-32: # %bb.0: +; SSE2-32-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero +; SSE2-32-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0,0] +; SSE2-32-NEXT: retl +; +; SSE2-64-LABEL: movddup_load_fold: +; SSE2-64: # %bb.0: +; SSE2-64-NEXT: unpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] +; SSE2-64-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0,0] +; SSE2-64-NEXT: retq +; +; SSE41-32-LABEL: movddup_load_fold: +; SSE41-32: # %bb.0: +; SSE41-32-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero +; SSE41-32-NEXT: movddup {{.*#+}} xmm0 = xmm0[0,0] +; SSE41-32-NEXT: retl +; +; SSE41-64-LABEL: movddup_load_fold: +; SSE41-64: # %bb.0: +; SSE41-64-NEXT: insertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] +; SSE41-64-NEXT: movddup {{.*#+}} xmm0 = xmm0[0,0] +; SSE41-64-NEXT: retq +; +; AVX-32-LABEL: movddup_load_fold: +; AVX-32: # %bb.0: +; AVX-32-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero +; AVX-32-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; AVX-32-NEXT: retl +; +; AVX1-64-LABEL: movddup_load_fold: +; AVX1-64: # %bb.0: +; AVX1-64-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3] +; AVX1-64-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; AVX1-64-NEXT: retq +; +; AVX2-64-LABEL: movddup_load_fold: +; AVX2-64: # %bb.0: +; AVX2-64-NEXT: vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] +; AVX2-64-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; AVX2-64-NEXT: retq + %i0 = insertelement <4 x float> zeroinitializer, float %x, i32 0 + %i1 = insertelement <4 x float> %i0, float %y, i32 1 + %dup = shufflevector <4 x float> %i1, <4 x float> undef, <4 x i32> + ret <4 x float> %dup +} + ; PR37502 - https://bugs.llvm.org/show_bug.cgi?id=37502 ; Don't use a series of insertps when movddup will do. -- 2.50.1