[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.
This commit is contained in:
Simon Pilgrim 2021-05-19 13:51:34 +01:00
parent 9a2769db80
commit b14f9a1ebd
3 changed files with 36 additions and 36 deletions

View File

@ -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]>;

View File

@ -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

View File

@ -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