From: Simon Pilgrim Date: Mon, 27 Jun 2016 16:15:37 +0000 (+0000) Subject: [X86][SSE] Added extra broadcast tests to cover PR28327 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=17c3914be26d66a036db0eb1c51d6049e3d4719e;p=llvm [X86][SSE] Added extra broadcast tests to cover PR28327 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@273891 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/X86/vector-shuffle-128-v4.ll b/test/CodeGen/X86/vector-shuffle-128-v4.ll index 79d27f41e1e..8516e523aa5 100644 --- a/test/CodeGen/X86/vector-shuffle-128-v4.ll +++ b/test/CodeGen/X86/vector-shuffle-128-v4.ll @@ -1951,6 +1951,37 @@ define <4 x i32> @mask_v4i32_0127(<4 x i32> %a, <4 x i32> %b) { ret <4 x i32> %6 } +define <4 x float> @broadcast_v4f32_0101_from_v2f32(<2 x float>* %x) { +; SSE2-LABEL: broadcast_v4f32_0101_from_v2f32: +; SSE2: # BB#0: +; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero +; SSE2-NEXT: shufpd {{.*#+}} xmm0 = xmm0[0,0] +; SSE2-NEXT: retq +; +; SSE3-LABEL: broadcast_v4f32_0101_from_v2f32: +; SSE3: # BB#0: +; SSE3-NEXT: movddup {{.*#+}} xmm0 = mem[0,0] +; SSE3-NEXT: retq +; +; SSSE3-LABEL: broadcast_v4f32_0101_from_v2f32: +; SSSE3: # BB#0: +; SSSE3-NEXT: movddup {{.*#+}} xmm0 = mem[0,0] +; SSSE3-NEXT: retq +; +; SSE41-LABEL: broadcast_v4f32_0101_from_v2f32: +; SSE41: # BB#0: +; SSE41-NEXT: movddup {{.*#+}} xmm0 = mem[0,0] +; SSE41-NEXT: retq +; +; AVX-LABEL: broadcast_v4f32_0101_from_v2f32: +; AVX: # BB#0: +; AVX-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0] +; AVX-NEXT: retq + %1 = load <2 x float>, <2 x float>* %x, align 1 + %2 = shufflevector <2 x float> %1, <2 x float> undef, <4 x i32> + ret <4 x float> %2 +} + define <4 x i32> @insert_reg_and_zero_v4i32(i32 %a) { ; SSE-LABEL: insert_reg_and_zero_v4i32: ; SSE: # BB#0: diff --git a/test/CodeGen/X86/vector-shuffle-256-v4.ll b/test/CodeGen/X86/vector-shuffle-256-v4.ll index 8c50695b456..9c7ec845450 100644 --- a/test/CodeGen/X86/vector-shuffle-256-v4.ll +++ b/test/CodeGen/X86/vector-shuffle-256-v4.ll @@ -1394,6 +1394,28 @@ define <4 x double> @splat128_mem_v4f64_from_v2f64(<2 x double>* %ptr) { ret <4 x double> %shuffle } +define <4 x double> @broadcast_v4f64_0000_from_v2i64(<2 x i64> %a0) { +; AVX1-LABEL: broadcast_v4f64_0000_from_v2i64: +; AVX1: # BB#0: +; AVX1-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0] +; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm0, %ymm0 +; AVX1-NEXT: retq +; +; AVX2-LABEL: broadcast_v4f64_0000_from_v2i64: +; AVX2: # BB#0: +; AVX2-NEXT: vbroadcastsd %xmm0, %ymm0 +; AVX2-NEXT: retq +; +; AVX512VL-LABEL: broadcast_v4f64_0000_from_v2i64: +; AVX512VL: # BB#0: +; AVX512VL-NEXT: vbroadcastsd %xmm0, %ymm0 +; AVX512VL-NEXT: retq + %1 = shufflevector <2 x i64> %a0, <2 x i64> undef, <4 x i32> + %2 = bitcast <4 x i64> %1 to <4 x double> + %3 = shufflevector <4 x double> %2, <4 x double> undef, <4 x i32> zeroinitializer + ret <4 x double> %3 +} + define <4 x double> @bitcast_v4f64_0426(<4 x double> %a, <4 x double> %b) { ; AVX1-LABEL: bitcast_v4f64_0426: ; AVX1: # BB#0: