From dade83c02a11401897bcdb8c255db69b5c366e95 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Thu, 23 Sep 2021 19:47:58 +0100 Subject: [PATCH] [X86][SLM] Fix ADDQ/SUBQ/CMPEQQ throughput to account for running on either port. Testing on a SLM box suggests these can run on either port, but the throughput is 4cy on either (inc MMX versions). Confirmed with Intel AoM / Agner / InstLatX64. --- llvm/lib/Target/X86/X86ScheduleSLM.td | 12 ++++--- .../tools/llvm-mca/X86/SLM/resources-sse2.s | 34 +++++++++---------- .../tools/llvm-mca/X86/SLM/resources-sse41.s | 10 +++--- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/llvm/lib/Target/X86/X86ScheduleSLM.td b/llvm/lib/Target/X86/X86ScheduleSLM.td index b0a2c75801c7..158c38aa4e49 100644 --- a/llvm/lib/Target/X86/X86ScheduleSLM.td +++ b/llvm/lib/Target/X86/X86ScheduleSLM.td @@ -465,15 +465,19 @@ def : WriteRes; def SLMWriteResGroup1rr : SchedWriteRes<[SLM_FPC_RSV01]> { let Latency = 4; let NumMicroOps = 2; - let ResourceCycles = [4]; + let ResourceCycles = [8]; } -def: InstRW<[SLMWriteResGroup1rr], (instrs PADDQrr, PSUBQrr, PCMPEQQrr)>; +def: InstRW<[SLMWriteResGroup1rr], (instrs MMX_PADDQirr, PADDQrr, + MMX_PSUBQirr, PSUBQrr, + PCMPEQQrr)>; def SLMWriteResGroup1rm : SchedWriteRes<[SLM_MEC_RSV,SLM_FPC_RSV01]> { let Latency = 7; let NumMicroOps = 3; - let ResourceCycles = [1,4]; + let ResourceCycles = [1,8]; } -def: InstRW<[SLMWriteResGroup1rm], (instrs PADDQrm, PSUBQrm, PCMPEQQrm)>; +def: InstRW<[SLMWriteResGroup1rm], (instrs MMX_PADDQirm, PADDQrm, + MMX_PSUBQirm, PSUBQrm, + PCMPEQQrm)>; } // SchedModel diff --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s index 6c88d2bdc977..d1282864230b 100644 --- a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s +++ b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s @@ -526,10 +526,10 @@ xorpd (%rax), %xmm2 # CHECK-NEXT: 1 4 1.00 * paddb (%rax), %xmm2 # CHECK-NEXT: 1 1 0.50 paddd %xmm0, %xmm2 # CHECK-NEXT: 1 4 1.00 * paddd (%rax), %xmm2 -# CHECK-NEXT: 1 1 0.50 paddq %mm0, %mm2 -# CHECK-NEXT: 1 4 1.00 * paddq (%rax), %mm2 -# CHECK-NEXT: 2 4 2.00 paddq %xmm0, %xmm2 -# CHECK-NEXT: 3 7 2.00 * paddq (%rax), %xmm2 +# CHECK-NEXT: 2 4 4.00 paddq %mm0, %mm2 +# CHECK-NEXT: 3 7 4.00 * paddq (%rax), %mm2 +# CHECK-NEXT: 2 4 4.00 paddq %xmm0, %xmm2 +# CHECK-NEXT: 3 7 4.00 * paddq (%rax), %xmm2 # CHECK-NEXT: 1 1 0.50 paddsb %xmm0, %xmm2 # CHECK-NEXT: 1 4 1.00 * paddsb (%rax), %xmm2 # CHECK-NEXT: 1 1 0.50 paddsw %xmm0, %xmm2 @@ -624,10 +624,10 @@ xorpd (%rax), %xmm2 # CHECK-NEXT: 1 4 1.00 * psubb (%rax), %xmm2 # CHECK-NEXT: 1 1 0.50 psubd %xmm0, %xmm2 # CHECK-NEXT: 1 4 1.00 * psubd (%rax), %xmm2 -# CHECK-NEXT: 1 1 0.50 psubq %mm0, %mm2 -# CHECK-NEXT: 1 4 1.00 * psubq (%rax), %mm2 -# CHECK-NEXT: 2 4 2.00 psubq %xmm0, %xmm2 -# CHECK-NEXT: 3 7 2.00 * psubq (%rax), %xmm2 +# CHECK-NEXT: 2 4 4.00 psubq %mm0, %mm2 +# CHECK-NEXT: 3 7 4.00 * psubq (%rax), %mm2 +# CHECK-NEXT: 2 4 4.00 psubq %xmm0, %xmm2 +# CHECK-NEXT: 3 7 4.00 * psubq (%rax), %xmm2 # CHECK-NEXT: 1 1 0.50 psubsb %xmm0, %xmm2 # CHECK-NEXT: 1 4 1.00 * psubsb (%rax), %xmm2 # CHECK-NEXT: 1 1 0.50 psubsw %xmm0, %xmm2 @@ -687,7 +687,7 @@ xorpd (%rax), %xmm2 # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] -# CHECK-NEXT: - 412.00 12.00 235.50 77.50 3.00 3.00 134.00 +# CHECK-NEXT: - 412.00 12.00 257.50 99.50 3.00 3.00 134.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] Instructions: @@ -810,10 +810,10 @@ xorpd (%rax), %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - 1.00 paddb (%rax), %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - - paddd %xmm0, %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - 1.00 paddd (%rax), %xmm2 -# CHECK-NEXT: - - - 0.50 0.50 - - - paddq %mm0, %mm2 -# CHECK-NEXT: - - - 0.50 0.50 - - 1.00 paddq (%rax), %mm2 -# CHECK-NEXT: - - - 2.00 2.00 - - - paddq %xmm0, %xmm2 -# CHECK-NEXT: - - - 2.00 2.00 - - 1.00 paddq (%rax), %xmm2 +# CHECK-NEXT: - - - 4.00 4.00 - - - paddq %mm0, %mm2 +# CHECK-NEXT: - - - 4.00 4.00 - - 1.00 paddq (%rax), %mm2 +# CHECK-NEXT: - - - 4.00 4.00 - - - paddq %xmm0, %xmm2 +# CHECK-NEXT: - - - 4.00 4.00 - - 1.00 paddq (%rax), %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - - paddsb %xmm0, %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - 1.00 paddsb (%rax), %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - - paddsw %xmm0, %xmm2 @@ -908,10 +908,10 @@ xorpd (%rax), %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - 1.00 psubb (%rax), %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - - psubd %xmm0, %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - 1.00 psubd (%rax), %xmm2 -# CHECK-NEXT: - - - 0.50 0.50 - - - psubq %mm0, %mm2 -# CHECK-NEXT: - - - 0.50 0.50 - - 1.00 psubq (%rax), %mm2 -# CHECK-NEXT: - - - 2.00 2.00 - - - psubq %xmm0, %xmm2 -# CHECK-NEXT: - - - 2.00 2.00 - - 1.00 psubq (%rax), %xmm2 +# CHECK-NEXT: - - - 4.00 4.00 - - - psubq %mm0, %mm2 +# CHECK-NEXT: - - - 4.00 4.00 - - 1.00 psubq (%rax), %mm2 +# CHECK-NEXT: - - - 4.00 4.00 - - - psubq %xmm0, %xmm2 +# CHECK-NEXT: - - - 4.00 4.00 - - 1.00 psubq (%rax), %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - - psubsb %xmm0, %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - 1.00 psubsb (%rax), %xmm2 # CHECK-NEXT: - - - 0.50 0.50 - - - psubsw %xmm0, %xmm2 diff --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s index 3779e5a7895b..215e46eb5ab6 100644 --- a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s +++ b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s @@ -180,8 +180,8 @@ roundss $1, (%rax), %xmm2 # CHECK-NEXT: 3 7 4.00 * pblendvb %xmm0, (%rax), %xmm2 # CHECK-NEXT: 1 1 1.00 pblendw $11, %xmm0, %xmm2 # CHECK-NEXT: 1 4 1.00 * pblendw $11, (%rax), %xmm2 -# CHECK-NEXT: 2 4 2.00 pcmpeqq %xmm0, %xmm2 -# CHECK-NEXT: 3 7 2.00 * pcmpeqq (%rax), %xmm2 +# CHECK-NEXT: 2 4 4.00 pcmpeqq %xmm0, %xmm2 +# CHECK-NEXT: 3 7 4.00 * pcmpeqq (%rax), %xmm2 # CHECK-NEXT: 1 1 1.00 pextrb $1, %xmm0, %ecx # CHECK-NEXT: 2 4 2.00 * pextrb $1, %xmm0, (%rax) # CHECK-NEXT: 1 1 1.00 pextrd $1, %xmm0, %ecx @@ -264,7 +264,7 @@ roundss $1, (%rax), %xmm2 # CHECK: Resource pressure per iteration: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] -# CHECK-NEXT: - - - 104.00 61.00 - - 54.00 +# CHECK-NEXT: - - - 108.00 65.00 - - 54.00 # CHECK: Resource pressure by instruction: # CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] Instructions: @@ -293,8 +293,8 @@ roundss $1, (%rax), %xmm2 # CHECK-NEXT: - - - 4.00 - - - 1.00 pblendvb %xmm0, (%rax), %xmm2 # CHECK-NEXT: - - - 1.00 - - - - pblendw $11, %xmm0, %xmm2 # CHECK-NEXT: - - - 1.00 - - - 1.00 pblendw $11, (%rax), %xmm2 -# CHECK-NEXT: - - - 2.00 2.00 - - - pcmpeqq %xmm0, %xmm2 -# CHECK-NEXT: - - - 2.00 2.00 - - 1.00 pcmpeqq (%rax), %xmm2 +# CHECK-NEXT: - - - 4.00 4.00 - - - pcmpeqq %xmm0, %xmm2 +# CHECK-NEXT: - - - 4.00 4.00 - - 1.00 pcmpeqq (%rax), %xmm2 # CHECK-NEXT: - - - 1.00 - - - - pextrb $1, %xmm0, %ecx # CHECK-NEXT: - - - 1.00 - - - 2.00 pextrb $1, %xmm0, (%rax) # CHECK-NEXT: - - - 1.00 - - - - pextrd $1, %xmm0, %ecx