[llvm] f25a2a3 - [X86] Fix missing load latencies (PR36894)

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 4 10:18:53 PST 2020


Author: Simon Pilgrim
Date: 2020-02-04T18:18:29Z
New Revision: f25a2a3de5b504c54bbf273bfcbbda6345646890

URL: https://github.com/llvm/llvm-project/commit/f25a2a3de5b504c54bbf273bfcbbda6345646890
DIFF: https://github.com/llvm/llvm-project/commit/f25a2a3de5b504c54bbf273bfcbbda6345646890.diff

LOG: [X86] Fix missing load latencies (PR36894)

We weren't account for load latencies in the SSE42/AES/CLMUL schedule classes

Added: 
    

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

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86ScheduleSLM.td b/llvm/lib/Target/X86/X86ScheduleSLM.td
index eca794c48d83..bedbbbc5f978 100644
--- a/llvm/lib/Target/X86/X86ScheduleSLM.td
+++ b/llvm/lib/Target/X86/X86ScheduleSLM.td
@@ -391,44 +391,15 @@ defm : X86WriteResPairUnsupported<WritePHAddZ>;
 
 // String instructions.
 // Packed Compare Implicit Length Strings, Return Mask
-def : WriteRes<WritePCmpIStrM, [SLM_FPC_RSV0]> {
-  let Latency = 13;
-  let ResourceCycles = [13];
-}
-def : WriteRes<WritePCmpIStrMLd, [SLM_FPC_RSV0, SLM_MEC_RSV]> {
-  let Latency = 13;
-  let ResourceCycles = [13, 1];
-}
+defm : SLMWriteResPair<WritePCmpIStrM,  [SLM_FPC_RSV0], 13, [13]>;
 
 // Packed Compare Explicit Length Strings, Return Mask
-def : WriteRes<WritePCmpEStrM, [SLM_FPC_RSV0]> {
-  let Latency = 17;
-  let ResourceCycles = [17];
-}
-def : WriteRes<WritePCmpEStrMLd, [SLM_FPC_RSV0, SLM_MEC_RSV]> {
-  let Latency = 17;
-  let ResourceCycles = [17, 1];
-}
-
+defm : SLMWriteResPair<WritePCmpEStrM,  [SLM_FPC_RSV0], 17, [17]>;
 // Packed Compare Implicit Length Strings, Return Index
-def : WriteRes<WritePCmpIStrI, [SLM_FPC_RSV0]> {
-  let Latency = 17;
-  let ResourceCycles = [17];
-}
-def : WriteRes<WritePCmpIStrILd, [SLM_FPC_RSV0, SLM_MEC_RSV]> {
-  let Latency = 17;
-  let ResourceCycles = [17, 1];
-}
+defm : SLMWriteResPair<WritePCmpIStrI,  [SLM_FPC_RSV0], 17, [17]>;
 
 // Packed Compare Explicit Length Strings, Return Index
-def : WriteRes<WritePCmpEStrI, [SLM_FPC_RSV0]> {
-  let Latency = 21;
-  let ResourceCycles = [21];
-}
-def : WriteRes<WritePCmpEStrILd, [SLM_FPC_RSV0, SLM_MEC_RSV]> {
-  let Latency = 21;
-  let ResourceCycles = [21, 1];
-}
+defm : SLMWriteResPair<WritePCmpEStrI,  [SLM_FPC_RSV0], 21, [21]>;
 
 // MOVMSK Instructions.
 def : WriteRes<WriteFMOVMSK,    [SLM_FPC_RSV1]> { let Latency = 4; }
@@ -437,42 +408,12 @@ def : WriteRes<WriteVecMOVMSKY, [SLM_FPC_RSV1]> { let Latency = 4; }
 def : WriteRes<WriteMMXMOVMSK,  [SLM_FPC_RSV1]> { let Latency = 4; }
 
 // AES Instructions.
-def : WriteRes<WriteAESDecEnc, [SLM_FPC_RSV0]> {
-  let Latency = 8;
-  let ResourceCycles = [5];
-}
-def : WriteRes<WriteAESDecEncLd, [SLM_FPC_RSV0, SLM_MEC_RSV]> {
-  let Latency = 8;
-  let ResourceCycles = [5, 1];
-}
-
-def : WriteRes<WriteAESIMC, [SLM_FPC_RSV0]> {
-  let Latency = 8;
-  let ResourceCycles = [5];
-}
-def : WriteRes<WriteAESIMCLd, [SLM_FPC_RSV0, SLM_MEC_RSV]> {
-  let Latency = 8;
-  let ResourceCycles = [5, 1];
-}
-
-def : WriteRes<WriteAESKeyGen, [SLM_FPC_RSV0]> {
-  let Latency = 8;
-  let ResourceCycles = [5];
-}
-def : WriteRes<WriteAESKeyGenLd, [SLM_FPC_RSV0, SLM_MEC_RSV]> {
-  let Latency = 8;
-  let ResourceCycles = [5, 1];
-}
+defm : SLMWriteResPair<WriteAESDecEnc, [SLM_FPC_RSV0], 8, [5]>;
+defm : SLMWriteResPair<WriteAESIMC,    [SLM_FPC_RSV0], 8, [5]>;
+defm : SLMWriteResPair<WriteAESKeyGen, [SLM_FPC_RSV0], 8, [5]>;
 
 // Carry-less multiplication instructions.
-def : WriteRes<WriteCLMul, [SLM_FPC_RSV0]> {
-  let Latency = 10;
-  let ResourceCycles = [10];
-}
-def : WriteRes<WriteCLMulLd, [SLM_FPC_RSV0, SLM_MEC_RSV]> {
-  let Latency = 10;
-  let ResourceCycles = [10, 1];
-}
+defm : SLMWriteResPair<WriteCLMul, [SLM_FPC_RSV0], 10, [10]>;
 
 def : WriteRes<WriteSystem,     [SLM_FPC_RSV0]> { let Latency = 100; }
 def : WriteRes<WriteMicrocoded, [SLM_FPC_RSV0]> { let Latency = 100; }

diff  --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-aes.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-aes.s
index ae60a08fa7ec..144b94259047 100644
--- a/llvm/test/tools/llvm-mca/X86/SLM/resources-aes.s
+++ b/llvm/test/tools/llvm-mca/X86/SLM/resources-aes.s
@@ -29,17 +29,17 @@ aeskeygenassist $22, (%rax), %xmm2
 
 # CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
 # CHECK-NEXT:  1      8     5.00                        aesdec	%xmm0, %xmm2
-# CHECK-NEXT:  1      8     5.00    *                   aesdec	(%rax), %xmm2
+# CHECK-NEXT:  1      11    5.00    *                   aesdec	(%rax), %xmm2
 # CHECK-NEXT:  1      8     5.00                        aesdeclast	%xmm0, %xmm2
-# CHECK-NEXT:  1      8     5.00    *                   aesdeclast	(%rax), %xmm2
+# CHECK-NEXT:  1      11    5.00    *                   aesdeclast	(%rax), %xmm2
 # CHECK-NEXT:  1      8     5.00                        aesenc	%xmm0, %xmm2
-# CHECK-NEXT:  1      8     5.00    *                   aesenc	(%rax), %xmm2
+# CHECK-NEXT:  1      11    5.00    *                   aesenc	(%rax), %xmm2
 # CHECK-NEXT:  1      8     5.00                        aesenclast	%xmm0, %xmm2
-# CHECK-NEXT:  1      8     5.00    *                   aesenclast	(%rax), %xmm2
+# CHECK-NEXT:  1      11    5.00    *                   aesenclast	(%rax), %xmm2
 # CHECK-NEXT:  1      8     5.00                        aesimc	%xmm0, %xmm2
-# CHECK-NEXT:  1      8     5.00    *                   aesimc	(%rax), %xmm2
+# CHECK-NEXT:  1      11    5.00    *                   aesimc	(%rax), %xmm2
 # CHECK-NEXT:  1      8     5.00                        aeskeygenassist	$22, %xmm0, %xmm2
-# CHECK-NEXT:  1      8     5.00    *                   aeskeygenassist	$22, (%rax), %xmm2
+# CHECK-NEXT:  1      11    5.00    *                   aeskeygenassist	$22, (%rax), %xmm2
 
 # CHECK:      Resources:
 # CHECK-NEXT: [0]   - SLMDivider

diff  --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-pclmul.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-pclmul.s
index 92373db39134..37327cfa1eb6 100644
--- a/llvm/test/tools/llvm-mca/X86/SLM/resources-pclmul.s
+++ b/llvm/test/tools/llvm-mca/X86/SLM/resources-pclmul.s
@@ -14,7 +14,7 @@ pclmulqdq     $11, (%rax), %xmm2
 
 # CHECK:      [1]    [2]    [3]    [4]    [5]    [6]    Instructions:
 # CHECK-NEXT:  1      10    10.00                       pclmulqdq	$11, %xmm0, %xmm2
-# CHECK-NEXT:  1      10    10.00   *                   pclmulqdq	$11, (%rax), %xmm2
+# CHECK-NEXT:  1      13    10.00   *                   pclmulqdq	$11, (%rax), %xmm2
 
 # CHECK:      Resources:
 # CHECK-NEXT: [0]   - SLMDivider

diff  --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse42.s
index 6354ad47dc41..39a6e9520972 100644
--- a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse42.s
+++ b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse42.s
@@ -51,13 +51,13 @@ pcmpgtq     (%rax), %xmm2
 # 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      21    21.00   *                   pcmpestri	$1, (%rax), %xmm2
+# CHECK-NEXT:  1      24    21.00   *                   pcmpestri	$1, (%rax), %xmm2
 # CHECK-NEXT:  1      17    17.00                       pcmpestrm	$1, %xmm0, %xmm2
-# CHECK-NEXT:  1      17    17.00   *                   pcmpestrm	$1, (%rax), %xmm2
+# CHECK-NEXT:  1      20    17.00   *                   pcmpestrm	$1, (%rax), %xmm2
 # CHECK-NEXT:  1      17    17.00                       pcmpistri	$1, %xmm0, %xmm2
-# CHECK-NEXT:  1      17    17.00   *                   pcmpistri	$1, (%rax), %xmm2
+# CHECK-NEXT:  1      20    17.00   *                   pcmpistri	$1, (%rax), %xmm2
 # CHECK-NEXT:  1      13    13.00                       pcmpistrm	$1, %xmm0, %xmm2
-# CHECK-NEXT:  1      13    13.00   *                   pcmpistrm	$1, (%rax), %xmm2
+# CHECK-NEXT:  1      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
 


        


More information about the llvm-commits mailing list