llvm.org GIT mirror llvm / 8259353
[X86][AVX] createVariablePermute - use PSHUFB+PCMPGT+SELECT for v32i8 variable permutes Same as the VPERMILPS/VPERMILPD approach for v8f32/v4f64 cases, rely on PSHUFB using bits[3:0] for indexing - we can ignore the sign bit (zero element) as those index vector values are considered undefined. The select between the lo/hi permute results based on the index size. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327242 91177308-0d34-0410-b5e6-96231b3b80d8 Simon Pilgrim 2 years ago
2 changed file(s) with 93 addition(s) and 1198 deletion(s). Raw diff Collapse all Expand all
80268026 ISD::CONCAT_VECTORS, DL, VT,
80278027 DAG.getNode(X86ISD::VPPERM, DL, MVT::v16i8, LoSrc, HiSrc, LoIdx),
80288028 DAG.getNode(X86ISD::VPPERM, DL, MVT::v16i8, LoSrc, HiSrc, HiIdx));
8029 } else if (Subtarget.hasAVX()) {
8030 SDValue Lo = extract128BitVector(SrcVec, 0, DAG, DL);
8031 SDValue Hi = extract128BitVector(SrcVec, 16, DAG, DL);
8032 SDValue LoLo = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, Lo, Lo);
8033 SDValue HiHi = DAG.getNode(ISD::CONCAT_VECTORS, DL, VT, Hi, Hi);
8034 auto PSHUFBBuilder = [](SelectionDAG &DAG, const SDLoc &DL,
8035 ArrayRef Ops) {
8036 // Permute Lo and Hi and then select based on index range.
8037 // This works as SHUFB uses bits[3:0] to permute elements and we don't
8038 // care about the bit[7] as its just an index vector.
8039 SDValue Idx = Ops[2];
8040 EVT VT = Idx.getValueType();
8041 return DAG.getSelectCC(DL, Idx, DAG.getConstant(15, DL, VT),
8042 DAG.getNode(X86ISD::PSHUFB, DL, VT, Ops[1], Idx),
8043 DAG.getNode(X86ISD::PSHUFB, DL, VT, Ops[0], Idx),
8044 ISD::CondCode::SETGT);
8045 };
8046 SDValue Ops[] = {LoLo, HiHi, IndicesVec};
8047 return SplitOpsAndApply(DAG, Subtarget, DL, MVT::v32i8, Ops,
8048 PSHUFBBuilder);
80298049 }
80308050 break;
80318051 case MVT::v16i16:
540540 ;
541541 ; AVX1-LABEL: var_shuffle_v32i8:
542542 ; AVX1: # %bb.0:
543 ; AVX1-NEXT: pushq %rbp
544 ; AVX1-NEXT: movq %rsp, %rbp
545 ; AVX1-NEXT: andq $-32, %rsp
546 ; AVX1-NEXT: subq $64, %rsp
547543 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
548 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
549 ; AVX1-NEXT: vmovaps %ymm0, (%rsp)
550 ; AVX1-NEXT: andl $31, %eax
551 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
552 ; AVX1-NEXT: vmovd %eax, %xmm0
553 ; AVX1-NEXT: vpextrb $1, %xmm2, %eax
554 ; AVX1-NEXT: andl $31, %eax
555 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
556 ; AVX1-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
557 ; AVX1-NEXT: vpextrb $2, %xmm2, %eax
558 ; AVX1-NEXT: andl $31, %eax
559 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
560 ; AVX1-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
561 ; AVX1-NEXT: vpextrb $3, %xmm2, %eax
562 ; AVX1-NEXT: andl $31, %eax
563 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
564 ; AVX1-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
565 ; AVX1-NEXT: vpextrb $4, %xmm2, %eax
566 ; AVX1-NEXT: andl $31, %eax
567 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
568 ; AVX1-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
569 ; AVX1-NEXT: vpextrb $5, %xmm2, %eax
570 ; AVX1-NEXT: andl $31, %eax
571 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
572 ; AVX1-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
573 ; AVX1-NEXT: vpextrb $6, %xmm2, %eax
574 ; AVX1-NEXT: andl $31, %eax
575 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
576 ; AVX1-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
577 ; AVX1-NEXT: vpextrb $7, %xmm2, %eax
578 ; AVX1-NEXT: andl $31, %eax
579 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
580 ; AVX1-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
581 ; AVX1-NEXT: vpextrb $8, %xmm2, %eax
582 ; AVX1-NEXT: andl $31, %eax
583 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
584 ; AVX1-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
585 ; AVX1-NEXT: vpextrb $9, %xmm2, %eax
586 ; AVX1-NEXT: andl $31, %eax
587 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
588 ; AVX1-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
589 ; AVX1-NEXT: vpextrb $10, %xmm2, %eax
590 ; AVX1-NEXT: andl $31, %eax
591 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
592 ; AVX1-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
593 ; AVX1-NEXT: vpextrb $11, %xmm2, %eax
594 ; AVX1-NEXT: andl $31, %eax
595 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
596 ; AVX1-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
597 ; AVX1-NEXT: vpextrb $12, %xmm2, %eax
598 ; AVX1-NEXT: andl $31, %eax
599 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
600 ; AVX1-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
601 ; AVX1-NEXT: vpextrb $13, %xmm2, %eax
602 ; AVX1-NEXT: andl $31, %eax
603 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
604 ; AVX1-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
605 ; AVX1-NEXT: vpextrb $14, %xmm2, %eax
606 ; AVX1-NEXT: andl $31, %eax
607 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
608 ; AVX1-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
609 ; AVX1-NEXT: vpextrb $15, %xmm2, %eax
610 ; AVX1-NEXT: andl $31, %eax
611 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
612 ; AVX1-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
613 ; AVX1-NEXT: vpextrb $0, %xmm1, %eax
614 ; AVX1-NEXT: andl $31, %eax
615 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
616 ; AVX1-NEXT: vmovd %eax, %xmm2
617 ; AVX1-NEXT: vpextrb $1, %xmm1, %eax
618 ; AVX1-NEXT: andl $31, %eax
619 ; AVX1-NEXT: vpinsrb $1, (%rsp,%rax), %xmm2, %xmm2
620 ; AVX1-NEXT: vpextrb $2, %xmm1, %eax
621 ; AVX1-NEXT: andl $31, %eax
622 ; AVX1-NEXT: vpinsrb $2, (%rsp,%rax), %xmm2, %xmm2
623 ; AVX1-NEXT: vpextrb $3, %xmm1, %eax
624 ; AVX1-NEXT: andl $31, %eax
625 ; AVX1-NEXT: vpinsrb $3, (%rsp,%rax), %xmm2, %xmm2
626 ; AVX1-NEXT: vpextrb $4, %xmm1, %eax
627 ; AVX1-NEXT: andl $31, %eax
628 ; AVX1-NEXT: vpinsrb $4, (%rsp,%rax), %xmm2, %xmm2
629 ; AVX1-NEXT: vpextrb $5, %xmm1, %eax
630 ; AVX1-NEXT: andl $31, %eax
631 ; AVX1-NEXT: vpinsrb $5, (%rsp,%rax), %xmm2, %xmm2
632 ; AVX1-NEXT: vpextrb $6, %xmm1, %eax
633 ; AVX1-NEXT: andl $31, %eax
634 ; AVX1-NEXT: vpinsrb $6, (%rsp,%rax), %xmm2, %xmm2
635 ; AVX1-NEXT: vpextrb $7, %xmm1, %eax
636 ; AVX1-NEXT: andl $31, %eax
637 ; AVX1-NEXT: vpinsrb $7, (%rsp,%rax), %xmm2, %xmm2
638 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
639 ; AVX1-NEXT: andl $31, %eax
640 ; AVX1-NEXT: vpinsrb $8, (%rsp,%rax), %xmm2, %xmm2
641 ; AVX1-NEXT: vpextrb $9, %xmm1, %eax
642 ; AVX1-NEXT: andl $31, %eax
643 ; AVX1-NEXT: vpinsrb $9, (%rsp,%rax), %xmm2, %xmm2
644 ; AVX1-NEXT: vpextrb $10, %xmm1, %eax
645 ; AVX1-NEXT: andl $31, %eax
646 ; AVX1-NEXT: vpinsrb $10, (%rsp,%rax), %xmm2, %xmm2
647 ; AVX1-NEXT: vpextrb $11, %xmm1, %eax
648 ; AVX1-NEXT: andl $31, %eax
649 ; AVX1-NEXT: vpinsrb $11, (%rsp,%rax), %xmm2, %xmm2
650 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
651 ; AVX1-NEXT: andl $31, %eax
652 ; AVX1-NEXT: vpinsrb $12, (%rsp,%rax), %xmm2, %xmm2
653 ; AVX1-NEXT: vpextrb $13, %xmm1, %eax
654 ; AVX1-NEXT: andl $31, %eax
655 ; AVX1-NEXT: vpinsrb $13, (%rsp,%rax), %xmm2, %xmm2
656 ; AVX1-NEXT: vpextrb $14, %xmm1, %eax
657 ; AVX1-NEXT: andl $31, %eax
658 ; AVX1-NEXT: vpinsrb $14, (%rsp,%rax), %xmm2, %xmm2
659 ; AVX1-NEXT: vpextrb $15, %xmm1, %eax
660 ; AVX1-NEXT: andl $31, %eax
661 ; AVX1-NEXT: movzbl (%rsp,%rax), %eax
662 ; AVX1-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
663 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
664 ; AVX1-NEXT: movq %rbp, %rsp
665 ; AVX1-NEXT: popq %rbp
544 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
545 ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm2, %xmm4
546 ; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm5
547 ; AVX1-NEXT: vpshufb %xmm2, %xmm5, %xmm6
548 ; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm2
549 ; AVX1-NEXT: vpblendvb %xmm4, %xmm6, %xmm2, %xmm2
550 ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm3
551 ; AVX1-NEXT: vpshufb %xmm1, %xmm5, %xmm4
552 ; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0
553 ; AVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm0, %xmm0
554 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
666555 ; AVX1-NEXT: retq
667556 ;
668557 ; AVX2-LABEL: var_shuffle_v32i8:
669558 ; AVX2: # %bb.0:
670 ; AVX2-NEXT: pushq %rbp
671 ; AVX2-NEXT: movq %rsp, %rbp
672 ; AVX2-NEXT: andq $-32, %rsp
673 ; AVX2-NEXT: subq $64, %rsp
674 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
675 ; AVX2-NEXT: vpextrb $0, %xmm2, %eax
676 ; AVX2-NEXT: vmovaps %ymm0, (%rsp)
677 ; AVX2-NEXT: andl $31, %eax
678 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
679 ; AVX2-NEXT: vmovd %eax, %xmm0
680 ; AVX2-NEXT: vpextrb $1, %xmm2, %eax
681 ; AVX2-NEXT: andl $31, %eax
682 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
683 ; AVX2-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
684 ; AVX2-NEXT: vpextrb $2, %xmm2, %eax
685 ; AVX2-NEXT: andl $31, %eax
686 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
687 ; AVX2-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
688 ; AVX2-NEXT: vpextrb $3, %xmm2, %eax
689 ; AVX2-NEXT: andl $31, %eax
690 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
691 ; AVX2-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
692 ; AVX2-NEXT: vpextrb $4, %xmm2, %eax
693 ; AVX2-NEXT: andl $31, %eax
694 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
695 ; AVX2-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
696 ; AVX2-NEXT: vpextrb $5, %xmm2, %eax
697 ; AVX2-NEXT: andl $31, %eax
698 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
699 ; AVX2-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
700 ; AVX2-NEXT: vpextrb $6, %xmm2, %eax
701 ; AVX2-NEXT: andl $31, %eax
702 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
703 ; AVX2-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
704 ; AVX2-NEXT: vpextrb $7, %xmm2, %eax
705 ; AVX2-NEXT: andl $31, %eax
706 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
707 ; AVX2-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
708 ; AVX2-NEXT: vpextrb $8, %xmm2, %eax
709 ; AVX2-NEXT: andl $31, %eax
710 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
711 ; AVX2-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
712 ; AVX2-NEXT: vpextrb $9, %xmm2, %eax
713 ; AVX2-NEXT: andl $31, %eax
714 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
715 ; AVX2-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
716 ; AVX2-NEXT: vpextrb $10, %xmm2, %eax
717 ; AVX2-NEXT: andl $31, %eax
718 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
719 ; AVX2-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
720 ; AVX2-NEXT: vpextrb $11, %xmm2, %eax
721 ; AVX2-NEXT: andl $31, %eax
722 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
723 ; AVX2-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
724 ; AVX2-NEXT: vpextrb $12, %xmm2, %eax
725 ; AVX2-NEXT: andl $31, %eax
726 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
727 ; AVX2-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
728 ; AVX2-NEXT: vpextrb $13, %xmm2, %eax
729 ; AVX2-NEXT: andl $31, %eax
730 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
731 ; AVX2-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
732 ; AVX2-NEXT: vpextrb $14, %xmm2, %eax
733 ; AVX2-NEXT: andl $31, %eax
734 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
735 ; AVX2-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
736 ; AVX2-NEXT: vpextrb $15, %xmm2, %eax
737 ; AVX2-NEXT: andl $31, %eax
738 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
739 ; AVX2-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
740 ; AVX2-NEXT: vpextrb $0, %xmm1, %eax
741 ; AVX2-NEXT: andl $31, %eax
742 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
743 ; AVX2-NEXT: vmovd %eax, %xmm2
744 ; AVX2-NEXT: vpextrb $1, %xmm1, %eax
745 ; AVX2-NEXT: andl $31, %eax
746 ; AVX2-NEXT: vpinsrb $1, (%rsp,%rax), %xmm2, %xmm2
747 ; AVX2-NEXT: vpextrb $2, %xmm1, %eax
748 ; AVX2-NEXT: andl $31, %eax
749 ; AVX2-NEXT: vpinsrb $2, (%rsp,%rax), %xmm2, %xmm2
750 ; AVX2-NEXT: vpextrb $3, %xmm1, %eax
751 ; AVX2-NEXT: andl $31, %eax
752 ; AVX2-NEXT: vpinsrb $3, (%rsp,%rax), %xmm2, %xmm2
753 ; AVX2-NEXT: vpextrb $4, %xmm1, %eax
754 ; AVX2-NEXT: andl $31, %eax
755 ; AVX2-NEXT: vpinsrb $4, (%rsp,%rax), %xmm2, %xmm2
756 ; AVX2-NEXT: vpextrb $5, %xmm1, %eax
757 ; AVX2-NEXT: andl $31, %eax
758 ; AVX2-NEXT: vpinsrb $5, (%rsp,%rax), %xmm2, %xmm2
759 ; AVX2-NEXT: vpextrb $6, %xmm1, %eax
760 ; AVX2-NEXT: andl $31, %eax
761 ; AVX2-NEXT: vpinsrb $6, (%rsp,%rax), %xmm2, %xmm2
762 ; AVX2-NEXT: vpextrb $7, %xmm1, %eax
763 ; AVX2-NEXT: andl $31, %eax
764 ; AVX2-NEXT: vpinsrb $7, (%rsp,%rax), %xmm2, %xmm2
765 ; AVX2-NEXT: vpextrb $8, %xmm1, %eax
766 ; AVX2-NEXT: andl $31, %eax
767 ; AVX2-NEXT: vpinsrb $8, (%rsp,%rax), %xmm2, %xmm2
768 ; AVX2-NEXT: vpextrb $9, %xmm1, %eax
769 ; AVX2-NEXT: andl $31, %eax
770 ; AVX2-NEXT: vpinsrb $9, (%rsp,%rax), %xmm2, %xmm2
771 ; AVX2-NEXT: vpextrb $10, %xmm1, %eax
772 ; AVX2-NEXT: andl $31, %eax
773 ; AVX2-NEXT: vpinsrb $10, (%rsp,%rax), %xmm2, %xmm2
774 ; AVX2-NEXT: vpextrb $11, %xmm1, %eax
775 ; AVX2-NEXT: andl $31, %eax
776 ; AVX2-NEXT: vpinsrb $11, (%rsp,%rax), %xmm2, %xmm2
777 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
778 ; AVX2-NEXT: andl $31, %eax
779 ; AVX2-NEXT: vpinsrb $12, (%rsp,%rax), %xmm2, %xmm2
780 ; AVX2-NEXT: vpextrb $13, %xmm1, %eax
781 ; AVX2-NEXT: andl $31, %eax
782 ; AVX2-NEXT: vpinsrb $13, (%rsp,%rax), %xmm2, %xmm2
783 ; AVX2-NEXT: vpextrb $14, %xmm1, %eax
784 ; AVX2-NEXT: andl $31, %eax
785 ; AVX2-NEXT: vpinsrb $14, (%rsp,%rax), %xmm2, %xmm2
786 ; AVX2-NEXT: vpextrb $15, %xmm1, %eax
787 ; AVX2-NEXT: andl $31, %eax
788 ; AVX2-NEXT: movzbl (%rsp,%rax), %eax
789 ; AVX2-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
790 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
791 ; AVX2-NEXT: movq %rbp, %rsp
792 ; AVX2-NEXT: popq %rbp
559 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
560 ; AVX2-NEXT: vpshufb %ymm1, %ymm2, %ymm2
561 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm3
562 ; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
563 ; AVX2-NEXT: vpshufb %ymm1, %ymm0, %ymm0
564 ; AVX2-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
565 ; AVX2-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
793566 ; AVX2-NEXT: retq
794567 ;
795568 ; AVX512F-LABEL: var_shuffle_v32i8:
796569 ; AVX512F: # %bb.0:
797 ; AVX512F-NEXT: pushq %rbp
798 ; AVX512F-NEXT: movq %rsp, %rbp
799 ; AVX512F-NEXT: andq $-32, %rsp
800 ; AVX512F-NEXT: subq $64, %rsp
801 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
802 ; AVX512F-NEXT: vpextrb $0, %xmm2, %eax
803 ; AVX512F-NEXT: vmovaps %ymm0, (%rsp)
804 ; AVX512F-NEXT: andl $31, %eax
805 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
806 ; AVX512F-NEXT: vmovd %eax, %xmm0
807 ; AVX512F-NEXT: vpextrb $1, %xmm2, %eax
808 ; AVX512F-NEXT: andl $31, %eax
809 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
810 ; AVX512F-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
811 ; AVX512F-NEXT: vpextrb $2, %xmm2, %eax
812 ; AVX512F-NEXT: andl $31, %eax
813 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
814 ; AVX512F-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
815 ; AVX512F-NEXT: vpextrb $3, %xmm2, %eax
816 ; AVX512F-NEXT: andl $31, %eax
817 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
818 ; AVX512F-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
819 ; AVX512F-NEXT: vpextrb $4, %xmm2, %eax
820 ; AVX512F-NEXT: andl $31, %eax
821 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
822 ; AVX512F-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
823 ; AVX512F-NEXT: vpextrb $5, %xmm2, %eax
824 ; AVX512F-NEXT: andl $31, %eax
825 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
826 ; AVX512F-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
827 ; AVX512F-NEXT: vpextrb $6, %xmm2, %eax
828 ; AVX512F-NEXT: andl $31, %eax
829 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
830 ; AVX512F-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
831 ; AVX512F-NEXT: vpextrb $7, %xmm2, %eax
832 ; AVX512F-NEXT: andl $31, %eax
833 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
834 ; AVX512F-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
835 ; AVX512F-NEXT: vpextrb $8, %xmm2, %eax
836 ; AVX512F-NEXT: andl $31, %eax
837 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
838 ; AVX512F-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
839 ; AVX512F-NEXT: vpextrb $9, %xmm2, %eax
840 ; AVX512F-NEXT: andl $31, %eax
841 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
842 ; AVX512F-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
843 ; AVX512F-NEXT: vpextrb $10, %xmm2, %eax
844 ; AVX512F-NEXT: andl $31, %eax
845 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
846 ; AVX512F-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
847 ; AVX512F-NEXT: vpextrb $11, %xmm2, %eax
848 ; AVX512F-NEXT: andl $31, %eax
849 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
850 ; AVX512F-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
851 ; AVX512F-NEXT: vpextrb $12, %xmm2, %eax
852 ; AVX512F-NEXT: andl $31, %eax
853 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
854 ; AVX512F-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
855 ; AVX512F-NEXT: vpextrb $13, %xmm2, %eax
856 ; AVX512F-NEXT: andl $31, %eax
857 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
858 ; AVX512F-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
859 ; AVX512F-NEXT: vpextrb $14, %xmm2, %eax
860 ; AVX512F-NEXT: andl $31, %eax
861 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
862 ; AVX512F-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
863 ; AVX512F-NEXT: vpextrb $15, %xmm2, %eax
864 ; AVX512F-NEXT: andl $31, %eax
865 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
866 ; AVX512F-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
867 ; AVX512F-NEXT: vpextrb $0, %xmm1, %eax
868 ; AVX512F-NEXT: andl $31, %eax
869 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
870 ; AVX512F-NEXT: vmovd %eax, %xmm2
871 ; AVX512F-NEXT: vpextrb $1, %xmm1, %eax
872 ; AVX512F-NEXT: andl $31, %eax
873 ; AVX512F-NEXT: vpinsrb $1, (%rsp,%rax), %xmm2, %xmm2
874 ; AVX512F-NEXT: vpextrb $2, %xmm1, %eax
875 ; AVX512F-NEXT: andl $31, %eax
876 ; AVX512F-NEXT: vpinsrb $2, (%rsp,%rax), %xmm2, %xmm2
877 ; AVX512F-NEXT: vpextrb $3, %xmm1, %eax
878 ; AVX512F-NEXT: andl $31, %eax
879 ; AVX512F-NEXT: vpinsrb $3, (%rsp,%rax), %xmm2, %xmm2
880 ; AVX512F-NEXT: vpextrb $4, %xmm1, %eax
881 ; AVX512F-NEXT: andl $31, %eax
882 ; AVX512F-NEXT: vpinsrb $4, (%rsp,%rax), %xmm2, %xmm2
883 ; AVX512F-NEXT: vpextrb $5, %xmm1, %eax
884 ; AVX512F-NEXT: andl $31, %eax
885 ; AVX512F-NEXT: vpinsrb $5, (%rsp,%rax), %xmm2, %xmm2
886 ; AVX512F-NEXT: vpextrb $6, %xmm1, %eax
887 ; AVX512F-NEXT: andl $31, %eax
888 ; AVX512F-NEXT: vpinsrb $6, (%rsp,%rax), %xmm2, %xmm2
889 ; AVX512F-NEXT: vpextrb $7, %xmm1, %eax
890 ; AVX512F-NEXT: andl $31, %eax
891 ; AVX512F-NEXT: vpinsrb $7, (%rsp,%rax), %xmm2, %xmm2
892 ; AVX512F-NEXT: vpextrb $8, %xmm1, %eax
893 ; AVX512F-NEXT: andl $31, %eax
894 ; AVX512F-NEXT: vpinsrb $8, (%rsp,%rax), %xmm2, %xmm2
895 ; AVX512F-NEXT: vpextrb $9, %xmm1, %eax
896 ; AVX512F-NEXT: andl $31, %eax
897 ; AVX512F-NEXT: vpinsrb $9, (%rsp,%rax), %xmm2, %xmm2
898 ; AVX512F-NEXT: vpextrb $10, %xmm1, %eax
899 ; AVX512F-NEXT: andl $31, %eax
900 ; AVX512F-NEXT: vpinsrb $10, (%rsp,%rax), %xmm2, %xmm2
901 ; AVX512F-NEXT: vpextrb $11, %xmm1, %eax
902 ; AVX512F-NEXT: andl $31, %eax
903 ; AVX512F-NEXT: vpinsrb $11, (%rsp,%rax), %xmm2, %xmm2
904 ; AVX512F-NEXT: vpextrb $12, %xmm1, %eax
905 ; AVX512F-NEXT: andl $31, %eax
906 ; AVX512F-NEXT: vpinsrb $12, (%rsp,%rax), %xmm2, %xmm2
907 ; AVX512F-NEXT: vpextrb $13, %xmm1, %eax
908 ; AVX512F-NEXT: andl $31, %eax
909 ; AVX512F-NEXT: vpinsrb $13, (%rsp,%rax), %xmm2, %xmm2
910 ; AVX512F-NEXT: vpextrb $14, %xmm1, %eax
911 ; AVX512F-NEXT: andl $31, %eax
912 ; AVX512F-NEXT: vpinsrb $14, (%rsp,%rax), %xmm2, %xmm2
913 ; AVX512F-NEXT: vpextrb $15, %xmm1, %eax
914 ; AVX512F-NEXT: andl $31, %eax
915 ; AVX512F-NEXT: movzbl (%rsp,%rax), %eax
916 ; AVX512F-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
917 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
918 ; AVX512F-NEXT: movq %rbp, %rsp
919 ; AVX512F-NEXT: popq %rbp
570 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
571 ; AVX512F-NEXT: vpshufb %ymm1, %ymm2, %ymm2
572 ; AVX512F-NEXT: vextracti128 $1, %ymm0, %xmm3
573 ; AVX512F-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
574 ; AVX512F-NEXT: vpshufb %ymm1, %ymm0, %ymm0
575 ; AVX512F-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
576 ; AVX512F-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
920577 ; AVX512F-NEXT: retq
921578 ;
922579 ; AVX512DQ-LABEL: var_shuffle_v32i8:
923580 ; AVX512DQ: # %bb.0:
924 ; AVX512DQ-NEXT: pushq %rbp
925 ; AVX512DQ-NEXT: movq %rsp, %rbp
926 ; AVX512DQ-NEXT: andq $-32, %rsp
927 ; AVX512DQ-NEXT: subq $64, %rsp
928 ; AVX512DQ-NEXT: vextracti128 $1, %ymm1, %xmm2
929 ; AVX512DQ-NEXT: vpextrb $0, %xmm2, %eax
930 ; AVX512DQ-NEXT: vmovaps %ymm0, (%rsp)
931 ; AVX512DQ-NEXT: andl $31, %eax
932 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
933 ; AVX512DQ-NEXT: vmovd %eax, %xmm0
934 ; AVX512DQ-NEXT: vpextrb $1, %xmm2, %eax
935 ; AVX512DQ-NEXT: andl $31, %eax
936 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
937 ; AVX512DQ-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
938 ; AVX512DQ-NEXT: vpextrb $2, %xmm2, %eax
939 ; AVX512DQ-NEXT: andl $31, %eax
940 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
941 ; AVX512DQ-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
942 ; AVX512DQ-NEXT: vpextrb $3, %xmm2, %eax
943 ; AVX512DQ-NEXT: andl $31, %eax
944 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
945 ; AVX512DQ-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
946 ; AVX512DQ-NEXT: vpextrb $4, %xmm2, %eax
947 ; AVX512DQ-NEXT: andl $31, %eax
948 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
949 ; AVX512DQ-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
950 ; AVX512DQ-NEXT: vpextrb $5, %xmm2, %eax
951 ; AVX512DQ-NEXT: andl $31, %eax
952 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
953 ; AVX512DQ-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
954 ; AVX512DQ-NEXT: vpextrb $6, %xmm2, %eax
955 ; AVX512DQ-NEXT: andl $31, %eax
956 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
957 ; AVX512DQ-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
958 ; AVX512DQ-NEXT: vpextrb $7, %xmm2, %eax
959 ; AVX512DQ-NEXT: andl $31, %eax
960 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
961 ; AVX512DQ-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
962 ; AVX512DQ-NEXT: vpextrb $8, %xmm2, %eax
963 ; AVX512DQ-NEXT: andl $31, %eax
964 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
965 ; AVX512DQ-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
966 ; AVX512DQ-NEXT: vpextrb $9, %xmm2, %eax
967 ; AVX512DQ-NEXT: andl $31, %eax
968 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
969 ; AVX512DQ-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
970 ; AVX512DQ-NEXT: vpextrb $10, %xmm2, %eax
971 ; AVX512DQ-NEXT: andl $31, %eax
972 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
973 ; AVX512DQ-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
974 ; AVX512DQ-NEXT: vpextrb $11, %xmm2, %eax
975 ; AVX512DQ-NEXT: andl $31, %eax
976 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
977 ; AVX512DQ-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
978 ; AVX512DQ-NEXT: vpextrb $12, %xmm2, %eax
979 ; AVX512DQ-NEXT: andl $31, %eax
980 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
981 ; AVX512DQ-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
982 ; AVX512DQ-NEXT: vpextrb $13, %xmm2, %eax
983 ; AVX512DQ-NEXT: andl $31, %eax
984 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
985 ; AVX512DQ-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
986 ; AVX512DQ-NEXT: vpextrb $14, %xmm2, %eax
987 ; AVX512DQ-NEXT: andl $31, %eax
988 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
989 ; AVX512DQ-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
990 ; AVX512DQ-NEXT: vpextrb $15, %xmm2, %eax
991 ; AVX512DQ-NEXT: andl $31, %eax
992 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
993 ; AVX512DQ-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
994 ; AVX512DQ-NEXT: vpextrb $0, %xmm1, %eax
995 ; AVX512DQ-NEXT: andl $31, %eax
996 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
997 ; AVX512DQ-NEXT: vmovd %eax, %xmm2
998 ; AVX512DQ-NEXT: vpextrb $1, %xmm1, %eax
999 ; AVX512DQ-NEXT: andl $31, %eax
1000 ; AVX512DQ-NEXT: vpinsrb $1, (%rsp,%rax), %xmm2, %xmm2
1001 ; AVX512DQ-NEXT: vpextrb $2, %xmm1, %eax
1002 ; AVX512DQ-NEXT: andl $31, %eax
1003 ; AVX512DQ-NEXT: vpinsrb $2, (%rsp,%rax), %xmm2, %xmm2
1004 ; AVX512DQ-NEXT: vpextrb $3, %xmm1, %eax
1005 ; AVX512DQ-NEXT: andl $31, %eax
1006 ; AVX512DQ-NEXT: vpinsrb $3, (%rsp,%rax), %xmm2, %xmm2
1007 ; AVX512DQ-NEXT: vpextrb $4, %xmm1, %eax
1008 ; AVX512DQ-NEXT: andl $31, %eax
1009 ; AVX512DQ-NEXT: vpinsrb $4, (%rsp,%rax), %xmm2, %xmm2
1010 ; AVX512DQ-NEXT: vpextrb $5, %xmm1, %eax
1011 ; AVX512DQ-NEXT: andl $31, %eax
1012 ; AVX512DQ-NEXT: vpinsrb $5, (%rsp,%rax), %xmm2, %xmm2
1013 ; AVX512DQ-NEXT: vpextrb $6, %xmm1, %eax
1014 ; AVX512DQ-NEXT: andl $31, %eax
1015 ; AVX512DQ-NEXT: vpinsrb $6, (%rsp,%rax), %xmm2, %xmm2
1016 ; AVX512DQ-NEXT: vpextrb $7, %xmm1, %eax
1017 ; AVX512DQ-NEXT: andl $31, %eax
1018 ; AVX512DQ-NEXT: vpinsrb $7, (%rsp,%rax), %xmm2, %xmm2
1019 ; AVX512DQ-NEXT: vpextrb $8, %xmm1, %eax
1020 ; AVX512DQ-NEXT: andl $31, %eax
1021 ; AVX512DQ-NEXT: vpinsrb $8, (%rsp,%rax), %xmm2, %xmm2
1022 ; AVX512DQ-NEXT: vpextrb $9, %xmm1, %eax
1023 ; AVX512DQ-NEXT: andl $31, %eax
1024 ; AVX512DQ-NEXT: vpinsrb $9, (%rsp,%rax), %xmm2, %xmm2
1025 ; AVX512DQ-NEXT: vpextrb $10, %xmm1, %eax
1026 ; AVX512DQ-NEXT: andl $31, %eax
1027 ; AVX512DQ-NEXT: vpinsrb $10, (%rsp,%rax), %xmm2, %xmm2
1028 ; AVX512DQ-NEXT: vpextrb $11, %xmm1, %eax
1029 ; AVX512DQ-NEXT: andl $31, %eax
1030 ; AVX512DQ-NEXT: vpinsrb $11, (%rsp,%rax), %xmm2, %xmm2
1031 ; AVX512DQ-NEXT: vpextrb $12, %xmm1, %eax
1032 ; AVX512DQ-NEXT: andl $31, %eax
1033 ; AVX512DQ-NEXT: vpinsrb $12, (%rsp,%rax), %xmm2, %xmm2
1034 ; AVX512DQ-NEXT: vpextrb $13, %xmm1, %eax
1035 ; AVX512DQ-NEXT: andl $31, %eax
1036 ; AVX512DQ-NEXT: vpinsrb $13, (%rsp,%rax), %xmm2, %xmm2
1037 ; AVX512DQ-NEXT: vpextrb $14, %xmm1, %eax
1038 ; AVX512DQ-NEXT: andl $31, %eax
1039 ; AVX512DQ-NEXT: vpinsrb $14, (%rsp,%rax), %xmm2, %xmm2
1040 ; AVX512DQ-NEXT: vpextrb $15, %xmm1, %eax
1041 ; AVX512DQ-NEXT: andl $31, %eax
1042 ; AVX512DQ-NEXT: movzbl (%rsp,%rax), %eax
1043 ; AVX512DQ-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
1044 ; AVX512DQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
1045 ; AVX512DQ-NEXT: movq %rbp, %rsp
1046 ; AVX512DQ-NEXT: popq %rbp
581 ; AVX512DQ-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
582 ; AVX512DQ-NEXT: vpshufb %ymm1, %ymm2, %ymm2
583 ; AVX512DQ-NEXT: vextracti128 $1, %ymm0, %xmm3
584 ; AVX512DQ-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
585 ; AVX512DQ-NEXT: vpshufb %ymm1, %ymm0, %ymm0
586 ; AVX512DQ-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
587 ; AVX512DQ-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
1047588 ; AVX512DQ-NEXT: retq
1048589 ;
1049590 ; AVX512VL-LABEL: var_shuffle_v32i8:
1050591 ; AVX512VL: # %bb.0:
1051 ; AVX512VL-NEXT: pushq %rbp
1052 ; AVX512VL-NEXT: movq %rsp, %rbp
1053 ; AVX512VL-NEXT: andq $-32, %rsp
1054 ; AVX512VL-NEXT: subq $64, %rsp
1055 ; AVX512VL-NEXT: vextracti128 $1, %ymm1, %xmm2
1056 ; AVX512VL-NEXT: vpextrb $0, %xmm2, %eax
1057 ; AVX512VL-NEXT: vmovaps %ymm0, (%rsp)
1058 ; AVX512VL-NEXT: andl $31, %eax
1059 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1060 ; AVX512VL-NEXT: vmovd %eax, %xmm0
1061 ; AVX512VL-NEXT: vpextrb $1, %xmm2, %eax
1062 ; AVX512VL-NEXT: andl $31, %eax
1063 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1064 ; AVX512VL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
1065 ; AVX512VL-NEXT: vpextrb $2, %xmm2, %eax
1066 ; AVX512VL-NEXT: andl $31, %eax
1067 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1068 ; AVX512VL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
1069 ; AVX512VL-NEXT: vpextrb $3, %xmm2, %eax
1070 ; AVX512VL-NEXT: andl $31, %eax
1071 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1072 ; AVX512VL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
1073 ; AVX512VL-NEXT: vpextrb $4, %xmm2, %eax
1074 ; AVX512VL-NEXT: andl $31, %eax
1075 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1076 ; AVX512VL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
1077 ; AVX512VL-NEXT: vpextrb $5, %xmm2, %eax
1078 ; AVX512VL-NEXT: andl $31, %eax
1079 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1080 ; AVX512VL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
1081 ; AVX512VL-NEXT: vpextrb $6, %xmm2, %eax
1082 ; AVX512VL-NEXT: andl $31, %eax
1083 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1084 ; AVX512VL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
1085 ; AVX512VL-NEXT: vpextrb $7, %xmm2, %eax
1086 ; AVX512VL-NEXT: andl $31, %eax
1087 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1088 ; AVX512VL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
1089 ; AVX512VL-NEXT: vpextrb $8, %xmm2, %eax
1090 ; AVX512VL-NEXT: andl $31, %eax
1091 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1092 ; AVX512VL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
1093 ; AVX512VL-NEXT: vpextrb $9, %xmm2, %eax
1094 ; AVX512VL-NEXT: andl $31, %eax
1095 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1096 ; AVX512VL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
1097 ; AVX512VL-NEXT: vpextrb $10, %xmm2, %eax
1098 ; AVX512VL-NEXT: andl $31, %eax
1099 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1100 ; AVX512VL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
1101 ; AVX512VL-NEXT: vpextrb $11, %xmm2, %eax
1102 ; AVX512VL-NEXT: andl $31, %eax
1103 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1104 ; AVX512VL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
1105 ; AVX512VL-NEXT: vpextrb $12, %xmm2, %eax
1106 ; AVX512VL-NEXT: andl $31, %eax
1107 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1108 ; AVX512VL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
1109 ; AVX512VL-NEXT: vpextrb $13, %xmm2, %eax
1110 ; AVX512VL-NEXT: andl $31, %eax
1111 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1112 ; AVX512VL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
1113 ; AVX512VL-NEXT: vpextrb $14, %xmm2, %eax
1114 ; AVX512VL-NEXT: andl $31, %eax
1115 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1116 ; AVX512VL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
1117 ; AVX512VL-NEXT: vpextrb $15, %xmm2, %eax
1118 ; AVX512VL-NEXT: andl $31, %eax
1119 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1120 ; AVX512VL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
1121 ; AVX512VL-NEXT: vpextrb $0, %xmm1, %eax
1122 ; AVX512VL-NEXT: andl $31, %eax
1123 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1124 ; AVX512VL-NEXT: vmovd %eax, %xmm2
1125 ; AVX512VL-NEXT: vpextrb $1, %xmm1, %eax
1126 ; AVX512VL-NEXT: andl $31, %eax
1127 ; AVX512VL-NEXT: vpinsrb $1, (%rsp,%rax), %xmm2, %xmm2
1128 ; AVX512VL-NEXT: vpextrb $2, %xmm1, %eax
1129 ; AVX512VL-NEXT: andl $31, %eax
1130 ; AVX512VL-NEXT: vpinsrb $2, (%rsp,%rax), %xmm2, %xmm2
1131 ; AVX512VL-NEXT: vpextrb $3, %xmm1, %eax
1132 ; AVX512VL-NEXT: andl $31, %eax
1133 ; AVX512VL-NEXT: vpinsrb $3, (%rsp,%rax), %xmm2, %xmm2
1134 ; AVX512VL-NEXT: vpextrb $4, %xmm1, %eax
1135 ; AVX512VL-NEXT: andl $31, %eax
1136 ; AVX512VL-NEXT: vpinsrb $4, (%rsp,%rax), %xmm2, %xmm2
1137 ; AVX512VL-NEXT: vpextrb $5, %xmm1, %eax
1138 ; AVX512VL-NEXT: andl $31, %eax
1139 ; AVX512VL-NEXT: vpinsrb $5, (%rsp,%rax), %xmm2, %xmm2
1140 ; AVX512VL-NEXT: vpextrb $6, %xmm1, %eax
1141 ; AVX512VL-NEXT: andl $31, %eax
1142 ; AVX512VL-NEXT: vpinsrb $6, (%rsp,%rax), %xmm2, %xmm2
1143 ; AVX512VL-NEXT: vpextrb $7, %xmm1, %eax
1144 ; AVX512VL-NEXT: andl $31, %eax
1145 ; AVX512VL-NEXT: vpinsrb $7, (%rsp,%rax), %xmm2, %xmm2
1146 ; AVX512VL-NEXT: vpextrb $8, %xmm1, %eax
1147 ; AVX512VL-NEXT: andl $31, %eax
1148 ; AVX512VL-NEXT: vpinsrb $8, (%rsp,%rax), %xmm2, %xmm2
1149 ; AVX512VL-NEXT: vpextrb $9, %xmm1, %eax
1150 ; AVX512VL-NEXT: andl $31, %eax
1151 ; AVX512VL-NEXT: vpinsrb $9, (%rsp,%rax), %xmm2, %xmm2
1152 ; AVX512VL-NEXT: vpextrb $10, %xmm1, %eax
1153 ; AVX512VL-NEXT: andl $31, %eax
1154 ; AVX512VL-NEXT: vpinsrb $10, (%rsp,%rax), %xmm2, %xmm2
1155 ; AVX512VL-NEXT: vpextrb $11, %xmm1, %eax
1156 ; AVX512VL-NEXT: andl $31, %eax
1157 ; AVX512VL-NEXT: vpinsrb $11, (%rsp,%rax), %xmm2, %xmm2
1158 ; AVX512VL-NEXT: vpextrb $12, %xmm1, %eax
1159 ; AVX512VL-NEXT: andl $31, %eax
1160 ; AVX512VL-NEXT: vpinsrb $12, (%rsp,%rax), %xmm2, %xmm2
1161 ; AVX512VL-NEXT: vpextrb $13, %xmm1, %eax
1162 ; AVX512VL-NEXT: andl $31, %eax
1163 ; AVX512VL-NEXT: vpinsrb $13, (%rsp,%rax), %xmm2, %xmm2
1164 ; AVX512VL-NEXT: vpextrb $14, %xmm1, %eax
1165 ; AVX512VL-NEXT: andl $31, %eax
1166 ; AVX512VL-NEXT: vpinsrb $14, (%rsp,%rax), %xmm2, %xmm2
1167 ; AVX512VL-NEXT: vpextrb $15, %xmm1, %eax
1168 ; AVX512VL-NEXT: andl $31, %eax
1169 ; AVX512VL-NEXT: movzbl (%rsp,%rax), %eax
1170 ; AVX512VL-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
1171 ; AVX512VL-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
1172 ; AVX512VL-NEXT: movq %rbp, %rsp
1173 ; AVX512VL-NEXT: popq %rbp
592 ; AVX512VL-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm2
593 ; AVX512VL-NEXT: vpshufb %ymm1, %ymm2, %ymm2
594 ; AVX512VL-NEXT: vextracti128 $1, %ymm0, %xmm3
595 ; AVX512VL-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]
596 ; AVX512VL-NEXT: vpshufb %ymm1, %ymm0, %ymm0
597 ; AVX512VL-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
598 ; AVX512VL-NEXT: vpblendvb %ymm1, %ymm0, %ymm2, %ymm0
1174599 ; AVX512VL-NEXT: retq
1175600 ;
1176601 ; VBMI-LABEL: var_shuffle_v32i8:
19271352 ; AVX1-LABEL: var_shuffle_v32i8_from_v16i8:
19281353 ; AVX1: # %bb.0:
19291354 ; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm2
1930 ; AVX1-NEXT: vpextrb $0, %xmm2, %eax
1931 ; AVX1-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
1932 ; AVX1-NEXT: andl $15, %eax
1933 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1934 ; AVX1-NEXT: vmovd %eax, %xmm0
1935 ; AVX1-NEXT: vpextrb $1, %xmm2, %eax
1936 ; AVX1-NEXT: andl $15, %eax
1937 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1938 ; AVX1-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
1939 ; AVX1-NEXT: vpextrb $2, %xmm2, %eax
1940 ; AVX1-NEXT: andl $15, %eax
1941 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1942 ; AVX1-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
1943 ; AVX1-NEXT: vpextrb $3, %xmm2, %eax
1944 ; AVX1-NEXT: andl $15, %eax
1945 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1946 ; AVX1-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
1947 ; AVX1-NEXT: vpextrb $4, %xmm2, %eax
1948 ; AVX1-NEXT: andl $15, %eax
1949 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1950 ; AVX1-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
1951 ; AVX1-NEXT: vpextrb $5, %xmm2, %eax
1952 ; AVX1-NEXT: andl $15, %eax
1953 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1954 ; AVX1-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
1955 ; AVX1-NEXT: vpextrb $6, %xmm2, %eax
1956 ; AVX1-NEXT: andl $15, %eax
1957 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1958 ; AVX1-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
1959 ; AVX1-NEXT: vpextrb $7, %xmm2, %eax
1960 ; AVX1-NEXT: andl $15, %eax
1961 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1962 ; AVX1-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
1963 ; AVX1-NEXT: vpextrb $8, %xmm2, %eax
1964 ; AVX1-NEXT: andl $15, %eax
1965 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1966 ; AVX1-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
1967 ; AVX1-NEXT: vpextrb $9, %xmm2, %eax
1968 ; AVX1-NEXT: andl $15, %eax
1969 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1970 ; AVX1-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
1971 ; AVX1-NEXT: vpextrb $10, %xmm2, %eax
1972 ; AVX1-NEXT: andl $15, %eax
1973 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1974 ; AVX1-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
1975 ; AVX1-NEXT: vpextrb $11, %xmm2, %eax
1976 ; AVX1-NEXT: andl $15, %eax
1977 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1978 ; AVX1-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
1979 ; AVX1-NEXT: vpextrb $12, %xmm2, %eax
1980 ; AVX1-NEXT: andl $15, %eax
1981 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1982 ; AVX1-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
1983 ; AVX1-NEXT: vpextrb $13, %xmm2, %eax
1984 ; AVX1-NEXT: andl $15, %eax
1985 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1986 ; AVX1-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
1987 ; AVX1-NEXT: vpextrb $14, %xmm2, %eax
1988 ; AVX1-NEXT: andl $15, %eax
1989 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1990 ; AVX1-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
1991 ; AVX1-NEXT: vpextrb $15, %xmm2, %eax
1992 ; AVX1-NEXT: andl $15, %eax
1993 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1994 ; AVX1-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
1995 ; AVX1-NEXT: vpextrb $0, %xmm1, %eax
1996 ; AVX1-NEXT: andl $15, %eax
1997 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
1998 ; AVX1-NEXT: vmovd %eax, %xmm2
1999 ; AVX1-NEXT: vpextrb $1, %xmm1, %eax
2000 ; AVX1-NEXT: andl $15, %eax
2001 ; AVX1-NEXT: vpinsrb $1, -24(%rsp,%rax), %xmm2, %xmm2
2002 ; AVX1-NEXT: vpextrb $2, %xmm1, %eax
2003 ; AVX1-NEXT: andl $15, %eax
2004 ; AVX1-NEXT: vpinsrb $2, -24(%rsp,%rax), %xmm2, %xmm2
2005 ; AVX1-NEXT: vpextrb $3, %xmm1, %eax
2006 ; AVX1-NEXT: andl $15, %eax
2007 ; AVX1-NEXT: vpinsrb $3, -24(%rsp,%rax), %xmm2, %xmm2
2008 ; AVX1-NEXT: vpextrb $4, %xmm1, %eax
2009 ; AVX1-NEXT: andl $15, %eax
2010 ; AVX1-NEXT: vpinsrb $4, -24(%rsp,%rax), %xmm2, %xmm2
2011 ; AVX1-NEXT: vpextrb $5, %xmm1, %eax
2012 ; AVX1-NEXT: andl $15, %eax
2013 ; AVX1-NEXT: vpinsrb $5, -24(%rsp,%rax), %xmm2, %xmm2
2014 ; AVX1-NEXT: vpextrb $6, %xmm1, %eax
2015 ; AVX1-NEXT: andl $15, %eax
2016 ; AVX1-NEXT: vpinsrb $6, -24(%rsp,%rax), %xmm2, %xmm2
2017 ; AVX1-NEXT: vpextrb $7, %xmm1, %eax
2018 ; AVX1-NEXT: andl $15, %eax
2019 ; AVX1-NEXT: vpinsrb $7, -24(%rsp,%rax), %xmm2, %xmm2
2020 ; AVX1-NEXT: vpextrb $8, %xmm1, %eax
2021 ; AVX1-NEXT: andl $15, %eax
2022 ; AVX1-NEXT: vpinsrb $8, -24(%rsp,%rax), %xmm2, %xmm2
2023 ; AVX1-NEXT: vpextrb $9, %xmm1, %eax
2024 ; AVX1-NEXT: andl $15, %eax
2025 ; AVX1-NEXT: vpinsrb $9, -24(%rsp,%rax), %xmm2, %xmm2
2026 ; AVX1-NEXT: vpextrb $10, %xmm1, %eax
2027 ; AVX1-NEXT: andl $15, %eax
2028 ; AVX1-NEXT: vpinsrb $10, -24(%rsp,%rax), %xmm2, %xmm2
2029 ; AVX1-NEXT: vpextrb $11, %xmm1, %eax
2030 ; AVX1-NEXT: andl $15, %eax
2031 ; AVX1-NEXT: vpinsrb $11, -24(%rsp,%rax), %xmm2, %xmm2
2032 ; AVX1-NEXT: vpextrb $12, %xmm1, %eax
2033 ; AVX1-NEXT: andl $15, %eax
2034 ; AVX1-NEXT: vpinsrb $12, -24(%rsp,%rax), %xmm2, %xmm2
2035 ; AVX1-NEXT: vpextrb $13, %xmm1, %eax
2036 ; AVX1-NEXT: andl $15, %eax
2037 ; AVX1-NEXT: vpinsrb $13, -24(%rsp,%rax), %xmm2, %xmm2
2038 ; AVX1-NEXT: vpextrb $14, %xmm1, %eax
2039 ; AVX1-NEXT: andl $15, %eax
2040 ; AVX1-NEXT: vpinsrb $14, -24(%rsp,%rax), %xmm2, %xmm2
2041 ; AVX1-NEXT: vpextrb $15, %xmm1, %eax
2042 ; AVX1-NEXT: andl $15, %eax
2043 ; AVX1-NEXT: movzbl -24(%rsp,%rax), %eax
2044 ; AVX1-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
2045 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
1355 ; AVX1-NEXT: vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1356 ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm2, %xmm4
1357 ; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm5
1358 ; AVX1-NEXT: vpshufb %xmm2, %xmm0, %xmm2
1359 ; AVX1-NEXT: vpblendvb %xmm4, %xmm5, %xmm2, %xmm2
1360 ; AVX1-NEXT: vpcmpgtb %xmm3, %xmm1, %xmm3
1361 ; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm4
1362 ; AVX1-NEXT: vpshufb %xmm1, %xmm0, %xmm0
1363 ; AVX1-NEXT: vpblendvb %xmm3, %xmm4, %xmm0, %xmm0
1364 ; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0
20461365 ; AVX1-NEXT: retq
20471366 ;
20481367 ; AVX2-LABEL: var_shuffle_v32i8_from_v16i8:
20491368 ; AVX2: # %bb.0:
2050 ; AVX2-NEXT: vextracti128 $1, %ymm1, %xmm2
2051 ; AVX2-NEXT: vpextrb $0, %xmm2, %eax
2052 ; AVX2-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
2053 ; AVX2-NEXT: andl $15, %eax
2054 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2055 ; AVX2-NEXT: vmovd %eax, %xmm0
2056 ; AVX2-NEXT: vpextrb $1, %xmm2, %eax
2057 ; AVX2-NEXT: andl $15, %eax
2058 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2059 ; AVX2-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
2060 ; AVX2-NEXT: vpextrb $2, %xmm2, %eax
2061 ; AVX2-NEXT: andl $15, %eax
2062 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2063 ; AVX2-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
2064 ; AVX2-NEXT: vpextrb $3, %xmm2, %eax
2065 ; AVX2-NEXT: andl $15, %eax
2066 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2067 ; AVX2-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
2068 ; AVX2-NEXT: vpextrb $4, %xmm2, %eax
2069 ; AVX2-NEXT: andl $15, %eax
2070 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2071 ; AVX2-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
2072 ; AVX2-NEXT: vpextrb $5, %xmm2, %eax
2073 ; AVX2-NEXT: andl $15, %eax
2074 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2075 ; AVX2-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
2076 ; AVX2-NEXT: vpextrb $6, %xmm2, %eax
2077 ; AVX2-NEXT: andl $15, %eax
2078 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2079 ; AVX2-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
2080 ; AVX2-NEXT: vpextrb $7, %xmm2, %eax
2081 ; AVX2-NEXT: andl $15, %eax
2082 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2083 ; AVX2-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
2084 ; AVX2-NEXT: vpextrb $8, %xmm2, %eax
2085 ; AVX2-NEXT: andl $15, %eax
2086 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2087 ; AVX2-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
2088 ; AVX2-NEXT: vpextrb $9, %xmm2, %eax
2089 ; AVX2-NEXT: andl $15, %eax
2090 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2091 ; AVX2-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
2092 ; AVX2-NEXT: vpextrb $10, %xmm2, %eax
2093 ; AVX2-NEXT: andl $15, %eax
2094 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2095 ; AVX2-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
2096 ; AVX2-NEXT: vpextrb $11, %xmm2, %eax
2097 ; AVX2-NEXT: andl $15, %eax
2098 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2099 ; AVX2-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
2100 ; AVX2-NEXT: vpextrb $12, %xmm2, %eax
2101 ; AVX2-NEXT: andl $15, %eax
2102 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2103 ; AVX2-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
2104 ; AVX2-NEXT: vpextrb $13, %xmm2, %eax
2105 ; AVX2-NEXT: andl $15, %eax
2106 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2107 ; AVX2-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
2108 ; AVX2-NEXT: vpextrb $14, %xmm2, %eax
2109 ; AVX2-NEXT: andl $15, %eax
2110 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2111 ; AVX2-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
2112 ; AVX2-NEXT: vpextrb $15, %xmm2, %eax
2113 ; AVX2-NEXT: andl $15, %eax
2114 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2115 ; AVX2-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
2116 ; AVX2-NEXT: vpextrb $0, %xmm1, %eax
2117 ; AVX2-NEXT: andl $15, %eax
2118 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2119 ; AVX2-NEXT: vmovd %eax, %xmm2
2120 ; AVX2-NEXT: vpextrb $1, %xmm1, %eax
2121 ; AVX2-NEXT: andl $15, %eax
2122 ; AVX2-NEXT: vpinsrb $1, -24(%rsp,%rax), %xmm2, %xmm2
2123 ; AVX2-NEXT: vpextrb $2, %xmm1, %eax
2124 ; AVX2-NEXT: andl $15, %eax
2125 ; AVX2-NEXT: vpinsrb $2, -24(%rsp,%rax), %xmm2, %xmm2
2126 ; AVX2-NEXT: vpextrb $3, %xmm1, %eax
2127 ; AVX2-NEXT: andl $15, %eax
2128 ; AVX2-NEXT: vpinsrb $3, -24(%rsp,%rax), %xmm2, %xmm2
2129 ; AVX2-NEXT: vpextrb $4, %xmm1, %eax
2130 ; AVX2-NEXT: andl $15, %eax
2131 ; AVX2-NEXT: vpinsrb $4, -24(%rsp,%rax), %xmm2, %xmm2
2132 ; AVX2-NEXT: vpextrb $5, %xmm1, %eax
2133 ; AVX2-NEXT: andl $15, %eax
2134 ; AVX2-NEXT: vpinsrb $5, -24(%rsp,%rax), %xmm2, %xmm2
2135 ; AVX2-NEXT: vpextrb $6, %xmm1, %eax
2136 ; AVX2-NEXT: andl $15, %eax
2137 ; AVX2-NEXT: vpinsrb $6, -24(%rsp,%rax), %xmm2, %xmm2
2138 ; AVX2-NEXT: vpextrb $7, %xmm1, %eax
2139 ; AVX2-NEXT: andl $15, %eax
2140 ; AVX2-NEXT: vpinsrb $7, -24(%rsp,%rax), %xmm2, %xmm2
2141 ; AVX2-NEXT: vpextrb $8, %xmm1, %eax
2142 ; AVX2-NEXT: andl $15, %eax
2143 ; AVX2-NEXT: vpinsrb $8, -24(%rsp,%rax), %xmm2, %xmm2
2144 ; AVX2-NEXT: vpextrb $9, %xmm1, %eax
2145 ; AVX2-NEXT: andl $15, %eax
2146 ; AVX2-NEXT: vpinsrb $9, -24(%rsp,%rax), %xmm2, %xmm2
2147 ; AVX2-NEXT: vpextrb $10, %xmm1, %eax
2148 ; AVX2-NEXT: andl $15, %eax
2149 ; AVX2-NEXT: vpinsrb $10, -24(%rsp,%rax), %xmm2, %xmm2
2150 ; AVX2-NEXT: vpextrb $11, %xmm1, %eax
2151 ; AVX2-NEXT: andl $15, %eax
2152 ; AVX2-NEXT: vpinsrb $11, -24(%rsp,%rax), %xmm2, %xmm2
2153 ; AVX2-NEXT: vpextrb $12, %xmm1, %eax
2154 ; AVX2-NEXT: andl $15, %eax
2155 ; AVX2-NEXT: vpinsrb $12, -24(%rsp,%rax), %xmm2, %xmm2
2156 ; AVX2-NEXT: vpextrb $13, %xmm1, %eax
2157 ; AVX2-NEXT: andl $15, %eax
2158 ; AVX2-NEXT: vpinsrb $13, -24(%rsp,%rax), %xmm2, %xmm2
2159 ; AVX2-NEXT: vpextrb $14, %xmm1, %eax
2160 ; AVX2-NEXT: andl $15, %eax
2161 ; AVX2-NEXT: vpinsrb $14, -24(%rsp,%rax), %xmm2, %xmm2
2162 ; AVX2-NEXT: vpextrb $15, %xmm1, %eax
2163 ; AVX2-NEXT: andl $15, %eax
2164 ; AVX2-NEXT: movzbl -24(%rsp,%rax), %eax
2165 ; AVX2-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
2166 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
1369 ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1370 ; AVX2-NEXT: vpshufb %ymm1, %ymm0, %ymm2
1371 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
1372 ; AVX2-NEXT: vpshufb %ymm1, %ymm0, %ymm0
1373 ; AVX2-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
1374 ; AVX2-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
21671375 ; AVX2-NEXT: retq
21681376 ;
21691377 ; AVX512F-LABEL: var_shuffle_v32i8_from_v16i8:
21701378 ; AVX512F: # %bb.0:
2171 ; AVX512F-NEXT: vextracti128 $1, %ymm1, %xmm2
2172 ; AVX512F-NEXT: vpextrb $0, %xmm2, %eax
2173 ; AVX512F-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
2174 ; AVX512F-NEXT: andl $15, %eax
2175 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2176 ; AVX512F-NEXT: vmovd %eax, %xmm0
2177 ; AVX512F-NEXT: vpextrb $1, %xmm2, %eax
2178 ; AVX512F-NEXT: andl $15, %eax
2179 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2180 ; AVX512F-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
2181 ; AVX512F-NEXT: vpextrb $2, %xmm2, %eax
2182 ; AVX512F-NEXT: andl $15, %eax
2183 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2184 ; AVX512F-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
2185 ; AVX512F-NEXT: vpextrb $3, %xmm2, %eax
2186 ; AVX512F-NEXT: andl $15, %eax
2187 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2188 ; AVX512F-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
2189 ; AVX512F-NEXT: vpextrb $4, %xmm2, %eax
2190 ; AVX512F-NEXT: andl $15, %eax
2191 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2192 ; AVX512F-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
2193 ; AVX512F-NEXT: vpextrb $5, %xmm2, %eax
2194 ; AVX512F-NEXT: andl $15, %eax
2195 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2196 ; AVX512F-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
2197 ; AVX512F-NEXT: vpextrb $6, %xmm2, %eax
2198 ; AVX512F-NEXT: andl $15, %eax
2199 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2200 ; AVX512F-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
2201 ; AVX512F-NEXT: vpextrb $7, %xmm2, %eax
2202 ; AVX512F-NEXT: andl $15, %eax
2203 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2204 ; AVX512F-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
2205 ; AVX512F-NEXT: vpextrb $8, %xmm2, %eax
2206 ; AVX512F-NEXT: andl $15, %eax
2207 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2208 ; AVX512F-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
2209 ; AVX512F-NEXT: vpextrb $9, %xmm2, %eax
2210 ; AVX512F-NEXT: andl $15, %eax
2211 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2212 ; AVX512F-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
2213 ; AVX512F-NEXT: vpextrb $10, %xmm2, %eax
2214 ; AVX512F-NEXT: andl $15, %eax
2215 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2216 ; AVX512F-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
2217 ; AVX512F-NEXT: vpextrb $11, %xmm2, %eax
2218 ; AVX512F-NEXT: andl $15, %eax
2219 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2220 ; AVX512F-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
2221 ; AVX512F-NEXT: vpextrb $12, %xmm2, %eax
2222 ; AVX512F-NEXT: andl $15, %eax
2223 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2224 ; AVX512F-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
2225 ; AVX512F-NEXT: vpextrb $13, %xmm2, %eax
2226 ; AVX512F-NEXT: andl $15, %eax
2227 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2228 ; AVX512F-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
2229 ; AVX512F-NEXT: vpextrb $14, %xmm2, %eax
2230 ; AVX512F-NEXT: andl $15, %eax
2231 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2232 ; AVX512F-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
2233 ; AVX512F-NEXT: vpextrb $15, %xmm2, %eax
2234 ; AVX512F-NEXT: andl $15, %eax
2235 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2236 ; AVX512F-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
2237 ; AVX512F-NEXT: vpextrb $0, %xmm1, %eax
2238 ; AVX512F-NEXT: andl $15, %eax
2239 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2240 ; AVX512F-NEXT: vmovd %eax, %xmm2
2241 ; AVX512F-NEXT: vpextrb $1, %xmm1, %eax
2242 ; AVX512F-NEXT: andl $15, %eax
2243 ; AVX512F-NEXT: vpinsrb $1, -24(%rsp,%rax), %xmm2, %xmm2
2244 ; AVX512F-NEXT: vpextrb $2, %xmm1, %eax
2245 ; AVX512F-NEXT: andl $15, %eax
2246 ; AVX512F-NEXT: vpinsrb $2, -24(%rsp,%rax), %xmm2, %xmm2
2247 ; AVX512F-NEXT: vpextrb $3, %xmm1, %eax
2248 ; AVX512F-NEXT: andl $15, %eax
2249 ; AVX512F-NEXT: vpinsrb $3, -24(%rsp,%rax), %xmm2, %xmm2
2250 ; AVX512F-NEXT: vpextrb $4, %xmm1, %eax
2251 ; AVX512F-NEXT: andl $15, %eax
2252 ; AVX512F-NEXT: vpinsrb $4, -24(%rsp,%rax), %xmm2, %xmm2
2253 ; AVX512F-NEXT: vpextrb $5, %xmm1, %eax
2254 ; AVX512F-NEXT: andl $15, %eax
2255 ; AVX512F-NEXT: vpinsrb $5, -24(%rsp,%rax), %xmm2, %xmm2
2256 ; AVX512F-NEXT: vpextrb $6, %xmm1, %eax
2257 ; AVX512F-NEXT: andl $15, %eax
2258 ; AVX512F-NEXT: vpinsrb $6, -24(%rsp,%rax), %xmm2, %xmm2
2259 ; AVX512F-NEXT: vpextrb $7, %xmm1, %eax
2260 ; AVX512F-NEXT: andl $15, %eax
2261 ; AVX512F-NEXT: vpinsrb $7, -24(%rsp,%rax), %xmm2, %xmm2
2262 ; AVX512F-NEXT: vpextrb $8, %xmm1, %eax
2263 ; AVX512F-NEXT: andl $15, %eax
2264 ; AVX512F-NEXT: vpinsrb $8, -24(%rsp,%rax), %xmm2, %xmm2
2265 ; AVX512F-NEXT: vpextrb $9, %xmm1, %eax
2266 ; AVX512F-NEXT: andl $15, %eax
2267 ; AVX512F-NEXT: vpinsrb $9, -24(%rsp,%rax), %xmm2, %xmm2
2268 ; AVX512F-NEXT: vpextrb $10, %xmm1, %eax
2269 ; AVX512F-NEXT: andl $15, %eax
2270 ; AVX512F-NEXT: vpinsrb $10, -24(%rsp,%rax), %xmm2, %xmm2
2271 ; AVX512F-NEXT: vpextrb $11, %xmm1, %eax
2272 ; AVX512F-NEXT: andl $15, %eax
2273 ; AVX512F-NEXT: vpinsrb $11, -24(%rsp,%rax), %xmm2, %xmm2
2274 ; AVX512F-NEXT: vpextrb $12, %xmm1, %eax
2275 ; AVX512F-NEXT: andl $15, %eax
2276 ; AVX512F-NEXT: vpinsrb $12, -24(%rsp,%rax), %xmm2, %xmm2
2277 ; AVX512F-NEXT: vpextrb $13, %xmm1, %eax
2278 ; AVX512F-NEXT: andl $15, %eax
2279 ; AVX512F-NEXT: vpinsrb $13, -24(%rsp,%rax), %xmm2, %xmm2
2280 ; AVX512F-NEXT: vpextrb $14, %xmm1, %eax
2281 ; AVX512F-NEXT: andl $15, %eax
2282 ; AVX512F-NEXT: vpinsrb $14, -24(%rsp,%rax), %xmm2, %xmm2
2283 ; AVX512F-NEXT: vpextrb $15, %xmm1, %eax
2284 ; AVX512F-NEXT: andl $15, %eax
2285 ; AVX512F-NEXT: movzbl -24(%rsp,%rax), %eax
2286 ; AVX512F-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
2287 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
1379 ; AVX512F-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1380 ; AVX512F-NEXT: vpshufb %ymm1, %ymm0, %ymm2
1381 ; AVX512F-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
1382 ; AVX512F-NEXT: vpshufb %ymm1, %ymm0, %ymm0
1383 ; AVX512F-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
1384 ; AVX512F-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
22881385 ; AVX512F-NEXT: retq
22891386 ;
22901387 ; AVX512DQ-LABEL: var_shuffle_v32i8_from_v16i8:
22911388 ; AVX512DQ: # %bb.0:
2292 ; AVX512DQ-NEXT: vextracti128 $1, %ymm1, %xmm2
2293 ; AVX512DQ-NEXT: vpextrb $0, %xmm2, %eax
2294 ; AVX512DQ-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
2295 ; AVX512DQ-NEXT: andl $15, %eax
2296 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2297 ; AVX512DQ-NEXT: vmovd %eax, %xmm0
2298 ; AVX512DQ-NEXT: vpextrb $1, %xmm2, %eax
2299 ; AVX512DQ-NEXT: andl $15, %eax
2300 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2301 ; AVX512DQ-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
2302 ; AVX512DQ-NEXT: vpextrb $2, %xmm2, %eax
2303 ; AVX512DQ-NEXT: andl $15, %eax
2304 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2305 ; AVX512DQ-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
2306 ; AVX512DQ-NEXT: vpextrb $3, %xmm2, %eax
2307 ; AVX512DQ-NEXT: andl $15, %eax
2308 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2309 ; AVX512DQ-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
2310 ; AVX512DQ-NEXT: vpextrb $4, %xmm2, %eax
2311 ; AVX512DQ-NEXT: andl $15, %eax
2312 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2313 ; AVX512DQ-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
2314 ; AVX512DQ-NEXT: vpextrb $5, %xmm2, %eax
2315 ; AVX512DQ-NEXT: andl $15, %eax
2316 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2317 ; AVX512DQ-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
2318 ; AVX512DQ-NEXT: vpextrb $6, %xmm2, %eax
2319 ; AVX512DQ-NEXT: andl $15, %eax
2320 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2321 ; AVX512DQ-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
2322 ; AVX512DQ-NEXT: vpextrb $7, %xmm2, %eax
2323 ; AVX512DQ-NEXT: andl $15, %eax
2324 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2325 ; AVX512DQ-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
2326 ; AVX512DQ-NEXT: vpextrb $8, %xmm2, %eax
2327 ; AVX512DQ-NEXT: andl $15, %eax
2328 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2329 ; AVX512DQ-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
2330 ; AVX512DQ-NEXT: vpextrb $9, %xmm2, %eax
2331 ; AVX512DQ-NEXT: andl $15, %eax
2332 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2333 ; AVX512DQ-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
2334 ; AVX512DQ-NEXT: vpextrb $10, %xmm2, %eax
2335 ; AVX512DQ-NEXT: andl $15, %eax
2336 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2337 ; AVX512DQ-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
2338 ; AVX512DQ-NEXT: vpextrb $11, %xmm2, %eax
2339 ; AVX512DQ-NEXT: andl $15, %eax
2340 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2341 ; AVX512DQ-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
2342 ; AVX512DQ-NEXT: vpextrb $12, %xmm2, %eax
2343 ; AVX512DQ-NEXT: andl $15, %eax
2344 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2345 ; AVX512DQ-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
2346 ; AVX512DQ-NEXT: vpextrb $13, %xmm2, %eax
2347 ; AVX512DQ-NEXT: andl $15, %eax
2348 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2349 ; AVX512DQ-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
2350 ; AVX512DQ-NEXT: vpextrb $14, %xmm2, %eax
2351 ; AVX512DQ-NEXT: andl $15, %eax
2352 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2353 ; AVX512DQ-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
2354 ; AVX512DQ-NEXT: vpextrb $15, %xmm2, %eax
2355 ; AVX512DQ-NEXT: andl $15, %eax
2356 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2357 ; AVX512DQ-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
2358 ; AVX512DQ-NEXT: vpextrb $0, %xmm1, %eax
2359 ; AVX512DQ-NEXT: andl $15, %eax
2360 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2361 ; AVX512DQ-NEXT: vmovd %eax, %xmm2
2362 ; AVX512DQ-NEXT: vpextrb $1, %xmm1, %eax
2363 ; AVX512DQ-NEXT: andl $15, %eax
2364 ; AVX512DQ-NEXT: vpinsrb $1, -24(%rsp,%rax), %xmm2, %xmm2
2365 ; AVX512DQ-NEXT: vpextrb $2, %xmm1, %eax
2366 ; AVX512DQ-NEXT: andl $15, %eax
2367 ; AVX512DQ-NEXT: vpinsrb $2, -24(%rsp,%rax), %xmm2, %xmm2
2368 ; AVX512DQ-NEXT: vpextrb $3, %xmm1, %eax
2369 ; AVX512DQ-NEXT: andl $15, %eax
2370 ; AVX512DQ-NEXT: vpinsrb $3, -24(%rsp,%rax), %xmm2, %xmm2
2371 ; AVX512DQ-NEXT: vpextrb $4, %xmm1, %eax
2372 ; AVX512DQ-NEXT: andl $15, %eax
2373 ; AVX512DQ-NEXT: vpinsrb $4, -24(%rsp,%rax), %xmm2, %xmm2
2374 ; AVX512DQ-NEXT: vpextrb $5, %xmm1, %eax
2375 ; AVX512DQ-NEXT: andl $15, %eax
2376 ; AVX512DQ-NEXT: vpinsrb $5, -24(%rsp,%rax), %xmm2, %xmm2
2377 ; AVX512DQ-NEXT: vpextrb $6, %xmm1, %eax
2378 ; AVX512DQ-NEXT: andl $15, %eax
2379 ; AVX512DQ-NEXT: vpinsrb $6, -24(%rsp,%rax), %xmm2, %xmm2
2380 ; AVX512DQ-NEXT: vpextrb $7, %xmm1, %eax
2381 ; AVX512DQ-NEXT: andl $15, %eax
2382 ; AVX512DQ-NEXT: vpinsrb $7, -24(%rsp,%rax), %xmm2, %xmm2
2383 ; AVX512DQ-NEXT: vpextrb $8, %xmm1, %eax
2384 ; AVX512DQ-NEXT: andl $15, %eax
2385 ; AVX512DQ-NEXT: vpinsrb $8, -24(%rsp,%rax), %xmm2, %xmm2
2386 ; AVX512DQ-NEXT: vpextrb $9, %xmm1, %eax
2387 ; AVX512DQ-NEXT: andl $15, %eax
2388 ; AVX512DQ-NEXT: vpinsrb $9, -24(%rsp,%rax), %xmm2, %xmm2
2389 ; AVX512DQ-NEXT: vpextrb $10, %xmm1, %eax
2390 ; AVX512DQ-NEXT: andl $15, %eax
2391 ; AVX512DQ-NEXT: vpinsrb $10, -24(%rsp,%rax), %xmm2, %xmm2
2392 ; AVX512DQ-NEXT: vpextrb $11, %xmm1, %eax
2393 ; AVX512DQ-NEXT: andl $15, %eax
2394 ; AVX512DQ-NEXT: vpinsrb $11, -24(%rsp,%rax), %xmm2, %xmm2
2395 ; AVX512DQ-NEXT: vpextrb $12, %xmm1, %eax
2396 ; AVX512DQ-NEXT: andl $15, %eax
2397 ; AVX512DQ-NEXT: vpinsrb $12, -24(%rsp,%rax), %xmm2, %xmm2
2398 ; AVX512DQ-NEXT: vpextrb $13, %xmm1, %eax
2399 ; AVX512DQ-NEXT: andl $15, %eax
2400 ; AVX512DQ-NEXT: vpinsrb $13, -24(%rsp,%rax), %xmm2, %xmm2
2401 ; AVX512DQ-NEXT: vpextrb $14, %xmm1, %eax
2402 ; AVX512DQ-NEXT: andl $15, %eax
2403 ; AVX512DQ-NEXT: vpinsrb $14, -24(%rsp,%rax), %xmm2, %xmm2
2404 ; AVX512DQ-NEXT: vpextrb $15, %xmm1, %eax
2405 ; AVX512DQ-NEXT: andl $15, %eax
2406 ; AVX512DQ-NEXT: movzbl -24(%rsp,%rax), %eax
2407 ; AVX512DQ-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
2408 ; AVX512DQ-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
1389 ; AVX512DQ-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1390 ; AVX512DQ-NEXT: vpshufb %ymm1, %ymm0, %ymm2
1391 ; AVX512DQ-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
1392 ; AVX512DQ-NEXT: vpshufb %ymm1, %ymm0, %ymm0
1393 ; AVX512DQ-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
1394 ; AVX512DQ-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
24091395 ; AVX512DQ-NEXT: retq
24101396 ;
24111397 ; AVX512VL-LABEL: var_shuffle_v32i8_from_v16i8:
24121398 ; AVX512VL: # %bb.0:
2413 ; AVX512VL-NEXT: vextracti128 $1, %ymm1, %xmm2
2414 ; AVX512VL-NEXT: vpextrb $0, %xmm2, %eax
2415 ; AVX512VL-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp)
2416 ; AVX512VL-NEXT: andl $15, %eax
2417 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2418 ; AVX512VL-NEXT: vmovd %eax, %xmm0
2419 ; AVX512VL-NEXT: vpextrb $1, %xmm2, %eax
2420 ; AVX512VL-NEXT: andl $15, %eax
2421 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2422 ; AVX512VL-NEXT: vpinsrb $1, %eax, %xmm0, %xmm0
2423 ; AVX512VL-NEXT: vpextrb $2, %xmm2, %eax
2424 ; AVX512VL-NEXT: andl $15, %eax
2425 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2426 ; AVX512VL-NEXT: vpinsrb $2, %eax, %xmm0, %xmm0
2427 ; AVX512VL-NEXT: vpextrb $3, %xmm2, %eax
2428 ; AVX512VL-NEXT: andl $15, %eax
2429 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2430 ; AVX512VL-NEXT: vpinsrb $3, %eax, %xmm0, %xmm0
2431 ; AVX512VL-NEXT: vpextrb $4, %xmm2, %eax
2432 ; AVX512VL-NEXT: andl $15, %eax
2433 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2434 ; AVX512VL-NEXT: vpinsrb $4, %eax, %xmm0, %xmm0
2435 ; AVX512VL-NEXT: vpextrb $5, %xmm2, %eax
2436 ; AVX512VL-NEXT: andl $15, %eax
2437 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2438 ; AVX512VL-NEXT: vpinsrb $5, %eax, %xmm0, %xmm0
2439 ; AVX512VL-NEXT: vpextrb $6, %xmm2, %eax
2440 ; AVX512VL-NEXT: andl $15, %eax
2441 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2442 ; AVX512VL-NEXT: vpinsrb $6, %eax, %xmm0, %xmm0
2443 ; AVX512VL-NEXT: vpextrb $7, %xmm2, %eax
2444 ; AVX512VL-NEXT: andl $15, %eax
2445 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2446 ; AVX512VL-NEXT: vpinsrb $7, %eax, %xmm0, %xmm0
2447 ; AVX512VL-NEXT: vpextrb $8, %xmm2, %eax
2448 ; AVX512VL-NEXT: andl $15, %eax
2449 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2450 ; AVX512VL-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0
2451 ; AVX512VL-NEXT: vpextrb $9, %xmm2, %eax
2452 ; AVX512VL-NEXT: andl $15, %eax
2453 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2454 ; AVX512VL-NEXT: vpinsrb $9, %eax, %xmm0, %xmm0
2455 ; AVX512VL-NEXT: vpextrb $10, %xmm2, %eax
2456 ; AVX512VL-NEXT: andl $15, %eax
2457 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2458 ; AVX512VL-NEXT: vpinsrb $10, %eax, %xmm0, %xmm0
2459 ; AVX512VL-NEXT: vpextrb $11, %xmm2, %eax
2460 ; AVX512VL-NEXT: andl $15, %eax
2461 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2462 ; AVX512VL-NEXT: vpinsrb $11, %eax, %xmm0, %xmm0
2463 ; AVX512VL-NEXT: vpextrb $12, %xmm2, %eax
2464 ; AVX512VL-NEXT: andl $15, %eax
2465 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2466 ; AVX512VL-NEXT: vpinsrb $12, %eax, %xmm0, %xmm0
2467 ; AVX512VL-NEXT: vpextrb $13, %xmm2, %eax
2468 ; AVX512VL-NEXT: andl $15, %eax
2469 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2470 ; AVX512VL-NEXT: vpinsrb $13, %eax, %xmm0, %xmm0
2471 ; AVX512VL-NEXT: vpextrb $14, %xmm2, %eax
2472 ; AVX512VL-NEXT: andl $15, %eax
2473 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2474 ; AVX512VL-NEXT: vpinsrb $14, %eax, %xmm0, %xmm0
2475 ; AVX512VL-NEXT: vpextrb $15, %xmm2, %eax
2476 ; AVX512VL-NEXT: andl $15, %eax
2477 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2478 ; AVX512VL-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0
2479 ; AVX512VL-NEXT: vpextrb $0, %xmm1, %eax
2480 ; AVX512VL-NEXT: andl $15, %eax
2481 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2482 ; AVX512VL-NEXT: vmovd %eax, %xmm2
2483 ; AVX512VL-NEXT: vpextrb $1, %xmm1, %eax
2484 ; AVX512VL-NEXT: andl $15, %eax
2485 ; AVX512VL-NEXT: vpinsrb $1, -24(%rsp,%rax), %xmm2, %xmm2
2486 ; AVX512VL-NEXT: vpextrb $2, %xmm1, %eax
2487 ; AVX512VL-NEXT: andl $15, %eax
2488 ; AVX512VL-NEXT: vpinsrb $2, -24(%rsp,%rax), %xmm2, %xmm2
2489 ; AVX512VL-NEXT: vpextrb $3, %xmm1, %eax
2490 ; AVX512VL-NEXT: andl $15, %eax
2491 ; AVX512VL-NEXT: vpinsrb $3, -24(%rsp,%rax), %xmm2, %xmm2
2492 ; AVX512VL-NEXT: vpextrb $4, %xmm1, %eax
2493 ; AVX512VL-NEXT: andl $15, %eax
2494 ; AVX512VL-NEXT: vpinsrb $4, -24(%rsp,%rax), %xmm2, %xmm2
2495 ; AVX512VL-NEXT: vpextrb $5, %xmm1, %eax
2496 ; AVX512VL-NEXT: andl $15, %eax
2497 ; AVX512VL-NEXT: vpinsrb $5, -24(%rsp,%rax), %xmm2, %xmm2
2498 ; AVX512VL-NEXT: vpextrb $6, %xmm1, %eax
2499 ; AVX512VL-NEXT: andl $15, %eax
2500 ; AVX512VL-NEXT: vpinsrb $6, -24(%rsp,%rax), %xmm2, %xmm2
2501 ; AVX512VL-NEXT: vpextrb $7, %xmm1, %eax
2502 ; AVX512VL-NEXT: andl $15, %eax
2503 ; AVX512VL-NEXT: vpinsrb $7, -24(%rsp,%rax), %xmm2, %xmm2
2504 ; AVX512VL-NEXT: vpextrb $8, %xmm1, %eax
2505 ; AVX512VL-NEXT: andl $15, %eax
2506 ; AVX512VL-NEXT: vpinsrb $8, -24(%rsp,%rax), %xmm2, %xmm2
2507 ; AVX512VL-NEXT: vpextrb $9, %xmm1, %eax
2508 ; AVX512VL-NEXT: andl $15, %eax
2509 ; AVX512VL-NEXT: vpinsrb $9, -24(%rsp,%rax), %xmm2, %xmm2
2510 ; AVX512VL-NEXT: vpextrb $10, %xmm1, %eax
2511 ; AVX512VL-NEXT: andl $15, %eax
2512 ; AVX512VL-NEXT: vpinsrb $10, -24(%rsp,%rax), %xmm2, %xmm2
2513 ; AVX512VL-NEXT: vpextrb $11, %xmm1, %eax
2514 ; AVX512VL-NEXT: andl $15, %eax
2515 ; AVX512VL-NEXT: vpinsrb $11, -24(%rsp,%rax), %xmm2, %xmm2
2516 ; AVX512VL-NEXT: vpextrb $12, %xmm1, %eax
2517 ; AVX512VL-NEXT: andl $15, %eax
2518 ; AVX512VL-NEXT: vpinsrb $12, -24(%rsp,%rax), %xmm2, %xmm2
2519 ; AVX512VL-NEXT: vpextrb $13, %xmm1, %eax
2520 ; AVX512VL-NEXT: andl $15, %eax
2521 ; AVX512VL-NEXT: vpinsrb $13, -24(%rsp,%rax), %xmm2, %xmm2
2522 ; AVX512VL-NEXT: vpextrb $14, %xmm1, %eax
2523 ; AVX512VL-NEXT: andl $15, %eax
2524 ; AVX512VL-NEXT: vpinsrb $14, -24(%rsp,%rax), %xmm2, %xmm2
2525 ; AVX512VL-NEXT: vpextrb $15, %xmm1, %eax
2526 ; AVX512VL-NEXT: andl $15, %eax
2527 ; AVX512VL-NEXT: movzbl -24(%rsp,%rax), %eax
2528 ; AVX512VL-NEXT: vpinsrb $15, %eax, %xmm2, %xmm1
2529 ; AVX512VL-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0
1399 ; AVX512VL-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1400 ; AVX512VL-NEXT: vpshufb %ymm1, %ymm0, %ymm2
1401 ; AVX512VL-NEXT: vinserti128 $1, %xmm0, %ymm0, %ymm0
1402 ; AVX512VL-NEXT: vpshufb %ymm1, %ymm0, %ymm0
1403 ; AVX512VL-NEXT: vpcmpgtb {{.*}}(%rip), %ymm1, %ymm1
1404 ; AVX512VL-NEXT: vpblendvb %ymm1, %ymm2, %ymm0, %ymm0
25301405 ; AVX512VL-NEXT: retq
25311406 ;
25321407 ; VBMI-LABEL: var_shuffle_v32i8_from_v16i8: