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