Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=x86-64 -mattr=+sse4.2,+pclmul | FileCheck %s --check-prefixes=CHECK,GENERIC
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=slm -mattr=-avx | FileCheck %s --check-prefixes=CHECK,SLM
      4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-avx  | FileCheck %s --check-prefixes=CHECK,SANDY-SSE
      5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=sandybridge -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SANDY
      6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-avx  | FileCheck %s --check-prefixes=CHECK,SANDY-SSE
      7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=ivybridge -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SANDY
      8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-avx  | FileCheck %s --check-prefixes=CHECK,HASWELL-SSE
      9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=haswell -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,HASWELL
     10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-avx  | FileCheck %s --check-prefixes=CHECK,BROADWELL-SSE
     11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=broadwell -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,BROADWELL
     12 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-avx  | FileCheck %s --check-prefixes=CHECK,SKYLAKE-SSE
     13 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skylake -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SKYLAKE
     14 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-avx  | FileCheck %s --check-prefixes=CHECK,SKX-SSE
     15 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=skx -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,SKX
     16 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-avx  | FileCheck %s --check-prefixes=CHECK,BTVER2-SSE
     17 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=btver2 -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,BTVER2
     18 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-avx  | FileCheck %s --check-prefixes=CHECK,ZNVER1-SSE
     19 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -print-schedule -mcpu=znver1 -mattr=-avx2 | FileCheck %s --check-prefixes=CHECK,ZNVER1
     20 
     21 define i32 @crc32_32_8(i32 %a0, i8 %a1, i8 *%a2) {
     22 ; GENERIC-LABEL: crc32_32_8:
     23 ; GENERIC:       # %bb.0:
     24 ; GENERIC-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     25 ; GENERIC-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     26 ; GENERIC-NEXT:    movl %edi, %eax # sched: [1:0.33]
     27 ; GENERIC-NEXT:    retq # sched: [1:1.00]
     28 ;
     29 ; SLM-LABEL: crc32_32_8:
     30 ; SLM:       # %bb.0:
     31 ; SLM-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     32 ; SLM-NEXT:    crc32b (%rdx), %edi # sched: [6:1.00]
     33 ; SLM-NEXT:    movl %edi, %eax # sched: [1:0.50]
     34 ; SLM-NEXT:    retq # sched: [4:1.00]
     35 ;
     36 ; SANDY-SSE-LABEL: crc32_32_8:
     37 ; SANDY-SSE:       # %bb.0:
     38 ; SANDY-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     39 ; SANDY-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     40 ; SANDY-SSE-NEXT:    movl %edi, %eax # sched: [1:0.33]
     41 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
     42 ;
     43 ; SANDY-LABEL: crc32_32_8:
     44 ; SANDY:       # %bb.0:
     45 ; SANDY-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     46 ; SANDY-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     47 ; SANDY-NEXT:    movl %edi, %eax # sched: [1:0.33]
     48 ; SANDY-NEXT:    retq # sched: [1:1.00]
     49 ;
     50 ; HASWELL-SSE-LABEL: crc32_32_8:
     51 ; HASWELL-SSE:       # %bb.0:
     52 ; HASWELL-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     53 ; HASWELL-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     54 ; HASWELL-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
     55 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
     56 ;
     57 ; HASWELL-LABEL: crc32_32_8:
     58 ; HASWELL:       # %bb.0:
     59 ; HASWELL-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     60 ; HASWELL-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     61 ; HASWELL-NEXT:    movl %edi, %eax # sched: [1:0.25]
     62 ; HASWELL-NEXT:    retq # sched: [7:1.00]
     63 ;
     64 ; BROADWELL-SSE-LABEL: crc32_32_8:
     65 ; BROADWELL-SSE:       # %bb.0:
     66 ; BROADWELL-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     67 ; BROADWELL-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     68 ; BROADWELL-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
     69 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
     70 ;
     71 ; BROADWELL-LABEL: crc32_32_8:
     72 ; BROADWELL:       # %bb.0:
     73 ; BROADWELL-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     74 ; BROADWELL-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     75 ; BROADWELL-NEXT:    movl %edi, %eax # sched: [1:0.25]
     76 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
     77 ;
     78 ; SKYLAKE-SSE-LABEL: crc32_32_8:
     79 ; SKYLAKE-SSE:       # %bb.0:
     80 ; SKYLAKE-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     81 ; SKYLAKE-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     82 ; SKYLAKE-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
     83 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
     84 ;
     85 ; SKYLAKE-LABEL: crc32_32_8:
     86 ; SKYLAKE:       # %bb.0:
     87 ; SKYLAKE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     88 ; SKYLAKE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     89 ; SKYLAKE-NEXT:    movl %edi, %eax # sched: [1:0.25]
     90 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
     91 ;
     92 ; SKX-SSE-LABEL: crc32_32_8:
     93 ; SKX-SSE:       # %bb.0:
     94 ; SKX-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
     95 ; SKX-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
     96 ; SKX-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
     97 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
     98 ;
     99 ; SKX-LABEL: crc32_32_8:
    100 ; SKX:       # %bb.0:
    101 ; SKX-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    102 ; SKX-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    103 ; SKX-NEXT:    movl %edi, %eax # sched: [1:0.25]
    104 ; SKX-NEXT:    retq # sched: [7:1.00]
    105 ;
    106 ; BTVER2-SSE-LABEL: crc32_32_8:
    107 ; BTVER2-SSE:       # %bb.0:
    108 ; BTVER2-SSE-NEXT:    crc32b %sil, %edi # sched: [3:2.00]
    109 ; BTVER2-SSE-NEXT:    crc32b (%rdx), %edi # sched: [6:2.00]
    110 ; BTVER2-SSE-NEXT:    movl %edi, %eax # sched: [1:0.50]
    111 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
    112 ;
    113 ; BTVER2-LABEL: crc32_32_8:
    114 ; BTVER2:       # %bb.0:
    115 ; BTVER2-NEXT:    crc32b %sil, %edi # sched: [3:2.00]
    116 ; BTVER2-NEXT:    crc32b (%rdx), %edi # sched: [6:2.00]
    117 ; BTVER2-NEXT:    movl %edi, %eax # sched: [1:0.50]
    118 ; BTVER2-NEXT:    retq # sched: [4:1.00]
    119 ;
    120 ; ZNVER1-SSE-LABEL: crc32_32_8:
    121 ; ZNVER1-SSE:       # %bb.0:
    122 ; ZNVER1-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    123 ; ZNVER1-SSE-NEXT:    crc32b (%rdx), %edi # sched: [10:1.00]
    124 ; ZNVER1-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    125 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
    126 ;
    127 ; ZNVER1-LABEL: crc32_32_8:
    128 ; ZNVER1:       # %bb.0:
    129 ; ZNVER1-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    130 ; ZNVER1-NEXT:    crc32b (%rdx), %edi # sched: [10:1.00]
    131 ; ZNVER1-NEXT:    movl %edi, %eax # sched: [1:0.25]
    132 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
    133   %1 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %a0, i8 %a1)
    134   %2 = load i8, i8 *%a2
    135   %3 = call i32 @llvm.x86.sse42.crc32.32.8(i32 %1, i8 %2)
    136   ret i32 %3
    137 }
    138 declare i32 @llvm.x86.sse42.crc32.32.8(i32, i8) nounwind
    139 
    140 define i32 @crc32_32_16(i32 %a0, i16 %a1, i16 *%a2) {
    141 ; GENERIC-LABEL: crc32_32_16:
    142 ; GENERIC:       # %bb.0:
    143 ; GENERIC-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    144 ; GENERIC-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    145 ; GENERIC-NEXT:    movl %edi, %eax # sched: [1:0.33]
    146 ; GENERIC-NEXT:    retq # sched: [1:1.00]
    147 ;
    148 ; SLM-LABEL: crc32_32_16:
    149 ; SLM:       # %bb.0:
    150 ; SLM-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    151 ; SLM-NEXT:    crc32w (%rdx), %edi # sched: [6:1.00]
    152 ; SLM-NEXT:    movl %edi, %eax # sched: [1:0.50]
    153 ; SLM-NEXT:    retq # sched: [4:1.00]
    154 ;
    155 ; SANDY-SSE-LABEL: crc32_32_16:
    156 ; SANDY-SSE:       # %bb.0:
    157 ; SANDY-SSE-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    158 ; SANDY-SSE-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    159 ; SANDY-SSE-NEXT:    movl %edi, %eax # sched: [1:0.33]
    160 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
    161 ;
    162 ; SANDY-LABEL: crc32_32_16:
    163 ; SANDY:       # %bb.0:
    164 ; SANDY-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    165 ; SANDY-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    166 ; SANDY-NEXT:    movl %edi, %eax # sched: [1:0.33]
    167 ; SANDY-NEXT:    retq # sched: [1:1.00]
    168 ;
    169 ; HASWELL-SSE-LABEL: crc32_32_16:
    170 ; HASWELL-SSE:       # %bb.0:
    171 ; HASWELL-SSE-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    172 ; HASWELL-SSE-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    173 ; HASWELL-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    174 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
    175 ;
    176 ; HASWELL-LABEL: crc32_32_16:
    177 ; HASWELL:       # %bb.0:
    178 ; HASWELL-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    179 ; HASWELL-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    180 ; HASWELL-NEXT:    movl %edi, %eax # sched: [1:0.25]
    181 ; HASWELL-NEXT:    retq # sched: [7:1.00]
    182 ;
    183 ; BROADWELL-SSE-LABEL: crc32_32_16:
    184 ; BROADWELL-SSE:       # %bb.0:
    185 ; BROADWELL-SSE-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    186 ; BROADWELL-SSE-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    187 ; BROADWELL-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    188 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
    189 ;
    190 ; BROADWELL-LABEL: crc32_32_16:
    191 ; BROADWELL:       # %bb.0:
    192 ; BROADWELL-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    193 ; BROADWELL-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    194 ; BROADWELL-NEXT:    movl %edi, %eax # sched: [1:0.25]
    195 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
    196 ;
    197 ; SKYLAKE-SSE-LABEL: crc32_32_16:
    198 ; SKYLAKE-SSE:       # %bb.0:
    199 ; SKYLAKE-SSE-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    200 ; SKYLAKE-SSE-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    201 ; SKYLAKE-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    202 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
    203 ;
    204 ; SKYLAKE-LABEL: crc32_32_16:
    205 ; SKYLAKE:       # %bb.0:
    206 ; SKYLAKE-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    207 ; SKYLAKE-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    208 ; SKYLAKE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    209 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
    210 ;
    211 ; SKX-SSE-LABEL: crc32_32_16:
    212 ; SKX-SSE:       # %bb.0:
    213 ; SKX-SSE-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    214 ; SKX-SSE-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    215 ; SKX-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    216 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
    217 ;
    218 ; SKX-LABEL: crc32_32_16:
    219 ; SKX:       # %bb.0:
    220 ; SKX-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    221 ; SKX-NEXT:    crc32w (%rdx), %edi # sched: [8:1.00]
    222 ; SKX-NEXT:    movl %edi, %eax # sched: [1:0.25]
    223 ; SKX-NEXT:    retq # sched: [7:1.00]
    224 ;
    225 ; BTVER2-SSE-LABEL: crc32_32_16:
    226 ; BTVER2-SSE:       # %bb.0:
    227 ; BTVER2-SSE-NEXT:    crc32w %si, %edi # sched: [3:2.00]
    228 ; BTVER2-SSE-NEXT:    crc32w (%rdx), %edi # sched: [6:2.00]
    229 ; BTVER2-SSE-NEXT:    movl %edi, %eax # sched: [1:0.50]
    230 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
    231 ;
    232 ; BTVER2-LABEL: crc32_32_16:
    233 ; BTVER2:       # %bb.0:
    234 ; BTVER2-NEXT:    crc32w %si, %edi # sched: [3:2.00]
    235 ; BTVER2-NEXT:    crc32w (%rdx), %edi # sched: [6:2.00]
    236 ; BTVER2-NEXT:    movl %edi, %eax # sched: [1:0.50]
    237 ; BTVER2-NEXT:    retq # sched: [4:1.00]
    238 ;
    239 ; ZNVER1-SSE-LABEL: crc32_32_16:
    240 ; ZNVER1-SSE:       # %bb.0:
    241 ; ZNVER1-SSE-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    242 ; ZNVER1-SSE-NEXT:    crc32w (%rdx), %edi # sched: [10:1.00]
    243 ; ZNVER1-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    244 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
    245 ;
    246 ; ZNVER1-LABEL: crc32_32_16:
    247 ; ZNVER1:       # %bb.0:
    248 ; ZNVER1-NEXT:    crc32w %si, %edi # sched: [3:1.00]
    249 ; ZNVER1-NEXT:    crc32w (%rdx), %edi # sched: [10:1.00]
    250 ; ZNVER1-NEXT:    movl %edi, %eax # sched: [1:0.25]
    251 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
    252   %1 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %a0, i16 %a1)
    253   %2 = load i16, i16 *%a2
    254   %3 = call i32 @llvm.x86.sse42.crc32.32.16(i32 %1, i16 %2)
    255   ret i32 %3
    256 }
    257 declare i32 @llvm.x86.sse42.crc32.32.16(i32, i16) nounwind
    258 
    259 define i32 @crc32_32_32(i32 %a0, i32 %a1, i32 *%a2) {
    260 ; GENERIC-LABEL: crc32_32_32:
    261 ; GENERIC:       # %bb.0:
    262 ; GENERIC-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    263 ; GENERIC-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    264 ; GENERIC-NEXT:    movl %edi, %eax # sched: [1:0.33]
    265 ; GENERIC-NEXT:    retq # sched: [1:1.00]
    266 ;
    267 ; SLM-LABEL: crc32_32_32:
    268 ; SLM:       # %bb.0:
    269 ; SLM-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    270 ; SLM-NEXT:    crc32l (%rdx), %edi # sched: [6:1.00]
    271 ; SLM-NEXT:    movl %edi, %eax # sched: [1:0.50]
    272 ; SLM-NEXT:    retq # sched: [4:1.00]
    273 ;
    274 ; SANDY-SSE-LABEL: crc32_32_32:
    275 ; SANDY-SSE:       # %bb.0:
    276 ; SANDY-SSE-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    277 ; SANDY-SSE-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    278 ; SANDY-SSE-NEXT:    movl %edi, %eax # sched: [1:0.33]
    279 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
    280 ;
    281 ; SANDY-LABEL: crc32_32_32:
    282 ; SANDY:       # %bb.0:
    283 ; SANDY-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    284 ; SANDY-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    285 ; SANDY-NEXT:    movl %edi, %eax # sched: [1:0.33]
    286 ; SANDY-NEXT:    retq # sched: [1:1.00]
    287 ;
    288 ; HASWELL-SSE-LABEL: crc32_32_32:
    289 ; HASWELL-SSE:       # %bb.0:
    290 ; HASWELL-SSE-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    291 ; HASWELL-SSE-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    292 ; HASWELL-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    293 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
    294 ;
    295 ; HASWELL-LABEL: crc32_32_32:
    296 ; HASWELL:       # %bb.0:
    297 ; HASWELL-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    298 ; HASWELL-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    299 ; HASWELL-NEXT:    movl %edi, %eax # sched: [1:0.25]
    300 ; HASWELL-NEXT:    retq # sched: [7:1.00]
    301 ;
    302 ; BROADWELL-SSE-LABEL: crc32_32_32:
    303 ; BROADWELL-SSE:       # %bb.0:
    304 ; BROADWELL-SSE-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    305 ; BROADWELL-SSE-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    306 ; BROADWELL-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    307 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
    308 ;
    309 ; BROADWELL-LABEL: crc32_32_32:
    310 ; BROADWELL:       # %bb.0:
    311 ; BROADWELL-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    312 ; BROADWELL-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    313 ; BROADWELL-NEXT:    movl %edi, %eax # sched: [1:0.25]
    314 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
    315 ;
    316 ; SKYLAKE-SSE-LABEL: crc32_32_32:
    317 ; SKYLAKE-SSE:       # %bb.0:
    318 ; SKYLAKE-SSE-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    319 ; SKYLAKE-SSE-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    320 ; SKYLAKE-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    321 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
    322 ;
    323 ; SKYLAKE-LABEL: crc32_32_32:
    324 ; SKYLAKE:       # %bb.0:
    325 ; SKYLAKE-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    326 ; SKYLAKE-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    327 ; SKYLAKE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    328 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
    329 ;
    330 ; SKX-SSE-LABEL: crc32_32_32:
    331 ; SKX-SSE:       # %bb.0:
    332 ; SKX-SSE-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    333 ; SKX-SSE-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    334 ; SKX-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    335 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
    336 ;
    337 ; SKX-LABEL: crc32_32_32:
    338 ; SKX:       # %bb.0:
    339 ; SKX-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    340 ; SKX-NEXT:    crc32l (%rdx), %edi # sched: [8:1.00]
    341 ; SKX-NEXT:    movl %edi, %eax # sched: [1:0.25]
    342 ; SKX-NEXT:    retq # sched: [7:1.00]
    343 ;
    344 ; BTVER2-SSE-LABEL: crc32_32_32:
    345 ; BTVER2-SSE:       # %bb.0:
    346 ; BTVER2-SSE-NEXT:    crc32l %esi, %edi # sched: [3:2.00]
    347 ; BTVER2-SSE-NEXT:    crc32l (%rdx), %edi # sched: [6:2.00]
    348 ; BTVER2-SSE-NEXT:    movl %edi, %eax # sched: [1:0.50]
    349 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
    350 ;
    351 ; BTVER2-LABEL: crc32_32_32:
    352 ; BTVER2:       # %bb.0:
    353 ; BTVER2-NEXT:    crc32l %esi, %edi # sched: [3:2.00]
    354 ; BTVER2-NEXT:    crc32l (%rdx), %edi # sched: [6:2.00]
    355 ; BTVER2-NEXT:    movl %edi, %eax # sched: [1:0.50]
    356 ; BTVER2-NEXT:    retq # sched: [4:1.00]
    357 ;
    358 ; ZNVER1-SSE-LABEL: crc32_32_32:
    359 ; ZNVER1-SSE:       # %bb.0:
    360 ; ZNVER1-SSE-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    361 ; ZNVER1-SSE-NEXT:    crc32l (%rdx), %edi # sched: [10:1.00]
    362 ; ZNVER1-SSE-NEXT:    movl %edi, %eax # sched: [1:0.25]
    363 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
    364 ;
    365 ; ZNVER1-LABEL: crc32_32_32:
    366 ; ZNVER1:       # %bb.0:
    367 ; ZNVER1-NEXT:    crc32l %esi, %edi # sched: [3:1.00]
    368 ; ZNVER1-NEXT:    crc32l (%rdx), %edi # sched: [10:1.00]
    369 ; ZNVER1-NEXT:    movl %edi, %eax # sched: [1:0.25]
    370 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
    371   %1 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %a0, i32 %a1)
    372   %2 = load i32, i32 *%a2
    373   %3 = call i32 @llvm.x86.sse42.crc32.32.32(i32 %1, i32 %2)
    374   ret i32 %3
    375 }
    376 declare i32 @llvm.x86.sse42.crc32.32.32(i32, i32) nounwind
    377 
    378 define i64 @crc32_64_8(i64 %a0, i8 %a1, i8 *%a2) nounwind {
    379 ; GENERIC-LABEL: crc32_64_8:
    380 ; GENERIC:       # %bb.0:
    381 ; GENERIC-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    382 ; GENERIC-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    383 ; GENERIC-NEXT:    movq %rdi, %rax # sched: [1:0.33]
    384 ; GENERIC-NEXT:    retq # sched: [1:1.00]
    385 ;
    386 ; SLM-LABEL: crc32_64_8:
    387 ; SLM:       # %bb.0:
    388 ; SLM-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    389 ; SLM-NEXT:    crc32b (%rdx), %edi # sched: [6:1.00]
    390 ; SLM-NEXT:    movq %rdi, %rax # sched: [1:0.50]
    391 ; SLM-NEXT:    retq # sched: [4:1.00]
    392 ;
    393 ; SANDY-SSE-LABEL: crc32_64_8:
    394 ; SANDY-SSE:       # %bb.0:
    395 ; SANDY-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    396 ; SANDY-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    397 ; SANDY-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.33]
    398 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
    399 ;
    400 ; SANDY-LABEL: crc32_64_8:
    401 ; SANDY:       # %bb.0:
    402 ; SANDY-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    403 ; SANDY-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    404 ; SANDY-NEXT:    movq %rdi, %rax # sched: [1:0.33]
    405 ; SANDY-NEXT:    retq # sched: [1:1.00]
    406 ;
    407 ; HASWELL-SSE-LABEL: crc32_64_8:
    408 ; HASWELL-SSE:       # %bb.0:
    409 ; HASWELL-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    410 ; HASWELL-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    411 ; HASWELL-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    412 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
    413 ;
    414 ; HASWELL-LABEL: crc32_64_8:
    415 ; HASWELL:       # %bb.0:
    416 ; HASWELL-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    417 ; HASWELL-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    418 ; HASWELL-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    419 ; HASWELL-NEXT:    retq # sched: [7:1.00]
    420 ;
    421 ; BROADWELL-SSE-LABEL: crc32_64_8:
    422 ; BROADWELL-SSE:       # %bb.0:
    423 ; BROADWELL-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    424 ; BROADWELL-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    425 ; BROADWELL-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    426 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
    427 ;
    428 ; BROADWELL-LABEL: crc32_64_8:
    429 ; BROADWELL:       # %bb.0:
    430 ; BROADWELL-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    431 ; BROADWELL-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    432 ; BROADWELL-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    433 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
    434 ;
    435 ; SKYLAKE-SSE-LABEL: crc32_64_8:
    436 ; SKYLAKE-SSE:       # %bb.0:
    437 ; SKYLAKE-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    438 ; SKYLAKE-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    439 ; SKYLAKE-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    440 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
    441 ;
    442 ; SKYLAKE-LABEL: crc32_64_8:
    443 ; SKYLAKE:       # %bb.0:
    444 ; SKYLAKE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    445 ; SKYLAKE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    446 ; SKYLAKE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    447 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
    448 ;
    449 ; SKX-SSE-LABEL: crc32_64_8:
    450 ; SKX-SSE:       # %bb.0:
    451 ; SKX-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    452 ; SKX-SSE-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    453 ; SKX-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    454 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
    455 ;
    456 ; SKX-LABEL: crc32_64_8:
    457 ; SKX:       # %bb.0:
    458 ; SKX-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    459 ; SKX-NEXT:    crc32b (%rdx), %edi # sched: [8:1.00]
    460 ; SKX-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    461 ; SKX-NEXT:    retq # sched: [7:1.00]
    462 ;
    463 ; BTVER2-SSE-LABEL: crc32_64_8:
    464 ; BTVER2-SSE:       # %bb.0:
    465 ; BTVER2-SSE-NEXT:    crc32b %sil, %edi # sched: [3:2.00]
    466 ; BTVER2-SSE-NEXT:    crc32b (%rdx), %edi # sched: [6:2.00]
    467 ; BTVER2-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.50]
    468 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
    469 ;
    470 ; BTVER2-LABEL: crc32_64_8:
    471 ; BTVER2:       # %bb.0:
    472 ; BTVER2-NEXT:    crc32b %sil, %edi # sched: [3:2.00]
    473 ; BTVER2-NEXT:    crc32b (%rdx), %edi # sched: [6:2.00]
    474 ; BTVER2-NEXT:    movq %rdi, %rax # sched: [1:0.50]
    475 ; BTVER2-NEXT:    retq # sched: [4:1.00]
    476 ;
    477 ; ZNVER1-SSE-LABEL: crc32_64_8:
    478 ; ZNVER1-SSE:       # %bb.0:
    479 ; ZNVER1-SSE-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    480 ; ZNVER1-SSE-NEXT:    crc32b (%rdx), %edi # sched: [10:1.00]
    481 ; ZNVER1-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    482 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
    483 ;
    484 ; ZNVER1-LABEL: crc32_64_8:
    485 ; ZNVER1:       # %bb.0:
    486 ; ZNVER1-NEXT:    crc32b %sil, %edi # sched: [3:1.00]
    487 ; ZNVER1-NEXT:    crc32b (%rdx), %edi # sched: [10:1.00]
    488 ; ZNVER1-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    489 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
    490   %1 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %a0, i8 %a1)
    491   %2 = load i8, i8 *%a2
    492   %3 = call i64 @llvm.x86.sse42.crc32.64.8(i64 %1, i8 %2)
    493   ret i64 %3
    494 }
    495 declare i64 @llvm.x86.sse42.crc32.64.8(i64, i8) nounwind
    496 
    497 define i64 @crc32_64_64(i64 %a0, i64 %a1, i64 *%a2) {
    498 ; GENERIC-LABEL: crc32_64_64:
    499 ; GENERIC:       # %bb.0:
    500 ; GENERIC-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    501 ; GENERIC-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    502 ; GENERIC-NEXT:    movq %rdi, %rax # sched: [1:0.33]
    503 ; GENERIC-NEXT:    retq # sched: [1:1.00]
    504 ;
    505 ; SLM-LABEL: crc32_64_64:
    506 ; SLM:       # %bb.0:
    507 ; SLM-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    508 ; SLM-NEXT:    crc32q (%rdx), %rdi # sched: [6:1.00]
    509 ; SLM-NEXT:    movq %rdi, %rax # sched: [1:0.50]
    510 ; SLM-NEXT:    retq # sched: [4:1.00]
    511 ;
    512 ; SANDY-SSE-LABEL: crc32_64_64:
    513 ; SANDY-SSE:       # %bb.0:
    514 ; SANDY-SSE-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    515 ; SANDY-SSE-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    516 ; SANDY-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.33]
    517 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
    518 ;
    519 ; SANDY-LABEL: crc32_64_64:
    520 ; SANDY:       # %bb.0:
    521 ; SANDY-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    522 ; SANDY-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    523 ; SANDY-NEXT:    movq %rdi, %rax # sched: [1:0.33]
    524 ; SANDY-NEXT:    retq # sched: [1:1.00]
    525 ;
    526 ; HASWELL-SSE-LABEL: crc32_64_64:
    527 ; HASWELL-SSE:       # %bb.0:
    528 ; HASWELL-SSE-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    529 ; HASWELL-SSE-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    530 ; HASWELL-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    531 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
    532 ;
    533 ; HASWELL-LABEL: crc32_64_64:
    534 ; HASWELL:       # %bb.0:
    535 ; HASWELL-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    536 ; HASWELL-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    537 ; HASWELL-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    538 ; HASWELL-NEXT:    retq # sched: [7:1.00]
    539 ;
    540 ; BROADWELL-SSE-LABEL: crc32_64_64:
    541 ; BROADWELL-SSE:       # %bb.0:
    542 ; BROADWELL-SSE-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    543 ; BROADWELL-SSE-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    544 ; BROADWELL-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    545 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
    546 ;
    547 ; BROADWELL-LABEL: crc32_64_64:
    548 ; BROADWELL:       # %bb.0:
    549 ; BROADWELL-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    550 ; BROADWELL-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    551 ; BROADWELL-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    552 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
    553 ;
    554 ; SKYLAKE-SSE-LABEL: crc32_64_64:
    555 ; SKYLAKE-SSE:       # %bb.0:
    556 ; SKYLAKE-SSE-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    557 ; SKYLAKE-SSE-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    558 ; SKYLAKE-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    559 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
    560 ;
    561 ; SKYLAKE-LABEL: crc32_64_64:
    562 ; SKYLAKE:       # %bb.0:
    563 ; SKYLAKE-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    564 ; SKYLAKE-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    565 ; SKYLAKE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    566 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
    567 ;
    568 ; SKX-SSE-LABEL: crc32_64_64:
    569 ; SKX-SSE:       # %bb.0:
    570 ; SKX-SSE-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    571 ; SKX-SSE-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    572 ; SKX-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    573 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
    574 ;
    575 ; SKX-LABEL: crc32_64_64:
    576 ; SKX:       # %bb.0:
    577 ; SKX-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    578 ; SKX-NEXT:    crc32q (%rdx), %rdi # sched: [8:1.00]
    579 ; SKX-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    580 ; SKX-NEXT:    retq # sched: [7:1.00]
    581 ;
    582 ; BTVER2-SSE-LABEL: crc32_64_64:
    583 ; BTVER2-SSE:       # %bb.0:
    584 ; BTVER2-SSE-NEXT:    crc32q %rsi, %rdi # sched: [3:2.00]
    585 ; BTVER2-SSE-NEXT:    crc32q (%rdx), %rdi # sched: [6:2.00]
    586 ; BTVER2-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.50]
    587 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
    588 ;
    589 ; BTVER2-LABEL: crc32_64_64:
    590 ; BTVER2:       # %bb.0:
    591 ; BTVER2-NEXT:    crc32q %rsi, %rdi # sched: [3:2.00]
    592 ; BTVER2-NEXT:    crc32q (%rdx), %rdi # sched: [6:2.00]
    593 ; BTVER2-NEXT:    movq %rdi, %rax # sched: [1:0.50]
    594 ; BTVER2-NEXT:    retq # sched: [4:1.00]
    595 ;
    596 ; ZNVER1-SSE-LABEL: crc32_64_64:
    597 ; ZNVER1-SSE:       # %bb.0:
    598 ; ZNVER1-SSE-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    599 ; ZNVER1-SSE-NEXT:    crc32q (%rdx), %rdi # sched: [10:1.00]
    600 ; ZNVER1-SSE-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    601 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
    602 ;
    603 ; ZNVER1-LABEL: crc32_64_64:
    604 ; ZNVER1:       # %bb.0:
    605 ; ZNVER1-NEXT:    crc32q %rsi, %rdi # sched: [3:1.00]
    606 ; ZNVER1-NEXT:    crc32q (%rdx), %rdi # sched: [10:1.00]
    607 ; ZNVER1-NEXT:    movq %rdi, %rax # sched: [1:0.25]
    608 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
    609   %1 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %a0, i64 %a1)
    610   %2 = load i64, i64 *%a2
    611   %3 = call i64 @llvm.x86.sse42.crc32.64.64(i64 %1, i64 %2)
    612   ret i64 %3
    613 }
    614 declare i64 @llvm.x86.sse42.crc32.64.64(i64, i64) nounwind
    615 
    616 define i32 @test_pcmpestri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
    617 ; GENERIC-LABEL: test_pcmpestri:
    618 ; GENERIC:       # %bb.0:
    619 ; GENERIC-NEXT:    movl $7, %eax # sched: [1:0.33]
    620 ; GENERIC-NEXT:    movl $7, %edx # sched: [1:0.33]
    621 ; GENERIC-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
    622 ; GENERIC-NEXT:    movl %ecx, %esi # sched: [1:0.33]
    623 ; GENERIC-NEXT:    movl $7, %eax # sched: [1:0.33]
    624 ; GENERIC-NEXT:    movl $7, %edx # sched: [1:0.33]
    625 ; GENERIC-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
    626 ; GENERIC-NEXT:    # kill: def $ecx killed $ecx def $rcx
    627 ; GENERIC-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    628 ; GENERIC-NEXT:    retq # sched: [1:1.00]
    629 ;
    630 ; SLM-LABEL: test_pcmpestri:
    631 ; SLM:       # %bb.0:
    632 ; SLM-NEXT:    movl $7, %eax # sched: [1:0.50]
    633 ; SLM-NEXT:    movl $7, %edx # sched: [1:0.50]
    634 ; SLM-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [21:21.00]
    635 ; SLM-NEXT:    movl $7, %eax # sched: [1:0.50]
    636 ; SLM-NEXT:    movl $7, %edx # sched: [1:0.50]
    637 ; SLM-NEXT:    movl %ecx, %esi # sched: [1:0.50]
    638 ; SLM-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [21:21.00]
    639 ; SLM-NEXT:    # kill: def $ecx killed $ecx def $rcx
    640 ; SLM-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:1.00]
    641 ; SLM-NEXT:    retq # sched: [4:1.00]
    642 ;
    643 ; SANDY-SSE-LABEL: test_pcmpestri:
    644 ; SANDY-SSE:       # %bb.0:
    645 ; SANDY-SSE-NEXT:    movl $7, %eax # sched: [1:0.33]
    646 ; SANDY-SSE-NEXT:    movl $7, %edx # sched: [1:0.33]
    647 ; SANDY-SSE-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
    648 ; SANDY-SSE-NEXT:    movl %ecx, %esi # sched: [1:0.33]
    649 ; SANDY-SSE-NEXT:    movl $7, %eax # sched: [1:0.33]
    650 ; SANDY-SSE-NEXT:    movl $7, %edx # sched: [1:0.33]
    651 ; SANDY-SSE-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
    652 ; SANDY-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
    653 ; SANDY-SSE-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    654 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
    655 ;
    656 ; SANDY-LABEL: test_pcmpestri:
    657 ; SANDY:       # %bb.0:
    658 ; SANDY-NEXT:    movl $7, %eax # sched: [1:0.33]
    659 ; SANDY-NEXT:    movl $7, %edx # sched: [1:0.33]
    660 ; SANDY-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [4:2.67]
    661 ; SANDY-NEXT:    movl %ecx, %esi # sched: [1:0.33]
    662 ; SANDY-NEXT:    movl $7, %eax # sched: [1:0.33]
    663 ; SANDY-NEXT:    movl $7, %edx # sched: [1:0.33]
    664 ; SANDY-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [4:2.33]
    665 ; SANDY-NEXT:    # kill: def $ecx killed $ecx def $rcx
    666 ; SANDY-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    667 ; SANDY-NEXT:    retq # sched: [1:1.00]
    668 ;
    669 ; HASWELL-SSE-LABEL: test_pcmpestri:
    670 ; HASWELL-SSE:       # %bb.0:
    671 ; HASWELL-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    672 ; HASWELL-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    673 ; HASWELL-SSE-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
    674 ; HASWELL-SSE-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    675 ; HASWELL-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    676 ; HASWELL-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    677 ; HASWELL-SSE-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
    678 ; HASWELL-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
    679 ; HASWELL-SSE-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    680 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
    681 ;
    682 ; HASWELL-LABEL: test_pcmpestri:
    683 ; HASWELL:       # %bb.0:
    684 ; HASWELL-NEXT:    movl $7, %eax # sched: [1:0.25]
    685 ; HASWELL-NEXT:    movl $7, %edx # sched: [1:0.25]
    686 ; HASWELL-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
    687 ; HASWELL-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    688 ; HASWELL-NEXT:    movl $7, %eax # sched: [1:0.25]
    689 ; HASWELL-NEXT:    movl $7, %edx # sched: [1:0.25]
    690 ; HASWELL-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
    691 ; HASWELL-NEXT:    # kill: def $ecx killed $ecx def $rcx
    692 ; HASWELL-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    693 ; HASWELL-NEXT:    retq # sched: [7:1.00]
    694 ;
    695 ; BROADWELL-SSE-LABEL: test_pcmpestri:
    696 ; BROADWELL-SSE:       # %bb.0:
    697 ; BROADWELL-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    698 ; BROADWELL-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    699 ; BROADWELL-SSE-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
    700 ; BROADWELL-SSE-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    701 ; BROADWELL-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    702 ; BROADWELL-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    703 ; BROADWELL-SSE-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [23:4.00]
    704 ; BROADWELL-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
    705 ; BROADWELL-SSE-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    706 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
    707 ;
    708 ; BROADWELL-LABEL: test_pcmpestri:
    709 ; BROADWELL:       # %bb.0:
    710 ; BROADWELL-NEXT:    movl $7, %eax # sched: [1:0.25]
    711 ; BROADWELL-NEXT:    movl $7, %edx # sched: [1:0.25]
    712 ; BROADWELL-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
    713 ; BROADWELL-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    714 ; BROADWELL-NEXT:    movl $7, %eax # sched: [1:0.25]
    715 ; BROADWELL-NEXT:    movl $7, %edx # sched: [1:0.25]
    716 ; BROADWELL-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [23:4.00]
    717 ; BROADWELL-NEXT:    # kill: def $ecx killed $ecx def $rcx
    718 ; BROADWELL-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    719 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
    720 ;
    721 ; SKYLAKE-SSE-LABEL: test_pcmpestri:
    722 ; SKYLAKE-SSE:       # %bb.0:
    723 ; SKYLAKE-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    724 ; SKYLAKE-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    725 ; SKYLAKE-SSE-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
    726 ; SKYLAKE-SSE-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    727 ; SKYLAKE-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    728 ; SKYLAKE-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    729 ; SKYLAKE-SSE-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
    730 ; SKYLAKE-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
    731 ; SKYLAKE-SSE-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    732 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
    733 ;
    734 ; SKYLAKE-LABEL: test_pcmpestri:
    735 ; SKYLAKE:       # %bb.0:
    736 ; SKYLAKE-NEXT:    movl $7, %eax # sched: [1:0.25]
    737 ; SKYLAKE-NEXT:    movl $7, %edx # sched: [1:0.25]
    738 ; SKYLAKE-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
    739 ; SKYLAKE-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    740 ; SKYLAKE-NEXT:    movl $7, %eax # sched: [1:0.25]
    741 ; SKYLAKE-NEXT:    movl $7, %edx # sched: [1:0.25]
    742 ; SKYLAKE-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
    743 ; SKYLAKE-NEXT:    # kill: def $ecx killed $ecx def $rcx
    744 ; SKYLAKE-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    745 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
    746 ;
    747 ; SKX-SSE-LABEL: test_pcmpestri:
    748 ; SKX-SSE:       # %bb.0:
    749 ; SKX-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    750 ; SKX-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    751 ; SKX-SSE-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
    752 ; SKX-SSE-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    753 ; SKX-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    754 ; SKX-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    755 ; SKX-SSE-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
    756 ; SKX-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
    757 ; SKX-SSE-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    758 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
    759 ;
    760 ; SKX-LABEL: test_pcmpestri:
    761 ; SKX:       # %bb.0:
    762 ; SKX-NEXT:    movl $7, %eax # sched: [1:0.25]
    763 ; SKX-NEXT:    movl $7, %edx # sched: [1:0.25]
    764 ; SKX-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [18:4.00]
    765 ; SKX-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    766 ; SKX-NEXT:    movl $7, %eax # sched: [1:0.25]
    767 ; SKX-NEXT:    movl $7, %edx # sched: [1:0.25]
    768 ; SKX-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [24:4.00]
    769 ; SKX-NEXT:    # kill: def $ecx killed $ecx def $rcx
    770 ; SKX-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    771 ; SKX-NEXT:    retq # sched: [7:1.00]
    772 ;
    773 ; BTVER2-SSE-LABEL: test_pcmpestri:
    774 ; BTVER2-SSE:       # %bb.0:
    775 ; BTVER2-SSE-NEXT:    movl $7, %eax # sched: [1:0.50]
    776 ; BTVER2-SSE-NEXT:    movl $7, %edx # sched: [1:0.50]
    777 ; BTVER2-SSE-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [14:5.00]
    778 ; BTVER2-SSE-NEXT:    movl $7, %eax # sched: [1:0.50]
    779 ; BTVER2-SSE-NEXT:    movl $7, %edx # sched: [1:0.50]
    780 ; BTVER2-SSE-NEXT:    movl %ecx, %esi # sched: [1:0.50]
    781 ; BTVER2-SSE-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [19:5.00]
    782 ; BTVER2-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
    783 ; BTVER2-SSE-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    784 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
    785 ;
    786 ; BTVER2-LABEL: test_pcmpestri:
    787 ; BTVER2:       # %bb.0:
    788 ; BTVER2-NEXT:    movl $7, %eax # sched: [1:0.50]
    789 ; BTVER2-NEXT:    movl $7, %edx # sched: [1:0.50]
    790 ; BTVER2-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [14:5.00]
    791 ; BTVER2-NEXT:    movl $7, %eax # sched: [1:0.50]
    792 ; BTVER2-NEXT:    movl $7, %edx # sched: [1:0.50]
    793 ; BTVER2-NEXT:    movl %ecx, %esi # sched: [1:0.50]
    794 ; BTVER2-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [19:5.00]
    795 ; BTVER2-NEXT:    # kill: def $ecx killed $ecx def $rcx
    796 ; BTVER2-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.50]
    797 ; BTVER2-NEXT:    retq # sched: [4:1.00]
    798 ;
    799 ; ZNVER1-SSE-LABEL: test_pcmpestri:
    800 ; ZNVER1-SSE:       # %bb.0:
    801 ; ZNVER1-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    802 ; ZNVER1-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    803 ; ZNVER1-SSE-NEXT:    pcmpestri $7, %xmm1, %xmm0 # sched: [100:0.25]
    804 ; ZNVER1-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    805 ; ZNVER1-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    806 ; ZNVER1-SSE-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    807 ; ZNVER1-SSE-NEXT:    pcmpestri $7, (%rdi), %xmm0 # sched: [100:0.25]
    808 ; ZNVER1-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
    809 ; ZNVER1-SSE-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.25]
    810 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
    811 ;
    812 ; ZNVER1-LABEL: test_pcmpestri:
    813 ; ZNVER1:       # %bb.0:
    814 ; ZNVER1-NEXT:    movl $7, %eax # sched: [1:0.25]
    815 ; ZNVER1-NEXT:    movl $7, %edx # sched: [1:0.25]
    816 ; ZNVER1-NEXT:    vpcmpestri $7, %xmm1, %xmm0 # sched: [100:0.25]
    817 ; ZNVER1-NEXT:    movl $7, %eax # sched: [1:0.25]
    818 ; ZNVER1-NEXT:    movl $7, %edx # sched: [1:0.25]
    819 ; ZNVER1-NEXT:    movl %ecx, %esi # sched: [1:0.25]
    820 ; ZNVER1-NEXT:    vpcmpestri $7, (%rdi), %xmm0 # sched: [100:0.25]
    821 ; ZNVER1-NEXT:    # kill: def $ecx killed $ecx def $rcx
    822 ; ZNVER1-NEXT:    leal (%rcx,%rsi), %eax # sched: [1:0.25]
    823 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
    824   %1 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)
    825   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
    826   %3 = call i32 @llvm.x86.sse42.pcmpestri128(<16 x i8> %a0, i32 7, <16 x i8> %2, i32 7, i8 7)
    827   %4 = add i32 %1, %3
    828   ret i32 %4
    829 }
    830 declare i32 @llvm.x86.sse42.pcmpestri128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
    831 
    832 define <16 x i8> @test_pcmpestrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
    833 ; GENERIC-LABEL: test_pcmpestrm:
    834 ; GENERIC:       # %bb.0:
    835 ; GENERIC-NEXT:    movl $7, %eax # sched: [1:0.33]
    836 ; GENERIC-NEXT:    movl $7, %edx # sched: [1:0.33]
    837 ; GENERIC-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
    838 ; GENERIC-NEXT:    movl $7, %eax # sched: [1:0.33]
    839 ; GENERIC-NEXT:    movl $7, %edx # sched: [1:0.33]
    840 ; GENERIC-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
    841 ; GENERIC-NEXT:    retq # sched: [1:1.00]
    842 ;
    843 ; SLM-LABEL: test_pcmpestrm:
    844 ; SLM:       # %bb.0:
    845 ; SLM-NEXT:    movl $7, %eax # sched: [1:0.50]
    846 ; SLM-NEXT:    movl $7, %edx # sched: [1:0.50]
    847 ; SLM-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [17:17.00]
    848 ; SLM-NEXT:    movl $7, %eax # sched: [1:0.50]
    849 ; SLM-NEXT:    movl $7, %edx # sched: [1:0.50]
    850 ; SLM-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [17:17.00]
    851 ; SLM-NEXT:    retq # sched: [4:1.00]
    852 ;
    853 ; SANDY-SSE-LABEL: test_pcmpestrm:
    854 ; SANDY-SSE:       # %bb.0:
    855 ; SANDY-SSE-NEXT:    movl $7, %eax # sched: [1:0.33]
    856 ; SANDY-SSE-NEXT:    movl $7, %edx # sched: [1:0.33]
    857 ; SANDY-SSE-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
    858 ; SANDY-SSE-NEXT:    movl $7, %eax # sched: [1:0.33]
    859 ; SANDY-SSE-NEXT:    movl $7, %edx # sched: [1:0.33]
    860 ; SANDY-SSE-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
    861 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
    862 ;
    863 ; SANDY-LABEL: test_pcmpestrm:
    864 ; SANDY:       # %bb.0:
    865 ; SANDY-NEXT:    movl $7, %eax # sched: [1:0.33]
    866 ; SANDY-NEXT:    movl $7, %edx # sched: [1:0.33]
    867 ; SANDY-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [11:2.67]
    868 ; SANDY-NEXT:    movl $7, %eax # sched: [1:0.33]
    869 ; SANDY-NEXT:    movl $7, %edx # sched: [1:0.33]
    870 ; SANDY-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [11:2.33]
    871 ; SANDY-NEXT:    retq # sched: [1:1.00]
    872 ;
    873 ; HASWELL-SSE-LABEL: test_pcmpestrm:
    874 ; HASWELL-SSE:       # %bb.0:
    875 ; HASWELL-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    876 ; HASWELL-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    877 ; HASWELL-SSE-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
    878 ; HASWELL-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    879 ; HASWELL-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    880 ; HASWELL-SSE-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
    881 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
    882 ;
    883 ; HASWELL-LABEL: test_pcmpestrm:
    884 ; HASWELL:       # %bb.0:
    885 ; HASWELL-NEXT:    movl $7, %eax # sched: [1:0.25]
    886 ; HASWELL-NEXT:    movl $7, %edx # sched: [1:0.25]
    887 ; HASWELL-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
    888 ; HASWELL-NEXT:    movl $7, %eax # sched: [1:0.25]
    889 ; HASWELL-NEXT:    movl $7, %edx # sched: [1:0.25]
    890 ; HASWELL-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
    891 ; HASWELL-NEXT:    retq # sched: [7:1.00]
    892 ;
    893 ; BROADWELL-SSE-LABEL: test_pcmpestrm:
    894 ; BROADWELL-SSE:       # %bb.0:
    895 ; BROADWELL-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    896 ; BROADWELL-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    897 ; BROADWELL-SSE-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
    898 ; BROADWELL-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    899 ; BROADWELL-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    900 ; BROADWELL-SSE-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [24:4.00]
    901 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
    902 ;
    903 ; BROADWELL-LABEL: test_pcmpestrm:
    904 ; BROADWELL:       # %bb.0:
    905 ; BROADWELL-NEXT:    movl $7, %eax # sched: [1:0.25]
    906 ; BROADWELL-NEXT:    movl $7, %edx # sched: [1:0.25]
    907 ; BROADWELL-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
    908 ; BROADWELL-NEXT:    movl $7, %eax # sched: [1:0.25]
    909 ; BROADWELL-NEXT:    movl $7, %edx # sched: [1:0.25]
    910 ; BROADWELL-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [24:4.00]
    911 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
    912 ;
    913 ; SKYLAKE-SSE-LABEL: test_pcmpestrm:
    914 ; SKYLAKE-SSE:       # %bb.0:
    915 ; SKYLAKE-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    916 ; SKYLAKE-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    917 ; SKYLAKE-SSE-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
    918 ; SKYLAKE-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    919 ; SKYLAKE-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    920 ; SKYLAKE-SSE-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
    921 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
    922 ;
    923 ; SKYLAKE-LABEL: test_pcmpestrm:
    924 ; SKYLAKE:       # %bb.0:
    925 ; SKYLAKE-NEXT:    movl $7, %eax # sched: [1:0.25]
    926 ; SKYLAKE-NEXT:    movl $7, %edx # sched: [1:0.25]
    927 ; SKYLAKE-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
    928 ; SKYLAKE-NEXT:    movl $7, %eax # sched: [1:0.25]
    929 ; SKYLAKE-NEXT:    movl $7, %edx # sched: [1:0.25]
    930 ; SKYLAKE-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
    931 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
    932 ;
    933 ; SKX-SSE-LABEL: test_pcmpestrm:
    934 ; SKX-SSE:       # %bb.0:
    935 ; SKX-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    936 ; SKX-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    937 ; SKX-SSE-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
    938 ; SKX-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    939 ; SKX-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    940 ; SKX-SSE-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
    941 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
    942 ;
    943 ; SKX-LABEL: test_pcmpestrm:
    944 ; SKX:       # %bb.0:
    945 ; SKX-NEXT:    movl $7, %eax # sched: [1:0.25]
    946 ; SKX-NEXT:    movl $7, %edx # sched: [1:0.25]
    947 ; SKX-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [19:4.00]
    948 ; SKX-NEXT:    movl $7, %eax # sched: [1:0.25]
    949 ; SKX-NEXT:    movl $7, %edx # sched: [1:0.25]
    950 ; SKX-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [25:4.00]
    951 ; SKX-NEXT:    retq # sched: [7:1.00]
    952 ;
    953 ; BTVER2-SSE-LABEL: test_pcmpestrm:
    954 ; BTVER2-SSE:       # %bb.0:
    955 ; BTVER2-SSE-NEXT:    movl $7, %eax # sched: [1:0.50]
    956 ; BTVER2-SSE-NEXT:    movl $7, %edx # sched: [1:0.50]
    957 ; BTVER2-SSE-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [14:5.00]
    958 ; BTVER2-SSE-NEXT:    movl $7, %eax # sched: [1:0.50]
    959 ; BTVER2-SSE-NEXT:    movl $7, %edx # sched: [1:0.50]
    960 ; BTVER2-SSE-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [19:5.00]
    961 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
    962 ;
    963 ; BTVER2-LABEL: test_pcmpestrm:
    964 ; BTVER2:       # %bb.0:
    965 ; BTVER2-NEXT:    movl $7, %eax # sched: [1:0.50]
    966 ; BTVER2-NEXT:    movl $7, %edx # sched: [1:0.50]
    967 ; BTVER2-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [14:5.00]
    968 ; BTVER2-NEXT:    movl $7, %eax # sched: [1:0.50]
    969 ; BTVER2-NEXT:    movl $7, %edx # sched: [1:0.50]
    970 ; BTVER2-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [19:5.00]
    971 ; BTVER2-NEXT:    retq # sched: [4:1.00]
    972 ;
    973 ; ZNVER1-SSE-LABEL: test_pcmpestrm:
    974 ; ZNVER1-SSE:       # %bb.0:
    975 ; ZNVER1-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    976 ; ZNVER1-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    977 ; ZNVER1-SSE-NEXT:    pcmpestrm $7, %xmm1, %xmm0 # sched: [100:0.25]
    978 ; ZNVER1-SSE-NEXT:    movl $7, %eax # sched: [1:0.25]
    979 ; ZNVER1-SSE-NEXT:    movl $7, %edx # sched: [1:0.25]
    980 ; ZNVER1-SSE-NEXT:    pcmpestrm $7, (%rdi), %xmm0 # sched: [100:0.25]
    981 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
    982 ;
    983 ; ZNVER1-LABEL: test_pcmpestrm:
    984 ; ZNVER1:       # %bb.0:
    985 ; ZNVER1-NEXT:    movl $7, %eax # sched: [1:0.25]
    986 ; ZNVER1-NEXT:    movl $7, %edx # sched: [1:0.25]
    987 ; ZNVER1-NEXT:    vpcmpestrm $7, %xmm1, %xmm0 # sched: [100:0.25]
    988 ; ZNVER1-NEXT:    movl $7, %eax # sched: [1:0.25]
    989 ; ZNVER1-NEXT:    movl $7, %edx # sched: [1:0.25]
    990 ; ZNVER1-NEXT:    vpcmpestrm $7, (%rdi), %xmm0 # sched: [100:0.25]
    991 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
    992   %1 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %a0, i32 7, <16 x i8> %a1, i32 7, i8 7)
    993   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
    994   %3 = call <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8> %1, i32 7, <16 x i8> %2, i32 7, i8 7)
    995   ret <16 x i8> %3
    996 }
    997 declare <16 x i8> @llvm.x86.sse42.pcmpestrm128(<16 x i8>, i32, <16 x i8>, i32, i8) nounwind readnone
    998 
    999 define i32 @test_pcmpistri(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
   1000 ; GENERIC-LABEL: test_pcmpistri:
   1001 ; GENERIC:       # %bb.0:
   1002 ; GENERIC-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
   1003 ; GENERIC-NEXT:    movl %ecx, %eax # sched: [1:0.33]
   1004 ; GENERIC-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
   1005 ; GENERIC-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1006 ; GENERIC-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1007 ; GENERIC-NEXT:    retq # sched: [1:1.00]
   1008 ;
   1009 ; SLM-LABEL: test_pcmpistri:
   1010 ; SLM:       # %bb.0:
   1011 ; SLM-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [17:17.00]
   1012 ; SLM-NEXT:    movl %ecx, %eax # sched: [1:0.50]
   1013 ; SLM-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [17:17.00]
   1014 ; SLM-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1015 ; SLM-NEXT:    leal (%rcx,%rax), %eax # sched: [1:1.00]
   1016 ; SLM-NEXT:    retq # sched: [4:1.00]
   1017 ;
   1018 ; SANDY-SSE-LABEL: test_pcmpistri:
   1019 ; SANDY-SSE:       # %bb.0:
   1020 ; SANDY-SSE-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
   1021 ; SANDY-SSE-NEXT:    movl %ecx, %eax # sched: [1:0.33]
   1022 ; SANDY-SSE-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
   1023 ; SANDY-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1024 ; SANDY-SSE-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1025 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
   1026 ;
   1027 ; SANDY-LABEL: test_pcmpistri:
   1028 ; SANDY:       # %bb.0:
   1029 ; SANDY-NEXT:    vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
   1030 ; SANDY-NEXT:    movl %ecx, %eax # sched: [1:0.33]
   1031 ; SANDY-NEXT:    vpcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
   1032 ; SANDY-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1033 ; SANDY-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1034 ; SANDY-NEXT:    retq # sched: [1:1.00]
   1035 ;
   1036 ; HASWELL-SSE-LABEL: test_pcmpistri:
   1037 ; HASWELL-SSE:       # %bb.0:
   1038 ; HASWELL-SSE-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
   1039 ; HASWELL-SSE-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1040 ; HASWELL-SSE-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
   1041 ; HASWELL-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1042 ; HASWELL-SSE-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1043 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
   1044 ;
   1045 ; HASWELL-LABEL: test_pcmpistri:
   1046 ; HASWELL:       # %bb.0:
   1047 ; HASWELL-NEXT:    vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
   1048 ; HASWELL-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1049 ; HASWELL-NEXT:    vpcmpistri $7, (%rdi), %xmm0 # sched: [17:3.00]
   1050 ; HASWELL-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1051 ; HASWELL-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1052 ; HASWELL-NEXT:    retq # sched: [7:1.00]
   1053 ;
   1054 ; BROADWELL-SSE-LABEL: test_pcmpistri:
   1055 ; BROADWELL-SSE:       # %bb.0:
   1056 ; BROADWELL-SSE-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
   1057 ; BROADWELL-SSE-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1058 ; BROADWELL-SSE-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
   1059 ; BROADWELL-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1060 ; BROADWELL-SSE-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1061 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
   1062 ;
   1063 ; BROADWELL-LABEL: test_pcmpistri:
   1064 ; BROADWELL:       # %bb.0:
   1065 ; BROADWELL-NEXT:    vpcmpistri $7, %xmm1, %xmm0 # sched: [11:3.00]
   1066 ; BROADWELL-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1067 ; BROADWELL-NEXT:    vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
   1068 ; BROADWELL-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1069 ; BROADWELL-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1070 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
   1071 ;
   1072 ; SKYLAKE-SSE-LABEL: test_pcmpistri:
   1073 ; SKYLAKE-SSE:       # %bb.0:
   1074 ; SKYLAKE-SSE-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
   1075 ; SKYLAKE-SSE-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1076 ; SKYLAKE-SSE-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
   1077 ; SKYLAKE-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1078 ; SKYLAKE-SSE-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1079 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
   1080 ;
   1081 ; SKYLAKE-LABEL: test_pcmpistri:
   1082 ; SKYLAKE:       # %bb.0:
   1083 ; SKYLAKE-NEXT:    vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
   1084 ; SKYLAKE-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1085 ; SKYLAKE-NEXT:    vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
   1086 ; SKYLAKE-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1087 ; SKYLAKE-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1088 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
   1089 ;
   1090 ; SKX-SSE-LABEL: test_pcmpistri:
   1091 ; SKX-SSE:       # %bb.0:
   1092 ; SKX-SSE-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
   1093 ; SKX-SSE-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1094 ; SKX-SSE-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
   1095 ; SKX-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1096 ; SKX-SSE-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1097 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
   1098 ;
   1099 ; SKX-LABEL: test_pcmpistri:
   1100 ; SKX:       # %bb.0:
   1101 ; SKX-NEXT:    vpcmpistri $7, %xmm1, %xmm0 # sched: [10:3.00]
   1102 ; SKX-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1103 ; SKX-NEXT:    vpcmpistri $7, (%rdi), %xmm0 # sched: [16:3.00]
   1104 ; SKX-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1105 ; SKX-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1106 ; SKX-NEXT:    retq # sched: [7:1.00]
   1107 ;
   1108 ; BTVER2-SSE-LABEL: test_pcmpistri:
   1109 ; BTVER2-SSE:       # %bb.0:
   1110 ; BTVER2-SSE-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [7:2.00]
   1111 ; BTVER2-SSE-NEXT:    movl %ecx, %eax # sched: [1:0.50]
   1112 ; BTVER2-SSE-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [12:2.00]
   1113 ; BTVER2-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1114 ; BTVER2-SSE-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1115 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
   1116 ;
   1117 ; BTVER2-LABEL: test_pcmpistri:
   1118 ; BTVER2:       # %bb.0:
   1119 ; BTVER2-NEXT:    vpcmpistri $7, %xmm1, %xmm0 # sched: [7:2.00]
   1120 ; BTVER2-NEXT:    movl %ecx, %eax # sched: [1:0.50]
   1121 ; BTVER2-NEXT:    vpcmpistri $7, (%rdi), %xmm0 # sched: [12:2.00]
   1122 ; BTVER2-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1123 ; BTVER2-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.50]
   1124 ; BTVER2-NEXT:    retq # sched: [4:1.00]
   1125 ;
   1126 ; ZNVER1-SSE-LABEL: test_pcmpistri:
   1127 ; ZNVER1-SSE:       # %bb.0:
   1128 ; ZNVER1-SSE-NEXT:    pcmpistri $7, %xmm1, %xmm0 # sched: [100:0.25]
   1129 ; ZNVER1-SSE-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1130 ; ZNVER1-SSE-NEXT:    pcmpistri $7, (%rdi), %xmm0 # sched: [100:0.25]
   1131 ; ZNVER1-SSE-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1132 ; ZNVER1-SSE-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.25]
   1133 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
   1134 ;
   1135 ; ZNVER1-LABEL: test_pcmpistri:
   1136 ; ZNVER1:       # %bb.0:
   1137 ; ZNVER1-NEXT:    vpcmpistri $7, %xmm1, %xmm0 # sched: [100:0.25]
   1138 ; ZNVER1-NEXT:    movl %ecx, %eax # sched: [1:0.25]
   1139 ; ZNVER1-NEXT:    vpcmpistri $7, (%rdi), %xmm0 # sched: [100:0.25]
   1140 ; ZNVER1-NEXT:    # kill: def $ecx killed $ecx def $rcx
   1141 ; ZNVER1-NEXT:    leal (%rcx,%rax), %eax # sched: [1:0.25]
   1142 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   1143   %1 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %a1, i8 7)
   1144   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
   1145   %3 = call i32 @llvm.x86.sse42.pcmpistri128(<16 x i8> %a0, <16 x i8> %2, i8 7)
   1146   %4 = add i32 %1, %3
   1147   ret i32 %4
   1148 }
   1149 declare i32 @llvm.x86.sse42.pcmpistri128(<16 x i8>, <16 x i8>, i8) nounwind readnone
   1150 
   1151 define <16 x i8> @test_pcmpistrm(<16 x i8> %a0, <16 x i8> %a1, <16 x i8> *%a2) {
   1152 ; GENERIC-LABEL: test_pcmpistrm:
   1153 ; GENERIC:       # %bb.0:
   1154 ; GENERIC-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
   1155 ; GENERIC-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
   1156 ; GENERIC-NEXT:    retq # sched: [1:1.00]
   1157 ;
   1158 ; SLM-LABEL: test_pcmpistrm:
   1159 ; SLM:       # %bb.0:
   1160 ; SLM-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [13:13.00]
   1161 ; SLM-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [13:13.00]
   1162 ; SLM-NEXT:    retq # sched: [4:1.00]
   1163 ;
   1164 ; SANDY-SSE-LABEL: test_pcmpistrm:
   1165 ; SANDY-SSE:       # %bb.0:
   1166 ; SANDY-SSE-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
   1167 ; SANDY-SSE-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
   1168 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
   1169 ;
   1170 ; SANDY-LABEL: test_pcmpistrm:
   1171 ; SANDY:       # %bb.0:
   1172 ; SANDY-NEXT:    vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
   1173 ; SANDY-NEXT:    vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
   1174 ; SANDY-NEXT:    retq # sched: [1:1.00]
   1175 ;
   1176 ; HASWELL-SSE-LABEL: test_pcmpistrm:
   1177 ; HASWELL-SSE:       # %bb.0:
   1178 ; HASWELL-SSE-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
   1179 ; HASWELL-SSE-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
   1180 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
   1181 ;
   1182 ; HASWELL-LABEL: test_pcmpistrm:
   1183 ; HASWELL:       # %bb.0:
   1184 ; HASWELL-NEXT:    vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
   1185 ; HASWELL-NEXT:    vpcmpistrm $7, (%rdi), %xmm0 # sched: [17:3.00]
   1186 ; HASWELL-NEXT:    retq # sched: [7:1.00]
   1187 ;
   1188 ; BROADWELL-SSE-LABEL: test_pcmpistrm:
   1189 ; BROADWELL-SSE:       # %bb.0:
   1190 ; BROADWELL-SSE-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
   1191 ; BROADWELL-SSE-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
   1192 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
   1193 ;
   1194 ; BROADWELL-LABEL: test_pcmpistrm:
   1195 ; BROADWELL:       # %bb.0:
   1196 ; BROADWELL-NEXT:    vpcmpistrm $7, %xmm1, %xmm0 # sched: [11:3.00]
   1197 ; BROADWELL-NEXT:    vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
   1198 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
   1199 ;
   1200 ; SKYLAKE-SSE-LABEL: test_pcmpistrm:
   1201 ; SKYLAKE-SSE:       # %bb.0:
   1202 ; SKYLAKE-SSE-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
   1203 ; SKYLAKE-SSE-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
   1204 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
   1205 ;
   1206 ; SKYLAKE-LABEL: test_pcmpistrm:
   1207 ; SKYLAKE:       # %bb.0:
   1208 ; SKYLAKE-NEXT:    vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
   1209 ; SKYLAKE-NEXT:    vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
   1210 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
   1211 ;
   1212 ; SKX-SSE-LABEL: test_pcmpistrm:
   1213 ; SKX-SSE:       # %bb.0:
   1214 ; SKX-SSE-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
   1215 ; SKX-SSE-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
   1216 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
   1217 ;
   1218 ; SKX-LABEL: test_pcmpistrm:
   1219 ; SKX:       # %bb.0:
   1220 ; SKX-NEXT:    vpcmpistrm $7, %xmm1, %xmm0 # sched: [10:3.00]
   1221 ; SKX-NEXT:    vpcmpistrm $7, (%rdi), %xmm0 # sched: [16:3.00]
   1222 ; SKX-NEXT:    retq # sched: [7:1.00]
   1223 ;
   1224 ; BTVER2-SSE-LABEL: test_pcmpistrm:
   1225 ; BTVER2-SSE:       # %bb.0:
   1226 ; BTVER2-SSE-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [8:2.00]
   1227 ; BTVER2-SSE-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [13:2.00]
   1228 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
   1229 ;
   1230 ; BTVER2-LABEL: test_pcmpistrm:
   1231 ; BTVER2:       # %bb.0:
   1232 ; BTVER2-NEXT:    vpcmpistrm $7, %xmm1, %xmm0 # sched: [8:2.00]
   1233 ; BTVER2-NEXT:    vpcmpistrm $7, (%rdi), %xmm0 # sched: [13:2.00]
   1234 ; BTVER2-NEXT:    retq # sched: [4:1.00]
   1235 ;
   1236 ; ZNVER1-SSE-LABEL: test_pcmpistrm:
   1237 ; ZNVER1-SSE:       # %bb.0:
   1238 ; ZNVER1-SSE-NEXT:    pcmpistrm $7, %xmm1, %xmm0 # sched: [100:0.25]
   1239 ; ZNVER1-SSE-NEXT:    pcmpistrm $7, (%rdi), %xmm0 # sched: [100:0.25]
   1240 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
   1241 ;
   1242 ; ZNVER1-LABEL: test_pcmpistrm:
   1243 ; ZNVER1:       # %bb.0:
   1244 ; ZNVER1-NEXT:    vpcmpistrm $7, %xmm1, %xmm0 # sched: [100:0.25]
   1245 ; ZNVER1-NEXT:    vpcmpistrm $7, (%rdi), %xmm0 # sched: [100:0.25]
   1246 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   1247   %1 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %a0, <16 x i8> %a1, i8 7)
   1248   %2 = load <16 x i8>, <16 x i8> *%a2, align 16
   1249   %3 = call <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8> %1, <16 x i8> %2, i8 7)
   1250   ret <16 x i8> %3
   1251 }
   1252 declare <16 x i8> @llvm.x86.sse42.pcmpistrm128(<16 x i8>, <16 x i8>, i8) nounwind readnone
   1253 
   1254 define <2 x i64> @test_pcmpgtq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
   1255 ; GENERIC-LABEL: test_pcmpgtq:
   1256 ; GENERIC:       # %bb.0:
   1257 ; GENERIC-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
   1258 ; GENERIC-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [11:1.00]
   1259 ; GENERIC-NEXT:    retq # sched: [1:1.00]
   1260 ;
   1261 ; SLM-LABEL: test_pcmpgtq:
   1262 ; SLM:       # %bb.0:
   1263 ; SLM-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
   1264 ; SLM-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [4:1.00]
   1265 ; SLM-NEXT:    retq # sched: [4:1.00]
   1266 ;
   1267 ; SANDY-SSE-LABEL: test_pcmpgtq:
   1268 ; SANDY-SSE:       # %bb.0:
   1269 ; SANDY-SSE-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
   1270 ; SANDY-SSE-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [11:1.00]
   1271 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
   1272 ;
   1273 ; SANDY-LABEL: test_pcmpgtq:
   1274 ; SANDY:       # %bb.0:
   1275 ; SANDY-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
   1276 ; SANDY-NEXT:    vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
   1277 ; SANDY-NEXT:    retq # sched: [1:1.00]
   1278 ;
   1279 ; HASWELL-SSE-LABEL: test_pcmpgtq:
   1280 ; HASWELL-SSE:       # %bb.0:
   1281 ; HASWELL-SSE-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
   1282 ; HASWELL-SSE-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [11:1.00]
   1283 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
   1284 ;
   1285 ; HASWELL-LABEL: test_pcmpgtq:
   1286 ; HASWELL:       # %bb.0:
   1287 ; HASWELL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
   1288 ; HASWELL-NEXT:    vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [11:1.00]
   1289 ; HASWELL-NEXT:    retq # sched: [7:1.00]
   1290 ;
   1291 ; BROADWELL-SSE-LABEL: test_pcmpgtq:
   1292 ; BROADWELL-SSE:       # %bb.0:
   1293 ; BROADWELL-SSE-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [5:1.00]
   1294 ; BROADWELL-SSE-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [10:1.00]
   1295 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
   1296 ;
   1297 ; BROADWELL-LABEL: test_pcmpgtq:
   1298 ; BROADWELL:       # %bb.0:
   1299 ; BROADWELL-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
   1300 ; BROADWELL-NEXT:    vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
   1301 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
   1302 ;
   1303 ; SKYLAKE-SSE-LABEL: test_pcmpgtq:
   1304 ; SKYLAKE-SSE:       # %bb.0:
   1305 ; SKYLAKE-SSE-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [3:1.00]
   1306 ; SKYLAKE-SSE-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [9:1.00]
   1307 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
   1308 ;
   1309 ; SKYLAKE-LABEL: test_pcmpgtq:
   1310 ; SKYLAKE:       # %bb.0:
   1311 ; SKYLAKE-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
   1312 ; SKYLAKE-NEXT:    vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
   1313 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
   1314 ;
   1315 ; SKX-SSE-LABEL: test_pcmpgtq:
   1316 ; SKX-SSE:       # %bb.0:
   1317 ; SKX-SSE-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [3:1.00]
   1318 ; SKX-SSE-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [9:1.00]
   1319 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
   1320 ;
   1321 ; SKX-LABEL: test_pcmpgtq:
   1322 ; SKX:       # %bb.0:
   1323 ; SKX-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [3:1.00]
   1324 ; SKX-NEXT:    vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [9:1.00]
   1325 ; SKX-NEXT:    retq # sched: [7:1.00]
   1326 ;
   1327 ; BTVER2-SSE-LABEL: test_pcmpgtq:
   1328 ; BTVER2-SSE:       # %bb.0:
   1329 ; BTVER2-SSE-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
   1330 ; BTVER2-SSE-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [6:1.00]
   1331 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
   1332 ;
   1333 ; BTVER2-LABEL: test_pcmpgtq:
   1334 ; BTVER2:       # %bb.0:
   1335 ; BTVER2-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
   1336 ; BTVER2-NEXT:    vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [6:1.00]
   1337 ; BTVER2-NEXT:    retq # sched: [4:1.00]
   1338 ;
   1339 ; ZNVER1-SSE-LABEL: test_pcmpgtq:
   1340 ; ZNVER1-SSE:       # %bb.0:
   1341 ; ZNVER1-SSE-NEXT:    pcmpgtq %xmm1, %xmm0 # sched: [1:0.50]
   1342 ; ZNVER1-SSE-NEXT:    pcmpgtq (%rdi), %xmm0 # sched: [8:0.50]
   1343 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
   1344 ;
   1345 ; ZNVER1-LABEL: test_pcmpgtq:
   1346 ; ZNVER1:       # %bb.0:
   1347 ; ZNVER1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm0 # sched: [1:0.50]
   1348 ; ZNVER1-NEXT:    vpcmpgtq (%rdi), %xmm0, %xmm0 # sched: [8:0.50]
   1349 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   1350   %1 = icmp sgt <2 x i64> %a0, %a1
   1351   %2 = sext <2 x i1> %1 to <2 x i64>
   1352   %3 = load <2 x i64>, <2 x i64>*%a2, align 16
   1353   %4 = icmp sgt <2 x i64> %2, %3
   1354   %5 = sext <2 x i1> %4 to <2 x i64>
   1355   ret <2 x i64> %5
   1356 }
   1357 
   1358 define <2 x i64> @test_pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, <2 x i64> *%a2) {
   1359 ; GENERIC-LABEL: test_pclmulqdq:
   1360 ; GENERIC:       # %bb.0:
   1361 ; GENERIC-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00]
   1362 ; GENERIC-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67]
   1363 ; GENERIC-NEXT:    retq # sched: [1:1.00]
   1364 ;
   1365 ; SLM-LABEL: test_pclmulqdq:
   1366 ; SLM:       # %bb.0:
   1367 ; SLM-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [10:10.00]
   1368 ; SLM-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [10:10.00]
   1369 ; SLM-NEXT:    retq # sched: [4:1.00]
   1370 ;
   1371 ; SANDY-SSE-LABEL: test_pclmulqdq:
   1372 ; SANDY-SSE:       # %bb.0:
   1373 ; SANDY-SSE-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [14:6.00]
   1374 ; SANDY-SSE-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [14:5.67]
   1375 ; SANDY-SSE-NEXT:    retq # sched: [1:1.00]
   1376 ;
   1377 ; SANDY-LABEL: test_pclmulqdq:
   1378 ; SANDY:       # %bb.0:
   1379 ; SANDY-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [14:6.00]
   1380 ; SANDY-NEXT:    vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [14:5.67]
   1381 ; SANDY-NEXT:    retq # sched: [1:1.00]
   1382 ;
   1383 ; HASWELL-SSE-LABEL: test_pclmulqdq:
   1384 ; HASWELL-SSE:       # %bb.0:
   1385 ; HASWELL-SSE-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [11:2.00]
   1386 ; HASWELL-SSE-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [17:2.00]
   1387 ; HASWELL-SSE-NEXT:    retq # sched: [7:1.00]
   1388 ;
   1389 ; HASWELL-LABEL: test_pclmulqdq:
   1390 ; HASWELL:       # %bb.0:
   1391 ; HASWELL-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [11:2.00]
   1392 ; HASWELL-NEXT:    vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [17:2.00]
   1393 ; HASWELL-NEXT:    retq # sched: [7:1.00]
   1394 ;
   1395 ; BROADWELL-SSE-LABEL: test_pclmulqdq:
   1396 ; BROADWELL-SSE:       # %bb.0:
   1397 ; BROADWELL-SSE-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [5:1.00]
   1398 ; BROADWELL-SSE-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [10:1.00]
   1399 ; BROADWELL-SSE-NEXT:    retq # sched: [7:1.00]
   1400 ;
   1401 ; BROADWELL-LABEL: test_pclmulqdq:
   1402 ; BROADWELL:       # %bb.0:
   1403 ; BROADWELL-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [5:1.00]
   1404 ; BROADWELL-NEXT:    vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [10:1.00]
   1405 ; BROADWELL-NEXT:    retq # sched: [7:1.00]
   1406 ;
   1407 ; SKYLAKE-SSE-LABEL: test_pclmulqdq:
   1408 ; SKYLAKE-SSE:       # %bb.0:
   1409 ; SKYLAKE-SSE-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [6:1.00]
   1410 ; SKYLAKE-SSE-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [12:1.00]
   1411 ; SKYLAKE-SSE-NEXT:    retq # sched: [7:1.00]
   1412 ;
   1413 ; SKYLAKE-LABEL: test_pclmulqdq:
   1414 ; SKYLAKE:       # %bb.0:
   1415 ; SKYLAKE-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
   1416 ; SKYLAKE-NEXT:    vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
   1417 ; SKYLAKE-NEXT:    retq # sched: [7:1.00]
   1418 ;
   1419 ; SKX-SSE-LABEL: test_pclmulqdq:
   1420 ; SKX-SSE:       # %bb.0:
   1421 ; SKX-SSE-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [6:1.00]
   1422 ; SKX-SSE-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [12:1.00]
   1423 ; SKX-SSE-NEXT:    retq # sched: [7:1.00]
   1424 ;
   1425 ; SKX-LABEL: test_pclmulqdq:
   1426 ; SKX:       # %bb.0:
   1427 ; SKX-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [6:1.00]
   1428 ; SKX-NEXT:    vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [12:1.00]
   1429 ; SKX-NEXT:    retq # sched: [7:1.00]
   1430 ;
   1431 ; BTVER2-SSE-LABEL: test_pclmulqdq:
   1432 ; BTVER2-SSE:       # %bb.0:
   1433 ; BTVER2-SSE-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [2:1.00]
   1434 ; BTVER2-SSE-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [7:1.00]
   1435 ; BTVER2-SSE-NEXT:    retq # sched: [4:1.00]
   1436 ;
   1437 ; BTVER2-LABEL: test_pclmulqdq:
   1438 ; BTVER2:       # %bb.0:
   1439 ; BTVER2-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [2:1.00]
   1440 ; BTVER2-NEXT:    vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [7:1.00]
   1441 ; BTVER2-NEXT:    retq # sched: [4:1.00]
   1442 ;
   1443 ; ZNVER1-SSE-LABEL: test_pclmulqdq:
   1444 ; ZNVER1-SSE:       # %bb.0:
   1445 ; ZNVER1-SSE-NEXT:    pclmulqdq $0, %xmm1, %xmm0 # sched: [100:0.25]
   1446 ; ZNVER1-SSE-NEXT:    pclmulqdq $0, (%rdi), %xmm0 # sched: [100:0.25]
   1447 ; ZNVER1-SSE-NEXT:    retq # sched: [1:0.50]
   1448 ;
   1449 ; ZNVER1-LABEL: test_pclmulqdq:
   1450 ; ZNVER1:       # %bb.0:
   1451 ; ZNVER1-NEXT:    vpclmulqdq $0, %xmm1, %xmm0, %xmm0 # sched: [100:0.25]
   1452 ; ZNVER1-NEXT:    vpclmulqdq $0, (%rdi), %xmm0, %xmm0 # sched: [100:0.25]
   1453 ; ZNVER1-NEXT:    retq # sched: [1:0.50]
   1454   %1 = load <2 x i64>, <2 x i64> *%a2, align 16
   1455   %2 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %a0, <2 x i64> %a1, i8 0)
   1456   %3 = call <2 x i64> @llvm.x86.pclmulqdq(<2 x i64> %1, <2 x i64> %2, i8 0)
   1457   ret <2 x i64> %3
   1458 }
   1459 declare <2 x i64> @llvm.x86.pclmulqdq(<2 x i64>, <2 x i64>, i8)
   1460