summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2017-09-04 11:08:47 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2017-09-04 11:08:47 +0000
commit62c78f27d4f9093616fac88c9850d71df020e096 (patch)
treef360888adf7f61da4d8c70f8e2ad47bc9dd4f9fa /llvm
parent1a695b1d6c37edd6be53efa386dbd763b2eae237 (diff)
downloadbcm5719-llvm-62c78f27d4f9093616fac88c9850d71df020e096.tar.gz
bcm5719-llvm-62c78f27d4f9093616fac88c9850d71df020e096.zip
Added shuffle test case from PR34369
llvm-svn: 312481
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll37
1 files changed, 37 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll b/llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll
index 595e0c2a241..ca15c937312 100644
--- a/llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll
+++ b/llvm/test/CodeGen/X86/vector-shuffle-256-v16.ll
@@ -3961,6 +3961,43 @@ define <16 x i16> @PR24935(<16 x i16> %a, <16 x i16> %b) {
ret <16 x i16> %shuffle
}
+define <16 x i16> @PR34369(<16 x i16> %vec) {
+; AVX1-LABEL: PR34369:
+; AVX1: # BB#0:
+; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1
+; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
+; AVX1-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[6,7,0,1,0,1],zero,zero,xmm0[10,11],zero,zero,zero,zero,xmm0[4,5]
+; AVX1-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[14,15,0,1],zero,zero,xmm1[0,1,2,3,4,5,8,9,8,9]
+; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
+; AVX1-NEXT: retq
+;
+; AVX2-LABEL: PR34369:
+; AVX2: # BB#0:
+; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
+; AVX2-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2],xmm0[3,4,5,6,7]
+; AVX2-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[6,7,0,1,0,1,6,7,10,11,10,11,4,5,4,5]
+; AVX2-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[14,15,0,1,12,13,0,1,2,3,4,5,8,9,8,9]
+; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
+; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0
+; AVX2-NEXT: retq
+;
+; AVX512VL-LABEL: PR34369:
+; AVX512VL: # BB#0:
+; AVX512VL-NEXT: vextracti128 $1, %ymm0, %xmm1
+; AVX512VL-NEXT: vpshufb {{.*#+}} xmm2 = xmm1[8,9,10,11,4,5,10,11,8,9,10,11,4,5,4,5]
+; AVX512VL-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[6,7,0,1,0,1,6,7,10,11,4,5,4,5,6,7]
+; AVX512VL-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1,2],xmm2[3],xmm0[4,5,6],xmm2[7]
+; AVX512VL-NEXT: vpshufb {{.*#+}} xmm1 = xmm1[14,15,0,1,12,13,0,1,2,3,4,5,8,9,8,9]
+; AVX512VL-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0
+; AVX512VL-NEXT: movw $-1129, %ax # imm = 0xFB97
+; AVX512VL-NEXT: kmovd %eax, %k1
+; AVX512VL-NEXT: vmovdqu16 %ymm0, %ymm0 {%k1} {z}
+; AVX512VL-NEXT: retq
+ %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 0, i32 0, i32 13, i32 5, i32 2, i32 2, i32 10, i32 15, i32 8, i32 14, i32 8, i32 9, i32 10, i32 12, i32 12>
+ %res = select <16 x i1> <i1 1, i1 1, i1 1, i1 0, i1 1, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 1, i1 1, i1 1>, <16 x i16> %shuf, <16 x i16> zeroinitializer
+ ret <16 x i16> %res
+}
+
define <16 x i16> @insert_dup_mem_v16i16_i32(i32* %ptr) {
; AVX1-LABEL: insert_dup_mem_v16i16_i32:
; AVX1: # BB#0:
OpenPOWER on IntegriCloud