diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-07-18 16:17:34 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-07-18 16:17:34 +0000 |
commit | 4ac7420618803e6e79033b46fd4f475c74099fbc (patch) | |
tree | 41dbab0016f8572e7f817c6e1ca4e8e27221322a | |
parent | fe9ecc9d9a92dd1e1ef79e934908f6b89552e31f (diff) | |
download | bcm5719-llvm-4ac7420618803e6e79033b46fd4f475c74099fbc.tar.gz bcm5719-llvm-4ac7420618803e6e79033b46fd4f475c74099fbc.zip |
[X86][AVX2] Added tests that demonstrate duplicate broadcasts
We don't yet decode broadcasts as a target shuffle
llvm-svn: 275808
-rw-r--r-- | llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll index 5137a12b5a3..940906edd69 100644 --- a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll +++ b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll @@ -203,6 +203,66 @@ define <4 x double> @combine_permd_as_vpbroadcastsd256(<2 x double> %a) { ret <4 x double> %4 } +define <16 x i8> @combine_vpbroadcast_pshufb_as_vpbroadcastb128(<16 x i8> %a) { +; CHECK-LABEL: combine_vpbroadcast_pshufb_as_vpbroadcastb128: +; CHECK: # BB#0: +; CHECK-NEXT: vpbroadcastb %xmm0, %xmm0 +; CHECK-NEXT: vpbroadcastb %xmm0, %xmm0 +; CHECK-NEXT: retq + %1 = shufflevector <16 x i8> %a, <16 x i8> undef, <16 x i32> zeroinitializer + %2 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %1, <16 x i8> zeroinitializer) + ret <16 x i8> %2 +} + +define <32 x i8> @combine_vpbroadcast_pshufb_as_vpbroadcastb256(<32 x i8> %a) { +; CHECK-LABEL: combine_vpbroadcast_pshufb_as_vpbroadcastb256: +; CHECK: # BB#0: +; CHECK-NEXT: vpbroadcastb %xmm0, %ymm0 +; CHECK-NEXT: vpxor %ymm1, %ymm1, %ymm1 +; CHECK-NEXT: vpshufb %ymm1, %ymm0, %ymm0 +; CHECK-NEXT: retq + %1 = shufflevector <32 x i8> %a, <32 x i8> undef, <32 x i32> zeroinitializer + %2 = call <32 x i8> @llvm.x86.avx2.pshuf.b(<32 x i8> %1, <32 x i8> zeroinitializer) + ret <32 x i8> %2 +} + +define <4 x float> @combine_vpbroadcast_pshufb_as_vpbroadcastss128(<4 x float> %a) { +; CHECK-LABEL: combine_vpbroadcast_pshufb_as_vpbroadcastss128: +; CHECK: # BB#0: +; CHECK-NEXT: vbroadcastss %xmm0, %xmm0 +; CHECK-NEXT: vbroadcastss %xmm0, %xmm0 +; CHECK-NEXT: retq + %1 = shufflevector <4 x float> %a, <4 x float> undef, <4 x i32> zeroinitializer + %2 = bitcast <4 x float> %1 to <16 x i8> + %3 = call <16 x i8> @llvm.x86.ssse3.pshuf.b.128(<16 x i8> %2, <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3, i8 0, i8 1, i8 2, i8 3>) + %4 = bitcast <16 x i8> %3 to <4 x float> + ret <4 x float> %4 +} + +define <8 x float> @combine_vpbroadcast_permd_as_vpbroadcastss256(<4 x float> %a) { +; CHECK-LABEL: combine_vpbroadcast_permd_as_vpbroadcastss256: +; CHECK: # BB#0: +; CHECK-NEXT: vbroadcastss %xmm0, %ymm0 +; CHECK-NEXT: vbroadcastss %xmm0, %ymm0 +; CHECK-NEXT: retq + %1 = shufflevector <4 x float> %a, <4 x float> undef, <8 x i32> zeroinitializer + %2 = call <8 x float> @llvm.x86.avx2.permps(<8 x float> %1, <8 x i32> zeroinitializer) + ret <8 x float> %2 +} + +define <4 x double> @combine_vpbroadcast_permd_as_vpbroadcastsd256(<2 x double> %a) { +; CHECK-LABEL: combine_vpbroadcast_permd_as_vpbroadcastsd256: +; CHECK: # BB#0: +; CHECK-NEXT: vbroadcastsd %xmm0, %ymm0 +; CHECK-NEXT: vbroadcastsd %xmm0, %ymm0 +; CHECK-NEXT: retq + %1 = shufflevector <2 x double> %a, <2 x double> undef, <4 x i32> zeroinitializer + %2 = bitcast <4 x double> %1 to <8 x float> + %3 = call <8 x float> @llvm.x86.avx2.permps(<8 x float> %2, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>) + %4 = bitcast <8 x float> %3 to <4 x double> + ret <4 x double> %4 +} + define <8 x i32> @combine_permd_as_permq(<8 x i32> %a) { ; CHECK-LABEL: combine_permd_as_permq: ; CHECK: # BB#0: |