Skip to content

Commit 07151f0

Browse files
committed
[X86] SandyBridge DPPS folded instructions use an extra port5 resource
Noticed while trying to workout some discrepancies between a llvm-mca and uica analysis - confirmed with a llvm-exegesis capture (and matches uops.info numbers) This appears to be the reason behind Issue #14640 as well (heavy use of port5).
1 parent 265568c commit 07151f0

File tree

5 files changed

+21
-19
lines changed

5 files changed

+21
-19
lines changed

llvm/lib/Target/X86/X86SchedSandyBridge.td

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,11 @@ defm : SBWriteResPair<WriteFSqrt64Y, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44
294294
defm : SBWriteResPair<WriteFSqrt64Z, [SBPort0,SBPort05,SBFPDivider], 45, [2,1,44], 3, 7>; // Unsupported = 1
295295
defm : SBWriteResPair<WriteFSqrt80, [SBPort0,SBFPDivider], 24, [1,24], 1, 6>;
296296

297-
defm : SBWriteResPair<WriteDPPD, [SBPort0,SBPort1,SBPort5], 9, [1,1,1], 3, 6>;
298-
defm : SBWriteResPair<WriteDPPS, [SBPort0,SBPort1,SBPort5], 12, [1,2,1], 4, 6>;
299-
defm : SBWriteResPair<WriteDPPSY, [SBPort0,SBPort1,SBPort5], 12, [1,2,1], 4, 7>;
297+
defm : SBWriteResPair<WriteDPPD, [SBPort0,SBPort1,SBPort5], 9, [1,1,1], 3, 6>;
298+
defm : X86WriteRes<WriteDPPS, [SBPort0,SBPort1,SBPort5], 12, [1,2,1], 4>;
299+
defm : X86WriteRes<WriteDPPSY, [SBPort0,SBPort1,SBPort5], 12, [1,2,1], 4>;
300+
defm : X86WriteRes<WriteDPPSLd, [SBPort0,SBPort1,SBPort5,SBPort23], 18, [1,2,2,1], 6>;
301+
defm : X86WriteRes<WriteDPPSYLd, [SBPort0,SBPort1,SBPort5,SBPort23], 19, [1,2,2,1], 6>;
300302
defm : SBWriteResPair<WriteFSign, [SBPort5], 1>;
301303
defm : SBWriteResPair<WriteFRnd, [SBPort1], 3, [1], 1, 6>;
302304
defm : SBWriteResPair<WriteFRndY, [SBPort1], 3, [1], 1, 7>;

llvm/test/tools/llvm-mca/X86/Generic/resources-avx1.s

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,9 +1189,9 @@ vzeroupper
11891189
# CHECK-NEXT: 3 9 1.00 vdppd $22, %xmm0, %xmm1, %xmm2
11901190
# CHECK-NEXT: 4 15 1.00 * vdppd $22, (%rax), %xmm1, %xmm2
11911191
# CHECK-NEXT: 4 12 2.00 vdpps $22, %xmm0, %xmm1, %xmm2
1192-
# CHECK-NEXT: 5 18 2.00 * vdpps $22, (%rax), %xmm1, %xmm2
1192+
# CHECK-NEXT: 6 18 2.00 * vdpps $22, (%rax), %xmm1, %xmm2
11931193
# CHECK-NEXT: 4 12 2.00 vdpps $22, %ymm0, %ymm1, %ymm2
1194-
# CHECK-NEXT: 5 19 2.00 * vdpps $22, (%rax), %ymm1, %ymm2
1194+
# CHECK-NEXT: 6 19 2.00 * vdpps $22, (%rax), %ymm1, %ymm2
11951195
# CHECK-NEXT: 1 1 1.00 vextractf128 $1, %ymm0, %xmm2
11961196
# CHECK-NEXT: 1 1 1.00 * vextractf128 $1, %ymm0, (%rax)
11971197
# CHECK-NEXT: 2 3 1.00 vextractps $1, %xmm0, %ecx
@@ -1734,7 +1734,7 @@ vzeroupper
17341734

17351735
# CHECK: Resource pressure per iteration:
17361736
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
1737-
# CHECK-NEXT: - 572.00 246.50 317.00 39.00 365.50 179.50 179.50
1737+
# CHECK-NEXT: - 572.00 246.50 317.00 39.00 367.50 179.50 179.50
17381738

17391739
# CHECK: Resource pressure by instruction:
17401740
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -1897,9 +1897,9 @@ vzeroupper
18971897
# CHECK-NEXT: - - 1.00 1.00 - 1.00 - - vdppd $22, %xmm0, %xmm1, %xmm2
18981898
# CHECK-NEXT: - - 1.00 1.00 - 1.00 0.50 0.50 vdppd $22, (%rax), %xmm1, %xmm2
18991899
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - vdpps $22, %xmm0, %xmm1, %xmm2
1900-
# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 vdpps $22, (%rax), %xmm1, %xmm2
1900+
# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 vdpps $22, (%rax), %xmm1, %xmm2
19011901
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - vdpps $22, %ymm0, %ymm1, %ymm2
1902-
# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 vdpps $22, (%rax), %ymm1, %ymm2
1902+
# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 vdpps $22, (%rax), %ymm1, %ymm2
19031903
# CHECK-NEXT: - - - - - 1.00 - - vextractf128 $1, %ymm0, %xmm2
19041904
# CHECK-NEXT: - - - - 1.00 - 0.50 0.50 vextractf128 $1, %ymm0, (%rax)
19051905
# CHECK-NEXT: - - 1.00 - - 1.00 - - vextractps $1, %xmm0, %ecx

llvm/test/tools/llvm-mca/X86/Generic/resources-sse41.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ roundss $1, (%rax), %xmm2
166166
# CHECK-NEXT: 3 9 1.00 dppd $22, %xmm0, %xmm2
167167
# CHECK-NEXT: 4 15 1.00 * dppd $22, (%rax), %xmm2
168168
# CHECK-NEXT: 4 12 2.00 dpps $22, %xmm0, %xmm2
169-
# CHECK-NEXT: 5 18 2.00 * dpps $22, (%rax), %xmm2
169+
# CHECK-NEXT: 6 18 2.00 * dpps $22, (%rax), %xmm2
170170
# CHECK-NEXT: 2 3 1.00 extractps $1, %xmm0, %ecx
171171
# CHECK-NEXT: 3 5 1.00 * extractps $1, %xmm0, (%rax)
172172
# CHECK-NEXT: 1 1 1.00 insertps $1, %xmm0, %xmm2
@@ -264,7 +264,7 @@ roundss $1, (%rax), %xmm2
264264

265265
# CHECK: Resource pressure per iteration:
266266
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
267-
# CHECK-NEXT: - - 26.00 47.50 5.00 52.50 24.50 24.50
267+
# CHECK-NEXT: - - 26.00 47.50 5.00 53.50 24.50 24.50
268268

269269
# CHECK: Resource pressure by instruction:
270270
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -279,7 +279,7 @@ roundss $1, (%rax), %xmm2
279279
# CHECK-NEXT: - - 1.00 1.00 - 1.00 - - dppd $22, %xmm0, %xmm2
280280
# CHECK-NEXT: - - 1.00 1.00 - 1.00 0.50 0.50 dppd $22, (%rax), %xmm2
281281
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - dpps $22, %xmm0, %xmm2
282-
# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 dpps $22, (%rax), %xmm2
282+
# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 dpps $22, (%rax), %xmm2
283283
# CHECK-NEXT: - - 1.00 - - 1.00 - - extractps $1, %xmm0, %ecx
284284
# CHECK-NEXT: - - - - 1.00 1.00 0.50 0.50 extractps $1, %xmm0, (%rax)
285285
# CHECK-NEXT: - - - - - 1.00 - - insertps $1, %xmm0, %xmm2

llvm/test/tools/llvm-mca/X86/SandyBridge/resources-avx1.s

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,9 +1189,9 @@ vzeroupper
11891189
# CHECK-NEXT: 3 9 1.00 vdppd $22, %xmm0, %xmm1, %xmm2
11901190
# CHECK-NEXT: 4 15 1.00 * vdppd $22, (%rax), %xmm1, %xmm2
11911191
# CHECK-NEXT: 4 12 2.00 vdpps $22, %xmm0, %xmm1, %xmm2
1192-
# CHECK-NEXT: 5 18 2.00 * vdpps $22, (%rax), %xmm1, %xmm2
1192+
# CHECK-NEXT: 6 18 2.00 * vdpps $22, (%rax), %xmm1, %xmm2
11931193
# CHECK-NEXT: 4 12 2.00 vdpps $22, %ymm0, %ymm1, %ymm2
1194-
# CHECK-NEXT: 5 19 2.00 * vdpps $22, (%rax), %ymm1, %ymm2
1194+
# CHECK-NEXT: 6 19 2.00 * vdpps $22, (%rax), %ymm1, %ymm2
11951195
# CHECK-NEXT: 1 1 1.00 vextractf128 $1, %ymm0, %xmm2
11961196
# CHECK-NEXT: 1 1 1.00 * vextractf128 $1, %ymm0, (%rax)
11971197
# CHECK-NEXT: 2 3 1.00 vextractps $1, %xmm0, %ecx
@@ -1734,7 +1734,7 @@ vzeroupper
17341734

17351735
# CHECK: Resource pressure per iteration:
17361736
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
1737-
# CHECK-NEXT: - 572.00 246.50 317.00 39.00 365.50 179.50 179.50
1737+
# CHECK-NEXT: - 572.00 246.50 317.00 39.00 367.50 179.50 179.50
17381738

17391739
# CHECK: Resource pressure by instruction:
17401740
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -1897,9 +1897,9 @@ vzeroupper
18971897
# CHECK-NEXT: - - 1.00 1.00 - 1.00 - - vdppd $22, %xmm0, %xmm1, %xmm2
18981898
# CHECK-NEXT: - - 1.00 1.00 - 1.00 0.50 0.50 vdppd $22, (%rax), %xmm1, %xmm2
18991899
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - vdpps $22, %xmm0, %xmm1, %xmm2
1900-
# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 vdpps $22, (%rax), %xmm1, %xmm2
1900+
# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 vdpps $22, (%rax), %xmm1, %xmm2
19011901
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - vdpps $22, %ymm0, %ymm1, %ymm2
1902-
# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 vdpps $22, (%rax), %ymm1, %ymm2
1902+
# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 vdpps $22, (%rax), %ymm1, %ymm2
19031903
# CHECK-NEXT: - - - - - 1.00 - - vextractf128 $1, %ymm0, %xmm2
19041904
# CHECK-NEXT: - - - - 1.00 - 0.50 0.50 vextractf128 $1, %ymm0, (%rax)
19051905
# CHECK-NEXT: - - 1.00 - - 1.00 - - vextractps $1, %xmm0, %ecx

llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse41.s

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ roundss $1, (%rax), %xmm2
166166
# CHECK-NEXT: 3 9 1.00 dppd $22, %xmm0, %xmm2
167167
# CHECK-NEXT: 4 15 1.00 * dppd $22, (%rax), %xmm2
168168
# CHECK-NEXT: 4 12 2.00 dpps $22, %xmm0, %xmm2
169-
# CHECK-NEXT: 5 18 2.00 * dpps $22, (%rax), %xmm2
169+
# CHECK-NEXT: 6 18 2.00 * dpps $22, (%rax), %xmm2
170170
# CHECK-NEXT: 2 3 1.00 extractps $1, %xmm0, %ecx
171171
# CHECK-NEXT: 3 5 1.00 * extractps $1, %xmm0, (%rax)
172172
# CHECK-NEXT: 1 1 1.00 insertps $1, %xmm0, %xmm2
@@ -264,7 +264,7 @@ roundss $1, (%rax), %xmm2
264264

265265
# CHECK: Resource pressure per iteration:
266266
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1]
267-
# CHECK-NEXT: - - 26.00 47.50 5.00 52.50 24.50 24.50
267+
# CHECK-NEXT: - - 26.00 47.50 5.00 53.50 24.50 24.50
268268

269269
# CHECK: Resource pressure by instruction:
270270
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6.0] [6.1] Instructions:
@@ -279,7 +279,7 @@ roundss $1, (%rax), %xmm2
279279
# CHECK-NEXT: - - 1.00 1.00 - 1.00 - - dppd $22, %xmm0, %xmm2
280280
# CHECK-NEXT: - - 1.00 1.00 - 1.00 0.50 0.50 dppd $22, (%rax), %xmm2
281281
# CHECK-NEXT: - - 1.00 2.00 - 1.00 - - dpps $22, %xmm0, %xmm2
282-
# CHECK-NEXT: - - 1.00 2.00 - 1.00 0.50 0.50 dpps $22, (%rax), %xmm2
282+
# CHECK-NEXT: - - 1.00 2.00 - 2.00 0.50 0.50 dpps $22, (%rax), %xmm2
283283
# CHECK-NEXT: - - 1.00 - - 1.00 - - extractps $1, %xmm0, %ecx
284284
# CHECK-NEXT: - - - - 1.00 1.00 0.50 0.50 extractps $1, %xmm0, (%rax)
285285
# CHECK-NEXT: - - - - - 1.00 - - insertps $1, %xmm0, %xmm2

0 commit comments

Comments
 (0)