diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/avx512-mask-op.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/avx512-mask-op.ll | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/avx512-mask-op.ll b/llvm/test/CodeGen/X86/avx512-mask-op.ll index a91e939bc7a..353f9ad42a6 100644 --- a/llvm/test/CodeGen/X86/avx512-mask-op.ll +++ b/llvm/test/CodeGen/X86/avx512-mask-op.ll @@ -55,6 +55,7 @@ define i32 @mask8_zext(i8 %x) { ; KNL-NEXT: kmovw %edi, %k0 ; KNL-NEXT: knotw %k0, %k0 ; KNL-NEXT: kmovw %k0, %eax +; KNL-NEXT: movzbl %al, %eax ; KNL-NEXT: retq ; ; SKX-LABEL: mask8_zext: @@ -1959,3 +1960,43 @@ define void @store_64i1(<64 x i1>* %a, <64 x i1> %v) { store <64 x i1> %v, <64 x i1>* %a ret void } + +define i32 @test_bitcast_v8i1_zext(<16 x i32> %a) { +; KNL-LABEL: test_bitcast_v8i1_zext: +; KNL: ## BB#0: +; KNL-NEXT: vpxord %zmm1, %zmm1, %zmm1 +; KNL-NEXT: vpcmpeqd %zmm1, %zmm0, %k0 +; KNL-NEXT: kmovw %k0, %eax +; KNL-NEXT: movzbl %al, %eax +; KNL-NEXT: addl %eax, %eax +; KNL-NEXT: retq +; +; SKX-LABEL: test_bitcast_v8i1_zext: +; SKX: ## BB#0: +; SKX-NEXT: vpxord %zmm1, %zmm1, %zmm1 +; SKX-NEXT: vpcmpeqd %zmm1, %zmm0, %k0 +; SKX-NEXT: kmovb %k0, %eax +; SKX-NEXT: addl %eax, %eax +; SKX-NEXT: retq + %v1 = icmp eq <16 x i32> %a, zeroinitializer + %mask = shufflevector <16 x i1> %v1, <16 x i1> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7> + %mask1 = bitcast <8 x i1> %mask to i8 + %val = zext i8 %mask1 to i32 + %val1 = add i32 %val, %val + ret i32 %val1 +} + +define i32 @test_bitcast_v16i1_zext(<16 x i32> %a) { +; CHECK-LABEL: test_bitcast_v16i1_zext: +; CHECK: ## BB#0: +; CHECK-NEXT: vpxord %zmm1, %zmm1, %zmm1 +; CHECK-NEXT: vpcmpeqd %zmm1, %zmm0, %k0 +; CHECK-NEXT: kmovw %k0, %eax +; CHECK-NEXT: addl %eax, %eax +; CHECK-NEXT: retq + %v1 = icmp eq <16 x i32> %a, zeroinitializer + %mask1 = bitcast <16 x i1> %v1 to i16 + %val = zext i16 %mask1 to i32 + %val1 = add i32 %val, %val + ret i32 %val1 +} |