[X86][SLM] Fix PSAD/MPSAD uops, latency and throughput
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 11 Sep 2021 10:11:37 +0000 (11:11 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 11 Sep 2021 10:44:09 +0000 (11:44 +0100)
Noticed while trying to improve generic reduction costs via the D103695 helper script. Confirmed with Intel AoM / Agner / InstLatX64.

llvm/lib/Target/X86/X86ScheduleSLM.td
llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s
llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s

index bd7b56a..36d0cad 100644 (file)
@@ -394,12 +394,12 @@ defm : X86WriteResPairUnsupported<WriteBlendZ>;
 defm : SLMWriteResPair<WriteVarBlend, [SLM_FPC_RSV0], 4, [4], 2, 1>;
 defm : X86WriteResPairUnsupported<WriteVarBlendY>;
 defm : X86WriteResPairUnsupported<WriteVarBlendZ>;
-defm : SLMWriteResPair<WriteMPSAD,  [SLM_FPC_RSV0],  7>;
-defm : SLMWriteResPair<WriteMPSADY, [SLM_FPC_RSV0],  7>;
+defm : SLMWriteResPair<WriteMPSAD,  [SLM_FPC_RSV0],  7, [5], 3, 1>;
+defm : X86WriteResPairUnsupported<WriteMPSADY>;
 defm : X86WriteResPairUnsupported<WriteMPSADZ>;
 defm : SLMWriteResPair<WritePSADBW,  [SLM_FPC_RSV0],  4>;
-defm : SLMWriteResPair<WritePSADBWX, [SLM_FPC_RSV0],  4>;
-defm : SLMWriteResPair<WritePSADBWY, [SLM_FPC_RSV0],  4>;
+defm : SLMWriteResPair<WritePSADBWX, [SLM_FPC_RSV0],  5, [2]>;
+defm : X86WriteResPairUnsupported<WritePSADBWY>;
 defm : X86WriteResPairUnsupported<WritePSADBWZ>;
 defm : SLMWriteResPair<WritePHMINPOS,  [SLM_FPC_RSV0],   4>;
 defm : X86WriteResPairUnsupported<WriteShuffle256>;
index dfdfa13..e00613e 100644 (file)
@@ -586,8 +586,8 @@ xorpd       (%rax), %xmm2
 # CHECK-NEXT:  1      8     2.00    *                   pmuludq        (%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50                        por    %xmm0, %xmm2
 # CHECK-NEXT:  1      4     1.00    *                   por    (%rax), %xmm2
-# CHECK-NEXT:  1      4     1.00                        psadbw %xmm0, %xmm2
-# CHECK-NEXT:  1      7     1.00    *                   psadbw (%rax), %xmm2
+# CHECK-NEXT:  1      5     2.00                        psadbw %xmm0, %xmm2
+# CHECK-NEXT:  1      8     2.00    *                   psadbw (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        pshufd $1, %xmm0, %xmm2
 # CHECK-NEXT:  1      4     1.00    *                   pshufd $1, (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        pshufhw        $1, %xmm0, %xmm2
@@ -687,7 +687,7 @@ xorpd       (%rax), %xmm2
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
-# CHECK-NEXT:  -     412.00 12.00  233.50 77.50  3.00   3.00   134.00
+# CHECK-NEXT:  -     412.00 12.00  235.50 77.50  3.00   3.00   134.00
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    Instructions:
@@ -870,8 +870,8 @@ xorpd       (%rax), %xmm2
 # CHECK-NEXT:  -      -      -     2.00    -      -      -     1.00   pmuludq  (%rax), %xmm2
 # CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -     por      %xmm0, %xmm2
 # CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00   por      (%rax), %xmm2
-# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     psadbw   %xmm0, %xmm2
-# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00   psadbw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     2.00    -      -      -      -     psadbw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00    -      -      -     1.00   psadbw   (%rax), %xmm2
 # CHECK-NEXT:  -      -      -     1.00    -      -      -      -     pshufd   $1, %xmm0, %xmm2
 # CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00   pshufd   $1, (%rax), %xmm2
 # CHECK-NEXT:  -      -      -     1.00    -      -      -      -     pshufhw  $1, %xmm0, %xmm2
index e0e19e6..6fb8d19 100644 (file)
@@ -172,8 +172,8 @@ roundss     $1, (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        insertps       $1, %xmm0, %xmm2
 # CHECK-NEXT:  1      4     1.00    *                   insertps       $1, (%rax), %xmm2
 # CHECK-NEXT:  1      3     1.00    *                   movntdqa       (%rax), %xmm2
-# CHECK-NEXT:  1      7     1.00                        mpsadbw        $1, %xmm0, %xmm2
-# CHECK-NEXT:  1      10    1.00    *                   mpsadbw        $1, (%rax), %xmm2
+# CHECK-NEXT:  3      7     5.00                        mpsadbw        $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      10    5.00    *                   mpsadbw        $1, (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        packusdw       %xmm0, %xmm2
 # CHECK-NEXT:  1      4     1.00    *                   packusdw       (%rax), %xmm2
 # CHECK-NEXT:  2      4     4.00                        pblendvb       %xmm0, %xmm0, %xmm2
@@ -264,7 +264,7 @@ roundss     $1, (%rax), %xmm2
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
-# CHECK-NEXT:  -      -      -     96.00  25.00   -      -     54.00
+# CHECK-NEXT:  -      -      -     104.00 25.00   -      -     54.00
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    Instructions:
@@ -285,8 +285,8 @@ roundss     $1, (%rax), %xmm2
 # CHECK-NEXT:  -      -      -     1.00    -      -      -      -     insertps $1, %xmm0, %xmm2
 # CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00   insertps $1, (%rax), %xmm2
 # CHECK-NEXT:  -      -      -      -      -      -      -     1.00   movntdqa (%rax), %xmm2
-# CHECK-NEXT:  -      -      -     1.00    -      -      -      -     mpsadbw  $1, %xmm0, %xmm2
-# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00   mpsadbw  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     5.00    -      -      -      -     mpsadbw  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     5.00    -      -      -     1.00   mpsadbw  $1, (%rax), %xmm2
 # CHECK-NEXT:  -      -      -     1.00    -      -      -      -     packusdw %xmm0, %xmm2
 # CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00   packusdw (%rax), %xmm2
 # CHECK-NEXT:  -      -      -     4.00    -      -      -      -     pblendvb %xmm0, %xmm0, %xmm2