[llvm] aa95b5c - [X86] Fix Skylake/Icelake port usage for MMX PACK instructions
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 27 08:32:53 PDT 2024
Author: Simon Pilgrim
Date: 2024-08-27T16:32:29+01:00
New Revision: aa95b5c121ce7598592b94312bed5b6be666eb34
URL: https://github.com/llvm/llvm-project/commit/aa95b5c121ce7598592b94312bed5b6be666eb34
DIFF: https://github.com/llvm/llvm-project/commit/aa95b5c121ce7598592b94312bed5b6be666eb34.diff
LOG: [X86] Fix Skylake/Icelake port usage for MMX PACK instructions
Matches uops.info + Agner
Added:
Modified:
llvm/lib/Target/X86/X86SchedIceLake.td
llvm/lib/Target/X86/X86SchedSkylakeClient.td
llvm/lib/Target/X86/X86SchedSkylakeServer.td
llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-mmx.s
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-mmx.s
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-mmx.s
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86SchedIceLake.td b/llvm/lib/Target/X86/X86SchedIceLake.td
index 88536132d18721..8c0fb11afe336a 100644
--- a/llvm/lib/Target/X86/X86SchedIceLake.td
+++ b/llvm/lib/Target/X86/X86SchedIceLake.td
@@ -900,10 +900,10 @@ def ICXWriteResGroup38 : SchedWriteRes<[ICXPort15,ICXPort01]> {
}
def: InstRW<[ICXWriteResGroup38], (instregex "(V?)PH(ADD|SUB)SW(Y?)rr")>;
-def ICXWriteResGroup41 : SchedWriteRes<[ICXPort5,ICXPort0156]> {
- let Latency = 3;
- let NumMicroOps = 3;
- let ReleaseAtCycles = [2,1];
+def ICXWriteResGroup41 : SchedWriteRes<[ICXPort5]> {
+ let Latency = 4;
+ let NumMicroOps = 2;
+ let ReleaseAtCycles = [2];
}
def: InstRW<[ICXWriteResGroup41], (instrs MMX_PACKSSDWrr,
MMX_PACKSSWBrr,
diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td
index 5506ebe0cb6342..14da1acdaafa5a 100644
--- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td
+++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td
@@ -818,10 +818,10 @@ def SKLWriteResGroup36 : SchedWriteRes<[SKLPort5,SKLPort01]> {
def: InstRW<[SKLWriteResGroup36], (instregex "(V?)PHADDSW(Y?)rr",
"(V?)PHSUBSW(Y?)rr")>;
-def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5,SKLPort0156]> {
- let Latency = 3;
- let NumMicroOps = 3;
- let ReleaseAtCycles = [2,1];
+def SKLWriteResGroup39 : SchedWriteRes<[SKLPort5]> {
+ let Latency = 2;
+ let NumMicroOps = 2;
+ let ReleaseAtCycles = [2];
}
def: InstRW<[SKLWriteResGroup39], (instrs MMX_PACKSSDWrr,
MMX_PACKSSWBrr,
diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td
index 7b2299b4ba8830..0ecfc30e884758 100644
--- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td
+++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td
@@ -878,10 +878,10 @@ def SKXWriteResGroup38 : SchedWriteRes<[SKXPort5,SKXPort01]> {
}
def: InstRW<[SKXWriteResGroup38], (instregex "(V?)PH(ADD|SUB)SW(Y?)rr")>;
-def SKXWriteResGroup41 : SchedWriteRes<[SKXPort5,SKXPort0156]> {
- let Latency = 3;
- let NumMicroOps = 3;
- let ReleaseAtCycles = [2,1];
+def SKXWriteResGroup41 : SchedWriteRes<[SKXPort5]> {
+ let Latency = 2;
+ let NumMicroOps = 2;
+ let ReleaseAtCycles = [2];
}
def: InstRW<[SKXWriteResGroup41], (instrs MMX_PACKSSDWrr,
MMX_PACKSSWBrr,
diff --git a/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-mmx.s
index f240be7b2061d2..8b4fd79fff7448 100644
--- a/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-mmx.s
+++ b/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-mmx.s
@@ -173,11 +173,11 @@ pxor (%rax), %mm2
# CHECK-NEXT: 1 5 0.50 * movq (%rax), %mm2
# CHECK-NEXT: 1 2 1.00 movq %mm0, %rcx
# CHECK-NEXT: 2 1 0.50 * movq %mm0, (%rax)
-# CHECK-NEXT: 3 3 2.00 packsswb %mm0, %mm2
+# CHECK-NEXT: 2 4 2.00 packsswb %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packsswb (%rax), %mm2
-# CHECK-NEXT: 3 3 2.00 packssdw %mm0, %mm2
+# CHECK-NEXT: 2 4 2.00 packssdw %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packssdw (%rax), %mm2
-# CHECK-NEXT: 3 3 2.00 packuswb %mm0, %mm2
+# CHECK-NEXT: 2 4 2.00 packuswb %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packuswb (%rax), %mm2
# CHECK-NEXT: 1 1 0.50 paddb %mm0, %mm2
# CHECK-NEXT: 2 6 0.50 * paddb (%rax), %mm2
@@ -286,7 +286,7 @@ pxor (%rax), %mm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
-# CHECK-NEXT: - - 75.50 1.00 23.00 23.00 1.00 41.50 1.00 1.00 1.00 1.00
+# CHECK-NEXT: - - 74.75 0.25 23.00 23.00 1.00 40.75 0.25 1.00 1.00 1.00
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -299,11 +299,11 @@ pxor (%rax), %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - - - - - - movq (%rax), %mm2
# CHECK-NEXT: - - 1.00 - - - - - - - - - movq %mm0, %rcx
# CHECK-NEXT: - - - - - - 0.50 - - 0.50 0.50 0.50 movq %mm0, (%rax)
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - - - packsswb %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - - - packsswb %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - - - packsswb (%rax), %mm2
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - - - packssdw %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - - - packssdw %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - - - packssdw (%rax), %mm2
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - - - packuswb %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - - - packuswb %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - - - packuswb (%rax), %mm2
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - - - paddb %mm0, %mm2
# CHECK-NEXT: - - 0.50 - 0.50 0.50 - 0.50 - - - - paddb (%rax), %mm2
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-mmx.s
index 75c49be784eba4..04e35b23ec1fd6 100644
--- a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-mmx.s
+++ b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-mmx.s
@@ -173,11 +173,11 @@ pxor (%rax), %mm2
# CHECK-NEXT: 1 5 0.50 * movq (%rax), %mm2
# CHECK-NEXT: 1 2 1.00 movq %mm0, %rcx
# CHECK-NEXT: 2 1 1.00 * movq %mm0, (%rax)
-# CHECK-NEXT: 3 3 2.00 packsswb %mm0, %mm2
+# CHECK-NEXT: 2 2 2.00 packsswb %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packsswb (%rax), %mm2
-# CHECK-NEXT: 3 3 2.00 packssdw %mm0, %mm2
+# CHECK-NEXT: 2 2 2.00 packssdw %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packssdw (%rax), %mm2
-# CHECK-NEXT: 3 3 2.00 packuswb %mm0, %mm2
+# CHECK-NEXT: 2 2 2.00 packuswb %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packuswb (%rax), %mm2
# CHECK-NEXT: 1 1 0.50 paddb %mm0, %mm2
# CHECK-NEXT: 2 6 0.50 * paddb (%rax), %mm2
@@ -284,7 +284,7 @@ pxor (%rax), %mm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - - 75.50 1.00 23.67 23.67 2.00 41.50 1.00 0.67
+# CHECK-NEXT: - - 74.75 0.25 23.67 23.67 2.00 40.75 0.25 0.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -297,11 +297,11 @@ pxor (%rax), %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - - - - movq (%rax), %mm2
# CHECK-NEXT: - - 1.00 - - - - - - - movq %mm0, %rcx
# CHECK-NEXT: - - - - 0.33 0.33 1.00 - - 0.33 movq %mm0, (%rax)
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - packsswb %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - packsswb %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - packsswb (%rax), %mm2
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - packssdw %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - packssdw %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - packssdw (%rax), %mm2
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - packuswb %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - packuswb %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - packuswb (%rax), %mm2
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - paddb %mm0, %mm2
# CHECK-NEXT: - - 0.50 - 0.50 0.50 - 0.50 - - paddb (%rax), %mm2
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-mmx.s
index befbe68689ff9b..5a4f716fa83b0e 100644
--- a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-mmx.s
+++ b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-mmx.s
@@ -173,11 +173,11 @@ pxor (%rax), %mm2
# CHECK-NEXT: 1 5 0.50 * movq (%rax), %mm2
# CHECK-NEXT: 1 2 1.00 movq %mm0, %rcx
# CHECK-NEXT: 2 1 1.00 * movq %mm0, (%rax)
-# CHECK-NEXT: 3 3 2.00 packsswb %mm0, %mm2
+# CHECK-NEXT: 2 2 2.00 packsswb %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packsswb (%rax), %mm2
-# CHECK-NEXT: 3 3 2.00 packssdw %mm0, %mm2
+# CHECK-NEXT: 2 2 2.00 packssdw %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packssdw (%rax), %mm2
-# CHECK-NEXT: 3 3 2.00 packuswb %mm0, %mm2
+# CHECK-NEXT: 2 2 2.00 packuswb %mm0, %mm2
# CHECK-NEXT: 3 7 2.00 * packuswb (%rax), %mm2
# CHECK-NEXT: 1 1 0.50 paddb %mm0, %mm2
# CHECK-NEXT: 2 6 0.50 * paddb (%rax), %mm2
@@ -284,7 +284,7 @@ pxor (%rax), %mm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - - 75.50 1.00 23.67 23.67 2.00 41.50 1.00 0.67
+# CHECK-NEXT: - - 74.75 0.25 23.67 23.67 2.00 40.75 0.25 0.67
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -297,11 +297,11 @@ pxor (%rax), %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - - - - movq (%rax), %mm2
# CHECK-NEXT: - - 1.00 - - - - - - - movq %mm0, %rcx
# CHECK-NEXT: - - - - 0.33 0.33 1.00 - - 0.33 movq %mm0, (%rax)
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - packsswb %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - packsswb %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - packsswb (%rax), %mm2
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - packssdw %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - packssdw %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - packssdw (%rax), %mm2
-# CHECK-NEXT: - - 0.25 0.25 - - - 2.25 0.25 - packuswb %mm0, %mm2
+# CHECK-NEXT: - - - - - - - 2.00 - - packuswb %mm0, %mm2
# CHECK-NEXT: - - - - 0.50 0.50 - 2.00 - - packuswb (%rax), %mm2
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - paddb %mm0, %mm2
# CHECK-NEXT: - - 0.50 - 0.50 0.50 - 0.50 - - paddb (%rax), %mm2
More information about the llvm-commits
mailing list