summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/sse42-schedule.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/sse42-schedule.ll')
-rw-r--r--llvm/test/CodeGen/X86/sse42-schedule.ll623
1 files changed, 613 insertions, 10 deletions
diff --git a/llvm/test/CodeGen/X86/sse42-schedule.ll b/llvm/test/CodeGen/X86/sse42-schedule.ll
index b728bbfd68a..eb4ad7371ef 100644
--- a/llvm/test/CodeGen/X86/sse42-schedule.ll
+++ b/llvm/test/CodeGen/X86/sse42-schedule.ll
@@ -1,14 +1,22 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+sse4.2,+pclmul | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2
-; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+sse4.2,+pclmul | FileCheck %s --check-prefixes=CHECK,GENERIC
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SLM
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SANDY-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SANDY
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SANDY-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SANDY
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-avx | FileCheck %s --check-prefixes=CHECK,HASWELL-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,HASWELL
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-avx | FileCheck %s --check-prefixes=CHECK,BROADWELL-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,BROADWELL
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SKYLAKE-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SKYLAKE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SKX-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SKX
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-avx | FileCheck %s --check-prefixes=CHECK,BTVER2-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,BTVER2
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-avx | FileCheck %s --check-prefixes=CHECK,ZNVER1-SSE
+; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,ZNVER1
define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
; GENERIC-LABEL: crc32_32_8:
@@ -25,6 +33,13 @@ define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: crc32_32_8:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; SANDY-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; SANDY-SSE-NEXT: movl %edi, %eax # sched: [1:0.33]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: crc32_32_8:
; SANDY: # %bb.0:
; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -32,6 +47,13 @@ define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: crc32_32_8:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; HASWELL-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; HASWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: crc32_32_8:
; HASWELL: # %bb.0:
; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -39,6 +61,13 @@ define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: crc32_32_8:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; BROADWELL-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; BROADWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: crc32_32_8:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -46,6 +75,13 @@ define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: crc32_32_8:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; SKYLAKE-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; SKYLAKE-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: crc32_32_8:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -53,6 +89,13 @@ define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: crc32_32_8:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; SKX-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; SKX-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: crc32_32_8:
; SKX: # %bb.0:
; SKX-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -60,6 +103,13 @@ define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: crc32_32_8:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: crc32b %sil, %edi # sched: [3:2.00]
+; BTVER2-SSE-NEXT: crc32b (%rdx), %edi # sched: [6:2.00]
+; BTVER2-SSE-NEXT: movl %edi, %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: crc32_32_8:
; BTVER2: # %bb.0:
; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:2.00]
@@ -67,6 +117,13 @@ define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: crc32_32_8:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; ZNVER1-SSE-NEXT: crc32b (%rdx), %edi # sched: [10:1.00]
+; ZNVER1-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: crc32_32_8:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -95,6 +152,13 @@ define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: crc32_32_16:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00]
+; SANDY-SSE-NEXT: crc32w (%rdx), %edi # sched: [7:1.00]
+; SANDY-SSE-NEXT: movl %edi, %eax # sched: [1:0.33]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: crc32_32_16:
; SANDY: # %bb.0:
; SANDY-NEXT: crc32w %si, %edi # sched: [3:1.00]
@@ -102,6 +166,13 @@ define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: crc32_32_16:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00]
+; HASWELL-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
+; HASWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: crc32_32_16:
; HASWELL: # %bb.0:
; HASWELL-NEXT: crc32w %si, %edi # sched: [3:1.00]
@@ -109,6 +180,13 @@ define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: crc32_32_16:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00]
+; BROADWELL-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
+; BROADWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: crc32_32_16:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: crc32w %si, %edi # sched: [3:1.00]
@@ -116,6 +194,13 @@ define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: crc32_32_16:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00]
+; SKYLAKE-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
+; SKYLAKE-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: crc32_32_16:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: crc32w %si, %edi # sched: [3:1.00]
@@ -123,6 +208,13 @@ define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: crc32_32_16:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00]
+; SKX-SSE-NEXT: crc32w (%rdx), %edi # sched: [8:1.00]
+; SKX-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: crc32_32_16:
; SKX: # %bb.0:
; SKX-NEXT: crc32w %si, %edi # sched: [3:1.00]
@@ -130,6 +222,13 @@ define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: crc32_32_16:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: crc32w %si, %edi # sched: [3:2.00]
+; BTVER2-SSE-NEXT: crc32w (%rdx), %edi # sched: [6:2.00]
+; BTVER2-SSE-NEXT: movl %edi, %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: crc32_32_16:
; BTVER2: # %bb.0:
; BTVER2-NEXT: crc32w %si, %edi # sched: [3:2.00]
@@ -137,6 +236,13 @@ define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: crc32_32_16:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: crc32w %si, %edi # sched: [3:1.00]
+; ZNVER1-SSE-NEXT: crc32w (%rdx), %edi # sched: [10:1.00]
+; ZNVER1-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: crc32_32_16:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: crc32w %si, %edi # sched: [3:1.00]
@@ -165,6 +271,13 @@ define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
; SLM-NEXT: movl %edi, %eax # sched: [1:0.50]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: crc32_32_32:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
+; SANDY-SSE-NEXT: crc32l (%rdx), %edi # sched: [7:1.00]
+; SANDY-SSE-NEXT: movl %edi, %eax # sched: [1:0.33]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: crc32_32_32:
; SANDY: # %bb.0:
; SANDY-NEXT: crc32l %esi, %edi # sched: [3:1.00]
@@ -172,6 +285,13 @@ define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
; SANDY-NEXT: movl %edi, %eax # sched: [1:0.33]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: crc32_32_32:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
+; HASWELL-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
+; HASWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: crc32_32_32:
; HASWELL: # %bb.0:
; HASWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00]
@@ -179,6 +299,13 @@ define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
; HASWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: crc32_32_32:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
+; BROADWELL-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
+; BROADWELL-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: crc32_32_32:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: crc32l %esi, %edi # sched: [3:1.00]
@@ -186,6 +313,13 @@ define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
; BROADWELL-NEXT: movl %edi, %eax # sched: [1:0.25]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: crc32_32_32:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
+; SKYLAKE-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
+; SKYLAKE-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: crc32_32_32:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
@@ -193,6 +327,13 @@ define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
; SKYLAKE-NEXT: movl %edi, %eax # sched: [1:0.25]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: crc32_32_32:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
+; SKX-SSE-NEXT: crc32l (%rdx), %edi # sched: [8:1.00]
+; SKX-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: crc32_32_32:
; SKX: # %bb.0:
; SKX-NEXT: crc32l %esi, %edi # sched: [3:1.00]
@@ -200,6 +341,13 @@ define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
; SKX-NEXT: movl %edi, %eax # sched: [1:0.25]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: crc32_32_32:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: crc32l %esi, %edi # sched: [3:2.00]
+; BTVER2-SSE-NEXT: crc32l (%rdx), %edi # sched: [6:2.00]
+; BTVER2-SSE-NEXT: movl %edi, %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: crc32_32_32:
; BTVER2: # %bb.0:
; BTVER2-NEXT: crc32l %esi, %edi # sched: [3:2.00]
@@ -207,6 +355,13 @@ define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
; BTVER2-NEXT: movl %edi, %eax # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: crc32_32_32:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: crc32l %esi, %edi # sched: [3:1.00]
+; ZNVER1-SSE-NEXT: crc32l (%rdx), %edi # sched: [10:1.00]
+; ZNVER1-SSE-NEXT: movl %edi, %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: crc32_32_32:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: crc32l %esi, %edi # sched: [3:1.00]
@@ -235,6 +390,13 @@ define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: crc32_64_8:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; SANDY-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; SANDY-SSE-NEXT: movq %rdi, %rax # sched: [1:0.33]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: crc32_64_8:
; SANDY: # %bb.0:
; SANDY-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -242,6 +404,13 @@ define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: crc32_64_8:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; HASWELL-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; HASWELL-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: crc32_64_8:
; HASWELL: # %bb.0:
; HASWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -249,6 +418,13 @@ define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: crc32_64_8:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; BROADWELL-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; BROADWELL-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: crc32_64_8:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -256,6 +432,13 @@ define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
; BROADWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: crc32_64_8:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; SKYLAKE-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; SKYLAKE-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: crc32_64_8:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -263,6 +446,13 @@ define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: crc32_64_8:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; SKX-SSE-NEXT: crc32b (%rdx), %edi # sched: [8:1.00]
+; SKX-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: crc32_64_8:
; SKX: # %bb.0:
; SKX-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -270,6 +460,13 @@ define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
; SKX-NEXT: movq %rdi, %rax # sched: [1:0.25]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: crc32_64_8:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: crc32b %sil, %edi # sched: [3:2.00]
+; BTVER2-SSE-NEXT: crc32b (%rdx), %edi # sched: [6:2.00]
+; BTVER2-SSE-NEXT: movq %rdi, %rax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: crc32_64_8:
; BTVER2: # %bb.0:
; BTVER2-NEXT: crc32b %sil, %edi # sched: [3:2.00]
@@ -277,6 +474,13 @@ define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: crc32_64_8:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: crc32b %sil, %edi # sched: [3:1.00]
+; ZNVER1-SSE-NEXT: crc32b (%rdx), %edi # sched: [10:1.00]
+; ZNVER1-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: crc32_64_8:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: crc32b %sil, %edi # sched: [3:1.00]
@@ -305,6 +509,13 @@ define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
; SLM-NEXT: movq %rdi, %rax # sched: [1:0.50]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: crc32_64_64:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
+; SANDY-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
+; SANDY-SSE-NEXT: movq %rdi, %rax # sched: [1:0.33]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: crc32_64_64:
; SANDY: # %bb.0:
; SANDY-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
@@ -312,6 +523,13 @@ define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
; SANDY-NEXT: movq %rdi, %rax # sched: [1:0.33]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: crc32_64_64:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
+; HASWELL-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
+; HASWELL-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: crc32_64_64:
; HASWELL: # %bb.0:
; HASWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
@@ -319,6 +537,13 @@ define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
; HASWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: crc32_64_64:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
+; BROADWELL-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
+; BROADWELL-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: crc32_64_64:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
@@ -326,6 +551,13 @@ define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
; BROADWELL-NEXT: movq %rdi, %rax # sched: [1:0.25]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: crc32_64_64:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
+; SKYLAKE-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
+; SKYLAKE-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: crc32_64_64:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
@@ -333,6 +565,13 @@ define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
; SKYLAKE-NEXT: movq %rdi, %rax # sched: [1:0.25]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: crc32_64_64:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
+; SKX-SSE-NEXT: crc32q (%rdx), %rdi # sched: [8:1.00]
+; SKX-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: crc32_64_64:
; SKX: # %bb.0:
; SKX-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
@@ -340,6 +579,13 @@ define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
; SKX-NEXT: movq %rdi, %rax # sched: [1:0.25]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: crc32_64_64:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:2.00]
+; BTVER2-SSE-NEXT: crc32q (%rdx), %rdi # sched: [6:2.00]
+; BTVER2-SSE-NEXT: movq %rdi, %rax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: crc32_64_64:
; BTVER2: # %bb.0:
; BTVER2-NEXT: crc32q %rsi, %rdi # sched: [3:2.00]
@@ -347,6 +593,13 @@ define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
; BTVER2-NEXT: movq %rdi, %rax # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: crc32_64_64:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
+; ZNVER1-SSE-NEXT: crc32q (%rdx), %rdi # sched: [10:1.00]
+; ZNVER1-SSE-NEXT: movq %rdi, %rax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: crc32_64_64:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: crc32q %rsi, %rdi # sched: [3:1.00]
@@ -387,6 +640,19 @@ define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SLM-NEXT: leal (%rcx,%rsi), %eax # sched: [1:1.00]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: test_pcmpestri:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: movl $7, %eax # sched: [1:0.33]
+; SANDY-SSE-NEXT: movl $7, %edx # sched: [1:0.33]
+; SANDY-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
+; SANDY-SSE-NEXT: movl %ecx, %esi # sched: [1:0.33]
+; SANDY-SSE-NEXT: movl $7, %eax # sched: [1:0.33]
+; SANDY-SSE-NEXT: movl $7, %edx # sched: [1:0.33]
+; SANDY-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
+; SANDY-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; SANDY-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: test_pcmpestri:
; SANDY: # %bb.0:
; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
@@ -400,6 +666,19 @@ define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SANDY-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: test_pcmpestri:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; HASWELL-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
+; HASWELL-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25]
+; HASWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; HASWELL-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
+; HASWELL-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; HASWELL-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: test_pcmpestri:
; HASWELL: # %bb.0:
; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -413,6 +692,19 @@ define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; HASWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: test_pcmpestri:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
+; BROADWELL-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [23:4.00]
+; BROADWELL-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; BROADWELL-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: test_pcmpestri:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -426,6 +718,19 @@ define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; BROADWELL-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: test_pcmpestri:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
+; SKYLAKE-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
+; SKYLAKE-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; SKYLAKE-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: test_pcmpestri:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -439,6 +744,19 @@ define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SKYLAKE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: test_pcmpestri:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; SKX-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; SKX-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
+; SKX-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25]
+; SKX-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; SKX-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; SKX-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
+; SKX-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; SKX-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: test_pcmpestri:
; SKX: # %bb.0:
; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -452,6 +770,19 @@ define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SKX-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: test_pcmpestri:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: movl $7, %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: movl $7, %edx # sched: [1:0.50]
+; BTVER2-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [14:5.00]
+; BTVER2-SSE-NEXT: movl $7, %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: movl $7, %edx # sched: [1:0.50]
+; BTVER2-SSE-NEXT: movl %ecx, %esi # sched: [1:0.50]
+; BTVER2-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [19:5.00]
+; BTVER2-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; BTVER2-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: test_pcmpestri:
; BTVER2: # %bb.0:
; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50]
@@ -465,6 +796,19 @@ define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; BTVER2-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: test_pcmpestri:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: pcmpestri $7, %xmm1, %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: movl %ecx, %esi # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: pcmpestri $7, (%rdi), %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; ZNVER1-SSE-NEXT: leal (%rcx,%rsi), %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: test_pcmpestri:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -506,6 +850,16 @@ define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SLM-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [17:17.00]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: test_pcmpestrm:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: movl $7, %eax # sched: [1:0.33]
+; SANDY-SSE-NEXT: movl $7, %edx # sched: [1:0.33]
+; SANDY-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
+; SANDY-SSE-NEXT: movl $7, %eax # sched: [1:0.33]
+; SANDY-SSE-NEXT: movl $7, %edx # sched: [1:0.33]
+; SANDY-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: test_pcmpestrm:
; SANDY: # %bb.0:
; SANDY-NEXT: movl $7, %eax # sched: [1:0.33]
@@ -516,6 +870,16 @@ define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SANDY-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: test_pcmpestrm:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; HASWELL-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
+; HASWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; HASWELL-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: test_pcmpestrm:
; HASWELL: # %bb.0:
; HASWELL-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -526,6 +890,16 @@ define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; HASWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: test_pcmpestrm:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
+; BROADWELL-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [24:4.00]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: test_pcmpestrm:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -536,6 +910,16 @@ define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; BROADWELL-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [24:4.00]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: test_pcmpestrm:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
+; SKYLAKE-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: test_pcmpestrm:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -546,6 +930,16 @@ define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SKYLAKE-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: test_pcmpestrm:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; SKX-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; SKX-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
+; SKX-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; SKX-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; SKX-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: test_pcmpestrm:
; SKX: # %bb.0:
; SKX-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -556,6 +950,16 @@ define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SKX-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: test_pcmpestrm:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: movl $7, %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: movl $7, %edx # sched: [1:0.50]
+; BTVER2-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [14:5.00]
+; BTVER2-SSE-NEXT: movl $7, %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: movl $7, %edx # sched: [1:0.50]
+; BTVER2-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [19:5.00]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: test_pcmpestrm:
; BTVER2: # %bb.0:
; BTVER2-NEXT: movl $7, %eax # sched: [1:0.50]
@@ -566,6 +970,16 @@ define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; BTVER2-NEXT: vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:5.00]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: test_pcmpestrm:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: pcmpestrm $7, %xmm1, %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: movl $7, %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: movl $7, %edx # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: pcmpestrm $7, (%rdi), %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: test_pcmpestrm:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: movl $7, %eax # sched: [1:0.25]
@@ -601,6 +1015,15 @@ define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SLM-NEXT: leal (%rcx,%rax), %eax # sched: [1:1.00]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: test_pcmpistri:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
+; SANDY-SSE-NEXT: movl %ecx, %eax # sched: [1:0.33]
+; SANDY-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
+; SANDY-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; SANDY-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: test_pcmpistri:
; SANDY: # %bb.0:
; SANDY-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
@@ -610,6 +1033,15 @@ define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SANDY-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: test_pcmpistri:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
+; HASWELL-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25]
+; HASWELL-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
+; HASWELL-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; HASWELL-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: test_pcmpistri:
; HASWELL: # %bb.0:
; HASWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
@@ -619,6 +1051,15 @@ define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; HASWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: test_pcmpistri:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
+; BROADWELL-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25]
+; BROADWELL-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
+; BROADWELL-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; BROADWELL-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: test_pcmpistri:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
@@ -628,6 +1069,15 @@ define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; BROADWELL-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: test_pcmpistri:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
+; SKYLAKE-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25]
+; SKYLAKE-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
+; SKYLAKE-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; SKYLAKE-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: test_pcmpistri:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
@@ -637,6 +1087,15 @@ define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SKYLAKE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: test_pcmpistri:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
+; SKX-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25]
+; SKX-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
+; SKX-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; SKX-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: test_pcmpistri:
; SKX: # %bb.0:
; SKX-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
@@ -646,6 +1105,15 @@ define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SKX-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: test_pcmpistri:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [7:2.00]
+; BTVER2-SSE-NEXT: movl %ecx, %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [12:2.00]
+; BTVER2-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; BTVER2-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: test_pcmpistri:
; BTVER2: # %bb.0:
; BTVER2-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [7:2.00]
@@ -655,6 +1123,15 @@ define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; BTVER2-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.50]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: test_pcmpistri:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: pcmpistri $7, %xmm1, %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: movl %ecx, %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: pcmpistri $7, (%rdi), %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: # kill: def $ecx killed $ecx def $rcx
+; ZNVER1-SSE-NEXT: leal (%rcx,%rax), %eax # sched: [1:0.25]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: test_pcmpistri:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: vpcmpistri $7, %xmm1, %xmm0 # sched: [100:?]
@@ -684,42 +1161,84 @@ define <16 x i8> @test_pcmpistrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
; SLM-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [13:13.00]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: test_pcmpistrm:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
+; SANDY-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: test_pcmpistrm:
; SANDY: # %bb.0:
; SANDY-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
; SANDY-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: test_pcmpistrm:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
+; HASWELL-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: test_pcmpistrm:
; HASWELL: # %bb.0:
; HASWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
; HASWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: test_pcmpistrm:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
+; BROADWELL-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: test_pcmpistrm:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
; BROADWELL-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: test_pcmpistrm:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
+; SKYLAKE-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: test_pcmpistrm:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
; SKYLAKE-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: test_pcmpistrm:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
+; SKX-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: test_pcmpistrm:
; SKX: # %bb.0:
; SKX-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
; SKX-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: test_pcmpistrm:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [8:2.00]
+; BTVER2-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [13:2.00]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: test_pcmpistrm:
; BTVER2: # %bb.0:
; BTVER2-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [8:2.00]
; BTVER2-NEXT: vpcmpistrm $7, (%rdi), %xmm0 # sched: [13:2.00]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: test_pcmpistrm:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: pcmpistrm $7, %xmm1, %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: pcmpistrm $7, (%rdi), %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: test_pcmpistrm:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: vpcmpistrm $7, %xmm1, %xmm0 # sched: [100:?]
@@ -745,42 +1264,84 @@ define <2 x i64> @test_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
; SLM-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [4:1.00]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: test_pcmpgtq:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
+; SANDY-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [11:1.00]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: test_pcmpgtq:
; SANDY: # %bb.0:
; SANDY-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
; SANDY-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: test_pcmpgtq:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
+; HASWELL-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [11:1.00]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: test_pcmpgtq:
; HASWELL: # %bb.0:
; HASWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
; HASWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: test_pcmpgtq:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
+; BROADWELL-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [10:1.00]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: test_pcmpgtq:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
; BROADWELL-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: test_pcmpgtq:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [3:1.00]
+; SKYLAKE-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [9:1.00]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: test_pcmpgtq:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
; SKYLAKE-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: test_pcmpgtq:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [3:1.00]
+; SKX-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [9:1.00]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: test_pcmpgtq:
; SKX: # %bb.0:
; SKX-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
; SKX-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: test_pcmpgtq:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
+; BTVER2-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [6:1.00]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: test_pcmpgtq:
; BTVER2: # %bb.0:
; BTVER2-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
; BTVER2-NEXT: vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: test_pcmpgtq:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
+; ZNVER1-SSE-NEXT: pcmpgtq (%rdi), %xmm0 # sched: [8:0.50]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: test_pcmpgtq:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
@@ -807,42 +1368,84 @@ define <2 x i64> @test_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
; SLM-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [10:10.00]
; SLM-NEXT: retq # sched: [4:1.00]
;
+; SANDY-SSE-LABEL: test_pclmulqdq:
+; SANDY-SSE: # %bb.0:
+; SANDY-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00]
+; SANDY-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67]
+; SANDY-SSE-NEXT: retq # sched: [1:1.00]
+;
; SANDY-LABEL: test_pclmulqdq:
; SANDY: # %bb.0:
; SANDY-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [14:6.00]
; SANDY-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [14:5.67]
; SANDY-NEXT: retq # sched: [1:1.00]
;
+; HASWELL-SSE-LABEL: test_pclmulqdq:
+; HASWELL-SSE: # %bb.0:
+; HASWELL-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [11:2.00]
+; HASWELL-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [17:2.00]
+; HASWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; HASWELL-LABEL: test_pclmulqdq:
; HASWELL: # %bb.0:
; HASWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00]
; HASWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [17:2.00]
; HASWELL-NEXT: retq # sched: [7:1.00]
;
+; BROADWELL-SSE-LABEL: test_pclmulqdq:
+; BROADWELL-SSE: # %bb.0:
+; BROADWELL-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [5:1.00]
+; BROADWELL-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [10:1.00]
+; BROADWELL-SSE-NEXT: retq # sched: [7:1.00]
+;
; BROADWELL-LABEL: test_pclmulqdq:
; BROADWELL: # %bb.0:
; BROADWELL-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
; BROADWELL-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
; BROADWELL-NEXT: retq # sched: [7:1.00]
;
+; SKYLAKE-SSE-LABEL: test_pclmulqdq:
+; SKYLAKE-SSE: # %bb.0:
+; SKYLAKE-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [6:1.00]
+; SKYLAKE-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [12:1.00]
+; SKYLAKE-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKYLAKE-LABEL: test_pclmulqdq:
; SKYLAKE: # %bb.0:
; SKYLAKE-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
; SKYLAKE-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
; SKYLAKE-NEXT: retq # sched: [7:1.00]
;
+; SKX-SSE-LABEL: test_pclmulqdq:
+; SKX-SSE: # %bb.0:
+; SKX-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [6:1.00]
+; SKX-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [12:1.00]
+; SKX-SSE-NEXT: retq # sched: [7:1.00]
+;
; SKX-LABEL: test_pclmulqdq:
; SKX: # %bb.0:
; SKX-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
; SKX-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
; SKX-NEXT: retq # sched: [7:1.00]
;
+; BTVER2-SSE-LABEL: test_pclmulqdq:
+; BTVER2-SSE: # %bb.0:
+; BTVER2-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [2:1.00]
+; BTVER2-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [7:1.00]
+; BTVER2-SSE-NEXT: retq # sched: [4:1.00]
+;
; BTVER2-LABEL: test_pclmulqdq:
; BTVER2: # %bb.0:
; BTVER2-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
; BTVER2-NEXT: vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
; BTVER2-NEXT: retq # sched: [4:1.00]
;
+; ZNVER1-SSE-LABEL: test_pclmulqdq:
+; ZNVER1-SSE: # %bb.0:
+; ZNVER1-SSE-NEXT: pclmulqdq $0, %xmm1, %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: pclmulqdq $0, (%rdi), %xmm0 # sched: [100:?]
+; ZNVER1-SSE-NEXT: retq # sched: [1:0.50]
+;
; ZNVER1-LABEL: test_pclmulqdq:
; ZNVER1: # %bb.0:
; ZNVER1-NEXT: vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [100:?]
OpenPOWER on IntegriCloud