[llvm-mca][X86] Add MMX/SSE/AES/CLMUL resource SandyBridge tests
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 20 Apr 2018 22:04:11 +0000 (22:04 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 20 Apr 2018 22:04:11 +0000 (22:04 +0000)
llvm-svn: 330486

llvm/test/tools/llvm-mca/X86/SandyBridge/resources-aes.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-clmul.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-mmx.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse2.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse3.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse41.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse42.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SandyBridge/resources-ssse3.s [new file with mode: 0644]

diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-aes.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-aes.s
new file mode 100644 (file)
index 0000000..7fa9ada
--- /dev/null
@@ -0,0 +1,72 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=sandybridge -instruction-tables < %s | FileCheck %s
+
+aesdec          %xmm0, %xmm2
+aesdec          (%rax), %xmm2
+
+aesdeclast      %xmm0, %xmm2
+aesdeclast      (%rax), %xmm2
+
+aesenc          %xmm0, %xmm2
+aesenc          (%rax), %xmm2
+
+aesenclast      %xmm0, %xmm2
+aesenclast      (%rax), %xmm2
+
+aesimc          %xmm0, %xmm2
+aesimc          (%rax), %xmm2
+
+aeskeygenassist $22, %xmm0, %xmm2
+aeskeygenassist $22, (%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:  2      7     1.00                       aesdec  %xmm0, %xmm2
+# CHECK-NEXT:  3      13    1.00    *                  aesdec  (%rax), %xmm2
+# CHECK-NEXT:  2      7     1.00                       aesdeclast      %xmm0, %xmm2
+# CHECK-NEXT:  3      13    1.00    *                  aesdeclast      (%rax), %xmm2
+# CHECK-NEXT:  2      7     1.00                       aesenc  %xmm0, %xmm2
+# CHECK-NEXT:  3      13    1.00    *                  aesenc  (%rax), %xmm2
+# CHECK-NEXT:  2      7     1.00                       aesenclast      %xmm0, %xmm2
+# CHECK-NEXT:  3      13    1.00    *                  aesenclast      (%rax), %xmm2
+# CHECK-NEXT:  2      12    2.00                       aesimc  %xmm0, %xmm2
+# CHECK-NEXT:  3      18    2.00    *                  aesimc  (%rax), %xmm2
+# CHECK-NEXT:  1      8     3.67                       aeskeygenassist $22, %xmm0, %xmm2
+# CHECK-NEXT:  1      8     3.33    *                  aeskeygenassist $22, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -     9.67   9.67    -     21.67  3.00   3.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33    -      -      aesdec  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33   0.50   0.50    aesdec  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33    -      -      aesdeclast      %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33   0.50   0.50    aesdeclast      (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33    -      -      aesenc  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33   0.50   0.50    aesenc  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33    -      -      aesenclast      %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33   0.50   0.50    aesenclast      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     2.00    -      -      aesimc  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     2.00   0.50   0.50    aesimc  (%rax), %xmm2
+# CHECK-NEXT:  -      -     3.67   3.67    -     3.67    -      -      aeskeygenassist $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     3.33   3.33    -     3.33   0.50   0.50    aeskeygenassist $22, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-clmul.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-clmul.s
new file mode 100644 (file)
index 0000000..f9c79f3
--- /dev/null
@@ -0,0 +1,37 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=sandybridge -instruction-tables < %s | FileCheck %s
+
+pclmulqdq     $11, %xmm0, %xmm2
+pclmulqdq     $11, (%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      14    6.00                       pclmulqdq       $11, %xmm0, %xmm2
+# CHECK-NEXT:  1      14    5.67    *                  pclmulqdq       $11, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -     11.67  11.67   -     11.67  0.50   0.50
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   Instructions:
+# CHECK-NEXT:  -      -     6.00   6.00    -     6.00    -      -      pclmulqdq       $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     5.67   5.67    -     5.67   0.50   0.50    pclmulqdq       $11, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-mmx.s
new file mode 100644 (file)
index 0000000..1453d94
--- /dev/null
@@ -0,0 +1,394 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=sandybridge -instruction-tables < %s | FileCheck %s
+
+emms
+
+movd        %eax, %mm2
+movd        (%rax), %mm2
+
+movd        %mm0, %ecx
+movd        %mm0, (%rax)
+
+movq        %rax, %mm2
+movq        (%rax), %mm2
+
+movq        %mm0, %rcx
+movq        %mm0, (%rax)
+
+packsswb    %mm0, %mm2
+packsswb    (%rax), %mm2
+
+packssdw    %mm0, %mm2
+packssdw    (%rax), %mm2
+
+packuswb    %mm0, %mm2
+packuswb    (%rax), %mm2
+
+paddb       %mm0, %mm2
+paddb       (%rax), %mm2
+
+paddd       %mm0, %mm2
+paddd       (%rax), %mm2
+
+paddsb      %mm0, %mm2
+paddsb      (%rax), %mm2
+
+paddsw      %mm0, %mm2
+paddsw      (%rax), %mm2
+
+paddusb     %mm0, %mm2
+paddusb     (%rax), %mm2
+
+paddusw     %mm0, %mm2
+paddusw     (%rax), %mm2
+
+paddw       %mm0, %mm2
+paddw       (%rax), %mm2
+
+pand        %mm0, %mm2
+pand        (%rax), %mm2
+
+pandn       %mm0, %mm2
+pandn       (%rax), %mm2
+
+pcmpeqb     %mm0, %mm2
+pcmpeqb     (%rax), %mm2
+
+pcmpeqd     %mm0, %mm2
+pcmpeqd     (%rax), %mm2
+
+pcmpeqw     %mm0, %mm2
+pcmpeqw     (%rax), %mm2
+
+pcmpgtb     %mm0, %mm2
+pcmpgtb     (%rax), %mm2
+
+pcmpgtd     %mm0, %mm2
+pcmpgtd     (%rax), %mm2
+
+pcmpgtw     %mm0, %mm2
+pcmpgtw     (%rax), %mm2
+
+pmaddwd     %mm0, %mm2
+pmaddwd     (%rax), %mm2
+
+pmulhw      %mm0, %mm2
+pmulhw      (%rax), %mm2
+
+pmullw      %mm0, %mm2
+pmullw      (%rax), %mm2
+
+por         %mm0, %mm2
+por         (%rax), %mm2
+
+pslld       $1, %mm2
+pslld       %mm0, %mm2
+pslld       (%rax), %mm2
+
+psllq       $1, %mm2
+psllq       %mm0, %mm2
+psllq       (%rax), %mm2
+
+psllw       $1, %mm2
+psllw       %mm0, %mm2
+psllw       (%rax), %mm2
+
+psrad       $1, %mm2
+psrad       %mm0, %mm2
+psrad       (%rax), %mm2
+
+psraw       $1, %mm2
+psraw       %mm0, %mm2
+psraw       (%rax), %mm2
+
+psrld       $1, %mm2
+psrld       %mm0, %mm2
+psrld       (%rax), %mm2
+
+psrlq       $1, %mm2
+psrlq       %mm0, %mm2
+psrlq       (%rax), %mm2
+
+psrlw       $1, %mm2
+psrlw       %mm0, %mm2
+psrlw       (%rax), %mm2
+
+psubb       %mm0, %mm2
+psubb       (%rax), %mm2
+
+psubd       %mm0, %mm2
+psubd       (%rax), %mm2
+
+psubsb      %mm0, %mm2
+psubsb      (%rax), %mm2
+
+psubsw      %mm0, %mm2
+psubsw      (%rax), %mm2
+
+psubusb     %mm0, %mm2
+psubusb     (%rax), %mm2
+
+psubusw     %mm0, %mm2
+psubusw     (%rax), %mm2
+
+psubw       %mm0, %mm2
+psubw       (%rax), %mm2
+
+punpckhbw   %mm0, %mm2
+punpckhbw   (%rax), %mm2
+
+punpckhdq   %mm0, %mm2
+punpckhdq   (%rax), %mm2
+
+punpckhwd   %mm0, %mm2
+punpckhwd   (%rax), %mm2
+
+punpcklbw   %mm0, %mm2
+punpcklbw   (%rax), %mm2
+
+punpckldq   %mm0, %mm2
+punpckldq   (%rax), %mm2
+
+punpcklwd   %mm0, %mm2
+punpcklwd   (%rax), %mm2
+
+pxor        %mm0, %mm2
+pxor        (%rax), %mm2
+
+# 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      100   0.33    *      *      *    emms
+# CHECK-NEXT:  1      1     0.33                       movd    %eax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       movd    %mm0, %ecx
+# CHECK-NEXT:  1      1     1.00           *      *    movd    %mm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movq    %rax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       movq    %mm0, %rcx
+# CHECK-NEXT:  1      1     1.00           *           movq    %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       packsswb        %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  packsswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       packssdw        %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  packssdw        (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       packuswb        %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  packuswb        (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       paddb   %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  paddb   (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       paddd   %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  paddd   (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       paddsb  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  paddsb  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       paddsw  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  paddsw  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       paddusb %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  paddusb (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       paddusw %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  paddusw (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       paddw   %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  paddw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pand    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pand    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pandn   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pandn   (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmaddwd %mm0, %mm2
+# CHECK-NEXT:  2      11    1.00    *                  pmaddwd (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmulhw  %mm0, %mm2
+# CHECK-NEXT:  2      11    1.00    *                  pmulhw  (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmullw  %mm0, %mm2
+# CHECK-NEXT:  2      11    1.00    *                  pmullw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       por     %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  por     (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pslld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrad   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psraw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlw   (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       psubb   %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psubb   (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       psubd   %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psubd   (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       psubsb  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psubsb  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       psubsw  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psubsw  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       psubusb %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psubusb (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       psubusw %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psubusw (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       psubw   %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  psubw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckldq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pxor    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pxor    (%rax), %mm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -     10.33  44.33  2.00   46.33  24.00  24.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   Instructions:
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      emms
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      movd    %eax, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -     0.50   0.50    movd    (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      movd    %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movd    %mm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      movq    %rax, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -     0.50   0.50    movq    (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      movq    %mm0, %rcx
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movq    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      packsswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    packsswb        (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      packssdw        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    packssdw        (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      packuswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    packuswb        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      paddb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    paddb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      paddd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    paddd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      paddsb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    paddsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      paddsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    paddsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      paddusb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    paddusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      paddusw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    paddusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      paddw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    paddw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      pand    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33   0.50   0.50    pand    (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      pandn   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33   0.50   0.50    pandn   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      pmaddwd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    pmaddwd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      pmulhw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    pmulhw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      pmullw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    pmullw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      por     %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33   0.50   0.50    por     (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      pslld   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      pslld   %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    pslld   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psllq   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psllq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    psllq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psllw   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psllw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    psllw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psrad   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psrad   %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    psrad   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psraw   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psraw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    psraw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psrld   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psrld   %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    psrld   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psrlq   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psrlq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    psrlq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psrlw   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      psrlw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    psrlw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psubb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    psubb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psubd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    psubd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psubsb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    psubsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psubsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    psubsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psubusb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    psubusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psubusw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    psubusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psubw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    psubw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      punpckldq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    punpckldq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      pxor    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33   0.50   0.50    pxor    (%rax), %mm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse1.s
new file mode 100644 (file)
index 0000000..fdee64a
--- /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=sandybridge -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      9     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      9     1.00    *                  cmpss   $0, (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       comiss  %xmm0, %xmm1
+# CHECK-NEXT:  3      8     1.00    *                  comiss  (%rax), %xmm1
+# CHECK-NEXT:  1      3     1.00                       cvtpi2ps        %mm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtpi2ps        (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  3      5     2.00                       cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  3      5     2.00                       cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  3      10    1.00    *                  cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtss2si        %xmm0, %ecx
+# CHECK-NEXT:  2      5     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:  1      3     1.00                       cvttps2pi       %xmm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  cvttps2pi       (%rax), %mm2
+# CHECK-NEXT:  2      5     1.00                       cvttss2si       %xmm0, %ecx
+# CHECK-NEXT:  2      5     1.00                       cvttss2si       %xmm0, %rcx
+# CHECK-NEXT:  3      9     1.00    *                  cvttss2si       (%rax), %ecx
+# CHECK-NEXT:  3      9     1.00    *                  cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  1      14    14.00                      divps   %xmm0, %xmm2
+# CHECK-NEXT:  2      20    14.00   *                  divps   (%rax), %xmm2
+# CHECK-NEXT:  1      14    14.00                      divss   %xmm0, %xmm2
+# CHECK-NEXT:  2      20    14.00   *                  divss   (%rax), %xmm2
+# CHECK-NEXT:  4      5     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      9     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      9     1.00    *                  minss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movaps  %xmm0, %xmm2
+# CHECK-NEXT:  1      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:  1      1     1.00           *           movhps  %xmm0, (%rax)
+# CHECK-NEXT:  2      7     1.00    *                  movhps  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movlps  %xmm0, (%rax)
+# CHECK-NEXT:  2      7     1.00    *                  movlps  (%rax), %xmm2
+# CHECK-NEXT:  1      2     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      6     0.50    *                  movss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movups  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movups  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movups  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       mulps   %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  mulps   (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       mulss   %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  mulss   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       orps    %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  orps    (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       pavgb   %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pavgb   (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pavgw   %mm0, %mm2
+# CHECK-NEXT:  2      8     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:  2      6     1.00    *                  pinsrw  $1, (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pmaxsw  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pmaxsw  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pmaxub  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pmaxub  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pminsw  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pminsw  (%rax), %mm2
+# CHECK-NEXT:  1      3     1.00                       pminub  %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  pminub  (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       pmovmskb        %xmm0, %ecx
+# CHECK-NEXT:  1      5     1.00                       pmulhuw %mm0, %mm2
+# CHECK-NEXT:  2      11    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      11    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      11    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      11    1.00    *                  rsqrtss (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00    *      *      *    sfence
+# CHECK-NEXT:  1      1     1.00                       shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     1.00    *                  shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      14    14.00                      sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  2      20    14.00   *                  sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  1      14    14.00                      sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  2      20    14.00   *                  sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  4      5     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      9     1.00    *                  subss   (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  3      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] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -     112.00 40.00  54.00  10.00  35.00  33.50  33.50
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   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:  -      -      -      -      -     1.00   0.50   0.50    andnps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      andps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    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   1.00    -      -      -      -      comiss  %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00   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    -      -      -      -      cvtps2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    cvtps2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -     2.00    -      -      cvtsi2ssl       %ecx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     2.00    -      -      cvtsi2ssq       %rcx, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00   0.50   0.50    cvtsi2ssl       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     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    -      -      -      -      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    cvttss2si       (%rax), %rcx
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      divps   %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -     0.50   0.50    divps   (%rax), %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      divss   %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -     0.50   0.50    divss   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -     1.00   1.00   0.50   0.50    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:  -      -      -      -     1.00    -     0.50   0.50    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:  -      -      -      -     1.00    -     0.50   0.50    movhps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    movhps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movlps  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    movlps  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      movmskps        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movntps %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movntq  %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      movss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movss   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -     0.50   0.50    movss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      movups  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movups  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -     0.50   0.50    movups  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      mulps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    mulps   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      mulss   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    mulss   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      orps    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    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    -      -      pextrw  $1, %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      pinsrw  $1, %eax, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    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:  -      -     1.00    -      -      -     0.50   0.50    psadbw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      pshufw  $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    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:  -      -      -      -     1.00    -     0.50   0.50    sfence
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      shufps  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    shufps  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      sqrtps  %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -     0.50   0.50    sqrtps  (%rax), %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -      -      -      sqrtss  %xmm0, %xmm2
+# CHECK-NEXT:  -     14.00  1.00    -      -      -     0.50   0.50    sqrtss  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -     1.00   1.00   0.50   0.50    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   1.00    -      -      -      -      ucomiss %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00   1.00    -      -     0.50   0.50    ucomiss (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      unpckhps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    unpckhps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      unpcklps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    unpcklps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      xorps   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    xorps   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse2.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse2.s
new file mode 100644 (file)
index 0000000..f8ca0cc
--- /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=sandybridge -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      9     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:  4      5     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      9     1.00    *                  cmpsd   $0, (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       comisd  %xmm0, %xmm1
+# CHECK-NEXT:  3      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      10    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      7     1.00    *                  cvtps2pd        (%rax), %xmm2
+# CHECK-NEXT:  2      5     1.00                       cvtsd2si        %xmm0, %ecx
+# CHECK-NEXT:  2      5     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      10    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:  1      1     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      5     1.00                       cvttsd2si       %xmm0, %ecx
+# CHECK-NEXT:  2      5     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      22    22.00                      divpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      28    22.00   *                  divpd   (%rax), %xmm2
+# CHECK-NEXT:  1      22    22.00                      divsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      28    22.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:  2      9     1.00    *                  maxpd   (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       maxsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      9     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      9     1.00    *                  minsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       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      6     0.50    *                  movd    (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movd    %xmm0, %ecx
+# CHECK-NEXT:  1      1     1.00           *           movd    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  1      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:  1      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:  1      1     1.00           *           movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      7     1.00    *                  movhpd  (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  2      7     1.00    *                  movlpd  (%rax), %xmm2
+# CHECK-NEXT:  1      2     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.33                       movq    %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %xmm2
+# CHECK-NEXT:  1      6     0.50    *                  movq    (%rax), %xmm2
+# CHECK-NEXT:  1      2     1.00                       movq    %xmm0, %rcx
+# CHECK-NEXT:  1      1     1.00           *           movq    %xmm0, (%rax)
+# CHECK-NEXT:  1      1     0.33                       movq2dq %mm0, %xmm2
+# CHECK-NEXT:  1      1     1.00                       movsd   %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movsd   %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movsd   (%rax), %xmm2
+# CHECK-NEXT:  1      1     1.00                       movupd  %xmm0, %xmm2
+# CHECK-NEXT:  1      1     1.00           *           movupd  %xmm0, (%rax)
+# CHECK-NEXT:  1      6     0.50    *                  movupd  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  mulpd   (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  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     0.50                       packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  packssdw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  packsswb        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  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      7     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      3     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      2     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      11    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     0.50                       pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  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     0.50                       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     0.50                       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      3     1.00                       psubq   %mm0, %mm2
+# CHECK-NEXT:  2      8     1.00    *                  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     0.50                       punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  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      21    21.00                      sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  2      27    21.00   *                  sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  1      21    21.00                      sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  2      27    21.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      9     1.00    *                  subsd   (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  3      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] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -     172.00 75.83  119.33 14.00  98.83  65.50  65.50
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   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:  -      -      -      -      -     1.00   0.50   0.50    andnpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      andpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    andpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.50   0.50   1.00   1.00   0.50   0.50    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   1.00    -      -      -      -      comisd  %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00   1.00    -      -     0.50   0.50    comisd  (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -     1.00    -      -      cvtdq2pd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00   0.50   0.50    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    -     1.00   0.50   0.50    cvtpd2dq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00    -      -      cvtpd2pi        %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00   0.50   0.50    cvtpd2pi        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00    -      -      cvtpd2ps        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00   0.50   0.50    cvtpd2ps        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00    -      -      cvtpi2pd        %mm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00   0.50   0.50    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    -     1.00   0.50   0.50    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    -      -      -      -      -      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    -     1.00   0.50   0.50    cvttpd2dq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00    -      -      cvttpd2pi       %xmm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00   0.50   0.50    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:  -     22.00  1.00    -      -      -      -      -      divpd   %xmm0, %xmm2
+# CHECK-NEXT:  -     22.00  1.00    -      -      -     0.50   0.50    divpd   (%rax), %xmm2
+# CHECK-NEXT:  -     22.00  1.00    -      -      -      -      -      divsd   %xmm0, %xmm2
+# CHECK-NEXT:  -     22.00  1.00    -      -      -     0.50   0.50    divsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    lfence
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    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:  -      -      -      -     1.00    -     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:  -      -      -      -     1.00    -     0.50   0.50    movd    %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      movdqa  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    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:  -      -      -      -     1.00    -     0.50   0.50    movdqu  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -     0.50   0.50    movdqu  (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     1.33    -      -      movdq2q %xmm0, %mm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movhpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    movhpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movlpd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    movlpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      movmskpd        %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movntdq %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    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:  -      -      -      -     1.00    -     0.50   0.50    movq    %xmm0, (%rax)
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      movq2dq %mm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      movsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movsd   %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -     0.50   0.50    movsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      movupd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -     1.00    -     0.50   0.50    movupd  %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -     0.50   0.50    movupd  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      mulpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    mulpd   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      mulsd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    mulsd   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      orpd    %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    orpd    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      packssdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    packssdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      packsswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    packsswb        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      packuswb        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    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.33   0.50   0.50    pand    (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      pandn   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33   0.50   0.50    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   0.50    -     0.50    -      -      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.33   0.50   0.50    por     (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      psadbw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    psadbw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pshufd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pshufd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pshufhw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pshufhw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pshuflw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pshuflw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      pslld   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      pslld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50   0.50   0.50    pslld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pslldq  $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      psllq   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      psllq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50   0.50   0.50    psllq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      psllw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      psllw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50   0.50   0.50    psllw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      psrad   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      psrad   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50   0.50   0.50    psrad   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      psraw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      psraw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50   0.50   0.50    psraw   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      psrld   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      psrld   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50   0.50   0.50    psrld   (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      psrldq  $1, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      psrlq   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      psrlq   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50   0.50   0.50    psrlq   (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      psrlw   $1, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      psrlw   %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50   0.50   0.50    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:  -      -      -     1.00    -      -      -      -      psubq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     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:  -      -      -     0.50    -     0.50    -      -      punpckhbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    punpckhbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      punpckhdq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    punpckhdq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      punpckhqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    punpckhqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      punpckhwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    punpckhwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      punpcklbw       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    punpcklbw       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      punpckldq       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    punpckldq       (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      punpcklqdq      %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    punpcklqdq      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      punpcklwd       %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    punpcklwd       (%rax), %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33    -      -      pxor    %xmm0, %xmm2
+# CHECK-NEXT:  -      -     0.33   0.33    -     0.33   0.50   0.50    pxor    (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      shufpd  $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    shufpd  $1, (%rax), %xmm2
+# CHECK-NEXT:  -     21.00  1.00    -      -      -      -      -      sqrtpd  %xmm0, %xmm2
+# CHECK-NEXT:  -     21.00  1.00    -      -      -     0.50   0.50    sqrtpd  (%rax), %xmm2
+# CHECK-NEXT:  -     21.00  1.00    -      -      -      -      -      sqrtsd  %xmm0, %xmm2
+# CHECK-NEXT:  -     21.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   1.00    -      -      -      -      ucomisd %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00   1.00    -      -     0.50   0.50    ucomisd (%rax), %xmm1
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      unpckhpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    unpckhpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      unpcklpd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    unpcklpd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      xorpd   %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    xorpd   (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse3.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse3.s
new file mode 100644 (file)
index 0000000..c4d283f
--- /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=sandybridge -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      6     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] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -      -     12.00   -     19.00  5.00   5.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   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    -     2.00   0.50   0.50    haddpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     2.00    -      -      haddps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     2.00   0.50   0.50    haddps  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     2.00    -      -      hsubpd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     2.00   0.50   0.50    hsubpd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     2.00    -      -      hsubps  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     2.00   0.50   0.50    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/SandyBridge/resources-sse41.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse41.s
new file mode 100644 (file)
index 0000000..7f40244
--- /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=sandybridge -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:  2      7     0.50    *                  blendpd $11, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       blendps $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  blendps $11, (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.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      12    2.00                       dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  5      18    2.00    *                  dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  2      3     1.00                       extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  3      5     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     1.00                       mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  4      13    1.00    *                  mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  packusdw        (%rax), %xmm2
+# CHECK-NEXT:  2      2     1.00                       pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  3      8     1.00    *                  pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  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      5     1.00           *           pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      3     1.00                       pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  4      5     1.00           *           pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  2      3     1.00                       pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  4      5     1.00           *           pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  3      6     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     1.00                       pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  2      7     0.50    *                  pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     1.00                       pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  2      7     0.50    *                  pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  2      2     1.00                       pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  2      7     0.50    *                  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     0.50                       pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  1      1     0.50                       pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.00    *                  pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  2      11    1.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      3     1.00                       roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  1      3     1.00                       roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      9     1.00    *                  roundss $1, (%rax), %xmm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -     26.00  47.00  5.00   53.00  25.00  25.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   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:  -      -     1.00    -      -     1.00    -      -      blendvpd        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -     1.00   0.50   0.50    blendvpd        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -     1.00    -      -      blendvps        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -     1.00   0.50   0.50    blendvps        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -     1.00    -      -      dppd    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -     1.00   0.50   0.50    dppd    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   2.00    -     1.00    -      -      dpps    $22, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   2.00    -     1.00   0.50   0.50    dpps    $22, (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -     1.00    -      -      extractps       $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -      -     1.00   1.00   0.50   0.50    extractps       $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     1.00    -      -      insertps        $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -      -      -     1.00   0.50   0.50    insertps        $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -      -      -      -     0.50   0.50    movntdqa        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -     1.00    -      -      mpsadbw $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00   1.00    -     1.00   0.50   0.50    mpsadbw $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      packusdw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    packusdw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00    -      -      pblendvb        %xmm0, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -     1.00   0.50   0.50    pblendvb        %xmm0, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pblendw $11, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    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   0.50    -     0.50    -      -      pextrb  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -      -     0.50   1.00   0.50   0.50   0.50    pextrb  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      pextrd  $1, %xmm0, %ecx
+# CHECK-NEXT:  -      -     1.00   0.50   1.00   0.50   0.50   0.50    pextrd  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00   0.50    -     0.50    -      -      pextrq  $1, %xmm0, %rcx
+# CHECK-NEXT:  -      -     1.00   0.50   1.00   0.50   0.50   0.50    pextrq  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -      -      -     1.00   1.00   1.00   1.00    pextrw  $1, %xmm0, (%rax)
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      phminposuw      %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    phminposuw      (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     1.50    -      -      pinsrb  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pinsrb  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     0.50    -     1.50    -      -      pinsrd  $1, %eax, %xmm1
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pinsrd  $1, (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     0.50    -     1.50    -      -      pinsrq  $1, %rax, %xmm1
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    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:  -      -      -     0.50    -     0.50    -      -      pmovsxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovsxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovsxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovsxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovsxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovsxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovsxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovsxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovsxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovsxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovsxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovsxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovzxbd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovzxbd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovzxbq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovzxbq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovzxbw        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovzxbw        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovzxdq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovzxdq        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovzxwd        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovzxwd        (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pmovzxwq        %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pmovzxwq        (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      pmuldq  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    pmuldq  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      pmulld  %xmm0, %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -      -     0.50   0.50    pmulld  (%rax), %xmm2
+# CHECK-NEXT:  -      -     1.00    -      -     1.00    -      -      ptest   %xmm0, %xmm1
+# CHECK-NEXT:  -      -     1.00    -      -     1.00   0.50   0.50    ptest   (%rax), %xmm1
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      roundpd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    roundpd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      roundps $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    roundps $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      roundsd $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    roundsd $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      roundss $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.00    -      -     0.50   0.50    roundss $1, (%rax), %xmm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse42.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-sse42.s
new file mode 100644 (file)
index 0000000..8208a37
--- /dev/null
@@ -0,0 +1,100 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=sandybridge -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:  1      4     2.67                       pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      4     2.33    *                  pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  1      11    2.67                       pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  1      11    2.33    *                  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] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -     24.00  20.00   -     10.00  5.00   5.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   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:  -      -     2.67   2.67    -     2.67    -      -      pcmpestri       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.33   2.33    -     2.33   0.50   0.50    pcmpestri       $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -     2.67   2.67    -     2.67    -      -      pcmpestrm       $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -     2.33   2.33    -     2.33   0.50   0.50    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/SandyBridge/resources-ssse3.s b/llvm/test/tools/llvm-mca/X86/SandyBridge/resources-ssse3.s
new file mode 100644 (file)
index 0000000..63b1892
--- /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=sandybridge -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     0.50                       palignr $1, %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  palignr $1, (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  3      3     1.50                       phaddd  %mm0, %mm2
+# CHECK-NEXT:  4      8     1.50    *                  phaddd  (%rax), %mm2
+# CHECK-NEXT:  3      3     1.50                       phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     1.50    *                  phaddd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     1.50                       phaddsw %mm0, %mm2
+# CHECK-NEXT:  4      8     1.50    *                  phaddsw (%rax), %mm2
+# CHECK-NEXT:  3      3     1.50                       phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  4      9     1.50    *                  phaddsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     1.50                       phaddw  %mm0, %mm2
+# CHECK-NEXT:  4      8     1.50    *                  phaddw  (%rax), %mm2
+# CHECK-NEXT:  3      3     1.50                       phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     1.50    *                  phaddw  (%rax), %xmm2
+# CHECK-NEXT:  3      3     1.50                       phsubd  %mm0, %mm2
+# CHECK-NEXT:  4      8     1.50    *                  phsubd  (%rax), %mm2
+# CHECK-NEXT:  3      3     1.50                       phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     1.50    *                  phsubd  (%rax), %xmm2
+# CHECK-NEXT:  3      3     1.50                       phsubsw %mm0, %mm2
+# CHECK-NEXT:  4      8     1.50    *                  phsubsw (%rax), %mm2
+# CHECK-NEXT:  3      3     1.50                       phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  4      9     1.50    *                  phsubsw (%rax), %xmm2
+# CHECK-NEXT:  3      3     1.50                       phsubw  %mm0, %mm2
+# CHECK-NEXT:  4      8     1.50    *                  phsubw  (%rax), %mm2
+# CHECK-NEXT:  3      3     1.50                       phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  4      9     1.50    *                  phsubw  (%rax), %xmm2
+# CHECK-NEXT:  1      5     1.00                       pmaddubsw       %mm0, %mm2
+# CHECK-NEXT:  2      11    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      11    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     0.50                       pshufb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pshufb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  2      7     0.50    *                  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] - SBDivider
+# CHECK-NEXT: [1] - SBFPDivider
+# CHECK-NEXT: [2] - SBPort0
+# CHECK-NEXT: [3] - SBPort1
+# CHECK-NEXT: [4] - SBPort4
+# CHECK-NEXT: [5] - SBPort5
+# CHECK-NEXT: [6.0] - SBPort23
+# CHECK-NEXT: [6.1] - SBPort23
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]
+# CHECK-NEXT:  -      -     8.00   52.00   -     52.00  16.00  16.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6.0]  [6.1]   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:  -      -      -     0.50    -     0.50    -      -      palignr $1, %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    palignr $1, (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      palignr $1, %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    palignr $1, (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phaddd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phaddd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phaddd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phaddd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phaddsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phaddsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phaddsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phaddsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phaddw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phaddw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phaddw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phaddw  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phsubd  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phsubd  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phsubd  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phsubd  (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phsubsw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phsubsw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phsubsw %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phsubsw (%rax), %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phsubw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.50    phsubw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50    -      -      phsubw  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     1.50    -     1.50   0.50   0.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:  -      -      -     0.50    -     0.50    -      -      pshufb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    pshufb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50    -      -      pshufb  %xmm0, %xmm2
+# CHECK-NEXT:  -      -      -     0.50    -     0.50   0.50   0.50    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
+