forked from OSchip/llvm-project
[X86][AVX2] Tag MASKMOV instruction scheduler classes
llvm-svn: 319915
This commit is contained in:
parent
fa172a5251
commit
809c024b3d
|
@ -7665,21 +7665,23 @@ multiclass avx_movmask_rm<bits<8> opc_rm, bits<8> opc_mr, string OpcodeStr,
|
|||
def rm : AVX8I<opc_rm, MRMSrcMem, (outs VR128:$dst),
|
||||
(ins VR128:$src1, f128mem:$src2),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(set VR128:$dst, (IntLd addr:$src2, VR128:$src1))]>,
|
||||
VEX_4V;
|
||||
[(set VR128:$dst, (IntLd addr:$src2, VR128:$src1))],
|
||||
IIC_SSE_MASKMOV>, VEX_4V, Sched<[WriteLoad]>;
|
||||
def Yrm : AVX8I<opc_rm, MRMSrcMem, (outs VR256:$dst),
|
||||
(ins VR256:$src1, f256mem:$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 : AVX8I<opc_mr, MRMDestMem, (outs),
|
||||
(ins f128mem:$dst, VR128:$src1, VR128:$src2),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(IntSt addr:$dst, VR128:$src1, VR128:$src2)]>, VEX_4V;
|
||||
[(IntSt addr:$dst, VR128:$src1, VR128:$src2)], IIC_SSE_MASKMOV>,
|
||||
VEX_4V, Sched<[WriteStore]>;
|
||||
def Ymr : AVX8I<opc_mr, MRMDestMem, (outs),
|
||||
(ins f256mem:$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]>;
|
||||
}
|
||||
|
||||
let ExeDomain = SSEPackedSingle in
|
||||
|
@ -8296,20 +8298,23 @@ multiclass avx2_pmovmask<string OpcodeStr,
|
|||
def rm : AVX28I<0x8c, MRMSrcMem, (outs VR128:$dst),
|
||||
(ins VR128:$src1, i128mem:$src2),
|
||||
!strconcat(OpcodeStr, "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
|
||||
[(set VR128:$dst, (IntLd128 addr:$src2, VR128:$src1))]>, 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",
|
||||
|
|
|
@ -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]
|
||||
;
|
||||
|
|
Loading…
Reference in New Issue