diff options
author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-03-26 16:10:08 +0000 |
---|---|---|
committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2018-03-26 16:10:08 +0000 |
commit | aa40148cae6611fb8b30e5f51492d5f73ed3660b (patch) | |
tree | 32a284e10f1c4a16f21521d8d473efc8a31fdc23 | |
parent | 8e1363df4e351c306b33f5e8896494a84b72d722 (diff) | |
download | llvm-aa40148cae6611fb8b30e5f51492d5f73ed3660b.zip llvm-aa40148cae6611fb8b30e5f51492d5f73ed3660b.tar.gz llvm-aa40148cae6611fb8b30e5f51492d5f73ed3660b.tar.bz2 |
[X86][Btver2] Account for the "+i" integer pipe transfer costs (1cy use of JALU0 for GPR PRF write)
llvm-svn: 328536
6 files changed, 41 insertions, 50 deletions
diff --git a/llvm/lib/Target/X86/X86ScheduleBtVer2.td b/llvm/lib/Target/X86/X86ScheduleBtVer2.td index 6e3bec5..75413aa 100644 --- a/llvm/lib/Target/X86/X86ScheduleBtVer2.td +++ b/llvm/lib/Target/X86/X86ScheduleBtVer2.td @@ -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)>; diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-avx1.s b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-avx1.s index 7368fea..fb2a134 100644 --- a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-avx1.s +++ b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-avx1.s @@ -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 diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse1.s index 1193e5c..3589aaaf 100644 --- a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse1.s +++ b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse1.s @@ -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) diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse2.s index 960fcc9..a5e7051 100644 --- a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse2.s +++ b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse2.s @@ -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 diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse41.s index 21f8fb8..9a7a082 100644 --- a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse41.s +++ b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse41.s @@ -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 diff --git a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s index 39112dc..195ef86 100644 --- a/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s +++ b/llvm/test/tools/llvm-mca/X86/BtVer2/resources-sse42.s @@ -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 |