From: Craig Topper Date: Thu, 16 Mar 2017 19:58:06 +0000 (+0000) Subject: [AVX-512] Add tests for kandn, kor, kxor, and kxnor intrinsics. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=271460b5146fca5eac3c6f1a758e79c9f43264cb;p=llvm [AVX-512] Add tests for kandn, kor, kxor, and kxnor intrinsics. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297978 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/X86/avx512-intrinsics.ll b/test/CodeGen/X86/avx512-intrinsics.ll index 6405468b36a..2e1d4e0543f 100644 --- a/test/CodeGen/X86/avx512-intrinsics.ll +++ b/test/CodeGen/X86/avx512-intrinsics.ll @@ -46,6 +46,23 @@ define i16 @test_kand(i16 %a0, i16 %a1) { ret i16 %t2 } +declare i16 @llvm.x86.avx512.kandn.w(i16, i16) nounwind readnone +define i16 @test_kandn(i16 %a0, i16 %a1) { +; CHECK-LABEL: test_kandn: +; CHECK: ## BB#0: +; CHECK-NEXT: movw $8, %ax +; CHECK-NEXT: kmovw %eax, %k0 +; CHECK-NEXT: kmovw %edi, %k1 +; CHECK-NEXT: kandnw %k0, %k1, %k0 +; CHECK-NEXT: kmovw %esi, %k1 +; CHECK-NEXT: kandnw %k1, %k0, %k0 +; CHECK-NEXT: kmovw %k0, %eax +; CHECK-NEXT: retq + %t1 = call i16 @llvm.x86.avx512.kandn.w(i16 %a0, i16 8) + %t2 = call i16 @llvm.x86.avx512.kandn.w(i16 %t1, i16 %a1) + ret i16 %t2 +} + declare i16 @llvm.x86.avx512.knot.w(i16) nounwind readnone define i16 @test_knot(i16 %a0) { ; CHECK-LABEL: test_knot: @@ -58,6 +75,23 @@ define i16 @test_knot(i16 %a0) { ret i16 %res } +declare i16 @llvm.x86.avx512.kor.w(i16, i16) nounwind readnone +define i16 @test_kor(i16 %a0, i16 %a1) { +; CHECK-LABEL: test_kor: +; CHECK: ## BB#0: +; CHECK-NEXT: movw $8, %ax +; CHECK-NEXT: kmovw %eax, %k0 +; CHECK-NEXT: kmovw %edi, %k1 +; CHECK-NEXT: korw %k0, %k1, %k0 +; CHECK-NEXT: kmovw %esi, %k1 +; CHECK-NEXT: korw %k1, %k0, %k0 +; CHECK-NEXT: kmovw %k0, %eax +; CHECK-NEXT: retq + %t1 = call i16 @llvm.x86.avx512.kor.w(i16 %a0, i16 8) + %t2 = call i16 @llvm.x86.avx512.kor.w(i16 %t1, i16 %a1) + ret i16 %t2 +} + declare i16 @llvm.x86.avx512.kunpck.bw(i16, i16) nounwind readnone define i16 @unpckbw_test(i16 %a0, i16 %a1) { @@ -72,6 +106,40 @@ define i16 @unpckbw_test(i16 %a0, i16 %a1) { ret i16 %res } +declare i16 @llvm.x86.avx512.kxnor.w(i16, i16) nounwind readnone +define i16 @test_kxnor(i16 %a0, i16 %a1) { +; CHECK-LABEL: test_kxnor: +; CHECK: ## BB#0: +; CHECK-NEXT: movw $8, %ax +; CHECK-NEXT: kmovw %eax, %k0 +; CHECK-NEXT: kmovw %edi, %k1 +; CHECK-NEXT: kxnorw %k0, %k1, %k0 +; CHECK-NEXT: kmovw %esi, %k1 +; CHECK-NEXT: kxnorw %k1, %k0, %k0 +; CHECK-NEXT: kmovw %k0, %eax +; CHECK-NEXT: retq + %t1 = call i16 @llvm.x86.avx512.kxnor.w(i16 %a0, i16 8) + %t2 = call i16 @llvm.x86.avx512.kxnor.w(i16 %t1, i16 %a1) + ret i16 %t2 +} + +declare i16 @llvm.x86.avx512.kxor.w(i16, i16) nounwind readnone +define i16 @test_kxor(i16 %a0, i16 %a1) { +; CHECK-LABEL: test_kxor: +; CHECK: ## BB#0: +; CHECK-NEXT: movw $8, %ax +; CHECK-NEXT: kmovw %eax, %k0 +; CHECK-NEXT: kmovw %edi, %k1 +; CHECK-NEXT: kxorw %k0, %k1, %k0 +; CHECK-NEXT: kmovw %esi, %k1 +; CHECK-NEXT: kxorw %k1, %k0, %k0 +; CHECK-NEXT: kmovw %k0, %eax +; CHECK-NEXT: retq + %t1 = call i16 @llvm.x86.avx512.kxor.w(i16 %a0, i16 8) + %t2 = call i16 @llvm.x86.avx512.kxor.w(i16 %t1, i16 %a1) + ret i16 %t2 +} + define <16 x float> @test_rcp_ps_512(<16 x float> %a0) { ; CHECK-LABEL: test_rcp_ps_512: ; CHECK: ## BB#0: