[X86][SLM] Fix uops for PCMPISTR/PCMPISTR instructions
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 16 Oct 2021 20:41:21 +0000 (21:41 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sun, 17 Oct 2021 17:13:14 +0000 (18:13 +0100)
Based off a recent llvm-exegesis capture and what Intel AoM / Agner reports as well.

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

index ac9c63b..174dffc 100644 (file)
@@ -430,16 +430,16 @@ defm : X86WriteResPairUnsupported<WritePHAddZ>;
 
 // String instructions.
 // Packed Compare Implicit Length Strings, Return Mask
-defm : SLMWriteResPair<WritePCmpIStrM,  [SLM_FPC_RSV0], 13, [13]>;
+defm : SLMWriteResPair<WritePCmpIStrM,  [SLM_FPC_RSV0], 13, [13], 5, 1>;
 
 // Packed Compare Explicit Length Strings, Return Mask
-defm : SLMWriteResPair<WritePCmpEStrM,  [SLM_FPC_RSV0], 17, [17]>;
+defm : SLMWriteResPair<WritePCmpEStrM,  [SLM_FPC_RSV0], 17, [17], 8, 1>;
 
 // Packed Compare Implicit Length Strings, Return Index
-defm : SLMWriteResPair<WritePCmpIStrI,  [SLM_FPC_RSV0], 17, [17]>;
+defm : SLMWriteResPair<WritePCmpIStrI,  [SLM_FPC_RSV0], 17, [17], 6, 1>;
 
 // Packed Compare Explicit Length Strings, Return Index
-defm : SLMWriteResPair<WritePCmpEStrI,  [SLM_FPC_RSV0], 21, [21]>;
+defm : SLMWriteResPair<WritePCmpEStrI,  [SLM_FPC_RSV0], 21, [21], 9, 1>;
 
 // MOVMSK Instructions.
 def : WriteRes<WriteFMOVMSK,    [SLM_FPC_RSV1]> { let Latency = 4; }
index 39a6e95..5f487f6 100644 (file)
@@ -50,14 +50,14 @@ pcmpgtq     (%rax), %xmm2
 # CHECK-NEXT:  1      6     1.00    *                   crc32b (%rax), %rcx
 # CHECK-NEXT:  1      3     1.00                        crc32q %rax, %rcx
 # CHECK-NEXT:  1      6     1.00    *                   crc32q (%rax), %rcx
-# CHECK-NEXT:  1      21    21.00                       pcmpestri      $1, %xmm0, %xmm2
-# CHECK-NEXT:  1      24    21.00   *                   pcmpestri      $1, (%rax), %xmm2
-# CHECK-NEXT:  1      17    17.00                       pcmpestrm      $1, %xmm0, %xmm2
-# CHECK-NEXT:  1      20    17.00   *                   pcmpestrm      $1, (%rax), %xmm2
-# CHECK-NEXT:  1      17    17.00                       pcmpistri      $1, %xmm0, %xmm2
-# CHECK-NEXT:  1      20    17.00   *                   pcmpistri      $1, (%rax), %xmm2
-# CHECK-NEXT:  1      13    13.00                       pcmpistrm      $1, %xmm0, %xmm2
-# CHECK-NEXT:  1      16    13.00   *                   pcmpistrm      $1, (%rax), %xmm2
+# CHECK-NEXT:  9      21    21.00                       pcmpestri      $1, %xmm0, %xmm2
+# CHECK-NEXT:  10     24    21.00   *                   pcmpestri      $1, (%rax), %xmm2
+# CHECK-NEXT:  8      17    17.00                       pcmpestrm      $1, %xmm0, %xmm2
+# CHECK-NEXT:  9      20    17.00   *                   pcmpestrm      $1, (%rax), %xmm2
+# CHECK-NEXT:  6      17    17.00                       pcmpistri      $1, %xmm0, %xmm2
+# CHECK-NEXT:  7      20    17.00   *                   pcmpistri      $1, (%rax), %xmm2
+# CHECK-NEXT:  5      13    13.00                       pcmpistrm      $1, %xmm0, %xmm2
+# CHECK-NEXT:  6      16    13.00   *                   pcmpistrm      $1, (%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50                        pcmpgtq        %xmm0, %xmm2
 # CHECK-NEXT:  1      4     1.00    *                   pcmpgtq        (%rax), %xmm2