Skip to content

Commit 888ef0f

Browse files
committed
[X86] Fix pipe resources for INT (V)PEXTR* instructions
IceLakeServer can use ICXPort15 for (V)PEXTR* (but only ICXPort5 for (V)EXTRACTPS) Confirmed with uops.info + Agner
1 parent 3276ee3 commit 888ef0f

File tree

7 files changed

+59
-45
lines changed

7 files changed

+59
-45
lines changed

llvm/lib/Target/X86/X86SchedIceLake.td

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -440,11 +440,11 @@ def : WriteRes<WriteVecInsertLd, [ICXPort5,ICXPort23]> {
440440
}
441441
def: InstRW<[WriteVecInsertLd], (instregex "(V?)MOV(H|L)(PD|PS)rm")>;
442442

443-
def : WriteRes<WriteVecExtract, [ICXPort0,ICXPort5]> {
443+
def : WriteRes<WriteVecExtract, [ICXPort0,ICXPort15]> {
444444
let Latency = 3;
445445
let NumMicroOps = 2;
446446
}
447-
def : WriteRes<WriteVecExtractSt, [ICXPort49,ICXPort5,ICXPort78]> {
447+
def : WriteRes<WriteVecExtractSt, [ICXPort49,ICXPort15,ICXPort78]> {
448448
let Latency = 2;
449449
let NumMicroOps = 3;
450450
}
@@ -879,6 +879,13 @@ def ICXWriteResGroup34 : SchedWriteRes<[ICXPort0,ICXPort0156]> {
879879
}
880880
def: InstRW<[ICXWriteResGroup34], (instrs FNSTSW16r)>;
881881

882+
def ICXWriteResGroup36 : SchedWriteRes<[ICXPort0,ICXPort5]> {
883+
let Latency = 3;
884+
let NumMicroOps = 2;
885+
let ReleaseAtCycles = [1,1];
886+
}
887+
def: InstRW<[ICXWriteResGroup36], (instregex "(V?)EXTRACTPS(Z?)rr")>;
888+
882889
def ICXWriteResGroup37 : SchedWriteRes<[ICXPort0,ICXPort5]> {
883890
let Latency = 3;
884891
let NumMicroOps = 3;
@@ -1022,6 +1029,13 @@ def: InstRW<[ICXWriteResGroup51], (instregex "VEXPANDPD(Z|Z128|Z256)rr",
10221029
"VPMOVUSWB(Z|Z128|Z256)rr",
10231030
"VPMOVWB(Z|Z128|Z256)rr")>;
10241031

1032+
def ICXWriteResGroup53 : SchedWriteRes<[ICXPort49,ICXPort5,ICXPort78]> {
1033+
let Latency = 2;
1034+
let NumMicroOps = 3;
1035+
let ReleaseAtCycles = [1,1,1];
1036+
}
1037+
def: InstRW<[ICXWriteResGroup53], (instregex "(V?)EXTRACTPS(Z?)mr")>;
1038+
10251039
def ICXWriteResGroup54 : SchedWriteRes<[ICXPort49,ICXPort5,ICXPort78]> {
10261040
let Latency = 4;
10271041
let NumMicroOps = 3;

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1448,13 +1448,13 @@ vzeroupper
14481448
# CHECK-NEXT: 1 1 1.00 vpermilps %ymm0, %ymm1, %ymm2
14491449
# CHECK-NEXT: 2 8 1.00 * vpermilps (%rax), %ymm1, %ymm2
14501450
# CHECK-NEXT: 2 3 1.00 vpextrb $1, %xmm0, %ecx
1451-
# CHECK-NEXT: 3 2 1.00 * vpextrb $1, %xmm0, (%rax)
1451+
# CHECK-NEXT: 3 2 0.50 * vpextrb $1, %xmm0, (%rax)
14521452
# CHECK-NEXT: 2 3 1.00 vpextrd $1, %xmm0, %ecx
1453-
# CHECK-NEXT: 3 2 1.00 * vpextrd $1, %xmm0, (%rax)
1453+
# CHECK-NEXT: 3 2 0.50 * vpextrd $1, %xmm0, (%rax)
14541454
# CHECK-NEXT: 2 3 1.00 vpextrq $1, %xmm0, %rcx
1455-
# CHECK-NEXT: 3 2 1.00 * vpextrq $1, %xmm0, (%rax)
1455+
# CHECK-NEXT: 3 2 0.50 * vpextrq $1, %xmm0, (%rax)
14561456
# CHECK-NEXT: 2 3 1.00 vpextrw $1, %xmm0, %ecx
1457-
# CHECK-NEXT: 3 2 1.00 * vpextrw $1, %xmm0, (%rax)
1457+
# CHECK-NEXT: 3 2 0.50 * vpextrw $1, %xmm0, (%rax)
14581458
# CHECK-NEXT: 3 3 1.00 vphaddd %xmm0, %xmm1, %xmm2
14591459
# CHECK-NEXT: 4 9 1.00 * vphaddd (%rax), %xmm1, %xmm2
14601460
# CHECK-NEXT: 3 3 1.00 vphaddsw %xmm0, %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 325.58 252.58 160.50 160.50 19.00 274.58 6.25 19.00 19.00 19.00
1741+
# CHECK-NEXT: - 126.00 325.58 256.58 160.50 160.50 19.00 270.58 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:
@@ -2159,14 +2159,14 @@ vzeroupper
21592159
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermilps $1, (%rax), %ymm2
21602160
# CHECK-NEXT: - - - - - - - 1.00 - - - - vpermilps %ymm0, %ymm1, %ymm2
21612161
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpermilps (%rax), %ymm1, %ymm2
2162-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrb $1, %xmm0, %ecx
2163-
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrb $1, %xmm0, (%rax)
2164-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrd $1, %xmm0, %ecx
2165-
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrd $1, %xmm0, (%rax)
2166-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrq $1, %xmm0, %rcx
2167-
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrq $1, %xmm0, (%rax)
2168-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrw $1, %xmm0, %ecx
2169-
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrw $1, %xmm0, (%rax)
2162+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - vpextrb $1, %xmm0, %ecx
2163+
# CHECK-NEXT: - - - 0.50 - - 0.50 0.50 - 0.50 0.50 0.50 vpextrb $1, %xmm0, (%rax)
2164+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - vpextrd $1, %xmm0, %ecx
2165+
# CHECK-NEXT: - - - 0.50 - - 0.50 0.50 - 0.50 0.50 0.50 vpextrd $1, %xmm0, (%rax)
2166+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - vpextrq $1, %xmm0, %rcx
2167+
# CHECK-NEXT: - - - 0.50 - - 0.50 0.50 - 0.50 0.50 0.50 vpextrq $1, %xmm0, (%rax)
2168+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - vpextrw $1, %xmm0, %ecx
2169+
# CHECK-NEXT: - - - 0.50 - - 0.50 0.50 - 0.50 0.50 0.50 vpextrw $1, %xmm0, (%rax)
21702170
# CHECK-NEXT: - - 0.33 1.33 - - - 1.33 - - - - vphaddd %xmm0, %xmm1, %xmm2
21712171
# CHECK-NEXT: - - 0.33 1.33 0.50 0.50 - 1.33 - - - - vphaddd (%rax), %xmm1, %xmm2
21722172
# CHECK-NEXT: - - 0.50 1.50 - - - 1.00 - - - - vphaddsw %xmm0, %xmm1, %xmm2

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -820,9 +820,9 @@ vpunpcklwd (%rax), %zmm17, %zmm19 {z}{k1}
820820
# CHECK-NEXT: 1 4 1.00 vpcmpeqw %zmm0, %zmm1, %k2 {%k3}
821821
# CHECK-NEXT: 2 11 1.00 * vpcmpeqw (%rax), %zmm1, %k2 {%k3}
822822
# CHECK-NEXT: 2 3 1.00 vpextrb $0, %xmm16, %eax
823-
# CHECK-NEXT: 3 2 1.00 * vpextrb $0, %xmm16, (%rax)
823+
# CHECK-NEXT: 3 2 0.50 * vpextrb $0, %xmm16, (%rax)
824824
# CHECK-NEXT: 2 3 1.00 vpextrw $0, %xmm16, %eax
825-
# CHECK-NEXT: 3 2 1.00 * vpextrw $0, %xmm16, (%rax)
825+
# CHECK-NEXT: 3 2 0.50 * vpextrw $0, %xmm16, (%rax)
826826
# CHECK-NEXT: 2 2 2.00 vpinsrb $0, %eax, %xmm16, %xmm19
827827
# CHECK-NEXT: 2 6 1.00 * vpinsrb $0, (%rax), %xmm16, %xmm19
828828
# CHECK-NEXT: 2 2 2.00 vpinsrw $0, %eax, %xmm16, %xmm19
@@ -1128,7 +1128,7 @@ vpunpcklwd (%rax), %zmm17, %zmm19 {z}{k1}
11281128

11291129
# CHECK: Resource pressure per iteration:
11301130
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
1131-
# CHECK-NEXT: - - 239.50 17.50 110.00 110.00 8.00 295.50 0.50 8.00 8.00 8.00
1131+
# CHECK-NEXT: - - 239.50 19.50 110.00 110.00 8.00 293.50 0.50 8.00 8.00 8.00
11321132

11331133
# CHECK: Resource pressure by instruction:
11341134
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -1340,10 +1340,10 @@ vpunpcklwd (%rax), %zmm17, %zmm19 {z}{k1}
13401340
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpcmpeqw (%rax), %zmm1, %k2
13411341
# CHECK-NEXT: - - - - - - - 1.00 - - - - vpcmpeqw %zmm0, %zmm1, %k2 {%k3}
13421342
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpcmpeqw (%rax), %zmm1, %k2 {%k3}
1343-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrb $0, %xmm16, %eax
1344-
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrb $0, %xmm16, (%rax)
1345-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrw $0, %xmm16, %eax
1346-
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrw $0, %xmm16, (%rax)
1343+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - vpextrb $0, %xmm16, %eax
1344+
# CHECK-NEXT: - - - 0.50 - - 0.50 0.50 - 0.50 0.50 0.50 vpextrb $0, %xmm16, (%rax)
1345+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - vpextrw $0, %xmm16, %eax
1346+
# CHECK-NEXT: - - - 0.50 - - 0.50 0.50 - 0.50 0.50 0.50 vpextrw $0, %xmm16, (%rax)
13471347
# CHECK-NEXT: - - - - - - - 2.00 - - - - vpinsrb $0, %eax, %xmm16, %xmm19
13481348
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpinsrb $0, (%rax), %xmm16, %xmm19
13491349
# CHECK-NEXT: - - - - - - - 2.00 - - - - vpinsrw $0, %eax, %xmm16, %xmm19

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -736,9 +736,9 @@ vxorps (%rax){1to16}, %zmm17, %zmm19 {z}{k1}
736736
# CHECK-NEXT: 2 8 0.50 * vorps (%rax), %zmm17, %zmm19 {%k1} {z}
737737
# CHECK-NEXT: 2 8 0.50 * vorps (%rax){1to16}, %zmm17, %zmm19 {%k1} {z}
738738
# CHECK-NEXT: 2 3 1.00 vpextrd $1, %xmm16, %ecx
739-
# CHECK-NEXT: 3 2 1.00 * vpextrd $1, %xmm16, (%rax)
739+
# CHECK-NEXT: 3 2 0.50 * vpextrd $1, %xmm16, (%rax)
740740
# CHECK-NEXT: 2 3 1.00 vpextrq $1, %xmm16, %rcx
741-
# CHECK-NEXT: 3 2 1.00 * vpextrq $1, %xmm16, (%rax)
741+
# CHECK-NEXT: 3 2 0.50 * vpextrq $1, %xmm16, (%rax)
742742
# CHECK-NEXT: 2 2 2.00 vpinsrd $1, %ecx, %xmm16, %xmm19
743743
# CHECK-NEXT: 2 6 1.00 * vpinsrd $1, (%rax), %xmm16, %xmm19
744744
# CHECK-NEXT: 2 2 2.00 vpinsrq $1, %rcx, %xmm16, %xmm19
@@ -872,7 +872,7 @@ vxorps (%rax){1to16}, %zmm17, %zmm19 {z}{k1}
872872

873873
# CHECK: Resource pressure per iteration:
874874
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
875-
# CHECK-NEXT: - - 209.25 73.25 102.00 102.00 5.50 197.25 0.25 5.50 5.50 5.50
875+
# CHECK-NEXT: - - 209.25 75.25 102.00 102.00 5.50 195.25 0.25 5.50 5.50 5.50
876876

877877
# CHECK: Resource pressure by instruction:
878878
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -1144,10 +1144,10 @@ vxorps (%rax){1to16}, %zmm17, %zmm19 {z}{k1}
11441144
# CHECK-NEXT: - - 0.50 - - - - 0.50 - - - - vorps %zmm16, %zmm17, %zmm19 {%k1} {z}
11451145
# CHECK-NEXT: - - 0.50 - 0.50 0.50 - 0.50 - - - - vorps (%rax), %zmm17, %zmm19 {%k1} {z}
11461146
# CHECK-NEXT: - - 0.50 - 0.50 0.50 - 0.50 - - - - vorps (%rax){1to16}, %zmm17, %zmm19 {%k1} {z}
1147-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrd $1, %xmm16, %ecx
1148-
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrd $1, %xmm16, (%rax)
1149-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - vpextrq $1, %xmm16, %rcx
1150-
# CHECK-NEXT: - - - - - - 0.50 1.00 - 0.50 0.50 0.50 vpextrq $1, %xmm16, (%rax)
1147+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - vpextrd $1, %xmm16, %ecx
1148+
# CHECK-NEXT: - - - 0.50 - - 0.50 0.50 - 0.50 0.50 0.50 vpextrd $1, %xmm16, (%rax)
1149+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - vpextrq $1, %xmm16, %rcx
1150+
# CHECK-NEXT: - - - 0.50 - - 0.50 0.50 - 0.50 0.50 0.50 vpextrq $1, %xmm16, (%rax)
11511151
# CHECK-NEXT: - - - - - - - 2.00 - - - - vpinsrd $1, %ecx, %xmm16, %xmm19
11521152
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - vpinsrd $1, (%rax), %xmm16, %xmm19
11531153
# CHECK-NEXT: - - - - - - - 2.00 - - - - vpinsrq $1, %rcx, %xmm16, %xmm19

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,7 @@ xorps (%rax), %xmm2
335335

336336
# CHECK: Resource pressure per iteration:
337337
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
338-
# CHECK-NEXT: - 24.00 66.92 28.92 29.00 29.00 4.50 31.92 0.25 4.50 4.50 4.50
338+
# CHECK-NEXT: - 24.00 66.92 29.42 29.00 29.00 4.50 31.42 0.25 4.50 4.50 4.50
339339

340340
# CHECK: Resource pressure by instruction:
341341
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -413,7 +413,7 @@ xorps (%rax), %xmm2
413413
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - - - pavgb (%rax), %mm2
414414
# CHECK-NEXT: - - 1.00 - - - - - - - - - pavgw %mm0, %mm2
415415
# CHECK-NEXT: - - 1.00 - 0.50 0.50 - - - - - - pavgw (%rax), %mm2
416-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - pextrw $1, %mm0, %ecx
416+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - pextrw $1, %mm0, %ecx
417417
# CHECK-NEXT: - - - - - - - 2.00 - - - - pinsrw $1, %eax, %mm2
418418
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - pinsrw $1, (%rax), %mm2
419419
# CHECK-NEXT: - - 1.00 - - - - - - - - - pmaxsw %mm0, %mm2

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -691,7 +691,7 @@ xorpd (%rax), %xmm2
691691

692692
# CHECK: Resource pressure per iteration:
693693
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
694-
# CHECK-NEXT: - 40.00 106.92 102.92 58.50 58.50 7.50 72.42 1.75 8.00 8.00 7.50
694+
# CHECK-NEXT: - 40.00 106.92 103.42 58.50 58.50 7.50 71.92 1.75 8.00 8.00 7.50
695695

696696
# CHECK: Resource pressure by instruction:
697697
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -848,7 +848,7 @@ xorpd (%rax), %xmm2
848848
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - pcmpgtd (%rax), %xmm2
849849
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - pcmpgtw %xmm0, %xmm2
850850
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - pcmpgtw (%rax), %xmm2
851-
# CHECK-NEXT: - - 1.00 - - - - 1.00 - - - - pextrw $1, %xmm0, %ecx
851+
# CHECK-NEXT: - - 1.00 0.50 - - - 0.50 - - - - pextrw $1, %xmm0, %ecx
852852
# CHECK-NEXT: - - - - - - - 2.00 - - - - pinsrw $1, %eax, %xmm0
853853
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - pinsrw $1, (%rax), %xmm0
854854
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - pmaddwd %xmm0, %xmm2

0 commit comments

Comments
 (0)