[llvm] b14f9a1 - [X86][Atom] Fix vector integer shift by immediate resource/throughputs

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Wed May 19 06:40:04 PDT 2021


Author: Simon Pilgrim
Date: 2021-05-19T14:39:40+01:00
New Revision: b14f9a1ebd7bb5ce9190990c07304befd6eff2ca

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

LOG: [X86][Atom] Fix vector integer shift by immediate resource/throughputs

Match whats documented in the Intel AOM (and Agner/instlatx64 agree) - these are all Port0 only.

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 dc710a9f2c779..db06fff85cf1c 100644
--- a/llvm/lib/Target/X86/X86ScheduleAtom.td
+++ b/llvm/lib/Target/X86/X86ScheduleAtom.td
@@ -391,8 +391,8 @@ defm : AtomWriteResPair<WriteVecShift,     [AtomPort01], [AtomPort01], 2, 3, [2]
 defm : AtomWriteResPair<WriteVecShiftX,    [AtomPort01], [AtomPort01], 2, 3, [2], [3]>;
 defm : X86WriteResPairUnsupported<WriteVecShiftY>;
 defm : X86WriteResPairUnsupported<WriteVecShiftZ>;
-defm : AtomWriteResPair<WriteVecShiftImm,  [AtomPort01], [AtomPort01], 1, 1, [1], [1]>;
-defm : AtomWriteResPair<WriteVecShiftImmX, [AtomPort01], [AtomPort01], 1, 1, [1], [1]>;
+defm : AtomWriteResPair<WriteVecShiftImm,   [AtomPort0],  [AtomPort0], 1, 1>;
+defm : AtomWriteResPair<WriteVecShiftImmX,  [AtomPort0],  [AtomPort0], 1, 1>;
 defm : X86WriteResPairUnsupported<WriteVecShiftImmY>;
 defm : X86WriteResPairUnsupported<WriteVecShiftImmZ>;
 defm : AtomWriteResPair<WriteVecIMul,       [AtomPort0],  [AtomPort0], 4, 4, [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 28a5b6765c7c8..99100e3ae78eb 100644
--- a/llvm/test/tools/llvm-mca/X86/Atom/resources-mmx.s
+++ b/llvm/test/tools/llvm-mca/X86/Atom/resources-mmx.s
@@ -217,28 +217,28 @@ pxor        (%rax), %mm2
 # CHECK-NEXT:  1      4     1.00    *                   pmullw	(%rax), %mm2
 # CHECK-NEXT:  1      1     0.50                        por	%mm0, %mm2
 # CHECK-NEXT:  1      1     1.00    *                   por	(%rax), %mm2
-# CHECK-NEXT:  1      1     0.50                        pslld	$1, %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      1     0.50                        psllq	$1, %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      1     0.50                        psllw	$1, %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      1     0.50                        psrad	$1, %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      1     0.50                        psraw	$1, %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      1     0.50                        psrld	$1, %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      1     0.50                        psrlq	$1, %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      1     0.50                        psrlw	$1, %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      1     0.50                        psubb	%mm0, %mm2
@@ -276,7 +276,7 @@ pxor        (%rax), %mm2
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]
-# CHECK-NEXT: 95.50  41.50
+# CHECK-NEXT: 99.50  37.50
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    Instructions:
@@ -333,28 +333,28 @@ pxor        (%rax), %mm2
 # CHECK-NEXT: 1.00    -     pmullw	(%rax), %mm2
 # CHECK-NEXT: 0.50   0.50   por	%mm0, %mm2
 # CHECK-NEXT: 1.00    -     por	(%rax), %mm2
-# CHECK-NEXT: 0.50   0.50   pslld	$1, %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: 0.50   0.50   psllq	$1, %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: 0.50   0.50   psllw	$1, %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: 0.50   0.50   psrad	$1, %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: 0.50   0.50   psraw	$1, %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: 0.50   0.50   psrld	$1, %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: 0.50   0.50   psrlq	$1, %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: 0.50   0.50   psrlw	$1, %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: 0.50   0.50   psubb	%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 032b76936094c..08ce22d1cfb31 100644
--- a/llvm/test/tools/llvm-mca/X86/Atom/resources-sse2.s
+++ b/llvm/test/tools/llvm-mca/X86/Atom/resources-sse2.s
@@ -594,30 +594,30 @@ xorpd       (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00    *                   pshufhw	$1, (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        pshuflw	$1, %xmm0, %xmm2
 # CHECK-NEXT:  1      1     1.00    *                   pshuflw	$1, (%rax), %xmm2
-# CHECK-NEXT:  1      1     0.50                        pslld	$1, %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      1     0.50                        pslldq	$1, %xmm2
-# CHECK-NEXT:  1      1     0.50                        psllq	$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      1     0.50                        psllw	$1, %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      1     0.50                        psrad	$1, %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      1     0.50                        psraw	$1, %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      1     0.50                        psrld	$1, %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      1     0.50                        psrldq	$1, %xmm2
-# CHECK-NEXT:  1      1     0.50                        psrlq	$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      1     0.50                        psrlw	$1, %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      1     0.50                        psubb	%xmm0, %xmm2
@@ -681,7 +681,7 @@ xorpd       (%rax), %xmm2
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]
-# CHECK-NEXT: 829.50 638.50
+# CHECK-NEXT: 833.50 634.50
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    Instructions:
@@ -872,30 +872,30 @@ xorpd       (%rax), %xmm2
 # CHECK-NEXT: 1.00    -     pshufhw	$1, (%rax), %xmm2
 # CHECK-NEXT: 1.00    -     pshuflw	$1, %xmm0, %xmm2
 # CHECK-NEXT: 1.00    -     pshuflw	$1, (%rax), %xmm2
-# CHECK-NEXT: 0.50   0.50   pslld	$1, %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: 0.50   0.50   pslldq	$1, %xmm2
-# CHECK-NEXT: 0.50   0.50   psllq	$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: 0.50   0.50   psllw	$1, %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: 0.50   0.50   psrad	$1, %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: 0.50   0.50   psraw	$1, %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: 0.50   0.50   psrld	$1, %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: 0.50   0.50   psrldq	$1, %xmm2
-# CHECK-NEXT: 0.50   0.50   psrlq	$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: 0.50   0.50   psrlw	$1, %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: 0.50   0.50   psubb	%xmm0, %xmm2


        


More information about the llvm-commits mailing list