Home | History | Annotate | Download | only in X86

Lines Matching full:sse41

3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
36 ; SSE41-LABEL: var_shift_v2i64:
37 ; SSE41: # BB#0:
38 ; SSE41-NEXT: movdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
39 ; SSE41-NEXT: movdqa %xmm2, %xmm3
40 ; SSE41-NEXT: psrlq %xmm1, %xmm3
41 ; SSE41-NEXT: pshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]
42 ; SSE41-NEXT: psrlq %xmm4, %xmm2
43 ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
44 ; SSE41-NEXT: movdqa %xmm0, %xmm3
45 ; SSE41-NEXT: psrlq %xmm1, %xmm3
46 ; SSE41-NEXT: psrlq %xmm4, %xmm0
47 ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm3[0,1,2,3],xmm0[4,5,6,7]
48 ; SSE41-NEXT: pxor %xmm2, %xmm0
49 ; SSE41-NEXT: psubq %xmm2, %xmm0
50 ; SSE41-NEXT: retq
137 ; SSE41-LABEL: var_shift_v4i32:
138 ; SSE41: # BB#0:
139 ; SSE41-NEXT: movdqa %xmm1, %xmm2
140 ; SSE41-NEXT: psrldq {{.*#+}} xmm2 = xmm2[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
141 ; SSE41-NEXT: movdqa %xmm0, %xmm3
142 ; SSE41-NEXT: psrad %xmm2, %xmm3
143 ; SSE41-NEXT: movdqa %xmm1, %xmm2
144 ; SSE41-NEXT: psrlq $32, %xmm2
145 ; SSE41-NEXT: movdqa %xmm0, %xmm4
146 ; SSE41-NEXT: psrad %xmm2, %xmm4
147 ; SSE41-NEXT: pblendw {{.*#+}} xmm4 = xmm4[0,1,2,3],xmm3[4,5,6,7]
148 ; SSE41-NEXT: pxor %xmm2, %xmm2
149 ; SSE41-NEXT: pmovzxdq {{.*#+}} xmm3 = xmm1[0],zero,xmm1[1],zero
150 ; SSE41-NEXT: punpckhdq {{.*#+}} xmm1 = xmm1[2],xmm2[2],xmm1[3],xmm2[3]
151 ; SSE41-NEXT: movdqa %xmm0, %xmm2
152 ; SSE41-NEXT: psrad %xmm1, %xmm2
153 ; SSE41-NEXT: psrad %xmm3, %xmm0
154 ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
155 ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm4[2,3],xmm0[4,5],xmm4[6,7]
156 ; SSE41-NEXT: retq
259 ; SSE41-LABEL: var_shift_v8i16:
260 ; SSE41: # BB#0:
261 ; SSE41-NEXT: movdqa %xmm0, %xmm2
262 ; SSE41-NEXT: movdqa %xmm1, %xmm0
263 ; SSE41-NEXT: psllw $12, %xmm0
264 ; SSE41-NEXT: psllw $4, %xmm1
265 ; SSE41-NEXT: por %xmm0, %xmm1
266 ; SSE41-NEXT: movdqa %xmm1, %xmm3
267 ; SSE41-NEXT: paddw %xmm3, %xmm3
268 ; SSE41-NEXT: movdqa %xmm2, %xmm4
269 ; SSE41-NEXT: psraw $8, %xmm4
270 ; SSE41-NEXT: movdqa %xmm1, %xmm0
271 ; SSE41-NEXT: pblendvb %xmm4, %xmm2
272 ; SSE41-NEXT: movdqa %xmm2, %xmm1
273 ; SSE41-NEXT: psraw $4, %xmm1
274 ; SSE41-NEXT: movdqa %xmm3, %xmm0
275 ; SSE41-NEXT: pblendvb %xmm1, %xmm2
276 ; SSE41-NEXT: movdqa %xmm2, %xmm1
277 ; SSE41-NEXT: psraw $2, %xmm1
278 ; SSE41-NEXT: paddw %xmm3, %xmm3
279 ; SSE41-NEXT: movdqa %xmm3, %xmm0
280 ; SSE41-NEXT: pblendvb %xmm1, %xmm2
281 ; SSE41-NEXT: movdqa %xmm2, %xmm1
282 ; SSE41-NEXT: psraw $1, %xmm1
283 ; SSE41-NEXT: paddw %xmm3, %xmm3
284 ; SSE41-NEXT: movdqa %xmm3, %xmm0
285 ; SSE41-NEXT: pblendvb %xmm1, %xmm2
286 ; SSE41-NEXT: movdqa %xmm2, %xmm0
287 ; SSE41-NEXT: retq
430 ; SSE41-LABEL: var_shift_v16i8:
431 ; SSE41: # BB#0:
432 ; SSE41-NEXT: movdqa %xmm0, %xmm2
433 ; SSE41-NEXT: psllw $5, %xmm1
434 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
435 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
436 ; SSE41-NEXT: movdqa %xmm3, %xmm4
437 ; SSE41-NEXT: psraw $4, %xmm4
438 ; SSE41-NEXT: pblendvb %xmm4, %xmm3
439 ; SSE41-NEXT: movdqa %xmm3, %xmm4
440 ; SSE41-NEXT: psraw $2, %xmm4
441 ; SSE41-NEXT: paddw %xmm0, %xmm0
442 ; SSE41-NEXT: pblendvb %xmm4, %xmm3
443 ; SSE41-NEXT: movdqa %xmm3, %xmm4
444 ; SSE41-NEXT: psraw $1, %xmm4
445 ; SSE41-NEXT: paddw %xmm0, %xmm0
446 ; SSE41-NEXT: pblendvb %xmm4, %xmm3
447 ; SSE41-NEXT: psrlw $8, %xmm3
448 ; SSE41-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
449 ; SSE41-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
450 ; SSE41-NEXT: movdqa %xmm1, %xmm2
451 ; SSE41-NEXT: psraw $4, %xmm2
452 ; SSE41-NEXT: pblendvb %xmm2, %xmm1
453 ; SSE41-NEXT: movdqa %xmm1, %xmm2
454 ; SSE41-NEXT: psraw $2, %xmm2
455 ; SSE41-NEXT: paddw %xmm0, %xmm0
456 ; SSE41-NEXT: pblendvb %xmm2, %xmm1
457 ; SSE41-NEXT: movdqa %xmm1, %xmm2
458 ; SSE41-NEXT: psraw $1, %xmm2
459 ; SSE41-NEXT: paddw %xmm0, %xmm0
460 ; SSE41-NEXT: pblendvb %xmm2, %xmm1
461 ; SSE41-NEXT: psrlw $8, %xmm1
462 ; SSE41-NEXT: packuswb %xmm3, %xmm1
463 ; SSE41-NEXT: movdqa %xmm1, %xmm0
464 ; SSE41-NEXT: retq
660 ; SSE41-LABEL: splatvar_shift_v4i32:
661 ; SSE41: # BB#0:
662 ; SSE41-NEXT: pxor %xmm2, %xmm2
663 ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3,4,5,6,7]
664 ; SSE41-NEXT: psrad %xmm2, %xmm0
665 ; SSE41-NEXT: retq
708 ; SSE41-LABEL: splatvar_shift_v8i16:
709 ; SSE41: # BB#0:
710 ; SSE41-NEXT: pxor %xmm2, %xmm2
711 ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3,4,5,6,7]
712 ; SSE41-NEXT: psraw %xmm2, %xmm0
713 ; SSE41-NEXT: retq
810 ; SSE41-LABEL: splatvar_shift_v16i8:
811 ; SSE41: # BB#0:
812 ; SSE41-NEXT: movdqa %xmm0, %xmm2
813 ; SSE41-NEXT: pxor %xmm0, %xmm0
814 ; SSE41-NEXT: pshufb %xmm0, %xmm1
815 ; SSE41-NEXT: psllw $5, %xmm1
816 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
817 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm2[8],xmm3[9],xmm2[9],xmm3[10],xmm2[10],xmm3[11],xmm2[11],xmm3[12],xmm2[12],xmm3[13],xmm2[13],xmm3[14],xmm2[14],xmm3[15],xmm2[15]
818 ; SSE41-NEXT: movdqa %xmm3, %xmm4
819 ; SSE41-NEXT: psraw $4, %xmm4
820 ; SSE41-NEXT: pblendvb %xmm4, %xmm3
821 ; SSE41-NEXT: movdqa %xmm3, %xmm4
822 ; SSE41-NEXT: psraw $2, %xmm4
823 ; SSE41-NEXT: paddw %xmm0, %xmm0
824 ; SSE41-NEXT: pblendvb %xmm4, %xmm3
825 ; SSE41-NEXT: movdqa %xmm3, %xmm4
826 ; SSE41-NEXT: psraw $1, %xmm4
827 ; SSE41-NEXT: paddw %xmm0, %xmm0
828 ; SSE41-NEXT: pblendvb %xmm4, %xmm3
829 ; SSE41-NEXT: psrlw $8, %xmm3
830 ; SSE41-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
831 ; SSE41-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
832 ; SSE41-NEXT: movdqa %xmm1, %xmm2
833 ; SSE41-NEXT: psraw $4, %xmm2
834 ; SSE41-NEXT: pblendvb %xmm2, %xmm1
835 ; SSE41-NEXT: movdqa %xmm1, %xmm2
836 ; SSE41-NEXT: psraw $2, %xmm2
837 ; SSE41-NEXT: paddw %xmm0, %xmm0
838 ; SSE41-NEXT: pblendvb %xmm2, %xmm1
839 ; SSE41-NEXT: movdqa %xmm1, %xmm2
840 ; SSE41-NEXT: psraw $1, %xmm2
841 ; SSE41-NEXT: paddw %xmm0, %xmm0
842 ; SSE41-NEXT: pblendvb %xmm2, %xmm1
843 ; SSE41-NEXT: psrlw $8, %xmm1
844 ; SSE41-NEXT: packuswb %xmm3, %xmm1
845 ; SSE41-NEXT: movdqa %xmm1, %xmm0
846 ; SSE41-NEXT: retq
1034 ; SSE41-LABEL: constant_shift_v2i64:
1035 ; SSE41: # BB#0:
1036 ; SSE41-NEXT: movdqa %xmm0, %xmm1
1037 ; SSE41-NEXT: psrlq $7, %xmm1
1038 ; SSE41-NEXT: psrlq $1, %xmm0
1039 ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1040 ; SSE41-NEXT: movdqa {{.*#+}} xmm1 = [4611686018427387904,72057594037927936]
1041 ; SSE41-NEXT: pxor %xmm1, %xmm0
1042 ; SSE41-NEXT: psubq %xmm1, %xmm0
1043 ; SSE41-NEXT: retq
1114 ; SSE41-LABEL: constant_shift_v4i32:
1115 ; SSE41: # BB#0:
1116 ; SSE41-NEXT: movdqa %xmm0, %xmm1
1117 ; SSE41-NEXT: psrad $7, %xmm1
1118 ; SSE41-NEXT: movdqa %xmm0, %xmm2
1119 ; SSE41-NEXT: psrad $5, %xmm2
1120 ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm1[4,5,6,7]
1121 ; SSE41-NEXT: movdqa %xmm0, %xmm1
1122 ; SSE41-NEXT: psrad $6, %xmm1
1123 ; SSE41-NEXT: psrad $4, %xmm0
1124 ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1125 ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
1126 ; SSE41-NEXT: retq
1196 ; SSE41-LABEL: constant_shift_v8i16:
1197 ; SSE41: # BB#0:
1198 ; SSE41-NEXT: movdqa %xmm0, %xmm1
1199 ; SSE41-NEXT: psraw $4, %xmm1
1200 ; SSE41-NEXT: pblendw {{.*#+}} xmm1 = xmm0[0,1,2,3],xmm1[4,5,6,7]
1201 ; SSE41-NEXT: movdqa %xmm1, %xmm2
1202 ; SSE41-NEXT: psraw $2, %xmm2
1203 ; SSE41-NEXT: pblendw {{.*#+}} xmm2 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
1204 ; SSE41-NEXT: movdqa %xmm2, %xmm0
1205 ; SSE41-NEXT: psraw $1, %xmm0
1206 ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm2[0],xmm0[1],xmm2[2],xmm0[3],xmm2[4],xmm0[5],xmm2[6],xmm0[7]
1207 ; SSE41-NEXT: retq
1324 ; SSE41-LABEL: constant_shift_v16i8:
1325 ; SSE41: # BB#0:
1326 ; SSE41-NEXT: movdqa %xmm0, %xmm1
1327 ; SSE41-NEXT: movdqa {{.*#+}} xmm3 = [0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0]
1328 ; SSE41-NEXT: psllw $5, %xmm3
1329 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm0 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]
1330 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm2 = xmm2[8],xmm1[8],xmm2[9],xmm1[9],xmm2[10],xmm1[10],xmm2[11],xmm1[11],xmm2[12],xmm1[12],xmm2[13],xmm1[13],xmm2[14],xmm1[14],xmm2[15],xmm1[15]
1331 ; SSE41-NEXT: movdqa %xmm2, %xmm4
1332 ; SSE41-NEXT: psraw $4, %xmm4
1333 ; SSE41-NEXT: pblendvb %xmm4, %xmm2
1334 ; SSE41-NEXT: movdqa %xmm2, %xmm4
1335 ; SSE41-NEXT: psraw $2, %xmm4
1336 ; SSE41-NEXT: paddw %xmm0, %xmm0
1337 ; SSE41-NEXT: pblendvb %xmm4, %xmm2
1338 ; SSE41-NEXT: movdqa %xmm2, %xmm4
1339 ; SSE41-NEXT: psraw $1, %xmm4
1340 ; SSE41-NEXT: paddw %xmm0, %xmm0
1341 ; SSE41-NEXT: pblendvb %xmm4, %xmm2
1342 ; SSE41-NEXT: psrlw $8, %xmm2
1343 ; SSE41-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1344 ; SSE41-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
1345 ; SSE41-NEXT: movdqa %xmm1, %xmm3
1346 ; SSE41-NEXT: psraw $4, %xmm3
1347 ; SSE41-NEXT: pblendvb %xmm3, %xmm1
1348 ; SSE41-NEXT: movdqa %xmm1, %xmm3
1349 ; SSE41-NEXT: psraw $2, %xmm3
1350 ; SSE41-NEXT: paddw %xmm0, %xmm0
1351 ; SSE41-NEXT: pblendvb %xmm3, %xmm1
1352 ; SSE41-NEXT: movdqa %xmm1, %xmm3
1353 ; SSE41-NEXT: psraw $1, %xmm3
1354 ; SSE41-NEXT: paddw %xmm0, %xmm0
1355 ; SSE41-NEXT: pblendvb %xmm3, %xmm1
1356 ; SSE41-NEXT: psrlw $8, %xmm1
1357 ; SSE41-NEXT: packuswb %xmm2, %xmm1
1358 ; SSE41-NEXT: movdqa %xmm1, %xmm0
1359 ; SSE41-NEXT: retq
1503 ; SSE41-LABEL: splatconstant_shift_v2i64:
1504 ; SSE41: # BB#0:
1505 ; SSE41-NEXT: movdqa %xmm0, %xmm1
1506 ; SSE41-NEXT: psrad $7, %xmm1
1507 ; SSE41-NEXT: psrlq $7, %xmm0
1508 ; SSE41-NEXT: pblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7]
1509 ; SSE41-NEXT: retq