[llvm] r369388 - [X86][BtVer2] Fix latency and throughput of atomic INC/DEC/NEG/NOT.

Andrea Di Biagio via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 20 07:31:27 PDT 2019


Author: adibiagio
Date: Tue Aug 20 07:31:27 2019
New Revision: 369388

URL: http://llvm.org/viewvc/llvm-project?rev=369388&view=rev
Log:
[X86][BtVer2] Fix latency and throughput of atomic INC/DEC/NEG/NOT.

Latency and throughput of LOCK INC/DEC/NEG/NOT is always 19cy.
Number of uOPs is still 1.

Differential Revision: https://reviews.llvm.org/D66469

Modified:
    llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td
    llvm/trunk/test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s

Modified: llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td?rev=369388&r1=369387&r2=369388&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td (original)
+++ llvm/trunk/lib/Target/X86/X86ScheduleBtVer2.td Tue Aug 20 07:31:27 2019
@@ -371,6 +371,20 @@ def : InstRW<[JWriteCMPXCHGVariant], (in
                                              CMPXCHG8B, CMPXCHG16B,
                                              LCMPXCHG8B, LCMPXCHG16B)>;
 
+def JWriteLOCK_ALURMW : SchedWriteRes<[JALU01, JLAGU, JSAGU]> {
+  let Latency = 19;
+  let ResourceCycles = [1,19,19];
+  let NumMicroOps = 1;
+}
+
+def JWriteLOCK_ALURMWVariant :  SchedWriteVariant<[
+  SchedVar<MCSchedPredicate<CheckLockPrefix>, [JWriteLOCK_ALURMW]>,
+  SchedVar<NoSchedPred,                       [WriteALURMW]>
+]>;
+def : InstRW<[JWriteLOCK_ALURMWVariant], (instrs INC8m, INC16m, INC32m, INC64m,
+                                                 DEC8m, DEC16m, DEC32m, DEC64m,
+                                                 NOT8m, NOT16m, NOT32m, NOT64m,
+                                                 NEG8m, NEG16m, NEG32m, NEG64m)>;
 
 ////////////////////////////////////////////////////////////////////////////////
 // Floating point. This covers both scalar and vector operations.

Modified: llvm/trunk/test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s?rev=369388&r1=369387&r2=369388&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s (original)
+++ llvm/trunk/test/tools/llvm-mca/X86/BtVer2/resources-x86_64.s Tue Aug 20 07:31:27 2019
@@ -1307,16 +1307,16 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  1      100   0.50                  U     cpuid
 # CHECK-NEXT:  1      1     0.50                        decb	%dil
 # CHECK-NEXT:  1      5     1.00    *      *            decb	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		decb	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		decb	(%rax)
 # CHECK-NEXT:  1      1     0.50                        decw	%di
 # CHECK-NEXT:  1      5     1.00    *      *            decw	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		decw	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		decw	(%rax)
 # CHECK-NEXT:  1      1     0.50                        decl	%edi
 # CHECK-NEXT:  1      5     1.00    *      *            decl	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		decl	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		decl	(%rax)
 # CHECK-NEXT:  1      1     0.50                        decq	%rdi
 # CHECK-NEXT:  1      5     1.00    *      *            decq	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		decq	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		decq	(%rax)
 # CHECK-NEXT:  1      12    12.00                 U     divb	%dil
 # CHECK-NEXT:  1      15    12.00   *             U     divb	(%rax)
 # CHECK-NEXT:  2      17    17.00                 U     divw	%si
@@ -1368,16 +1368,16 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  1      100   0.50                  U     inl	%dx, %eax
 # CHECK-NEXT:  1      1     0.50                        incb	%dil
 # CHECK-NEXT:  1      5     1.00    *      *            incb	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		incb	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		incb	(%rax)
 # CHECK-NEXT:  1      1     0.50                        incw	%di
 # CHECK-NEXT:  1      5     1.00    *      *            incw	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		incw	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		incw	(%rax)
 # CHECK-NEXT:  1      1     0.50                        incl	%edi
 # CHECK-NEXT:  1      5     1.00    *      *            incl	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		incl	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		incl	(%rax)
 # CHECK-NEXT:  1      1     0.50                        incq	%rdi
 # CHECK-NEXT:  1      5     1.00    *      *            incq	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		incq	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		incq	(%rax)
 # CHECK-NEXT:  1      100   0.50                  U     insb	%dx, %es:(%rdi)
 # CHECK-NEXT:  1      100   0.50                  U     insw	%dx, %es:(%rdi)
 # CHECK-NEXT:  1      100   0.50                  U     insl	%dx, %es:(%rdi)
@@ -1426,16 +1426,16 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  2      9     4.00    *                   mulq	(%rax)
 # CHECK-NEXT:  1      1     0.50                        negb	%dil
 # CHECK-NEXT:  1      5     1.00    *      *            negb	(%r8)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		negb	(%r8)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		negb	(%r8)
 # CHECK-NEXT:  1      1     0.50                        negw	%si
 # CHECK-NEXT:  1      5     1.00    *      *            negw	(%r9)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		negw	(%r9)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		negw	(%r9)
 # CHECK-NEXT:  1      1     0.50                        negl	%edx
 # CHECK-NEXT:  1      5     1.00    *      *            negl	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		negl	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		negl	(%rax)
 # CHECK-NEXT:  1      1     0.50                        negq	%rcx
 # CHECK-NEXT:  1      5     1.00    *      *            negq	(%r10)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		negq	(%r10)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		negq	(%r10)
 # CHECK-NEXT:  1      1     0.50                        nop
 # CHECK-NEXT:  1      1     0.50                        nopw	%di
 # CHECK-NEXT:  1      1     0.50                        nopw	(%rcx)
@@ -1445,16 +1445,16 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  1      1     0.50                        nopq	(%r9)
 # CHECK-NEXT:  1      1     0.50                        notb	%dil
 # CHECK-NEXT:  1      5     1.00    *      *            notb	(%r8)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		notb	(%r8)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		notb	(%r8)
 # CHECK-NEXT:  1      1     0.50                        notw	%si
 # CHECK-NEXT:  1      5     1.00    *      *            notw	(%r9)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		notw	(%r9)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		notw	(%r9)
 # CHECK-NEXT:  1      1     0.50                        notl	%edx
 # CHECK-NEXT:  1      5     1.00    *      *            notl	(%rax)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		notl	(%rax)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		notl	(%rax)
 # CHECK-NEXT:  1      1     0.50                        notq	%rcx
 # CHECK-NEXT:  1      5     1.00    *      *            notq	(%r10)
-# CHECK-NEXT:  1      5     1.00    *      *            lock		notq	(%r10)
+# CHECK-NEXT:  1      19    19.00   *      *            lock		notq	(%r10)
 # CHECK-NEXT:  1      1     0.50                        orb	$7, %al
 # CHECK-NEXT:  1      1     0.50                        orb	$7, %dil
 # CHECK-NEXT:  1      5     1.00    *      *            orb	$7, (%rax)
@@ -1959,7 +1959,7 @@ xorq (%rax), %rdi
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]   [13]
-# CHECK-NEXT: 702.50 752.50 380.00  -      -      -      -     524.00 64.00  425.00  -      -      -      -
+# CHECK-NEXT: 702.50 752.50 380.00  -      -      -      -     812.00 64.00  713.00  -      -      -      -
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]   [12]   [13]   Instructions:
@@ -2240,16 +2240,16 @@ xorq (%rax), %rdi
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     cpuid
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     decb	%dil
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     decb	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		decb	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		decb	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     decw	%di
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     decw	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		decw	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		decw	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     decl	%edi
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     decl	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		decl	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		decl	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     decq	%rdi
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     decq	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		decq	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		decq	(%rax)
 # CHECK-NEXT:  -     1.00   12.00   -      -      -      -      -      -      -      -      -      -      -     divb	%dil
 # CHECK-NEXT:  -     1.00   12.00   -      -      -      -     1.00    -      -      -      -      -      -     divb	(%rax)
 # CHECK-NEXT:  -     1.00   17.00   -      -      -      -      -      -      -      -      -      -      -     divw	%si
@@ -2301,16 +2301,16 @@ xorq (%rax), %rdi
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     inl	%dx, %eax
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     incb	%dil
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     incb	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		incb	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		incb	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     incw	%di
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     incw	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		incw	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		incw	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     incl	%edi
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     incl	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		incl	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		incl	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     incq	%rdi
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     incq	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		incq	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		incq	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     insb	%dx, %es:(%rdi)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     insw	%dx, %es:(%rdi)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     insl	%dx, %es:(%rdi)
@@ -2359,16 +2359,16 @@ xorq (%rax), %rdi
 # CHECK-NEXT:  -     1.00    -      -      -      -      -     1.00   4.00    -      -      -      -      -     mulq	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     negb	%dil
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     negb	(%r8)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		negb	(%r8)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		negb	(%r8)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     negw	%si
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     negw	(%r9)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		negw	(%r9)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		negw	(%r9)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     negl	%edx
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     negl	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		negl	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		negl	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     negq	%rcx
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     negq	(%r10)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		negq	(%r10)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		negq	(%r10)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     nop
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     nopw	%di
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     nopw	(%rcx)
@@ -2378,16 +2378,16 @@ xorq (%rax), %rdi
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     nopq	(%r9)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     notb	%dil
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     notb	(%r8)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		notb	(%r8)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		notb	(%r8)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     notw	%si
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     notw	(%r9)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		notw	(%r9)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		notw	(%r9)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     notl	%edx
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     notl	(%rax)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		notl	(%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		notl	(%rax)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     notq	%rcx
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     notq	(%r10)
-# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     lock		notq	(%r10)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     19.00   -     19.00   -      -      -      -     lock		notq	(%r10)
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     orb	$7, %al
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -      -      -     orb	$7, %dil
 # CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -      -      -     orb	$7, (%rax)




More information about the llvm-commits mailing list