From: Simon Pilgrim Date: Wed, 6 Dec 2017 18:24:48 +0000 (+0000) Subject: [X86][AVX2] Tag MASKMOV instruction scheduler classes X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1c65bd2d5a3a4d70c61d1031c063ae49f30f3613;p=llvm [X86][AVX2] Tag MASKMOV instruction scheduler classes git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319915 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/X86InstrSSE.td b/lib/Target/X86/X86InstrSSE.td index 6616b2c3258..927d020b26b 100644 --- a/lib/Target/X86/X86InstrSSE.td +++ b/lib/Target/X86/X86InstrSSE.td @@ -7665,21 +7665,23 @@ multiclass avx_movmask_rm opc_rm, bits<8> opc_mr, string OpcodeStr, def rm : AVX8I, - VEX_4V; + [(set VR128:$dst, (IntLd addr:$src2, VR128:$src1))], + IIC_SSE_MASKMOV>, VEX_4V, Sched<[WriteLoad]>; def Yrm : AVX8I, - VEX_4V, VEX_L; + [(set VR256:$dst, (IntLd256 addr:$src2, VR256:$src1))], + IIC_SSE_MASKMOV>, VEX_4V, VEX_L, Sched<[WriteLoad]>; def mr : AVX8I, VEX_4V; + [(IntSt addr:$dst, VR128:$src1, VR128:$src2)], IIC_SSE_MASKMOV>, + VEX_4V, Sched<[WriteStore]>; def Ymr : AVX8I, VEX_4V, VEX_L; + [(IntSt256 addr:$dst, VR256:$src1, VR256:$src2)], IIC_SSE_MASKMOV>, + VEX_4V, VEX_L, Sched<[WriteStore]>; } let ExeDomain = SSEPackedSingle in @@ -8296,20 +8298,23 @@ multiclass avx2_pmovmask, VEX_4V; + [(set VR128:$dst, (IntLd128 addr:$src2, VR128:$src1))], + IIC_SSE_MASKMOV>, VEX_4V, Sched<[WriteLoad]>; def Yrm : AVX28I<0x8c, MRMSrcMem, (outs VR256:$dst), (ins VR256:$src1, i256mem:$src2), !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), - [(set VR256:$dst, (IntLd256 addr:$src2, VR256:$src1))]>, - VEX_4V, VEX_L; + [(set VR256:$dst, (IntLd256 addr:$src2, VR256:$src1))], + IIC_SSE_MASKMOV>, VEX_4V, VEX_L, Sched<[WriteLoad]>; def mr : AVX28I<0x8e, MRMDestMem, (outs), (ins i128mem:$dst, VR128:$src1, VR128:$src2), !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), - [(IntSt128 addr:$dst, VR128:$src1, VR128:$src2)]>, VEX_4V; + [(IntSt128 addr:$dst, VR128:$src1, VR128:$src2)], IIC_SSE_MASKMOV>, + VEX_4V, Sched<[WriteStore]>; def Ymr : AVX28I<0x8e, MRMDestMem, (outs), (ins i256mem:$dst, VR256:$src1, VR256:$src2), !strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"), - [(IntSt256 addr:$dst, VR256:$src1, VR256:$src2)]>, VEX_4V, VEX_L; + [(IntSt256 addr:$dst, VR256:$src1, VR256:$src2)], IIC_SSE_MASKMOV>, + VEX_4V, VEX_L, Sched<[WriteStore]>; } defm VPMASKMOVD : avx2_pmovmask<"vpmaskmovd", diff --git a/test/CodeGen/X86/avx2-schedule.ll b/test/CodeGen/X86/avx2-schedule.ll index ee5e4afdc87..0e10fdce89f 100644 --- a/test/CodeGen/X86/avx2-schedule.ll +++ b/test/CodeGen/X86/avx2-schedule.ll @@ -3382,8 +3382,8 @@ declare <8 x i32> @llvm.x86.avx2.pmadd.wd(<16 x i16>, <16 x i16>) nounwind readn define <4 x i32> @test_pmaskmovd(i8* %a0, <4 x i32> %a1, <4 x i32> %a2) { ; GENERIC-LABEL: test_pmaskmovd: ; GENERIC: # %bb.0: -; GENERIC-NEXT: vpmaskmovd (%rdi), %xmm0, %xmm2 -; GENERIC-NEXT: vpmaskmovd %xmm1, %xmm0, (%rdi) +; GENERIC-NEXT: vpmaskmovd (%rdi), %xmm0, %xmm2 # sched: [4:0.50] +; GENERIC-NEXT: vpmaskmovd %xmm1, %xmm0, (%rdi) # sched: [1:1.00] ; GENERIC-NEXT: vmovdqa %xmm2, %xmm0 # sched: [1:0.50] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -3431,8 +3431,8 @@ declare void @llvm.x86.avx2.maskstore.d(i8*, <4 x i32>, <4 x i32>) nounwind define <8 x i32> @test_pmaskmovd_ymm(i8* %a0, <8 x i32> %a1, <8 x i32> %a2) { ; GENERIC-LABEL: test_pmaskmovd_ymm: ; GENERIC: # %bb.0: -; GENERIC-NEXT: vpmaskmovd (%rdi), %ymm0, %ymm2 -; GENERIC-NEXT: vpmaskmovd %ymm1, %ymm0, (%rdi) +; GENERIC-NEXT: vpmaskmovd (%rdi), %ymm0, %ymm2 # sched: [4:0.50] +; GENERIC-NEXT: vpmaskmovd %ymm1, %ymm0, (%rdi) # sched: [1:1.00] ; GENERIC-NEXT: vmovdqa %ymm2, %ymm0 # sched: [1:0.50] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -3480,8 +3480,8 @@ declare void @llvm.x86.avx2.maskstore.d.256(i8*, <8 x i32>, <8 x i32>) nounwind define <2 x i64> @test_pmaskmovq(i8* %a0, <2 x i64> %a1, <2 x i64> %a2) { ; GENERIC-LABEL: test_pmaskmovq: ; GENERIC: # %bb.0: -; GENERIC-NEXT: vpmaskmovq (%rdi), %xmm0, %xmm2 -; GENERIC-NEXT: vpmaskmovq %xmm1, %xmm0, (%rdi) +; GENERIC-NEXT: vpmaskmovq (%rdi), %xmm0, %xmm2 # sched: [4:0.50] +; GENERIC-NEXT: vpmaskmovq %xmm1, %xmm0, (%rdi) # sched: [1:1.00] ; GENERIC-NEXT: vmovdqa %xmm2, %xmm0 # sched: [1:0.50] ; GENERIC-NEXT: retq # sched: [1:1.00] ; @@ -3529,8 +3529,8 @@ declare void @llvm.x86.avx2.maskstore.q(i8*, <2 x i64>, <2 x i64>) nounwind define <4 x i64> @test_pmaskmovq_ymm(i8* %a0, <4 x i64> %a1, <4 x i64> %a2) { ; GENERIC-LABEL: test_pmaskmovq_ymm: ; GENERIC: # %bb.0: -; GENERIC-NEXT: vpmaskmovq (%rdi), %ymm0, %ymm2 -; GENERIC-NEXT: vpmaskmovq %ymm1, %ymm0, (%rdi) +; GENERIC-NEXT: vpmaskmovq (%rdi), %ymm0, %ymm2 # sched: [4:0.50] +; GENERIC-NEXT: vpmaskmovq %ymm1, %ymm0, (%rdi) # sched: [1:1.00] ; GENERIC-NEXT: vmovdqa %ymm2, %ymm0 # sched: [1:0.50] ; GENERIC-NEXT: retq # sched: [1:1.00] ;