[llvm] d0522f4 - [X86] Fix PSHUFB port usage on Skylake/Icelake
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 20 04:01:00 PST 2024
Author: Simon Pilgrim
Date: 2024-11-20T12:00:36Z
New Revision: d0522f4a9af84a3b402586f71cacd3c14269711a
URL: https://github.com/llvm/llvm-project/commit/d0522f4a9af84a3b402586f71cacd3c14269711a
DIFF: https://github.com/llvm/llvm-project/commit/d0522f4a9af84a3b402586f71cacd3c14269711a.diff
LOG: [X86] Fix PSHUFB port usage on Skylake/Icelake
MMX PSHUFB has an additional Port0 dependency (as do most MMX instructions) - confirmed with uops.info
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-ssse3.s
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86SchedIceLake.td b/llvm/lib/Target/X86/X86SchedIceLake.td
index 4bc9f76e6f2c4c..9d6368f19607bc 100644
--- a/llvm/lib/Target/X86/X86SchedIceLake.td
+++ b/llvm/lib/Target/X86/X86SchedIceLake.td
@@ -392,7 +392,7 @@ defm : ICXWriteResPair<WriteShuffle, [ICXPort5], 1, [1], 1, 5>; // Vector shuf
defm : ICXWriteResPair<WriteShuffleX, [ICXPort15], 1, [1], 1, 6>;
defm : ICXWriteResPair<WriteShuffleY, [ICXPort15], 1, [1], 1, 7>;
defm : ICXWriteResPair<WriteShuffleZ, [ICXPort5], 1, [1], 1, 7>;
-defm : ICXWriteResPair<WriteVarShuffle, [ICXPort5], 1, [1], 1, 5>; // Vector variable shuffles.
+defm : ICXWriteResPair<WriteVarShuffle, [ICXPort0,ICXPort5], 1, [1,1], 2, 5>; // Vector variable shuffles.
defm : ICXWriteResPair<WriteVarShuffleX, [ICXPort15], 1, [1], 1, 6>;
defm : ICXWriteResPair<WriteVarShuffleY, [ICXPort15], 1, [1], 1, 7>;
defm : ICXWriteResPair<WriteVarShuffleZ, [ICXPort5], 1, [1], 1, 7>;
diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td
index 7652eb7325ac1c..e4e833c8f752c0 100644
--- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td
+++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td
@@ -387,7 +387,7 @@ defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuff
defm : SKLWriteResPair<WriteShuffleX, [SKLPort5], 1, [1], 1, 6>;
defm : SKLWriteResPair<WriteShuffleY, [SKLPort5], 1, [1], 1, 7>;
defm : X86WriteResPairUnsupported<WriteShuffleZ>;
-defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
+defm : SKLWriteResPair<WriteVarShuffle, [SKLPort0,SKLPort5], 1, [1,1], 2, 5>; // Vector shuffles.
defm : SKLWriteResPair<WriteVarShuffleX, [SKLPort5], 1, [1], 1, 6>;
defm : SKLWriteResPair<WriteVarShuffleY, [SKLPort5], 1, [1], 1, 7>;
defm : X86WriteResPairUnsupported<WriteVarShuffleZ>;
diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td
index 038650c6fd74ac..62cc4a9ea290cf 100644
--- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td
+++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td
@@ -387,7 +387,7 @@ defm : SKXWriteResPair<WriteShuffle, [SKXPort5], 1, [1], 1, 5>; // Vector shuff
defm : SKXWriteResPair<WriteShuffleX, [SKXPort5], 1, [1], 1, 6>;
defm : SKXWriteResPair<WriteShuffleY, [SKXPort5], 1, [1], 1, 7>;
defm : SKXWriteResPair<WriteShuffleZ, [SKXPort5], 1, [1], 1, 7>;
-defm : SKXWriteResPair<WriteVarShuffle, [SKXPort5], 1, [1], 1, 5>; // Vector variable shuffles.
+defm : SKXWriteResPair<WriteVarShuffle, [SKXPort0,SKXPort5], 1, [1,1], 2, 5>; // Vector variable shuffles.
defm : SKXWriteResPair<WriteVarShuffleX, [SKXPort5], 1, [1], 1, 6>;
defm : SKXWriteResPair<WriteVarShuffleY, [SKXPort5], 1, [1], 1, 7>;
defm : SKXWriteResPair<WriteVarShuffleZ, [SKXPort5], 1, [1], 1, 7>;
diff --git a/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-ssse3.s
index d034cbd0f63980..82132309c45d44 100644
--- a/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-ssse3.s
+++ b/llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-ssse3.s
@@ -154,8 +154,8 @@ psignw (%rax), %xmm2
# CHECK-NEXT: 2 10 1.00 * pmulhrsw (%rax), %mm2
# CHECK-NEXT: 1 5 0.50 pmulhrsw %xmm0, %xmm2
# CHECK-NEXT: 2 11 0.50 * pmulhrsw (%rax), %xmm2
-# CHECK-NEXT: 1 1 1.00 pshufb %mm0, %mm2
-# CHECK-NEXT: 2 6 1.00 * pshufb (%rax), %mm2
+# CHECK-NEXT: 2 1 1.00 pshufb %mm0, %mm2
+# CHECK-NEXT: 3 6 1.00 * pshufb (%rax), %mm2
# CHECK-NEXT: 1 1 0.50 pshufb %xmm0, %xmm2
# CHECK-NEXT: 2 7 0.50 * pshufb (%rax), %xmm2
# CHECK-NEXT: 1 1 0.50 psignb %mm0, %mm2
@@ -187,7 +187,7 @@ psignw (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
-# CHECK-NEXT: - - 30.67 25.67 16.00 16.00 - 55.67 - - - -
+# CHECK-NEXT: - - 32.67 25.67 16.00 16.00 - 55.67 - - - -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -239,8 +239,8 @@ psignw (%rax), %xmm2
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - - - pmulhrsw (%rax), %mm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - pmulhrsw %xmm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - pmulhrsw (%rax), %xmm2
-# CHECK-NEXT: - - - - - - - 1.00 - - - - pshufb %mm0, %mm2
-# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - pshufb (%rax), %mm2
+# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - pshufb %mm0, %mm2
+# CHECK-NEXT: - - 1.00 - 0.50 0.50 - 1.00 - - - - pshufb (%rax), %mm2
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - pshufb %xmm0, %xmm2
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - pshufb (%rax), %xmm2
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - - - psignb %mm0, %mm2
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s
index 047974f8a6c711..6bcac9b86dd3ea 100644
--- a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s
+++ b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s
@@ -154,8 +154,8 @@ psignw (%rax), %xmm2
# CHECK-NEXT: 2 10 1.00 * pmulhrsw (%rax), %mm2
# CHECK-NEXT: 1 5 0.50 pmulhrsw %xmm0, %xmm2
# CHECK-NEXT: 2 11 0.50 * pmulhrsw (%rax), %xmm2
-# CHECK-NEXT: 1 1 1.00 pshufb %mm0, %mm2
-# CHECK-NEXT: 2 6 1.00 * pshufb (%rax), %mm2
+# CHECK-NEXT: 2 1 1.00 pshufb %mm0, %mm2
+# CHECK-NEXT: 3 6 1.00 * pshufb (%rax), %mm2
# CHECK-NEXT: 1 1 1.00 pshufb %xmm0, %xmm2
# CHECK-NEXT: 2 7 1.00 * pshufb (%rax), %xmm2
# CHECK-NEXT: 1 1 0.50 psignb %mm0, %mm2
@@ -185,7 +185,7 @@ psignw (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - - 30.67 12.67 16.00 16.00 - 68.67 - -
+# CHECK-NEXT: - - 32.67 12.67 16.00 16.00 - 68.67 - -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -237,8 +237,8 @@ psignw (%rax), %xmm2
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - pmulhrsw (%rax), %mm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - pmulhrsw %xmm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - pmulhrsw (%rax), %xmm2
-# CHECK-NEXT: - - - - - - - 1.00 - - pshufb %mm0, %mm2
-# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - pshufb (%rax), %mm2
+# CHECK-NEXT: - - 1.00 - - - - 1.00 - - pshufb %mm0, %mm2
+# CHECK-NEXT: - - 1.00 - 0.50 0.50 - 1.00 - - pshufb (%rax), %mm2
# CHECK-NEXT: - - - - - - - 1.00 - - pshufb %xmm0, %xmm2
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - pshufb (%rax), %xmm2
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - psignb %mm0, %mm2
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s
index c8b5cbb9524517..193d38594bb299 100644
--- a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s
+++ b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s
@@ -154,8 +154,8 @@ psignw (%rax), %xmm2
# CHECK-NEXT: 2 10 1.00 * pmulhrsw (%rax), %mm2
# CHECK-NEXT: 1 5 0.50 pmulhrsw %xmm0, %xmm2
# CHECK-NEXT: 2 11 0.50 * pmulhrsw (%rax), %xmm2
-# CHECK-NEXT: 1 1 1.00 pshufb %mm0, %mm2
-# CHECK-NEXT: 2 6 1.00 * pshufb (%rax), %mm2
+# CHECK-NEXT: 2 1 1.00 pshufb %mm0, %mm2
+# CHECK-NEXT: 3 6 1.00 * pshufb (%rax), %mm2
# CHECK-NEXT: 1 1 1.00 pshufb %xmm0, %xmm2
# CHECK-NEXT: 2 7 1.00 * pshufb (%rax), %xmm2
# CHECK-NEXT: 1 1 0.50 psignb %mm0, %mm2
@@ -185,7 +185,7 @@ psignw (%rax), %xmm2
# CHECK: Resource pressure per iteration:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
-# CHECK-NEXT: - - 30.67 12.67 16.00 16.00 - 68.67 - -
+# CHECK-NEXT: - - 32.67 12.67 16.00 16.00 - 68.67 - -
# CHECK: Resource pressure by instruction:
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -237,8 +237,8 @@ psignw (%rax), %xmm2
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - pmulhrsw (%rax), %mm2
# CHECK-NEXT: - - 0.50 0.50 - - - - - - pmulhrsw %xmm0, %xmm2
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - pmulhrsw (%rax), %xmm2
-# CHECK-NEXT: - - - - - - - 1.00 - - pshufb %mm0, %mm2
-# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - pshufb (%rax), %mm2
+# CHECK-NEXT: - - 1.00 - - - - 1.00 - - pshufb %mm0, %mm2
+# CHECK-NEXT: - - 1.00 - 0.50 0.50 - 1.00 - - pshufb (%rax), %mm2
# CHECK-NEXT: - - - - - - - 1.00 - - pshufb %xmm0, %xmm2
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - pshufb (%rax), %xmm2
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - psignb %mm0, %mm2
More information about the llvm-commits
mailing list