Skip to content

Commit 24a39f3

Browse files
committed
[X86] Fix pipe resources for HADD/SUB instructions
IceLakeServer was copying these from SkylakeServer, but integer HADD/SUB can now run on an extra port
1 parent 435aa76 commit 24a39f3

File tree

4 files changed

+82
-82
lines changed

4 files changed

+82
-82
lines changed

llvm/lib/Target/X86/X86SchedIceLake.td

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -623,8 +623,8 @@ def : WriteRes<WriteNop, []>;
623623
defm : ICXWriteResPair<WriteFHAdd, [ICXPort5,ICXPort015], 6, [2,1], 3, 6>;
624624
defm : ICXWriteResPair<WriteFHAddY, [ICXPort5,ICXPort015], 6, [2,1], 3, 7>;
625625
defm : ICXWriteResPair<WritePHAdd, [ICXPort5,ICXPort05], 3, [2,1], 3, 5>;
626-
defm : ICXWriteResPair<WritePHAddX, [ICXPort5,ICXPort015], 3, [2,1], 3, 6>;
627-
defm : ICXWriteResPair<WritePHAddY, [ICXPort5,ICXPort015], 3, [2,1], 3, 7>;
626+
defm : ICXWriteResPair<WritePHAddX, [ICXPort15,ICXPort015], 3, [2,1], 3, 6>;
627+
defm : ICXWriteResPair<WritePHAddY, [ICXPort15,ICXPort015], 3, [2,1], 3, 7>;
628628

629629
// Remaining instrs.
630630

@@ -886,7 +886,7 @@ def ICXWriteResGroup37 : SchedWriteRes<[ICXPort0,ICXPort5]> {
886886
}
887887
def: InstRW<[ICXWriteResGroup37], (instregex "MMX_PH(ADD|SUB)SWrr")>;
888888

889-
def ICXWriteResGroup38 : SchedWriteRes<[ICXPort5,ICXPort01]> {
889+
def ICXWriteResGroup38 : SchedWriteRes<[ICXPort15,ICXPort01]> {
890890
let Latency = 3;
891891
let NumMicroOps = 3;
892892
let ReleaseAtCycles = [2,1];
@@ -1739,13 +1739,13 @@ def ICXWriteResGroup137 : SchedWriteRes<[ICXPort23,ICXPort01]> {
17391739
def: InstRW<[ICXWriteResGroup137], (instregex "MMX_CVT(T?)PS2PIrm",
17401740
"(V?)CVTPS2PDrm")>;
17411741

1742-
def ICXWriteResGroup143 : SchedWriteRes<[ICXPort5,ICXPort01,ICXPort23]> {
1742+
def ICXWriteResGroup143 : SchedWriteRes<[ICXPort15,ICXPort01,ICXPort23]> {
17431743
let Latency = 9;
17441744
let NumMicroOps = 4;
17451745
let ReleaseAtCycles = [2,1,1];
17461746
}
1747-
def: InstRW<[ICXWriteResGroup143], (instregex "(V?)PHADDSWrm",
1748-
"(V?)PHSUBSWrm")>;
1747+
def: InstRW<[ICXWriteResGroup143], (instrs PHADDSWrm, VPHADDSWrm,
1748+
PHSUBSWrm, VPHSUBSWrm)>;
17491749

17501750
def ICXWriteResGroup146 : SchedWriteRes<[ICXPort1,ICXPort6,ICXPort23,ICXPort0156]> {
17511751
let Latency = 9;
@@ -1842,7 +1842,7 @@ def: InstRW<[ICXWriteResGroup151], (instregex "VEXPANDPDZ128rm(b?)",
18421842
"VPEXPANDDZ128rm(b?)",
18431843
"VPEXPANDQZ128rm(b?)")>;
18441844

1845-
def ICXWriteResGroup154 : SchedWriteRes<[ICXPort5,ICXPort01,ICXPort23]> {
1845+
def ICXWriteResGroup154 : SchedWriteRes<[ICXPort15,ICXPort01,ICXPort23]> {
18461846
let Latency = 10;
18471847
let NumMicroOps = 4;
18481848
let ReleaseAtCycles = [2,1,1];

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

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1455,20 +1455,20 @@ vzeroupper
14551455
# CHECK-NEXT: 3 2 1.00 * vpextrq $1, %xmm0, (%rax)
14561456
# CHECK-NEXT: 2 3 1.00 vpextrw $1, %xmm0, %ecx
14571457
# CHECK-NEXT: 3 2 1.00 * vpextrw $1, %xmm0, (%rax)
1458-
# CHECK-NEXT: 3 3 2.00 vphaddd %xmm0, %xmm1, %xmm2
1459-
# CHECK-NEXT: 4 9 2.00 * vphaddd (%rax), %xmm1, %xmm2
1460-
# CHECK-NEXT: 3 3 2.00 vphaddsw %xmm0, %xmm1, %xmm2
1461-
# CHECK-NEXT: 4 9 2.00 * vphaddsw (%rax), %xmm1, %xmm2
1462-
# CHECK-NEXT: 3 3 2.00 vphaddw %xmm0, %xmm1, %xmm2
1463-
# CHECK-NEXT: 4 9 2.00 * vphaddw (%rax), %xmm1, %xmm2
1458+
# CHECK-NEXT: 3 3 1.00 vphaddd %xmm0, %xmm1, %xmm2
1459+
# CHECK-NEXT: 4 9 1.00 * vphaddd (%rax), %xmm1, %xmm2
1460+
# CHECK-NEXT: 3 3 1.00 vphaddsw %xmm0, %xmm1, %xmm2
1461+
# CHECK-NEXT: 4 9 1.00 * vphaddsw (%rax), %xmm1, %xmm2
1462+
# CHECK-NEXT: 3 3 1.00 vphaddw %xmm0, %xmm1, %xmm2
1463+
# CHECK-NEXT: 4 9 1.00 * vphaddw (%rax), %xmm1, %xmm2
14641464
# CHECK-NEXT: 1 4 1.00 vphminposuw %xmm0, %xmm2
14651465
# CHECK-NEXT: 2 10 1.00 * vphminposuw (%rax), %xmm2
1466-
# CHECK-NEXT: 3 3 2.00 vphsubd %xmm0, %xmm1, %xmm2
1467-
# CHECK-NEXT: 4 9 2.00 * vphsubd (%rax), %xmm1, %xmm2
1468-
# CHECK-NEXT: 3 3 2.00 vphsubsw %xmm0, %xmm1, %xmm2
1469-
# CHECK-NEXT: 4 9 2.00 * vphsubsw (%rax), %xmm1, %xmm2
1470-
# CHECK-NEXT: 3 3 2.00 vphsubw %xmm0, %xmm1, %xmm2
1471-
# CHECK-NEXT: 4 9 2.00 * vphsubw (%rax), %xmm1, %xmm2
1466+
# CHECK-NEXT: 3 3 1.00 vphsubd %xmm0, %xmm1, %xmm2
1467+
# CHECK-NEXT: 4 9 1.00 * vphsubd (%rax), %xmm1, %xmm2
1468+
# CHECK-NEXT: 3 3 1.00 vphsubsw %xmm0, %xmm1, %xmm2
1469+
# CHECK-NEXT: 4 9 1.00 * vphsubsw (%rax), %xmm1, %xmm2
1470+
# CHECK-NEXT: 3 3 1.00 vphsubw %xmm0, %xmm1, %xmm2
1471+
# CHECK-NEXT: 4 9 1.00 * vphsubw (%rax), %xmm1, %xmm2
14721472
# CHECK-NEXT: 2 2 2.00 vpinsrb $1, %eax, %xmm1, %xmm2
14731473
# CHECK-NEXT: 2 6 1.00 * vpinsrb $1, (%rax), %xmm1, %xmm2
14741474
# CHECK-NEXT: 2 2 2.00 vpinsrd $1, %eax, %xmm1, %xmm2
@@ -1738,7 +1738,7 @@ vzeroupper
17381738

17391739
# CHECK: Resource pressure per iteration:
17401740
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
1741-
# CHECK-NEXT: - 126.00 322.92 237.92 160.50 160.50 19.00 291.92 6.25 19.00 19.00 19.00
1741+
# CHECK-NEXT: - 126.00 322.92 249.92 160.50 160.50 19.00 279.92 6.25 19.00 19.00 19.00
17421742

17431743
# CHECK: Resource pressure by instruction:
17441744
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -2167,20 +2167,20 @@ vzeroupper
21672167
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrq $1, %xmm0, (%rax)
21682168
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrw $1, %xmm0, %ecx
21692169
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrw $1, %xmm0, (%rax)
2170-
# CHECK-NEXT: - - 0.33 0.33 - - - 2.33 - - - - vphaddd %xmm0, %xmm1, %xmm2
2171-
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 2.33 - - - - vphaddd (%rax), %xmm1, %xmm2
2172-
# CHECK-NEXT: - - 0.50 0.50 - - - 2.00 - - - - vphaddsw %xmm0, %xmm1, %xmm2
2173-
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 2.00 - - - - vphaddsw (%rax), %xmm1, %xmm2
2174-
# CHECK-NEXT: - - 0.33 0.33 - - - 2.33 - - - - vphaddw %xmm0, %xmm1, %xmm2
2175-
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 2.33 - - - - vphaddw (%rax), %xmm1, %xmm2
2170+
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphaddd %xmm0, %xmm1, %xmm2
2171+
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphaddd (%rax), %xmm1, %xmm2
2172+
# CHECK-NEXT: - - 0.50 1.50 - - - 1.00 - - - - vphaddsw %xmm0, %xmm1, %xmm2
2173+
# CHECK-NEXT: - - 0.50 1.50 0.50 0.50 - 1.00 - - - - vphaddsw (%rax), %xmm1, %xmm2
2174+
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphaddw %xmm0, %xmm1, %xmm2
2175+
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphaddw (%rax), %xmm1, %xmm2
21762176
# CHECK-NEXT: - - 1.00 - - - - - - - - - vphminposuw %xmm0, %xmm2
21772177
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - - - vphminposuw (%rax), %xmm2
2178-
# CHECK-NEXT: - - 0.33 0.33 - - - 2.33 - - - - vphsubd %xmm0, %xmm1, %xmm2
2179-
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 2.33 - - - - vphsubd (%rax), %xmm1, %xmm2
2180-
# CHECK-NEXT: - - 0.50 0.50 - - - 2.00 - - - - vphsubsw %xmm0, %xmm1, %xmm2
2181-
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 2.00 - - - - vphsubsw (%rax), %xmm1, %xmm2
2182-
# CHECK-NEXT: - - 0.33 0.33 - - - 2.33 - - - - vphsubw %xmm0, %xmm1, %xmm2
2183-
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 2.33 - - - - vphsubw (%rax), %xmm1, %xmm2
2178+
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphsubd %xmm0, %xmm1, %xmm2
2179+
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphsubd (%rax), %xmm1, %xmm2
2180+
# CHECK-NEXT: - - 0.50 1.50 - - - 1.00 - - - - vphsubsw %xmm0, %xmm1, %xmm2
2181+
# CHECK-NEXT: - - 0.50 1.50 0.50 0.50 - 1.00 - - - - vphsubsw (%rax), %xmm1, %xmm2
2182+
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphsubw %xmm0, %xmm1, %xmm2
2183+
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphsubw (%rax), %xmm1, %xmm2
21842184
# CHECK-NEXT: - - - - - - - 2.00 - - - - vpinsrb $1, %eax, %xmm1, %xmm2
21852185
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpinsrb $1, (%rax), %xmm1, %xmm2
21862186
# CHECK-NEXT: - - - - - - - 2.00 - - - - vpinsrd $1, %eax, %xmm1, %xmm2

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

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -576,18 +576,18 @@ vpxor (%rax), %ymm1, %ymm2
576576
# CHECK-NEXT: 5 20 2.00 * vpgatherqd %xmm0, (%rax,%ymm1,2), %xmm2
577577
# CHECK-NEXT: 5 18 1.00 * vpgatherqq %xmm0, (%rax,%xmm1,2), %xmm2
578578
# CHECK-NEXT: 5 20 2.00 * vpgatherqq %ymm0, (%rax,%ymm1,2), %ymm2
579-
# CHECK-NEXT: 3 3 2.00 vphaddd %ymm0, %ymm1, %ymm2
580-
# CHECK-NEXT: 4 10 2.00 * vphaddd (%rax), %ymm1, %ymm2
581-
# CHECK-NEXT: 3 3 2.00 vphaddsw %ymm0, %ymm1, %ymm2
582-
# CHECK-NEXT: 4 10 2.00 * vphaddsw (%rax), %ymm1, %ymm2
583-
# CHECK-NEXT: 3 3 2.00 vphaddw %ymm0, %ymm1, %ymm2
584-
# CHECK-NEXT: 4 10 2.00 * vphaddw (%rax), %ymm1, %ymm2
585-
# CHECK-NEXT: 3 3 2.00 vphsubd %ymm0, %ymm1, %ymm2
586-
# CHECK-NEXT: 4 10 2.00 * vphsubd (%rax), %ymm1, %ymm2
587-
# CHECK-NEXT: 3 3 2.00 vphsubsw %ymm0, %ymm1, %ymm2
588-
# CHECK-NEXT: 4 10 2.00 * vphsubsw (%rax), %ymm1, %ymm2
589-
# CHECK-NEXT: 3 3 2.00 vphsubw %ymm0, %ymm1, %ymm2
590-
# CHECK-NEXT: 4 10 2.00 * vphsubw (%rax), %ymm1, %ymm2
579+
# CHECK-NEXT: 3 3 1.00 vphaddd %ymm0, %ymm1, %ymm2
580+
# CHECK-NEXT: 4 10 1.00 * vphaddd (%rax), %ymm1, %ymm2
581+
# CHECK-NEXT: 3 3 1.00 vphaddsw %ymm0, %ymm1, %ymm2
582+
# CHECK-NEXT: 4 10 1.00 * vphaddsw (%rax), %ymm1, %ymm2
583+
# CHECK-NEXT: 3 3 1.00 vphaddw %ymm0, %ymm1, %ymm2
584+
# CHECK-NEXT: 4 10 1.00 * vphaddw (%rax), %ymm1, %ymm2
585+
# CHECK-NEXT: 3 3 1.00 vphsubd %ymm0, %ymm1, %ymm2
586+
# CHECK-NEXT: 4 10 1.00 * vphsubd (%rax), %ymm1, %ymm2
587+
# CHECK-NEXT: 3 3 1.00 vphsubsw %ymm0, %ymm1, %ymm2
588+
# CHECK-NEXT: 4 10 1.00 * vphsubsw (%rax), %ymm1, %ymm2
589+
# CHECK-NEXT: 3 3 1.00 vphsubw %ymm0, %ymm1, %ymm2
590+
# CHECK-NEXT: 4 10 1.00 * vphsubw (%rax), %ymm1, %ymm2
591591
# CHECK-NEXT: 1 5 0.50 vpmaddubsw %ymm0, %ymm1, %ymm2
592592
# CHECK-NEXT: 2 12 0.50 * vpmaddubsw (%rax), %ymm1, %ymm2
593593
# CHECK-NEXT: 1 5 0.50 vpmaddwd %ymm0, %ymm1, %ymm2
@@ -778,7 +778,7 @@ vpxor (%rax), %ymm1, %ymm2
778778

779779
# CHECK: Resource pressure per iteration:
780780
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
781-
# CHECK-NEXT: - - 110.33 104.33 98.00 98.00 2.50 149.33 - 2.50 2.50 2.50
781+
# CHECK-NEXT: - - 110.33 116.33 98.00 98.00 2.50 137.33 - 2.50 2.50 2.50
782782

783783
# CHECK: Resource pressure by instruction:
784784
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -898,18 +898,18 @@ vpxor (%rax), %ymm1, %ymm2
898898
# CHECK-NEXT: - - 1.33 0.33 2.00 2.00 - 1.33 - - - - vpgatherqd %xmm0, (%rax,%ymm1,2), %xmm2
899899
# CHECK-NEXT: - - 1.33 0.33 1.00 1.00 - 1.33 - - - - vpgatherqq %xmm0, (%rax,%xmm1,2), %xmm2
900900
# CHECK-NEXT: - - 1.33 0.33 2.00 2.00 - 1.33 - - - - vpgatherqq %ymm0, (%rax,%ymm1,2), %ymm2
901-
# CHECK-NEXT: - - 0.33 0.33 - - - 2.33 - - - - vphaddd %ymm0, %ymm1, %ymm2
902-
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 2.33 - - - - vphaddd (%rax), %ymm1, %ymm2
903-
# CHECK-NEXT: - - 0.50 0.50 - - - 2.00 - - - - vphaddsw %ymm0, %ymm1, %ymm2
904-
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 2.00 - - - - vphaddsw (%rax), %ymm1, %ymm2
905-
# CHECK-NEXT: - - 0.33 0.33 - - - 2.33 - - - - vphaddw %ymm0, %ymm1, %ymm2
906-
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 2.33 - - - - vphaddw (%rax), %ymm1, %ymm2
907-
# CHECK-NEXT: - - 0.33 0.33 - - - 2.33 - - - - vphsubd %ymm0, %ymm1, %ymm2
908-
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 2.33 - - - - vphsubd (%rax), %ymm1, %ymm2
909-
# CHECK-NEXT: - - 0.50 0.50 - - - 2.00 - - - - vphsubsw %ymm0, %ymm1, %ymm2
910-
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - 2.00 - - - - vphsubsw (%rax), %ymm1, %ymm2
911-
# CHECK-NEXT: - - 0.33 0.33 - - - 2.33 - - - - vphsubw %ymm0, %ymm1, %ymm2
912-
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 2.33 - - - - vphsubw (%rax), %ymm1, %ymm2
901+
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphaddd %ymm0, %ymm1, %ymm2
902+
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphaddd (%rax), %ymm1, %ymm2
903+
# CHECK-NEXT: - - 0.50 1.50 - - - 1.00 - - - - vphaddsw %ymm0, %ymm1, %ymm2
904+
# CHECK-NEXT: - - 0.50 1.50 0.50 0.50 - 1.00 - - - - vphaddsw (%rax), %ymm1, %ymm2
905+
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphaddw %ymm0, %ymm1, %ymm2
906+
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphaddw (%rax), %ymm1, %ymm2
907+
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphsubd %ymm0, %ymm1, %ymm2
908+
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphsubd (%rax), %ymm1, %ymm2
909+
# CHECK-NEXT: - - 0.50 1.50 - - - 1.00 - - - - vphsubsw %ymm0, %ymm1, %ymm2
910+
# CHECK-NEXT: - - 0.50 1.50 0.50 0.50 - 1.00 - - - - vphsubsw (%rax), %ymm1, %ymm2
911+
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphsubw %ymm0, %ymm1, %ymm2
912+
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphsubw (%rax), %ymm1, %ymm2
913913
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vpmaddubsw %ymm0, %ymm1, %ymm2
914914
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - vpmaddubsw (%rax), %ymm1, %ymm2
915915
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - vpmaddwd %ymm0, %ymm1, %ymm2

0 commit comments

Comments
 (0)