mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-23 04:01:16 +00:00
[X86][Btver2] Account for the "+i" integer pipe transfer costs (1cy use of JALU0 for GPR PRF write)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@328536 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2fc30a3dc4
commit
f0568a860c
@ -355,13 +355,12 @@ defm : JWriteResFpuPair<WriteVarVecShift, [JFPU01, JVALU], 1>; // NOTE: Doesn't
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// SSE42 String instructions.
|
||||
// FIXME: Latency+i
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
defm : JWriteResFpuPair<WritePCmpIStrI, [JFPU1, JVALU1, JFPA], 7, [1, 2, 1], 3>;
|
||||
defm : JWriteResFpuPair<WritePCmpIStrM, [JFPU1, JVALU1, JFPA], 8, [1, 2, 1], 3>;
|
||||
defm : JWriteResFpuPair<WritePCmpEStrI, [JFPU1, JSAGU, JLAGU, JVALU, JVALU1, JFPA], 14, [1, 2, 2, 6, 4, 1], 9>;
|
||||
defm : JWriteResFpuPair<WritePCmpEStrM, [JFPU1, JSAGU, JLAGU, JVALU, JVALU1, JFPA], 14, [1, 2, 2, 6, 4, 1], 9>;
|
||||
defm : JWriteResFpuPair<WritePCmpIStrI, [JFPU1, JVALU1, JFPA, JALU0], 7, [1, 2, 1, 1], 3>;
|
||||
defm : JWriteResFpuPair<WritePCmpIStrM, [JFPU1, JVALU1, JFPA, JALU0], 8, [1, 2, 1, 1], 3>;
|
||||
defm : JWriteResFpuPair<WritePCmpEStrI, [JFPU1, JSAGU, JLAGU, JVALU, JVALU1, JFPA, JALU0], 14, [1, 2, 2, 6, 4, 1, 1], 9>;
|
||||
defm : JWriteResFpuPair<WritePCmpEStrM, [JFPU1, JSAGU, JLAGU, JVALU, JVALU1, JFPA, JALU0], 14, [1, 2, 2, 6, 4, 1, 1], 9>;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// AES Instructions.
|
||||
@ -766,41 +765,33 @@ def JWriteVMaskMovYSt: SchedWriteRes<[JFPU01, JFPX, JSAGU]> {
|
||||
}
|
||||
def : InstRW<[JWriteVMaskMovYSt], (instrs VMASKMOVPDYmr, VMASKMOVPSYmr)>;
|
||||
|
||||
// TODO: In fact we have latency '2+i'. The +i represents an additional 1 cycle transfer
|
||||
// operation which moves the floating point result to the integer unit. During this
|
||||
// additional cycle the floating point unit execution resources are not occupied
|
||||
// and ALU0 in the integer unit is occupied instead.
|
||||
def JWriteVMOVMSK: SchedWriteRes<[JFPU0, JFPA]> {
|
||||
def JWriteVMOVMSK: SchedWriteRes<[JFPU0, JFPA, JALU0]> {
|
||||
let Latency = 3;
|
||||
}
|
||||
def : InstRW<[JWriteVMOVMSK], (instrs MOVMSKPDrr, VMOVMSKPDrr, VMOVMSKPDYrr,
|
||||
MOVMSKPSrr, VMOVMSKPSrr, VMOVMSKPSYrr,
|
||||
PMOVMSKBrr, VPMOVMSKBrr)>;
|
||||
|
||||
// TODO: In fact we have latency '3+i'. The +i represents an additional 1 cycle transfer
|
||||
// operation which moves the floating point result to the integer unit. During this
|
||||
// additional cycle the floating point unit execution resources are not occupied
|
||||
// and ALU0 in the integer unit is occupied instead.
|
||||
def JWriteVTESTY: SchedWriteRes<[JFPU01, JFPX, JFPA]> {
|
||||
def JWriteVTESTY: SchedWriteRes<[JFPU01, JFPX, JFPA, JALU0]> {
|
||||
let Latency = 4;
|
||||
let ResourceCycles = [2, 2, 2];
|
||||
let ResourceCycles = [2, 2, 2, 1];
|
||||
let NumMicroOps = 3;
|
||||
}
|
||||
def : InstRW<[JWriteVTESTY], (instrs VPTESTYrr, VTESTPDYrr, VTESTPSYrr)>;
|
||||
|
||||
def JWriteVTESTYLd: SchedWriteRes<[JLAGU, JFPU01, JFPX, JFPA]> {
|
||||
def JWriteVTESTYLd: SchedWriteRes<[JLAGU, JFPU01, JFPX, JFPA, JALU0]> {
|
||||
let Latency = 9;
|
||||
let ResourceCycles = [2, 2, 2, 2];
|
||||
let ResourceCycles = [2, 2, 2, 2, 1];
|
||||
let NumMicroOps = 3;
|
||||
}
|
||||
def : InstRW<[JWriteVTESTYLd], (instrs VPTESTYrm, VTESTPDYrm, VTESTPSYrm)>;
|
||||
|
||||
def JWriteVTEST: SchedWriteRes<[JFPU0, JFPA]> {
|
||||
def JWriteVTEST: SchedWriteRes<[JFPU0, JFPA, JALU0]> {
|
||||
let Latency = 3;
|
||||
}
|
||||
def : InstRW<[JWriteVTEST], (instrs PTESTrr, VPTESTrr, VTESTPDrr, VTESTPSrr)>;
|
||||
|
||||
def JWriteVTESTLd: SchedWriteRes<[JLAGU, JFPU0, JFPA]> {
|
||||
def JWriteVTESTLd: SchedWriteRes<[JLAGU, JFPU0, JFPA, JALU0]> {
|
||||
let Latency = 8;
|
||||
}
|
||||
def : InstRW<[JWriteVTESTLd], (instrs PTESTrm, VPTESTrm, VTESTPDrm, VTESTPSrm)>;
|
||||
|
@ -1290,10 +1290,10 @@ vzeroupper
|
||||
# CHECK-NEXT: - - - 0.50 0.50 0.50 0.50 1.00 - - - - - - vmovlpd (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - - - - - - - 1.00 - - - - vmovlps %xmm0, (%rax)
|
||||
# CHECK-NEXT: - - - 0.50 0.50 0.50 0.50 1.00 - - - - - - vmovlps (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vmovmskpd %xmm0, %ecx
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vmovmskpd %ymm0, %ecx
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vmovmskps %xmm0, %ecx
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vmovmskps %ymm0, %ecx
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - vmovmskpd %xmm0, %ecx
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - vmovmskpd %ymm0, %ecx
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - vmovmskps %xmm0, %ecx
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - vmovmskps %ymm0, %ecx
|
||||
# CHECK-NEXT: - - - - - - 1.00 - - 1.00 1.00 - - - vmovntdq %xmm0, (%rax)
|
||||
# CHECK-NEXT: - - - - - - 2.00 - - 2.00 2.00 - - - vmovntdq %ymm0, (%rax)
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - vmovntdqa (%rax), %xmm2
|
||||
@ -1493,7 +1493,7 @@ vzeroupper
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - vpminud (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - vpminuw %xmm0, %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - vpminuw (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vpmovmskb %xmm0, %ecx
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - vpmovmskb %xmm0, %ecx
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - vpmovsxbd %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - vpmovsxbd (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - vpmovsxbq %xmm0, %xmm2
|
||||
@ -1592,10 +1592,10 @@ vzeroupper
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - vpsubusw (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - vpsubw %xmm0, %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - vpsubw (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vptest %xmm0, %xmm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - 1.00 - - - - - - vptest (%rax), %xmm1
|
||||
# CHECK-NEXT: - - - 3.00 1.00 1.00 1.00 - - - - - - - vptest %ymm0, %ymm1
|
||||
# CHECK-NEXT: - - - 3.00 1.00 1.00 1.00 2.00 - - - - - - vptest (%rax), %ymm1
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - vptest %xmm0, %xmm1
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - 1.00 - - - - - - vptest (%rax), %xmm1
|
||||
# CHECK-NEXT: 1.00 - - 3.00 1.00 1.00 1.00 - - - - - - - vptest %ymm0, %ymm1
|
||||
# CHECK-NEXT: 1.00 - - 3.00 1.00 1.00 1.00 2.00 - - - - - - vptest (%rax), %ymm1
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - vpunpckhbw %xmm0, %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - vpunpckhbw (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - vpunpckhdq %xmm0, %xmm1, %xmm2
|
||||
@ -1671,14 +1671,14 @@ vzeroupper
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - 1.00 - - - - - - vsubsd (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vsubss %xmm0, %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - 1.00 - - - - - - vsubss (%rax), %xmm1, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vtestpd %xmm0, %xmm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - 1.00 - - - - - - vtestpd (%rax), %xmm1
|
||||
# CHECK-NEXT: - - - 3.00 1.00 1.00 1.00 - - - - - - - vtestpd %ymm0, %ymm1
|
||||
# CHECK-NEXT: - - - 3.00 1.00 1.00 1.00 2.00 - - - - - - vtestpd (%rax), %ymm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vtestps %xmm0, %xmm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - 1.00 - - - - - - vtestps (%rax), %xmm1
|
||||
# CHECK-NEXT: - - - 3.00 1.00 1.00 1.00 - - - - - - - vtestps %ymm0, %ymm1
|
||||
# CHECK-NEXT: - - - 3.00 1.00 1.00 1.00 2.00 - - - - - - vtestps (%rax), %ymm1
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - vtestpd %xmm0, %xmm1
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - 1.00 - - - - - - vtestpd (%rax), %xmm1
|
||||
# CHECK-NEXT: 1.00 - - 3.00 1.00 1.00 1.00 - - - - - - - vtestpd %ymm0, %ymm1
|
||||
# CHECK-NEXT: 1.00 - - 3.00 1.00 1.00 1.00 2.00 - - - - - - vtestpd (%rax), %ymm1
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - vtestps %xmm0, %xmm1
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - 1.00 - - - - - - vtestps (%rax), %xmm1
|
||||
# CHECK-NEXT: 1.00 - - 3.00 1.00 1.00 1.00 - - - - - - - vtestps %ymm0, %ymm1
|
||||
# CHECK-NEXT: 1.00 - - 3.00 1.00 1.00 1.00 2.00 - - - - - - vtestps (%rax), %ymm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vucomisd %xmm0, %xmm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - 1.00 - - - - - - vucomisd (%rax), %xmm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - vucomiss %xmm0, %xmm1
|
||||
|
@ -304,7 +304,7 @@ xorps (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 0.50 0.50 0.50 0.50 1.00 - - - - - - movhps (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - - - - - 1.00 - - - - movlps %xmm0, (%rax)
|
||||
# CHECK-NEXT: - - - 0.50 0.50 0.50 0.50 1.00 - - - - - - movlps (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - movmskps %xmm0, %ecx
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - movmskps %xmm0, %ecx
|
||||
# CHECK-NEXT: - - - - - - 1.00 - - 1.00 1.00 - - - movntps %xmm0, (%rax)
|
||||
# CHECK-NEXT: - - - 0.50 0.50 0.50 0.50 - - - - - - - movss %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - - - - - - - 1.00 - - - - movss %xmm0, (%rax)
|
||||
|
@ -472,7 +472,7 @@ xorpd (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 0.50 0.50 0.50 0.50 1.00 - - - - - - movhpd (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - - - - - 1.00 - - - - movlpd %xmm0, (%rax)
|
||||
# CHECK-NEXT: - - - 0.50 0.50 0.50 0.50 1.00 - - - - - - movlpd (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - movmskpd %xmm0, %ecx
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - movmskpd %xmm0, %ecx
|
||||
# CHECK-NEXT: - - - - - - 1.00 - - 1.00 1.00 - - - movntdq %xmm0, (%rax)
|
||||
# CHECK-NEXT: - - - - - - 1.00 - - 1.00 1.00 - - - movntpd %xmm0, (%rax)
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - movq %xmm0, %xmm2
|
||||
@ -551,7 +551,7 @@ xorpd (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - pminsw (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - pminub %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - pminub (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - pmovmskb %xmm0, %ecx
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - pmovmskb %xmm0, %ecx
|
||||
# CHECK-NEXT: - - - - - 1.00 - - - - - - - 1.00 pmulhuw %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - - - 1.00 - 1.00 - - - - - 1.00 pmulhuw (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - 1.00 - - - - - - - 1.00 pmulhw %xmm0, %xmm2
|
||||
|
@ -249,8 +249,8 @@ roundss $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - 1.00 - 1.00 - - - - - 1.00 pmuldq (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - 1.00 - - - - - - - 1.00 pmulld %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - - - 1.00 - 1.00 - - - - - 1.00 pmulld (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - ptest %xmm0, %xmm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - 1.00 - - - - - - ptest (%rax), %xmm1
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - - - - - - - - ptest %xmm0, %xmm1
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - 1.00 - 1.00 - - - - - - ptest (%rax), %xmm1
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - roundpd $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - 1.00 - - - - - - roundpd $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - 1.00 - - - - - - - - roundps $1, %xmm0, %xmm2
|
||||
|
@ -58,13 +58,13 @@ pcmpgtq (%rax), %xmm2
|
||||
# CHECK-NEXT: 2.00 2.00 - - - - - 1.00 - - - - - - crc32b (%rax), %rcx
|
||||
# CHECK-NEXT: 2.00 2.00 - - - - - - - - - - - - crc32q %rax, %rcx
|
||||
# CHECK-NEXT: 2.00 2.00 - - - - - 1.00 - - - - - - crc32q (%rax), %rcx
|
||||
# CHECK-NEXT: - - - 1.00 - - 1.00 2.00 - 2.00 - 3.00 7.00 - pcmpestri $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - - 1.00 3.00 - 2.00 - 3.00 7.00 - pcmpestri $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - - 1.00 2.00 - 2.00 - 3.00 7.00 - pcmpestrm $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - - 1.00 3.00 - 2.00 - 3.00 7.00 - pcmpestrm $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - - 1.00 - - - - - 2.00 - pcmpistri $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - - 1.00 1.00 - - - - 2.00 - pcmpistri $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - - 1.00 - - - - - 2.00 - pcmpistrm $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - 1.00 - - 1.00 1.00 - - - - 2.00 - pcmpistrm $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - - 1.00 2.00 - 2.00 - 3.00 7.00 - pcmpestri $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - - 1.00 3.00 - 2.00 - 3.00 7.00 - pcmpestri $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - - 1.00 2.00 - 2.00 - 3.00 7.00 - pcmpestrm $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - - 1.00 3.00 - 2.00 - 3.00 7.00 - pcmpestrm $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - - 1.00 - - - - - 2.00 - pcmpistri $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - - 1.00 1.00 - - - - 2.00 - pcmpistri $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - - 1.00 - - - - - 2.00 - pcmpistrm $1, %xmm0, %xmm2
|
||||
# CHECK-NEXT: 1.00 - - 1.00 - - 1.00 1.00 - - - - 2.00 - pcmpistrm $1, (%rax), %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 - - - - 0.50 0.50 - pcmpgtq %xmm0, %xmm2
|
||||
# CHECK-NEXT: - - - - - 0.50 0.50 1.00 - - - 0.50 0.50 - pcmpgtq (%rax), %xmm2
|
||||
|
Loading…
x
Reference in New Issue
Block a user