From e1bb461f27841bc051cfadd13a9c1ce2fdc98b0e Mon Sep 17 00:00:00 2001 From: Elena Demikhovsky Date: Wed, 2 Sep 2015 09:20:58 +0000 Subject: [PATCH] AVX-512: store <4 x i1> and <2 x i1> values in memory Enabled DAG pattern lowering for SKX with DQI predicate. Differential Revision: http://reviews.llvm.org/D12550 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246625 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrAVX512.td | 5 +++++ test/CodeGen/X86/avx512-mask-op.ll | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 170cd8d5232..41eb2efcc8d 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -1786,6 +1786,11 @@ let Predicates = [HasDQI] in { (KMOVBmk addr:$dst, VK8:$src)>; def : Pat<(v8i1 (bitconvert (i8 (load addr:$src)))), (KMOVBkm addr:$src)>; + + def : Pat<(store VK4:$src, addr:$dst), + (KMOVBmk addr:$dst, (COPY_TO_REGCLASS VK4:$src, VK8))>; + def : Pat<(store VK2:$src, addr:$dst), + (KMOVBmk addr:$dst, (COPY_TO_REGCLASS VK2:$src, VK8))>; } let Predicates = [HasAVX512, NoDQI] in { def : Pat<(store (i8 (bitconvert (v8i1 VK8:$src))), addr:$dst), diff --git a/test/CodeGen/X86/avx512-mask-op.ll b/test/CodeGen/X86/avx512-mask-op.ll index d2efd7d6db6..509baf9dd82 100644 --- a/test/CodeGen/X86/avx512-mask-op.ll +++ b/test/CodeGen/X86/avx512-mask-op.ll @@ -407,3 +407,17 @@ define <32 x i16> @test21(<32 x i16> %x , <32 x i1> %mask) nounwind readnone { %ret = select <32 x i1> %mask, <32 x i16> %x, <32 x i16> zeroinitializer ret <32 x i16> %ret } + +; SKX-LABEL: test22 +; SKX: kmovb +define void @test22(<4 x i1> %a, <4 x i1>* %addr) { + store <4 x i1> %a, <4 x i1>* %addr + ret void +} + +; SKX-LABEL: test23 +; SKX: kmovb +define void @test23(<2 x i1> %a, <2 x i1>* %addr) { + store <2 x i1> %a, <2 x i1>* %addr + ret void +} -- 2.34.1