[llvm-mca][X86] Add SSE resource tests to all models
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 21 Apr 2018 14:16:57 +0000 (14:16 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 21 Apr 2018 14:16:57 +0000 (14:16 +0000)
llvm-svn: 330506

35 files changed:
llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse1.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse2.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse41.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse42.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Broadwell/resources-ssse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Haswell/resources-sse1.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Haswell/resources-sse2.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Haswell/resources-sse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Haswell/resources-sse41.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Haswell/resources-sse42.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Haswell/resources-ssse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SLM/resources-sse1.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SLM/resources-sse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SLM/resources-ssse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse1.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse2.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse41.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse42.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse1.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse2.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse41.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse42.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver1/resources-sse1.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver1/resources-sse2.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver1/resources-sse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver1/resources-sse41.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver1/resources-sse42.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver1/resources-ssse3.s [new file with mode: 0644]

diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse1.s
new file mode 100644 (file)
index 0000000..c4df3ab
--- /dev/null
@@ -0,0 +1,464 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -instruction-tables < %s | FileCheck %s
+
+addps       %xmm0, %xmm2
+addps       (%rax), %xmm2
+
+addss       %xmm0, %xmm2
+addss       (%rax), %xmm2
+
+andnps      %xmm0, %xmm2
+andnps      (%rax), %xmm2
+
+andps       %xmm0, %xmm2
+andps       (%rax), %xmm2
+
+cmpps       $0, %xmm0, %xmm2
+cmpps       $0, (%rax), %xmm2
+
+cmpss       $0, %xmm0, %xmm2
+cmpss       $0, (%rax), %xmm2
+
+comiss      %xmm0, %xmm1
+comiss      (%rax), %xmm1
+
+cvtpi2ps    %mm0, %xmm2
+cvtpi2ps    (%rax), %xmm2
+
+cvtps2pi    %xmm0, %mm2
+cvtps2pi    (%rax), %mm2
+
+cvtsi2ss    %ecx, %xmm2
+cvtsi2ss    %rcx, %xmm2
+cvtsi2ss    (%rax), %xmm2
+cvtsi2ss    (%rax), %xmm2
+
+cvtss2si    %xmm0, %ecx
+cvtss2si    %xmm0, %rcx
+cvtss2si    (%rax), %ecx
+cvtss2si    (%rax), %rcx
+
+cvttps2pi   %xmm0, %mm2
+cvttps2pi   (%rax), %mm2
+
+cvttss2si   %xmm0, %ecx
+cvttss2si   %xmm0, %rcx
+cvttss2si   (%rax), %ecx
+cvttss2si   (%rax), %rcx
+
+divps       %xmm0, %xmm2
+divps       (%rax), %xmm2
+
+divss       %xmm0, %xmm2
+divss       (%rax), %xmm2
+
+ldmxcsr     (%rax)
+
+maskmovq    %mm0, %mm1
+
+maxps       %xmm0, %xmm2
+maxps       (%rax), %xmm2
+
+maxss       %xmm0, %xmm2
+maxss       (%rax), %xmm2
+
+minps       %xmm0, %xmm2
+minps       (%rax), %xmm2
+
+minss       %xmm0, %xmm2
+minss       (%rax), %xmm2
+
+movaps      %xmm0, %xmm2
+movaps      %xmm0, (%rax)
+movaps      (%rax), %xmm2
+
+movhlps     %xmm0, %xmm2
+movlhps     %xmm0, %xmm2
+
+movhps      %xmm0, (%rax)
+movhps      (%rax), %xmm2
+
+movlps      %xmm0, (%rax)
+movlps      (%rax), %xmm2
+
+movmskps    %xmm0, %rcx
+
+movntps     %xmm0, (%rax)
+movntq      %mm0, (%rax)
+
+movss       %xmm0, %xmm2
+movss       %xmm0, (%rax)
+movss       (%rax), %xmm2
+
+movups      %xmm0, %xmm2
+movups      %xmm0, (%rax)
+movups      (%rax), %xmm2
+
+mulps       %xmm0, %xmm2
+mulps       (%rax), %xmm2
+
+mulss       %xmm0, %xmm2
+mulss       (%rax), %xmm2
+
+orps        %xmm0, %xmm2
+orps        (%rax), %xmm2
+
+pavgb       %mm0, %mm2
+pavgb       (%rax), %mm2
+
+pavgw       %mm0, %mm2
+pavgw       (%rax), %mm2
+
+pextrw      $1, %mm0, %rcx
+
+pinsrw      $1, %rax, %mm2
+pinsrw      $1, (%rax), %mm2
+
+pmaxsw      %mm0, %mm2
+pmaxsw      (%rax), %mm2
+
+pmaxub      %mm0, %mm2
+pmaxub      (%rax), %mm2
+
+pminsw      %mm0, %mm2
+pminsw      (%rax), %mm2
+
+pminub      %mm0, %mm2
+pminub      (%rax), %mm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %mm0, %mm2
+pmulhuw     (%rax), %mm2
+
+prefetcht0  (%rax)
+prefetcht1  (%rax)
+prefetcht2  (%rax)
+prefetchnta (%rax)
+
+psadbw      %mm0, %mm2
+psadbw      (%rax), %mm2
+
+pshufw      $1, %mm0, %mm2
+pshufw      $1, (%rax), %mm2
+
+rcpps       %xmm0, %xmm2
+rcpps       (%rax), %xmm2
+
+rcpss       %xmm0, %xmm2
+rcpss       (%rax), %xmm2
+
+rsqrtps     %xmm0, %xmm2
+rsqrtps     (%rax), %xmm2
+
+rsqrtss     %xmm0, %xmm2
+rsqrtss     (%rax), %xmm2
+
+sfence
+
+shufps      $1, %xmm0, %xmm2
+shufps      $1, (%rax), %xmm2
+
+sqrtps      %xmm0, %xmm2
+sqrtps      (%rax), %xmm2
+
+sqrtss      %xmm0, %xmm2
+sqrtss      (%rax), %xmm2
+
+stmxcsr     (%rax)
+
+subps       %xmm0, %xmm2
+subps       (%rax), %xmm2
+
+subss       %xmm0, %xmm2
+subss       (%rax), %xmm2
+
+ucomiss     %xmm0, %xmm1
+ucomiss     (%rax), %xmm1
+
+unpckhps    %xmm0, %xmm2
+unpckhps    (%rax), %xmm2
+
+unpcklps    %xmm0, %xmm2
+unpcklps    (%rax), %xmm2
+
+xorps       %xmm0, %xmm2
+xorps       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addps   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       andnps  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  andnps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       andps   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  andps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       comiss  %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  comiss  (%rax), %xmm1
+# CHECK-NEXT:  1      3     1.00                       cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  2      4     1.00                       cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  3      5     2.00                       cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  2      4     1.00                       cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  3      9     1.00    *                  cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  2      4     1.00                       cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  2      4     1.00                       cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  2      4     1.00                       cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  4      10    1.00    *                  cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  1      11    5.00                       divps   %xmm0, %xmm2
+# CHECK-NEXT:  2      16    5.00    *                  divps   (%rax), %xmm2
+# CHECK-NEXT:  1      11    3.00                       divss   %xmm0, %xmm2
+# CHECK-NEXT:  2      16    5.00    *                  divss   (%rax), %xmm2
+# CHECK-NEXT:  3      7     1.00    *      *      *    ldmxcsr (%rax)
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovq        %mm0, %mm1
+# CHECK-NEXT:  1      3     1.00                       maxps   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  maxps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  maxss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minps   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  minps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  minss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movaps  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movaps  %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movaps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movhlps %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movlhps %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movhps  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movhps  (%rax), %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movlps  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movlps  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       movmskps        %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movntps %xmm0, (%rax)
+# CHECK-NEXT:  2      1     1.00    *      *      *    movntq  %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movss   %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movss   %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movups  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movups  %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movups  (%rax), %xmm2
+# CHECK-NEXT:  1      3     0.50                       mulps   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     0.50    *                  mulps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     0.50                       mulss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     0.50    *                  mulss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       orps    %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  orps    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pavgb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pavgw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pavgw   (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                       pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  2      2     2.00                       pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pmaxub  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxub  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pminsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pminsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pminub  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pminub  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       pmulhuw %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhuw (%rax), %mm2
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht0      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht1      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht2      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetchnta     (%rax)
+# CHECK-NEXT:  1      5     1.00                       psadbw  %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  psadbw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rcpps   (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rcpss   (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.33    *      *      *    sfence
+# CHECK-NEXT:  1      1     1.00                       shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      11    7.00                       sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  2      16    7.00    *                  sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  1      11    4.00                       sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  2      16    7.00    *                  sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  3      2     1.00    *      *      *    stmxcsr (%rax)
+# CHECK-NEXT:  1      3     1.00                       subps   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  subps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  subss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  ucomiss (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       xorps   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  xorps   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - BWDivider
+# CHECK-NEXT: [1] - BWFPDivider
+# CHECK-NEXT: [2] - BWPort0
+# CHECK-NEXT: [3] - BWPort1
+# CHECK-NEXT: [4] - BWPort2
+# CHECK-NEXT: [5] - BWPort3
+# CHECK-NEXT: [6] - BWPort4
+# CHECK-NEXT: [7] - BWPort5
+# CHECK-NEXT: [8] - BWPort6
+# CHECK-NEXT: [9] - BWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -     43.00  34.50  50.50  32.00  32.00  8.00   41.50  0.50   3.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        andnps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        andnps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        andps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        andps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        comiss  %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        comiss  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -     1.00    -      -        cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  -     5.00   1.00    -      -      -      -      -      -      -        divps   %xmm0, %xmm2
+# CHECK-NEXT:  -     5.00   1.00    -     0.50   0.50    -      -      -      -        divps   (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divss   %xmm0, %xmm2
+# CHECK-NEXT:  -     5.00   1.00    -     0.50   0.50    -      -      -      -        divss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.25   0.25   0.50   0.50    -     0.25   0.25    -        ldmxcsr (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        maskmovq        %mm0, %mm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        maxps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        maxps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        maxss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        maxss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        minps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        minps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        minss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        minss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movaps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movaps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movaps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movhlps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movlhps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movhps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movhps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movlps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movlps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movmskps        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntps %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntq  %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movss   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movups  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movups  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movups  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        orps    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        orps    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pavgb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pavgb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pavgw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pavgw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxub  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxub  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminub  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminub  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhuw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhuw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht0      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht1      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht2      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetchnta     (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psadbw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psadbw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rcpps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rcpss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25   0.33   0.33    -     0.25   0.25   0.33      sfence
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -      -      -      -      -      -      -        sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -     0.50   0.50    -      -      -      -        sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  -     4.00   1.00    -      -      -      -      -      -      -        sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -     0.50   0.50    -      -      -      -        sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      stmxcsr (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        subps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        subps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        subss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        subss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        ucomiss (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        xorps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        xorps   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse2.s
new file mode 100644 (file)
index 0000000..ca158b4
--- /dev/null
@@ -0,0 +1,952 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -instruction-tables < %s | FileCheck %s
+
+addpd       %xmm0, %xmm2
+addpd       (%rax), %xmm2
+
+addsd       %xmm0, %xmm2
+addsd       (%rax), %xmm2
+
+addsubpd    %xmm0, %xmm2
+addsubpd    (%rax), %xmm2
+
+andnpd      %xmm0, %xmm2
+andnpd      (%rax), %xmm2
+
+andpd       %xmm0, %xmm2
+andpd       (%rax), %xmm2
+
+clflush     (%rax)
+
+cmppd       $0, %xmm0, %xmm2
+cmppd       $0, (%rax), %xmm2
+
+cmpsd       $0, %xmm0, %xmm2
+cmpsd       $0, (%rax), %xmm2
+
+comisd      %xmm0, %xmm1
+comisd      (%rax), %xmm1
+
+cvtdq2pd    %xmm0, %xmm2
+cvtdq2pd    (%rax), %xmm2
+
+cvtdq2ps    %xmm0, %xmm2
+cvtdq2ps    (%rax), %xmm2
+
+cvtpd2dq    %xmm0, %xmm2
+cvtpd2dq    (%rax), %xmm2
+
+cvtpd2pi    %xmm0, %mm2
+cvtpd2pi    (%rax), %mm2
+
+cvtpd2ps    %xmm0, %xmm2
+cvtpd2ps    (%rax), %xmm2
+
+cvtpi2pd    %mm0, %xmm2
+cvtpi2pd    (%rax), %xmm2
+
+cvtps2dq    %xmm0, %xmm2
+cvtps2dq    (%rax), %xmm2
+
+cvtps2pd    %xmm0, %xmm2
+cvtps2pd    (%rax), %xmm2
+
+cvtsd2si    %xmm0, %ecx
+cvtsd2si    %xmm0, %rcx
+cvtsd2si    (%rax), %ecx
+cvtsd2si    (%rax), %rcx
+
+cvtsd2ss    %xmm0, %xmm2
+cvtsd2ss    (%rax), %xmm2
+
+cvtsi2sd    %ecx, %xmm2
+cvtsi2sd    %rcx, %xmm2
+cvtsi2sd    (%rax), %xmm2
+cvtsi2sd    (%rax), %xmm2
+
+cvtss2sd    %xmm0, %xmm2
+cvtss2sd    (%rax), %xmm2
+
+cvttpd2dq   %xmm0, %xmm2
+cvttpd2dq   (%rax), %xmm2
+
+cvttpd2pi   %xmm0, %mm2
+cvttpd2pi   (%rax), %mm2
+
+cvttps2dq   %xmm0, %xmm2
+cvttps2dq   (%rax), %xmm2
+
+cvttsd2si   %xmm0, %ecx
+cvttsd2si   %xmm0, %rcx
+cvttsd2si   (%rax), %ecx
+cvttsd2si   (%rax), %rcx
+
+divpd       %xmm0, %xmm2
+divpd       (%rax), %xmm2
+
+divsd       %xmm0, %xmm2
+divsd       (%rax), %xmm2
+
+lfence
+
+maskmovdqu  %xmm0, %xmm1
+
+maxpd       %xmm0, %xmm2
+maxpd       (%rax), %xmm2
+
+maxsd       %xmm0, %xmm2
+maxsd       (%rax), %xmm2
+
+minpd       %xmm0, %xmm2
+minpd       (%rax), %xmm2
+
+minsd       %xmm0, %xmm2
+minsd       (%rax), %xmm2
+
+movapd      %xmm0, %xmm2
+movapd      %xmm0, (%rax)
+movapd      (%rax), %xmm2
+
+movd        %eax, %xmm2
+movd        (%rax), %xmm2
+
+movd        %xmm0, %ecx
+movd        %xmm0, (%rax)
+
+movdqa      %xmm0, %xmm2
+movdqa      %xmm0, (%rax)
+movdqa      (%rax), %xmm2
+
+movdqu      %xmm0, %xmm2
+movdqu      %xmm0, (%rax)
+movdqu      (%rax), %xmm2
+
+movdq2q     %xmm0, %mm2
+
+movhpd      %xmm0, (%rax)
+movhpd      (%rax), %xmm2
+
+movlpd      %xmm0, (%rax)
+movlpd      (%rax), %xmm2
+
+movmskpd    %xmm0, %rcx
+
+movntdq     %xmm0, (%rax)
+movntpd     %xmm0, (%rax)
+
+movq        %xmm0, %xmm2
+
+movq        %rax, %xmm2
+movq        (%rax), %xmm2
+
+movq        %xmm0, %rcx
+movq        %xmm0, (%rax)
+
+movq2dq     %mm0, %xmm2
+
+movsd       %xmm0, %xmm2
+movsd       %xmm0, (%rax)
+movsd       (%rax), %xmm2
+
+movupd      %xmm0, %xmm2
+movupd      %xmm0, (%rax)
+movupd      (%rax), %xmm2
+
+mulpd       %xmm0, %xmm2
+mulpd       (%rax), %xmm2
+
+mulsd       %xmm0, %xmm2
+mulsd       (%rax), %xmm2
+
+orpd        %xmm0, %xmm2
+orpd        (%rax), %xmm2
+
+packssdw    %xmm0, %xmm2
+packssdw    (%rax), %xmm2
+
+packsswb    %xmm0, %xmm2
+packsswb    (%rax), %xmm2
+
+packuswb    %xmm0, %xmm2
+packuswb    (%rax), %xmm2
+
+paddb       %xmm0, %xmm2
+paddb       (%rax), %xmm2
+
+paddd       %xmm0, %xmm2
+paddd       (%rax), %xmm2
+
+paddq       %mm0, %mm2
+paddq       (%rax), %mm2
+
+paddq       %xmm0, %xmm2
+paddq       (%rax), %xmm2
+
+paddsb      %xmm0, %xmm2
+paddsb      (%rax), %xmm2
+
+paddsw      %xmm0, %xmm2
+paddsw      (%rax), %xmm2
+
+paddusb     %xmm0, %xmm2
+paddusb     (%rax), %xmm2
+
+paddusw     %xmm0, %xmm2
+paddusw     (%rax), %xmm2
+
+paddw       %xmm0, %xmm2
+paddw       (%rax), %xmm2
+
+pand        %xmm0, %xmm2
+pand        (%rax), %xmm2
+
+pandn       %xmm0, %xmm2
+pandn       (%rax), %xmm2
+
+pavgb       %xmm0, %xmm2
+pavgb       (%rax), %xmm2
+
+pavgw       %xmm0, %xmm2
+pavgw       (%rax), %xmm2
+
+pcmpeqb     %xmm0, %xmm2
+pcmpeqb     (%rax), %xmm2
+
+pcmpeqd     %xmm0, %xmm2
+pcmpeqd     (%rax), %xmm2
+
+pcmpeqw     %xmm0, %xmm2
+pcmpeqw     (%rax), %xmm2
+
+pcmpgtb     %xmm0, %xmm2
+pcmpgtb     (%rax), %xmm2
+
+pcmpgtd     %xmm0, %xmm2
+pcmpgtd     (%rax), %xmm2
+
+pcmpgtw     %xmm0, %xmm2
+pcmpgtw     (%rax), %xmm2
+
+pextrw      $1, %xmm0, %rcx
+
+pmaddwd     %xmm0, %xmm2
+pmaddwd     (%rax), %xmm2
+
+pmaxsw      %xmm0, %xmm2
+pmaxsw      (%rax), %xmm2
+
+pmaxub      %xmm0, %xmm2
+pmaxub      (%rax), %xmm2
+
+pminsw      %xmm0, %xmm2
+pminsw      (%rax), %xmm2
+
+pminub      %xmm0, %xmm2
+pminub      (%rax), %xmm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %xmm0, %xmm2
+pmulhuw     (%rax), %xmm2
+
+pmulhw      %xmm0, %xmm2
+pmulhw      (%rax), %xmm2
+
+pmullw      %xmm0, %xmm2
+pmullw      (%rax), %xmm2
+
+pmuludq     %mm0, %mm2
+pmuludq     (%rax), %mm2
+
+pmuludq     %xmm0, %xmm2
+pmuludq     (%rax), %xmm2
+
+por         %xmm0, %xmm2
+por         (%rax), %xmm2
+
+psadbw      %xmm0, %xmm2
+psadbw      (%rax), %xmm2
+
+pshufd      $1, %xmm0, %xmm2
+pshufd      $1, (%rax), %xmm2
+
+pshufhw     $1, %xmm0, %xmm2
+pshufhw     $1, (%rax), %xmm2
+
+pshuflw     $1, %xmm0, %xmm2
+pshuflw     $1, (%rax), %xmm2
+
+pslld       $1, %xmm2
+pslld       %xmm0, %xmm2
+pslld       (%rax), %xmm2
+
+pslldq      $1, %xmm2
+
+psllq       $1, %xmm2
+psllq       %xmm0, %xmm2
+psllq       (%rax), %xmm2
+
+psllw       $1, %xmm2
+psllw       %xmm0, %xmm2
+psllw       (%rax), %xmm2
+
+psrad       $1, %xmm2
+psrad       %xmm0, %xmm2
+psrad       (%rax), %xmm2
+
+psraw       $1, %xmm2
+psraw       %xmm0, %xmm2
+psraw       (%rax), %xmm2
+
+psrld       $1, %xmm2
+psrld       %xmm0, %xmm2
+psrld       (%rax), %xmm2
+
+psrldq      $1, %xmm2
+
+psrlq       $1, %xmm2
+psrlq       %xmm0, %xmm2
+psrlq       (%rax), %xmm2
+
+psrlw       $1, %xmm2
+psrlw       %xmm0, %xmm2
+psrlw       (%rax), %xmm2
+
+psubb       %xmm0, %xmm2
+psubb       (%rax), %xmm2
+
+psubd       %xmm0, %xmm2
+psubd       (%rax), %xmm2
+
+psubq       %mm0, %mm2
+psubq       (%rax), %mm2
+
+psubq       %xmm0, %xmm2
+psubq       (%rax), %xmm2
+
+psubsb      %xmm0, %xmm2
+psubsb      (%rax), %xmm2
+
+psubsw      %xmm0, %xmm2
+psubsw      (%rax), %xmm2
+
+psubusb     %xmm0, %xmm2
+psubusb     (%rax), %xmm2
+
+psubusw     %xmm0, %xmm2
+psubusw     (%rax), %xmm2
+
+psubw       %xmm0, %xmm2
+psubw       (%rax), %xmm2
+
+punpckhbw   %xmm0, %xmm2
+punpckhbw   (%rax), %xmm2
+
+punpckhdq   %xmm0, %xmm2
+punpckhdq   (%rax), %xmm2
+
+punpckhqdq  %xmm0, %xmm2
+punpckhqdq  (%rax), %xmm2
+
+punpckhwd   %xmm0, %xmm2
+punpckhwd   (%rax), %xmm2
+
+punpcklbw   %xmm0, %xmm2
+punpcklbw   (%rax), %xmm2
+
+punpckldq   %xmm0, %xmm2
+punpckldq   (%rax), %xmm2
+
+punpcklqdq  %xmm0, %xmm2
+punpcklqdq  (%rax), %xmm2
+
+punpcklwd   %xmm0, %xmm2
+punpcklwd   (%rax), %xmm2
+
+pxor        %xmm0, %xmm2
+pxor        (%rax), %xmm2
+
+shufpd      $1, %xmm0, %xmm2
+shufpd      $1, (%rax), %xmm2
+
+sqrtpd      %xmm0, %xmm2
+sqrtpd      (%rax), %xmm2
+
+sqrtsd      %xmm0, %xmm2
+sqrtsd      (%rax), %xmm2
+
+subpd       %xmm0, %xmm2
+subpd       (%rax), %xmm2
+
+subsd       %xmm0, %xmm2
+subsd       (%rax), %xmm2
+
+ucomisd     %xmm0, %xmm1
+ucomisd     (%rax), %xmm1
+
+unpckhpd    %xmm0, %xmm2
+unpckhpd    (%rax), %xmm2
+
+unpcklpd    %xmm0, %xmm2
+unpcklpd    (%rax), %xmm2
+
+xorpd       %xmm0, %xmm2
+xorpd       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  andnpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       andpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  andpd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00    *      *      *    clflush (%rax)
+# CHECK-NEXT:  1      3     1.00                       cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       comisd  %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  comisd  (%rax), %xmm1
+# CHECK-NEXT:  2      4     1.00                       cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  3      9     1.00    *                  cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  3      9     1.00    *                  cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  3      9     1.00    *                  cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  2      4     1.00                       cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  3      9     1.00    *                  cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  3      9     1.00    *                  cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  2      4     1.00                       cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  3      9     1.00    *                  cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  2      4     1.00                       cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  3      9     1.00    *                  cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  3      9     1.00    *                  cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  3      9     1.00    *                  cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  2      4     1.00                       cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  3      9     1.00    *                  cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  1      14    8.00                       divpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      19    8.00    *                  divpd   (%rax), %xmm2
+# CHECK-NEXT:  1      14    4.00                       divsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      19    8.00    *                  divsd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.50    *      *      *    lfence
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  1      3     1.00                       maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  maxpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  maxsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  minpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  minsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movapd  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movapd  %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movapd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movd    %eax, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movd    %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movd    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movdqa  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movdqu  (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.67                       movdq2q %xmm0, %mm2
+# CHECK-NEXT:  2      1     1.00           *           movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movhpd  (%rax), %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movlpd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movntdq %xmm0, (%rax)
+# CHECK-NEXT:  2      1     1.00           *           movntpd %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movq    %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movq    %xmm0, %rcx
+# CHECK-NEXT:  2      1     1.00           *           movq    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movq2dq %mm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movsd   %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movupd  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movupd  %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movupd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     0.50                       mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     0.50    *                  mulpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     0.50                       mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     0.50    *                  mulsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       orpd    %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  orpd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  packssdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  packsswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  packuswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddb   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  paddb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddd   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  paddd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddq   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddq   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  paddq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  paddsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  paddsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusb %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  paddusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusw %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  paddusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddw   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  paddw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pand    %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pand    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pandn   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pandn   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pavgb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pavgw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pminsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminub  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pminub  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pmullw  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmuludq %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmuludq (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pmuludq (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       por     %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  por     (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  psadbw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       pslld   %xmm0, %xmm2
+# CHECK-NEXT:  3      7     1.00    *                  pslld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslldq  $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psllq   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psllq   %xmm0, %xmm2
+# CHECK-NEXT:  3      7     1.00    *                  psllq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psllw   %xmm0, %xmm2
+# CHECK-NEXT:  3      7     1.00    *                  psllw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrad   %xmm0, %xmm2
+# CHECK-NEXT:  3      7     1.00    *                  psrad   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psraw   %xmm0, %xmm2
+# CHECK-NEXT:  3      7     1.00    *                  psraw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrld   %xmm0, %xmm2
+# CHECK-NEXT:  3      7     1.00    *                  psrld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrldq  $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  3      7     1.00    *                  psrlq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  3      7     1.00    *                  psrlw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubb   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psubb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubd   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psubd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubq   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubq   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psubq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psubsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psubsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusb %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psubusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusw %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psubusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubw   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psubw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pxor    %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pxor    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      16    14.00                      sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      21    14.00   *                  sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  1      16    8.00                       sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      21    14.00   *                  sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  subpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  subsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  ucomisd (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  xorpd   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - BWDivider
+# CHECK-NEXT: [1] - BWFPDivider
+# CHECK-NEXT: [2] - BWPort0
+# CHECK-NEXT: [3] - BWPort1
+# CHECK-NEXT: [4] - BWPort2
+# CHECK-NEXT: [5] - BWPort3
+# CHECK-NEXT: [6] - BWPort4
+# CHECK-NEXT: [7] - BWPort5
+# CHECK-NEXT: [8] - BWPort6
+# CHECK-NEXT: [9] - BWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -     78.00  70.25  97.25  62.50  62.50  12.00  123.75 1.75   4.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        andnpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        andpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        andpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     0.25   1.25    -        clflush (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        comisd  %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        comisd  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  -     8.00   1.00    -      -      -      -      -      -      -        divpd   %xmm0, %xmm2
+# CHECK-NEXT:  -     8.00   1.00    -     0.50   0.50    -      -      -      -        divpd   (%rax), %xmm2
+# CHECK-NEXT:  -     4.00   1.00    -      -      -      -      -      -      -        divsd   %xmm0, %xmm2
+# CHECK-NEXT:  -     8.00   1.00    -     0.50   0.50    -      -      -      -        divsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -        lfence
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        maxpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        maxsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        minpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        minpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        minsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        minsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movapd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movapd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movapd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movd    %eax, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movd    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movd    %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movd    %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movdqa  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movdqu  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.83   0.83    -      -      -     0.33    -      -        movdq2q %xmm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movhpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movlpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntdq %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntpd %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movq    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq    %rax, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movq    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movq    %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movq    %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq2dq %mm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movsd   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movupd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movupd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movupd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        orpd    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        orpd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packssdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packsswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packuswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddusb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddusw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pand    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pand    (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pandn   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pandn   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pavgb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pavgw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminub  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmullw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmuludq %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmuludq (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmuludq (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        por     %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        por     (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psadbw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     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.00    -     0.50   0.50    -     1.00    -      -        pslld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pslldq  $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psllq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psllq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psllw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psllw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psrad   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psrad   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psraw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psraw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psrld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psrld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        psrldq  $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psrlq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psrlw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubusb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubusw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pxor    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pxor    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      -      -        sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -     0.50   0.50    -      -      -      -        sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  -     8.00   1.00    -      -      -      -      -      -      -        sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -     0.50   0.50    -      -      -      -        sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        subpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        subpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        subsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        subsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        ucomisd (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        xorpd   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse3.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse3.s
new file mode 100644 (file)
index 0000000..a5e7b27
--- /dev/null
@@ -0,0 +1,99 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -instruction-tables < %s | FileCheck %s
+
+addsubpd  %xmm0, %xmm2
+addsubpd  (%rax),  %xmm2
+
+addsubps  %xmm0, %xmm2
+addsubps  (%rax), %xmm2
+
+haddpd    %xmm0, %xmm2
+haddpd    (%rax), %xmm2
+
+haddps    %xmm0, %xmm2
+haddps    (%rax), %xmm2
+
+hsubpd    %xmm0, %xmm2
+hsubpd    (%rax), %xmm2
+
+hsubps    %xmm0, %xmm2
+hsubps    (%rax), %xmm2
+
+lddqu     (%rax), %xmm2
+
+movddup   %xmm0, %xmm2
+movddup   (%rax), %xmm2
+
+movshdup  %xmm0, %xmm2
+movshdup  (%rax), %xmm2
+
+movsldup  %xmm0, %xmm2
+movsldup  (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addsubps        (%rax), %xmm2
+# CHECK-NEXT:  3      5     2.00                       haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  4      10    2.00    *                  haddpd  (%rax), %xmm2
+# CHECK-NEXT:  3      5     2.00                       haddps  %xmm0, %xmm2
+# CHECK-NEXT:  4      10    2.00    *                  haddps  (%rax), %xmm2
+# CHECK-NEXT:  3      5     2.00                       hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  4      10    2.00    *                  hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  3      5     2.00                       hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  4      10    2.00    *                  hsubps  (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  lddqu   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movddup %xmm0, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movddup (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movshdup        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movsldup        (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - BWDivider
+# CHECK-NEXT: [1] - BWFPDivider
+# CHECK-NEXT: [2] - BWPort0
+# CHECK-NEXT: [3] - BWPort1
+# CHECK-NEXT: [4] - BWPort2
+# CHECK-NEXT: [5] - BWPort3
+# CHECK-NEXT: [6] - BWPort4
+# CHECK-NEXT: [7] - BWPort5
+# CHECK-NEXT: [8] - BWPort6
+# CHECK-NEXT: [9] - BWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -      -     12.00  5.00   5.00    -     19.00   -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addsubps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     2.00    -      -        haddpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        haddps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     2.00    -      -        haddps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     2.00    -      -        hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     2.00    -      -        hsubps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        lddqu   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movddup %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movddup (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movshdup        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movsldup        (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse41.s
new file mode 100644 (file)
index 0000000..37d629b
--- /dev/null
@@ -0,0 +1,369 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -instruction-tables < %s | FileCheck %s
+
+blendpd     $11, %xmm0, %xmm2
+blendpd     $11, (%rax), %xmm2
+
+blendps     $11, %xmm0, %xmm2
+blendps     $11, (%rax), %xmm2
+
+blendvpd    %xmm0, %xmm2
+blendvpd    (%rax), %xmm2
+
+blendvps    %xmm0, %xmm2
+blendvps    (%rax), %xmm2
+
+dppd        $22, %xmm0, %xmm2
+dppd        $22, (%rax), %xmm2
+
+dpps        $22, %xmm0, %xmm2
+dpps        $22, (%rax), %xmm2
+
+extractps   $1, %xmm0, %rcx
+extractps   $1, %xmm0, (%rax)
+
+insertps    $1, %xmm0, %xmm2
+insertps    $1, (%rax), %xmm2
+
+movntdqa    (%rax), %xmm2
+
+mpsadbw     $1, %xmm0, %xmm2
+mpsadbw     $1, (%rax), %xmm2
+
+packusdw    %xmm0, %xmm2
+packusdw    (%rax), %xmm2
+
+pblendvb    %xmm0, %xmm2
+pblendvb    (%rax), %xmm2
+
+pblendw     $11, %xmm0, %xmm2
+pblendw     $11, (%rax), %xmm2
+
+pcmpeqq     %xmm0, %xmm2
+pcmpeqq     (%rax), %xmm2
+
+pextrb      $1, %xmm0, %ecx
+pextrb      $1, %xmm0, (%rax)
+
+pextrd      $1, %xmm0, %ecx
+pextrd      $1, %xmm0, (%rax)
+
+pextrq      $1, %xmm0, %rcx
+pextrq      $1, %xmm0, (%rax)
+
+pextrw      $1, %xmm0, (%rax)
+
+phminposuw  %xmm0, %xmm2
+phminposuw  (%rax), %xmm2
+
+pinsrb      $1, %eax, %xmm1
+pinsrb      $1, (%rax), %xmm1
+
+pinsrd      $1, %eax, %xmm1
+pinsrd      $1, (%rax), %xmm1
+
+pinsrq      $1, %rax, %xmm1
+pinsrq      $1, (%rax), %xmm1
+
+pmaxsb      %xmm0, %xmm2
+pmaxsb      (%rax), %xmm2
+
+pmaxsd      %xmm0, %xmm2
+pmaxsd      (%rax), %xmm2
+
+pmaxud      %xmm0, %xmm2
+pmaxud      (%rax), %xmm2
+
+pmaxuw      %xmm0, %xmm2
+pmaxuw      (%rax), %xmm2
+
+pminsb      %xmm0, %xmm2
+pminsb      (%rax), %xmm2
+
+pminsd      %xmm0, %xmm2
+pminsd      (%rax), %xmm2
+
+pminud      %xmm0, %xmm2
+pminud      (%rax), %xmm2
+
+pminuw      %xmm0, %xmm2
+pminuw      (%rax), %xmm2
+
+pmovsxbd    %xmm0, %xmm2
+pmovsxbd    (%rax), %xmm2
+
+pmovsxbq    %xmm0, %xmm2
+pmovsxbq    (%rax), %xmm2
+
+pmovsxbw    %xmm0, %xmm2
+pmovsxbw    (%rax), %xmm2
+
+pmovsxdq    %xmm0, %xmm2
+pmovsxdq    (%rax), %xmm2
+
+pmovsxwd    %xmm0, %xmm2
+pmovsxwd    (%rax), %xmm2
+
+pmovsxwq    %xmm0, %xmm2
+pmovsxwq    (%rax), %xmm2
+
+pmovzxbd    %xmm0, %xmm2
+pmovzxbd    (%rax), %xmm2
+
+pmovzxbq    %xmm0, %xmm2
+pmovzxbq    (%rax), %xmm2
+
+pmovzxbw    %xmm0, %xmm2
+pmovzxbw    (%rax), %xmm2
+
+pmovzxdq    %xmm0, %xmm2
+pmovzxdq    (%rax), %xmm2
+
+pmovzxwd    %xmm0, %xmm2
+pmovzxwd    (%rax), %xmm2
+
+pmovzxwq    %xmm0, %xmm2
+pmovzxwq    (%rax), %xmm2
+
+pmuldq      %xmm0, %xmm2
+pmuldq      (%rax), %xmm2
+
+pmulld      %xmm0, %xmm2
+pmulld      (%rax), %xmm2
+
+ptest       %xmm0, %xmm1
+ptest       (%rax), %xmm1
+
+roundpd     $1, %xmm0, %xmm2
+roundpd     $1, (%rax), %xmm2
+
+roundps     $1, %xmm0, %xmm2
+roundps     $1, (%rax), %xmm2
+
+roundsd     $1, %xmm0, %xmm2
+roundsd     $1, (%rax), %xmm2
+
+roundss     $1, %xmm0, %xmm2
+roundss     $1, (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.33                       blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      7     2.00    *                  blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      7     2.00    *                  blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  3      9     1.00                       dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  4      14    1.00    *                  dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  4      14    2.00                       dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  5      19    2.00    *                  dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  3      7     2.00                       mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  packusdw        (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      7     2.00    *                  pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      2     1.00                       pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      2     1.00                       pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  3      2     1.00           *           pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  3      2     1.00           *           pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      5     1.00                       phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     2.00                       pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     2.00                       pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.50                       pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pminsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pminsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminud  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pminud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pminuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  2      10    2.00                       pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  3      15    2.00    *                  pmulld  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       ptest   %xmm0, %xmm1
+# CHECK-NEXT:  3      7     1.00    *                  ptest   (%rax), %xmm1
+# CHECK-NEXT:  1      6     0.50                       roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      11    2.00    *                  roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50                       roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      11    2.00    *                  roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50                       roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      11    2.00    *                  roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50                       roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      11    2.00    *                  roundss $1, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - BWDivider
+# CHECK-NEXT: [1] - BWFPDivider
+# CHECK-NEXT: [2] - BWPort0
+# CHECK-NEXT: [3] - BWPort1
+# CHECK-NEXT: [4] - BWPort2
+# CHECK-NEXT: [5] - BWPort3
+# CHECK-NEXT: [6] - BWPort4
+# CHECK-NEXT: [7] - BWPort5
+# CHECK-NEXT: [8] - BWPort6
+# CHECK-NEXT: [9] - BWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     23.33  22.33  25.67  25.67  5.00   80.33   -     1.67
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -     1.00    -      -        dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -     1.00    -      -        dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -     1.00    -      -        dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00   0.50   0.50    -     1.00    -      -        dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     2.00    -      -        mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     2.00    -      -        mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packusdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminud  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.00    -      -      -      -      -      -      -        pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.00    -     0.50   0.50    -      -      -      -        pmulld  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        ptest   %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        ptest   (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00   0.50   0.50    -      -      -      -        roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00   0.50   0.50    -      -      -      -        roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00   0.50   0.50    -      -      -      -        roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00   0.50   0.50    -      -      -      -        roundss $1, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-sse42.s
new file mode 100644 (file)
index 0000000..11ccc47
--- /dev/null
@@ -0,0 +1,102 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -instruction-tables < %s | FileCheck %s
+
+crc32b      %al, %ecx
+crc32b      (%rax), %ecx
+
+crc32l      %eax, %ecx
+crc32l      (%rax), %ecx
+
+crc32w      %ax, %ecx
+crc32w      (%rax), %ecx
+
+crc32b      %al, %rcx
+crc32b      (%rax), %rcx
+
+crc32q      %rax, %rcx
+crc32q      (%rax), %rcx
+
+pcmpestri   $1, %xmm0, %xmm2
+pcmpestri   $1, (%rax), %xmm2
+
+pcmpestrm   $1, %xmm0, %xmm2
+pcmpestrm   $1, (%rax), %xmm2
+
+pcmpistri   $1, %xmm0, %xmm2
+pcmpistri   $1, (%rax), %xmm2
+
+pcmpistrm   $1, %xmm0, %xmm2
+pcmpistrm   $1, (%rax), %xmm2
+
+pcmpgtq     %xmm0, %xmm2
+pcmpgtq     (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32b  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32l  %eax, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32l  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32w  %ax, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32w  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %rcx
+# CHECK-NEXT:  2      8     1.00    *                  crc32b  (%rax), %rcx
+# CHECK-NEXT:  1      3     1.00                       crc32q  %rax, %rcx
+# CHECK-NEXT:  2      8     1.00    *                  crc32q  (%rax), %rcx
+# CHECK-NEXT:  8      18    4.00                       pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  9      23    4.00    *                  pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  9      19    4.00                       pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  10     24    4.00    *                  pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  3      11    3.00                       pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      16    3.00    *                  pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  3      11    3.00                       pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      16    3.00    *                  pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pcmpgtq (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - BWDivider
+# CHECK-NEXT: [1] - BWFPDivider
+# CHECK-NEXT: [2] - BWPort0
+# CHECK-NEXT: [3] - BWPort1
+# CHECK-NEXT: [4] - BWPort2
+# CHECK-NEXT: [5] - BWPort3
+# CHECK-NEXT: [6] - BWPort4
+# CHECK-NEXT: [7] - BWPort5
+# CHECK-NEXT: [8] - BWPort6
+# CHECK-NEXT: [9] - BWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     31.67  11.67  5.00   5.00    -     13.67  1.00    -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32b  %al, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32b  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32l  %eax, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32l  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32w  %ax, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32w  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32b  %al, %rcx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32b  (%rax), %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32q  %rax, %rcx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32q  (%rax), %rcx
+# CHECK-NEXT:  -      -     4.25   0.25    -      -      -     3.25   0.25    -        pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     4.25   0.25   0.50   0.50    -     3.25   0.25    -        pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     4.58   0.58    -      -      -     3.58   0.25    -        pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     4.58   0.58   0.50   0.50    -     3.58   0.25    -        pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.00    -      -      -      -      -      -      -        pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.00    -     0.50   0.50    -      -      -      -        pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.00    -      -      -      -      -      -      -        pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.00    -     0.50   0.50    -      -      -      -        pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpgtq (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-ssse3.s
new file mode 100644 (file)
index 0000000..fc7041e
--- /dev/null
@@ -0,0 +1,256 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -instruction-tables < %s | FileCheck %s
+
+pabsb       %mm0, %mm2
+pabsb       (%rax), %mm2
+
+pabsb       %xmm0, %xmm2
+pabsb       (%rax), %xmm2
+
+pabsd       %mm0, %mm2
+pabsd       (%rax), %mm2
+
+pabsd       %xmm0, %xmm2
+pabsd       (%rax), %xmm2
+
+pabsw       %mm0, %mm2
+pabsw       (%rax), %mm2
+
+pabsw       %xmm0, %xmm2
+pabsw       (%rax), %xmm2
+
+palignr     $1, %mm0, %mm2
+palignr     $1, (%rax), %mm2
+
+palignr     $1, %xmm0, %xmm2
+palignr     $1, (%rax), %xmm2
+
+phaddd      %mm0, %mm2
+phaddd      (%rax), %mm2
+
+phaddd      %xmm0, %xmm2
+phaddd      (%rax), %xmm2
+
+phaddsw     %mm0, %mm2
+phaddsw     (%rax), %mm2
+
+phaddsw     %xmm0, %xmm2
+phaddsw     (%rax), %xmm2
+
+phaddw      %mm0, %mm2
+phaddw      (%rax), %mm2
+
+phaddw      %xmm0, %xmm2
+phaddw      (%rax), %xmm2
+
+phsubd      %mm0, %mm2
+phsubd      (%rax), %mm2
+
+phsubd      %xmm0, %xmm2
+phsubd      (%rax), %xmm2
+
+phsubsw     %mm0, %mm2
+phsubsw     (%rax), %mm2
+
+phsubsw     %xmm0, %xmm2
+phsubsw     (%rax), %xmm2
+
+phsubw      %mm0, %mm2
+phsubw      (%rax), %mm2
+
+phsubw      %xmm0, %xmm2
+phsubw      (%rax), %xmm2
+
+pmaddubsw   %mm0, %mm2
+pmaddubsw   (%rax), %mm2
+
+pmaddubsw   %xmm0, %xmm2
+pmaddubsw   (%rax), %xmm2
+
+pmulhrsw    %mm0, %mm2
+pmulhrsw    (%rax), %mm2
+
+pmulhrsw    %xmm0, %xmm2
+pmulhrsw    (%rax), %xmm2
+
+pshufb      %mm0, %mm2
+pshufb      (%rax), %mm2
+
+pshufb      %xmm0, %xmm2
+pshufb      (%rax), %xmm2
+
+psignb      %mm0, %mm2
+psignb      (%rax), %mm2
+
+psignb      %xmm0, %xmm2
+psignb      (%rax), %xmm2
+
+psignd      %mm0, %mm2
+psignd      (%rax), %mm2
+
+psignd      %xmm0, %xmm2
+psignd      (%rax), %xmm2
+
+psignw      %mm0, %mm2
+psignw      (%rax), %mm2
+
+psignw      %xmm0, %xmm2
+psignw      (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.50                       pabsb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  palignr $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddd  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddd  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddsw %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddsw (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddw  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddw  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddw  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubd  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubd  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubsw %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubsw (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubw  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubw  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubw  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psignb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignd  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psignd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %xmm0, %xmm2
+# CHECK-NEXT:  2      6     0.50    *                  psignw  (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - BWDivider
+# CHECK-NEXT: [1] - BWFPDivider
+# CHECK-NEXT: [2] - BWPort0
+# CHECK-NEXT: [3] - BWPort1
+# CHECK-NEXT: [4] - BWPort2
+# CHECK-NEXT: [5] - BWPort3
+# CHECK-NEXT: [6] - BWPort4
+# CHECK-NEXT: [7] - BWPort5
+# CHECK-NEXT: [8] - BWPort6
+# CHECK-NEXT: [9] - BWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     8.00   24.00  16.00  16.00   -     80.00   -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        palignr $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        palignr $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignw  (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse1.s
new file mode 100644 (file)
index 0000000..805c39c
--- /dev/null
@@ -0,0 +1,464 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -instruction-tables < %s | FileCheck %s
+
+addps       %xmm0, %xmm2
+addps       (%rax), %xmm2
+
+addss       %xmm0, %xmm2
+addss       (%rax), %xmm2
+
+andnps      %xmm0, %xmm2
+andnps      (%rax), %xmm2
+
+andps       %xmm0, %xmm2
+andps       (%rax), %xmm2
+
+cmpps       $0, %xmm0, %xmm2
+cmpps       $0, (%rax), %xmm2
+
+cmpss       $0, %xmm0, %xmm2
+cmpss       $0, (%rax), %xmm2
+
+comiss      %xmm0, %xmm1
+comiss      (%rax), %xmm1
+
+cvtpi2ps    %mm0, %xmm2
+cvtpi2ps    (%rax), %xmm2
+
+cvtps2pi    %xmm0, %mm2
+cvtps2pi    (%rax), %mm2
+
+cvtsi2ss    %ecx, %xmm2
+cvtsi2ss    %rcx, %xmm2
+cvtsi2ss    (%rax), %xmm2
+cvtsi2ss    (%rax), %xmm2
+
+cvtss2si    %xmm0, %ecx
+cvtss2si    %xmm0, %rcx
+cvtss2si    (%rax), %ecx
+cvtss2si    (%rax), %rcx
+
+cvttps2pi   %xmm0, %mm2
+cvttps2pi   (%rax), %mm2
+
+cvttss2si   %xmm0, %ecx
+cvttss2si   %xmm0, %rcx
+cvttss2si   (%rax), %ecx
+cvttss2si   (%rax), %rcx
+
+divps       %xmm0, %xmm2
+divps       (%rax), %xmm2
+
+divss       %xmm0, %xmm2
+divss       (%rax), %xmm2
+
+ldmxcsr     (%rax)
+
+maskmovq    %mm0, %mm1
+
+maxps       %xmm0, %xmm2
+maxps       (%rax), %xmm2
+
+maxss       %xmm0, %xmm2
+maxss       (%rax), %xmm2
+
+minps       %xmm0, %xmm2
+minps       (%rax), %xmm2
+
+minss       %xmm0, %xmm2
+minss       (%rax), %xmm2
+
+movaps      %xmm0, %xmm2
+movaps      %xmm0, (%rax)
+movaps      (%rax), %xmm2
+
+movhlps     %xmm0, %xmm2
+movlhps     %xmm0, %xmm2
+
+movhps      %xmm0, (%rax)
+movhps      (%rax), %xmm2
+
+movlps      %xmm0, (%rax)
+movlps      (%rax), %xmm2
+
+movmskps    %xmm0, %rcx
+
+movntps     %xmm0, (%rax)
+movntq      %mm0, (%rax)
+
+movss       %xmm0, %xmm2
+movss       %xmm0, (%rax)
+movss       (%rax), %xmm2
+
+movups      %xmm0, %xmm2
+movups      %xmm0, (%rax)
+movups      (%rax), %xmm2
+
+mulps       %xmm0, %xmm2
+mulps       (%rax), %xmm2
+
+mulss       %xmm0, %xmm2
+mulss       (%rax), %xmm2
+
+orps        %xmm0, %xmm2
+orps        (%rax), %xmm2
+
+pavgb       %mm0, %mm2
+pavgb       (%rax), %mm2
+
+pavgw       %mm0, %mm2
+pavgw       (%rax), %mm2
+
+pextrw      $1, %mm0, %rcx
+
+pinsrw      $1, %rax, %mm2
+pinsrw      $1, (%rax), %mm2
+
+pmaxsw      %mm0, %mm2
+pmaxsw      (%rax), %mm2
+
+pmaxub      %mm0, %mm2
+pmaxub      (%rax), %mm2
+
+pminsw      %mm0, %mm2
+pminsw      (%rax), %mm2
+
+pminub      %mm0, %mm2
+pminub      (%rax), %mm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %mm0, %mm2
+pmulhuw     (%rax), %mm2
+
+prefetcht0  (%rax)
+prefetcht1  (%rax)
+prefetcht2  (%rax)
+prefetchnta (%rax)
+
+psadbw      %mm0, %mm2
+psadbw      (%rax), %mm2
+
+pshufw      $1, %mm0, %mm2
+pshufw      $1, (%rax), %mm2
+
+rcpps       %xmm0, %xmm2
+rcpps       (%rax), %xmm2
+
+rcpss       %xmm0, %xmm2
+rcpss       (%rax), %xmm2
+
+rsqrtps     %xmm0, %xmm2
+rsqrtps     (%rax), %xmm2
+
+rsqrtss     %xmm0, %xmm2
+rsqrtss     (%rax), %xmm2
+
+sfence
+
+shufps      $1, %xmm0, %xmm2
+shufps      $1, (%rax), %xmm2
+
+sqrtps      %xmm0, %xmm2
+sqrtps      (%rax), %xmm2
+
+sqrtss      %xmm0, %xmm2
+sqrtss      (%rax), %xmm2
+
+stmxcsr     (%rax)
+
+subps       %xmm0, %xmm2
+subps       (%rax), %xmm2
+
+subss       %xmm0, %xmm2
+subss       (%rax), %xmm2
+
+ucomiss     %xmm0, %xmm1
+ucomiss     (%rax), %xmm1
+
+unpckhps    %xmm0, %xmm2
+unpckhps    (%rax), %xmm2
+
+unpcklps    %xmm0, %xmm2
+unpcklps    (%rax), %xmm2
+
+xorps       %xmm0, %xmm2
+xorps       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addps   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  addps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       andnps  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  andnps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       andps   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  andps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       comiss  %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  comiss  (%rax), %xmm1
+# CHECK-NEXT:  1      3     1.00                       cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  2      4     1.00                       cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  3      5     2.00                       cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  2      4     1.00                       cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  3      9     1.00    *                  cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  2      4     1.00                       cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  2      4     1.00                       cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  2      4     1.00                       cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  4      10    1.00    *                  cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  1      13    7.00                       divps   %xmm0, %xmm2
+# CHECK-NEXT:  2      19    7.00    *                  divps   (%rax), %xmm2
+# CHECK-NEXT:  1      13    7.00                       divss   %xmm0, %xmm2
+# CHECK-NEXT:  2      18    7.00    *                  divss   (%rax), %xmm2
+# CHECK-NEXT:  3      7     1.00    *      *      *    ldmxcsr (%rax)
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovq        %mm0, %mm1
+# CHECK-NEXT:  1      3     1.00                       maxps   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  maxps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  maxss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minps   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  minps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  minss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movaps  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movaps  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movaps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movhlps %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movlhps %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movhps  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movhps  (%rax), %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movlps  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movlps  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       movmskps        %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movntps %xmm0, (%rax)
+# CHECK-NEXT:  2      1     1.00    *      *      *    movntq  %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movss   %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movss   %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movups  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movups  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movups  (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50                       mulps   %xmm0, %xmm2
+# CHECK-NEXT:  2      11    0.50    *                  mulps   (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50                       mulss   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       orps    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  orps    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pavgb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pavgw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pavgw   (%rax), %mm2
+# CHECK-NEXT:  2      2     1.00                       pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  2      2     2.00                       pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pmaxub  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pmaxub  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pminsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pminsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pminub  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pminub  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       pmulhuw %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhuw (%rax), %mm2
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht0      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht1      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht2      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetchnta     (%rax)
+# CHECK-NEXT:  1      5     1.00                       psadbw  %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  psadbw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  rcpps   (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rcpss   (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.33    *      *      *    sfence
+# CHECK-NEXT:  1      1     1.00                       shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      11    7.00                       sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  2      17    7.00    *                  sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  1      11    7.00                       sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  2      16    7.00    *                  sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  3      2     1.00    *      *      *    stmxcsr (%rax)
+# CHECK-NEXT:  1      3     1.00                       subps   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  subps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subss   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  subss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  ucomiss (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       xorps   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  xorps   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - HWDivider
+# CHECK-NEXT: [1] - HWFPDivider
+# CHECK-NEXT: [2] - HWPort0
+# CHECK-NEXT: [3] - HWPort1
+# CHECK-NEXT: [4] - HWPort2
+# CHECK-NEXT: [5] - HWPort3
+# CHECK-NEXT: [6] - HWPort4
+# CHECK-NEXT: [7] - HWPort5
+# CHECK-NEXT: [8] - HWPort6
+# CHECK-NEXT: [9] - HWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -     56.00  34.50  50.50  32.00  32.00  8.00   41.50  0.50   3.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        andnps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        andnps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        andps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        andps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        comiss  %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        comiss  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -     1.00    -      -        cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  -     7.00   1.00    -      -      -      -      -      -      -        divps   %xmm0, %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -     0.50   0.50    -      -      -      -        divps   (%rax), %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -      -      -      -      -      -      -        divss   %xmm0, %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -     0.50   0.50    -      -      -      -        divss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.25   0.25   0.50   0.50    -     0.25   0.25    -        ldmxcsr (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        maskmovq        %mm0, %mm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        maxps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        maxps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        maxss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        maxss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        minps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        minps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        minss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        minss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movaps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movaps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movaps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movhlps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movlhps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movhps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movhps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movlps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movlps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movmskps        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntps %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntq  %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movss   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movups  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movups  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movups  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        orps    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        orps    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pavgb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pavgb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pavgw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pavgw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxub  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxub  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminub  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminub  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhuw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhuw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht0      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht1      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht2      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetchnta     (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psadbw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psadbw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rcpps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rcpss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25   0.33   0.33    -     0.25   0.25   0.33      sfence
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -      -      -      -      -      -      -        sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -     0.50   0.50    -      -      -      -        sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -      -      -      -      -      -      -        sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  -     7.00   1.00    -     0.50   0.50    -      -      -      -        sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      stmxcsr (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        subps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        subps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        subss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        subss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        ucomiss (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        xorps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        xorps   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse2.s
new file mode 100644 (file)
index 0000000..7231824
--- /dev/null
@@ -0,0 +1,952 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -instruction-tables < %s | FileCheck %s
+
+addpd       %xmm0, %xmm2
+addpd       (%rax), %xmm2
+
+addsd       %xmm0, %xmm2
+addsd       (%rax), %xmm2
+
+addsubpd    %xmm0, %xmm2
+addsubpd    (%rax), %xmm2
+
+andnpd      %xmm0, %xmm2
+andnpd      (%rax), %xmm2
+
+andpd       %xmm0, %xmm2
+andpd       (%rax), %xmm2
+
+clflush     (%rax)
+
+cmppd       $0, %xmm0, %xmm2
+cmppd       $0, (%rax), %xmm2
+
+cmpsd       $0, %xmm0, %xmm2
+cmpsd       $0, (%rax), %xmm2
+
+comisd      %xmm0, %xmm1
+comisd      (%rax), %xmm1
+
+cvtdq2pd    %xmm0, %xmm2
+cvtdq2pd    (%rax), %xmm2
+
+cvtdq2ps    %xmm0, %xmm2
+cvtdq2ps    (%rax), %xmm2
+
+cvtpd2dq    %xmm0, %xmm2
+cvtpd2dq    (%rax), %xmm2
+
+cvtpd2pi    %xmm0, %mm2
+cvtpd2pi    (%rax), %mm2
+
+cvtpd2ps    %xmm0, %xmm2
+cvtpd2ps    (%rax), %xmm2
+
+cvtpi2pd    %mm0, %xmm2
+cvtpi2pd    (%rax), %xmm2
+
+cvtps2dq    %xmm0, %xmm2
+cvtps2dq    (%rax), %xmm2
+
+cvtps2pd    %xmm0, %xmm2
+cvtps2pd    (%rax), %xmm2
+
+cvtsd2si    %xmm0, %ecx
+cvtsd2si    %xmm0, %rcx
+cvtsd2si    (%rax), %ecx
+cvtsd2si    (%rax), %rcx
+
+cvtsd2ss    %xmm0, %xmm2
+cvtsd2ss    (%rax), %xmm2
+
+cvtsi2sd    %ecx, %xmm2
+cvtsi2sd    %rcx, %xmm2
+cvtsi2sd    (%rax), %xmm2
+cvtsi2sd    (%rax), %xmm2
+
+cvtss2sd    %xmm0, %xmm2
+cvtss2sd    (%rax), %xmm2
+
+cvttpd2dq   %xmm0, %xmm2
+cvttpd2dq   (%rax), %xmm2
+
+cvttpd2pi   %xmm0, %mm2
+cvttpd2pi   (%rax), %mm2
+
+cvttps2dq   %xmm0, %xmm2
+cvttps2dq   (%rax), %xmm2
+
+cvttsd2si   %xmm0, %ecx
+cvttsd2si   %xmm0, %rcx
+cvttsd2si   (%rax), %ecx
+cvttsd2si   (%rax), %rcx
+
+divpd       %xmm0, %xmm2
+divpd       (%rax), %xmm2
+
+divsd       %xmm0, %xmm2
+divsd       (%rax), %xmm2
+
+lfence
+
+maskmovdqu  %xmm0, %xmm1
+
+maxpd       %xmm0, %xmm2
+maxpd       (%rax), %xmm2
+
+maxsd       %xmm0, %xmm2
+maxsd       (%rax), %xmm2
+
+minpd       %xmm0, %xmm2
+minpd       (%rax), %xmm2
+
+minsd       %xmm0, %xmm2
+minsd       (%rax), %xmm2
+
+movapd      %xmm0, %xmm2
+movapd      %xmm0, (%rax)
+movapd      (%rax), %xmm2
+
+movd        %eax, %xmm2
+movd        (%rax), %xmm2
+
+movd        %xmm0, %ecx
+movd        %xmm0, (%rax)
+
+movdqa      %xmm0, %xmm2
+movdqa      %xmm0, (%rax)
+movdqa      (%rax), %xmm2
+
+movdqu      %xmm0, %xmm2
+movdqu      %xmm0, (%rax)
+movdqu      (%rax), %xmm2
+
+movdq2q     %xmm0, %mm2
+
+movhpd      %xmm0, (%rax)
+movhpd      (%rax), %xmm2
+
+movlpd      %xmm0, (%rax)
+movlpd      (%rax), %xmm2
+
+movmskpd    %xmm0, %rcx
+
+movntdq     %xmm0, (%rax)
+movntpd     %xmm0, (%rax)
+
+movq        %xmm0, %xmm2
+
+movq        %rax, %xmm2
+movq        (%rax), %xmm2
+
+movq        %xmm0, %rcx
+movq        %xmm0, (%rax)
+
+movq2dq     %mm0, %xmm2
+
+movsd       %xmm0, %xmm2
+movsd       %xmm0, (%rax)
+movsd       (%rax), %xmm2
+
+movupd      %xmm0, %xmm2
+movupd      %xmm0, (%rax)
+movupd      (%rax), %xmm2
+
+mulpd       %xmm0, %xmm2
+mulpd       (%rax), %xmm2
+
+mulsd       %xmm0, %xmm2
+mulsd       (%rax), %xmm2
+
+orpd        %xmm0, %xmm2
+orpd        (%rax), %xmm2
+
+packssdw    %xmm0, %xmm2
+packssdw    (%rax), %xmm2
+
+packsswb    %xmm0, %xmm2
+packsswb    (%rax), %xmm2
+
+packuswb    %xmm0, %xmm2
+packuswb    (%rax), %xmm2
+
+paddb       %xmm0, %xmm2
+paddb       (%rax), %xmm2
+
+paddd       %xmm0, %xmm2
+paddd       (%rax), %xmm2
+
+paddq       %mm0, %mm2
+paddq       (%rax), %mm2
+
+paddq       %xmm0, %xmm2
+paddq       (%rax), %xmm2
+
+paddsb      %xmm0, %xmm2
+paddsb      (%rax), %xmm2
+
+paddsw      %xmm0, %xmm2
+paddsw      (%rax), %xmm2
+
+paddusb     %xmm0, %xmm2
+paddusb     (%rax), %xmm2
+
+paddusw     %xmm0, %xmm2
+paddusw     (%rax), %xmm2
+
+paddw       %xmm0, %xmm2
+paddw       (%rax), %xmm2
+
+pand        %xmm0, %xmm2
+pand        (%rax), %xmm2
+
+pandn       %xmm0, %xmm2
+pandn       (%rax), %xmm2
+
+pavgb       %xmm0, %xmm2
+pavgb       (%rax), %xmm2
+
+pavgw       %xmm0, %xmm2
+pavgw       (%rax), %xmm2
+
+pcmpeqb     %xmm0, %xmm2
+pcmpeqb     (%rax), %xmm2
+
+pcmpeqd     %xmm0, %xmm2
+pcmpeqd     (%rax), %xmm2
+
+pcmpeqw     %xmm0, %xmm2
+pcmpeqw     (%rax), %xmm2
+
+pcmpgtb     %xmm0, %xmm2
+pcmpgtb     (%rax), %xmm2
+
+pcmpgtd     %xmm0, %xmm2
+pcmpgtd     (%rax), %xmm2
+
+pcmpgtw     %xmm0, %xmm2
+pcmpgtw     (%rax), %xmm2
+
+pextrw      $1, %xmm0, %rcx
+
+pmaddwd     %xmm0, %xmm2
+pmaddwd     (%rax), %xmm2
+
+pmaxsw      %xmm0, %xmm2
+pmaxsw      (%rax), %xmm2
+
+pmaxub      %xmm0, %xmm2
+pmaxub      (%rax), %xmm2
+
+pminsw      %xmm0, %xmm2
+pminsw      (%rax), %xmm2
+
+pminub      %xmm0, %xmm2
+pminub      (%rax), %xmm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %xmm0, %xmm2
+pmulhuw     (%rax), %xmm2
+
+pmulhw      %xmm0, %xmm2
+pmulhw      (%rax), %xmm2
+
+pmullw      %xmm0, %xmm2
+pmullw      (%rax), %xmm2
+
+pmuludq     %mm0, %mm2
+pmuludq     (%rax), %mm2
+
+pmuludq     %xmm0, %xmm2
+pmuludq     (%rax), %xmm2
+
+por         %xmm0, %xmm2
+por         (%rax), %xmm2
+
+psadbw      %xmm0, %xmm2
+psadbw      (%rax), %xmm2
+
+pshufd      $1, %xmm0, %xmm2
+pshufd      $1, (%rax), %xmm2
+
+pshufhw     $1, %xmm0, %xmm2
+pshufhw     $1, (%rax), %xmm2
+
+pshuflw     $1, %xmm0, %xmm2
+pshuflw     $1, (%rax), %xmm2
+
+pslld       $1, %xmm2
+pslld       %xmm0, %xmm2
+pslld       (%rax), %xmm2
+
+pslldq      $1, %xmm2
+
+psllq       $1, %xmm2
+psllq       %xmm0, %xmm2
+psllq       (%rax), %xmm2
+
+psllw       $1, %xmm2
+psllw       %xmm0, %xmm2
+psllw       (%rax), %xmm2
+
+psrad       $1, %xmm2
+psrad       %xmm0, %xmm2
+psrad       (%rax), %xmm2
+
+psraw       $1, %xmm2
+psraw       %xmm0, %xmm2
+psraw       (%rax), %xmm2
+
+psrld       $1, %xmm2
+psrld       %xmm0, %xmm2
+psrld       (%rax), %xmm2
+
+psrldq      $1, %xmm2
+
+psrlq       $1, %xmm2
+psrlq       %xmm0, %xmm2
+psrlq       (%rax), %xmm2
+
+psrlw       $1, %xmm2
+psrlw       %xmm0, %xmm2
+psrlw       (%rax), %xmm2
+
+psubb       %xmm0, %xmm2
+psubb       (%rax), %xmm2
+
+psubd       %xmm0, %xmm2
+psubd       (%rax), %xmm2
+
+psubq       %mm0, %mm2
+psubq       (%rax), %mm2
+
+psubq       %xmm0, %xmm2
+psubq       (%rax), %xmm2
+
+psubsb      %xmm0, %xmm2
+psubsb      (%rax), %xmm2
+
+psubsw      %xmm0, %xmm2
+psubsw      (%rax), %xmm2
+
+psubusb     %xmm0, %xmm2
+psubusb     (%rax), %xmm2
+
+psubusw     %xmm0, %xmm2
+psubusw     (%rax), %xmm2
+
+psubw       %xmm0, %xmm2
+psubw       (%rax), %xmm2
+
+punpckhbw   %xmm0, %xmm2
+punpckhbw   (%rax), %xmm2
+
+punpckhdq   %xmm0, %xmm2
+punpckhdq   (%rax), %xmm2
+
+punpckhqdq  %xmm0, %xmm2
+punpckhqdq  (%rax), %xmm2
+
+punpckhwd   %xmm0, %xmm2
+punpckhwd   (%rax), %xmm2
+
+punpcklbw   %xmm0, %xmm2
+punpcklbw   (%rax), %xmm2
+
+punpckldq   %xmm0, %xmm2
+punpckldq   (%rax), %xmm2
+
+punpcklqdq  %xmm0, %xmm2
+punpcklqdq  (%rax), %xmm2
+
+punpcklwd   %xmm0, %xmm2
+punpcklwd   (%rax), %xmm2
+
+pxor        %xmm0, %xmm2
+pxor        (%rax), %xmm2
+
+shufpd      $1, %xmm0, %xmm2
+shufpd      $1, (%rax), %xmm2
+
+sqrtpd      %xmm0, %xmm2
+sqrtpd      (%rax), %xmm2
+
+sqrtsd      %xmm0, %xmm2
+sqrtsd      (%rax), %xmm2
+
+subpd       %xmm0, %xmm2
+subpd       (%rax), %xmm2
+
+subsd       %xmm0, %xmm2
+subsd       (%rax), %xmm2
+
+ucomisd     %xmm0, %xmm1
+ucomisd     (%rax), %xmm1
+
+unpckhpd    %xmm0, %xmm2
+unpckhpd    (%rax), %xmm2
+
+unpcklpd    %xmm0, %xmm2
+unpcklpd    (%rax), %xmm2
+
+xorpd       %xmm0, %xmm2
+xorpd       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  addpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  addsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  andnpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       andpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  andpd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00    *      *      *    clflush (%rax)
+# CHECK-NEXT:  1      3     1.00                       cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       comisd  %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  comisd  (%rax), %xmm1
+# CHECK-NEXT:  2      4     1.00                       cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  2      4     1.00                       cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  3      9     1.00    *                  cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  2      4     1.00                       cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  3      9     1.00    *                  cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  2      4     1.00                       cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  3      9     1.00    *                  cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  3      10    1.00    *                  cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  2      4     1.00                       cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  2      4     1.00                       cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  3      9     1.00    *                  cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  1      20    14.00                      divpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      26    14.00   *                  divpd   (%rax), %xmm2
+# CHECK-NEXT:  1      20    14.00                      divsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      25    14.00   *                  divsd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.50    *      *      *    lfence
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  1      3     1.00                       maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  maxpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  maxsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  minpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  minsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movapd  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movapd  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movapd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movd    %eax, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movd    %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movd    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movdqa  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movdqu  (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.67                       movdq2q %xmm0, %mm2
+# CHECK-NEXT:  2      1     1.00           *           movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movhpd  (%rax), %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movlpd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movntdq %xmm0, (%rax)
+# CHECK-NEXT:  2      1     1.00           *           movntpd %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movq    %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movq    %xmm0, %rcx
+# CHECK-NEXT:  2      1     1.00           *           movq    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movq2dq %mm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movsd   %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movupd  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movupd  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movupd  (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50                       mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      11    0.50    *                  mulpd   (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50                       mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       orpd    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  orpd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packssdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packsswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packuswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddq   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pand    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pand    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pandn   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pandn   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pavgb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pavgw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminub  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminub  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmullw  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmuludq %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmuludq (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmuludq (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       por     %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  por     (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  psadbw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       pslld   %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  pslld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslldq  $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psllq   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psllq   %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  psllq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psllw   %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  psllw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrad   %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  psrad   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psraw   %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  psraw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrld   %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  psrld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrldq  $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  psrlq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  psrlw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubq   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pxor    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pxor    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      16    14.00                      sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      22    14.00   *                  sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  1      16    14.00                      sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      21    14.00   *                  sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  subpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      8     1.00    *                  subsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  ucomisd (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  xorpd   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - HWDivider
+# CHECK-NEXT: [1] - HWFPDivider
+# CHECK-NEXT: [2] - HWPort0
+# CHECK-NEXT: [3] - HWPort1
+# CHECK-NEXT: [4] - HWPort2
+# CHECK-NEXT: [5] - HWPort3
+# CHECK-NEXT: [6] - HWPort4
+# CHECK-NEXT: [7] - HWPort5
+# CHECK-NEXT: [8] - HWPort6
+# CHECK-NEXT: [9] - HWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -     112.00 70.25  97.25  62.50  62.50  12.00  123.75 1.75   4.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        andnpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        andpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        andpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     0.25   1.25    -        clflush (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        comisd  %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        comisd  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    -      -        cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     1.00    -      -        cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      -      -        divpd   %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -     0.50   0.50    -      -      -      -        divpd   (%rax), %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      -      -        divsd   %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -     0.50   0.50    -      -      -      -        divsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -        lfence
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        maxpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        maxsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        minpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        minpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        minsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        minsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movapd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movapd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movapd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movd    %eax, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movd    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movd    %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movd    %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movdqa  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movdqu  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.83   0.83    -      -      -     0.33    -      -        movdq2q %xmm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movhpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movlpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntdq %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntpd %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movq    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq    %rax, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movq    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movq    %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movq    %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq2dq %mm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movsd   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movupd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movupd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movupd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        orpd    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        orpd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packssdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packsswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packuswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddusb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddusw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pand    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pand    (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pandn   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pandn   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pavgb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pavgw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminub  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmullw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmuludq %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmuludq (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmuludq (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        por     %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        por     (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psadbw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     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.00    -     0.50   0.50    -     1.00    -      -        pslld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pslldq  $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psllq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psllq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psllw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psllw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psrad   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psrad   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psraw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psraw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psrld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psrld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        psrldq  $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psrlq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        psrlw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubusb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubusw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pxor    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pxor    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      -      -        sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -     0.50   0.50    -      -      -      -        sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      -      -        sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -     0.50   0.50    -      -      -      -        sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        subpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        subpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        subsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        subsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        ucomisd (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        xorpd   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse3.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse3.s
new file mode 100644 (file)
index 0000000..4848513
--- /dev/null
@@ -0,0 +1,99 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -instruction-tables < %s | FileCheck %s
+
+addsubpd  %xmm0, %xmm2
+addsubpd  (%rax),  %xmm2
+
+addsubps  %xmm0, %xmm2
+addsubps  (%rax), %xmm2
+
+haddpd    %xmm0, %xmm2
+haddpd    (%rax), %xmm2
+
+haddps    %xmm0, %xmm2
+haddps    (%rax), %xmm2
+
+hsubpd    %xmm0, %xmm2
+hsubpd    (%rax), %xmm2
+
+hsubps    %xmm0, %xmm2
+hsubps    (%rax), %xmm2
+
+lddqu     (%rax), %xmm2
+
+movddup   %xmm0, %xmm2
+movddup   (%rax), %xmm2
+
+movshdup  %xmm0, %xmm2
+movshdup  (%rax), %xmm2
+
+movsldup  %xmm0, %xmm2
+movsldup  (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  addsubps        (%rax), %xmm2
+# CHECK-NEXT:  3      5     2.00                       haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  4      11    2.00    *                  haddpd  (%rax), %xmm2
+# CHECK-NEXT:  3      5     2.00                       haddps  %xmm0, %xmm2
+# CHECK-NEXT:  4      11    2.00    *                  haddps  (%rax), %xmm2
+# CHECK-NEXT:  3      5     2.00                       hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  4      11    2.00    *                  hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  3      5     2.00                       hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  4      11    2.00    *                  hsubps  (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  lddqu   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movddup %xmm0, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movddup (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movshdup        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movsldup        (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - HWDivider
+# CHECK-NEXT: [1] - HWFPDivider
+# CHECK-NEXT: [2] - HWPort0
+# CHECK-NEXT: [3] - HWPort1
+# CHECK-NEXT: [4] - HWPort2
+# CHECK-NEXT: [5] - HWPort3
+# CHECK-NEXT: [6] - HWPort4
+# CHECK-NEXT: [7] - HWPort5
+# CHECK-NEXT: [8] - HWPort6
+# CHECK-NEXT: [9] - HWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -      -     12.00  5.00   5.00    -     19.00   -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        addsubps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     2.00    -      -        haddpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        haddps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     2.00    -      -        haddps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     2.00    -      -        hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    -      -        hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -     2.00    -      -        hsubps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        lddqu   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movddup %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movddup (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movshdup        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movsldup        (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse41.s
new file mode 100644 (file)
index 0000000..74aaf32
--- /dev/null
@@ -0,0 +1,369 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -instruction-tables < %s | FileCheck %s
+
+blendpd     $11, %xmm0, %xmm2
+blendpd     $11, (%rax), %xmm2
+
+blendps     $11, %xmm0, %xmm2
+blendps     $11, (%rax), %xmm2
+
+blendvpd    %xmm0, %xmm2
+blendvpd    (%rax), %xmm2
+
+blendvps    %xmm0, %xmm2
+blendvps    (%rax), %xmm2
+
+dppd        $22, %xmm0, %xmm2
+dppd        $22, (%rax), %xmm2
+
+dpps        $22, %xmm0, %xmm2
+dpps        $22, (%rax), %xmm2
+
+extractps   $1, %xmm0, %rcx
+extractps   $1, %xmm0, (%rax)
+
+insertps    $1, %xmm0, %xmm2
+insertps    $1, (%rax), %xmm2
+
+movntdqa    (%rax), %xmm2
+
+mpsadbw     $1, %xmm0, %xmm2
+mpsadbw     $1, (%rax), %xmm2
+
+packusdw    %xmm0, %xmm2
+packusdw    (%rax), %xmm2
+
+pblendvb    %xmm0, %xmm2
+pblendvb    (%rax), %xmm2
+
+pblendw     $11, %xmm0, %xmm2
+pblendw     $11, (%rax), %xmm2
+
+pcmpeqq     %xmm0, %xmm2
+pcmpeqq     (%rax), %xmm2
+
+pextrb      $1, %xmm0, %ecx
+pextrb      $1, %xmm0, (%rax)
+
+pextrd      $1, %xmm0, %ecx
+pextrd      $1, %xmm0, (%rax)
+
+pextrq      $1, %xmm0, %rcx
+pextrq      $1, %xmm0, (%rax)
+
+pextrw      $1, %xmm0, (%rax)
+
+phminposuw  %xmm0, %xmm2
+phminposuw  (%rax), %xmm2
+
+pinsrb      $1, %eax, %xmm1
+pinsrb      $1, (%rax), %xmm1
+
+pinsrd      $1, %eax, %xmm1
+pinsrd      $1, (%rax), %xmm1
+
+pinsrq      $1, %rax, %xmm1
+pinsrq      $1, (%rax), %xmm1
+
+pmaxsb      %xmm0, %xmm2
+pmaxsb      (%rax), %xmm2
+
+pmaxsd      %xmm0, %xmm2
+pmaxsd      (%rax), %xmm2
+
+pmaxud      %xmm0, %xmm2
+pmaxud      (%rax), %xmm2
+
+pmaxuw      %xmm0, %xmm2
+pmaxuw      (%rax), %xmm2
+
+pminsb      %xmm0, %xmm2
+pminsb      (%rax), %xmm2
+
+pminsd      %xmm0, %xmm2
+pminsd      (%rax), %xmm2
+
+pminud      %xmm0, %xmm2
+pminud      (%rax), %xmm2
+
+pminuw      %xmm0, %xmm2
+pminuw      (%rax), %xmm2
+
+pmovsxbd    %xmm0, %xmm2
+pmovsxbd    (%rax), %xmm2
+
+pmovsxbq    %xmm0, %xmm2
+pmovsxbq    (%rax), %xmm2
+
+pmovsxbw    %xmm0, %xmm2
+pmovsxbw    (%rax), %xmm2
+
+pmovsxdq    %xmm0, %xmm2
+pmovsxdq    (%rax), %xmm2
+
+pmovsxwd    %xmm0, %xmm2
+pmovsxwd    (%rax), %xmm2
+
+pmovsxwq    %xmm0, %xmm2
+pmovsxwq    (%rax), %xmm2
+
+pmovzxbd    %xmm0, %xmm2
+pmovzxbd    (%rax), %xmm2
+
+pmovzxbq    %xmm0, %xmm2
+pmovzxbq    (%rax), %xmm2
+
+pmovzxbw    %xmm0, %xmm2
+pmovzxbw    (%rax), %xmm2
+
+pmovzxdq    %xmm0, %xmm2
+pmovzxdq    (%rax), %xmm2
+
+pmovzxwd    %xmm0, %xmm2
+pmovzxwd    (%rax), %xmm2
+
+pmovzxwq    %xmm0, %xmm2
+pmovzxwq    (%rax), %xmm2
+
+pmuldq      %xmm0, %xmm2
+pmuldq      (%rax), %xmm2
+
+pmulld      %xmm0, %xmm2
+pmulld      (%rax), %xmm2
+
+ptest       %xmm0, %xmm1
+ptest       (%rax), %xmm1
+
+roundpd     $1, %xmm0, %xmm2
+roundpd     $1, (%rax), %xmm2
+
+roundps     $1, %xmm0, %xmm2
+roundps     $1, (%rax), %xmm2
+
+roundsd     $1, %xmm0, %xmm2
+roundsd     $1, (%rax), %xmm2
+
+roundss     $1, %xmm0, %xmm2
+roundss     $1, (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.33                       blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     2.00    *                  blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     2.00    *                  blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  3      9     1.00                       dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  4      15    1.00    *                  dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  4      14    2.00                       dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  5      20    2.00    *                  dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  3      7     2.00                       mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      13    2.00    *                  mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packusdw        (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     2.00    *                  pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      2     1.00                       pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      2     1.00                       pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  3      2     1.00           *           pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  3      2     1.00           *           pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      5     1.00                       phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     2.00                       pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     2.00                       pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.50                       pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminud  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  2      10    2.00                       pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  3      16    2.00    *                  pmulld  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       ptest   %xmm0, %xmm1
+# CHECK-NEXT:  3      8     1.00    *                  ptest   (%rax), %xmm1
+# CHECK-NEXT:  1      6     0.50                       roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      12    2.00    *                  roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50                       roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      12    2.00    *                  roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50                       roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      12    2.00    *                  roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50                       roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      12    2.00    *                  roundss $1, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - HWDivider
+# CHECK-NEXT: [1] - HWFPDivider
+# CHECK-NEXT: [2] - HWPort0
+# CHECK-NEXT: [3] - HWPort1
+# CHECK-NEXT: [4] - HWPort2
+# CHECK-NEXT: [5] - HWPort3
+# CHECK-NEXT: [6] - HWPort4
+# CHECK-NEXT: [7] - HWPort5
+# CHECK-NEXT: [8] - HWPort6
+# CHECK-NEXT: [9] - HWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     23.33  22.33  25.67  25.67  5.00   80.33   -     1.67
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -     1.00    -      -        dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -     1.00    -      -        dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -     1.00    -      -        dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00   0.50   0.50    -     1.00    -      -        dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     2.00    -      -        mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     2.00    -      -        mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packusdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminud  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pminuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.00    -      -      -      -      -      -      -        pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.00    -     0.50   0.50    -      -      -      -        pmulld  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        ptest   %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        ptest   (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00   0.50   0.50    -      -      -      -        roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00   0.50   0.50    -      -      -      -        roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00   0.50   0.50    -      -      -      -        roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     2.00   0.50   0.50    -      -      -      -        roundss $1, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-sse42.s
new file mode 100644 (file)
index 0000000..2d47806
--- /dev/null
@@ -0,0 +1,102 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -instruction-tables < %s | FileCheck %s
+
+crc32b      %al, %ecx
+crc32b      (%rax), %ecx
+
+crc32l      %eax, %ecx
+crc32l      (%rax), %ecx
+
+crc32w      %ax, %ecx
+crc32w      (%rax), %ecx
+
+crc32b      %al, %rcx
+crc32b      (%rax), %rcx
+
+crc32q      %rax, %rcx
+crc32q      (%rax), %rcx
+
+pcmpestri   $1, %xmm0, %xmm2
+pcmpestri   $1, (%rax), %xmm2
+
+pcmpestrm   $1, %xmm0, %xmm2
+pcmpestrm   $1, (%rax), %xmm2
+
+pcmpistri   $1, %xmm0, %xmm2
+pcmpistri   $1, (%rax), %xmm2
+
+pcmpistrm   $1, %xmm0, %xmm2
+pcmpistrm   $1, (%rax), %xmm2
+
+pcmpgtq     %xmm0, %xmm2
+pcmpgtq     (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32b  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32l  %eax, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32l  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32w  %ax, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32w  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %rcx
+# CHECK-NEXT:  2      8     1.00    *                  crc32b  (%rax), %rcx
+# CHECK-NEXT:  1      3     1.00                       crc32q  %rax, %rcx
+# CHECK-NEXT:  2      8     1.00    *                  crc32q  (%rax), %rcx
+# CHECK-NEXT:  8      18    4.00                       pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  9      24    4.00    *                  pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  9      19    4.00                       pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  10     25    4.00    *                  pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  3      11    3.00                       pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      17    3.00    *                  pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  3      11    3.00                       pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      17    3.00    *                  pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pcmpgtq (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - HWDivider
+# CHECK-NEXT: [1] - HWFPDivider
+# CHECK-NEXT: [2] - HWPort0
+# CHECK-NEXT: [3] - HWPort1
+# CHECK-NEXT: [4] - HWPort2
+# CHECK-NEXT: [5] - HWPort3
+# CHECK-NEXT: [6] - HWPort4
+# CHECK-NEXT: [7] - HWPort5
+# CHECK-NEXT: [8] - HWPort6
+# CHECK-NEXT: [9] - HWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     31.67  11.67  5.00   5.00    -     13.67  1.00    -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32b  %al, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32b  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32l  %eax, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32l  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32w  %ax, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32w  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32b  %al, %rcx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32b  (%rax), %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32q  %rax, %rcx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32q  (%rax), %rcx
+# CHECK-NEXT:  -      -     4.25   0.25    -      -      -     3.25   0.25    -        pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     4.25   0.25   0.50   0.50    -     3.25   0.25    -        pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     4.58   0.58    -      -      -     3.58   0.25    -        pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     4.58   0.58   0.50   0.50    -     3.58   0.25    -        pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.00    -      -      -      -      -      -      -        pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.00    -     0.50   0.50    -      -      -      -        pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.00    -      -      -      -      -      -      -        pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.00    -     0.50   0.50    -      -      -      -        pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpgtq (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-ssse3.s
new file mode 100644 (file)
index 0000000..3e53969
--- /dev/null
@@ -0,0 +1,256 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -instruction-tables < %s | FileCheck %s
+
+pabsb       %mm0, %mm2
+pabsb       (%rax), %mm2
+
+pabsb       %xmm0, %xmm2
+pabsb       (%rax), %xmm2
+
+pabsd       %mm0, %mm2
+pabsd       (%rax), %mm2
+
+pabsd       %xmm0, %xmm2
+pabsd       (%rax), %xmm2
+
+pabsw       %mm0, %mm2
+pabsw       (%rax), %mm2
+
+pabsw       %xmm0, %xmm2
+pabsw       (%rax), %xmm2
+
+palignr     $1, %mm0, %mm2
+palignr     $1, (%rax), %mm2
+
+palignr     $1, %xmm0, %xmm2
+palignr     $1, (%rax), %xmm2
+
+phaddd      %mm0, %mm2
+phaddd      (%rax), %mm2
+
+phaddd      %xmm0, %xmm2
+phaddd      (%rax), %xmm2
+
+phaddsw     %mm0, %mm2
+phaddsw     (%rax), %mm2
+
+phaddsw     %xmm0, %xmm2
+phaddsw     (%rax), %xmm2
+
+phaddw      %mm0, %mm2
+phaddw      (%rax), %mm2
+
+phaddw      %xmm0, %xmm2
+phaddw      (%rax), %xmm2
+
+phsubd      %mm0, %mm2
+phsubd      (%rax), %mm2
+
+phsubd      %xmm0, %xmm2
+phsubd      (%rax), %xmm2
+
+phsubsw     %mm0, %mm2
+phsubsw     (%rax), %mm2
+
+phsubsw     %xmm0, %xmm2
+phsubsw     (%rax), %xmm2
+
+phsubw      %mm0, %mm2
+phsubw      (%rax), %mm2
+
+phsubw      %xmm0, %xmm2
+phsubw      (%rax), %xmm2
+
+pmaddubsw   %mm0, %mm2
+pmaddubsw   (%rax), %mm2
+
+pmaddubsw   %xmm0, %xmm2
+pmaddubsw   (%rax), %xmm2
+
+pmulhrsw    %mm0, %mm2
+pmulhrsw    (%rax), %mm2
+
+pmulhrsw    %xmm0, %xmm2
+pmulhrsw    (%rax), %xmm2
+
+pshufb      %mm0, %mm2
+pshufb      (%rax), %mm2
+
+pshufb      %xmm0, %xmm2
+pshufb      (%rax), %xmm2
+
+psignb      %mm0, %mm2
+psignb      (%rax), %mm2
+
+psignb      %xmm0, %xmm2
+psignb      (%rax), %xmm2
+
+psignd      %mm0, %mm2
+psignd      (%rax), %mm2
+
+psignd      %xmm0, %xmm2
+psignd      (%rax), %xmm2
+
+psignw      %mm0, %mm2
+psignw      (%rax), %mm2
+
+psignw      %xmm0, %xmm2
+psignw      (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.50                       pabsb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  palignr $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddd  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddd  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddsw %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddsw (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddw  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddw  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddw  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubd  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubd  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubsw %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubsw (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubw  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubw  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubw  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignd  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignw  (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - HWDivider
+# CHECK-NEXT: [1] - HWFPDivider
+# CHECK-NEXT: [2] - HWPort0
+# CHECK-NEXT: [3] - HWPort1
+# CHECK-NEXT: [4] - HWPort2
+# CHECK-NEXT: [5] - HWPort3
+# CHECK-NEXT: [6] - HWPort4
+# CHECK-NEXT: [7] - HWPort5
+# CHECK-NEXT: [8] - HWPort6
+# CHECK-NEXT: [9] - HWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     8.00   24.00  16.00  16.00   -     80.00   -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pabsw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        palignr $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        palignr $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phaddw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     2.50    -      -        phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     2.50    -      -        phsubw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psignw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psignw  (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse1.s
new file mode 100644 (file)
index 0000000..6323078
--- /dev/null
@@ -0,0 +1,462 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=slm -instruction-tables < %s | FileCheck %s
+
+addps       %xmm0, %xmm2
+addps       (%rax), %xmm2
+
+addss       %xmm0, %xmm2
+addss       (%rax), %xmm2
+
+andnps      %xmm0, %xmm2
+andnps      (%rax), %xmm2
+
+andps       %xmm0, %xmm2
+andps       (%rax), %xmm2
+
+cmpps       $0, %xmm0, %xmm2
+cmpps       $0, (%rax), %xmm2
+
+cmpss       $0, %xmm0, %xmm2
+cmpss       $0, (%rax), %xmm2
+
+comiss      %xmm0, %xmm1
+comiss      (%rax), %xmm1
+
+cvtpi2ps    %mm0, %xmm2
+cvtpi2ps    (%rax), %xmm2
+
+cvtps2pi    %xmm0, %mm2
+cvtps2pi    (%rax), %mm2
+
+cvtsi2ss    %ecx, %xmm2
+cvtsi2ss    %rcx, %xmm2
+cvtsi2ss    (%rax), %xmm2
+cvtsi2ss    (%rax), %xmm2
+
+cvtss2si    %xmm0, %ecx
+cvtss2si    %xmm0, %rcx
+cvtss2si    (%rax), %ecx
+cvtss2si    (%rax), %rcx
+
+cvttps2pi   %xmm0, %mm2
+cvttps2pi   (%rax), %mm2
+
+cvttss2si   %xmm0, %ecx
+cvttss2si   %xmm0, %rcx
+cvttss2si   (%rax), %ecx
+cvttss2si   (%rax), %rcx
+
+divps       %xmm0, %xmm2
+divps       (%rax), %xmm2
+
+divss       %xmm0, %xmm2
+divss       (%rax), %xmm2
+
+ldmxcsr     (%rax)
+
+maskmovq    %mm0, %mm1
+
+maxps       %xmm0, %xmm2
+maxps       (%rax), %xmm2
+
+maxss       %xmm0, %xmm2
+maxss       (%rax), %xmm2
+
+minps       %xmm0, %xmm2
+minps       (%rax), %xmm2
+
+minss       %xmm0, %xmm2
+minss       (%rax), %xmm2
+
+movaps      %xmm0, %xmm2
+movaps      %xmm0, (%rax)
+movaps      (%rax), %xmm2
+
+movhlps     %xmm0, %xmm2
+movlhps     %xmm0, %xmm2
+
+movhps      %xmm0, (%rax)
+movhps      (%rax), %xmm2
+
+movlps      %xmm0, (%rax)
+movlps      (%rax), %xmm2
+
+movmskps    %xmm0, %rcx
+
+movntps     %xmm0, (%rax)
+movntq      %mm0, (%rax)
+
+movss       %xmm0, %xmm2
+movss       %xmm0, (%rax)
+movss       (%rax), %xmm2
+
+movups      %xmm0, %xmm2
+movups      %xmm0, (%rax)
+movups      (%rax), %xmm2
+
+mulps       %xmm0, %xmm2
+mulps       (%rax), %xmm2
+
+mulss       %xmm0, %xmm2
+mulss       (%rax), %xmm2
+
+orps        %xmm0, %xmm2
+orps        (%rax), %xmm2
+
+pavgb       %mm0, %mm2
+pavgb       (%rax), %mm2
+
+pavgw       %mm0, %mm2
+pavgw       (%rax), %mm2
+
+pextrw      $1, %mm0, %rcx
+
+pinsrw      $1, %rax, %mm2
+pinsrw      $1, (%rax), %mm2
+
+pmaxsw      %mm0, %mm2
+pmaxsw      (%rax), %mm2
+
+pmaxub      %mm0, %mm2
+pmaxub      (%rax), %mm2
+
+pminsw      %mm0, %mm2
+pminsw      (%rax), %mm2
+
+pminub      %mm0, %mm2
+pminub      (%rax), %mm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %mm0, %mm2
+pmulhuw     (%rax), %mm2
+
+prefetcht0  (%rax)
+prefetcht1  (%rax)
+prefetcht2  (%rax)
+prefetchnta (%rax)
+
+psadbw      %mm0, %mm2
+psadbw      (%rax), %mm2
+
+pshufw      $1, %mm0, %mm2
+pshufw      $1, (%rax), %mm2
+
+rcpps       %xmm0, %xmm2
+rcpps       (%rax), %xmm2
+
+rcpss       %xmm0, %xmm2
+rcpss       (%rax), %xmm2
+
+rsqrtps     %xmm0, %xmm2
+rsqrtps     (%rax), %xmm2
+
+rsqrtss     %xmm0, %xmm2
+rsqrtss     (%rax), %xmm2
+
+sfence
+
+shufps      $1, %xmm0, %xmm2
+shufps      $1, (%rax), %xmm2
+
+sqrtps      %xmm0, %xmm2
+sqrtps      (%rax), %xmm2
+
+sqrtss      %xmm0, %xmm2
+sqrtss      (%rax), %xmm2
+
+stmxcsr     (%rax)
+
+subps       %xmm0, %xmm2
+subps       (%rax), %xmm2
+
+subss       %xmm0, %xmm2
+subss       (%rax), %xmm2
+
+ucomiss     %xmm0, %xmm1
+ucomiss     (%rax), %xmm1
+
+unpckhps    %xmm0, %xmm2
+unpckhps    (%rax), %xmm2
+
+unpcklps    %xmm0, %xmm2
+unpcklps    (%rax), %xmm2
+
+xorps       %xmm0, %xmm2
+xorps       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addps   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  addps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addss   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  addss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       andnps  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  andnps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       andps   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  andps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       comiss  %xmm0, %xmm1
+# CHECK-NEXT:  1      6     1.00    *                  comiss  (%rax), %xmm1
+# CHECK-NEXT:  1      4     0.50                       cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  1      4     0.50                       cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  1      4     0.50                       cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  1      7     1.00    *                  cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  1      7     1.00    *                  cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  1      4     0.50                       cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  1      4     0.50                       cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  1      4     0.50                       cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  1      7     1.00    *                  cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  1      7     1.00    *                  cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  1      39    39.00                      divps   %xmm0, %xmm2
+# CHECK-NEXT:  1      42    39.00   *                  divps   (%rax), %xmm2
+# CHECK-NEXT:  1      19    17.00                      divss   %xmm0, %xmm2
+# CHECK-NEXT:  1      22    17.00   *                  divss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00    *      *      *    ldmxcsr (%rax)
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovq        %mm0, %mm1
+# CHECK-NEXT:  1      3     1.00                       maxps   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  maxps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxss   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  maxss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minps   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  minps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minss   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  minss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movaps  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movaps  %xmm0, (%rax)
+# CHECK-NEXT:  1      3     1.00    *                  movaps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movhlps %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movlhps %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movhps  %xmm0, (%rax)
+# CHECK-NEXT:  1      4     1.00    *                  movhps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movlps  %xmm0, (%rax)
+# CHECK-NEXT:  1      4     1.00    *                  movlps  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       movmskps        %xmm0, %ecx
+# CHECK-NEXT:  1      1     1.00           *           movntps %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00    *      *      *    movntq  %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movss   %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movss   %xmm0, (%rax)
+# CHECK-NEXT:  1      3     1.00    *                  movss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movups  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movups  %xmm0, (%rax)
+# CHECK-NEXT:  1      3     1.00    *                  movups  (%rax), %xmm2
+# CHECK-NEXT:  1      5     2.00                       mulps   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     2.00    *                  mulps   (%rax), %xmm2
+# CHECK-NEXT:  1      5     2.00                       mulss   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     2.00    *                  mulss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       orps    %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  orps    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgb   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pavgb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pavgw   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pavgw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  1      1     1.00                       pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pmaxub  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pmaxub  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pminsw  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pminsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pminub  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pminub  (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      4     1.00                       pmulhuw %mm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  pmulhuw (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00    *      *           prefetcht0      (%rax)
+# CHECK-NEXT:  1      3     1.00    *      *           prefetcht1      (%rax)
+# CHECK-NEXT:  1      3     1.00    *      *           prefetcht2      (%rax)
+# CHECK-NEXT:  1      3     1.00    *      *           prefetchnta     (%rax)
+# CHECK-NEXT:  1      4     1.00                       psadbw  %mm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  psadbw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  rcpps   (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  rcpss   (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00    *      *      *    sfence
+# CHECK-NEXT:  1      1     1.00                       shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      41    40.00                      sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  1      44    40.00   *                  sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  1      20    20.00                      sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  1      23    20.00   *                  sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00    *      *      *    stmxcsr (%rax)
+# CHECK-NEXT:  1      3     1.00                       subps   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  subps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subss   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  subss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  1      6     1.00    *                  ucomiss (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       xorps   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  xorps   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SLMDivider
+# CHECK-NEXT: [1] - SLMFPDivider
+# CHECK-NEXT: [2] - SLMFPMultiplier
+# CHECK-NEXT: [3] - SLM_FPC_RSV0
+# CHECK-NEXT: [4] - SLM_FPC_RSV1
+# CHECK-NEXT: [5] - SLM_IEC_RSV0
+# CHECK-NEXT: [6] - SLM_IEC_RSV1
+# CHECK-NEXT: [7] - SLM_MEC_RSV
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
+# CHECK-NEXT:  -     232.00 8.00   62.50  47.50  2.50   2.50   67.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]     Instructions:
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      addps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    addps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      addss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    addss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      andnps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    andnps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      andps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    andps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      comiss  %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    comiss  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  -     39.00   -     1.00    -      -      -      -      divps   %xmm0, %xmm2
+# CHECK-NEXT:  -     39.00   -     1.00    -      -      -     1.00    divps   (%rax), %xmm2
+# CHECK-NEXT:  -     17.00   -     1.00    -      -      -      -      divss   %xmm0, %xmm2
+# CHECK-NEXT:  -     17.00   -     1.00    -      -      -     1.00    divss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    ldmxcsr (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      maskmovq        %mm0, %mm1
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      maxps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    maxps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      maxss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    maxss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      minps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    minps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      minss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    minss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movaps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movaps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movaps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      movhlps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      movlhps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movhps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    movhps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movlps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    movlps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      movmskps        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movntps %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movntq  %mm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      movss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movss   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movups  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movups  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movups  (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -      -      mulps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -     1.00    mulps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -      -      mulss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -     1.00    mulss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      orps    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    orps    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pavgb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pavgb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pavgw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pavgw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pmaxub  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pmaxub  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pminsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pminsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pminub  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pminub  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmulhuw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmulhuw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    prefetcht0      (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    prefetcht1      (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    prefetcht2      (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    prefetchnta     (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psadbw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psadbw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    rcpps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    rcpss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    sfence
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     40.00   -     1.00    -      -      -      -      sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  -     40.00   -     1.00    -      -      -     1.00    sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  -     20.00   -     1.00    -      -      -      -      sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  -     20.00   -     1.00    -      -      -     1.00    sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    stmxcsr (%rax)
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      subps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    subps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      subss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    subss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    ucomiss (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      xorps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    xorps   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse2.s
new file mode 100644 (file)
index 0000000..a672450
--- /dev/null
@@ -0,0 +1,950 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=slm -instruction-tables < %s | FileCheck %s
+
+addpd       %xmm0, %xmm2
+addpd       (%rax), %xmm2
+
+addsd       %xmm0, %xmm2
+addsd       (%rax), %xmm2
+
+addsubpd    %xmm0, %xmm2
+addsubpd    (%rax), %xmm2
+
+andnpd      %xmm0, %xmm2
+andnpd      (%rax), %xmm2
+
+andpd       %xmm0, %xmm2
+andpd       (%rax), %xmm2
+
+clflush     (%rax)
+
+cmppd       $0, %xmm0, %xmm2
+cmppd       $0, (%rax), %xmm2
+
+cmpsd       $0, %xmm0, %xmm2
+cmpsd       $0, (%rax), %xmm2
+
+comisd      %xmm0, %xmm1
+comisd      (%rax), %xmm1
+
+cvtdq2pd    %xmm0, %xmm2
+cvtdq2pd    (%rax), %xmm2
+
+cvtdq2ps    %xmm0, %xmm2
+cvtdq2ps    (%rax), %xmm2
+
+cvtpd2dq    %xmm0, %xmm2
+cvtpd2dq    (%rax), %xmm2
+
+cvtpd2pi    %xmm0, %mm2
+cvtpd2pi    (%rax), %mm2
+
+cvtpd2ps    %xmm0, %xmm2
+cvtpd2ps    (%rax), %xmm2
+
+cvtpi2pd    %mm0, %xmm2
+cvtpi2pd    (%rax), %xmm2
+
+cvtps2dq    %xmm0, %xmm2
+cvtps2dq    (%rax), %xmm2
+
+cvtps2pd    %xmm0, %xmm2
+cvtps2pd    (%rax), %xmm2
+
+cvtsd2si    %xmm0, %ecx
+cvtsd2si    %xmm0, %rcx
+cvtsd2si    (%rax), %ecx
+cvtsd2si    (%rax), %rcx
+
+cvtsd2ss    %xmm0, %xmm2
+cvtsd2ss    (%rax), %xmm2
+
+cvtsi2sd    %ecx, %xmm2
+cvtsi2sd    %rcx, %xmm2
+cvtsi2sd    (%rax), %xmm2
+cvtsi2sd    (%rax), %xmm2
+
+cvtss2sd    %xmm0, %xmm2
+cvtss2sd    (%rax), %xmm2
+
+cvttpd2dq   %xmm0, %xmm2
+cvttpd2dq   (%rax), %xmm2
+
+cvttpd2pi   %xmm0, %mm2
+cvttpd2pi   (%rax), %mm2
+
+cvttps2dq   %xmm0, %xmm2
+cvttps2dq   (%rax), %xmm2
+
+cvttsd2si   %xmm0, %ecx
+cvttsd2si   %xmm0, %rcx
+cvttsd2si   (%rax), %ecx
+cvttsd2si   (%rax), %rcx
+
+divpd       %xmm0, %xmm2
+divpd       (%rax), %xmm2
+
+divsd       %xmm0, %xmm2
+divsd       (%rax), %xmm2
+
+lfence
+
+maskmovdqu  %xmm0, %xmm1
+
+maxpd       %xmm0, %xmm2
+maxpd       (%rax), %xmm2
+
+maxsd       %xmm0, %xmm2
+maxsd       (%rax), %xmm2
+
+minpd       %xmm0, %xmm2
+minpd       (%rax), %xmm2
+
+minsd       %xmm0, %xmm2
+minsd       (%rax), %xmm2
+
+movapd      %xmm0, %xmm2
+movapd      %xmm0, (%rax)
+movapd      (%rax), %xmm2
+
+movd        %eax, %xmm2
+movd        (%rax), %xmm2
+
+movd        %xmm0, %ecx
+movd        %xmm0, (%rax)
+
+movdqa      %xmm0, %xmm2
+movdqa      %xmm0, (%rax)
+movdqa      (%rax), %xmm2
+
+movdqu      %xmm0, %xmm2
+movdqu      %xmm0, (%rax)
+movdqu      (%rax), %xmm2
+
+movdq2q     %xmm0, %mm2
+
+movhpd      %xmm0, (%rax)
+movhpd      (%rax), %xmm2
+
+movlpd      %xmm0, (%rax)
+movlpd      (%rax), %xmm2
+
+movmskpd    %xmm0, %rcx
+
+movntdq     %xmm0, (%rax)
+movntpd     %xmm0, (%rax)
+
+movq        %xmm0, %xmm2
+
+movq        %rax, %xmm2
+movq        (%rax), %xmm2
+
+movq        %xmm0, %rcx
+movq        %xmm0, (%rax)
+
+movq2dq     %mm0, %xmm2
+
+movsd       %xmm0, %xmm2
+movsd       %xmm0, (%rax)
+movsd       (%rax), %xmm2
+
+movupd      %xmm0, %xmm2
+movupd      %xmm0, (%rax)
+movupd      (%rax), %xmm2
+
+mulpd       %xmm0, %xmm2
+mulpd       (%rax), %xmm2
+
+mulsd       %xmm0, %xmm2
+mulsd       (%rax), %xmm2
+
+orpd        %xmm0, %xmm2
+orpd        (%rax), %xmm2
+
+packssdw    %xmm0, %xmm2
+packssdw    (%rax), %xmm2
+
+packsswb    %xmm0, %xmm2
+packsswb    (%rax), %xmm2
+
+packuswb    %xmm0, %xmm2
+packuswb    (%rax), %xmm2
+
+paddb       %xmm0, %xmm2
+paddb       (%rax), %xmm2
+
+paddd       %xmm0, %xmm2
+paddd       (%rax), %xmm2
+
+paddq       %mm0, %mm2
+paddq       (%rax), %mm2
+
+paddq       %xmm0, %xmm2
+paddq       (%rax), %xmm2
+
+paddsb      %xmm0, %xmm2
+paddsb      (%rax), %xmm2
+
+paddsw      %xmm0, %xmm2
+paddsw      (%rax), %xmm2
+
+paddusb     %xmm0, %xmm2
+paddusb     (%rax), %xmm2
+
+paddusw     %xmm0, %xmm2
+paddusw     (%rax), %xmm2
+
+paddw       %xmm0, %xmm2
+paddw       (%rax), %xmm2
+
+pand        %xmm0, %xmm2
+pand        (%rax), %xmm2
+
+pandn       %xmm0, %xmm2
+pandn       (%rax), %xmm2
+
+pavgb       %xmm0, %xmm2
+pavgb       (%rax), %xmm2
+
+pavgw       %xmm0, %xmm2
+pavgw       (%rax), %xmm2
+
+pcmpeqb     %xmm0, %xmm2
+pcmpeqb     (%rax), %xmm2
+
+pcmpeqd     %xmm0, %xmm2
+pcmpeqd     (%rax), %xmm2
+
+pcmpeqw     %xmm0, %xmm2
+pcmpeqw     (%rax), %xmm2
+
+pcmpgtb     %xmm0, %xmm2
+pcmpgtb     (%rax), %xmm2
+
+pcmpgtd     %xmm0, %xmm2
+pcmpgtd     (%rax), %xmm2
+
+pcmpgtw     %xmm0, %xmm2
+pcmpgtw     (%rax), %xmm2
+
+pextrw      $1, %xmm0, %rcx
+
+pmaddwd     %xmm0, %xmm2
+pmaddwd     (%rax), %xmm2
+
+pmaxsw      %xmm0, %xmm2
+pmaxsw      (%rax), %xmm2
+
+pmaxub      %xmm0, %xmm2
+pmaxub      (%rax), %xmm2
+
+pminsw      %xmm0, %xmm2
+pminsw      (%rax), %xmm2
+
+pminub      %xmm0, %xmm2
+pminub      (%rax), %xmm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %xmm0, %xmm2
+pmulhuw     (%rax), %xmm2
+
+pmulhw      %xmm0, %xmm2
+pmulhw      (%rax), %xmm2
+
+pmullw      %xmm0, %xmm2
+pmullw      (%rax), %xmm2
+
+pmuludq     %mm0, %mm2
+pmuludq     (%rax), %mm2
+
+pmuludq     %xmm0, %xmm2
+pmuludq     (%rax), %xmm2
+
+por         %xmm0, %xmm2
+por         (%rax), %xmm2
+
+psadbw      %xmm0, %xmm2
+psadbw      (%rax), %xmm2
+
+pshufd      $1, %xmm0, %xmm2
+pshufd      $1, (%rax), %xmm2
+
+pshufhw     $1, %xmm0, %xmm2
+pshufhw     $1, (%rax), %xmm2
+
+pshuflw     $1, %xmm0, %xmm2
+pshuflw     $1, (%rax), %xmm2
+
+pslld       $1, %xmm2
+pslld       %xmm0, %xmm2
+pslld       (%rax), %xmm2
+
+pslldq      $1, %xmm2
+
+psllq       $1, %xmm2
+psllq       %xmm0, %xmm2
+psllq       (%rax), %xmm2
+
+psllw       $1, %xmm2
+psllw       %xmm0, %xmm2
+psllw       (%rax), %xmm2
+
+psrad       $1, %xmm2
+psrad       %xmm0, %xmm2
+psrad       (%rax), %xmm2
+
+psraw       $1, %xmm2
+psraw       %xmm0, %xmm2
+psraw       (%rax), %xmm2
+
+psrld       $1, %xmm2
+psrld       %xmm0, %xmm2
+psrld       (%rax), %xmm2
+
+psrldq      $1, %xmm2
+
+psrlq       $1, %xmm2
+psrlq       %xmm0, %xmm2
+psrlq       (%rax), %xmm2
+
+psrlw       $1, %xmm2
+psrlw       %xmm0, %xmm2
+psrlw       (%rax), %xmm2
+
+psubb       %xmm0, %xmm2
+psubb       (%rax), %xmm2
+
+psubd       %xmm0, %xmm2
+psubd       (%rax), %xmm2
+
+psubq       %mm0, %mm2
+psubq       (%rax), %mm2
+
+psubq       %xmm0, %xmm2
+psubq       (%rax), %xmm2
+
+psubsb      %xmm0, %xmm2
+psubsb      (%rax), %xmm2
+
+psubsw      %xmm0, %xmm2
+psubsw      (%rax), %xmm2
+
+psubusb     %xmm0, %xmm2
+psubusb     (%rax), %xmm2
+
+psubusw     %xmm0, %xmm2
+psubusw     (%rax), %xmm2
+
+psubw       %xmm0, %xmm2
+psubw       (%rax), %xmm2
+
+punpckhbw   %xmm0, %xmm2
+punpckhbw   (%rax), %xmm2
+
+punpckhdq   %xmm0, %xmm2
+punpckhdq   (%rax), %xmm2
+
+punpckhqdq  %xmm0, %xmm2
+punpckhqdq  (%rax), %xmm2
+
+punpckhwd   %xmm0, %xmm2
+punpckhwd   (%rax), %xmm2
+
+punpcklbw   %xmm0, %xmm2
+punpcklbw   (%rax), %xmm2
+
+punpckldq   %xmm0, %xmm2
+punpckldq   (%rax), %xmm2
+
+punpcklqdq  %xmm0, %xmm2
+punpcklqdq  (%rax), %xmm2
+
+punpcklwd   %xmm0, %xmm2
+punpcklwd   (%rax), %xmm2
+
+pxor        %xmm0, %xmm2
+pxor        (%rax), %xmm2
+
+shufpd      $1, %xmm0, %xmm2
+shufpd      $1, (%rax), %xmm2
+
+sqrtpd      %xmm0, %xmm2
+sqrtpd      (%rax), %xmm2
+
+sqrtsd      %xmm0, %xmm2
+sqrtsd      (%rax), %xmm2
+
+subpd       %xmm0, %xmm2
+subpd       (%rax), %xmm2
+
+subsd       %xmm0, %xmm2
+subsd       (%rax), %xmm2
+
+ucomisd     %xmm0, %xmm1
+ucomisd     (%rax), %xmm1
+
+unpckhpd    %xmm0, %xmm2
+unpckhpd    (%rax), %xmm2
+
+unpcklpd    %xmm0, %xmm2
+unpcklpd    (%rax), %xmm2
+
+xorpd       %xmm0, %xmm2
+xorpd       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  addpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  addsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  andnpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       andpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  andpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00    *      *      *    clflush (%rax)
+# CHECK-NEXT:  1      3     1.00                       cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       comisd  %xmm0, %xmm1
+# CHECK-NEXT:  1      6     1.00    *                  comisd  (%rax), %xmm1
+# CHECK-NEXT:  1      4     0.50                       cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  1      4     0.50                       cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  1      4     0.50                       cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  1      7     1.00    *                  cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  1      7     1.00    *                  cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  1      4     0.50                       cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  1      4     0.50                       cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  1      4     0.50                       cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  1      7     1.00    *                  cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  1      7     1.00    *                  cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  1      69    69.00                      divpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      72    69.00   *                  divpd   (%rax), %xmm2
+# CHECK-NEXT:  1      34    32.00                      divsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      37    32.00   *                  divsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00    *      *      *    lfence
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  1      3     1.00                       maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  maxpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  maxsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  minpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  minsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movapd  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movapd  %xmm0, (%rax)
+# CHECK-NEXT:  1      3     1.00    *                  movapd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movd    %eax, %xmm2
+# CHECK-NEXT:  1      3     1.00    *                  movd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movd    %xmm0, %ecx
+# CHECK-NEXT:  1      1     1.00           *           movd    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.50                       movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  1      3     1.00    *                  movdqa  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  1      3     1.00    *                  movdqu  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movdq2q %xmm0, %mm2
+# CHECK-NEXT:  1      1     1.00           *           movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  1      4     1.00    *                  movhpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  1      4     1.00    *                  movlpd  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  1      1     1.00           *           movntdq %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00           *           movntpd %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.50                       movq    %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50                       movq    %rax, %xmm2
+# CHECK-NEXT:  1      3     1.00    *                  movq    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movq    %xmm0, %rcx
+# CHECK-NEXT:  1      1     1.00           *           movq    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.50                       movq2dq %mm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movsd   %xmm0, (%rax)
+# CHECK-NEXT:  1      3     1.00    *                  movsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movupd  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movupd  %xmm0, (%rax)
+# CHECK-NEXT:  1      3     1.00    *                  movupd  (%rax), %xmm2
+# CHECK-NEXT:  1      5     2.00                       mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     2.00    *                  mulpd   (%rax), %xmm2
+# CHECK-NEXT:  1      5     2.00                       mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     2.00    *                  mulsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       orpd    %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  orpd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  packssdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  packsswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  packuswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddb   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  paddb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddd   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  paddd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddq   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  paddq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddq   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  paddq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  paddsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  paddsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusb %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  paddusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusw %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  paddusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddw   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  paddw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pand    %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pand    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pandn   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pandn   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pavgb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pavgw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  1      4     1.00                       pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pminsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminub  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pminub  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      4     1.00                       pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmullw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmuludq %mm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  pmuludq (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmuludq (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       por     %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  por     (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  psadbw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslld   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.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      1     1.00                       psllq   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psllq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psllw   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psllw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrad   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psrad   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psraw   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psraw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrld   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.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      1     1.00                       psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psrlq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psrlw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubb   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psubb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubd   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psubd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubq   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psubq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubq   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psubq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psubsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psubsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusb %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psubusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusw %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psubusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubw   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psubw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pxor    %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pxor    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      71    70.00                      sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  1      74    70.00   *                  sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  1      35    35.00                      sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  1      38    35.00   *                  sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  subpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  subsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  1      6     1.00    *                  ucomisd (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  xorpd   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SLMDivider
+# CHECK-NEXT: [1] - SLMFPDivider
+# CHECK-NEXT: [2] - SLMFPMultiplier
+# CHECK-NEXT: [3] - SLM_FPC_RSV0
+# CHECK-NEXT: [4] - SLM_FPC_RSV1
+# CHECK-NEXT: [5] - SLM_IEC_RSV0
+# CHECK-NEXT: [6] - SLM_IEC_RSV1
+# CHECK-NEXT: [7] - SLM_MEC_RSV
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
+# CHECK-NEXT:  -     343.00 8.00   223.00 92.00  4.50   4.50   131.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]     Instructions:
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      addpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    addpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      addsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    addsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    andnpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      andpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    andpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    clflush (%rax)
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      comisd  %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    comisd  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  -     69.00   -     1.00    -      -      -      -      divpd   %xmm0, %xmm2
+# CHECK-NEXT:  -     69.00   -     1.00    -      -      -     1.00    divpd   (%rax), %xmm2
+# CHECK-NEXT:  -     32.00   -     1.00    -      -      -      -      divsd   %xmm0, %xmm2
+# CHECK-NEXT:  -     32.00   -     1.00    -      -      -     1.00    divsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    lfence
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    maxpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    maxsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      minpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    minpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      minsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    minsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movapd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movapd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movapd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      movd    %eax, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      movd    %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movd    %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movdqa  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movdqu  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movdq2q %xmm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    movhpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    movlpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movntdq %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movntpd %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movq    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      movq    %rax, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movq    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      movq    %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movq    %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movq2dq %mm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      movsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movsd   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      movupd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    movupd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movupd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -      -      mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -     1.00    mulpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -      -      mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.00   1.00    -      -      -     1.00    mulsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      orpd    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    orpd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    packssdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    packsswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    packuswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddusb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddusw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pand    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pand    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pandn   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pandn   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pavgb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pavgw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pminsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pminub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pminub  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmullw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmuludq %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmuludq (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmuludq (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      por     %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    por     (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psadbw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pslld   $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pslld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pslld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pslldq  $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psllq   $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psllq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psllq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psllw   $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psllw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psllw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrad   $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrad   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psrad   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psraw   $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psraw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psraw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrld   $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psrld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrldq  $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrlq   $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psrlq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrlw   $1, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psrlw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubusb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubusw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pxor    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pxor    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     70.00   -     1.00    -      -      -      -      sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  -     1.00    -     70.00   -      -      -     1.00    sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  -     35.00   -     1.00    -      -      -      -      sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  -     35.00   -     1.00    -      -      -     1.00    sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      subpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    subpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      subsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    subsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    ucomisd (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    xorpd   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse3.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse3.s
new file mode 100644 (file)
index 0000000..7a40aba
--- /dev/null
@@ -0,0 +1,97 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=slm -instruction-tables < %s | FileCheck %s
+
+addsubpd  %xmm0, %xmm2
+addsubpd  (%rax),  %xmm2
+
+addsubps  %xmm0, %xmm2
+addsubps  (%rax), %xmm2
+
+haddpd    %xmm0, %xmm2
+haddpd    (%rax), %xmm2
+
+haddps    %xmm0, %xmm2
+haddps    (%rax), %xmm2
+
+hsubpd    %xmm0, %xmm2
+hsubpd    (%rax), %xmm2
+
+hsubps    %xmm0, %xmm2
+hsubps    (%rax), %xmm2
+
+lddqu     (%rax), %xmm2
+
+movddup   %xmm0, %xmm2
+movddup   (%rax), %xmm2
+
+movshdup  %xmm0, %xmm2
+movshdup  (%rax), %xmm2
+
+movsldup  %xmm0, %xmm2
+movsldup  (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  addsubps        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  haddpd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       haddps  %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  haddps  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  hsubps  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00    *                  lddqu   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movddup %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  movddup (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  movshdup        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  movsldup        (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SLMDivider
+# CHECK-NEXT: [1] - SLMFPDivider
+# CHECK-NEXT: [2] - SLMFPMultiplier
+# CHECK-NEXT: [3] - SLM_FPC_RSV0
+# CHECK-NEXT: [4] - SLM_FPC_RSV1
+# CHECK-NEXT: [5] - SLM_IEC_RSV0
+# CHECK-NEXT: [6] - SLM_IEC_RSV1
+# CHECK-NEXT: [7] - SLM_MEC_RSV
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
+# CHECK-NEXT:  -      -      -     14.00  12.00   -      -     10.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]     Instructions:
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    addsubps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   1.00    -      -      -      haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   1.00    -      -     1.00    haddpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   1.00    -      -      -      haddps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   1.00    -      -     1.00    haddps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   1.00    -      -      -      hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   1.00    -      -     1.00    hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   1.00    -      -      -      hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   1.00    -      -     1.00    hsubps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    lddqu   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      movddup %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    movddup (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    movshdup        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    movsldup        (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-sse41.s
new file mode 100644 (file)
index 0000000..4ed9c71
--- /dev/null
@@ -0,0 +1,367 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=slm -instruction-tables < %s | FileCheck %s
+
+blendpd     $11, %xmm0, %xmm2
+blendpd     $11, (%rax), %xmm2
+
+blendps     $11, %xmm0, %xmm2
+blendps     $11, (%rax), %xmm2
+
+blendvpd    %xmm0, %xmm2
+blendvpd    (%rax), %xmm2
+
+blendvps    %xmm0, %xmm2
+blendvps    (%rax), %xmm2
+
+dppd        $22, %xmm0, %xmm2
+dppd        $22, (%rax), %xmm2
+
+dpps        $22, %xmm0, %xmm2
+dpps        $22, (%rax), %xmm2
+
+extractps   $1, %xmm0, %rcx
+extractps   $1, %xmm0, (%rax)
+
+insertps    $1, %xmm0, %xmm2
+insertps    $1, (%rax), %xmm2
+
+movntdqa    (%rax), %xmm2
+
+mpsadbw     $1, %xmm0, %xmm2
+mpsadbw     $1, (%rax), %xmm2
+
+packusdw    %xmm0, %xmm2
+packusdw    (%rax), %xmm2
+
+pblendvb    %xmm0, %xmm2
+pblendvb    (%rax), %xmm2
+
+pblendw     $11, %xmm0, %xmm2
+pblendw     $11, (%rax), %xmm2
+
+pcmpeqq     %xmm0, %xmm2
+pcmpeqq     (%rax), %xmm2
+
+pextrb      $1, %xmm0, %ecx
+pextrb      $1, %xmm0, (%rax)
+
+pextrd      $1, %xmm0, %ecx
+pextrd      $1, %xmm0, (%rax)
+
+pextrq      $1, %xmm0, %rcx
+pextrq      $1, %xmm0, (%rax)
+
+pextrw      $1, %xmm0, (%rax)
+
+phminposuw  %xmm0, %xmm2
+phminposuw  (%rax), %xmm2
+
+pinsrb      $1, %eax, %xmm1
+pinsrb      $1, (%rax), %xmm1
+
+pinsrd      $1, %eax, %xmm1
+pinsrd      $1, (%rax), %xmm1
+
+pinsrq      $1, %rax, %xmm1
+pinsrq      $1, (%rax), %xmm1
+
+pmaxsb      %xmm0, %xmm2
+pmaxsb      (%rax), %xmm2
+
+pmaxsd      %xmm0, %xmm2
+pmaxsd      (%rax), %xmm2
+
+pmaxud      %xmm0, %xmm2
+pmaxud      (%rax), %xmm2
+
+pmaxuw      %xmm0, %xmm2
+pmaxuw      (%rax), %xmm2
+
+pminsb      %xmm0, %xmm2
+pminsb      (%rax), %xmm2
+
+pminsd      %xmm0, %xmm2
+pminsd      (%rax), %xmm2
+
+pminud      %xmm0, %xmm2
+pminud      (%rax), %xmm2
+
+pminuw      %xmm0, %xmm2
+pminuw      (%rax), %xmm2
+
+pmovsxbd    %xmm0, %xmm2
+pmovsxbd    (%rax), %xmm2
+
+pmovsxbq    %xmm0, %xmm2
+pmovsxbq    (%rax), %xmm2
+
+pmovsxbw    %xmm0, %xmm2
+pmovsxbw    (%rax), %xmm2
+
+pmovsxdq    %xmm0, %xmm2
+pmovsxdq    (%rax), %xmm2
+
+pmovsxwd    %xmm0, %xmm2
+pmovsxwd    (%rax), %xmm2
+
+pmovsxwq    %xmm0, %xmm2
+pmovsxwq    (%rax), %xmm2
+
+pmovzxbd    %xmm0, %xmm2
+pmovzxbd    (%rax), %xmm2
+
+pmovzxbq    %xmm0, %xmm2
+pmovzxbq    (%rax), %xmm2
+
+pmovzxbw    %xmm0, %xmm2
+pmovzxbw    (%rax), %xmm2
+
+pmovzxdq    %xmm0, %xmm2
+pmovzxdq    (%rax), %xmm2
+
+pmovzxwd    %xmm0, %xmm2
+pmovzxwd    (%rax), %xmm2
+
+pmovzxwq    %xmm0, %xmm2
+pmovzxwq    (%rax), %xmm2
+
+pmuldq      %xmm0, %xmm2
+pmuldq      (%rax), %xmm2
+
+pmulld      %xmm0, %xmm2
+pmulld      (%rax), %xmm2
+
+ptest       %xmm0, %xmm1
+ptest       (%rax), %xmm1
+
+roundpd     $1, %xmm0, %xmm2
+roundpd     $1, (%rax), %xmm2
+
+roundps     $1, %xmm0, %xmm2
+roundps     $1, (%rax), %xmm2
+
+roundsd     $1, %xmm0, %xmm2
+roundsd     $1, (%rax), %xmm2
+
+roundss     $1, %xmm0, %xmm2
+roundss     $1, (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     1.00                       blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  2      4     2.00           *           extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00    *                  movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  1      7     1.00                       mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  packusdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  2      4     2.00           *           pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  2      4     2.00           *           pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  2      4     2.00           *           pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      4     2.00           *           pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      4     1.00                       phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  1      4     1.00    *                  pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  1      4     1.00    *                  pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  1      4     1.00    *                  pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.50                       pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pminsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pminsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminud  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pminud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pminuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmulld  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       ptest   %xmm0, %xmm1
+# CHECK-NEXT:  1      4     1.00    *                  ptest   (%rax), %xmm1
+# CHECK-NEXT:  1      3     1.00                       roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      6     1.00    *                  roundss $1, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SLMDivider
+# CHECK-NEXT: [1] - SLMFPDivider
+# CHECK-NEXT: [2] - SLMFPMultiplier
+# CHECK-NEXT: [3] - SLM_FPC_RSV0
+# CHECK-NEXT: [4] - SLM_FPC_RSV1
+# CHECK-NEXT: [5] - SLM_IEC_RSV0
+# CHECK-NEXT: [6] - SLM_IEC_RSV1
+# CHECK-NEXT: [7] - SLM_MEC_RSV
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
+# CHECK-NEXT:  -      -      -     73.00  22.00   -      -     54.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]     Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    packusdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     2.00    pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pminsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pminsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pminud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pminud  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pminuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmulld  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      ptest   %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    ptest   (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -      -      roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -      -     1.00    roundss $1, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-ssse3.s
new file mode 100644 (file)
index 0000000..66d4be6
--- /dev/null
@@ -0,0 +1,254 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=slm -instruction-tables < %s | FileCheck %s
+
+pabsb       %mm0, %mm2
+pabsb       (%rax), %mm2
+
+pabsb       %xmm0, %xmm2
+pabsb       (%rax), %xmm2
+
+pabsd       %mm0, %mm2
+pabsd       (%rax), %mm2
+
+pabsd       %xmm0, %xmm2
+pabsd       (%rax), %xmm2
+
+pabsw       %mm0, %mm2
+pabsw       (%rax), %mm2
+
+pabsw       %xmm0, %xmm2
+pabsw       (%rax), %xmm2
+
+palignr     $1, %mm0, %mm2
+palignr     $1, (%rax), %mm2
+
+palignr     $1, %xmm0, %xmm2
+palignr     $1, (%rax), %xmm2
+
+phaddd      %mm0, %mm2
+phaddd      (%rax), %mm2
+
+phaddd      %xmm0, %xmm2
+phaddd      (%rax), %xmm2
+
+phaddsw     %mm0, %mm2
+phaddsw     (%rax), %mm2
+
+phaddsw     %xmm0, %xmm2
+phaddsw     (%rax), %xmm2
+
+phaddw      %mm0, %mm2
+phaddw      (%rax), %mm2
+
+phaddw      %xmm0, %xmm2
+phaddw      (%rax), %xmm2
+
+phsubd      %mm0, %mm2
+phsubd      (%rax), %mm2
+
+phsubd      %xmm0, %xmm2
+phsubd      (%rax), %xmm2
+
+phsubsw     %mm0, %mm2
+phsubsw     (%rax), %mm2
+
+phsubsw     %xmm0, %xmm2
+phsubsw     (%rax), %xmm2
+
+phsubw      %mm0, %mm2
+phsubw      (%rax), %mm2
+
+phsubw      %xmm0, %xmm2
+phsubw      (%rax), %xmm2
+
+pmaddubsw   %mm0, %mm2
+pmaddubsw   (%rax), %mm2
+
+pmaddubsw   %xmm0, %xmm2
+pmaddubsw   (%rax), %xmm2
+
+pmulhrsw    %mm0, %mm2
+pmulhrsw    (%rax), %mm2
+
+pmulhrsw    %xmm0, %xmm2
+pmulhrsw    (%rax), %xmm2
+
+pshufb      %mm0, %mm2
+pshufb      (%rax), %mm2
+
+pshufb      %xmm0, %xmm2
+pshufb      (%rax), %xmm2
+
+psignb      %mm0, %mm2
+psignb      (%rax), %mm2
+
+psignb      %xmm0, %xmm2
+psignb      (%rax), %xmm2
+
+psignd      %mm0, %mm2
+psignd      (%rax), %mm2
+
+psignd      %xmm0, %xmm2
+psignd      (%rax), %xmm2
+
+psignw      %mm0, %mm2
+psignw      (%rax), %mm2
+
+psignw      %xmm0, %xmm2
+psignw      (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.50                       pabsb   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pabsb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pabsb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pabsd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pabsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pabsw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pabsw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  palignr $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       phaddd  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  phaddd  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  phaddd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       phaddsw %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  phaddsw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  phaddsw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       phaddw  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  phaddw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  phaddw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       phsubd  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  phsubd  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  phsubd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       phsubsw %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  phsubsw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  phsubsw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       phsubw  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  phsubw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  phsubw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  1      7     1.00    *                  pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pshufb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  pshufb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psignb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psignb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psignd  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psignd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psignw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %xmm0, %xmm2
+# CHECK-NEXT:  1      4     1.00    *                  psignw  (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SLMDivider
+# CHECK-NEXT: [1] - SLMFPDivider
+# CHECK-NEXT: [2] - SLMFPMultiplier
+# CHECK-NEXT: [3] - SLM_FPC_RSV0
+# CHECK-NEXT: [4] - SLM_FPC_RSV1
+# CHECK-NEXT: [5] - SLM_IEC_RSV0
+# CHECK-NEXT: [6] - SLM_IEC_RSV1
+# CHECK-NEXT: [7] - SLM_MEC_RSV
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
+# CHECK-NEXT:  -      -      -     40.00  24.00   -      -     32.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]     Instructions:
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pabsb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pabsb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pabsb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pabsd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pabsd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pabsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pabsw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pabsw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pabsw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      palignr $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    palignr $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phaddd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phaddd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phaddd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phaddsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phaddsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phaddsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phaddw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phaddw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phaddw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phsubd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phsubd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phsubd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phsubsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phsubsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phsubsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phsubw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phsubw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    phsubw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pshufb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pshufb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pshufb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psignb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psignb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psignb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psignb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psignd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psignd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psignd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psignd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psignw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psignw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psignw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psignw  (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse1.s
new file mode 100644 (file)
index 0000000..3b41820
--- /dev/null
@@ -0,0 +1,464 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -instruction-tables < %s | FileCheck %s
+
+addps       %xmm0, %xmm2
+addps       (%rax), %xmm2
+
+addss       %xmm0, %xmm2
+addss       (%rax), %xmm2
+
+andnps      %xmm0, %xmm2
+andnps      (%rax), %xmm2
+
+andps       %xmm0, %xmm2
+andps       (%rax), %xmm2
+
+cmpps       $0, %xmm0, %xmm2
+cmpps       $0, (%rax), %xmm2
+
+cmpss       $0, %xmm0, %xmm2
+cmpss       $0, (%rax), %xmm2
+
+comiss      %xmm0, %xmm1
+comiss      (%rax), %xmm1
+
+cvtpi2ps    %mm0, %xmm2
+cvtpi2ps    (%rax), %xmm2
+
+cvtps2pi    %xmm0, %mm2
+cvtps2pi    (%rax), %mm2
+
+cvtsi2ss    %ecx, %xmm2
+cvtsi2ss    %rcx, %xmm2
+cvtsi2ss    (%rax), %xmm2
+cvtsi2ss    (%rax), %xmm2
+
+cvtss2si    %xmm0, %ecx
+cvtss2si    %xmm0, %rcx
+cvtss2si    (%rax), %ecx
+cvtss2si    (%rax), %rcx
+
+cvttps2pi   %xmm0, %mm2
+cvttps2pi   (%rax), %mm2
+
+cvttss2si   %xmm0, %ecx
+cvttss2si   %xmm0, %rcx
+cvttss2si   (%rax), %ecx
+cvttss2si   (%rax), %rcx
+
+divps       %xmm0, %xmm2
+divps       (%rax), %xmm2
+
+divss       %xmm0, %xmm2
+divss       (%rax), %xmm2
+
+ldmxcsr     (%rax)
+
+maskmovq    %mm0, %mm1
+
+maxps       %xmm0, %xmm2
+maxps       (%rax), %xmm2
+
+maxss       %xmm0, %xmm2
+maxss       (%rax), %xmm2
+
+minps       %xmm0, %xmm2
+minps       (%rax), %xmm2
+
+minss       %xmm0, %xmm2
+minss       (%rax), %xmm2
+
+movaps      %xmm0, %xmm2
+movaps      %xmm0, (%rax)
+movaps      (%rax), %xmm2
+
+movhlps     %xmm0, %xmm2
+movlhps     %xmm0, %xmm2
+
+movhps      %xmm0, (%rax)
+movhps      (%rax), %xmm2
+
+movlps      %xmm0, (%rax)
+movlps      (%rax), %xmm2
+
+movmskps    %xmm0, %rcx
+
+movntps     %xmm0, (%rax)
+movntq      %mm0, (%rax)
+
+movss       %xmm0, %xmm2
+movss       %xmm0, (%rax)
+movss       (%rax), %xmm2
+
+movups      %xmm0, %xmm2
+movups      %xmm0, (%rax)
+movups      (%rax), %xmm2
+
+mulps       %xmm0, %xmm2
+mulps       (%rax), %xmm2
+
+mulss       %xmm0, %xmm2
+mulss       (%rax), %xmm2
+
+orps        %xmm0, %xmm2
+orps        (%rax), %xmm2
+
+pavgb       %mm0, %mm2
+pavgb       (%rax), %mm2
+
+pavgw       %mm0, %mm2
+pavgw       (%rax), %mm2
+
+pextrw      $1, %mm0, %rcx
+
+pinsrw      $1, %rax, %mm2
+pinsrw      $1, (%rax), %mm2
+
+pmaxsw      %mm0, %mm2
+pmaxsw      (%rax), %mm2
+
+pmaxub      %mm0, %mm2
+pmaxub      (%rax), %mm2
+
+pminsw      %mm0, %mm2
+pminsw      (%rax), %mm2
+
+pminub      %mm0, %mm2
+pminub      (%rax), %mm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %mm0, %mm2
+pmulhuw     (%rax), %mm2
+
+prefetcht0  (%rax)
+prefetcht1  (%rax)
+prefetcht2  (%rax)
+prefetchnta (%rax)
+
+psadbw      %mm0, %mm2
+psadbw      (%rax), %mm2
+
+pshufw      $1, %mm0, %mm2
+pshufw      $1, (%rax), %mm2
+
+rcpps       %xmm0, %xmm2
+rcpps       (%rax), %xmm2
+
+rcpss       %xmm0, %xmm2
+rcpss       (%rax), %xmm2
+
+rsqrtps     %xmm0, %xmm2
+rsqrtps     (%rax), %xmm2
+
+rsqrtss     %xmm0, %xmm2
+rsqrtss     (%rax), %xmm2
+
+sfence
+
+shufps      $1, %xmm0, %xmm2
+shufps      $1, (%rax), %xmm2
+
+sqrtps      %xmm0, %xmm2
+sqrtps      (%rax), %xmm2
+
+sqrtss      %xmm0, %xmm2
+sqrtss      (%rax), %xmm2
+
+stmxcsr     (%rax)
+
+subps       %xmm0, %xmm2
+subps       (%rax), %xmm2
+
+subss       %xmm0, %xmm2
+subss       (%rax), %xmm2
+
+ucomiss     %xmm0, %xmm1
+ucomiss     (%rax), %xmm1
+
+unpckhps    %xmm0, %xmm2
+unpckhps    (%rax), %xmm2
+
+unpcklps    %xmm0, %xmm2
+unpcklps    (%rax), %xmm2
+
+xorps       %xmm0, %xmm2
+xorps       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      4     0.50                       addps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       addss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  addss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       andnps  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  andnps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       andps   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  andps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       comiss  %xmm0, %xmm1
+# CHECK-NEXT:  2      7     1.00    *                  comiss  (%rax), %xmm1
+# CHECK-NEXT:  2      6     2.00                       cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  2      9     0.50    *                  cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  2      5     1.00                       cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  3      6     2.00                       cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00                       cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  2      6     1.00                       cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  3      11    1.00    *                  cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  3      11    1.00    *                  cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  2      5     1.00                       cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  2      9     0.50    *                  cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  3      7     1.00                       cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  3      7     1.00                       cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  3      11    1.00    *                  cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  4      12    1.00    *                  cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  1      11    3.00                       divps   %xmm0, %xmm2
+# CHECK-NEXT:  2      17    5.00    *                  divps   (%rax), %xmm2
+# CHECK-NEXT:  1      11    3.00                       divss   %xmm0, %xmm2
+# CHECK-NEXT:  2      16    3.00    *                  divss   (%rax), %xmm2
+# CHECK-NEXT:  3      7     1.00    *      *      *    ldmxcsr (%rax)
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovq        %mm0, %mm1
+# CHECK-NEXT:  1      4     0.50                       maxps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  maxps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       maxss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  maxss   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       minps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  minps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       minss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  minss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movaps  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movaps  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movaps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movhlps %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movlhps %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movhps  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movhps  (%rax), %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movlps  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movlps  (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movmskps        %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movntps %xmm0, (%rax)
+# CHECK-NEXT:  2      1     1.00    *      *      *    movntq  %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movss   %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movss   %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movups  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movups  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movups  (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       mulps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       mulss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  mulss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       orps    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  orps    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pavgb   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pavgb   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pavgw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pavgw   (%rax), %mm2
+# CHECK-NEXT:  2      3     1.00                       pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  2      2     2.00                       pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pmaxub  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pmaxub  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pminsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pminsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pminub  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pminub  (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      4     1.00                       pmulhuw %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmulhuw (%rax), %mm2
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht0      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht1      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht2      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetchnta     (%rax)
+# CHECK-NEXT:  1      3     1.00                       psadbw  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psadbw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rcpps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  rcpss   (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.33    *      *      *    sfence
+# CHECK-NEXT:  1      1     1.00                       shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      12    3.00                       sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  2      18    3.00    *                  sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  1      12    3.00                       sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  2      17    3.00    *                  sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  3      2     1.00    *      *      *    stmxcsr (%rax)
+# CHECK-NEXT:  1      4     0.50                       subps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  subps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       subss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  subss   (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  2      7     1.00    *                  ucomiss (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       xorps   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  xorps   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKLDivider
+# CHECK-NEXT: [1] - SKLFPDivider
+# CHECK-NEXT: [2] - SKLPort0
+# CHECK-NEXT: [3] - SKLPort1
+# CHECK-NEXT: [4] - SKLPort2
+# CHECK-NEXT: [5] - SKLPort3
+# CHECK-NEXT: [6] - SKLPort4
+# CHECK-NEXT: [7] - SKLPort5
+# CHECK-NEXT: [8] - SKLPort6
+# CHECK-NEXT: [9] - SKLPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -     26.00  71.33  24.33  32.00  32.00  8.00   33.83  0.50   3.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        addps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        addps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        addss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        addss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        andnps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        andnps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        andps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        andps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        comiss  %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        comiss  (%rax), %xmm1
+# CHECK-NEXT:  -      -     2.00    -      -      -      -      -      -      -        cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.50   0.50    -      -      -      -      -      -        cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.50   0.50    -      -      -      -      -      -        cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.50   0.50   0.50   0.50    -      -      -      -        cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  -      -     1.50   0.50   0.50   0.50    -      -      -      -        cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -     1.50   0.50    -      -      -     1.00    -      -        cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.50   0.50    -      -      -     1.00    -      -        cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.50   0.50   0.50   0.50    -      -      -      -        cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  -      -     1.50   0.50   0.50   0.50    -     1.00    -      -        cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divps   %xmm0, %xmm2
+# CHECK-NEXT:  -     5.00   1.00    -     0.50   0.50    -      -      -      -        divps   (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divss   %xmm0, %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -     0.50   0.50    -      -      -      -        divss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.25   0.25   0.50   0.50    -     0.25   0.25    -        ldmxcsr (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        maskmovq        %mm0, %mm1
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        maxps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        maxps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        maxss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        maxss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        minps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        minps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        minss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        minss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movaps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movaps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movaps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movhlps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movlhps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movhps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movhps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movlps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movlps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movmskps        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntps %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntq  %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movss   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movups  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movups  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movups  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        orps    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        orps    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pavgb   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pavgb   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pavgw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pavgw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaxub  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaxub  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pminsw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pminsw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pminub  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pminub  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhuw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhuw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht0      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht1      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht2      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetchnta     (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        psadbw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        psadbw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rcpps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rcpss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25   0.33   0.33    -     0.25   0.25   0.33      sfence
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -     0.50   0.50    -      -      -      -        sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -     0.50   0.50    -      -      -      -        sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      stmxcsr (%rax)
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        subps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        subps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        subss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        subss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        ucomiss (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        xorps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        xorps   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse2.s
new file mode 100644 (file)
index 0000000..4616d13
--- /dev/null
@@ -0,0 +1,952 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -instruction-tables < %s | FileCheck %s
+
+addpd       %xmm0, %xmm2
+addpd       (%rax), %xmm2
+
+addsd       %xmm0, %xmm2
+addsd       (%rax), %xmm2
+
+addsubpd    %xmm0, %xmm2
+addsubpd    (%rax), %xmm2
+
+andnpd      %xmm0, %xmm2
+andnpd      (%rax), %xmm2
+
+andpd       %xmm0, %xmm2
+andpd       (%rax), %xmm2
+
+clflush     (%rax)
+
+cmppd       $0, %xmm0, %xmm2
+cmppd       $0, (%rax), %xmm2
+
+cmpsd       $0, %xmm0, %xmm2
+cmpsd       $0, (%rax), %xmm2
+
+comisd      %xmm0, %xmm1
+comisd      (%rax), %xmm1
+
+cvtdq2pd    %xmm0, %xmm2
+cvtdq2pd    (%rax), %xmm2
+
+cvtdq2ps    %xmm0, %xmm2
+cvtdq2ps    (%rax), %xmm2
+
+cvtpd2dq    %xmm0, %xmm2
+cvtpd2dq    (%rax), %xmm2
+
+cvtpd2pi    %xmm0, %mm2
+cvtpd2pi    (%rax), %mm2
+
+cvtpd2ps    %xmm0, %xmm2
+cvtpd2ps    (%rax), %xmm2
+
+cvtpi2pd    %mm0, %xmm2
+cvtpi2pd    (%rax), %xmm2
+
+cvtps2dq    %xmm0, %xmm2
+cvtps2dq    (%rax), %xmm2
+
+cvtps2pd    %xmm0, %xmm2
+cvtps2pd    (%rax), %xmm2
+
+cvtsd2si    %xmm0, %ecx
+cvtsd2si    %xmm0, %rcx
+cvtsd2si    (%rax), %ecx
+cvtsd2si    (%rax), %rcx
+
+cvtsd2ss    %xmm0, %xmm2
+cvtsd2ss    (%rax), %xmm2
+
+cvtsi2sd    %ecx, %xmm2
+cvtsi2sd    %rcx, %xmm2
+cvtsi2sd    (%rax), %xmm2
+cvtsi2sd    (%rax), %xmm2
+
+cvtss2sd    %xmm0, %xmm2
+cvtss2sd    (%rax), %xmm2
+
+cvttpd2dq   %xmm0, %xmm2
+cvttpd2dq   (%rax), %xmm2
+
+cvttpd2pi   %xmm0, %mm2
+cvttpd2pi   (%rax), %mm2
+
+cvttps2dq   %xmm0, %xmm2
+cvttps2dq   (%rax), %xmm2
+
+cvttsd2si   %xmm0, %ecx
+cvttsd2si   %xmm0, %rcx
+cvttsd2si   (%rax), %ecx
+cvttsd2si   (%rax), %rcx
+
+divpd       %xmm0, %xmm2
+divpd       (%rax), %xmm2
+
+divsd       %xmm0, %xmm2
+divsd       (%rax), %xmm2
+
+lfence
+
+maskmovdqu  %xmm0, %xmm1
+
+maxpd       %xmm0, %xmm2
+maxpd       (%rax), %xmm2
+
+maxsd       %xmm0, %xmm2
+maxsd       (%rax), %xmm2
+
+minpd       %xmm0, %xmm2
+minpd       (%rax), %xmm2
+
+minsd       %xmm0, %xmm2
+minsd       (%rax), %xmm2
+
+movapd      %xmm0, %xmm2
+movapd      %xmm0, (%rax)
+movapd      (%rax), %xmm2
+
+movd        %eax, %xmm2
+movd        (%rax), %xmm2
+
+movd        %xmm0, %ecx
+movd        %xmm0, (%rax)
+
+movdqa      %xmm0, %xmm2
+movdqa      %xmm0, (%rax)
+movdqa      (%rax), %xmm2
+
+movdqu      %xmm0, %xmm2
+movdqu      %xmm0, (%rax)
+movdqu      (%rax), %xmm2
+
+movdq2q     %xmm0, %mm2
+
+movhpd      %xmm0, (%rax)
+movhpd      (%rax), %xmm2
+
+movlpd      %xmm0, (%rax)
+movlpd      (%rax), %xmm2
+
+movmskpd    %xmm0, %rcx
+
+movntdq     %xmm0, (%rax)
+movntpd     %xmm0, (%rax)
+
+movq        %xmm0, %xmm2
+
+movq        %rax, %xmm2
+movq        (%rax), %xmm2
+
+movq        %xmm0, %rcx
+movq        %xmm0, (%rax)
+
+movq2dq     %mm0, %xmm2
+
+movsd       %xmm0, %xmm2
+movsd       %xmm0, (%rax)
+movsd       (%rax), %xmm2
+
+movupd      %xmm0, %xmm2
+movupd      %xmm0, (%rax)
+movupd      (%rax), %xmm2
+
+mulpd       %xmm0, %xmm2
+mulpd       (%rax), %xmm2
+
+mulsd       %xmm0, %xmm2
+mulsd       (%rax), %xmm2
+
+orpd        %xmm0, %xmm2
+orpd        (%rax), %xmm2
+
+packssdw    %xmm0, %xmm2
+packssdw    (%rax), %xmm2
+
+packsswb    %xmm0, %xmm2
+packsswb    (%rax), %xmm2
+
+packuswb    %xmm0, %xmm2
+packuswb    (%rax), %xmm2
+
+paddb       %xmm0, %xmm2
+paddb       (%rax), %xmm2
+
+paddd       %xmm0, %xmm2
+paddd       (%rax), %xmm2
+
+paddq       %mm0, %mm2
+paddq       (%rax), %mm2
+
+paddq       %xmm0, %xmm2
+paddq       (%rax), %xmm2
+
+paddsb      %xmm0, %xmm2
+paddsb      (%rax), %xmm2
+
+paddsw      %xmm0, %xmm2
+paddsw      (%rax), %xmm2
+
+paddusb     %xmm0, %xmm2
+paddusb     (%rax), %xmm2
+
+paddusw     %xmm0, %xmm2
+paddusw     (%rax), %xmm2
+
+paddw       %xmm0, %xmm2
+paddw       (%rax), %xmm2
+
+pand        %xmm0, %xmm2
+pand        (%rax), %xmm2
+
+pandn       %xmm0, %xmm2
+pandn       (%rax), %xmm2
+
+pavgb       %xmm0, %xmm2
+pavgb       (%rax), %xmm2
+
+pavgw       %xmm0, %xmm2
+pavgw       (%rax), %xmm2
+
+pcmpeqb     %xmm0, %xmm2
+pcmpeqb     (%rax), %xmm2
+
+pcmpeqd     %xmm0, %xmm2
+pcmpeqd     (%rax), %xmm2
+
+pcmpeqw     %xmm0, %xmm2
+pcmpeqw     (%rax), %xmm2
+
+pcmpgtb     %xmm0, %xmm2
+pcmpgtb     (%rax), %xmm2
+
+pcmpgtd     %xmm0, %xmm2
+pcmpgtd     (%rax), %xmm2
+
+pcmpgtw     %xmm0, %xmm2
+pcmpgtw     (%rax), %xmm2
+
+pextrw      $1, %xmm0, %rcx
+
+pmaddwd     %xmm0, %xmm2
+pmaddwd     (%rax), %xmm2
+
+pmaxsw      %xmm0, %xmm2
+pmaxsw      (%rax), %xmm2
+
+pmaxub      %xmm0, %xmm2
+pmaxub      (%rax), %xmm2
+
+pminsw      %xmm0, %xmm2
+pminsw      (%rax), %xmm2
+
+pminub      %xmm0, %xmm2
+pminub      (%rax), %xmm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %xmm0, %xmm2
+pmulhuw     (%rax), %xmm2
+
+pmulhw      %xmm0, %xmm2
+pmulhw      (%rax), %xmm2
+
+pmullw      %xmm0, %xmm2
+pmullw      (%rax), %xmm2
+
+pmuludq     %mm0, %mm2
+pmuludq     (%rax), %mm2
+
+pmuludq     %xmm0, %xmm2
+pmuludq     (%rax), %xmm2
+
+por         %xmm0, %xmm2
+por         (%rax), %xmm2
+
+psadbw      %xmm0, %xmm2
+psadbw      (%rax), %xmm2
+
+pshufd      $1, %xmm0, %xmm2
+pshufd      $1, (%rax), %xmm2
+
+pshufhw     $1, %xmm0, %xmm2
+pshufhw     $1, (%rax), %xmm2
+
+pshuflw     $1, %xmm0, %xmm2
+pshuflw     $1, (%rax), %xmm2
+
+pslld       $1, %xmm2
+pslld       %xmm0, %xmm2
+pslld       (%rax), %xmm2
+
+pslldq      $1, %xmm2
+
+psllq       $1, %xmm2
+psllq       %xmm0, %xmm2
+psllq       (%rax), %xmm2
+
+psllw       $1, %xmm2
+psllw       %xmm0, %xmm2
+psllw       (%rax), %xmm2
+
+psrad       $1, %xmm2
+psrad       %xmm0, %xmm2
+psrad       (%rax), %xmm2
+
+psraw       $1, %xmm2
+psraw       %xmm0, %xmm2
+psraw       (%rax), %xmm2
+
+psrld       $1, %xmm2
+psrld       %xmm0, %xmm2
+psrld       (%rax), %xmm2
+
+psrldq      $1, %xmm2
+
+psrlq       $1, %xmm2
+psrlq       %xmm0, %xmm2
+psrlq       (%rax), %xmm2
+
+psrlw       $1, %xmm2
+psrlw       %xmm0, %xmm2
+psrlw       (%rax), %xmm2
+
+psubb       %xmm0, %xmm2
+psubb       (%rax), %xmm2
+
+psubd       %xmm0, %xmm2
+psubd       (%rax), %xmm2
+
+psubq       %mm0, %mm2
+psubq       (%rax), %mm2
+
+psubq       %xmm0, %xmm2
+psubq       (%rax), %xmm2
+
+psubsb      %xmm0, %xmm2
+psubsb      (%rax), %xmm2
+
+psubsw      %xmm0, %xmm2
+psubsw      (%rax), %xmm2
+
+psubusb     %xmm0, %xmm2
+psubusb     (%rax), %xmm2
+
+psubusw     %xmm0, %xmm2
+psubusw     (%rax), %xmm2
+
+psubw       %xmm0, %xmm2
+psubw       (%rax), %xmm2
+
+punpckhbw   %xmm0, %xmm2
+punpckhbw   (%rax), %xmm2
+
+punpckhdq   %xmm0, %xmm2
+punpckhdq   (%rax), %xmm2
+
+punpckhqdq  %xmm0, %xmm2
+punpckhqdq  (%rax), %xmm2
+
+punpckhwd   %xmm0, %xmm2
+punpckhwd   (%rax), %xmm2
+
+punpcklbw   %xmm0, %xmm2
+punpcklbw   (%rax), %xmm2
+
+punpckldq   %xmm0, %xmm2
+punpckldq   (%rax), %xmm2
+
+punpcklqdq  %xmm0, %xmm2
+punpcklqdq  (%rax), %xmm2
+
+punpcklwd   %xmm0, %xmm2
+punpcklwd   (%rax), %xmm2
+
+pxor        %xmm0, %xmm2
+pxor        (%rax), %xmm2
+
+shufpd      $1, %xmm0, %xmm2
+shufpd      $1, (%rax), %xmm2
+
+sqrtpd      %xmm0, %xmm2
+sqrtpd      (%rax), %xmm2
+
+sqrtsd      %xmm0, %xmm2
+sqrtsd      (%rax), %xmm2
+
+subpd       %xmm0, %xmm2
+subpd       (%rax), %xmm2
+
+subsd       %xmm0, %xmm2
+subsd       (%rax), %xmm2
+
+ucomisd     %xmm0, %xmm1
+ucomisd     (%rax), %xmm1
+
+unpckhpd    %xmm0, %xmm2
+unpckhpd    (%rax), %xmm2
+
+unpcklpd    %xmm0, %xmm2
+unpcklpd    (%rax), %xmm2
+
+xorpd       %xmm0, %xmm2
+xorpd       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      4     0.50                       addpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       addsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  addsd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  andnpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       andpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  andpd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00    *      *      *    clflush (%rax)
+# CHECK-NEXT:  1      4     0.50                       cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       comisd  %xmm0, %xmm1
+# CHECK-NEXT:  2      7     1.00    *                  comisd  (%rax), %xmm1
+# CHECK-NEXT:  2      5     1.00                       cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  3      11    1.00    *                  cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  3      11    1.00    *                  cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  3      11    1.00    *                  cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  2      5     1.00                       cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  3      11    1.00    *                  cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00                       cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  2      6     1.00                       cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  3      11    1.00    *                  cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  3      11    1.00    *                  cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  2      5     1.00                       cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  3      11    1.00    *                  cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  3      11    1.00    *                  cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  1      4     0.50                       cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00                       cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  2      6     1.00                       cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  3      11    1.00    *                  cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  3      11    1.00    *                  cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  1      14    3.00                       divpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      20    4.00    *                  divpd   (%rax), %xmm2
+# CHECK-NEXT:  1      14    3.00                       divsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      19    4.00    *                  divsd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.50    *      *      *    lfence
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  1      4     0.50                       maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  maxpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  maxsd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       minpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  minpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       minsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  minsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movapd  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movapd  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movapd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movd    %eax, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movd    %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movd    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movdqa  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movdqu  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       movdq2q %xmm0, %mm2
+# CHECK-NEXT:  2      1     1.00           *           movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movhpd  (%rax), %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movlpd  (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movntdq %xmm0, (%rax)
+# CHECK-NEXT:  2      1     1.00           *           movntpd %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movq    %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movq    %xmm0, %rcx
+# CHECK-NEXT:  2      1     1.00           *           movq    %xmm0, (%rax)
+# CHECK-NEXT:  2      2     2.00                       movq2dq %mm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movsd   %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movupd  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movupd  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movupd  (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  mulsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       orpd    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  orpd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packssdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packsswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packuswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       paddb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       paddd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddq   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       paddq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       paddw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pand    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pand    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pandn   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pandn   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pavgb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pavgw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  1      4     0.50                       pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminub  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminub  (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      4     0.50                       pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmullw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmuludq %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmuludq (%rax), %mm2
+# CHECK-NEXT:  1      4     0.50                       pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmuludq (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       por     %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  por     (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  psadbw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pslld   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       pslld   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pslld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslldq  $1, %xmm2
+# CHECK-NEXT:  1      1     0.50                       psllq   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psllq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psllq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psllw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psllw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psllw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psrad   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrad   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psrad   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psraw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psraw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psraw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psrld   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrld   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psrld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrldq  $1, %xmm2
+# CHECK-NEXT:  1      1     0.50                       psrlq   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psrlq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psrlw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psrlw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       psubb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       psubd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubq   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       psubq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       psubw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pxor    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pxor    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      18    6.00                       sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      24    6.00    *                  sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  1      18    6.00                       sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      23    6.00    *                  sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       subpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  subpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       subsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  subsd   (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  2      7     1.00    *                  ucomisd (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  xorpd   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKLDivider
+# CHECK-NEXT: [1] - SKLFPDivider
+# CHECK-NEXT: [2] - SKLPort0
+# CHECK-NEXT: [3] - SKLPort1
+# CHECK-NEXT: [4] - SKLPort2
+# CHECK-NEXT: [5] - SKLPort3
+# CHECK-NEXT: [6] - SKLPort4
+# CHECK-NEXT: [7] - SKLPort5
+# CHECK-NEXT: [8] - SKLPort6
+# CHECK-NEXT: [9] - SKLPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -     38.00  111.42 79.42  62.50  62.50  12.00  93.42  1.75   4.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        addpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        addpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        addsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        addsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        andnpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        andpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        andpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     0.25   1.25    -        clflush (%rax)
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        comisd  %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        comisd  (%rax), %xmm1
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     1.00    -      -        cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     1.00    -      -        cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     1.00    -      -        cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.50   0.50    -      -      -      -      -      -        cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.50   0.50    -      -      -      -      -      -        cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.50   0.50   0.50   0.50    -      -      -      -        cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  -      -     1.50   0.50   0.50   0.50    -      -      -      -        cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     1.00    -      -        cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     1.00    -      -        cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     1.00    -      -        cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.50   0.50    -      -      -      -      -      -        cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.50   0.50    -      -      -      -      -      -        cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.50   0.50   0.50   0.50    -      -      -      -        cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  -      -     1.50   0.50   0.50   0.50    -      -      -      -        cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divpd   %xmm0, %xmm2
+# CHECK-NEXT:  -     4.00   1.00    -     0.50   0.50    -      -      -      -        divpd   (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divsd   %xmm0, %xmm2
+# CHECK-NEXT:  -     4.00   1.00    -     0.50   0.50    -      -      -      -        divsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -        lfence
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        maxpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        maxsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        minpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        minpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        minsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        minsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movapd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movapd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movapd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movd    %eax, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movd    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movd    %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movd    %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movdqa  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movdqu  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        movdq2q %xmm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movhpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movlpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntdq %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntpd %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movq    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq    %rax, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movq    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movq    %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movq    %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        movq2dq %mm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movsd   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movupd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movupd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movupd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        mulsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        orpd    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        orpd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packssdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packsswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packuswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        paddb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        paddb   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        paddd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        paddd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        paddq   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        paddq   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        paddq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        paddq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        paddsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        paddsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        paddusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        paddusb (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        paddusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        paddusw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        paddw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        paddw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pand    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pand    (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pandn   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pandn   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pavgb   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pavgw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminub  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmullw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmuludq %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmuludq (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmuludq (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        por     %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        por     (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        psadbw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pslld   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        pslld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pslld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pslldq  $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psllq   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psllq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psllq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psllw   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psllw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psllw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psrad   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psrad   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psrad   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psraw   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psraw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psraw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psrld   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psrld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psrld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        psrldq  $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psrlq   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psrlq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psrlw   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psrlw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        psubb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        psubb   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        psubd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        psubd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psubq   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psubq   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        psubq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        psubq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psubsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psubsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psubusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psubusb (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psubusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psubusw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        psubw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        psubw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pxor    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pxor    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     6.00   1.00    -      -      -      -      -      -      -        sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  -     6.00   1.00    -     0.50   0.50    -      -      -      -        sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  -     6.00   1.00    -      -      -      -      -      -      -        sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  -     6.00   1.00    -     0.50   0.50    -      -      -      -        sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        subpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        subpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        subsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        subsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        ucomisd (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        xorpd   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse3.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse3.s
new file mode 100644 (file)
index 0000000..cc83e46
--- /dev/null
@@ -0,0 +1,99 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -instruction-tables < %s | FileCheck %s
+
+addsubpd  %xmm0, %xmm2
+addsubpd  (%rax),  %xmm2
+
+addsubps  %xmm0, %xmm2
+addsubps  (%rax), %xmm2
+
+haddpd    %xmm0, %xmm2
+haddpd    (%rax), %xmm2
+
+haddps    %xmm0, %xmm2
+haddps    (%rax), %xmm2
+
+hsubpd    %xmm0, %xmm2
+hsubpd    (%rax), %xmm2
+
+hsubps    %xmm0, %xmm2
+hsubps    (%rax), %xmm2
+
+lddqu     (%rax), %xmm2
+
+movddup   %xmm0, %xmm2
+movddup   (%rax), %xmm2
+
+movshdup  %xmm0, %xmm2
+movshdup  (%rax), %xmm2
+
+movsldup  %xmm0, %xmm2
+movsldup  (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      4     0.50                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addsubps        (%rax), %xmm2
+# CHECK-NEXT:  3      6     2.00                       haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  haddpd  (%rax), %xmm2
+# CHECK-NEXT:  3      6     2.00                       haddps  %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  haddps  (%rax), %xmm2
+# CHECK-NEXT:  3      6     2.00                       hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  3      6     2.00                       hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  hsubps  (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  lddqu   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movddup %xmm0, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movddup (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movshdup        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movsldup        (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKLDivider
+# CHECK-NEXT: [1] - SKLFPDivider
+# CHECK-NEXT: [2] - SKLPort0
+# CHECK-NEXT: [3] - SKLPort1
+# CHECK-NEXT: [4] - SKLPort2
+# CHECK-NEXT: [5] - SKLPort3
+# CHECK-NEXT: [6] - SKLPort4
+# CHECK-NEXT: [7] - SKLPort5
+# CHECK-NEXT: [8] - SKLPort6
+# CHECK-NEXT: [9] - SKLPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     6.00   6.00   5.00   5.00    -     19.00   -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        addsubps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     2.00    -      -        haddpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        haddps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     2.00    -      -        haddps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     2.00    -      -        hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     2.00    -      -        hsubps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        lddqu   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movddup %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movddup (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movshdup        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movsldup        (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse41.s
new file mode 100644 (file)
index 0000000..99a971f
--- /dev/null
@@ -0,0 +1,369 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -instruction-tables < %s | FileCheck %s
+
+blendpd     $11, %xmm0, %xmm2
+blendpd     $11, (%rax), %xmm2
+
+blendps     $11, %xmm0, %xmm2
+blendps     $11, (%rax), %xmm2
+
+blendvpd    %xmm0, %xmm2
+blendvpd    (%rax), %xmm2
+
+blendvps    %xmm0, %xmm2
+blendvps    (%rax), %xmm2
+
+dppd        $22, %xmm0, %xmm2
+dppd        $22, (%rax), %xmm2
+
+dpps        $22, %xmm0, %xmm2
+dpps        $22, (%rax), %xmm2
+
+extractps   $1, %xmm0, %rcx
+extractps   $1, %xmm0, (%rax)
+
+insertps    $1, %xmm0, %xmm2
+insertps    $1, (%rax), %xmm2
+
+movntdqa    (%rax), %xmm2
+
+mpsadbw     $1, %xmm0, %xmm2
+mpsadbw     $1, (%rax), %xmm2
+
+packusdw    %xmm0, %xmm2
+packusdw    (%rax), %xmm2
+
+pblendvb    %xmm0, %xmm2
+pblendvb    (%rax), %xmm2
+
+pblendw     $11, %xmm0, %xmm2
+pblendw     $11, (%rax), %xmm2
+
+pcmpeqq     %xmm0, %xmm2
+pcmpeqq     (%rax), %xmm2
+
+pextrb      $1, %xmm0, %ecx
+pextrb      $1, %xmm0, (%rax)
+
+pextrd      $1, %xmm0, %ecx
+pextrd      $1, %xmm0, (%rax)
+
+pextrq      $1, %xmm0, %rcx
+pextrq      $1, %xmm0, (%rax)
+
+pextrw      $1, %xmm0, (%rax)
+
+phminposuw  %xmm0, %xmm2
+phminposuw  (%rax), %xmm2
+
+pinsrb      $1, %eax, %xmm1
+pinsrb      $1, (%rax), %xmm1
+
+pinsrd      $1, %eax, %xmm1
+pinsrd      $1, (%rax), %xmm1
+
+pinsrq      $1, %rax, %xmm1
+pinsrq      $1, (%rax), %xmm1
+
+pmaxsb      %xmm0, %xmm2
+pmaxsb      (%rax), %xmm2
+
+pmaxsd      %xmm0, %xmm2
+pmaxsd      (%rax), %xmm2
+
+pmaxud      %xmm0, %xmm2
+pmaxud      (%rax), %xmm2
+
+pmaxuw      %xmm0, %xmm2
+pmaxuw      (%rax), %xmm2
+
+pminsb      %xmm0, %xmm2
+pminsb      (%rax), %xmm2
+
+pminsd      %xmm0, %xmm2
+pminsd      (%rax), %xmm2
+
+pminud      %xmm0, %xmm2
+pminud      (%rax), %xmm2
+
+pminuw      %xmm0, %xmm2
+pminuw      (%rax), %xmm2
+
+pmovsxbd    %xmm0, %xmm2
+pmovsxbd    (%rax), %xmm2
+
+pmovsxbq    %xmm0, %xmm2
+pmovsxbq    (%rax), %xmm2
+
+pmovsxbw    %xmm0, %xmm2
+pmovsxbw    (%rax), %xmm2
+
+pmovsxdq    %xmm0, %xmm2
+pmovsxdq    (%rax), %xmm2
+
+pmovsxwd    %xmm0, %xmm2
+pmovsxwd    (%rax), %xmm2
+
+pmovsxwq    %xmm0, %xmm2
+pmovsxwq    (%rax), %xmm2
+
+pmovzxbd    %xmm0, %xmm2
+pmovzxbd    (%rax), %xmm2
+
+pmovzxbq    %xmm0, %xmm2
+pmovzxbq    (%rax), %xmm2
+
+pmovzxbw    %xmm0, %xmm2
+pmovzxbw    (%rax), %xmm2
+
+pmovzxdq    %xmm0, %xmm2
+pmovzxdq    (%rax), %xmm2
+
+pmovzxwd    %xmm0, %xmm2
+pmovzxwd    (%rax), %xmm2
+
+pmovzxwq    %xmm0, %xmm2
+pmovzxwq    (%rax), %xmm2
+
+pmuldq      %xmm0, %xmm2
+pmuldq      (%rax), %xmm2
+
+pmulld      %xmm0, %xmm2
+pmulld      (%rax), %xmm2
+
+ptest       %xmm0, %xmm1
+ptest       (%rax), %xmm1
+
+roundpd     $1, %xmm0, %xmm2
+roundpd     $1, (%rax), %xmm2
+
+roundps     $1, %xmm0, %xmm2
+roundps     $1, (%rax), %xmm2
+
+roundsd     $1, %xmm0, %xmm2
+roundsd     $1, (%rax), %xmm2
+
+roundss     $1, %xmm0, %xmm2
+roundss     $1, (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.33                       blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.67                       blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     0.67    *                  blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.67                       blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     0.67    *                  blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  3      9     1.00                       dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  4      15    1.00    *                  dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  4      13    1.50                       dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  5      19    1.50    *                  dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  2      4     2.00                       mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      10    2.00    *                  mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packusdw        (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.67                       pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     0.67    *                  pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      3     1.00                       pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      3     1.00                       pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  3      2     1.00           *           pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  3      2     1.00           *           pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      4     0.50                       phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     2.00                       pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     2.00                       pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.50                       pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminud  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.50                       pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  2      10    1.00                       pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  3      16    1.00    *                  pmulld  (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       ptest   %xmm0, %xmm1
+# CHECK-NEXT:  3      9     1.00    *                  ptest   (%rax), %xmm1
+# CHECK-NEXT:  2      8     1.00                       roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      14    1.00    *                  roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  2      8     1.00                       roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      14    1.00    *                  roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  2      8     1.00                       roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      14    1.00    *                  roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  2      8     1.00                       roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      14    1.00    *                  roundss $1, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKLDivider
+# CHECK-NEXT: [1] - SKLFPDivider
+# CHECK-NEXT: [2] - SKLPort0
+# CHECK-NEXT: [3] - SKLPort1
+# CHECK-NEXT: [4] - SKLPort2
+# CHECK-NEXT: [5] - SKLPort3
+# CHECK-NEXT: [6] - SKLPort4
+# CHECK-NEXT: [7] - SKLPort5
+# CHECK-NEXT: [8] - SKLPort6
+# CHECK-NEXT: [9] - SKLPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     37.33  31.33  23.67  23.67  5.00   63.33   -     1.67
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -     1.00    -      -        dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -     1.00    -      -        dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.50   1.50    -      -      -     1.00    -      -        dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.50   1.50   0.50   0.50    -     1.00    -      -        dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packusdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminud  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        pmulld  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        ptest   %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        ptest   (%rax), %xmm1
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -      -      -      -        roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -      -      -      -        roundss $1, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-sse42.s
new file mode 100644 (file)
index 0000000..2dce320
--- /dev/null
@@ -0,0 +1,102 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -instruction-tables < %s | FileCheck %s
+
+crc32b      %al, %ecx
+crc32b      (%rax), %ecx
+
+crc32l      %eax, %ecx
+crc32l      (%rax), %ecx
+
+crc32w      %ax, %ecx
+crc32w      (%rax), %ecx
+
+crc32b      %al, %rcx
+crc32b      (%rax), %rcx
+
+crc32q      %rax, %rcx
+crc32q      (%rax), %rcx
+
+pcmpestri   $1, %xmm0, %xmm2
+pcmpestri   $1, (%rax), %xmm2
+
+pcmpestrm   $1, %xmm0, %xmm2
+pcmpestrm   $1, (%rax), %xmm2
+
+pcmpistri   $1, %xmm0, %xmm2
+pcmpistri   $1, (%rax), %xmm2
+
+pcmpistrm   $1, %xmm0, %xmm2
+pcmpistrm   $1, (%rax), %xmm2
+
+pcmpgtq     %xmm0, %xmm2
+pcmpgtq     (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32b  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32l  %eax, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32l  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32w  %ax, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32w  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %rcx
+# CHECK-NEXT:  2      8     1.00    *                  crc32b  (%rax), %rcx
+# CHECK-NEXT:  1      3     1.00                       crc32q  %rax, %rcx
+# CHECK-NEXT:  2      8     1.00    *                  crc32q  (%rax), %rcx
+# CHECK-NEXT:  8      18    4.00                       pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  9      24    4.00    *                  pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  9      19    4.00                       pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  10     25    4.00    *                  pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  3      10    3.00                       pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      16    3.00    *                  pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  3      10    3.00                       pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      16    3.00    *                  pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  pcmpgtq (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKLDivider
+# CHECK-NEXT: [1] - SKLFPDivider
+# CHECK-NEXT: [2] - SKLPort0
+# CHECK-NEXT: [3] - SKLPort1
+# CHECK-NEXT: [4] - SKLPort2
+# CHECK-NEXT: [5] - SKLPort3
+# CHECK-NEXT: [6] - SKLPort4
+# CHECK-NEXT: [7] - SKLPort5
+# CHECK-NEXT: [8] - SKLPort6
+# CHECK-NEXT: [9] - SKLPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     29.67  11.67  5.00   5.00    -     15.67  1.00    -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32b  %al, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32b  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32l  %eax, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32l  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32w  %ax, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32w  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32b  %al, %rcx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32b  (%rax), %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32q  %rax, %rcx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32q  (%rax), %rcx
+# CHECK-NEXT:  -      -     4.25   0.25    -      -      -     3.25   0.25    -        pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     4.25   0.25   0.50   0.50    -     3.25   0.25    -        pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     4.58   0.58    -      -      -     3.58   0.25    -        pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     4.58   0.58   0.50   0.50    -     3.58   0.25    -        pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.00    -      -      -      -      -      -      -        pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.00    -     0.50   0.50    -      -      -      -        pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.00    -      -      -      -      -      -      -        pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.00    -     0.50   0.50    -      -      -      -        pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pcmpgtq (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-ssse3.s
new file mode 100644 (file)
index 0000000..b0e5067
--- /dev/null
@@ -0,0 +1,256 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -instruction-tables < %s | FileCheck %s
+
+pabsb       %mm0, %mm2
+pabsb       (%rax), %mm2
+
+pabsb       %xmm0, %xmm2
+pabsb       (%rax), %xmm2
+
+pabsd       %mm0, %mm2
+pabsd       (%rax), %mm2
+
+pabsd       %xmm0, %xmm2
+pabsd       (%rax), %xmm2
+
+pabsw       %mm0, %mm2
+pabsw       (%rax), %mm2
+
+pabsw       %xmm0, %xmm2
+pabsw       (%rax), %xmm2
+
+palignr     $1, %mm0, %mm2
+palignr     $1, (%rax), %mm2
+
+palignr     $1, %xmm0, %xmm2
+palignr     $1, (%rax), %xmm2
+
+phaddd      %mm0, %mm2
+phaddd      (%rax), %mm2
+
+phaddd      %xmm0, %xmm2
+phaddd      (%rax), %xmm2
+
+phaddsw     %mm0, %mm2
+phaddsw     (%rax), %mm2
+
+phaddsw     %xmm0, %xmm2
+phaddsw     (%rax), %xmm2
+
+phaddw      %mm0, %mm2
+phaddw      (%rax), %mm2
+
+phaddw      %xmm0, %xmm2
+phaddw      (%rax), %xmm2
+
+phsubd      %mm0, %mm2
+phsubd      (%rax), %mm2
+
+phsubd      %xmm0, %xmm2
+phsubd      (%rax), %xmm2
+
+phsubsw     %mm0, %mm2
+phsubsw     (%rax), %mm2
+
+phsubsw     %xmm0, %xmm2
+phsubsw     (%rax), %xmm2
+
+phsubw      %mm0, %mm2
+phsubw      (%rax), %mm2
+
+phsubw      %xmm0, %xmm2
+phsubw      (%rax), %xmm2
+
+pmaddubsw   %mm0, %mm2
+pmaddubsw   (%rax), %mm2
+
+pmaddubsw   %xmm0, %xmm2
+pmaddubsw   (%rax), %xmm2
+
+pmulhrsw    %mm0, %mm2
+pmulhrsw    (%rax), %mm2
+
+pmulhrsw    %xmm0, %xmm2
+pmulhrsw    (%rax), %xmm2
+
+pshufb      %mm0, %mm2
+pshufb      (%rax), %mm2
+
+pshufb      %xmm0, %xmm2
+pshufb      (%rax), %xmm2
+
+psignb      %mm0, %mm2
+psignb      (%rax), %mm2
+
+psignb      %xmm0, %xmm2
+psignb      (%rax), %xmm2
+
+psignd      %mm0, %mm2
+psignd      (%rax), %mm2
+
+psignd      %xmm0, %xmm2
+psignd      (%rax), %xmm2
+
+psignw      %mm0, %mm2
+psignw      (%rax), %mm2
+
+psignw      %xmm0, %xmm2
+psignw      (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.50                       pabsb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  palignr $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddd  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddd  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddsw %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddsw (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddw  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddw  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddw  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubd  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubd  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubsw %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubsw (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubw  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubw  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  1      4     0.50                       pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  1      4     0.50                       pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignd  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignw  (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKLDivider
+# CHECK-NEXT: [1] - SKLFPDivider
+# CHECK-NEXT: [2] - SKLPort0
+# CHECK-NEXT: [3] - SKLPort1
+# CHECK-NEXT: [4] - SKLPort2
+# CHECK-NEXT: [5] - SKLPort3
+# CHECK-NEXT: [6] - SKLPort4
+# CHECK-NEXT: [7] - SKLPort5
+# CHECK-NEXT: [8] - SKLPort6
+# CHECK-NEXT: [9] - SKLPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     30.67  12.67  16.00  16.00   -     68.67   -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pabsb   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pabsb   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pabsb   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pabsd   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pabsd   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pabsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pabsw   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pabsw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pabsw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        palignr $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        palignr $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     2.50    -      -        phaddd  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     2.50    -      -        phaddd  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        phaddd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     2.00    -      -        phaddsw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     2.00    -      -        phaddsw (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     2.00    -      -        phaddsw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     2.50    -      -        phaddw  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     2.50    -      -        phaddw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        phaddw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     2.50    -      -        phsubd  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     2.50    -      -        phsubd  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        phsubd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     2.00    -      -        phsubsw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     2.00    -      -        phsubsw (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     2.00    -      -        phsubsw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     2.50    -      -        phsubw  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     2.50    -      -        phsubw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        phsubw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psignb  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psignb  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psignb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psignb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psignd  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psignd  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psignd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psignd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psignw  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psignw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psignw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psignw  (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse1.s
new file mode 100644 (file)
index 0000000..eade192
--- /dev/null
@@ -0,0 +1,464 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 -instruction-tables < %s | FileCheck %s
+
+addps       %xmm0, %xmm2
+addps       (%rax), %xmm2
+
+addss       %xmm0, %xmm2
+addss       (%rax), %xmm2
+
+andnps      %xmm0, %xmm2
+andnps      (%rax), %xmm2
+
+andps       %xmm0, %xmm2
+andps       (%rax), %xmm2
+
+cmpps       $0, %xmm0, %xmm2
+cmpps       $0, (%rax), %xmm2
+
+cmpss       $0, %xmm0, %xmm2
+cmpss       $0, (%rax), %xmm2
+
+comiss      %xmm0, %xmm1
+comiss      (%rax), %xmm1
+
+cvtpi2ps    %mm0, %xmm2
+cvtpi2ps    (%rax), %xmm2
+
+cvtps2pi    %xmm0, %mm2
+cvtps2pi    (%rax), %mm2
+
+cvtsi2ss    %ecx, %xmm2
+cvtsi2ss    %rcx, %xmm2
+cvtsi2ss    (%rax), %xmm2
+cvtsi2ss    (%rax), %xmm2
+
+cvtss2si    %xmm0, %ecx
+cvtss2si    %xmm0, %rcx
+cvtss2si    (%rax), %ecx
+cvtss2si    (%rax), %rcx
+
+cvttps2pi   %xmm0, %mm2
+cvttps2pi   (%rax), %mm2
+
+cvttss2si   %xmm0, %ecx
+cvttss2si   %xmm0, %rcx
+cvttss2si   (%rax), %ecx
+cvttss2si   (%rax), %rcx
+
+divps       %xmm0, %xmm2
+divps       (%rax), %xmm2
+
+divss       %xmm0, %xmm2
+divss       (%rax), %xmm2
+
+ldmxcsr     (%rax)
+
+maskmovq    %mm0, %mm1
+
+maxps       %xmm0, %xmm2
+maxps       (%rax), %xmm2
+
+maxss       %xmm0, %xmm2
+maxss       (%rax), %xmm2
+
+minps       %xmm0, %xmm2
+minps       (%rax), %xmm2
+
+minss       %xmm0, %xmm2
+minss       (%rax), %xmm2
+
+movaps      %xmm0, %xmm2
+movaps      %xmm0, (%rax)
+movaps      (%rax), %xmm2
+
+movhlps     %xmm0, %xmm2
+movlhps     %xmm0, %xmm2
+
+movhps      %xmm0, (%rax)
+movhps      (%rax), %xmm2
+
+movlps      %xmm0, (%rax)
+movlps      (%rax), %xmm2
+
+movmskps    %xmm0, %rcx
+
+movntps     %xmm0, (%rax)
+movntq      %mm0, (%rax)
+
+movss       %xmm0, %xmm2
+movss       %xmm0, (%rax)
+movss       (%rax), %xmm2
+
+movups      %xmm0, %xmm2
+movups      %xmm0, (%rax)
+movups      (%rax), %xmm2
+
+mulps       %xmm0, %xmm2
+mulps       (%rax), %xmm2
+
+mulss       %xmm0, %xmm2
+mulss       (%rax), %xmm2
+
+orps        %xmm0, %xmm2
+orps        (%rax), %xmm2
+
+pavgb       %mm0, %mm2
+pavgb       (%rax), %mm2
+
+pavgw       %mm0, %mm2
+pavgw       (%rax), %mm2
+
+pextrw      $1, %mm0, %rcx
+
+pinsrw      $1, %rax, %mm2
+pinsrw      $1, (%rax), %mm2
+
+pmaxsw      %mm0, %mm2
+pmaxsw      (%rax), %mm2
+
+pmaxub      %mm0, %mm2
+pmaxub      (%rax), %mm2
+
+pminsw      %mm0, %mm2
+pminsw      (%rax), %mm2
+
+pminub      %mm0, %mm2
+pminub      (%rax), %mm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %mm0, %mm2
+pmulhuw     (%rax), %mm2
+
+prefetcht0  (%rax)
+prefetcht1  (%rax)
+prefetcht2  (%rax)
+prefetchnta (%rax)
+
+psadbw      %mm0, %mm2
+psadbw      (%rax), %mm2
+
+pshufw      $1, %mm0, %mm2
+pshufw      $1, (%rax), %mm2
+
+rcpps       %xmm0, %xmm2
+rcpps       (%rax), %xmm2
+
+rcpss       %xmm0, %xmm2
+rcpss       (%rax), %xmm2
+
+rsqrtps     %xmm0, %xmm2
+rsqrtps     (%rax), %xmm2
+
+rsqrtss     %xmm0, %xmm2
+rsqrtss     (%rax), %xmm2
+
+sfence
+
+shufps      $1, %xmm0, %xmm2
+shufps      $1, (%rax), %xmm2
+
+sqrtps      %xmm0, %xmm2
+sqrtps      (%rax), %xmm2
+
+sqrtss      %xmm0, %xmm2
+sqrtss      (%rax), %xmm2
+
+stmxcsr     (%rax)
+
+subps       %xmm0, %xmm2
+subps       (%rax), %xmm2
+
+subss       %xmm0, %xmm2
+subss       (%rax), %xmm2
+
+ucomiss     %xmm0, %xmm1
+ucomiss     (%rax), %xmm1
+
+unpckhps    %xmm0, %xmm2
+unpckhps    (%rax), %xmm2
+
+unpcklps    %xmm0, %xmm2
+unpcklps    (%rax), %xmm2
+
+xorps       %xmm0, %xmm2
+xorps       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      4     0.33                       addps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       addss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  addss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       andnps  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  andnps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       andps   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  andps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       comiss  %xmm0, %xmm1
+# CHECK-NEXT:  2      7     1.00    *                  comiss  (%rax), %xmm1
+# CHECK-NEXT:  2      6     2.00                       cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  2      9     0.50    *                  cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  2      5     1.00                       cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  3      6     2.00                       cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00                       cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  2      6     1.00                       cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  3      11    1.00    *                  cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  3      11    1.00    *                  cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  2      5     1.00                       cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  2      9     0.50    *                  cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  3      7     1.00                       cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  3      7     1.00                       cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  3      11    1.00    *                  cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  4      12    1.00    *                  cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  1      11    3.00                       divps   %xmm0, %xmm2
+# CHECK-NEXT:  2      17    5.00    *                  divps   (%rax), %xmm2
+# CHECK-NEXT:  1      11    3.00                       divss   %xmm0, %xmm2
+# CHECK-NEXT:  2      16    3.00    *                  divss   (%rax), %xmm2
+# CHECK-NEXT:  3      7     1.00    *      *      *    ldmxcsr (%rax)
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovq        %mm0, %mm1
+# CHECK-NEXT:  1      4     0.33                       maxps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  maxps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       maxss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  maxss   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       minps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  minps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       minss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  minss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movaps  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movaps  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movaps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movhlps %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movlhps %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movhps  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movhps  (%rax), %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movlps  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movlps  (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movmskps        %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movntps %xmm0, (%rax)
+# CHECK-NEXT:  2      1     1.00    *      *      *    movntq  %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movss   %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movss   %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movups  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movups  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movups  (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       mulps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       mulss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  mulss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       orps    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  orps    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pavgb   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pavgb   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pavgw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pavgw   (%rax), %mm2
+# CHECK-NEXT:  2      3     1.00                       pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  2      2     2.00                       pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pmaxub  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pmaxub  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pminsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pminsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pminub  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pminub  (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      4     1.00                       pmulhuw %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmulhuw (%rax), %mm2
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht0      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht1      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetcht2      (%rax)
+# CHECK-NEXT:  1      5     0.50    *      *           prefetchnta     (%rax)
+# CHECK-NEXT:  1      3     1.00                       psadbw  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psadbw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rcpps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  rcpss   (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.33    *      *      *    sfence
+# CHECK-NEXT:  1      1     1.00                       shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      12    3.00                       sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  2      18    3.00    *                  sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  1      12    3.00                       sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  2      17    3.00    *                  sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  3      2     1.00    *      *      *    stmxcsr (%rax)
+# CHECK-NEXT:  1      4     0.33                       subps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  subps   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       subss   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  subss   (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  2      7     1.00    *                  ucomiss (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       xorps   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  xorps   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKXDivider
+# CHECK-NEXT: [1] - SKXFPDivider
+# CHECK-NEXT: [2] - SKXPort0
+# CHECK-NEXT: [3] - SKXPort1
+# CHECK-NEXT: [4] - SKXPort2
+# CHECK-NEXT: [5] - SKXPort3
+# CHECK-NEXT: [6] - SKXPort4
+# CHECK-NEXT: [7] - SKXPort5
+# CHECK-NEXT: [8] - SKXPort6
+# CHECK-NEXT: [9] - SKXPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -     26.00  65.50  18.50  32.00  32.00  8.00   45.50  0.50   3.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        addps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        addps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        addss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        addss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        andnps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        andnps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        andps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        andps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        comiss  %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        comiss  (%rax), %xmm1
+# CHECK-NEXT:  -      -     2.00    -      -      -      -      -      -      -        cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.33   0.33    -      -      -     0.33    -      -        cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.33   0.33    -      -      -     0.33    -      -        cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.33   0.33   0.50   0.50    -     0.33    -      -        cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  -      -     1.33   0.33   0.50   0.50    -     0.33    -      -        cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -     1.33   0.33    -      -      -     1.33    -      -        cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.33   0.33    -      -      -     1.33    -      -        cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.33   0.33   0.50   0.50    -     0.33    -      -        cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  -      -     1.33   0.33   0.50   0.50    -     1.33    -      -        cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divps   %xmm0, %xmm2
+# CHECK-NEXT:  -     5.00   1.00    -     0.50   0.50    -      -      -      -        divps   (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divss   %xmm0, %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -     0.50   0.50    -      -      -      -        divss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.25   0.25   0.50   0.50    -     0.25   0.25    -        ldmxcsr (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        maskmovq        %mm0, %mm1
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        maxps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        maxps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        maxss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        maxss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        minps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        minps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        minss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        minss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movaps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movaps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movaps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movhlps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movlhps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movhps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movhps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movlps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movlps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movmskps        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntps %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntq  %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movss   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movups  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movups  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movups  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        mulps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        mulps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        mulss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        mulss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        orps    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        orps    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pavgb   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pavgb   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pavgw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pavgw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaxub  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaxub  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pminsw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pminsw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pminub  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pminub  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhuw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhuw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht0      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht1      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetcht2      (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        prefetchnta     (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        psadbw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        psadbw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rcpps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rcpss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25   0.33   0.33    -     0.25   0.25   0.33      sfence
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -     0.50   0.50    -      -      -      -        sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -     0.50   0.50    -      -      -      -        sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      stmxcsr (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        subps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        subps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        subss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        subss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        ucomiss (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        xorps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        xorps   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse2.s
new file mode 100644 (file)
index 0000000..d0f43a4
--- /dev/null
@@ -0,0 +1,952 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 -instruction-tables < %s | FileCheck %s
+
+addpd       %xmm0, %xmm2
+addpd       (%rax), %xmm2
+
+addsd       %xmm0, %xmm2
+addsd       (%rax), %xmm2
+
+addsubpd    %xmm0, %xmm2
+addsubpd    (%rax), %xmm2
+
+andnpd      %xmm0, %xmm2
+andnpd      (%rax), %xmm2
+
+andpd       %xmm0, %xmm2
+andpd       (%rax), %xmm2
+
+clflush     (%rax)
+
+cmppd       $0, %xmm0, %xmm2
+cmppd       $0, (%rax), %xmm2
+
+cmpsd       $0, %xmm0, %xmm2
+cmpsd       $0, (%rax), %xmm2
+
+comisd      %xmm0, %xmm1
+comisd      (%rax), %xmm1
+
+cvtdq2pd    %xmm0, %xmm2
+cvtdq2pd    (%rax), %xmm2
+
+cvtdq2ps    %xmm0, %xmm2
+cvtdq2ps    (%rax), %xmm2
+
+cvtpd2dq    %xmm0, %xmm2
+cvtpd2dq    (%rax), %xmm2
+
+cvtpd2pi    %xmm0, %mm2
+cvtpd2pi    (%rax), %mm2
+
+cvtpd2ps    %xmm0, %xmm2
+cvtpd2ps    (%rax), %xmm2
+
+cvtpi2pd    %mm0, %xmm2
+cvtpi2pd    (%rax), %xmm2
+
+cvtps2dq    %xmm0, %xmm2
+cvtps2dq    (%rax), %xmm2
+
+cvtps2pd    %xmm0, %xmm2
+cvtps2pd    (%rax), %xmm2
+
+cvtsd2si    %xmm0, %ecx
+cvtsd2si    %xmm0, %rcx
+cvtsd2si    (%rax), %ecx
+cvtsd2si    (%rax), %rcx
+
+cvtsd2ss    %xmm0, %xmm2
+cvtsd2ss    (%rax), %xmm2
+
+cvtsi2sd    %ecx, %xmm2
+cvtsi2sd    %rcx, %xmm2
+cvtsi2sd    (%rax), %xmm2
+cvtsi2sd    (%rax), %xmm2
+
+cvtss2sd    %xmm0, %xmm2
+cvtss2sd    (%rax), %xmm2
+
+cvttpd2dq   %xmm0, %xmm2
+cvttpd2dq   (%rax), %xmm2
+
+cvttpd2pi   %xmm0, %mm2
+cvttpd2pi   (%rax), %mm2
+
+cvttps2dq   %xmm0, %xmm2
+cvttps2dq   (%rax), %xmm2
+
+cvttsd2si   %xmm0, %ecx
+cvttsd2si   %xmm0, %rcx
+cvttsd2si   (%rax), %ecx
+cvttsd2si   (%rax), %rcx
+
+divpd       %xmm0, %xmm2
+divpd       (%rax), %xmm2
+
+divsd       %xmm0, %xmm2
+divsd       (%rax), %xmm2
+
+lfence
+
+maskmovdqu  %xmm0, %xmm1
+
+maxpd       %xmm0, %xmm2
+maxpd       (%rax), %xmm2
+
+maxsd       %xmm0, %xmm2
+maxsd       (%rax), %xmm2
+
+minpd       %xmm0, %xmm2
+minpd       (%rax), %xmm2
+
+minsd       %xmm0, %xmm2
+minsd       (%rax), %xmm2
+
+movapd      %xmm0, %xmm2
+movapd      %xmm0, (%rax)
+movapd      (%rax), %xmm2
+
+movd        %eax, %xmm2
+movd        (%rax), %xmm2
+
+movd        %xmm0, %ecx
+movd        %xmm0, (%rax)
+
+movdqa      %xmm0, %xmm2
+movdqa      %xmm0, (%rax)
+movdqa      (%rax), %xmm2
+
+movdqu      %xmm0, %xmm2
+movdqu      %xmm0, (%rax)
+movdqu      (%rax), %xmm2
+
+movdq2q     %xmm0, %mm2
+
+movhpd      %xmm0, (%rax)
+movhpd      (%rax), %xmm2
+
+movlpd      %xmm0, (%rax)
+movlpd      (%rax), %xmm2
+
+movmskpd    %xmm0, %rcx
+
+movntdq     %xmm0, (%rax)
+movntpd     %xmm0, (%rax)
+
+movq        %xmm0, %xmm2
+
+movq        %rax, %xmm2
+movq        (%rax), %xmm2
+
+movq        %xmm0, %rcx
+movq        %xmm0, (%rax)
+
+movq2dq     %mm0, %xmm2
+
+movsd       %xmm0, %xmm2
+movsd       %xmm0, (%rax)
+movsd       (%rax), %xmm2
+
+movupd      %xmm0, %xmm2
+movupd      %xmm0, (%rax)
+movupd      (%rax), %xmm2
+
+mulpd       %xmm0, %xmm2
+mulpd       (%rax), %xmm2
+
+mulsd       %xmm0, %xmm2
+mulsd       (%rax), %xmm2
+
+orpd        %xmm0, %xmm2
+orpd        (%rax), %xmm2
+
+packssdw    %xmm0, %xmm2
+packssdw    (%rax), %xmm2
+
+packsswb    %xmm0, %xmm2
+packsswb    (%rax), %xmm2
+
+packuswb    %xmm0, %xmm2
+packuswb    (%rax), %xmm2
+
+paddb       %xmm0, %xmm2
+paddb       (%rax), %xmm2
+
+paddd       %xmm0, %xmm2
+paddd       (%rax), %xmm2
+
+paddq       %mm0, %mm2
+paddq       (%rax), %mm2
+
+paddq       %xmm0, %xmm2
+paddq       (%rax), %xmm2
+
+paddsb      %xmm0, %xmm2
+paddsb      (%rax), %xmm2
+
+paddsw      %xmm0, %xmm2
+paddsw      (%rax), %xmm2
+
+paddusb     %xmm0, %xmm2
+paddusb     (%rax), %xmm2
+
+paddusw     %xmm0, %xmm2
+paddusw     (%rax), %xmm2
+
+paddw       %xmm0, %xmm2
+paddw       (%rax), %xmm2
+
+pand        %xmm0, %xmm2
+pand        (%rax), %xmm2
+
+pandn       %xmm0, %xmm2
+pandn       (%rax), %xmm2
+
+pavgb       %xmm0, %xmm2
+pavgb       (%rax), %xmm2
+
+pavgw       %xmm0, %xmm2
+pavgw       (%rax), %xmm2
+
+pcmpeqb     %xmm0, %xmm2
+pcmpeqb     (%rax), %xmm2
+
+pcmpeqd     %xmm0, %xmm2
+pcmpeqd     (%rax), %xmm2
+
+pcmpeqw     %xmm0, %xmm2
+pcmpeqw     (%rax), %xmm2
+
+pcmpgtb     %xmm0, %xmm2
+pcmpgtb     (%rax), %xmm2
+
+pcmpgtd     %xmm0, %xmm2
+pcmpgtd     (%rax), %xmm2
+
+pcmpgtw     %xmm0, %xmm2
+pcmpgtw     (%rax), %xmm2
+
+pextrw      $1, %xmm0, %rcx
+
+pmaddwd     %xmm0, %xmm2
+pmaddwd     (%rax), %xmm2
+
+pmaxsw      %xmm0, %xmm2
+pmaxsw      (%rax), %xmm2
+
+pmaxub      %xmm0, %xmm2
+pmaxub      (%rax), %xmm2
+
+pminsw      %xmm0, %xmm2
+pminsw      (%rax), %xmm2
+
+pminub      %xmm0, %xmm2
+pminub      (%rax), %xmm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %xmm0, %xmm2
+pmulhuw     (%rax), %xmm2
+
+pmulhw      %xmm0, %xmm2
+pmulhw      (%rax), %xmm2
+
+pmullw      %xmm0, %xmm2
+pmullw      (%rax), %xmm2
+
+pmuludq     %mm0, %mm2
+pmuludq     (%rax), %mm2
+
+pmuludq     %xmm0, %xmm2
+pmuludq     (%rax), %xmm2
+
+por         %xmm0, %xmm2
+por         (%rax), %xmm2
+
+psadbw      %xmm0, %xmm2
+psadbw      (%rax), %xmm2
+
+pshufd      $1, %xmm0, %xmm2
+pshufd      $1, (%rax), %xmm2
+
+pshufhw     $1, %xmm0, %xmm2
+pshufhw     $1, (%rax), %xmm2
+
+pshuflw     $1, %xmm0, %xmm2
+pshuflw     $1, (%rax), %xmm2
+
+pslld       $1, %xmm2
+pslld       %xmm0, %xmm2
+pslld       (%rax), %xmm2
+
+pslldq      $1, %xmm2
+
+psllq       $1, %xmm2
+psllq       %xmm0, %xmm2
+psllq       (%rax), %xmm2
+
+psllw       $1, %xmm2
+psllw       %xmm0, %xmm2
+psllw       (%rax), %xmm2
+
+psrad       $1, %xmm2
+psrad       %xmm0, %xmm2
+psrad       (%rax), %xmm2
+
+psraw       $1, %xmm2
+psraw       %xmm0, %xmm2
+psraw       (%rax), %xmm2
+
+psrld       $1, %xmm2
+psrld       %xmm0, %xmm2
+psrld       (%rax), %xmm2
+
+psrldq      $1, %xmm2
+
+psrlq       $1, %xmm2
+psrlq       %xmm0, %xmm2
+psrlq       (%rax), %xmm2
+
+psrlw       $1, %xmm2
+psrlw       %xmm0, %xmm2
+psrlw       (%rax), %xmm2
+
+psubb       %xmm0, %xmm2
+psubb       (%rax), %xmm2
+
+psubd       %xmm0, %xmm2
+psubd       (%rax), %xmm2
+
+psubq       %mm0, %mm2
+psubq       (%rax), %mm2
+
+psubq       %xmm0, %xmm2
+psubq       (%rax), %xmm2
+
+psubsb      %xmm0, %xmm2
+psubsb      (%rax), %xmm2
+
+psubsw      %xmm0, %xmm2
+psubsw      (%rax), %xmm2
+
+psubusb     %xmm0, %xmm2
+psubusb     (%rax), %xmm2
+
+psubusw     %xmm0, %xmm2
+psubusw     (%rax), %xmm2
+
+psubw       %xmm0, %xmm2
+psubw       (%rax), %xmm2
+
+punpckhbw   %xmm0, %xmm2
+punpckhbw   (%rax), %xmm2
+
+punpckhdq   %xmm0, %xmm2
+punpckhdq   (%rax), %xmm2
+
+punpckhqdq  %xmm0, %xmm2
+punpckhqdq  (%rax), %xmm2
+
+punpckhwd   %xmm0, %xmm2
+punpckhwd   (%rax), %xmm2
+
+punpcklbw   %xmm0, %xmm2
+punpcklbw   (%rax), %xmm2
+
+punpckldq   %xmm0, %xmm2
+punpckldq   (%rax), %xmm2
+
+punpcklqdq  %xmm0, %xmm2
+punpcklqdq  (%rax), %xmm2
+
+punpcklwd   %xmm0, %xmm2
+punpcklwd   (%rax), %xmm2
+
+pxor        %xmm0, %xmm2
+pxor        (%rax), %xmm2
+
+shufpd      $1, %xmm0, %xmm2
+shufpd      $1, (%rax), %xmm2
+
+sqrtpd      %xmm0, %xmm2
+sqrtpd      (%rax), %xmm2
+
+sqrtsd      %xmm0, %xmm2
+sqrtsd      (%rax), %xmm2
+
+subpd       %xmm0, %xmm2
+subpd       (%rax), %xmm2
+
+subsd       %xmm0, %xmm2
+subsd       (%rax), %xmm2
+
+ucomisd     %xmm0, %xmm1
+ucomisd     (%rax), %xmm1
+
+unpckhpd    %xmm0, %xmm2
+unpckhpd    (%rax), %xmm2
+
+unpcklpd    %xmm0, %xmm2
+unpcklpd    (%rax), %xmm2
+
+xorpd       %xmm0, %xmm2
+xorpd       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      4     0.33                       addpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       addsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  addsd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  andnpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       andpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  andpd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00    *      *      *    clflush (%rax)
+# CHECK-NEXT:  1      4     0.33                       cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       comisd  %xmm0, %xmm1
+# CHECK-NEXT:  2      7     1.00    *                  comisd  (%rax), %xmm1
+# CHECK-NEXT:  2      5     1.00                       cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  3      11    1.00    *                  cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  3      11    1.00    *                  cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  3      11    1.00    *                  cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  2      5     1.00                       cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  3      11    1.00    *                  cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00                       cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  2      6     1.00                       cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  3      11    1.00    *                  cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  3      11    1.00    *                  cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  2      5     1.00                       cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  3      11    1.00    *                  cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  3      11    1.00    *                  cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  1      4     0.33                       cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  2      6     1.00                       cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  2      6     1.00                       cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  3      11    1.00    *                  cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  3      11    1.00    *                  cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  1      14    3.00                       divpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      20    4.00    *                  divpd   (%rax), %xmm2
+# CHECK-NEXT:  1      14    3.00                       divsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      19    4.00    *                  divsd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.50    *      *      *    lfence
+# CHECK-NEXT:  1      1     1.00    *      *      *    maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  1      4     0.33                       maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  maxpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  maxsd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       minpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  minpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       minsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  minsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movapd  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movapd  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movapd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movd    %eax, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movd    %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movd    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movdqa  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movdqu  (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       movdq2q %xmm0, %mm2
+# CHECK-NEXT:  2      1     1.00           *           movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movhpd  (%rax), %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      6     1.00    *                  movlpd  (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *           movntdq %xmm0, (%rax)
+# CHECK-NEXT:  2      1     1.00           *           movntpd %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movq    %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movq    %xmm0, %rcx
+# CHECK-NEXT:  2      1     1.00           *           movq    %xmm0, (%rax)
+# CHECK-NEXT:  2      2     2.00                       movq2dq %mm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movsd   %xmm0, (%rax)
+# CHECK-NEXT:  1      5     0.50    *                  movsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       movupd  %xmm0, %xmm2
+# CHECK-NEXT:  2      1     1.00           *           movupd  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movupd  (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  mulsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       orpd    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  orpd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packssdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packsswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packuswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       paddb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       paddd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddq   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       paddq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       paddusw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       paddw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  paddw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pand    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pand    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pandn   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pandn   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pavgb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pavgw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  1      4     0.33                       pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminub  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminub  (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      4     0.33                       pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmullw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmuludq %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmuludq (%rax), %mm2
+# CHECK-NEXT:  1      4     0.33                       pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmuludq (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       por     %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  por     (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  psadbw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pslld   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       pslld   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pslld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslldq  $1, %xmm2
+# CHECK-NEXT:  1      1     0.50                       psllq   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psllq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psllq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psllw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psllw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psllw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psrad   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrad   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psrad   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psraw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psraw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psraw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psrld   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrld   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psrld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrldq  $1, %xmm2
+# CHECK-NEXT:  1      1     0.50                       psrlq   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psrlq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psrlw   $1, %xmm2
+# CHECK-NEXT:  2      2     1.00                       psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psrlw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       psubb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       psubd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubq   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       psubq   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusb %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psubusw %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       psubw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psubw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pxor    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pxor    (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      18    6.00                       sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      24    6.00    *                  sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  1      18    6.00                       sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      23    6.00    *                  sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       subpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  subpd   (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       subsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     0.50    *                  subsd   (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  2      7     1.00    *                  ucomisd (%rax), %xmm1
+# CHECK-NEXT:  1      1     1.00                       unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  xorpd   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKXDivider
+# CHECK-NEXT: [1] - SKXFPDivider
+# CHECK-NEXT: [2] - SKXPort0
+# CHECK-NEXT: [3] - SKXPort1
+# CHECK-NEXT: [4] - SKXPort2
+# CHECK-NEXT: [5] - SKXPort3
+# CHECK-NEXT: [6] - SKXPort4
+# CHECK-NEXT: [7] - SKXPort5
+# CHECK-NEXT: [8] - SKXPort6
+# CHECK-NEXT: [9] - SKXPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -     38.00  101.75 69.75  62.50  62.50  12.00  112.75 1.75   4.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        addpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        addpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        addsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        addsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        andnpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        andpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        andpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     0.25   1.25    -        clflush (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        comisd  %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        comisd  (%rax), %xmm1
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     1.33    -      -        cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     1.33    -      -        cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     1.33    -      -        cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.33   0.33    -      -      -     0.33    -      -        cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.33   0.33    -      -      -     0.33    -      -        cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.33   0.33   0.50   0.50    -     0.33    -      -        cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  -      -     1.33   0.33   0.50   0.50    -     0.33    -      -        cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     1.33    -      -        cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     1.33    -      -        cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     1.33    -      -        cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     1.33    -      -        cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.33   0.33    -      -      -     0.33    -      -        cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.33   0.33    -      -      -     0.33    -      -        cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.33   0.33   0.50   0.50    -     0.33    -      -        cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  -      -     1.33   0.33   0.50   0.50    -     0.33    -      -        cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divpd   %xmm0, %xmm2
+# CHECK-NEXT:  -     4.00   1.00    -     0.50   0.50    -      -      -      -        divpd   (%rax), %xmm2
+# CHECK-NEXT:  -     3.00   1.00    -      -      -      -      -      -      -        divsd   %xmm0, %xmm2
+# CHECK-NEXT:  -     4.00   1.00    -     0.50   0.50    -      -      -      -        divsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     0.50   0.50    -        lfence
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        maxpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        maxsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        minpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        minpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        minsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        minsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movapd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movapd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movapd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movd    %eax, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movd    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movd    %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movd    %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movdqa  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movdqu  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        movdq2q %xmm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movhpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        movlpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntdq %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movntpd %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movq    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq    %rax, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movq    (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movq    %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movq    %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        movq2dq %mm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movsd   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        movupd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movupd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movupd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        mulpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        mulsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        orpd    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        orpd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packssdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packsswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packuswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        paddb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        paddb   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        paddd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        paddd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        paddq   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        paddq   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        paddq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        paddq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        paddsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        paddsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        paddusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        paddusb (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        paddusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        paddusw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        paddw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        paddw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pand    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pand    (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pandn   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pandn   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pavgb   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pavgw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminub  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminub  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pmullw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmuludq %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmuludq (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pmuludq (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        por     %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        por     (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        psadbw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pslld   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        pslld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pslld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pslldq  $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psllq   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psllq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psllq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psllw   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psllw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psllw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psrad   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psrad   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psrad   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psraw   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psraw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psraw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psrld   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psrld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psrld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        psrldq  $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psrlq   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psrlq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psrlw   $1, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     1.00    -      -        psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psrlw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        psubb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        psubb   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        psubd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        psubd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psubq   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psubq   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        psubq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        psubq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psubsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psubsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psubusb %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psubusb (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psubusw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psubusw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        psubw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        psubw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pxor    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pxor    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     6.00   1.00    -      -      -      -      -      -      -        sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  -     6.00   1.00    -     0.50   0.50    -      -      -      -        sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  -     6.00   1.00    -      -      -      -      -      -      -        sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  -     6.00   1.00    -     0.50   0.50    -      -      -      -        sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        subpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        subpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        subsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        subsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        ucomisd (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        xorpd   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse3.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse3.s
new file mode 100644 (file)
index 0000000..c9b0d5a
--- /dev/null
@@ -0,0 +1,99 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 -instruction-tables < %s | FileCheck %s
+
+addsubpd  %xmm0, %xmm2
+addsubpd  (%rax),  %xmm2
+
+addsubps  %xmm0, %xmm2
+addsubps  (%rax), %xmm2
+
+haddpd    %xmm0, %xmm2
+haddpd    (%rax), %xmm2
+
+haddps    %xmm0, %xmm2
+haddps    (%rax), %xmm2
+
+hsubpd    %xmm0, %xmm2
+hsubpd    (%rax), %xmm2
+
+hsubps    %xmm0, %xmm2
+hsubps    (%rax), %xmm2
+
+lddqu     (%rax), %xmm2
+
+movddup   %xmm0, %xmm2
+movddup   (%rax), %xmm2
+
+movshdup  %xmm0, %xmm2
+movshdup  (%rax), %xmm2
+
+movsldup  %xmm0, %xmm2
+movsldup  (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      4     0.33                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  addsubps        (%rax), %xmm2
+# CHECK-NEXT:  3      6     2.00                       haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  haddpd  (%rax), %xmm2
+# CHECK-NEXT:  3      6     2.00                       haddps  %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  haddps  (%rax), %xmm2
+# CHECK-NEXT:  3      6     2.00                       hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  3      6     2.00                       hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  4      12    2.00    *                  hsubps  (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  lddqu   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movddup %xmm0, %xmm2
+# CHECK-NEXT:  1      5     0.50    *                  movddup (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movshdup        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movsldup        (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKXDivider
+# CHECK-NEXT: [1] - SKXFPDivider
+# CHECK-NEXT: [2] - SKXPort0
+# CHECK-NEXT: [3] - SKXPort1
+# CHECK-NEXT: [4] - SKXPort2
+# CHECK-NEXT: [5] - SKXPort3
+# CHECK-NEXT: [6] - SKXPort4
+# CHECK-NEXT: [7] - SKXPort5
+# CHECK-NEXT: [8] - SKXPort6
+# CHECK-NEXT: [9] - SKXPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     4.00   4.00   5.00   5.00    -     23.00   -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        addsubps        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        haddpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        haddps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        haddps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        hsubps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        lddqu   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movddup %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movddup (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movshdup        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movsldup        (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse41.s
new file mode 100644 (file)
index 0000000..887b7f8
--- /dev/null
@@ -0,0 +1,369 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 -instruction-tables < %s | FileCheck %s
+
+blendpd     $11, %xmm0, %xmm2
+blendpd     $11, (%rax), %xmm2
+
+blendps     $11, %xmm0, %xmm2
+blendps     $11, (%rax), %xmm2
+
+blendvpd    %xmm0, %xmm2
+blendvpd    (%rax), %xmm2
+
+blendvps    %xmm0, %xmm2
+blendvps    (%rax), %xmm2
+
+dppd        $22, %xmm0, %xmm2
+dppd        $22, (%rax), %xmm2
+
+dpps        $22, %xmm0, %xmm2
+dpps        $22, (%rax), %xmm2
+
+extractps   $1, %xmm0, %rcx
+extractps   $1, %xmm0, (%rax)
+
+insertps    $1, %xmm0, %xmm2
+insertps    $1, (%rax), %xmm2
+
+movntdqa    (%rax), %xmm2
+
+mpsadbw     $1, %xmm0, %xmm2
+mpsadbw     $1, (%rax), %xmm2
+
+packusdw    %xmm0, %xmm2
+packusdw    (%rax), %xmm2
+
+pblendvb    %xmm0, %xmm2
+pblendvb    (%rax), %xmm2
+
+pblendw     $11, %xmm0, %xmm2
+pblendw     $11, (%rax), %xmm2
+
+pcmpeqq     %xmm0, %xmm2
+pcmpeqq     (%rax), %xmm2
+
+pextrb      $1, %xmm0, %ecx
+pextrb      $1, %xmm0, (%rax)
+
+pextrd      $1, %xmm0, %ecx
+pextrd      $1, %xmm0, (%rax)
+
+pextrq      $1, %xmm0, %rcx
+pextrq      $1, %xmm0, (%rax)
+
+pextrw      $1, %xmm0, (%rax)
+
+phminposuw  %xmm0, %xmm2
+phminposuw  (%rax), %xmm2
+
+pinsrb      $1, %eax, %xmm1
+pinsrb      $1, (%rax), %xmm1
+
+pinsrd      $1, %eax, %xmm1
+pinsrd      $1, (%rax), %xmm1
+
+pinsrq      $1, %rax, %xmm1
+pinsrq      $1, (%rax), %xmm1
+
+pmaxsb      %xmm0, %xmm2
+pmaxsb      (%rax), %xmm2
+
+pmaxsd      %xmm0, %xmm2
+pmaxsd      (%rax), %xmm2
+
+pmaxud      %xmm0, %xmm2
+pmaxud      (%rax), %xmm2
+
+pmaxuw      %xmm0, %xmm2
+pmaxuw      (%rax), %xmm2
+
+pminsb      %xmm0, %xmm2
+pminsb      (%rax), %xmm2
+
+pminsd      %xmm0, %xmm2
+pminsd      (%rax), %xmm2
+
+pminud      %xmm0, %xmm2
+pminud      (%rax), %xmm2
+
+pminuw      %xmm0, %xmm2
+pminuw      (%rax), %xmm2
+
+pmovsxbd    %xmm0, %xmm2
+pmovsxbd    (%rax), %xmm2
+
+pmovsxbq    %xmm0, %xmm2
+pmovsxbq    (%rax), %xmm2
+
+pmovsxbw    %xmm0, %xmm2
+pmovsxbw    (%rax), %xmm2
+
+pmovsxdq    %xmm0, %xmm2
+pmovsxdq    (%rax), %xmm2
+
+pmovsxwd    %xmm0, %xmm2
+pmovsxwd    (%rax), %xmm2
+
+pmovsxwq    %xmm0, %xmm2
+pmovsxwq    (%rax), %xmm2
+
+pmovzxbd    %xmm0, %xmm2
+pmovzxbd    (%rax), %xmm2
+
+pmovzxbq    %xmm0, %xmm2
+pmovzxbq    (%rax), %xmm2
+
+pmovzxbw    %xmm0, %xmm2
+pmovzxbw    (%rax), %xmm2
+
+pmovzxdq    %xmm0, %xmm2
+pmovzxdq    (%rax), %xmm2
+
+pmovzxwd    %xmm0, %xmm2
+pmovzxwd    (%rax), %xmm2
+
+pmovzxwq    %xmm0, %xmm2
+pmovzxwq    (%rax), %xmm2
+
+pmuldq      %xmm0, %xmm2
+pmuldq      (%rax), %xmm2
+
+pmulld      %xmm0, %xmm2
+pmulld      (%rax), %xmm2
+
+ptest       %xmm0, %xmm1
+ptest       (%rax), %xmm1
+
+roundpd     $1, %xmm0, %xmm2
+roundpd     $1, (%rax), %xmm2
+
+roundps     $1, %xmm0, %xmm2
+roundps     $1, (%rax), %xmm2
+
+roundsd     $1, %xmm0, %xmm2
+roundsd     $1, (%rax), %xmm2
+
+roundss     $1, %xmm0, %xmm2
+roundss     $1, (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.33                       blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.67                       blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     0.67    *                  blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.67                       blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     0.67    *                  blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  3      9     1.00                       dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  4      15    1.00    *                  dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  4      13    1.33                       dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  5      19    1.33    *                  dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  2      4     2.00                       mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      10    2.00    *                  mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  packusdw        (%rax), %xmm2
+# CHECK-NEXT:  2      2     0.67                       pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     0.67    *                  pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      3     1.00                       pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  3      2     1.00           *           pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      3     1.00                       pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  3      2     1.00           *           pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  3      2     1.00           *           pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      4     0.33                       phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     2.00                       pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     2.00                       pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  2      6     1.00    *                  pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.50                       pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminud  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pminuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      6     1.00    *                  pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      4     0.33                       pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  2      10    0.67                       pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  3      16    0.67    *                  pmulld  (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       ptest   %xmm0, %xmm1
+# CHECK-NEXT:  3      9     1.00    *                  ptest   (%rax), %xmm1
+# CHECK-NEXT:  2      8     0.67                       roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      14    0.67    *                  roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  2      8     0.67                       roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      14    0.67    *                  roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  2      8     0.67                       roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      14    0.67    *                  roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  2      8     0.67                       roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  3      14    0.67    *                  roundss $1, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKXDivider
+# CHECK-NEXT: [1] - SKXFPDivider
+# CHECK-NEXT: [2] - SKXPort0
+# CHECK-NEXT: [3] - SKXPort1
+# CHECK-NEXT: [4] - SKXPort2
+# CHECK-NEXT: [5] - SKXPort3
+# CHECK-NEXT: [6] - SKXPort4
+# CHECK-NEXT: [7] - SKXPort5
+# CHECK-NEXT: [8] - SKXPort6
+# CHECK-NEXT: [9] - SKXPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     31.67  25.67  23.67  23.67  5.00   74.67   -     1.67
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     1.67    -      -        dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     1.67    -      -        dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -      -      -     2.00    -      -        dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00   0.50   0.50    -     2.00    -      -        dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        packusdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00   1.00    -     0.33      pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     2.00    -      -        pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminud  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminud  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pminuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        pmulld  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     1.00    -      -        ptest   %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     1.00    -      -        ptest   (%rax), %xmm1
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67    -      -      -     0.67    -      -        roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.67   0.67   0.50   0.50    -     0.67    -      -        roundss $1, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-sse42.s
new file mode 100644 (file)
index 0000000..c7cc040
--- /dev/null
@@ -0,0 +1,102 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 -instruction-tables < %s | FileCheck %s
+
+crc32b      %al, %ecx
+crc32b      (%rax), %ecx
+
+crc32l      %eax, %ecx
+crc32l      (%rax), %ecx
+
+crc32w      %ax, %ecx
+crc32w      (%rax), %ecx
+
+crc32b      %al, %rcx
+crc32b      (%rax), %rcx
+
+crc32q      %rax, %rcx
+crc32q      (%rax), %rcx
+
+pcmpestri   $1, %xmm0, %xmm2
+pcmpestri   $1, (%rax), %xmm2
+
+pcmpestrm   $1, %xmm0, %xmm2
+pcmpestrm   $1, (%rax), %xmm2
+
+pcmpistri   $1, %xmm0, %xmm2
+pcmpistri   $1, (%rax), %xmm2
+
+pcmpistrm   $1, %xmm0, %xmm2
+pcmpistrm   $1, (%rax), %xmm2
+
+pcmpgtq     %xmm0, %xmm2
+pcmpgtq     (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32b  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32l  %eax, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32l  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32w  %ax, %ecx
+# CHECK-NEXT:  2      8     1.00    *                  crc32w  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %rcx
+# CHECK-NEXT:  2      8     1.00    *                  crc32b  (%rax), %rcx
+# CHECK-NEXT:  1      3     1.00                       crc32q  %rax, %rcx
+# CHECK-NEXT:  2      8     1.00    *                  crc32q  (%rax), %rcx
+# CHECK-NEXT:  8      18    4.00                       pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  9      24    4.00    *                  pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  9      19    4.00                       pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  10     25    4.00    *                  pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  3      10    3.00                       pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      16    3.00    *                  pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  3      10    3.00                       pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      16    3.00    *                  pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  pcmpgtq (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKXDivider
+# CHECK-NEXT: [1] - SKXFPDivider
+# CHECK-NEXT: [2] - SKXPort0
+# CHECK-NEXT: [3] - SKXPort1
+# CHECK-NEXT: [4] - SKXPort2
+# CHECK-NEXT: [5] - SKXPort3
+# CHECK-NEXT: [6] - SKXPort4
+# CHECK-NEXT: [7] - SKXPort5
+# CHECK-NEXT: [8] - SKXPort6
+# CHECK-NEXT: [9] - SKXPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     29.67  11.67  5.00   5.00    -     15.67  1.00    -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32b  %al, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32b  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32l  %eax, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32l  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32w  %ax, %ecx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32w  (%rax), %ecx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32b  %al, %rcx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32b  (%rax), %rcx
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      -      -        crc32q  %rax, %rcx
+# CHECK-NEXT:  -      -      -     1.00   0.50   0.50    -      -      -      -        crc32q  (%rax), %rcx
+# CHECK-NEXT:  -      -     4.25   0.25    -      -      -     3.25   0.25    -        pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     4.25   0.25   0.50   0.50    -     3.25   0.25    -        pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     4.58   0.58    -      -      -     3.58   0.25    -        pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     4.58   0.58   0.50   0.50    -     3.58   0.25    -        pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.00    -      -      -      -      -      -      -        pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.00    -     0.50   0.50    -      -      -      -        pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.00    -      -      -      -      -      -      -        pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.00    -     0.50   0.50    -      -      -      -        pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pcmpgtq (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-ssse3.s
new file mode 100644 (file)
index 0000000..2df2752
--- /dev/null
@@ -0,0 +1,256 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 -instruction-tables < %s | FileCheck %s
+
+pabsb       %mm0, %mm2
+pabsb       (%rax), %mm2
+
+pabsb       %xmm0, %xmm2
+pabsb       (%rax), %xmm2
+
+pabsd       %mm0, %mm2
+pabsd       (%rax), %mm2
+
+pabsd       %xmm0, %xmm2
+pabsd       (%rax), %xmm2
+
+pabsw       %mm0, %mm2
+pabsw       (%rax), %mm2
+
+pabsw       %xmm0, %xmm2
+pabsw       (%rax), %xmm2
+
+palignr     $1, %mm0, %mm2
+palignr     $1, (%rax), %mm2
+
+palignr     $1, %xmm0, %xmm2
+palignr     $1, (%rax), %xmm2
+
+phaddd      %mm0, %mm2
+phaddd      (%rax), %mm2
+
+phaddd      %xmm0, %xmm2
+phaddd      (%rax), %xmm2
+
+phaddsw     %mm0, %mm2
+phaddsw     (%rax), %mm2
+
+phaddsw     %xmm0, %xmm2
+phaddsw     (%rax), %xmm2
+
+phaddw      %mm0, %mm2
+phaddw      (%rax), %mm2
+
+phaddw      %xmm0, %xmm2
+phaddw      (%rax), %xmm2
+
+phsubd      %mm0, %mm2
+phsubd      (%rax), %mm2
+
+phsubd      %xmm0, %xmm2
+phsubd      (%rax), %xmm2
+
+phsubsw     %mm0, %mm2
+phsubsw     (%rax), %mm2
+
+phsubsw     %xmm0, %xmm2
+phsubsw     (%rax), %xmm2
+
+phsubw      %mm0, %mm2
+phsubw      (%rax), %mm2
+
+phsubw      %xmm0, %xmm2
+phsubw      (%rax), %xmm2
+
+pmaddubsw   %mm0, %mm2
+pmaddubsw   (%rax), %mm2
+
+pmaddubsw   %xmm0, %xmm2
+pmaddubsw   (%rax), %xmm2
+
+pmulhrsw    %mm0, %mm2
+pmulhrsw    (%rax), %mm2
+
+pmulhrsw    %xmm0, %xmm2
+pmulhrsw    (%rax), %xmm2
+
+pshufb      %mm0, %mm2
+pshufb      (%rax), %mm2
+
+pshufb      %xmm0, %xmm2
+pshufb      (%rax), %xmm2
+
+psignb      %mm0, %mm2
+psignb      (%rax), %mm2
+
+psignb      %xmm0, %xmm2
+psignb      (%rax), %xmm2
+
+psignd      %mm0, %mm2
+psignd      (%rax), %mm2
+
+psignd      %xmm0, %xmm2
+psignd      (%rax), %xmm2
+
+psignw      %mm0, %mm2
+psignw      (%rax), %mm2
+
+psignw      %xmm0, %xmm2
+psignw      (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.50                       pabsb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pabsw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pabsw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  palignr $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddd  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddd  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddsw %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddsw (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phaddw  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phaddw  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phaddw  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubd  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubd  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubsw %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubsw (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     2.00                       phsubw  %mm0, %mm2
+# CHECK-NEXT:  4      8     2.00    *                  phsubw  (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     2.00    *                  phsubw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  1      4     0.33                       pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  1      4     0.33                       pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pshufb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  pshufb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignd  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignd  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psignw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psignw  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  psignw  (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKXDivider
+# CHECK-NEXT: [1] - SKXFPDivider
+# CHECK-NEXT: [2] - SKXPort0
+# CHECK-NEXT: [3] - SKXPort1
+# CHECK-NEXT: [4] - SKXPort2
+# CHECK-NEXT: [5] - SKXPort3
+# CHECK-NEXT: [6] - SKXPort4
+# CHECK-NEXT: [7] - SKXPort5
+# CHECK-NEXT: [8] - SKXPort6
+# CHECK-NEXT: [9] - SKXPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     30.00  12.00  16.00  16.00   -     70.00   -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pabsb   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pabsb   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pabsb   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pabsd   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pabsd   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pabsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pabsw   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pabsw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        pabsw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        palignr $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        palignr $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     2.50    -      -        phaddd  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     2.50    -      -        phaddd  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        phaddd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     2.00    -      -        phaddsw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     2.00    -      -        phaddsw (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     2.00    -      -        phaddsw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     2.50    -      -        phaddw  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     2.50    -      -        phaddw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        phaddw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     2.50    -      -        phsubd  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     2.50    -      -        phsubd  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        phsubd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -     2.00    -      -        phsubsw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -     2.00    -      -        phsubsw (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -     2.00    -      -        phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -     2.00    -      -        phsubsw (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     2.50    -      -        phsubw  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     2.50    -      -        phsubw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     2.33    -      -        phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     2.33    -      -        phsubw  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        pshufb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psignb  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psignb  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psignb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psignb  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psignd  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psignd  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psignd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psignd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psignw  %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psignw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50   0.50    -      -      -      -      -      -        psignw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   0.50   0.50    -      -      -      -        psignw  (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse1.s
new file mode 100644 (file)
index 0000000..dc6b91d
--- /dev/null
@@ -0,0 +1,466 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -instruction-tables < %s | FileCheck %s
+
+addps       %xmm0, %xmm2
+addps       (%rax), %xmm2
+
+addss       %xmm0, %xmm2
+addss       (%rax), %xmm2
+
+andnps      %xmm0, %xmm2
+andnps      (%rax), %xmm2
+
+andps       %xmm0, %xmm2
+andps       (%rax), %xmm2
+
+cmpps       $0, %xmm0, %xmm2
+cmpps       $0, (%rax), %xmm2
+
+cmpss       $0, %xmm0, %xmm2
+cmpss       $0, (%rax), %xmm2
+
+comiss      %xmm0, %xmm1
+comiss      (%rax), %xmm1
+
+cvtpi2ps    %mm0, %xmm2
+cvtpi2ps    (%rax), %xmm2
+
+cvtps2pi    %xmm0, %mm2
+cvtps2pi    (%rax), %mm2
+
+cvtsi2ss    %ecx, %xmm2
+cvtsi2ss    %rcx, %xmm2
+cvtsi2ss    (%rax), %xmm2
+cvtsi2ss    (%rax), %xmm2
+
+cvtss2si    %xmm0, %ecx
+cvtss2si    %xmm0, %rcx
+cvtss2si    (%rax), %ecx
+cvtss2si    (%rax), %rcx
+
+cvttps2pi   %xmm0, %mm2
+cvttps2pi   (%rax), %mm2
+
+cvttss2si   %xmm0, %ecx
+cvttss2si   %xmm0, %rcx
+cvttss2si   (%rax), %ecx
+cvttss2si   (%rax), %rcx
+
+divps       %xmm0, %xmm2
+divps       (%rax), %xmm2
+
+divss       %xmm0, %xmm2
+divss       (%rax), %xmm2
+
+ldmxcsr     (%rax)
+
+maskmovq    %mm0, %mm1
+
+maxps       %xmm0, %xmm2
+maxps       (%rax), %xmm2
+
+maxss       %xmm0, %xmm2
+maxss       (%rax), %xmm2
+
+minps       %xmm0, %xmm2
+minps       (%rax), %xmm2
+
+minss       %xmm0, %xmm2
+minss       (%rax), %xmm2
+
+movaps      %xmm0, %xmm2
+movaps      %xmm0, (%rax)
+movaps      (%rax), %xmm2
+
+movhlps     %xmm0, %xmm2
+movlhps     %xmm0, %xmm2
+
+movhps      %xmm0, (%rax)
+movhps      (%rax), %xmm2
+
+movlps      %xmm0, (%rax)
+movlps      (%rax), %xmm2
+
+movmskps    %xmm0, %rcx
+
+movntps     %xmm0, (%rax)
+movntq      %mm0, (%rax)
+
+movss       %xmm0, %xmm2
+movss       %xmm0, (%rax)
+movss       (%rax), %xmm2
+
+movups      %xmm0, %xmm2
+movups      %xmm0, (%rax)
+movups      (%rax), %xmm2
+
+mulps       %xmm0, %xmm2
+mulps       (%rax), %xmm2
+
+mulss       %xmm0, %xmm2
+mulss       (%rax), %xmm2
+
+orps        %xmm0, %xmm2
+orps        (%rax), %xmm2
+
+pavgb       %mm0, %mm2
+pavgb       (%rax), %mm2
+
+pavgw       %mm0, %mm2
+pavgw       (%rax), %mm2
+
+pextrw      $1, %mm0, %rcx
+
+pinsrw      $1, %rax, %mm2
+pinsrw      $1, (%rax), %mm2
+
+pmaxsw      %mm0, %mm2
+pmaxsw      (%rax), %mm2
+
+pmaxub      %mm0, %mm2
+pmaxub      (%rax), %mm2
+
+pminsw      %mm0, %mm2
+pminsw      (%rax), %mm2
+
+pminub      %mm0, %mm2
+pminub      (%rax), %mm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %mm0, %mm2
+pmulhuw     (%rax), %mm2
+
+prefetcht0  (%rax)
+prefetcht1  (%rax)
+prefetcht2  (%rax)
+prefetchnta (%rax)
+
+psadbw      %mm0, %mm2
+psadbw      (%rax), %mm2
+
+pshufw      $1, %mm0, %mm2
+pshufw      $1, (%rax), %mm2
+
+rcpps       %xmm0, %xmm2
+rcpps       (%rax), %xmm2
+
+rcpss       %xmm0, %xmm2
+rcpss       (%rax), %xmm2
+
+rsqrtps     %xmm0, %xmm2
+rsqrtps     (%rax), %xmm2
+
+rsqrtss     %xmm0, %xmm2
+rsqrtss     (%rax), %xmm2
+
+sfence
+
+shufps      $1, %xmm0, %xmm2
+shufps      $1, (%rax), %xmm2
+
+sqrtps      %xmm0, %xmm2
+sqrtps      (%rax), %xmm2
+
+sqrtss      %xmm0, %xmm2
+sqrtss      (%rax), %xmm2
+
+stmxcsr     (%rax)
+
+subps       %xmm0, %xmm2
+subps       (%rax), %xmm2
+
+subss       %xmm0, %xmm2
+subss       (%rax), %xmm2
+
+ucomiss     %xmm0, %xmm1
+ucomiss     (%rax), %xmm1
+
+unpckhps    %xmm0, %xmm2
+unpckhps    (%rax), %xmm2
+
+unpcklps    %xmm0, %xmm2
+unpcklps    (%rax), %xmm2
+
+xorps       %xmm0, %xmm2
+xorps       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addps   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  addps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addss   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  addss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       andnps  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  andnps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       andps   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  andps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       comiss  %xmm0, %xmm1
+# CHECK-NEXT:  1      10    1.00    *                  comiss  (%rax), %xmm1
+# CHECK-NEXT:  1      5     1.00                       cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       cvtss2si        %xmm0, %rcx
+# CHECK-NEXT:  2      12    1.00    *                  cvtss2si        (%rax), %ecx
+# CHECK-NEXT:  2      12    1.00    *                  cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  1      4     1.00                       cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  1      12    1.00    *                  cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  2      12    1.00    *                  cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  2      12    1.00    *                  cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  1      15    1.00                       divps   %xmm0, %xmm2
+# CHECK-NEXT:  1      22    1.00    *                  divps   (%rax), %xmm2
+# CHECK-NEXT:  1      15    1.00                       divss   %xmm0, %xmm2
+# CHECK-NEXT:  1      22    1.00    *                  divss   (%rax), %xmm2
+# CHECK-NEXT:  1      100    -      *      *      *    ldmxcsr (%rax)
+# CHECK-NEXT:  1      100    -      *      *      *    maskmovq        %mm0, %mm1
+# CHECK-NEXT:  1      3     1.00                       maxps   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  maxps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxss   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  maxss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minps   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  minps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minss   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  minss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       movaps  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movaps  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movaps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movhlps %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50                       movlhps %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movhps  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movhps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movlps  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movlps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movmskps        %xmm0, %ecx
+# CHECK-NEXT:  1      1     0.50           *           movntps %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.50    *      *      *    movntq  %mm0, (%rax)
+# CHECK-NEXT:  1      1     0.50                       movss   %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movss   %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       movups  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movups  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movups  (%rax), %xmm2
+# CHECK-NEXT:  1      3     0.50                       mulps   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     0.50                       mulss   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       orps    %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  orps    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pavgb   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pavgb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pavgw   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pavgw   (%rax), %mm2
+# CHECK-NEXT:  1      2     2.00                       pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  1      1     0.25                       pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pmaxub  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pmaxub  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pminsw  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pminsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pminub  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pminub  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      4     1.00                       pmulhuw %mm0, %mm2
+# CHECK-NEXT:  1      11    1.00    *                  pmulhuw (%rax), %mm2
+# CHECK-NEXT:  1      8     0.50    *      *           prefetcht0      (%rax)
+# CHECK-NEXT:  1      8     0.50    *      *           prefetcht1      (%rax)
+# CHECK-NEXT:  1      8     0.50    *      *           prefetcht2      (%rax)
+# CHECK-NEXT:  1      8     0.50    *      *           prefetchnta     (%rax)
+# CHECK-NEXT:  1      3     1.00                       psadbw  %mm0, %mm2
+# CHECK-NEXT:  1      10    1.00    *                  psadbw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      5     0.50                       rcpps   %xmm0, %xmm2
+# CHECK-NEXT:  1      12    0.50    *                  rcpps   (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50                       rcpss   %xmm0, %xmm2
+# CHECK-NEXT:  1      12    0.50    *                  rcpss   (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50                       rsqrtps %xmm0, %xmm2
+# CHECK-NEXT:  2      12    0.50    *                  rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  1      5     0.50                       rsqrtss %xmm0, %xmm2
+# CHECK-NEXT:  2      12    1.00    *                  rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50    *      *      *    sfence
+# CHECK-NEXT:  1      1     0.50                       shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      20    1.00                       sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  1      27    1.00    *                  sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  1      20    1.00                       sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  1      27    1.00    *                  sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  1      100    -      *      *      *    stmxcsr (%rax)
+# CHECK-NEXT:  1      3     1.00                       subps   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  subps   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subss   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  subss   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  1      10    1.00    *                  ucomiss (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.50                       unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       xorps   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  xorps   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - ZnAGU0
+# CHECK-NEXT: [1] - ZnAGU1
+# CHECK-NEXT: [2] - ZnALU0
+# CHECK-NEXT: [3] - ZnALU1
+# CHECK-NEXT: [4] - ZnALU2
+# CHECK-NEXT: [5] - ZnALU3
+# CHECK-NEXT: [6] - ZnDivider
+# CHECK-NEXT: [7] - ZnFPU0
+# CHECK-NEXT: [8] - ZnFPU1
+# CHECK-NEXT: [9] - ZnFPU2
+# CHECK-NEXT: [10] - ZnFPU3
+# CHECK-NEXT: [11] - ZnMultiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT: 32.50  32.50   -      -      -      -      -     41.00  21.50  22.00  32.50   -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]        Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          addps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          addps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          addss   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          addss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          andnps  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          andnps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          andps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          andps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          cmpps   $0, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          cmpps   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          cmpss   $0, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          comiss  %xmm0, %xmm1
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          comiss  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   1.00    -          cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   1.00    -          cvtss2si        %xmm0, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50   1.00    -          cvtss2si        (%rax), %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50   1.00    -          cvtss2si        (%rax), %rcx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   1.00    -          cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   1.00    -          cvttss2si       %xmm0, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50   1.00    -          cvttss2si       (%rax), %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50   1.00    -          cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          divps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          divps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          divss   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          divss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          ldmxcsr (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          maskmovq        %mm0, %mm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          maxps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          maxps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          maxss   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          maxss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          minps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          minps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          minss   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          minss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movaps  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movaps  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movaps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          movhlps %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          movlhps %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movhps  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          movhps  (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movlps  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          movlps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          movmskps        %xmm0, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movntps %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movntq  %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          movss   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movss   %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movups  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movups  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movups  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          mulps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          mulps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          mulss   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          mulss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          orps    %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          orps    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pavgb   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pavgb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pavgw   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pavgw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   2.50    -      -          pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pinsrw  $1, %eax, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxsw  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxub  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxub  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminsw  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminub  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminub  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmulhuw %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmulhuw (%rax), %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          prefetcht0      (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          prefetcht1      (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          prefetcht2      (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          prefetchnta     (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          psadbw  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          psadbw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufw  $1, %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufw  $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          rcpps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          rcpps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          rcpss   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          rcpss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          rsqrtps %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          rsqrtps (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50    -     0.50    -      -          rsqrtss %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -     1.00    -      -          rsqrtss (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          sfence
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          sqrtps  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          sqrtss  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          stmxcsr (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          subps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          subps   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          subss   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          subss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          ucomiss %xmm0, %xmm1
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          ucomiss (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          unpckhps        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          unpcklps        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          xorps   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          xorps   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse2.s
new file mode 100644 (file)
index 0000000..b14b59a
--- /dev/null
@@ -0,0 +1,954 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -instruction-tables < %s | FileCheck %s
+
+addpd       %xmm0, %xmm2
+addpd       (%rax), %xmm2
+
+addsd       %xmm0, %xmm2
+addsd       (%rax), %xmm2
+
+addsubpd    %xmm0, %xmm2
+addsubpd    (%rax), %xmm2
+
+andnpd      %xmm0, %xmm2
+andnpd      (%rax), %xmm2
+
+andpd       %xmm0, %xmm2
+andpd       (%rax), %xmm2
+
+clflush     (%rax)
+
+cmppd       $0, %xmm0, %xmm2
+cmppd       $0, (%rax), %xmm2
+
+cmpsd       $0, %xmm0, %xmm2
+cmpsd       $0, (%rax), %xmm2
+
+comisd      %xmm0, %xmm1
+comisd      (%rax), %xmm1
+
+cvtdq2pd    %xmm0, %xmm2
+cvtdq2pd    (%rax), %xmm2
+
+cvtdq2ps    %xmm0, %xmm2
+cvtdq2ps    (%rax), %xmm2
+
+cvtpd2dq    %xmm0, %xmm2
+cvtpd2dq    (%rax), %xmm2
+
+cvtpd2pi    %xmm0, %mm2
+cvtpd2pi    (%rax), %mm2
+
+cvtpd2ps    %xmm0, %xmm2
+cvtpd2ps    (%rax), %xmm2
+
+cvtpi2pd    %mm0, %xmm2
+cvtpi2pd    (%rax), %xmm2
+
+cvtps2dq    %xmm0, %xmm2
+cvtps2dq    (%rax), %xmm2
+
+cvtps2pd    %xmm0, %xmm2
+cvtps2pd    (%rax), %xmm2
+
+cvtsd2si    %xmm0, %ecx
+cvtsd2si    %xmm0, %rcx
+cvtsd2si    (%rax), %ecx
+cvtsd2si    (%rax), %rcx
+
+cvtsd2ss    %xmm0, %xmm2
+cvtsd2ss    (%rax), %xmm2
+
+cvtsi2sd    %ecx, %xmm2
+cvtsi2sd    %rcx, %xmm2
+cvtsi2sd    (%rax), %xmm2
+cvtsi2sd    (%rax), %xmm2
+
+cvtss2sd    %xmm0, %xmm2
+cvtss2sd    (%rax), %xmm2
+
+cvttpd2dq   %xmm0, %xmm2
+cvttpd2dq   (%rax), %xmm2
+
+cvttpd2pi   %xmm0, %mm2
+cvttpd2pi   (%rax), %mm2
+
+cvttps2dq   %xmm0, %xmm2
+cvttps2dq   (%rax), %xmm2
+
+cvttsd2si   %xmm0, %ecx
+cvttsd2si   %xmm0, %rcx
+cvttsd2si   (%rax), %ecx
+cvttsd2si   (%rax), %rcx
+
+divpd       %xmm0, %xmm2
+divpd       (%rax), %xmm2
+
+divsd       %xmm0, %xmm2
+divsd       (%rax), %xmm2
+
+lfence
+
+maskmovdqu  %xmm0, %xmm1
+
+maxpd       %xmm0, %xmm2
+maxpd       (%rax), %xmm2
+
+maxsd       %xmm0, %xmm2
+maxsd       (%rax), %xmm2
+
+minpd       %xmm0, %xmm2
+minpd       (%rax), %xmm2
+
+minsd       %xmm0, %xmm2
+minsd       (%rax), %xmm2
+
+movapd      %xmm0, %xmm2
+movapd      %xmm0, (%rax)
+movapd      (%rax), %xmm2
+
+movd        %eax, %xmm2
+movd        (%rax), %xmm2
+
+movd        %xmm0, %ecx
+movd        %xmm0, (%rax)
+
+movdqa      %xmm0, %xmm2
+movdqa      %xmm0, (%rax)
+movdqa      (%rax), %xmm2
+
+movdqu      %xmm0, %xmm2
+movdqu      %xmm0, (%rax)
+movdqu      (%rax), %xmm2
+
+movdq2q     %xmm0, %mm2
+
+movhpd      %xmm0, (%rax)
+movhpd      (%rax), %xmm2
+
+movlpd      %xmm0, (%rax)
+movlpd      (%rax), %xmm2
+
+movmskpd    %xmm0, %rcx
+
+movntdq     %xmm0, (%rax)
+movntpd     %xmm0, (%rax)
+
+movq        %xmm0, %xmm2
+
+movq        %rax, %xmm2
+movq        (%rax), %xmm2
+
+movq        %xmm0, %rcx
+movq        %xmm0, (%rax)
+
+movq2dq     %mm0, %xmm2
+
+movsd       %xmm0, %xmm2
+movsd       %xmm0, (%rax)
+movsd       (%rax), %xmm2
+
+movupd      %xmm0, %xmm2
+movupd      %xmm0, (%rax)
+movupd      (%rax), %xmm2
+
+mulpd       %xmm0, %xmm2
+mulpd       (%rax), %xmm2
+
+mulsd       %xmm0, %xmm2
+mulsd       (%rax), %xmm2
+
+orpd        %xmm0, %xmm2
+orpd        (%rax), %xmm2
+
+packssdw    %xmm0, %xmm2
+packssdw    (%rax), %xmm2
+
+packsswb    %xmm0, %xmm2
+packsswb    (%rax), %xmm2
+
+packuswb    %xmm0, %xmm2
+packuswb    (%rax), %xmm2
+
+paddb       %xmm0, %xmm2
+paddb       (%rax), %xmm2
+
+paddd       %xmm0, %xmm2
+paddd       (%rax), %xmm2
+
+paddq       %mm0, %mm2
+paddq       (%rax), %mm2
+
+paddq       %xmm0, %xmm2
+paddq       (%rax), %xmm2
+
+paddsb      %xmm0, %xmm2
+paddsb      (%rax), %xmm2
+
+paddsw      %xmm0, %xmm2
+paddsw      (%rax), %xmm2
+
+paddusb     %xmm0, %xmm2
+paddusb     (%rax), %xmm2
+
+paddusw     %xmm0, %xmm2
+paddusw     (%rax), %xmm2
+
+paddw       %xmm0, %xmm2
+paddw       (%rax), %xmm2
+
+pand        %xmm0, %xmm2
+pand        (%rax), %xmm2
+
+pandn       %xmm0, %xmm2
+pandn       (%rax), %xmm2
+
+pavgb       %xmm0, %xmm2
+pavgb       (%rax), %xmm2
+
+pavgw       %xmm0, %xmm2
+pavgw       (%rax), %xmm2
+
+pcmpeqb     %xmm0, %xmm2
+pcmpeqb     (%rax), %xmm2
+
+pcmpeqd     %xmm0, %xmm2
+pcmpeqd     (%rax), %xmm2
+
+pcmpeqw     %xmm0, %xmm2
+pcmpeqw     (%rax), %xmm2
+
+pcmpgtb     %xmm0, %xmm2
+pcmpgtb     (%rax), %xmm2
+
+pcmpgtd     %xmm0, %xmm2
+pcmpgtd     (%rax), %xmm2
+
+pcmpgtw     %xmm0, %xmm2
+pcmpgtw     (%rax), %xmm2
+
+pextrw      $1, %xmm0, %rcx
+
+pmaddwd     %xmm0, %xmm2
+pmaddwd     (%rax), %xmm2
+
+pmaxsw      %xmm0, %xmm2
+pmaxsw      (%rax), %xmm2
+
+pmaxub      %xmm0, %xmm2
+pmaxub      (%rax), %xmm2
+
+pminsw      %xmm0, %xmm2
+pminsw      (%rax), %xmm2
+
+pminub      %xmm0, %xmm2
+pminub      (%rax), %xmm2
+
+pmovmskb    %xmm0, %rcx
+
+pmulhuw     %xmm0, %xmm2
+pmulhuw     (%rax), %xmm2
+
+pmulhw      %xmm0, %xmm2
+pmulhw      (%rax), %xmm2
+
+pmullw      %xmm0, %xmm2
+pmullw      (%rax), %xmm2
+
+pmuludq     %mm0, %mm2
+pmuludq     (%rax), %mm2
+
+pmuludq     %xmm0, %xmm2
+pmuludq     (%rax), %xmm2
+
+por         %xmm0, %xmm2
+por         (%rax), %xmm2
+
+psadbw      %xmm0, %xmm2
+psadbw      (%rax), %xmm2
+
+pshufd      $1, %xmm0, %xmm2
+pshufd      $1, (%rax), %xmm2
+
+pshufhw     $1, %xmm0, %xmm2
+pshufhw     $1, (%rax), %xmm2
+
+pshuflw     $1, %xmm0, %xmm2
+pshuflw     $1, (%rax), %xmm2
+
+pslld       $1, %xmm2
+pslld       %xmm0, %xmm2
+pslld       (%rax), %xmm2
+
+pslldq      $1, %xmm2
+
+psllq       $1, %xmm2
+psllq       %xmm0, %xmm2
+psllq       (%rax), %xmm2
+
+psllw       $1, %xmm2
+psllw       %xmm0, %xmm2
+psllw       (%rax), %xmm2
+
+psrad       $1, %xmm2
+psrad       %xmm0, %xmm2
+psrad       (%rax), %xmm2
+
+psraw       $1, %xmm2
+psraw       %xmm0, %xmm2
+psraw       (%rax), %xmm2
+
+psrld       $1, %xmm2
+psrld       %xmm0, %xmm2
+psrld       (%rax), %xmm2
+
+psrldq      $1, %xmm2
+
+psrlq       $1, %xmm2
+psrlq       %xmm0, %xmm2
+psrlq       (%rax), %xmm2
+
+psrlw       $1, %xmm2
+psrlw       %xmm0, %xmm2
+psrlw       (%rax), %xmm2
+
+psubb       %xmm0, %xmm2
+psubb       (%rax), %xmm2
+
+psubd       %xmm0, %xmm2
+psubd       (%rax), %xmm2
+
+psubq       %mm0, %mm2
+psubq       (%rax), %mm2
+
+psubq       %xmm0, %xmm2
+psubq       (%rax), %xmm2
+
+psubsb      %xmm0, %xmm2
+psubsb      (%rax), %xmm2
+
+psubsw      %xmm0, %xmm2
+psubsw      (%rax), %xmm2
+
+psubusb     %xmm0, %xmm2
+psubusb     (%rax), %xmm2
+
+psubusw     %xmm0, %xmm2
+psubusw     (%rax), %xmm2
+
+psubw       %xmm0, %xmm2
+psubw       (%rax), %xmm2
+
+punpckhbw   %xmm0, %xmm2
+punpckhbw   (%rax), %xmm2
+
+punpckhdq   %xmm0, %xmm2
+punpckhdq   (%rax), %xmm2
+
+punpckhqdq  %xmm0, %xmm2
+punpckhqdq  (%rax), %xmm2
+
+punpckhwd   %xmm0, %xmm2
+punpckhwd   (%rax), %xmm2
+
+punpcklbw   %xmm0, %xmm2
+punpcklbw   (%rax), %xmm2
+
+punpckldq   %xmm0, %xmm2
+punpckldq   (%rax), %xmm2
+
+punpcklqdq  %xmm0, %xmm2
+punpcklqdq  (%rax), %xmm2
+
+punpcklwd   %xmm0, %xmm2
+punpcklwd   (%rax), %xmm2
+
+pxor        %xmm0, %xmm2
+pxor        (%rax), %xmm2
+
+shufpd      $1, %xmm0, %xmm2
+shufpd      $1, (%rax), %xmm2
+
+sqrtpd      %xmm0, %xmm2
+sqrtpd      (%rax), %xmm2
+
+sqrtsd      %xmm0, %xmm2
+sqrtsd      (%rax), %xmm2
+
+subpd       %xmm0, %xmm2
+subpd       (%rax), %xmm2
+
+subsd       %xmm0, %xmm2
+subsd       (%rax), %xmm2
+
+ucomisd     %xmm0, %xmm1
+ucomisd     (%rax), %xmm1
+
+unpckhpd    %xmm0, %xmm2
+unpckhpd    (%rax), %xmm2
+
+unpcklpd    %xmm0, %xmm2
+unpcklpd    (%rax), %xmm2
+
+xorpd       %xmm0, %xmm2
+xorpd       (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  addpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  addsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       andnpd  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  andnpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       andpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  andpd   (%rax), %xmm2
+# CHECK-NEXT:  1      8     0.50    *      *      *    clflush (%rax)
+# CHECK-NEXT:  1      3     1.00                       cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       comisd  %xmm0, %xmm1
+# CHECK-NEXT:  1      10    1.00    *                  comisd  (%rax), %xmm1
+# CHECK-NEXT:  1      5     1.00                       cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT:  2      12    1.00    *                  cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT:  2      10    1.00    *                  cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT:  1      12    1.00    *                  cvtsd2si        (%rax), %ecx
+# CHECK-NEXT:  1      12    1.00    *                  cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  1      4     1.00                       cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT:  2      11    2.00    *                  cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT:  2      12    1.00    *                  cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  1      12    1.00    *                  cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT:  1      12    1.00    *                  cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT:  1      12    1.00    *                  cvttsd2si       (%rax), %ecx
+# CHECK-NEXT:  1      12    1.00    *                  cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  1      15    1.00                       divpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      22    1.00    *                  divpd   (%rax), %xmm2
+# CHECK-NEXT:  1      15    1.00                       divsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      22    1.00    *                  divsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50    *      *      *    lfence
+# CHECK-NEXT:  1      100    -      *      *      *    maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  1      3     1.00                       maxpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  maxpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  maxsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  minpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       minsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  minsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       movapd  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movapd  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movapd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       movd    %eax, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  movd    (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movd    %xmm0, %ecx
+# CHECK-NEXT:  1      1     0.50           *           movd    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.25                       movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movdqa  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movdqa  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       movdqu  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movdqu  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       movdq2q %xmm0, %mm2
+# CHECK-NEXT:  1      1     0.50           *           movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movhpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movlpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  1      1     0.50           *           movntdq %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.50           *           movntpd %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.25                       movq    %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.25                       movq    %rax, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  movq    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       movq    %xmm0, %rcx
+# CHECK-NEXT:  1      1     0.50           *           movq    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.25                       movq2dq %mm0, %xmm2
+# CHECK-NEXT:  1      1     0.50                       movsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movsd   %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       movupd  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     0.50           *           movupd  %xmm0, (%rax)
+# CHECK-NEXT:  1      8     0.50    *                  movupd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     0.50                       mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     0.50                       mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      10    0.50    *                  mulsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       orpd    %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  orpd    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  packssdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  packsswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  packuswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       paddb   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  paddb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       paddd   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  paddd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       paddq   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  paddq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       paddq   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  paddq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       paddsb  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  paddsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       paddsw  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  paddsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       paddusb %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  paddusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       paddusw %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  paddusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       paddw   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  paddw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pand    %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pand    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pandn   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pandn   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pavgb   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pavgb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pavgw   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pavgw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  1      2     2.00                       pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  1      4     1.00                       pmaddwd %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmaxub  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pminsw  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pminsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pminub  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pminub  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      4     1.00                       pmulhuw %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmulhw  %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmullw  %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  pmullw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmuludq %mm0, %mm2
+# CHECK-NEXT:  1      11    1.00    *                  pmuludq (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmuludq %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  pmuludq (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       por     %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  por     (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  psadbw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pslld   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslld   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  pslld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pslldq  $1, %xmm2
+# CHECK-NEXT:  1      1     0.25                       psllq   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psllq   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  psllq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psllw   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psllw   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  psllw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psrad   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrad   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  psrad   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psraw   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psraw   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  psraw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psrld   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrld   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  psrld   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrldq  $1, %xmm2
+# CHECK-NEXT:  1      1     0.25                       psrlq   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  psrlq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psrlw   $1, %xmm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  psrlw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psubb   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psubb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psubd   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psubd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psubq   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psubq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psubq   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psubq   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psubsb  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psubsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psubsw  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psubsw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psubusb %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psubusb (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psubusw %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psubusw (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psubw   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psubw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pxor    %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pxor    (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      20    1.00                       sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  1      27    1.00    *                  sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  1      20    1.00                       sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  1      27    1.00    *                  sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  subpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       subsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  subsd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  1      10    1.00    *                  ucomisd (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.50                       unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  xorpd   (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - ZnAGU0
+# CHECK-NEXT: [1] - ZnAGU1
+# CHECK-NEXT: [2] - ZnALU0
+# CHECK-NEXT: [3] - ZnALU1
+# CHECK-NEXT: [4] - ZnALU2
+# CHECK-NEXT: [5] - ZnALU3
+# CHECK-NEXT: [6] - ZnDivider
+# CHECK-NEXT: [7] - ZnFPU0
+# CHECK-NEXT: [8] - ZnFPU1
+# CHECK-NEXT: [9] - ZnFPU2
+# CHECK-NEXT: [10] - ZnFPU3
+# CHECK-NEXT: [11] - ZnMultiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT: 65.00  65.00  0.50   0.50   0.50   0.50    -     74.08  39.58  69.25  77.08   -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]        Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          addpd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          addpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          addsd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          addsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          addsubpd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          andnpd  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          andnpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          andpd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          andpd   (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          clflush (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          cmppd   $0, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          cmppd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          cmpsd   $0, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          comisd  %xmm0, %xmm1
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          comisd  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   1.00    -          cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtdq2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtdq2ps        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtdq2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   1.00    -          cvtpd2dq        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50   1.00    -          cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -     1.00    -          cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtpi2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtps2dq        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtps2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtps2pd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00   1.00    -          cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00   1.00    -          cvtsd2si        %xmm0, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00   1.00    -          cvtsd2si        (%rax), %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00   1.00    -          cvtsd2si        (%rax), %rcx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtsd2ss        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -     1.00    -          cvtsd2ss        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33    -     1.33    -          cvtsi2sdl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtsi2sdq       %rcx, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvtsi2sdl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvtss2sd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     2.00    -          cvtss2sd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50   1.00    -          cvttpd2dq       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50   1.00    -          cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvttpd2pi       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          cvttps2dq       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          cvttps2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00   1.00    -          cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00   1.00    -          cvttsd2si       %xmm0, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00   1.00    -          cvttsd2si       (%rax), %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00   1.00    -          cvttsd2si       (%rax), %rcx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          divpd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          divpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          divsd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          divsd   (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          lfence
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          maskmovdqu      %xmm0, %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          maxpd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          maxpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          maxsd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          maxsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          minpd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          minpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          minsd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          minsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movapd  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movapd  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movapd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          movd    %eax, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          movd    %xmm0, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movd    %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movdqa  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movdqa  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movdqa  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movdqu  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movdqu  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movdqu  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movdq2q %xmm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movhpd  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          movhpd  (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movlpd  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          movlpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          movmskpd        %xmm0, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movntdq %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movntpd %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movq    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25   0.25   0.25    -      -      -      -      -      -          movq    %rax, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movq    (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.25   0.25   0.25   0.25    -      -      -      -      -      -          movq    %xmm0, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movq    %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movq2dq %mm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          movsd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movsd   %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          movupd  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movupd  %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movupd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          mulpd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          mulpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          mulsd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          mulsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          orpd    %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          orpd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          packssdw        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          packssdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          packsswb        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          packsswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          packuswb        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          packuswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddb   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddq   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddq   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddsb  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddsw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddusb %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddusb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddusw %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddusw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddw   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pand    %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pand    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pandn   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pandn   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pavgb   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pavgb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pavgw   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pavgw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqb %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqd %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqw %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtb %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtd %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtw %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   2.50    -      -          pextrw  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmaddwd %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmaddwd (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxsw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxub  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxub  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminsw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminub  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminub  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmulhuw %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmulhuw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmulhw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmulhw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmullw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmullw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmuludq %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmuludq (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmuludq %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmuludq (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          por     %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          por     (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          psadbw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          psadbw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pslld   $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          pslld   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00    -      -          pslld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          pslldq  $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psllq   $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          psllq   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00    -      -          psllq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psllw   $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          psllw   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00    -      -          psllw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrad   $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          psrad   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00    -      -          psrad   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psraw   $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          psraw   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00    -      -          psraw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrld   $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          psrld   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00    -      -          psrld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          psrldq  $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrlq   $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          psrlq   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00    -      -          psrlq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrlw   $1, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          psrlw   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -     1.00    -      -          psrlw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubb   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubq   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubq   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubq   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubsb  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubsw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubsw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubusb %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubusb (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubusw %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubusw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubw   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckldq       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pxor    %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pxor    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          sqrtsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          subpd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          subpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          subsd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          subsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          ucomisd %xmm0, %xmm1
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          ucomisd (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          xorpd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          xorpd   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse3.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse3.s
new file mode 100644 (file)
index 0000000..8ffc026
--- /dev/null
@@ -0,0 +1,101 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -instruction-tables < %s | FileCheck %s
+
+addsubpd  %xmm0, %xmm2
+addsubpd  (%rax),  %xmm2
+
+addsubps  %xmm0, %xmm2
+addsubps  (%rax), %xmm2
+
+haddpd    %xmm0, %xmm2
+haddpd    (%rax), %xmm2
+
+haddps    %xmm0, %xmm2
+haddps    (%rax), %xmm2
+
+hsubpd    %xmm0, %xmm2
+hsubpd    (%rax), %xmm2
+
+hsubps    %xmm0, %xmm2
+hsubps    (%rax), %xmm2
+
+lddqu     (%rax), %xmm2
+
+movddup   %xmm0, %xmm2
+movddup   (%rax), %xmm2
+
+movshdup  %xmm0, %xmm2
+movshdup  (%rax), %xmm2
+
+movsldup  %xmm0, %xmm2
+movsldup  (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       addsubpd        %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       addsubps        %xmm0, %xmm2
+# CHECK-NEXT:  1      10    1.00    *                  addsubps        (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  haddpd  (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         haddps  %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  haddps  (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  hsubps  (%rax), %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  lddqu   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movddup %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  movddup (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       movshdup        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  movshdup        (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  movsldup        (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - ZnAGU0
+# CHECK-NEXT: [1] - ZnAGU1
+# CHECK-NEXT: [2] - ZnALU0
+# CHECK-NEXT: [3] - ZnALU1
+# CHECK-NEXT: [4] - ZnALU2
+# CHECK-NEXT: [5] - ZnALU3
+# CHECK-NEXT: [6] - ZnDivider
+# CHECK-NEXT: [7] - ZnFPU0
+# CHECK-NEXT: [8] - ZnFPU1
+# CHECK-NEXT: [9] - ZnFPU2
+# CHECK-NEXT: [10] - ZnFPU3
+# CHECK-NEXT: [11] - ZnMultiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT: 2.50   2.50    -      -      -      -      -     4.00   2.00   2.00    -      -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]        Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          addsubpd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          addsubpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          addsubps        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          addsubps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          haddpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          haddpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          haddps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          haddps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          hsubps  (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          lddqu   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          movddup %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          movddup (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          movshdup        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          movshdup        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          movsldup        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          movsldup        (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse41.s
new file mode 100644 (file)
index 0000000..9296f53
--- /dev/null
@@ -0,0 +1,371 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -instruction-tables < %s | FileCheck %s
+
+blendpd     $11, %xmm0, %xmm2
+blendpd     $11, (%rax), %xmm2
+
+blendps     $11, %xmm0, %xmm2
+blendps     $11, (%rax), %xmm2
+
+blendvpd    %xmm0, %xmm2
+blendvpd    (%rax), %xmm2
+
+blendvps    %xmm0, %xmm2
+blendvps    (%rax), %xmm2
+
+dppd        $22, %xmm0, %xmm2
+dppd        $22, (%rax), %xmm2
+
+dpps        $22, %xmm0, %xmm2
+dpps        $22, (%rax), %xmm2
+
+extractps   $1, %xmm0, %rcx
+extractps   $1, %xmm0, (%rax)
+
+insertps    $1, %xmm0, %xmm2
+insertps    $1, (%rax), %xmm2
+
+movntdqa    (%rax), %xmm2
+
+mpsadbw     $1, %xmm0, %xmm2
+mpsadbw     $1, (%rax), %xmm2
+
+packusdw    %xmm0, %xmm2
+packusdw    (%rax), %xmm2
+
+pblendvb    %xmm0, %xmm2
+pblendvb    (%rax), %xmm2
+
+pblendw     $11, %xmm0, %xmm2
+pblendw     $11, (%rax), %xmm2
+
+pcmpeqq     %xmm0, %xmm2
+pcmpeqq     (%rax), %xmm2
+
+pextrb      $1, %xmm0, %ecx
+pextrb      $1, %xmm0, (%rax)
+
+pextrd      $1, %xmm0, %ecx
+pextrd      $1, %xmm0, (%rax)
+
+pextrq      $1, %xmm0, %rcx
+pextrq      $1, %xmm0, (%rax)
+
+pextrw      $1, %xmm0, (%rax)
+
+phminposuw  %xmm0, %xmm2
+phminposuw  (%rax), %xmm2
+
+pinsrb      $1, %eax, %xmm1
+pinsrb      $1, (%rax), %xmm1
+
+pinsrd      $1, %eax, %xmm1
+pinsrd      $1, (%rax), %xmm1
+
+pinsrq      $1, %rax, %xmm1
+pinsrq      $1, (%rax), %xmm1
+
+pmaxsb      %xmm0, %xmm2
+pmaxsb      (%rax), %xmm2
+
+pmaxsd      %xmm0, %xmm2
+pmaxsd      (%rax), %xmm2
+
+pmaxud      %xmm0, %xmm2
+pmaxud      (%rax), %xmm2
+
+pmaxuw      %xmm0, %xmm2
+pmaxuw      (%rax), %xmm2
+
+pminsb      %xmm0, %xmm2
+pminsb      (%rax), %xmm2
+
+pminsd      %xmm0, %xmm2
+pminsd      (%rax), %xmm2
+
+pminud      %xmm0, %xmm2
+pminud      (%rax), %xmm2
+
+pminuw      %xmm0, %xmm2
+pminuw      (%rax), %xmm2
+
+pmovsxbd    %xmm0, %xmm2
+pmovsxbd    (%rax), %xmm2
+
+pmovsxbq    %xmm0, %xmm2
+pmovsxbq    (%rax), %xmm2
+
+pmovsxbw    %xmm0, %xmm2
+pmovsxbw    (%rax), %xmm2
+
+pmovsxdq    %xmm0, %xmm2
+pmovsxdq    (%rax), %xmm2
+
+pmovsxwd    %xmm0, %xmm2
+pmovsxwd    (%rax), %xmm2
+
+pmovsxwq    %xmm0, %xmm2
+pmovsxwq    (%rax), %xmm2
+
+pmovzxbd    %xmm0, %xmm2
+pmovzxbd    (%rax), %xmm2
+
+pmovzxbq    %xmm0, %xmm2
+pmovzxbq    (%rax), %xmm2
+
+pmovzxbw    %xmm0, %xmm2
+pmovzxbw    (%rax), %xmm2
+
+pmovzxdq    %xmm0, %xmm2
+pmovzxdq    (%rax), %xmm2
+
+pmovzxwd    %xmm0, %xmm2
+pmovzxwd    (%rax), %xmm2
+
+pmovzxwq    %xmm0, %xmm2
+pmovzxwq    (%rax), %xmm2
+
+pmuldq      %xmm0, %xmm2
+pmuldq      (%rax), %xmm2
+
+pmulld      %xmm0, %xmm2
+pmulld      (%rax), %xmm2
+
+ptest       %xmm0, %xmm1
+ptest       (%rax), %xmm1
+
+roundpd     $1, %xmm0, %xmm2
+roundpd     $1, (%rax), %xmm2
+
+roundps     $1, %xmm0, %xmm2
+roundps     $1, (%rax), %xmm2
+
+roundsd     $1, %xmm0, %xmm2
+roundsd     $1, (%rax), %xmm2
+
+roundss     $1, %xmm0, %xmm2
+roundss     $1, (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.50                       blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  2      2     2.00                       extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  2      5     2.50           *           extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.50                       insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  packusdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     1.00    *                  pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.33                       pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      8     0.50    *                  pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  1      2     2.00                       pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  2      5     3.00           *           pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      2     2.00                       pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  2      5     3.00           *           pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      2     2.00                       pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  2      5     3.00           *           pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      5     3.00           *           pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  1      4     1.00                       phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  1      8     0.50    *                  pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.25                       pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  1      8     0.50    *                  pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.25                       pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  1      8     0.50    *                  pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  1      1     0.25                       pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmaxud  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pminsb  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pminsb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pminsd  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pminsd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pminud  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pminud  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pminuw  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pminuw  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmulld  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       ptest   %xmm0, %xmm1
+# CHECK-NEXT:  2      8     1.00    *                  ptest   (%rax), %xmm1
+# CHECK-NEXT:  1      4     1.00                       roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  roundss $1, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - ZnAGU0
+# CHECK-NEXT: [1] - ZnAGU1
+# CHECK-NEXT: [2] - ZnALU0
+# CHECK-NEXT: [3] - ZnALU1
+# CHECK-NEXT: [4] - ZnALU2
+# CHECK-NEXT: [5] - ZnALU3
+# CHECK-NEXT: [6] - ZnDivider
+# CHECK-NEXT: [7] - ZnFPU0
+# CHECK-NEXT: [8] - ZnFPU1
+# CHECK-NEXT: [9] - ZnFPU2
+# CHECK-NEXT: [10] - ZnFPU3
+# CHECK-NEXT: [11] - ZnMultiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT: 25.00  25.00   -      -      -      -      -     25.17  26.67  44.00  21.17   -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]        Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          blendpd $11, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          blendps $11, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50   0.50    -      -      -          blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50   0.50    -      -      -          blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   2.50    -      -          extractps       $1, %xmm0, %ecx
+# CHECK-NEXT: 2.50   2.50    -      -      -      -      -      -     0.50   2.50    -      -          extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          insertps        $1, (%rax), %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          packusdw        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          packusdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.33   0.33    -     0.33    -          pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.33   0.33    -     0.33    -          pblendw $11, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqq %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqq (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   2.50    -      -          pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     1.00   4.00    -      -          pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   2.50    -      -          pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     1.00   4.00    -      -          pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   2.50    -      -          pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     1.00   4.00    -      -          pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     1.00   4.00    -      -          pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          phminposuw      %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pinsrq  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxsb  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxsd  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxud  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxud  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxuw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmaxuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminsb  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminsb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminsd  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminsd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminud  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminud  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminuw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pminuw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmuldq  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmulld  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmulld  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     1.00   1.00    -      -          ptest   %xmm0, %xmm1
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     1.00   1.00    -      -          ptest   (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          roundps $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -     1.00    -          roundss $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -     1.00    -          roundss $1, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-sse42.s
new file mode 100644 (file)
index 0000000..bd55274
--- /dev/null
@@ -0,0 +1,104 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -instruction-tables < %s | FileCheck %s
+
+crc32b      %al, %ecx
+crc32b      (%rax), %ecx
+
+crc32l      %eax, %ecx
+crc32l      (%rax), %ecx
+
+crc32w      %ax, %ecx
+crc32w      (%rax), %ecx
+
+crc32b      %al, %rcx
+crc32b      (%rax), %rcx
+
+crc32q      %rax, %rcx
+crc32q      (%rax), %rcx
+
+pcmpestri   $1, %xmm0, %xmm2
+pcmpestri   $1, (%rax), %xmm2
+
+pcmpestrm   $1, %xmm0, %xmm2
+pcmpestrm   $1, (%rax), %xmm2
+
+pcmpistri   $1, %xmm0, %xmm2
+pcmpistri   $1, (%rax), %xmm2
+
+pcmpistrm   $1, %xmm0, %xmm2
+pcmpistrm   $1, (%rax), %xmm2
+
+pcmpgtq     %xmm0, %xmm2
+pcmpgtq     (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %ecx
+# CHECK-NEXT:  1      10    1.00    *                  crc32b  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32l  %eax, %ecx
+# CHECK-NEXT:  1      10    1.00    *                  crc32l  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32w  %ax, %ecx
+# CHECK-NEXT:  1      10    1.00    *                  crc32w  (%rax), %ecx
+# CHECK-NEXT:  1      3     1.00                       crc32b  %al, %rcx
+# CHECK-NEXT:  1      10    1.00    *                  crc32b  (%rax), %rcx
+# CHECK-NEXT:  1      3     1.00                       crc32q  %rax, %rcx
+# CHECK-NEXT:  1      10    1.00    *                  crc32q  (%rax), %rcx
+# CHECK-NEXT:  1      100    -                         pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpgtq (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - ZnAGU0
+# CHECK-NEXT: [1] - ZnAGU1
+# CHECK-NEXT: [2] - ZnALU0
+# CHECK-NEXT: [3] - ZnALU1
+# CHECK-NEXT: [4] - ZnALU2
+# CHECK-NEXT: [5] - ZnALU3
+# CHECK-NEXT: [6] - ZnDivider
+# CHECK-NEXT: [7] - ZnFPU0
+# CHECK-NEXT: [8] - ZnFPU1
+# CHECK-NEXT: [9] - ZnFPU2
+# CHECK-NEXT: [10] - ZnFPU3
+# CHECK-NEXT: [11] - ZnMultiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT: 3.00   3.00    -      -      -      -      -     11.00   -      -     1.00    -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]        Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          crc32b  %al, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          crc32b  (%rax), %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          crc32l  %eax, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          crc32l  (%rax), %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          crc32w  %ax, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          crc32w  (%rax), %ecx
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          crc32b  %al, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          crc32b  (%rax), %rcx
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          crc32q  %rax, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          crc32q  (%rax), %rcx
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          pcmpestrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          pcmpistri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          pcmpistri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          pcmpistrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          pcmpistrm       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.50    -      -     0.50    -          pcmpgtq %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.50    -      -     0.50    -          pcmpgtq (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-ssse3.s
new file mode 100644 (file)
index 0000000..95c1618
--- /dev/null
@@ -0,0 +1,258 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -instruction-tables < %s | FileCheck %s
+
+pabsb       %mm0, %mm2
+pabsb       (%rax), %mm2
+
+pabsb       %xmm0, %xmm2
+pabsb       (%rax), %xmm2
+
+pabsd       %mm0, %mm2
+pabsd       (%rax), %mm2
+
+pabsd       %xmm0, %xmm2
+pabsd       (%rax), %xmm2
+
+pabsw       %mm0, %mm2
+pabsw       (%rax), %mm2
+
+pabsw       %xmm0, %xmm2
+pabsw       (%rax), %xmm2
+
+palignr     $1, %mm0, %mm2
+palignr     $1, (%rax), %mm2
+
+palignr     $1, %xmm0, %xmm2
+palignr     $1, (%rax), %xmm2
+
+phaddd      %mm0, %mm2
+phaddd      (%rax), %mm2
+
+phaddd      %xmm0, %xmm2
+phaddd      (%rax), %xmm2
+
+phaddsw     %mm0, %mm2
+phaddsw     (%rax), %mm2
+
+phaddsw     %xmm0, %xmm2
+phaddsw     (%rax), %xmm2
+
+phaddw      %mm0, %mm2
+phaddw      (%rax), %mm2
+
+phaddw      %xmm0, %xmm2
+phaddw      (%rax), %xmm2
+
+phsubd      %mm0, %mm2
+phsubd      (%rax), %mm2
+
+phsubd      %xmm0, %xmm2
+phsubd      (%rax), %xmm2
+
+phsubsw     %mm0, %mm2
+phsubsw     (%rax), %mm2
+
+phsubsw     %xmm0, %xmm2
+phsubsw     (%rax), %xmm2
+
+phsubw      %mm0, %mm2
+phsubw      (%rax), %mm2
+
+phsubw      %xmm0, %xmm2
+phsubw      (%rax), %xmm2
+
+pmaddubsw   %mm0, %mm2
+pmaddubsw   (%rax), %mm2
+
+pmaddubsw   %xmm0, %xmm2
+pmaddubsw   (%rax), %xmm2
+
+pmulhrsw    %mm0, %mm2
+pmulhrsw    (%rax), %mm2
+
+pmulhrsw    %xmm0, %xmm2
+pmulhrsw    (%rax), %xmm2
+
+pshufb      %mm0, %mm2
+pshufb      (%rax), %mm2
+
+pshufb      %xmm0, %xmm2
+pshufb      (%rax), %xmm2
+
+psignb      %mm0, %mm2
+psignb      (%rax), %mm2
+
+psignb      %xmm0, %xmm2
+psignb      (%rax), %xmm2
+
+psignd      %mm0, %mm2
+psignd      (%rax), %mm2
+
+psignd      %xmm0, %xmm2
+psignd      (%rax), %xmm2
+
+psignw      %mm0, %mm2
+psignw      (%rax), %mm2
+
+psignw      %xmm0, %xmm2
+psignw      (%rax), %xmm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      1     0.25                       pabsb   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pabsb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pabsb   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pabsb   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pabsd   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pabsd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pabsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pabsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pabsw   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pabsw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pabsw   %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pabsw   (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       palignr $1, %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  palignr $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         phaddd  %mm0, %mm2
+# CHECK-NEXT:  1      100    -      *                  phaddd  (%rax), %mm2
+# CHECK-NEXT:  1      100    -                         phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  phaddd  (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         phaddsw %mm0, %mm2
+# CHECK-NEXT:  1      100    -      *                  phaddsw (%rax), %mm2
+# CHECK-NEXT:  1      100    -                         phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  phaddsw (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         phaddw  %mm0, %mm2
+# CHECK-NEXT:  1      100    -      *                  phaddw  (%rax), %mm2
+# CHECK-NEXT:  1      100    -                         phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  phaddw  (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         phsubd  %mm0, %mm2
+# CHECK-NEXT:  1      100    -      *                  phsubd  (%rax), %mm2
+# CHECK-NEXT:  1      100    -                         phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  phsubd  (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         phsubsw %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  phsubsw (%rax), %mm2
+# CHECK-NEXT:  1      100    -                         phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  phsubsw (%rax), %xmm2
+# CHECK-NEXT:  1      100    -                         phsubw  %mm0, %mm2
+# CHECK-NEXT:  1      100    -      *                  phsubw  (%rax), %mm2
+# CHECK-NEXT:  1      100    -                         phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  1      100    -      *                  phsubw  (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  1      11    1.00    *                  pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  1      4     1.00                       pmulhrsw        %mm0, %mm2
+# CHECK-NEXT:  1      11    1.00    *                  pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT:  1      11    1.00    *                  pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       pshufb  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pshufb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  pshufb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psignb  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psignb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psignb  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psignb  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psignd  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psignd  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psignd  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psignd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.25                       psignw  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psignw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psignw  %xmm0, %xmm2
+# CHECK-NEXT:  1      8     0.50    *                  psignw  (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - ZnAGU0
+# CHECK-NEXT: [1] - ZnAGU1
+# CHECK-NEXT: [2] - ZnALU0
+# CHECK-NEXT: [3] - ZnALU1
+# CHECK-NEXT: [4] - ZnALU2
+# CHECK-NEXT: [5] - ZnALU3
+# CHECK-NEXT: [6] - ZnDivider
+# CHECK-NEXT: [7] - ZnFPU0
+# CHECK-NEXT: [8] - ZnFPU1
+# CHECK-NEXT: [9] - ZnFPU2
+# CHECK-NEXT: [10] - ZnFPU3
+# CHECK-NEXT: [11] - ZnMultiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT: 10.50  10.50   -      -      -      -      -     16.25  8.25   8.25   8.25    -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]        Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsb   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsb   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsb   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsd   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsd   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsw   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsw   %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pabsw   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          palignr $1, %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          palignr $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          palignr $1, %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phaddw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubsw %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          phsubsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          phsubw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmaddubsw       %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmaddubsw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmaddubsw       %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmaddubsw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmulhrsw        %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmulhrsw        (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmulhrsw        %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmulhrsw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufb  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufb  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pshufb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignb  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignb  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignb  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignd  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignd  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignw  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignw  %xmm0, %xmm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psignw  (%rax), %xmm2
+