[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