diff options
| author | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2015-05-12 09:36:52 +0000 |
|---|---|---|
| committer | Elena Demikhovsky <elena.demikhovsky@intel.com> | 2015-05-12 09:36:52 +0000 |
| commit | c1ac5d7bd57c5d3ad642c4753a156a0419b93043 (patch) | |
| tree | 0f460fb8d2833c1c98272897ffda3cefb2533151 /llvm/test | |
| parent | 93df5d9c69196c5548f1abb9418e7fcb8aa7f6f3 (diff) | |
| download | bcm5719-llvm-c1ac5d7bd57c5d3ad642c4753a156a0419b93043.tar.gz bcm5719-llvm-c1ac5d7bd57c5d3ad642c4753a156a0419b93043.zip | |
AVX-512: select operation for i1 vectors
like: select i1 %cond, <16 x i1> %a, <16 x i1> %b.
I added pseudo-CMOV patterns to resolve the "select".
Added tests for KNL and SKX.
llvm-svn: 237106
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/X86/avx512-mask-op.ll | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/X86/avx512-mask-op.ll b/llvm/test/CodeGen/X86/avx512-mask-op.ll index 5f3588d68d0..6e12289389a 100644 --- a/llvm/test/CodeGen/X86/avx512-mask-op.ll +++ b/llvm/test/CodeGen/X86/avx512-mask-op.ll @@ -207,3 +207,78 @@ true: false: ret void } + +; KNL-LABEL: test8 +; KNL: vpxord %zmm2, %zmm2, %zmm2 +; KNL: jg +; KNL: vpcmpltud %zmm2, %zmm1, %k1 +; KNL: jmp +; KNL: vpcmpgtd %zmm2, %zmm0, %k1 + +; SKX-LABEL: test8 +; SKX: jg +; SKX: vpcmpltud {{.*}}, %k0 +; SKX: vpmovm2b +; SKX: vpcmpgtd {{.*}}, %k0 +; SKX: vpmovm2b + +define <16 x i8> @test8(<16 x i32>%a, <16 x i32>%b, i32 %a1, i32 %b1) { + %cond = icmp sgt i32 %a1, %b1 + %cmp1 = icmp sgt <16 x i32> %a, zeroinitializer + %cmp2 = icmp ult <16 x i32> %b, zeroinitializer + %mix = select i1 %cond, <16 x i1> %cmp1, <16 x i1> %cmp2 + %res = sext <16 x i1> %mix to <16 x i8> + ret <16 x i8> %res +} + +; KNL-LABEL: test9 +; KNL: jg +; KNL: vpmovsxbd %xmm1, %zmm0 +; KNL: jmp +; KNL: vpmovsxbd %xmm0, %zmm0 + +; SKX-LABEL: test9 +; SKX: vpmovb2m %xmm1, %k0 +; SKX: vpmovm2b %k0, %xmm0 +; SKX: retq +; SKX: vpmovb2m %xmm0, %k0 +; SKX: vpmovm2b %k0, %xmm0 + +define <16 x i1> @test9(<16 x i1>%a, <16 x i1>%b, i32 %a1, i32 %b1) { + %mask = icmp sgt i32 %a1, %b1 + %c = select i1 %mask, <16 x i1>%a, <16 x i1>%b + ret <16 x i1>%c +} + +; KNL-LABEL: test10 +; KNL: jg +; KNL: vpmovsxwq %xmm1, %zmm0 +; KNL: jmp +; KNL: vpmovsxwq %xmm0, %zmm0 + +; SKX-LABEL: test10 +; SKX: jg +; SKX: vpmovw2m %xmm1, %k0 +; SKX: vpmovm2w %k0, %xmm0 +; SKX: retq +; SKX: vpmovw2m %xmm0, %k0 +; SKX: vpmovm2w %k0, %xmm0 +define <8 x i1> @test10(<8 x i1>%a, <8 x i1>%b, i32 %a1, i32 %b1) { + %mask = icmp sgt i32 %a1, %b1 + %c = select i1 %mask, <8 x i1>%a, <8 x i1>%b + ret <8 x i1>%c +} + +; SKX-LABEL: test11 +; SKX: jg +; SKX: vpmovd2m %xmm1, %k0 +; SKX: vpmovm2d %k0, %xmm0 +; SKX: retq +; SKX: vpmovd2m %xmm0, %k0 +; SKX: vpmovm2d %k0, %xmm0 +define <4 x i1> @test11(<4 x i1>%a, <4 x i1>%b, i32 %a1, i32 %b1) { + %mask = icmp sgt i32 %a1, %b1 + %c = select i1 %mask, <4 x i1>%a, <4 x i1>%b + ret <4 x i1>%c +} + |

