[llvm] 6697846 - [X86][Atom] Fix vector variable shift resource/throughputs

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Wed May 26 02:32:47 PDT 2021


Author: Simon Pilgrim
Date: 2021-05-26T10:30:59+01:00
New Revision: 66978466baefbaac3234df07851ec6d94f99914c

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

LOG: [X86][Atom] Fix vector variable shift resource/throughputs

Match whats documented in the Intel AOM - the non-immediate variants of the PSLL*/PSRA*/PSRL* shift instructions requires BOTH ports - this was being incorrectly modelled as EITHER port.

Now that we can use in-order models in llvm-mca, the atom model is a good "worst case scenario" analysis for x86.

Added: 
    

Modified: 
    llvm/lib/Target/X86/X86ScheduleAtom.td
    llvm/test/tools/llvm-mca/X86/Atom/resources-mmx.s
    llvm/test/tools/llvm-mca/X86/Atom/resources-sse2.s

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86ScheduleAtom.td b/llvm/lib/Target/X86/X86ScheduleAtom.td
index 8a1d6b29ba142..8ec278f14d819 100644
--- a/llvm/lib/Target/X86/X86ScheduleAtom.td
+++ b/llvm/lib/Target/X86/X86ScheduleAtom.td
@@ -388,8 +388,8 @@ defm : X86WriteResPairUnsupported<WriteVecLogicZ>;
 defm : X86WriteResPairUnsupported<WriteVecTest>;
 defm : X86WriteResPairUnsupported<WriteVecTestY>;
 defm : X86WriteResPairUnsupported<WriteVecTestZ>;
-defm : AtomWriteResPair<WriteVecShift,     [AtomPort01], [AtomPort01], 2, 3, [2], [3]>;
-defm : AtomWriteResPair<WriteVecShiftX,    [AtomPort01], [AtomPort01], 2, 3, [2], [3]>;
+defm : AtomWriteResPair<WriteVecShift,     [AtomPort0,AtomPort1], [AtomPort0,AtomPort1], 2, 3, [1,1], [2,2]>;
+defm : AtomWriteResPair<WriteVecShiftX,    [AtomPort0,AtomPort1], [AtomPort0,AtomPort1], 2, 3, [1,1], [2,2]>;
 defm : X86WriteResPairUnsupported<WriteVecShiftY>;
 defm : X86WriteResPairUnsupported<WriteVecShiftZ>;
 defm : AtomWriteResPair<WriteVecShiftImm,   [AtomPort0],  [AtomPort0], 1, 1>;

diff  --git a/llvm/test/tools/llvm-mca/X86/Atom/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/Atom/resources-mmx.s
index 99100e3ae78eb..1bc1ab078c76d 100644
--- a/llvm/test/tools/llvm-mca/X86/Atom/resources-mmx.s
+++ b/llvm/test/tools/llvm-mca/X86/Atom/resources-mmx.s
@@ -219,28 +219,28 @@ pxor        (%rax), %mm2
 # CHECK-NEXT:  1      1     1.00    *                   por	(%rax), %mm2
 # CHECK-NEXT:  1      1     1.00                        pslld	$1, %mm2
 # CHECK-NEXT:  1      2     1.00                        pslld	%mm0, %mm2
-# CHECK-NEXT:  1      3     1.50    *                   pslld	(%rax), %mm2
+# CHECK-NEXT:  1      3     2.00    *                   pslld	(%rax), %mm2
 # CHECK-NEXT:  1      1     1.00                        psllq	$1, %mm2
 # CHECK-NEXT:  1      2     1.00                        psllq	%mm0, %mm2
-# CHECK-NEXT:  1      3     1.50    *                   psllq	(%rax), %mm2
+# CHECK-NEXT:  1      3     2.00    *                   psllq	(%rax), %mm2
 # CHECK-NEXT:  1      1     1.00                        psllw	$1, %mm2
 # CHECK-NEXT:  1      2     1.00                        psllw	%mm0, %mm2
-# CHECK-NEXT:  1      3     1.50    *                   psllw	(%rax), %mm2
+# CHECK-NEXT:  1      3     2.00    *                   psllw	(%rax), %mm2
 # CHECK-NEXT:  1      1     1.00                        psrad	$1, %mm2
 # CHECK-NEXT:  1      2     1.00                        psrad	%mm0, %mm2
-# CHECK-NEXT:  1      3     1.50    *                   psrad	(%rax), %mm2
+# CHECK-NEXT:  1      3     2.00    *                   psrad	(%rax), %mm2
 # CHECK-NEXT:  1      1     1.00                        psraw	$1, %mm2
 # CHECK-NEXT:  1      2     1.00                        psraw	%mm0, %mm2
-# CHECK-NEXT:  1      3     1.50    *                   psraw	(%rax), %mm2
+# CHECK-NEXT:  1      3     2.00    *                   psraw	(%rax), %mm2
 # CHECK-NEXT:  1      1     1.00                        psrld	$1, %mm2
 # CHECK-NEXT:  1      2     1.00                        psrld	%mm0, %mm2
-# CHECK-NEXT:  1      3     1.50    *                   psrld	(%rax), %mm2
+# CHECK-NEXT:  1      3     2.00    *                   psrld	(%rax), %mm2
 # CHECK-NEXT:  1      1     1.00                        psrlq	$1, %mm2
 # CHECK-NEXT:  1      2     1.00                        psrlq	%mm0, %mm2
-# CHECK-NEXT:  1      3     1.50    *                   psrlq	(%rax), %mm2
+# CHECK-NEXT:  1      3     2.00    *                   psrlq	(%rax), %mm2
 # CHECK-NEXT:  1      1     1.00                        psrlw	$1, %mm2
 # CHECK-NEXT:  1      2     1.00                        psrlw	%mm0, %mm2
-# CHECK-NEXT:  1      3     1.50    *                   psrlw	(%rax), %mm2
+# CHECK-NEXT:  1      3     2.00    *                   psrlw	(%rax), %mm2
 # CHECK-NEXT:  1      1     0.50                        psubb	%mm0, %mm2
 # CHECK-NEXT:  1      1     1.00    *                   psubb	(%rax), %mm2
 # CHECK-NEXT:  1      1     0.50                        psubd	%mm0, %mm2
@@ -276,7 +276,7 @@ pxor        (%rax), %mm2
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]
-# CHECK-NEXT: 99.50  37.50
+# CHECK-NEXT: 103.50 41.50
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    Instructions:
@@ -335,28 +335,28 @@ pxor        (%rax), %mm2
 # CHECK-NEXT: 1.00    -     por	(%rax), %mm2
 # CHECK-NEXT: 1.00    -     pslld	$1, %mm2
 # CHECK-NEXT: 1.00   1.00   pslld	%mm0, %mm2
-# CHECK-NEXT: 1.50   1.50   pslld	(%rax), %mm2
+# CHECK-NEXT: 2.00   2.00   pslld	(%rax), %mm2
 # CHECK-NEXT: 1.00    -     psllq	$1, %mm2
 # CHECK-NEXT: 1.00   1.00   psllq	%mm0, %mm2
-# CHECK-NEXT: 1.50   1.50   psllq	(%rax), %mm2
+# CHECK-NEXT: 2.00   2.00   psllq	(%rax), %mm2
 # CHECK-NEXT: 1.00    -     psllw	$1, %mm2
 # CHECK-NEXT: 1.00   1.00   psllw	%mm0, %mm2
-# CHECK-NEXT: 1.50   1.50   psllw	(%rax), %mm2
+# CHECK-NEXT: 2.00   2.00   psllw	(%rax), %mm2
 # CHECK-NEXT: 1.00    -     psrad	$1, %mm2
 # CHECK-NEXT: 1.00   1.00   psrad	%mm0, %mm2
-# CHECK-NEXT: 1.50   1.50   psrad	(%rax), %mm2
+# CHECK-NEXT: 2.00   2.00   psrad	(%rax), %mm2
 # CHECK-NEXT: 1.00    -     psraw	$1, %mm2
 # CHECK-NEXT: 1.00   1.00   psraw	%mm0, %mm2
-# CHECK-NEXT: 1.50   1.50   psraw	(%rax), %mm2
+# CHECK-NEXT: 2.00   2.00   psraw	(%rax), %mm2
 # CHECK-NEXT: 1.00    -     psrld	$1, %mm2
 # CHECK-NEXT: 1.00   1.00   psrld	%mm0, %mm2
-# CHECK-NEXT: 1.50   1.50   psrld	(%rax), %mm2
+# CHECK-NEXT: 2.00   2.00   psrld	(%rax), %mm2
 # CHECK-NEXT: 1.00    -     psrlq	$1, %mm2
 # CHECK-NEXT: 1.00   1.00   psrlq	%mm0, %mm2
-# CHECK-NEXT: 1.50   1.50   psrlq	(%rax), %mm2
+# CHECK-NEXT: 2.00   2.00   psrlq	(%rax), %mm2
 # CHECK-NEXT: 1.00    -     psrlw	$1, %mm2
 # CHECK-NEXT: 1.00   1.00   psrlw	%mm0, %mm2
-# CHECK-NEXT: 1.50   1.50   psrlw	(%rax), %mm2
+# CHECK-NEXT: 2.00   2.00   psrlw	(%rax), %mm2
 # CHECK-NEXT: 0.50   0.50   psubb	%mm0, %mm2
 # CHECK-NEXT: 1.00    -     psubb	(%rax), %mm2
 # CHECK-NEXT: 0.50   0.50   psubd	%mm0, %mm2

diff  --git a/llvm/test/tools/llvm-mca/X86/Atom/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/Atom/resources-sse2.s
index 0653c6c540271..c19ca8180411a 100644
--- a/llvm/test/tools/llvm-mca/X86/Atom/resources-sse2.s
+++ b/llvm/test/tools/llvm-mca/X86/Atom/resources-sse2.s
@@ -596,30 +596,30 @@ xorpd       (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00    *                   pshuflw	$1, (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        pslld	$1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        pslld	%xmm0, %xmm2
-# CHECK-NEXT:  1      3     1.50    *                   pslld	(%rax), %xmm2
+# CHECK-NEXT:  1      3     2.00    *                   pslld	(%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50                        pslldq	$1, %xmm2
 # CHECK-NEXT:  1      1     1.00                        psllq	$1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        psllq	%xmm0, %xmm2
-# CHECK-NEXT:  1      3     1.50    *                   psllq	(%rax), %xmm2
+# CHECK-NEXT:  1      3     2.00    *                   psllq	(%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        psllw	$1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        psllw	%xmm0, %xmm2
-# CHECK-NEXT:  1      3     1.50    *                   psllw	(%rax), %xmm2
+# CHECK-NEXT:  1      3     2.00    *                   psllw	(%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        psrad	$1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        psrad	%xmm0, %xmm2
-# CHECK-NEXT:  1      3     1.50    *                   psrad	(%rax), %xmm2
+# CHECK-NEXT:  1      3     2.00    *                   psrad	(%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        psraw	$1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        psraw	%xmm0, %xmm2
-# CHECK-NEXT:  1      3     1.50    *                   psraw	(%rax), %xmm2
+# CHECK-NEXT:  1      3     2.00    *                   psraw	(%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        psrld	$1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        psrld	%xmm0, %xmm2
-# CHECK-NEXT:  1      3     1.50    *                   psrld	(%rax), %xmm2
+# CHECK-NEXT:  1      3     2.00    *                   psrld	(%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50                        psrldq	$1, %xmm2
 # CHECK-NEXT:  1      1     1.00                        psrlq	$1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        psrlq	%xmm0, %xmm2
-# CHECK-NEXT:  1      3     1.50    *                   psrlq	(%rax), %xmm2
+# CHECK-NEXT:  1      3     2.00    *                   psrlq	(%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        psrlw	$1, %xmm2
 # CHECK-NEXT:  1      2     1.00                        psrlw	%xmm0, %xmm2
-# CHECK-NEXT:  1      3     1.50    *                   psrlw	(%rax), %xmm2
+# CHECK-NEXT:  1      3     2.00    *                   psrlw	(%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50                        psubb	%xmm0, %xmm2
 # CHECK-NEXT:  1      1     1.00    *                   psubb	(%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50                        psubd	%xmm0, %xmm2
@@ -681,7 +681,7 @@ xorpd       (%rax), %xmm2
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]
-# CHECK-NEXT: 814.50 676.50
+# CHECK-NEXT: 818.50 680.50
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    Instructions:
@@ -874,30 +874,30 @@ xorpd       (%rax), %xmm2
 # CHECK-NEXT: 1.00    -     pshuflw	$1, (%rax), %xmm2
 # CHECK-NEXT: 1.00    -     pslld	$1, %xmm2
 # CHECK-NEXT: 1.00   1.00   pslld	%xmm0, %xmm2
-# CHECK-NEXT: 1.50   1.50   pslld	(%rax), %xmm2
+# CHECK-NEXT: 2.00   2.00   pslld	(%rax), %xmm2
 # CHECK-NEXT: 0.50   0.50   pslldq	$1, %xmm2
 # CHECK-NEXT: 1.00    -     psllq	$1, %xmm2
 # CHECK-NEXT: 1.00   1.00   psllq	%xmm0, %xmm2
-# CHECK-NEXT: 1.50   1.50   psllq	(%rax), %xmm2
+# CHECK-NEXT: 2.00   2.00   psllq	(%rax), %xmm2
 # CHECK-NEXT: 1.00    -     psllw	$1, %xmm2
 # CHECK-NEXT: 1.00   1.00   psllw	%xmm0, %xmm2
-# CHECK-NEXT: 1.50   1.50   psllw	(%rax), %xmm2
+# CHECK-NEXT: 2.00   2.00   psllw	(%rax), %xmm2
 # CHECK-NEXT: 1.00    -     psrad	$1, %xmm2
 # CHECK-NEXT: 1.00   1.00   psrad	%xmm0, %xmm2
-# CHECK-NEXT: 1.50   1.50   psrad	(%rax), %xmm2
+# CHECK-NEXT: 2.00   2.00   psrad	(%rax), %xmm2
 # CHECK-NEXT: 1.00    -     psraw	$1, %xmm2
 # CHECK-NEXT: 1.00   1.00   psraw	%xmm0, %xmm2
-# CHECK-NEXT: 1.50   1.50   psraw	(%rax), %xmm2
+# CHECK-NEXT: 2.00   2.00   psraw	(%rax), %xmm2
 # CHECK-NEXT: 1.00    -     psrld	$1, %xmm2
 # CHECK-NEXT: 1.00   1.00   psrld	%xmm0, %xmm2
-# CHECK-NEXT: 1.50   1.50   psrld	(%rax), %xmm2
+# CHECK-NEXT: 2.00   2.00   psrld	(%rax), %xmm2
 # CHECK-NEXT: 0.50   0.50   psrldq	$1, %xmm2
 # CHECK-NEXT: 1.00    -     psrlq	$1, %xmm2
 # CHECK-NEXT: 1.00   1.00   psrlq	%xmm0, %xmm2
-# CHECK-NEXT: 1.50   1.50   psrlq	(%rax), %xmm2
+# CHECK-NEXT: 2.00   2.00   psrlq	(%rax), %xmm2
 # CHECK-NEXT: 1.00    -     psrlw	$1, %xmm2
 # CHECK-NEXT: 1.00   1.00   psrlw	%xmm0, %xmm2
-# CHECK-NEXT: 1.50   1.50   psrlw	(%rax), %xmm2
+# CHECK-NEXT: 2.00   2.00   psrlw	(%rax), %xmm2
 # CHECK-NEXT: 0.50   0.50   psubb	%xmm0, %xmm2
 # CHECK-NEXT: 1.00    -     psubb	(%rax), %xmm2
 # CHECK-NEXT: 0.50   0.50   psubd	%xmm0, %xmm2


        


More information about the llvm-commits mailing list