From: Craig Topper <craig.topper@gmail.com> Date: Wed, 29 Mar 2017 07:31:56 +0000 (+0000) Subject: [AVX-512] Remove explicit KMOVWrk from isel patterns. COPY_TO_REGCLASS to GR32 is... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=31932b16fc291bb1d76bf7a92798434879a2d890;p=llvm [AVX-512] Remove explicit KMOVWrk from isel patterns. COPY_TO_REGCLASS to GR32 is enough. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@298985 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrAVX512.td b/lib/Target/X86/X86InstrAVX512.td index 797e5c768f5..78c44050c61 100644 --- a/lib/Target/X86/X86InstrAVX512.td +++ b/lib/Target/X86/X86InstrAVX512.td @@ -2235,20 +2235,20 @@ let Predicates = [HasDQI] in { let Predicates = [HasAVX512, NoDQI] in { def : Pat<(store VK1:$src, addr:$dst), (MOV8mr addr:$dst, - (EXTRACT_SUBREG (KMOVWrk (COPY_TO_REGCLASS VK1:$src, VK16)), - sub_8bit))>; + (i8 (EXTRACT_SUBREG (i32 (COPY_TO_REGCLASS VK1:$src, GR32)), + sub_8bit)))>; def : Pat<(store VK2:$src, addr:$dst), (MOV8mr addr:$dst, - (EXTRACT_SUBREG (KMOVWrk (COPY_TO_REGCLASS VK2:$src, VK16)), - sub_8bit))>; + (i8 (EXTRACT_SUBREG (i32 (COPY_TO_REGCLASS VK2:$src, GR32)), + sub_8bit)))>; def : Pat<(store VK4:$src, addr:$dst), (MOV8mr addr:$dst, - (EXTRACT_SUBREG (KMOVWrk (COPY_TO_REGCLASS VK4:$src, VK16)), - sub_8bit))>; + (i8 (EXTRACT_SUBREG (i32 (COPY_TO_REGCLASS VK4:$src, GR32)), + sub_8bit)))>; def : Pat<(store VK8:$src, addr:$dst), (MOV8mr addr:$dst, - (EXTRACT_SUBREG (KMOVWrk (COPY_TO_REGCLASS VK8:$src, VK16)), - sub_8bit))>; + (i8 (EXTRACT_SUBREG (i32 (COPY_TO_REGCLASS VK8:$src, GR32)), + sub_8bit)))>; def : Pat<(v8i1 (load addr:$src)), (COPY_TO_REGCLASS (MOVZX32rm8 addr:$src), VK8)>; diff --git a/test/CodeGen/X86/avx512-mask-op.ll b/test/CodeGen/X86/avx512-mask-op.ll index bd2146d8df5..aec1339d653 100644 --- a/test/CodeGen/X86/avx512-mask-op.ll +++ b/test/CodeGen/X86/avx512-mask-op.ll @@ -190,7 +190,7 @@ define void @mask8_mem(i8* %ptr) { ; AVX512BW-NEXT: movzbl (%rdi), %eax ; AVX512BW-NEXT: kmovd %eax, %k0 ; AVX512BW-NEXT: knotw %k0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: retq ; @@ -481,7 +481,7 @@ define i8 @conv1(<8 x i1>* %R) { ; AVX512BW-LABEL: conv1: ; AVX512BW: ## BB#0: ## %entry ; AVX512BW-NEXT: kxnorw %k0, %k0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: movb $-2, -{{[0-9]+}}(%rsp) ; AVX512BW-NEXT: movb $-2, %al @@ -1324,7 +1324,7 @@ define void @test22(<4 x i1> %a, <4 x i1>* %addr) { ; AVX512BW-NEXT: ## kill: %XMM0<def> %XMM0<kill> %YMM0<def> ; AVX512BW-NEXT: vpslld $31, %ymm0, %ymm0 ; AVX512BW-NEXT: vptestmd %zmm0, %zmm0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: vzeroupper ; AVX512BW-NEXT: retq @@ -1363,7 +1363,7 @@ define void @test23(<2 x i1> %a, <2 x i1>* %addr) { ; AVX512BW-NEXT: ## kill: %XMM0<def> %XMM0<kill> %ZMM0<def> ; AVX512BW-NEXT: vpsllq $63, %zmm0, %zmm0 ; AVX512BW-NEXT: vptestmq %zmm0, %zmm0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: vzeroupper ; AVX512BW-NEXT: retq @@ -1409,7 +1409,7 @@ define void @store_v1i1(<1 x i1> %c , <1 x i1>* %ptr) { ; AVX512BW-NEXT: kxnorw %k0, %k0, %k1 ; AVX512BW-NEXT: kshiftrw $15, %k1, %k1 ; AVX512BW-NEXT: kxorw %k1, %k0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rsi) ; AVX512BW-NEXT: retq ; @@ -1450,7 +1450,7 @@ define void @store_v2i1(<2 x i1> %c , <2 x i1>* %ptr) { ; AVX512BW-NEXT: vpxor {{.*}}(%rip), %xmm0, %xmm0 ; AVX512BW-NEXT: vpsllq $63, %zmm0, %zmm0 ; AVX512BW-NEXT: vptestmq %zmm0, %zmm0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: vzeroupper ; AVX512BW-NEXT: retq @@ -1493,7 +1493,7 @@ define void @store_v4i1(<4 x i1> %c , <4 x i1>* %ptr) { ; AVX512BW-NEXT: vpxor %xmm1, %xmm0, %xmm0 ; AVX512BW-NEXT: vpslld $31, %ymm0, %ymm0 ; AVX512BW-NEXT: vptestmd %zmm0, %zmm0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: vzeroupper ; AVX512BW-NEXT: retq @@ -1536,7 +1536,7 @@ define void @store_v8i1(<8 x i1> %c , <8 x i1>* %ptr) { ; AVX512BW-NEXT: vpsllw $15, %xmm0, %xmm0 ; AVX512BW-NEXT: vpmovw2m %zmm0, %k0 ; AVX512BW-NEXT: knotw %k0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: vzeroupper ; AVX512BW-NEXT: retq @@ -1646,7 +1646,7 @@ define void @f1(i32 %c) { ; AVX512BW-NEXT: kxnorw %k0, %k0, %k1 ; AVX512BW-NEXT: kshiftrw $15, %k1, %k1 ; AVX512BW-NEXT: kxorw %k1, %k0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, {{.*}}(%rip) ; AVX512BW-NEXT: xorl $1, %edi ; AVX512BW-NEXT: jmp _f2 ## TAILCALL @@ -2773,7 +2773,7 @@ define void @store_8i1(<8 x i1>* %a, <8 x i1> %v) { ; AVX512BW: ## BB#0: ; AVX512BW-NEXT: vpsllw $15, %xmm0, %xmm0 ; AVX512BW-NEXT: vpmovw2m %zmm0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: vzeroupper ; AVX512BW-NEXT: retq @@ -2811,7 +2811,7 @@ define void @store_8i1_1(<8 x i1>* %a, <8 x i16> %v) { ; AVX512BW: ## BB#0: ; AVX512BW-NEXT: vpsllw $15, %xmm0, %xmm0 ; AVX512BW-NEXT: vpmovw2m %zmm0, %k0 -; AVX512BW-NEXT: kmovw %k0, %eax +; AVX512BW-NEXT: kmovd %k0, %eax ; AVX512BW-NEXT: movb %al, (%rdi) ; AVX512BW-NEXT: vzeroupper ; AVX512BW-NEXT: retq