Skip to content

Commit d0522f4

Browse files
committed
[X86] Fix PSHUFB port usage on Skylake/Icelake
MMX PSHUFB has an additional Port0 dependency (as do most MMX instructions) - confirmed with uops.info
1 parent af0e0de commit d0522f4

File tree

6 files changed

+18
-18
lines changed

6 files changed

+18
-18
lines changed

llvm/lib/Target/X86/X86SchedIceLake.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ defm : ICXWriteResPair<WriteShuffle, [ICXPort5], 1, [1], 1, 5>; // Vector shuf
392392
defm : ICXWriteResPair<WriteShuffleX, [ICXPort15], 1, [1], 1, 6>;
393393
defm : ICXWriteResPair<WriteShuffleY, [ICXPort15], 1, [1], 1, 7>;
394394
defm : ICXWriteResPair<WriteShuffleZ, [ICXPort5], 1, [1], 1, 7>;
395-
defm : ICXWriteResPair<WriteVarShuffle, [ICXPort5], 1, [1], 1, 5>; // Vector variable shuffles.
395+
defm : ICXWriteResPair<WriteVarShuffle, [ICXPort0,ICXPort5], 1, [1,1], 2, 5>; // Vector variable shuffles.
396396
defm : ICXWriteResPair<WriteVarShuffleX, [ICXPort15], 1, [1], 1, 6>;
397397
defm : ICXWriteResPair<WriteVarShuffleY, [ICXPort15], 1, [1], 1, 7>;
398398
defm : ICXWriteResPair<WriteVarShuffleZ, [ICXPort5], 1, [1], 1, 7>;

llvm/lib/Target/X86/X86SchedSkylakeClient.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ defm : SKLWriteResPair<WriteShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuff
387387
defm : SKLWriteResPair<WriteShuffleX, [SKLPort5], 1, [1], 1, 6>;
388388
defm : SKLWriteResPair<WriteShuffleY, [SKLPort5], 1, [1], 1, 7>;
389389
defm : X86WriteResPairUnsupported<WriteShuffleZ>;
390-
defm : SKLWriteResPair<WriteVarShuffle, [SKLPort5], 1, [1], 1, 5>; // Vector shuffles.
390+
defm : SKLWriteResPair<WriteVarShuffle, [SKLPort0,SKLPort5], 1, [1,1], 2, 5>; // Vector shuffles.
391391
defm : SKLWriteResPair<WriteVarShuffleX, [SKLPort5], 1, [1], 1, 6>;
392392
defm : SKLWriteResPair<WriteVarShuffleY, [SKLPort5], 1, [1], 1, 7>;
393393
defm : X86WriteResPairUnsupported<WriteVarShuffleZ>;

llvm/lib/Target/X86/X86SchedSkylakeServer.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ defm : SKXWriteResPair<WriteShuffle, [SKXPort5], 1, [1], 1, 5>; // Vector shuff
387387
defm : SKXWriteResPair<WriteShuffleX, [SKXPort5], 1, [1], 1, 6>;
388388
defm : SKXWriteResPair<WriteShuffleY, [SKXPort5], 1, [1], 1, 7>;
389389
defm : SKXWriteResPair<WriteShuffleZ, [SKXPort5], 1, [1], 1, 7>;
390-
defm : SKXWriteResPair<WriteVarShuffle, [SKXPort5], 1, [1], 1, 5>; // Vector variable shuffles.
390+
defm : SKXWriteResPair<WriteVarShuffle, [SKXPort0,SKXPort5], 1, [1,1], 2, 5>; // Vector variable shuffles.
391391
defm : SKXWriteResPair<WriteVarShuffleX, [SKXPort5], 1, [1], 1, 6>;
392392
defm : SKXWriteResPair<WriteVarShuffleY, [SKXPort5], 1, [1], 1, 7>;
393393
defm : SKXWriteResPair<WriteVarShuffleZ, [SKXPort5], 1, [1], 1, 7>;

llvm/test/tools/llvm-mca/X86/IceLakeServer/resources-ssse3.s

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ psignw (%rax), %xmm2
154154
# CHECK-NEXT: 2 10 1.00 * pmulhrsw (%rax), %mm2
155155
# CHECK-NEXT: 1 5 0.50 pmulhrsw %xmm0, %xmm2
156156
# CHECK-NEXT: 2 11 0.50 * pmulhrsw (%rax), %xmm2
157-
# CHECK-NEXT: 1 1 1.00 pshufb %mm0, %mm2
158-
# CHECK-NEXT: 2 6 1.00 * pshufb (%rax), %mm2
157+
# CHECK-NEXT: 2 1 1.00 pshufb %mm0, %mm2
158+
# CHECK-NEXT: 3 6 1.00 * pshufb (%rax), %mm2
159159
# CHECK-NEXT: 1 1 0.50 pshufb %xmm0, %xmm2
160160
# CHECK-NEXT: 2 7 0.50 * pshufb (%rax), %xmm2
161161
# CHECK-NEXT: 1 1 0.50 psignb %mm0, %mm2
@@ -187,7 +187,7 @@ psignw (%rax), %xmm2
187187

188188
# CHECK: Resource pressure per iteration:
189189
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
190-
# CHECK-NEXT: - - 30.67 25.67 16.00 16.00 - 55.67 - - - -
190+
# CHECK-NEXT: - - 32.67 25.67 16.00 16.00 - 55.67 - - - -
191191

192192
# CHECK: Resource pressure by instruction:
193193
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -239,8 +239,8 @@ psignw (%rax), %xmm2
239239
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - - - pmulhrsw (%rax), %mm2
240240
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - pmulhrsw %xmm0, %xmm2
241241
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - pmulhrsw (%rax), %xmm2
242-
# CHECK-NEXT: - - - - - - - 1.00 - - - - pshufb %mm0, %mm2
243-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - pshufb (%rax), %mm2
242+
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - pshufb %mm0, %mm2
243+
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - 1.00 - - - - pshufb (%rax), %mm2
244244
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - pshufb %xmm0, %xmm2
245245
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - pshufb (%rax), %xmm2
246246
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - - - psignb %mm0, %mm2

llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ psignw (%rax), %xmm2
154154
# CHECK-NEXT: 2 10 1.00 * pmulhrsw (%rax), %mm2
155155
# CHECK-NEXT: 1 5 0.50 pmulhrsw %xmm0, %xmm2
156156
# CHECK-NEXT: 2 11 0.50 * pmulhrsw (%rax), %xmm2
157-
# CHECK-NEXT: 1 1 1.00 pshufb %mm0, %mm2
158-
# CHECK-NEXT: 2 6 1.00 * pshufb (%rax), %mm2
157+
# CHECK-NEXT: 2 1 1.00 pshufb %mm0, %mm2
158+
# CHECK-NEXT: 3 6 1.00 * pshufb (%rax), %mm2
159159
# CHECK-NEXT: 1 1 1.00 pshufb %xmm0, %xmm2
160160
# CHECK-NEXT: 2 7 1.00 * pshufb (%rax), %xmm2
161161
# CHECK-NEXT: 1 1 0.50 psignb %mm0, %mm2
@@ -185,7 +185,7 @@ psignw (%rax), %xmm2
185185

186186
# CHECK: Resource pressure per iteration:
187187
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
188-
# CHECK-NEXT: - - 30.67 12.67 16.00 16.00 - 68.67 - -
188+
# CHECK-NEXT: - - 32.67 12.67 16.00 16.00 - 68.67 - -
189189

190190
# CHECK: Resource pressure by instruction:
191191
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -237,8 +237,8 @@ psignw (%rax), %xmm2
237237
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - pmulhrsw (%rax), %mm2
238238
# CHECK-NEXT: - - 0.50 0.50 - - - - - - pmulhrsw %xmm0, %xmm2
239239
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - pmulhrsw (%rax), %xmm2
240-
# CHECK-NEXT: - - - - - - - 1.00 - - pshufb %mm0, %mm2
241-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - pshufb (%rax), %mm2
240+
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - pshufb %mm0, %mm2
241+
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - 1.00 - - pshufb (%rax), %mm2
242242
# CHECK-NEXT: - - - - - - - 1.00 - - pshufb %xmm0, %xmm2
243243
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - pshufb (%rax), %xmm2
244244
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - psignb %mm0, %mm2

llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ psignw (%rax), %xmm2
154154
# CHECK-NEXT: 2 10 1.00 * pmulhrsw (%rax), %mm2
155155
# CHECK-NEXT: 1 5 0.50 pmulhrsw %xmm0, %xmm2
156156
# CHECK-NEXT: 2 11 0.50 * pmulhrsw (%rax), %xmm2
157-
# CHECK-NEXT: 1 1 1.00 pshufb %mm0, %mm2
158-
# CHECK-NEXT: 2 6 1.00 * pshufb (%rax), %mm2
157+
# CHECK-NEXT: 2 1 1.00 pshufb %mm0, %mm2
158+
# CHECK-NEXT: 3 6 1.00 * pshufb (%rax), %mm2
159159
# CHECK-NEXT: 1 1 1.00 pshufb %xmm0, %xmm2
160160
# CHECK-NEXT: 2 7 1.00 * pshufb (%rax), %xmm2
161161
# CHECK-NEXT: 1 1 0.50 psignb %mm0, %mm2
@@ -185,7 +185,7 @@ psignw (%rax), %xmm2
185185

186186
# CHECK: Resource pressure per iteration:
187187
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9]
188-
# CHECK-NEXT: - - 30.67 12.67 16.00 16.00 - 68.67 - -
188+
# CHECK-NEXT: - - 32.67 12.67 16.00 16.00 - 68.67 - -
189189

190190
# CHECK: Resource pressure by instruction:
191191
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] Instructions:
@@ -237,8 +237,8 @@ psignw (%rax), %xmm2
237237
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - pmulhrsw (%rax), %mm2
238238
# CHECK-NEXT: - - 0.50 0.50 - - - - - - pmulhrsw %xmm0, %xmm2
239239
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - pmulhrsw (%rax), %xmm2
240-
# CHECK-NEXT: - - - - - - - 1.00 - - pshufb %mm0, %mm2
241-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - pshufb (%rax), %mm2
240+
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - pshufb %mm0, %mm2
241+
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - 1.00 - - pshufb (%rax), %mm2
242242
# CHECK-NEXT: - - - - - - - 1.00 - - pshufb %xmm0, %xmm2
243243
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - pshufb (%rax), %xmm2
244244
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - psignb %mm0, %mm2

0 commit comments

Comments
 (0)