Commit d7de7ac3 authored by Craig Topper's avatar Craig Topper
Browse files

[X86] Raise the latency for VectorImul from 4 to 5 in Skylake scheduler models

Based on uops.info these should have 5 cycle latency as they did on Haswell/Broadwell. I have no additional internal information from Intel.

This was also shown as a discrepancy in the spreadsheet that was sent with an early llvm-dev post about llvm-exegesis.
It also matches Agner Fog.

Differential Revision: https://reviews.llvm.org/D74357
parent 9220bbc9
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -362,9 +362,9 @@ defm : X86WriteResPairUnsupported<WriteVecLogicZ>;
defm : SKLWriteResPair<WriteVecTest,  [SKLPort0,SKLPort5], 3, [1,1], 2, 6>; // Vector integer TEST instructions.
defm : SKLWriteResPair<WriteVecTestY, [SKLPort0,SKLPort5], 3, [1,1], 2, 7>;
defm : X86WriteResPairUnsupported<WriteVecTestZ>;
defm : SKLWriteResPair<WriteVecIMul,  [SKLPort0] ,  4, [1], 1, 5>; // Vector integer multiply.
defm : SKLWriteResPair<WriteVecIMulX, [SKLPort01],  4, [1], 1, 6>;
defm : SKLWriteResPair<WriteVecIMulY, [SKLPort01],  4, [1], 1, 7>;
defm : SKLWriteResPair<WriteVecIMul,  [SKLPort0] ,  5, [1], 1, 5>; // Vector integer multiply.
defm : SKLWriteResPair<WriteVecIMulX, [SKLPort01],  5, [1], 1, 6>;
defm : SKLWriteResPair<WriteVecIMulY, [SKLPort01],  5, [1], 1, 7>;
defm : X86WriteResPairUnsupported<WriteVecIMulZ>;
defm : SKLWriteResPair<WritePMULLD,   [SKLPort01], 10, [2], 2, 6>; // Vector PMULLD.
defm : SKLWriteResPair<WritePMULLDY,  [SKLPort01], 10, [2], 2, 7>;
+4 −4
Original line number Diff line number Diff line
@@ -362,10 +362,10 @@ defm : SKXWriteResPair<WriteVecLogicZ,[SKXPort05], 1, [1], 1, 7>;
defm : SKXWriteResPair<WriteVecTest,  [SKXPort0,SKXPort5], 3, [1,1], 2, 6>; // Vector integer TEST instructions.
defm : SKXWriteResPair<WriteVecTestY, [SKXPort0,SKXPort5], 3, [1,1], 2, 7>;
defm : SKXWriteResPair<WriteVecTestZ, [SKXPort0,SKXPort5], 3, [1,1], 2, 7>;
defm : SKXWriteResPair<WriteVecIMul,  [SKXPort0],    4, [1], 1, 5>; // Vector integer multiply.
defm : SKXWriteResPair<WriteVecIMulX, [SKXPort01],  4, [1], 1, 6>;
defm : SKXWriteResPair<WriteVecIMulY, [SKXPort01],  4, [1], 1, 7>;
defm : SKXWriteResPair<WriteVecIMulZ, [SKXPort05],  4, [1], 1, 7>;
defm : SKXWriteResPair<WriteVecIMul,  [SKXPort0],   5, [1], 1, 5>; // Vector integer multiply.
defm : SKXWriteResPair<WriteVecIMulX, [SKXPort01],  5, [1], 1, 6>;
defm : SKXWriteResPair<WriteVecIMulY, [SKXPort01],  5, [1], 1, 7>;
defm : SKXWriteResPair<WriteVecIMulZ, [SKXPort05],  5, [1], 1, 7>;
defm : SKXWriteResPair<WritePMULLD,   [SKXPort01], 10, [2], 2, 6>; // Vector PMULLD.
defm : SKXWriteResPair<WritePMULLDY,  [SKXPort01], 10, [2], 2, 7>;
defm : SKXWriteResPair<WritePMULLDZ,  [SKXPort05], 10, [2], 2, 7>;
+16 −16
Original line number Diff line number Diff line
@@ -1477,10 +1477,10 @@ vzeroupper
# CHECK-NEXT:  2      6     1.00    *                   vpinsrq	$1, (%rax), %xmm1, %xmm2
# CHECK-NEXT:  2      2     2.00                        vpinsrw	$1, %eax, %xmm1, %xmm2
# CHECK-NEXT:  2      6     1.00    *                   vpinsrw	$1, (%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      4     0.50                        vpmaddubsw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      10    0.50    *                   vpmaddubsw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      4     0.50                        vpmaddwd	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      10    0.50    *                   vpmaddwd	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      5     0.50                        vpmaddubsw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      11    0.50    *                   vpmaddubsw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      5     0.50                        vpmaddwd	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      11    0.50    *                   vpmaddwd	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      1     0.50                        vpmaxsb	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      7     0.50    *                   vpmaxsb	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      1     0.50                        vpmaxsd	%xmm0, %xmm1, %xmm2
@@ -1530,20 +1530,20 @@ vzeroupper
# CHECK-NEXT:  2      6     1.00    *                   vpmovzxwd	(%rax), %xmm2
# CHECK-NEXT:  1      1     1.00                        vpmovzxwq	%xmm0, %xmm2
# CHECK-NEXT:  2      6     1.00    *                   vpmovzxwq	(%rax), %xmm2
# CHECK-NEXT:  1      4     0.50                        vpmuldq	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      10    0.50    *                   vpmuldq	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      4     0.50                        vpmulhrsw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      10    0.50    *                   vpmulhrsw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      4     0.50                        vpmulhuw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      10    0.50    *                   vpmulhuw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      4     0.50                        vpmulhw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      10    0.50    *                   vpmulhw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      5     0.50                        vpmuldq	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      11    0.50    *                   vpmuldq	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      5     0.50                        vpmulhrsw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      11    0.50    *                   vpmulhrsw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      5     0.50                        vpmulhuw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      11    0.50    *                   vpmulhuw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      5     0.50                        vpmulhw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      11    0.50    *                   vpmulhw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  2      10    1.00                        vpmulld	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  3      16    1.00    *                   vpmulld	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      4     0.50                        vpmullw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      10    0.50    *                   vpmullw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      4     0.50                        vpmuludq	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      10    0.50    *                   vpmuludq	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      5     0.50                        vpmullw	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      11    0.50    *                   vpmullw	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      5     0.50                        vpmuludq	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      11    0.50    *                   vpmuludq	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      1     0.33                        vpor	%xmm0, %xmm1, %xmm2
# CHECK-NEXT:  2      7     0.50    *                   vpor	(%rax), %xmm1, %xmm2
# CHECK-NEXT:  1      3     1.00                        vpsadbw	%xmm0, %xmm1, %xmm2
+16 −16
Original line number Diff line number Diff line
@@ -588,10 +588,10 @@ vpxor (%rax), %ymm1, %ymm2
# CHECK-NEXT:  4      10    2.00    *                   vphsubsw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  3      3     2.00                        vphsubw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  4      10    2.00    *                   vphsubw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      4     0.50                        vpmaddubsw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      11    0.50    *                   vpmaddubsw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      4     0.50                        vpmaddwd	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      11    0.50    *                   vpmaddwd	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      5     0.50                        vpmaddubsw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      12    0.50    *                   vpmaddubsw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      5     0.50                        vpmaddwd	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      12    0.50    *                   vpmaddwd	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  2      7     0.50    *                   vpmaskmovd	(%rax), %xmm0, %xmm2
# CHECK-NEXT:  2      8     0.50    *                   vpmaskmovd	(%rax), %ymm0, %ymm2
# CHECK-NEXT:  2      2     1.00    *      *            vpmaskmovd	%xmm0, %xmm1, (%rax)
@@ -649,20 +649,20 @@ vpxor (%rax), %ymm1, %ymm2
# CHECK-NEXT:  2      9     1.00    *                   vpmovzxwd	(%rax), %ymm2
# CHECK-NEXT:  1      3     1.00                        vpmovzxwq	%xmm0, %ymm2
# CHECK-NEXT:  2      10    1.00    *                   vpmovzxwq	(%rax), %ymm2
# CHECK-NEXT:  1      4     0.50                        vpmuldq	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      11    0.50    *                   vpmuldq	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      4     0.50                        vpmulhrsw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      11    0.50    *                   vpmulhrsw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      4     0.50                        vpmulhuw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      11    0.50    *                   vpmulhuw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      4     0.50                        vpmulhw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      11    0.50    *                   vpmulhw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      5     0.50                        vpmuldq	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      12    0.50    *                   vpmuldq	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      5     0.50                        vpmulhrsw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      12    0.50    *                   vpmulhrsw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      5     0.50                        vpmulhuw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      12    0.50    *                   vpmulhuw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      5     0.50                        vpmulhw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      12    0.50    *                   vpmulhw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  2      10    1.00                        vpmulld	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  3      17    1.00    *                   vpmulld	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      4     0.50                        vpmullw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      11    0.50    *                   vpmullw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      4     0.50                        vpmuludq	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      11    0.50    *                   vpmuludq	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      5     0.50                        vpmullw	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      12    0.50    *                   vpmullw	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      5     0.50                        vpmuludq	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      12    0.50    *                   vpmuludq	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      1     0.33                        vpor	%ymm0, %ymm1, %ymm2
# CHECK-NEXT:  2      8     0.50    *                   vpor	(%rax), %ymm1, %ymm2
# CHECK-NEXT:  1      3     1.00                        vpsadbw	%ymm0, %ymm1, %ymm2
+6 −6
Original line number Diff line number Diff line
@@ -209,12 +209,12 @@ pxor (%rax), %mm2
# CHECK-NEXT:  2      6     1.00    *                   pcmpgtd	(%rax), %mm2
# CHECK-NEXT:  1      1     1.00                        pcmpgtw	%mm0, %mm2
# CHECK-NEXT:  2      6     1.00    *                   pcmpgtw	(%rax), %mm2
# CHECK-NEXT:  1      4     1.00                        pmaddwd	%mm0, %mm2
# CHECK-NEXT:  2      9     1.00    *                   pmaddwd	(%rax), %mm2
# CHECK-NEXT:  1      4     1.00                        pmulhw	%mm0, %mm2
# CHECK-NEXT:  2      9     1.00    *                   pmulhw	(%rax), %mm2
# CHECK-NEXT:  1      4     1.00                        pmullw	%mm0, %mm2
# CHECK-NEXT:  2      9     1.00    *                   pmullw	(%rax), %mm2
# CHECK-NEXT:  1      5     1.00                        pmaddwd	%mm0, %mm2
# CHECK-NEXT:  2      10    1.00    *                   pmaddwd	(%rax), %mm2
# CHECK-NEXT:  1      5     1.00                        pmulhw	%mm0, %mm2
# CHECK-NEXT:  2      10    1.00    *                   pmulhw	(%rax), %mm2
# CHECK-NEXT:  1      5     1.00                        pmullw	%mm0, %mm2
# CHECK-NEXT:  2      10    1.00    *                   pmullw	(%rax), %mm2
# CHECK-NEXT:  1      1     0.50                        por	%mm0, %mm2
# CHECK-NEXT:  2      6     0.50    *                   por	(%rax), %mm2
# CHECK-NEXT:  1      1     1.00                        pslld	$1, %mm2
Loading