Lines Matching refs:AVX
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefixes=AVX,AV…
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AV…
58 ; AVX-LABEL: fold_srem_vec_1:
59 ; AVX: # %bb.0:
60 ; AVX-NEXT: vpextrw $3, %xmm0, %eax
61 ; AVX-NEXT: movswl %ax, %ecx
62 ; AVX-NEXT: imull $32081, %ecx, %ecx # imm = 0x7D51
63 ; AVX-NEXT: shrl $16, %ecx
64 ; AVX-NEXT: subl %eax, %ecx
65 ; AVX-NEXT: movzwl %cx, %ecx
66 ; AVX-NEXT: movswl %cx, %edx
67 ; AVX-NEXT: shrl $15, %ecx
68 ; AVX-NEXT: sarl $9, %edx
69 ; AVX-NEXT: addl %ecx, %edx
70 ; AVX-NEXT: imull $-1003, %edx, %ecx # imm = 0xFC15
71 ; AVX-NEXT: subl %ecx, %eax
72 ; AVX-NEXT: vmovd %xmm0, %ecx
73 ; AVX-NEXT: movswl %cx, %edx
74 ; AVX-NEXT: imull $-21385, %edx, %edx # imm = 0xAC77
75 ; AVX-NEXT: shrl $16, %edx
76 ; AVX-NEXT: addl %ecx, %edx
77 ; AVX-NEXT: movzwl %dx, %edx
78 ; AVX-NEXT: movswl %dx, %esi
79 ; AVX-NEXT: shrl $15, %edx
80 ; AVX-NEXT: sarl $6, %esi
81 ; AVX-NEXT: addl %edx, %esi
82 ; AVX-NEXT: imull $95, %esi, %edx
83 ; AVX-NEXT: subl %edx, %ecx
84 ; AVX-NEXT: vmovd %ecx, %xmm1
85 ; AVX-NEXT: vpextrw $1, %xmm0, %ecx
86 ; AVX-NEXT: movswl %cx, %edx
87 ; AVX-NEXT: imull $-16913, %edx, %edx # imm = 0xBDEF
88 ; AVX-NEXT: movl %edx, %esi
89 ; AVX-NEXT: shrl $31, %esi
90 ; AVX-NEXT: sarl $21, %edx
91 ; AVX-NEXT: addl %esi, %edx
92 ; AVX-NEXT: imull $-124, %edx, %edx
93 ; AVX-NEXT: subl %edx, %ecx
94 ; AVX-NEXT: vpinsrw $1, %ecx, %xmm1, %xmm1
95 ; AVX-NEXT: vpextrw $2, %xmm0, %ecx
96 ; AVX-NEXT: movswl %cx, %edx
97 ; AVX-NEXT: imull $2675, %edx, %edx # imm = 0xA73
98 ; AVX-NEXT: movl %edx, %esi
99 ; AVX-NEXT: shrl $31, %esi
100 ; AVX-NEXT: sarl $18, %edx
101 ; AVX-NEXT: addl %esi, %edx
102 ; AVX-NEXT: imull $98, %edx, %edx
103 ; AVX-NEXT: subl %edx, %ecx
104 ; AVX-NEXT: vpinsrw $2, %ecx, %xmm1, %xmm0
105 ; AVX-NEXT: vpinsrw $3, %eax, %xmm0, %xmm0
106 ; AVX-NEXT: retq
125 ; AVX-LABEL: fold_srem_vec_2:
126 ; AVX: # %bb.0:
127 ; AVX-NEXT: vpmulhw {{.*}}(%rip), %xmm0, %xmm1
128 ; AVX-NEXT: vpaddw %xmm0, %xmm1, %xmm1
129 ; AVX-NEXT: vpsrlw $15, %xmm1, %xmm2
130 ; AVX-NEXT: vpsraw $6, %xmm1, %xmm1
131 ; AVX-NEXT: vpaddw %xmm2, %xmm1, %xmm1
132 ; AVX-NEXT: vpmullw {{.*}}(%rip), %xmm1, %xmm1
133 ; AVX-NEXT: vpsubw %xmm1, %xmm0, %xmm0
134 ; AVX-NEXT: retq
157 ; AVX-LABEL: combine_srem_sdiv:
158 ; AVX: # %bb.0:
159 ; AVX-NEXT: vpmulhw {{.*}}(%rip), %xmm0, %xmm1
160 ; AVX-NEXT: vpaddw %xmm0, %xmm1, %xmm1
161 ; AVX-NEXT: vpsrlw $15, %xmm1, %xmm2
162 ; AVX-NEXT: vpsraw $6, %xmm1, %xmm1
163 ; AVX-NEXT: vpaddw %xmm2, %xmm1, %xmm1
164 ; AVX-NEXT: vpmullw {{.*}}(%rip), %xmm1, %xmm2
165 ; AVX-NEXT: vpsubw %xmm2, %xmm0, %xmm0
166 ; AVX-NEXT: vpaddw %xmm1, %xmm0, %xmm0
167 ; AVX-NEXT: retq
215 ; AVX-LABEL: dont_fold_srem_power_of_two:
216 ; AVX: # %bb.0:
217 ; AVX-NEXT: vpextrw $1, %xmm0, %eax
218 ; AVX-NEXT: leal 31(%rax), %ecx
219 ; AVX-NEXT: testw %ax, %ax
220 ; AVX-NEXT: cmovnsl %eax, %ecx
221 ; AVX-NEXT: andl $-32, %ecx
222 ; AVX-NEXT: subl %ecx, %eax
223 ; AVX-NEXT: vmovd %xmm0, %ecx
224 ; AVX-NEXT: leal 63(%rcx), %edx
225 ; AVX-NEXT: testw %cx, %cx
226 ; AVX-NEXT: cmovnsl %ecx, %edx
227 ; AVX-NEXT: andl $-64, %edx
228 ; AVX-NEXT: subl %edx, %ecx
229 ; AVX-NEXT: vmovd %ecx, %xmm1
230 ; AVX-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1
231 ; AVX-NEXT: vpextrw $2, %xmm0, %eax
232 ; AVX-NEXT: leal 7(%rax), %ecx
233 ; AVX-NEXT: testw %ax, %ax
234 ; AVX-NEXT: cmovnsl %eax, %ecx
235 ; AVX-NEXT: andl $-8, %ecx
236 ; AVX-NEXT: subl %ecx, %eax
237 ; AVX-NEXT: vpinsrw $2, %eax, %xmm1, %xmm1
238 ; AVX-NEXT: vpextrw $3, %xmm0, %eax
239 ; AVX-NEXT: movswl %ax, %ecx
240 ; AVX-NEXT: imull $-21385, %ecx, %ecx # imm = 0xAC77
241 ; AVX-NEXT: shrl $16, %ecx
242 ; AVX-NEXT: addl %eax, %ecx
243 ; AVX-NEXT: movzwl %cx, %ecx
244 ; AVX-NEXT: movswl %cx, %edx
245 ; AVX-NEXT: shrl $15, %ecx
246 ; AVX-NEXT: sarl $6, %edx
247 ; AVX-NEXT: addl %ecx, %edx
248 ; AVX-NEXT: imull $95, %edx, %ecx
249 ; AVX-NEXT: subl %ecx, %eax
250 ; AVX-NEXT: vpinsrw $3, %eax, %xmm1, %xmm0
251 ; AVX-NEXT: retq
299 ; AVX-LABEL: dont_fold_srem_one:
300 ; AVX: # %bb.0:
301 ; AVX-NEXT: vpextrw $2, %xmm0, %eax
302 ; AVX-NEXT: movswl %ax, %ecx
303 ; AVX-NEXT: imull $-19945, %ecx, %ecx # imm = 0xB217
304 ; AVX-NEXT: shrl $16, %ecx
305 ; AVX-NEXT: addl %eax, %ecx
306 ; AVX-NEXT: movzwl %cx, %ecx
307 ; AVX-NEXT: movswl %cx, %edx
308 ; AVX-NEXT: shrl $15, %ecx
309 ; AVX-NEXT: sarl $4, %edx
310 ; AVX-NEXT: addl %ecx, %edx
311 ; AVX-NEXT: leal (%rdx,%rdx,2), %ecx
312 ; AVX-NEXT: shll $3, %ecx
313 ; AVX-NEXT: subl %ecx, %edx
314 ; AVX-NEXT: addl %eax, %edx
315 ; AVX-NEXT: vpextrw $1, %xmm0, %eax
316 ; AVX-NEXT: movswl %ax, %ecx
317 ; AVX-NEXT: imull $12827, %ecx, %ecx # imm = 0x321B
318 ; AVX-NEXT: movl %ecx, %esi
319 ; AVX-NEXT: shrl $31, %esi
320 ; AVX-NEXT: sarl $23, %ecx
321 ; AVX-NEXT: addl %esi, %ecx
322 ; AVX-NEXT: imull $654, %ecx, %ecx # imm = 0x28E
323 ; AVX-NEXT: subl %ecx, %eax
324 ; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1
325 ; AVX-NEXT: vpinsrw $1, %eax, %xmm1, %xmm1
326 ; AVX-NEXT: vpinsrw $2, %edx, %xmm1, %xmm1
327 ; AVX-NEXT: vpextrw $3, %xmm0, %eax
328 ; AVX-NEXT: movswl %ax, %ecx
329 ; AVX-NEXT: imull $12375, %ecx, %ecx # imm = 0x3057
330 ; AVX-NEXT: movl %ecx, %edx
331 ; AVX-NEXT: shrl $31, %edx
332 ; AVX-NEXT: sarl $26, %ecx
333 ; AVX-NEXT: addl %edx, %ecx
334 ; AVX-NEXT: imull $5423, %ecx, %ecx # imm = 0x152F
335 ; AVX-NEXT: subl %ecx, %eax
336 ; AVX-NEXT: vpinsrw $3, %eax, %xmm1, %xmm0
337 ; AVX-NEXT: retq
382 ; AVX-LABEL: dont_fold_urem_i16_smax:
383 ; AVX: # %bb.0:
384 ; AVX-NEXT: vpextrw $2, %xmm0, %eax
385 ; AVX-NEXT: movswl %ax, %ecx
386 ; AVX-NEXT: imull $-19945, %ecx, %ecx # imm = 0xB217
387 ; AVX-NEXT: shrl $16, %ecx
388 ; AVX-NEXT: addl %eax, %ecx
389 ; AVX-NEXT: movzwl %cx, %ecx
390 ; AVX-NEXT: movswl %cx, %edx
391 ; AVX-NEXT: shrl $15, %ecx
392 ; AVX-NEXT: sarl $4, %edx
393 ; AVX-NEXT: addl %ecx, %edx
394 ; AVX-NEXT: leal (%rdx,%rdx,2), %ecx
395 ; AVX-NEXT: shll $3, %ecx
396 ; AVX-NEXT: subl %ecx, %edx
397 ; AVX-NEXT: addl %eax, %edx
398 ; AVX-NEXT: vpextrw $1, %xmm0, %eax
399 ; AVX-NEXT: leal 32767(%rax), %ecx
400 ; AVX-NEXT: testw %ax, %ax
401 ; AVX-NEXT: cmovnsl %eax, %ecx
402 ; AVX-NEXT: andl $-32768, %ecx # imm = 0x8000
403 ; AVX-NEXT: addl %eax, %ecx
404 ; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1
405 ; AVX-NEXT: vpinsrw $1, %ecx, %xmm1, %xmm1
406 ; AVX-NEXT: vpinsrw $2, %edx, %xmm1, %xmm1
407 ; AVX-NEXT: vpextrw $3, %xmm0, %eax
408 ; AVX-NEXT: movswl %ax, %ecx
409 ; AVX-NEXT: imull $12375, %ecx, %ecx # imm = 0x3057
410 ; AVX-NEXT: movl %ecx, %edx
411 ; AVX-NEXT: shrl $31, %edx
412 ; AVX-NEXT: sarl $26, %ecx
413 ; AVX-NEXT: addl %edx, %ecx
414 ; AVX-NEXT: imull $5423, %ecx, %ecx # imm = 0x152F
415 ; AVX-NEXT: subl %ecx, %eax
416 ; AVX-NEXT: vpinsrw $3, %eax, %xmm1, %xmm0
417 ; AVX-NEXT: retq