Lines Matching refs:AVX2
4 ; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 < %s | FileCheck %s --check-prefix=AVX2
97 ; AVX2-LABEL: gather_v4f32_ptr_v4i32:
98 ; AVX2: # %bb.0:
99 ; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3
100 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
101 ; AVX2-NEXT: vmovmskps %xmm1, %eax
102 ; AVX2-NEXT: testb $1, %al
103 ; AVX2-NEXT: je .LBB0_2
104 ; AVX2-NEXT: # %bb.1: # %cond.load
105 ; AVX2-NEXT: vmovq %xmm0, %rcx
106 ; AVX2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
107 ; AVX2-NEXT: vblendps {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]
108 ; AVX2-NEXT: .LBB0_2: # %else
109 ; AVX2-NEXT: testb $2, %al
110 ; AVX2-NEXT: je .LBB0_4
111 ; AVX2-NEXT: # %bb.3: # %cond.load1
112 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
113 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]
114 ; AVX2-NEXT: .LBB0_4: # %else2
115 ; AVX2-NEXT: testb $4, %al
116 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
117 ; AVX2-NEXT: jne .LBB0_5
118 ; AVX2-NEXT: # %bb.6: # %else5
119 ; AVX2-NEXT: testb $8, %al
120 ; AVX2-NEXT: jne .LBB0_7
121 ; AVX2-NEXT: .LBB0_8: # %else8
122 ; AVX2-NEXT: vmovaps %xmm2, %xmm0
123 ; AVX2-NEXT: vzeroupper
124 ; AVX2-NEXT: retq
125 ; AVX2-NEXT: .LBB0_5: # %cond.load4
126 ; AVX2-NEXT: vmovq %xmm0, %rcx
127 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
128 ; AVX2-NEXT: testb $8, %al
129 ; AVX2-NEXT: je .LBB0_8
130 ; AVX2-NEXT: .LBB0_7: # %cond.load7
131 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
132 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
133 ; AVX2-NEXT: vmovaps %xmm2, %xmm0
134 ; AVX2-NEXT: vzeroupper
135 ; AVX2-NEXT: retq
251 ; AVX2-LABEL: gather_v4f32_v4i32_v4i32:
252 ; AVX2: # %bb.0:
253 ; AVX2-NEXT: vmovq %rdi, %xmm3
254 ; AVX2-NEXT: vpbroadcastq %xmm3, %ymm3
255 ; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0
256 ; AVX2-NEXT: vpsllq $2, %ymm0, %ymm0
257 ; AVX2-NEXT: vpaddq %ymm0, %ymm3, %ymm0
258 ; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3
259 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
260 ; AVX2-NEXT: vmovmskps %xmm1, %eax
261 ; AVX2-NEXT: testb $1, %al
262 ; AVX2-NEXT: je .LBB1_2
263 ; AVX2-NEXT: # %bb.1: # %cond.load
264 ; AVX2-NEXT: vmovq %xmm0, %rcx
265 ; AVX2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
266 ; AVX2-NEXT: vblendps {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]
267 ; AVX2-NEXT: .LBB1_2: # %else
268 ; AVX2-NEXT: testb $2, %al
269 ; AVX2-NEXT: je .LBB1_4
270 ; AVX2-NEXT: # %bb.3: # %cond.load1
271 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
272 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]
273 ; AVX2-NEXT: .LBB1_4: # %else2
274 ; AVX2-NEXT: testb $4, %al
275 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
276 ; AVX2-NEXT: jne .LBB1_5
277 ; AVX2-NEXT: # %bb.6: # %else5
278 ; AVX2-NEXT: testb $8, %al
279 ; AVX2-NEXT: jne .LBB1_7
280 ; AVX2-NEXT: .LBB1_8: # %else8
281 ; AVX2-NEXT: vmovaps %xmm2, %xmm0
282 ; AVX2-NEXT: vzeroupper
283 ; AVX2-NEXT: retq
284 ; AVX2-NEXT: .LBB1_5: # %cond.load4
285 ; AVX2-NEXT: vmovq %xmm0, %rcx
286 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
287 ; AVX2-NEXT: testb $8, %al
288 ; AVX2-NEXT: je .LBB1_8
289 ; AVX2-NEXT: .LBB1_7: # %cond.load7
290 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
291 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
292 ; AVX2-NEXT: vmovaps %xmm2, %xmm0
293 ; AVX2-NEXT: vzeroupper
294 ; AVX2-NEXT: retq
409 ; AVX2-LABEL: gather_v4f32_v4i64_v4i32:
410 ; AVX2: # %bb.0:
411 ; AVX2-NEXT: vmovq %rdi, %xmm3
412 ; AVX2-NEXT: vpbroadcastq %xmm3, %ymm3
413 ; AVX2-NEXT: vpsllq $2, %ymm0, %ymm0
414 ; AVX2-NEXT: vpaddq %ymm0, %ymm3, %ymm0
415 ; AVX2-NEXT: vpxor %xmm3, %xmm3, %xmm3
416 ; AVX2-NEXT: vpcmpeqd %xmm3, %xmm1, %xmm1
417 ; AVX2-NEXT: vmovmskps %xmm1, %eax
418 ; AVX2-NEXT: testb $1, %al
419 ; AVX2-NEXT: je .LBB2_2
420 ; AVX2-NEXT: # %bb.1: # %cond.load
421 ; AVX2-NEXT: vmovq %xmm0, %rcx
422 ; AVX2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
423 ; AVX2-NEXT: vblendps {{.*#+}} xmm2 = xmm1[0],xmm2[1,2,3]
424 ; AVX2-NEXT: .LBB2_2: # %else
425 ; AVX2-NEXT: testb $2, %al
426 ; AVX2-NEXT: je .LBB2_4
427 ; AVX2-NEXT: # %bb.3: # %cond.load1
428 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
429 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]
430 ; AVX2-NEXT: .LBB2_4: # %else2
431 ; AVX2-NEXT: testb $4, %al
432 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
433 ; AVX2-NEXT: jne .LBB2_5
434 ; AVX2-NEXT: # %bb.6: # %else5
435 ; AVX2-NEXT: testb $8, %al
436 ; AVX2-NEXT: jne .LBB2_7
437 ; AVX2-NEXT: .LBB2_8: # %else8
438 ; AVX2-NEXT: vmovaps %xmm2, %xmm0
439 ; AVX2-NEXT: vzeroupper
440 ; AVX2-NEXT: retq
441 ; AVX2-NEXT: .LBB2_5: # %cond.load4
442 ; AVX2-NEXT: vmovq %xmm0, %rcx
443 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]
444 ; AVX2-NEXT: testb $8, %al
445 ; AVX2-NEXT: je .LBB2_8
446 ; AVX2-NEXT: .LBB2_7: # %cond.load7
447 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
448 ; AVX2-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]
449 ; AVX2-NEXT: vmovaps %xmm2, %xmm0
450 ; AVX2-NEXT: vzeroupper
451 ; AVX2-NEXT: retq
751 ; AVX2-LABEL: gather_v16i8_v16i32_v16i8:
752 ; AVX2: # %bb.0:
753 ; AVX2-NEXT: vmovq %rdi, %xmm4
754 ; AVX2-NEXT: vpbroadcastq %xmm4, %ymm4
755 ; AVX2-NEXT: vpmovsxdq %xmm0, %ymm5
756 ; AVX2-NEXT: vpaddq %ymm5, %ymm4, %ymm5
757 ; AVX2-NEXT: vpxor %xmm6, %xmm6, %xmm6
758 ; AVX2-NEXT: vpcmpeqb %xmm6, %xmm2, %xmm2
759 ; AVX2-NEXT: vpmovmskb %xmm2, %eax
760 ; AVX2-NEXT: testb $1, %al
761 ; AVX2-NEXT: je .LBB3_2
762 ; AVX2-NEXT: # %bb.1: # %cond.load
763 ; AVX2-NEXT: vmovq %xmm5, %rcx
764 ; AVX2-NEXT: vpinsrb $0, (%rcx), %xmm3, %xmm3
765 ; AVX2-NEXT: .LBB3_2: # %else
766 ; AVX2-NEXT: testb $2, %al
767 ; AVX2-NEXT: je .LBB3_4
768 ; AVX2-NEXT: # %bb.3: # %cond.load1
769 ; AVX2-NEXT: vpextrq $1, %xmm5, %rcx
770 ; AVX2-NEXT: vpinsrb $1, (%rcx), %xmm3, %xmm3
771 ; AVX2-NEXT: .LBB3_4: # %else2
772 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
773 ; AVX2-NEXT: testb $4, %al
774 ; AVX2-NEXT: vextracti128 $1, %ymm5, %xmm0
775 ; AVX2-NEXT: je .LBB3_6
776 ; AVX2-NEXT: # %bb.5: # %cond.load4
777 ; AVX2-NEXT: vmovq %xmm0, %rcx
778 ; AVX2-NEXT: vpinsrb $2, (%rcx), %xmm3, %xmm3
779 ; AVX2-NEXT: .LBB3_6: # %else5
780 ; AVX2-NEXT: vpmovsxdq %xmm2, %ymm2
781 ; AVX2-NEXT: testb $8, %al
782 ; AVX2-NEXT: je .LBB3_8
783 ; AVX2-NEXT: # %bb.7: # %cond.load7
784 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
785 ; AVX2-NEXT: vpinsrb $3, (%rcx), %xmm3, %xmm3
786 ; AVX2-NEXT: .LBB3_8: # %else8
787 ; AVX2-NEXT: vpaddq %ymm2, %ymm4, %ymm0
788 ; AVX2-NEXT: testb $16, %al
789 ; AVX2-NEXT: je .LBB3_10
790 ; AVX2-NEXT: # %bb.9: # %cond.load10
791 ; AVX2-NEXT: vmovq %xmm0, %rcx
792 ; AVX2-NEXT: vpinsrb $4, (%rcx), %xmm3, %xmm3
793 ; AVX2-NEXT: .LBB3_10: # %else11
794 ; AVX2-NEXT: testb $32, %al
795 ; AVX2-NEXT: je .LBB3_12
796 ; AVX2-NEXT: # %bb.11: # %cond.load13
797 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
798 ; AVX2-NEXT: vpinsrb $5, (%rcx), %xmm3, %xmm3
799 ; AVX2-NEXT: .LBB3_12: # %else14
800 ; AVX2-NEXT: testb $64, %al
801 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
802 ; AVX2-NEXT: je .LBB3_14
803 ; AVX2-NEXT: # %bb.13: # %cond.load16
804 ; AVX2-NEXT: vmovq %xmm0, %rcx
805 ; AVX2-NEXT: vpinsrb $6, (%rcx), %xmm3, %xmm3
806 ; AVX2-NEXT: .LBB3_14: # %else17
807 ; AVX2-NEXT: vpmovsxdq %xmm1, %ymm2
808 ; AVX2-NEXT: testb $-128, %al
809 ; AVX2-NEXT: je .LBB3_16
810 ; AVX2-NEXT: # %bb.15: # %cond.load19
811 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
812 ; AVX2-NEXT: vpinsrb $7, (%rcx), %xmm3, %xmm3
813 ; AVX2-NEXT: .LBB3_16: # %else20
814 ; AVX2-NEXT: vpaddq %ymm2, %ymm4, %ymm0
815 ; AVX2-NEXT: testl $256, %eax # imm = 0x100
816 ; AVX2-NEXT: je .LBB3_18
817 ; AVX2-NEXT: # %bb.17: # %cond.load22
818 ; AVX2-NEXT: vmovq %xmm0, %rcx
819 ; AVX2-NEXT: vpinsrb $8, (%rcx), %xmm3, %xmm3
820 ; AVX2-NEXT: .LBB3_18: # %else23
821 ; AVX2-NEXT: testl $512, %eax # imm = 0x200
822 ; AVX2-NEXT: je .LBB3_20
823 ; AVX2-NEXT: # %bb.19: # %cond.load25
824 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
825 ; AVX2-NEXT: vpinsrb $9, (%rcx), %xmm3, %xmm3
826 ; AVX2-NEXT: .LBB3_20: # %else26
827 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm1
828 ; AVX2-NEXT: testl $1024, %eax # imm = 0x400
829 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
830 ; AVX2-NEXT: je .LBB3_22
831 ; AVX2-NEXT: # %bb.21: # %cond.load28
832 ; AVX2-NEXT: vmovq %xmm0, %rcx
833 ; AVX2-NEXT: vpinsrb $10, (%rcx), %xmm3, %xmm3
834 ; AVX2-NEXT: .LBB3_22: # %else29
835 ; AVX2-NEXT: vpmovsxdq %xmm1, %ymm1
836 ; AVX2-NEXT: testl $2048, %eax # imm = 0x800
837 ; AVX2-NEXT: je .LBB3_24
838 ; AVX2-NEXT: # %bb.23: # %cond.load31
839 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
840 ; AVX2-NEXT: vpinsrb $11, (%rcx), %xmm3, %xmm3
841 ; AVX2-NEXT: .LBB3_24: # %else32
842 ; AVX2-NEXT: vpaddq %ymm1, %ymm4, %ymm0
843 ; AVX2-NEXT: testl $4096, %eax # imm = 0x1000
844 ; AVX2-NEXT: je .LBB3_26
845 ; AVX2-NEXT: # %bb.25: # %cond.load34
846 ; AVX2-NEXT: vmovq %xmm0, %rcx
847 ; AVX2-NEXT: vpinsrb $12, (%rcx), %xmm3, %xmm3
848 ; AVX2-NEXT: .LBB3_26: # %else35
849 ; AVX2-NEXT: testl $8192, %eax # imm = 0x2000
850 ; AVX2-NEXT: je .LBB3_28
851 ; AVX2-NEXT: # %bb.27: # %cond.load37
852 ; AVX2-NEXT: vpextrq $1, %xmm0, %rcx
853 ; AVX2-NEXT: vpinsrb $13, (%rcx), %xmm3, %xmm3
854 ; AVX2-NEXT: .LBB3_28: # %else38
855 ; AVX2-NEXT: testl $16384, %eax # imm = 0x4000
856 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0
857 ; AVX2-NEXT: jne .LBB3_29
858 ; AVX2-NEXT: # %bb.30: # %else41
859 ; AVX2-NEXT: testl $32768, %eax # imm = 0x8000
860 ; AVX2-NEXT: jne .LBB3_31
861 ; AVX2-NEXT: .LBB3_32: # %else44
862 ; AVX2-NEXT: vmovdqa %xmm3, %xmm0
863 ; AVX2-NEXT: vzeroupper
864 ; AVX2-NEXT: retq
865 ; AVX2-NEXT: .LBB3_29: # %cond.load40
866 ; AVX2-NEXT: vmovq %xmm0, %rcx
867 ; AVX2-NEXT: vpinsrb $14, (%rcx), %xmm3, %xmm3
868 ; AVX2-NEXT: testl $32768, %eax # imm = 0x8000
869 ; AVX2-NEXT: je .LBB3_32
870 ; AVX2-NEXT: .LBB3_31: # %cond.load43
871 ; AVX2-NEXT: vpextrq $1, %xmm0, %rax
872 ; AVX2-NEXT: vpinsrb $15, (%rax), %xmm3, %xmm3
873 ; AVX2-NEXT: vmovdqa %xmm3, %xmm0
874 ; AVX2-NEXT: vzeroupper
875 ; AVX2-NEXT: retq
1479 ; AVX2-LABEL: gather_v8i32_v8i32:
1480 ; AVX2: # %bb.0:
1481 ; AVX2-NEXT: movl $c, %eax
1482 ; AVX2-NEXT: vmovq %rax, %xmm1
1483 ; AVX2-NEXT: vpbroadcastq %xmm1, %ymm2
1484 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm1 = [12,12,12,12]
1485 ; AVX2-NEXT: vpaddq %ymm1, %ymm2, %ymm3
1486 ; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
1487 ; AVX2-NEXT: vpcmpeqd %ymm1, %ymm0, %ymm1
1488 ; AVX2-NEXT: vmovmskps %ymm1, %eax
1489 ; AVX2-NEXT: testb $1, %al
1490 ; AVX2-NEXT: # implicit-def: $ymm1
1491 ; AVX2-NEXT: je .LBB4_2
1492 ; AVX2-NEXT: # %bb.1: # %cond.load
1493 ; AVX2-NEXT: vmovq %xmm3, %rcx
1494 ; AVX2-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
1495 ; AVX2-NEXT: .LBB4_2: # %else
1496 ; AVX2-NEXT: testb $2, %al
1497 ; AVX2-NEXT: je .LBB4_4
1498 ; AVX2-NEXT: # %bb.3: # %cond.load1
1499 ; AVX2-NEXT: vpextrq $1, %xmm3, %rcx
1500 ; AVX2-NEXT: vpinsrd $1, (%rcx), %xmm1, %xmm4
1501 ; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm4[0,1,2,3],ymm1[4,5,6,7]
1502 ; AVX2-NEXT: .LBB4_4: # %else2
1503 ; AVX2-NEXT: testb $4, %al
1504 ; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm4
1505 ; AVX2-NEXT: jne .LBB4_5
1506 ; AVX2-NEXT: # %bb.6: # %else5
1507 ; AVX2-NEXT: testb $8, %al
1508 ; AVX2-NEXT: jne .LBB4_7
1509 ; AVX2-NEXT: .LBB4_8: # %else8
1510 ; AVX2-NEXT: testb $16, %al
1511 ; AVX2-NEXT: jne .LBB4_9
1512 ; AVX2-NEXT: .LBB4_10: # %else11
1513 ; AVX2-NEXT: testb $32, %al
1514 ; AVX2-NEXT: jne .LBB4_11
1515 ; AVX2-NEXT: .LBB4_12: # %else14
1516 ; AVX2-NEXT: testb $64, %al
1517 ; AVX2-NEXT: jne .LBB4_13
1518 ; AVX2-NEXT: .LBB4_14: # %else17
1519 ; AVX2-NEXT: testb $-128, %al
1520 ; AVX2-NEXT: je .LBB4_16
1521 ; AVX2-NEXT: .LBB4_15: # %cond.load19
1522 ; AVX2-NEXT: vpextrq $1, %xmm4, %rax
1523 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
1524 ; AVX2-NEXT: vpinsrd $3, (%rax), %xmm3, %xmm3
1525 ; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1
1526 ; AVX2-NEXT: .LBB4_16: # %else20
1527 ; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4
1528 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm3 = [28,28,28,28]
1529 ; AVX2-NEXT: vpaddq %ymm3, %ymm2, %ymm3
1530 ; AVX2-NEXT: vpcmpeqd %ymm4, %ymm0, %ymm2
1531 ; AVX2-NEXT: vmovmskps %ymm2, %eax
1532 ; AVX2-NEXT: testb $1, %al
1533 ; AVX2-NEXT: # implicit-def: $ymm2
1534 ; AVX2-NEXT: je .LBB4_18
1535 ; AVX2-NEXT: # %bb.17: # %cond.load23
1536 ; AVX2-NEXT: vmovq %xmm3, %rcx
1537 ; AVX2-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero
1538 ; AVX2-NEXT: .LBB4_18: # %else27
1539 ; AVX2-NEXT: testb $2, %al
1540 ; AVX2-NEXT: je .LBB4_20
1541 ; AVX2-NEXT: # %bb.19: # %cond.load29
1542 ; AVX2-NEXT: vpextrq $1, %xmm3, %rcx
1543 ; AVX2-NEXT: vpinsrd $1, (%rcx), %xmm2, %xmm4
1544 ; AVX2-NEXT: vpblendd {{.*#+}} ymm2 = ymm4[0,1,2,3],ymm2[4,5,6,7]
1545 ; AVX2-NEXT: .LBB4_20: # %else33
1546 ; AVX2-NEXT: testb $4, %al
1547 ; AVX2-NEXT: vextracti128 $1, %ymm3, %xmm4
1548 ; AVX2-NEXT: jne .LBB4_21
1549 ; AVX2-NEXT: # %bb.22: # %else39
1550 ; AVX2-NEXT: testb $8, %al
1551 ; AVX2-NEXT: jne .LBB4_23
1552 ; AVX2-NEXT: .LBB4_24: # %else45
1553 ; AVX2-NEXT: testb $16, %al
1554 ; AVX2-NEXT: jne .LBB4_25
1555 ; AVX2-NEXT: .LBB4_26: # %else51
1556 ; AVX2-NEXT: testb $32, %al
1557 ; AVX2-NEXT: jne .LBB4_27
1558 ; AVX2-NEXT: .LBB4_28: # %else57
1559 ; AVX2-NEXT: testb $64, %al
1560 ; AVX2-NEXT: jne .LBB4_29
1561 ; AVX2-NEXT: .LBB4_30: # %else63
1562 ; AVX2-NEXT: testb $-128, %al
1563 ; AVX2-NEXT: je .LBB4_32
1564 ; AVX2-NEXT: .LBB4_31: # %cond.load65
1565 ; AVX2-NEXT: vpextrq $1, %xmm4, %rax
1566 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm5
1567 ; AVX2-NEXT: vpinsrd $3, (%rax), %xmm5, %xmm5
1568 ; AVX2-NEXT: vinserti128 $1, %xmm5, %ymm2, %ymm2
1569 ; AVX2-NEXT: .LBB4_32: # %else69
1570 ; AVX2-NEXT: vpxor %xmm5, %xmm5, %xmm5
1571 ; AVX2-NEXT: vpcmpeqd %ymm5, %ymm0, %ymm0
1572 ; AVX2-NEXT: vmovmskps %ymm0, %eax
1573 ; AVX2-NEXT: testb $1, %al
1574 ; AVX2-NEXT: # implicit-def: $ymm0
1575 ; AVX2-NEXT: jne .LBB4_33
1576 ; AVX2-NEXT: # %bb.34: # %else76
1577 ; AVX2-NEXT: testb $2, %al
1578 ; AVX2-NEXT: jne .LBB4_35
1579 ; AVX2-NEXT: .LBB4_36: # %else82
1580 ; AVX2-NEXT: testb $4, %al
1581 ; AVX2-NEXT: jne .LBB4_37
1582 ; AVX2-NEXT: .LBB4_38: # %else88
1583 ; AVX2-NEXT: testb $8, %al
1584 ; AVX2-NEXT: jne .LBB4_39
1585 ; AVX2-NEXT: .LBB4_40: # %else94
1586 ; AVX2-NEXT: testb $16, %al
1587 ; AVX2-NEXT: jne .LBB4_41
1588 ; AVX2-NEXT: .LBB4_42: # %else100
1589 ; AVX2-NEXT: testb $32, %al
1590 ; AVX2-NEXT: jne .LBB4_43
1591 ; AVX2-NEXT: .LBB4_44: # %else106
1592 ; AVX2-NEXT: testb $64, %al
1593 ; AVX2-NEXT: je .LBB4_46
1594 ; AVX2-NEXT: .LBB4_45: # %cond.load108
1595 ; AVX2-NEXT: vmovq %xmm4, %rcx
1596 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
1597 ; AVX2-NEXT: vpinsrd $2, (%rcx), %xmm3, %xmm3
1598 ; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0
1599 ; AVX2-NEXT: .LBB4_46: # %else112
1600 ; AVX2-NEXT: vpaddd %ymm2, %ymm1, %ymm1
1601 ; AVX2-NEXT: testb $-128, %al
1602 ; AVX2-NEXT: je .LBB4_48
1603 ; AVX2-NEXT: # %bb.47: # %cond.load114
1604 ; AVX2-NEXT: vpextrq $1, %xmm4, %rax
1605 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm2
1606 ; AVX2-NEXT: vpinsrd $3, (%rax), %xmm2, %xmm2
1607 ; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
1608 ; AVX2-NEXT: .LBB4_48: # %else118
1609 ; AVX2-NEXT: vpaddd %ymm0, %ymm1, %ymm0
1610 ; AVX2-NEXT: retq
1611 ; AVX2-NEXT: .LBB4_5: # %cond.load4
1612 ; AVX2-NEXT: vmovq %xmm4, %rcx
1613 ; AVX2-NEXT: vpinsrd $2, (%rcx), %xmm1, %xmm5
1614 ; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm5[0,1,2,3],ymm1[4,5,6,7]
1615 ; AVX2-NEXT: testb $8, %al
1616 ; AVX2-NEXT: je .LBB4_8
1617 ; AVX2-NEXT: .LBB4_7: # %cond.load7
1618 ; AVX2-NEXT: vpextrq $1, %xmm4, %rcx
1619 ; AVX2-NEXT: vpinsrd $3, (%rcx), %xmm1, %xmm5
1620 ; AVX2-NEXT: vpblendd {{.*#+}} ymm1 = ymm5[0,1,2,3],ymm1[4,5,6,7]
1621 ; AVX2-NEXT: testb $16, %al
1622 ; AVX2-NEXT: je .LBB4_10
1623 ; AVX2-NEXT: .LBB4_9: # %cond.load10
1624 ; AVX2-NEXT: vmovq %xmm3, %rcx
1625 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm5
1626 ; AVX2-NEXT: vpinsrd $0, (%rcx), %xmm5, %xmm5
1627 ; AVX2-NEXT: vinserti128 $1, %xmm5, %ymm1, %ymm1
1628 ; AVX2-NEXT: testb $32, %al
1629 ; AVX2-NEXT: je .LBB4_12
1630 ; AVX2-NEXT: .LBB4_11: # %cond.load13
1631 ; AVX2-NEXT: vpextrq $1, %xmm3, %rcx
1632 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
1633 ; AVX2-NEXT: vpinsrd $1, (%rcx), %xmm3, %xmm3
1634 ; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1
1635 ; AVX2-NEXT: testb $64, %al
1636 ; AVX2-NEXT: je .LBB4_14
1637 ; AVX2-NEXT: .LBB4_13: # %cond.load16
1638 ; AVX2-NEXT: vmovq %xmm4, %rcx
1639 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm3
1640 ; AVX2-NEXT: vpinsrd $2, (%rcx), %xmm3, %xmm3
1641 ; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1
1642 ; AVX2-NEXT: testb $-128, %al
1643 ; AVX2-NEXT: jne .LBB4_15
1644 ; AVX2-NEXT: jmp .LBB4_16
1645 ; AVX2-NEXT: .LBB4_21: # %cond.load35
1646 ; AVX2-NEXT: vmovq %xmm4, %rcx
1647 ; AVX2-NEXT: vpinsrd $2, (%rcx), %xmm2, %xmm5
1648 ; AVX2-NEXT: vpblendd {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
1649 ; AVX2-NEXT: testb $8, %al
1650 ; AVX2-NEXT: je .LBB4_24
1651 ; AVX2-NEXT: .LBB4_23: # %cond.load41
1652 ; AVX2-NEXT: vpextrq $1, %xmm4, %rcx
1653 ; AVX2-NEXT: vpinsrd $3, (%rcx), %xmm2, %xmm5
1654 ; AVX2-NEXT: vpblendd {{.*#+}} ymm2 = ymm5[0,1,2,3],ymm2[4,5,6,7]
1655 ; AVX2-NEXT: testb $16, %al
1656 ; AVX2-NEXT: je .LBB4_26
1657 ; AVX2-NEXT: .LBB4_25: # %cond.load47
1658 ; AVX2-NEXT: vmovq %xmm3, %rcx
1659 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm5
1660 ; AVX2-NEXT: vpinsrd $0, (%rcx), %xmm5, %xmm5
1661 ; AVX2-NEXT: vinserti128 $1, %xmm5, %ymm2, %ymm2
1662 ; AVX2-NEXT: testb $32, %al
1663 ; AVX2-NEXT: je .LBB4_28
1664 ; AVX2-NEXT: .LBB4_27: # %cond.load53
1665 ; AVX2-NEXT: vpextrq $1, %xmm3, %rcx
1666 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm5
1667 ; AVX2-NEXT: vpinsrd $1, (%rcx), %xmm5, %xmm5
1668 ; AVX2-NEXT: vinserti128 $1, %xmm5, %ymm2, %ymm2
1669 ; AVX2-NEXT: testb $64, %al
1670 ; AVX2-NEXT: je .LBB4_30
1671 ; AVX2-NEXT: .LBB4_29: # %cond.load59
1672 ; AVX2-NEXT: vmovq %xmm4, %rcx
1673 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm5
1674 ; AVX2-NEXT: vpinsrd $2, (%rcx), %xmm5, %xmm5
1675 ; AVX2-NEXT: vinserti128 $1, %xmm5, %ymm2, %ymm2
1676 ; AVX2-NEXT: testb $-128, %al
1677 ; AVX2-NEXT: jne .LBB4_31
1678 ; AVX2-NEXT: jmp .LBB4_32
1679 ; AVX2-NEXT: .LBB4_33: # %cond.load72
1680 ; AVX2-NEXT: vmovq %xmm3, %rcx
1681 ; AVX2-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
1682 ; AVX2-NEXT: testb $2, %al
1683 ; AVX2-NEXT: je .LBB4_36
1684 ; AVX2-NEXT: .LBB4_35: # %cond.load78
1685 ; AVX2-NEXT: vpextrq $1, %xmm3, %rcx
1686 ; AVX2-NEXT: vpinsrd $1, (%rcx), %xmm0, %xmm5
1687 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm5[0,1,2,3],ymm0[4,5,6,7]
1688 ; AVX2-NEXT: testb $4, %al
1689 ; AVX2-NEXT: je .LBB4_38
1690 ; AVX2-NEXT: .LBB4_37: # %cond.load84
1691 ; AVX2-NEXT: vmovq %xmm4, %rcx
1692 ; AVX2-NEXT: vpinsrd $2, (%rcx), %xmm0, %xmm5
1693 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm5[0,1,2,3],ymm0[4,5,6,7]
1694 ; AVX2-NEXT: testb $8, %al
1695 ; AVX2-NEXT: je .LBB4_40
1696 ; AVX2-NEXT: .LBB4_39: # %cond.load90
1697 ; AVX2-NEXT: vpextrq $1, %xmm4, %rcx
1698 ; AVX2-NEXT: vpinsrd $3, (%rcx), %xmm0, %xmm5
1699 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm5[0,1,2,3],ymm0[4,5,6,7]
1700 ; AVX2-NEXT: testb $16, %al
1701 ; AVX2-NEXT: je .LBB4_42
1702 ; AVX2-NEXT: .LBB4_41: # %cond.load96
1703 ; AVX2-NEXT: vmovq %xmm3, %rcx
1704 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm5
1705 ; AVX2-NEXT: vpinsrd $0, (%rcx), %xmm5, %xmm5
1706 ; AVX2-NEXT: vinserti128 $1, %xmm5, %ymm0, %ymm0
1707 ; AVX2-NEXT: testb $32, %al
1708 ; AVX2-NEXT: je .LBB4_44
1709 ; AVX2-NEXT: .LBB4_43: # %cond.load102
1710 ; AVX2-NEXT: vpextrq $1, %xmm3, %rcx
1711 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
1712 ; AVX2-NEXT: vpinsrd $1, (%rcx), %xmm3, %xmm3
1713 ; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0
1714 ; AVX2-NEXT: testb $64, %al
1715 ; AVX2-NEXT: jne .LBB4_45
1716 ; AVX2-NEXT: jmp .LBB4_46