[llvm] 1786047 - [X86] Fix SLM v2i64 ADD/Sub/CMPEQ instruction schedules
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 6 11:08:38 PST 2019
Author: Simon Pilgrim
Date: 2019-11-06T19:08:15Z
New Revision: 1786047b910506e5a2189cadb8791bd2504b855e
URL: https://github.com/llvm/llvm-project/commit/1786047b910506e5a2189cadb8791bd2504b855e
DIFF: https://github.com/llvm/llvm-project/commit/1786047b910506e5a2189cadb8791bd2504b855e.diff
LOG: [X86] Fix SLM v2i64 ADD/Sub/CMPEQ instruction schedules
Noticed while fixing the reduction costs for D59710 - the SLM model doesn't account for the poor throughput of v2i64 ops.
Numbers taken from Intel AOM (+ checked against Agner)
Added:
Modified:
llvm/lib/Target/X86/X86ScheduleSLM.td
llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s
llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ScheduleSLM.td b/llvm/lib/Target/X86/X86ScheduleSLM.td
index 84aac01ab381..dcd155ea0e0e 100644
--- a/llvm/lib/Target/X86/X86ScheduleSLM.td
+++ b/llvm/lib/Target/X86/X86ScheduleSLM.td
@@ -511,4 +511,20 @@ defm : X86WriteResUnsupported<WriteCvtPS2PHSt>;
defm : X86WriteResUnsupported<WriteCvtPS2PHYSt>;
defm : X86WriteResUnsupported<WriteCvtPS2PHZSt>;
+// Remaining SLM instrs.
+
+def SLMWriteResGroup1rr : SchedWriteRes<[SLM_FPC_RSV01]> {
+ let Latency = 4;
+ let NumMicroOps = 2;
+ let ResourceCycles = [4];
+}
+def: InstRW<[SLMWriteResGroup1rr], (instrs PADDQrr, PSUBQrr, PCMPEQQrr)>;
+
+def SLMWriteResGroup1rm : SchedWriteRes<[SLM_MEC_RSV,SLM_FPC_RSV01]> {
+ let Latency = 7;
+ let NumMicroOps = 3;
+ let ResourceCycles = [1,4];
+}
+def: InstRW<[SLMWriteResGroup1rm], (instrs PADDQrm, 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 92f33a208393..954c5cc2f518 100644
--- a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s
+++ b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s
@@ -528,8 +528,8 @@ xorpd (%rax), %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: 1 1 0.50 paddq %xmm0, %xmm2
-# CHECK-NEXT: 1 4 1.00 * paddq (%rax), %xmm2
+# CHECK-NEXT: 2 4 2.00 paddq %xmm0, %xmm2
+# CHECK-NEXT: 3 7 2.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
@@ -626,8 +626,8 @@ xorpd (%rax), %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: 1 1 0.50 psubq %xmm0, %xmm2
-# CHECK-NEXT: 1 4 1.00 * psubq (%rax), %xmm2
+# CHECK-NEXT: 2 4 2.00 psubq %xmm0, %xmm2
+# CHECK-NEXT: 3 7 2.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 152.50 90.50 3.00 3.00 134.00
+# CHECK-NEXT: - 412.00 12.00 158.50 96.50 3.00 3.00 134.00
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] Instructions:
@@ -812,8 +812,8 @@ xorpd (%rax), %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: - - - 0.50 0.50 - - - paddq %xmm0, %xmm2
-# CHECK-NEXT: - - - 0.50 0.50 - - 1.00 paddq (%rax), %xmm2
+# CHECK-NEXT: - - - 2.00 2.00 - - - paddq %xmm0, %xmm2
+# CHECK-NEXT: - - - 2.00 2.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
@@ -910,8 +910,8 @@ xorpd (%rax), %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: - - - 0.50 0.50 - - - psubq %xmm0, %xmm2
-# CHECK-NEXT: - - - 0.50 0.50 - - 1.00 psubq (%rax), %xmm2
+# CHECK-NEXT: - - - 2.00 2.00 - - - psubq %xmm0, %xmm2
+# CHECK-NEXT: - - - 2.00 2.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 0dc83a0fb627..6f339ab0266f 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: 1 4 1.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: 1 1 0.50 pcmpeqq %xmm0, %xmm2
-# CHECK-NEXT: 1 4 1.00 * pcmpeqq (%rax), %xmm2
+# CHECK-NEXT: 2 4 2.00 pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT: 3 7 2.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: - - - 85.00 22.00 - - 54.00
+# CHECK-NEXT: - - - 88.00 25.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: - - - 1.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: - - - 0.50 0.50 - - - pcmpeqq %xmm0, %xmm2
-# CHECK-NEXT: - - - 0.50 0.50 - - 1.00 pcmpeqq (%rax), %xmm2
+# CHECK-NEXT: - - - 2.00 2.00 - - - pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT: - - - 2.00 2.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
More information about the llvm-commits
mailing list