diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-06-27 16:15:37 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-06-27 16:15:37 +0000 |
| commit | 476e8ceed3f5666152cff4eeb809a4531c0479f2 (patch) | |
| tree | 658e93534821f00c5e798c896ef4ed27a3de9aa7 | |
| parent | ca2668d038ffa62d84ab1a9f3bdad1cd120a1e70 (diff) | |
| download | bcm5719-llvm-476e8ceed3f5666152cff4eeb809a4531c0479f2.tar.gz bcm5719-llvm-476e8ceed3f5666152cff4eeb809a4531c0479f2.zip | |
[X86][SSE] Added extra broadcast tests to cover PR28327
llvm-svn: 273891
| -rw-r--r-- | llvm/test/CodeGen/X86/vector-shuffle-128-v4.ll | 31 | ||||
| -rw-r--r-- | llvm/test/CodeGen/X86/vector-shuffle-256-v4.ll | 22 |
2 files changed, 53 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/vector-shuffle-128-v4.ll b/llvm/test/CodeGen/X86/vector-shuffle-128-v4.ll index 79d27f41e1e..8516e523aa5 100644 --- a/llvm/test/CodeGen/X86/vector-shuffle-128-v4.ll +++ b/llvm/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> <i32 0, i32 1, i32 0, i32 1> + 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/llvm/test/CodeGen/X86/vector-shuffle-256-v4.ll b/llvm/test/CodeGen/X86/vector-shuffle-256-v4.ll index 8c50695b456..9c7ec845450 100644 --- a/llvm/test/CodeGen/X86/vector-shuffle-256-v4.ll +++ b/llvm/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> <i32 0, i32 1, i32 2, i32 3> + %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: |

