[llvm] 57250f2 - [X86][Atom] Fix vector PSHUFB resource/throughputs

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Tue May 25 09:32:07 PDT 2021


Author: Simon Pilgrim
Date: 2021-05-25T17:31:45+01:00
New Revision: 57250f2f3c6d03e27d8649f6f7d6bdbabf8936cc

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

LOG: [X86][Atom] Fix vector PSHUFB resource/throughputs

Match whats documented in the Intel AOM - the XMM variant of PSHUFB 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-ssse3.s

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86ScheduleAtom.td b/llvm/lib/Target/X86/X86ScheduleAtom.td
index c6768143f0098..8a1d6b29ba142 100644
--- a/llvm/lib/Target/X86/X86ScheduleAtom.td
+++ b/llvm/lib/Target/X86/X86ScheduleAtom.td
@@ -416,7 +416,7 @@ defm : AtomWriteResPair<WriteShuffleX,      [AtomPort0],  [AtomPort0], 1, 1>;
 defm : X86WriteResPairUnsupported<WriteShuffleY>;
 defm : X86WriteResPairUnsupported<WriteShuffleZ>;
 defm : AtomWriteResPair<WriteVarShuffle,    [AtomPort0],  [AtomPort0], 1, 1>;
-defm : AtomWriteResPair<WriteVarShuffleX,  [AtomPort01], [AtomPort01], 4, 5, [4], [5]>;
+defm : AtomWriteResPair<WriteVarShuffleX,  [AtomPort0,AtomPort1], [AtomPort0,AtomPort1], 4, 5, [3,3], [4,4]>;
 defm : X86WriteResPairUnsupported<WriteVarShuffleY>;
 defm : X86WriteResPairUnsupported<WriteVarShuffleZ>;
 defm : X86WriteResPairUnsupported<WriteBlend>;

diff  --git a/llvm/test/tools/llvm-mca/X86/Atom/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/Atom/resources-ssse3.s
index 05b41a9435bcc..dc2e41a8a9745 100644
--- a/llvm/test/tools/llvm-mca/X86/Atom/resources-ssse3.s
+++ b/llvm/test/tools/llvm-mca/X86/Atom/resources-ssse3.s
@@ -156,8 +156,8 @@ psignw      (%rax), %xmm2
 # CHECK-NEXT:  1      5     2.00    *                   pmulhrsw	(%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        pshufb	%mm0, %mm2
 # CHECK-NEXT:  1      1     1.00    *                   pshufb	(%rax), %mm2
-# CHECK-NEXT:  1      4     2.00                        pshufb	%xmm0, %xmm2
-# CHECK-NEXT:  1      5     2.50    *                   pshufb	(%rax), %xmm2
+# CHECK-NEXT:  1      4     3.00                        pshufb	%xmm0, %xmm2
+# CHECK-NEXT:  1      5     4.00    *                   pshufb	(%rax), %xmm2
 # CHECK-NEXT:  1      1     0.50                        psignb	%mm0, %mm2
 # CHECK-NEXT:  1      1     1.00    *                   psignb	(%rax), %mm2
 # CHECK-NEXT:  1      1     0.50                        psignb	%xmm0, %xmm2
@@ -177,7 +177,7 @@ psignw      (%rax), %xmm2
 
 # CHECK:      Resource pressure per iteration:
 # CHECK-NEXT: [0]    [1]
-# CHECK-NEXT: 106.50 76.50
+# CHECK-NEXT: 109.00 79.00
 
 # CHECK:      Resource pressure by instruction:
 # CHECK-NEXT: [0]    [1]    Instructions:
@@ -231,8 +231,8 @@ psignw      (%rax), %xmm2
 # CHECK-NEXT: 2.00    -     pmulhrsw	(%rax), %xmm2
 # CHECK-NEXT: 1.00    -     pshufb	%mm0, %mm2
 # CHECK-NEXT: 1.00    -     pshufb	(%rax), %mm2
-# CHECK-NEXT: 2.00   2.00   pshufb	%xmm0, %xmm2
-# CHECK-NEXT: 2.50   2.50   pshufb	(%rax), %xmm2
+# CHECK-NEXT: 3.00   3.00   pshufb	%xmm0, %xmm2
+# CHECK-NEXT: 4.00   4.00   pshufb	(%rax), %xmm2
 # CHECK-NEXT: 0.50   0.50   psignb	%mm0, %mm2
 # CHECK-NEXT: 1.00    -     psignb	(%rax), %mm2
 # CHECK-NEXT: 0.50   0.50   psignb	%xmm0, %xmm2


        


More information about the llvm-commits mailing list