[X86] Atom SSE shift-by-variable take 2uops/3uops not 1uop
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Thu, 30 Sep 2021 11:28:02 +0000 (12:28 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 2 Oct 2021 11:28:41 +0000 (12:28 +0100)
Based off the most recent llvm-exegesis captures (PR36895) and what Intel AoM / Agner / InstLatX64 reports as well.

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

index 1708226..9f41b45 100644 (file)
@@ -396,8 +396,8 @@ defm : X86WriteResPairUnsupported<WriteVecLogicZ>;
 defm : X86WriteResPairUnsupported<WriteVecTest>;
 defm : X86WriteResPairUnsupported<WriteVecTestY>;
 defm : X86WriteResPairUnsupported<WriteVecTestZ>;
-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 : AtomWriteResPair<WriteVecShift,     [AtomPort0,AtomPort1], [AtomPort0,AtomPort1], 2, 3, [1,1], [2,2], 2, 3>;
+defm : AtomWriteResPair<WriteVecShiftX,    [AtomPort0,AtomPort1], [AtomPort0,AtomPort1], 2, 3, [1,1], [2,2], 2, 3>;
 defm : X86WriteResPairUnsupported<WriteVecShiftY>;
 defm : X86WriteResPairUnsupported<WriteVecShiftZ>;
 defm : AtomWriteResPair<WriteVecShiftImm,   [AtomPort0],  [AtomPort0], 1, 1>;
index bc929e1..bdefbe0 100644 (file)
@@ -218,29 +218,29 @@ pxor        (%rax), %mm2
 # CHECK-NEXT:  1      1     0.50                        por    %mm0, %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     2.00    *                   pslld  (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                        pslld  %mm0, %mm2
+# CHECK-NEXT:  3      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     2.00    *                   psllq  (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                        psllq  %mm0, %mm2
+# CHECK-NEXT:  3      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     2.00    *                   psllw  (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                        psllw  %mm0, %mm2
+# CHECK-NEXT:  3      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     2.00    *                   psrad  (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                        psrad  %mm0, %mm2
+# CHECK-NEXT:  3      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     2.00    *                   psraw  (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                        psraw  %mm0, %mm2
+# CHECK-NEXT:  3      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     2.00    *                   psrld  (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                        psrld  %mm0, %mm2
+# CHECK-NEXT:  3      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     2.00    *                   psrlq  (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                        psrlq  %mm0, %mm2
+# CHECK-NEXT:  3      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     2.00    *                   psrlw  (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                        psrlw  %mm0, %mm2
+# CHECK-NEXT:  3      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
index 36b4c75..977c94f 100644 (file)
@@ -595,31 +595,31 @@ xorpd       (%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     1.00                        pslld  $1, %xmm2
-# CHECK-NEXT:  1      2     1.00                        pslld  %xmm0, %xmm2
-# CHECK-NEXT:  1      3     2.00    *                   pslld  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                        pslld  %xmm0, %xmm2
+# CHECK-NEXT:  3      3     2.00    *                   pslld  (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        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     2.00    *                   psllq  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                        psllq  %xmm0, %xmm2
+# CHECK-NEXT:  3      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     2.00    *                   psllw  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                        psllw  %xmm0, %xmm2
+# CHECK-NEXT:  3      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     2.00    *                   psrad  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                        psrad  %xmm0, %xmm2
+# CHECK-NEXT:  3      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     2.00    *                   psraw  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                        psraw  %xmm0, %xmm2
+# CHECK-NEXT:  3      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     2.00    *                   psrld  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                        psrld  %xmm0, %xmm2
+# CHECK-NEXT:  3      3     2.00    *                   psrld  (%rax), %xmm2
 # CHECK-NEXT:  1      1     1.00                        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     2.00    *                   psrlq  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                        psrlq  %xmm0, %xmm2
+# CHECK-NEXT:  3      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     2.00    *                   psrlw  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                        psrlw  %xmm0, %xmm2
+# CHECK-NEXT:  3      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