]> granicus.if.org Git - llvm/commitdiff
[X86] Add test case for missed opportunity to recognize a vXi1 shuffle as an insert...
authorCraig Topper <craig.topper@intel.com>
Mon, 19 Aug 2019 00:39:18 +0000 (00:39 +0000)
committerCraig Topper <craig.topper@intel.com>
Mon, 19 Aug 2019 00:39:18 +0000 (00:39 +0000)
We are currently missing this because shuffle canonicalization
puts the zero vector as V1 and the subvector as V2. Our current
code doesn't recognize this case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369225 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGen/X86/avx512-skx-insert-subvec.ll

index 5ed2ef5fa50d6339b69fcdf55a4b4d9822b178fb..76c983e6708c9cbdab3d78f8992a4375e75d7abc 100644 (file)
@@ -199,3 +199,21 @@ define <64 x i1> @test14(<2 x i1> %a) {
   %res = shufflevector <2 x i1> %a, <2 x i1> zeroinitializer, <64 x i32> <i32 2, i32 3, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3, i32 2, i32 3, i32 0, i32 1, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
   ret <64 x i1> %res
 }
+
+; Make sure we can recognize this shuffle as an insertion in to a zero vector.
+define i8 @test15(<2 x i64> %x) {
+; CHECK-LABEL: test15:
+; CHECK:       # %bb.0:
+; CHECK-NEXT:    vptestnmq %xmm0, %xmm0, %k0
+; CHECK-NEXT:    vpmovm2d %k0, %ymm0
+; CHECK-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero
+; CHECK-NEXT:    vpmovd2m %ymm0, %k0
+; CHECK-NEXT:    kmovd %k0, %eax
+; CHECK-NEXT:    # kill: def $al killed $al killed $eax
+; CHECK-NEXT:    vzeroupper
+; CHECK-NEXT:    retq
+  %a = icmp eq <2 x i64> %x, zeroinitializer
+  %b = shufflevector <2 x i1> %a, <2 x i1> <i1 false, i1 undef>, <8 x i32> <i32 0, i32 1, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2>
+  %c = bitcast <8 x i1> %b to i8
+  ret i8 %c
+}