Skip to content

Commit 74d1fc7

Browse files
committed
[X86] Adjust some IceLake integer shuffle schedule classes (PR48110)
The IceLake scheduler model is still mainly a copy of the SkylakeServer model. This patch adjusts the integer shuffle classes to account for most instructions now working on Port 1 as well as Port 5. This is based off Agner + uops.info as well as the PR48110 report. Differential Revision: https://reviews.llvm.org/D115547
1 parent 3926893 commit 74d1fc7

File tree

8 files changed

+714
-718
lines changed

8 files changed

+714
-718
lines changed

llvm/lib/Target/X86/X86SchedIceLake.td

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -388,14 +388,14 @@ defm : ICXWriteResPair<WriteVecIMulZ, [ICXPort05], 5, [1], 1, 7>;
388388
defm : ICXWriteResPair<WritePMULLD, [ICXPort01], 10, [2], 2, 6>; // Vector PMULLD.
389389
defm : ICXWriteResPair<WritePMULLDY, [ICXPort01], 10, [2], 2, 7>;
390390
defm : ICXWriteResPair<WritePMULLDZ, [ICXPort05], 10, [2], 2, 7>;
391-
defm : ICXWriteResPair<WriteShuffle, [ICXPort5], 1, [1], 1, 5>; // Vector shuffles.
392-
defm : ICXWriteResPair<WriteShuffleX, [ICXPort5], 1, [1], 1, 6>;
393-
defm : ICXWriteResPair<WriteShuffleY, [ICXPort5], 1, [1], 1, 7>;
394-
defm : ICXWriteResPair<WriteShuffleZ, [ICXPort5], 1, [1], 1, 7>;
395-
defm : ICXWriteResPair<WriteVarShuffle, [ICXPort5], 1, [1], 1, 5>; // Vector variable shuffles.
396-
defm : ICXWriteResPair<WriteVarShuffleX, [ICXPort5], 1, [1], 1, 6>;
397-
defm : ICXWriteResPair<WriteVarShuffleY, [ICXPort5], 1, [1], 1, 7>;
398-
defm : ICXWriteResPair<WriteVarShuffleZ, [ICXPort5], 1, [1], 1, 7>;
391+
defm : ICXWriteResPair<WriteShuffle, [ICXPort5], 1, [1], 1, 5>; // Vector shuffles.
392+
defm : ICXWriteResPair<WriteShuffleX, [ICXPort15], 1, [1], 1, 6>;
393+
defm : ICXWriteResPair<WriteShuffleY, [ICXPort15], 1, [1], 1, 7>;
394+
defm : ICXWriteResPair<WriteShuffleZ, [ICXPort5], 1, [1], 1, 7>;
395+
defm : ICXWriteResPair<WriteVarShuffle, [ICXPort5], 1, [1], 1, 5>; // Vector variable shuffles.
396+
defm : ICXWriteResPair<WriteVarShuffleX, [ICXPort15], 1, [1], 1, 6>;
397+
defm : ICXWriteResPair<WriteVarShuffleY, [ICXPort15], 1, [1], 1, 7>;
398+
defm : ICXWriteResPair<WriteVarShuffleZ, [ICXPort5], 1, [1], 1, 7>;
399399
defm : ICXWriteResPair<WriteBlend, [ICXPort5], 1, [1], 1, 6>; // Vector blends.
400400
defm : ICXWriteResPair<WriteBlendY,[ICXPort5], 1, [1], 1, 7>;
401401
defm : ICXWriteResPair<WriteBlendZ,[ICXPort5], 1, [1], 1, 7>;
@@ -663,7 +663,10 @@ def ICXWriteResGroup3 : SchedWriteRes<[ICXPort5]> {
663663
}
664664
def: InstRW<[ICXWriteResGroup3], (instregex "COM(P?)_FST0r",
665665
"KMOV(B|D|Q|W)kr",
666-
"UCOM_F(P?)r")>;
666+
"UCOM_F(P?)r",
667+
"VPBROADCAST(D|Q)rr",
668+
"(V?)PALIGNR(Y|Z|Z128|Z256)?rri",
669+
"(V?)PACK(U|S)S(DW|WB)(Y|Z|Z128|Z256)?rr")>;
667670

668671
def ICXWriteResGroup4 : SchedWriteRes<[ICXPort6]> {
669672
let Latency = 1;
@@ -1296,19 +1299,10 @@ def ICXWriteResGroup92 : SchedWriteRes<[ICXPort5,ICXPort23]> {
12961299
let ResourceCycles = [1,1];
12971300
}
12981301
def: InstRW<[ICXWriteResGroup92], (instregex "VMOVSDZrm(b?)",
1299-
"VMOVSSZrm(b?)")>;
1300-
1301-
def ICXWriteResGroup92a : SchedWriteRes<[ICXPort5,ICXPort23]> {
1302-
let Latency = 6;
1303-
let NumMicroOps = 2;
1304-
let ResourceCycles = [1,1];
1305-
}
1306-
def: InstRW<[ICXWriteResGroup92a], (instregex "(V?)PMOV(SX|ZX)BDrm",
1307-
"(V?)PMOV(SX|ZX)BQrm",
1308-
"(V?)PMOV(SX|ZX)BWrm",
1309-
"(V?)PMOV(SX|ZX)DQrm",
1310-
"(V?)PMOV(SX|ZX)WDrm",
1311-
"(V?)PMOV(SX|ZX)WQrm")>;
1302+
"VMOVSSZrm(b?)",
1303+
"VPBROADCAST(B|W)(Z128)?rm",
1304+
"(V?)PALIGNR(Z128)?rmi",
1305+
"(V?)PACK(U|S)S(DW|WB)(Z128)?rm")>;
13121306

13131307
def ICXWriteResGroup93 : SchedWriteRes<[ICXPort5,ICXPort015]> {
13141308
let Latency = 7;
@@ -1546,7 +1540,9 @@ def ICXWriteResGroup119 : SchedWriteRes<[ICXPort5,ICXPort23]> {
15461540
}
15471541
def: InstRW<[ICXWriteResGroup119], (instregex "FCOM(P?)(32|64)m",
15481542
"VPBROADCASTB(Z|Z256)rm(b?)",
1549-
"VPBROADCASTW(Z|Z256)rm(b?)")>;
1543+
"VPBROADCASTW(Z|Z256)rm(b?)",
1544+
"(V?)PALIGNR(Y|Z|Z256)rmi",
1545+
"(V?)PACK(U|S)S(DW|WB)(Y|Z|Z256)rm")>;
15501546
def: InstRW<[ICXWriteResGroup119], (instrs VPBROADCASTBYrm,
15511547
VPBROADCASTWYrm,
15521548
VPMOVSXBDYrm,

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

Lines changed: 101 additions & 101 deletions
Large diffs are not rendered by default.

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

Lines changed: 53 additions & 53 deletions
Large diffs are not rendered by default.

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

Lines changed: 209 additions & 209 deletions
Large diffs are not rendered by default.

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

Lines changed: 229 additions & 229 deletions
Large diffs are not rendered by default.

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

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -588,16 +588,16 @@ xorpd (%rax), %xmm2
588588
# CHECK-NEXT: 2 7 0.50 * por (%rax), %xmm2
589589
# CHECK-NEXT: 1 3 1.00 psadbw %xmm0, %xmm2
590590
# CHECK-NEXT: 2 9 1.00 * psadbw (%rax), %xmm2
591-
# CHECK-NEXT: 1 1 1.00 pshufd $1, %xmm0, %xmm2
592-
# CHECK-NEXT: 2 7 1.00 * pshufd $1, (%rax), %xmm2
593-
# CHECK-NEXT: 1 1 1.00 pshufhw $1, %xmm0, %xmm2
594-
# CHECK-NEXT: 2 7 1.00 * pshufhw $1, (%rax), %xmm2
595-
# CHECK-NEXT: 1 1 1.00 pshuflw $1, %xmm0, %xmm2
596-
# CHECK-NEXT: 2 7 1.00 * pshuflw $1, (%rax), %xmm2
591+
# CHECK-NEXT: 1 1 0.50 pshufd $1, %xmm0, %xmm2
592+
# CHECK-NEXT: 2 7 0.50 * pshufd $1, (%rax), %xmm2
593+
# CHECK-NEXT: 1 1 0.50 pshufhw $1, %xmm0, %xmm2
594+
# CHECK-NEXT: 2 7 0.50 * pshufhw $1, (%rax), %xmm2
595+
# CHECK-NEXT: 1 1 0.50 pshuflw $1, %xmm0, %xmm2
596+
# CHECK-NEXT: 2 7 0.50 * pshuflw $1, (%rax), %xmm2
597597
# CHECK-NEXT: 1 1 0.50 pslld $1, %xmm2
598598
# CHECK-NEXT: 2 2 1.00 pslld %xmm0, %xmm2
599599
# CHECK-NEXT: 2 7 0.50 * pslld (%rax), %xmm2
600-
# CHECK-NEXT: 1 1 1.00 pslldq $1, %xmm2
600+
# CHECK-NEXT: 1 1 0.50 pslldq $1, %xmm2
601601
# CHECK-NEXT: 1 1 0.50 psllq $1, %xmm2
602602
# CHECK-NEXT: 2 2 1.00 psllq %xmm0, %xmm2
603603
# CHECK-NEXT: 2 7 0.50 * psllq (%rax), %xmm2
@@ -613,7 +613,7 @@ xorpd (%rax), %xmm2
613613
# CHECK-NEXT: 1 1 0.50 psrld $1, %xmm2
614614
# CHECK-NEXT: 2 2 1.00 psrld %xmm0, %xmm2
615615
# CHECK-NEXT: 2 7 0.50 * psrld (%rax), %xmm2
616-
# CHECK-NEXT: 1 1 1.00 psrldq $1, %xmm2
616+
# CHECK-NEXT: 1 1 0.50 psrldq $1, %xmm2
617617
# CHECK-NEXT: 1 1 0.50 psrlq $1, %xmm2
618618
# CHECK-NEXT: 2 2 1.00 psrlq %xmm0, %xmm2
619619
# CHECK-NEXT: 2 7 0.50 * psrlq (%rax), %xmm2
@@ -638,22 +638,22 @@ xorpd (%rax), %xmm2
638638
# CHECK-NEXT: 2 7 0.50 * psubusw (%rax), %xmm2
639639
# CHECK-NEXT: 1 1 0.33 psubw %xmm0, %xmm2
640640
# CHECK-NEXT: 2 7 0.50 * psubw (%rax), %xmm2
641-
# CHECK-NEXT: 1 1 1.00 punpckhbw %xmm0, %xmm2
642-
# CHECK-NEXT: 2 7 1.00 * punpckhbw (%rax), %xmm2
643-
# CHECK-NEXT: 1 1 1.00 punpckhdq %xmm0, %xmm2
644-
# CHECK-NEXT: 2 7 1.00 * punpckhdq (%rax), %xmm2
645-
# CHECK-NEXT: 1 1 1.00 punpckhqdq %xmm0, %xmm2
646-
# CHECK-NEXT: 2 7 1.00 * punpckhqdq (%rax), %xmm2
647-
# CHECK-NEXT: 1 1 1.00 punpckhwd %xmm0, %xmm2
648-
# CHECK-NEXT: 2 7 1.00 * punpckhwd (%rax), %xmm2
649-
# CHECK-NEXT: 1 1 1.00 punpcklbw %xmm0, %xmm2
650-
# CHECK-NEXT: 2 7 1.00 * punpcklbw (%rax), %xmm2
651-
# CHECK-NEXT: 1 1 1.00 punpckldq %xmm0, %xmm2
652-
# CHECK-NEXT: 2 7 1.00 * punpckldq (%rax), %xmm2
653-
# CHECK-NEXT: 1 1 1.00 punpcklqdq %xmm0, %xmm2
654-
# CHECK-NEXT: 2 7 1.00 * punpcklqdq (%rax), %xmm2
655-
# CHECK-NEXT: 1 1 1.00 punpcklwd %xmm0, %xmm2
656-
# CHECK-NEXT: 2 7 1.00 * punpcklwd (%rax), %xmm2
641+
# CHECK-NEXT: 1 1 0.50 punpckhbw %xmm0, %xmm2
642+
# CHECK-NEXT: 2 7 0.50 * punpckhbw (%rax), %xmm2
643+
# CHECK-NEXT: 1 1 0.50 punpckhdq %xmm0, %xmm2
644+
# CHECK-NEXT: 2 7 0.50 * punpckhdq (%rax), %xmm2
645+
# CHECK-NEXT: 1 1 0.50 punpckhqdq %xmm0, %xmm2
646+
# CHECK-NEXT: 2 7 0.50 * punpckhqdq (%rax), %xmm2
647+
# CHECK-NEXT: 1 1 0.50 punpckhwd %xmm0, %xmm2
648+
# CHECK-NEXT: 2 7 0.50 * punpckhwd (%rax), %xmm2
649+
# CHECK-NEXT: 1 1 0.50 punpcklbw %xmm0, %xmm2
650+
# CHECK-NEXT: 2 7 0.50 * punpcklbw (%rax), %xmm2
651+
# CHECK-NEXT: 1 1 0.50 punpckldq %xmm0, %xmm2
652+
# CHECK-NEXT: 2 7 0.50 * punpckldq (%rax), %xmm2
653+
# CHECK-NEXT: 1 1 0.50 punpcklqdq %xmm0, %xmm2
654+
# CHECK-NEXT: 2 7 0.50 * punpcklqdq (%rax), %xmm2
655+
# CHECK-NEXT: 1 1 0.50 punpcklwd %xmm0, %xmm2
656+
# CHECK-NEXT: 2 7 0.50 * punpcklwd (%rax), %xmm2
657657
# CHECK-NEXT: 1 1 0.33 pxor %xmm0, %xmm2
658658
# CHECK-NEXT: 2 7 0.50 * pxor (%rax), %xmm2
659659
# CHECK-NEXT: 1 1 1.00 shufpd $1, %xmm0, %xmm2
@@ -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: - 38.00 103.58 82.58 63.50 63.50 14.00 97.58 2.25 5.00 - -
694+
# CHECK-NEXT: - 38.00 103.58 94.58 63.50 63.50 14.00 85.58 2.25 5.00 - -
695695

696696
# CHECK: Resource pressure by instruction:
697697
# CHECK-NEXT: [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] Instructions:
@@ -876,16 +876,16 @@ xorpd (%rax), %xmm2
876876
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 0.33 - - - - por (%rax), %xmm2
877877
# CHECK-NEXT: - - - - - - - 1.00 - - - - psadbw %xmm0, %xmm2
878878
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - psadbw (%rax), %xmm2
879-
# CHECK-NEXT: - - - - - - - 1.00 - - - - pshufd $1, %xmm0, %xmm2
880-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - pshufd $1, (%rax), %xmm2
881-
# CHECK-NEXT: - - - - - - - 1.00 - - - - pshufhw $1, %xmm0, %xmm2
882-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - pshufhw $1, (%rax), %xmm2
883-
# CHECK-NEXT: - - - - - - - 1.00 - - - - pshuflw $1, %xmm0, %xmm2
884-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - pshuflw $1, (%rax), %xmm2
879+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - pshufd $1, %xmm0, %xmm2
880+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - pshufd $1, (%rax), %xmm2
881+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - pshufhw $1, %xmm0, %xmm2
882+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - pshufhw $1, (%rax), %xmm2
883+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - pshuflw $1, %xmm0, %xmm2
884+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - pshuflw $1, (%rax), %xmm2
885885
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - pslld $1, %xmm2
886886
# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - pslld %xmm0, %xmm2
887887
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - pslld (%rax), %xmm2
888-
# CHECK-NEXT: - - - - - - - 1.00 - - - - pslldq $1, %xmm2
888+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - pslldq $1, %xmm2
889889
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - psllq $1, %xmm2
890890
# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - psllq %xmm0, %xmm2
891891
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - psllq (%rax), %xmm2
@@ -901,7 +901,7 @@ xorpd (%rax), %xmm2
901901
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - psrld $1, %xmm2
902902
# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - psrld %xmm0, %xmm2
903903
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - psrld (%rax), %xmm2
904-
# CHECK-NEXT: - - - - - - - 1.00 - - - - psrldq $1, %xmm2
904+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - psrldq $1, %xmm2
905905
# CHECK-NEXT: - - 0.50 0.50 - - - - - - - - psrlq $1, %xmm2
906906
# CHECK-NEXT: - - 0.50 0.50 - - - 1.00 - - - - psrlq %xmm0, %xmm2
907907
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - psrlq (%rax), %xmm2
@@ -926,22 +926,22 @@ xorpd (%rax), %xmm2
926926
# CHECK-NEXT: - - 0.50 0.50 0.50 0.50 - - - - - - psubusw (%rax), %xmm2
927927
# CHECK-NEXT: - - 0.33 0.33 - - - 0.33 - - - - psubw %xmm0, %xmm2
928928
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 0.33 - - - - psubw (%rax), %xmm2
929-
# CHECK-NEXT: - - - - - - - 1.00 - - - - punpckhbw %xmm0, %xmm2
930-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - punpckhbw (%rax), %xmm2
931-
# CHECK-NEXT: - - - - - - - 1.00 - - - - punpckhdq %xmm0, %xmm2
932-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - punpckhdq (%rax), %xmm2
933-
# CHECK-NEXT: - - - - - - - 1.00 - - - - punpckhqdq %xmm0, %xmm2
934-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - punpckhqdq (%rax), %xmm2
935-
# CHECK-NEXT: - - - - - - - 1.00 - - - - punpckhwd %xmm0, %xmm2
936-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - punpckhwd (%rax), %xmm2
937-
# CHECK-NEXT: - - - - - - - 1.00 - - - - punpcklbw %xmm0, %xmm2
938-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - punpcklbw (%rax), %xmm2
939-
# CHECK-NEXT: - - - - - - - 1.00 - - - - punpckldq %xmm0, %xmm2
940-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - punpckldq (%rax), %xmm2
941-
# CHECK-NEXT: - - - - - - - 1.00 - - - - punpcklqdq %xmm0, %xmm2
942-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - punpcklqdq (%rax), %xmm2
943-
# CHECK-NEXT: - - - - - - - 1.00 - - - - punpcklwd %xmm0, %xmm2
944-
# CHECK-NEXT: - - - - 0.50 0.50 - 1.00 - - - - punpcklwd (%rax), %xmm2
929+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - punpckhbw %xmm0, %xmm2
930+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - punpckhbw (%rax), %xmm2
931+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - punpckhdq %xmm0, %xmm2
932+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - punpckhdq (%rax), %xmm2
933+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - punpckhqdq %xmm0, %xmm2
934+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - punpckhqdq (%rax), %xmm2
935+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - punpckhwd %xmm0, %xmm2
936+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - punpckhwd (%rax), %xmm2
937+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - punpcklbw %xmm0, %xmm2
938+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - punpcklbw (%rax), %xmm2
939+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - punpckldq %xmm0, %xmm2
940+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - punpckldq (%rax), %xmm2
941+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - punpcklqdq %xmm0, %xmm2
942+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - punpcklqdq (%rax), %xmm2
943+
# CHECK-NEXT: - - - 0.50 - - - 0.50 - - - - punpcklwd %xmm0, %xmm2
944+
# CHECK-NEXT: - - - 0.50 0.50 0.50 - 0.50 - - - - punpcklwd (%rax), %xmm2
945945
# CHECK-NEXT: - - 0.33 0.33 - - - 0.33 - - - - pxor %xmm0, %xmm2
946946
# CHECK-NEXT: - - 0.33 0.33 0.50 0.50 - 0.33 - - - - pxor (%rax), %xmm2
947947
# CHECK-NEXT: - - - - - - - 1.00 - - - - shufpd $1, %xmm0, %xmm2

0 commit comments

Comments
 (0)