@@ -632,67 +632,46 @@ define <8 x i32> @widen_ctlz_v2i32_v8i32(<2 x i32> %a0, <2 x i32> %a1, <2 x i32>
632
632
; AVX2: # %bb.0:
633
633
; AVX2-NEXT: # kill: def $xmm1 killed $xmm1 def $ymm1
634
634
; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
635
- ; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4
636
- ; AVX2-NEXT: vpsrlw $4, %xmm0, %xmm5
637
- ; AVX2-NEXT: vpbroadcastb {{.*#+}} xmm6 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
638
- ; AVX2-NEXT: vpand %xmm6, %xmm5, %xmm5
639
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm1, %xmm7
640
- ; AVX2-NEXT: vpsrlw $4, %xmm1, %xmm8
641
- ; AVX2-NEXT: vpand %xmm6, %xmm8, %xmm8
642
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm8, %xmm8
643
- ; AVX2-NEXT: vpsrlw $4, %xmm2, %xmm9
644
- ; AVX2-NEXT: vpand %xmm6, %xmm9, %xmm9
645
- ; AVX2-NEXT: vpsrlw $4, %xmm3, %xmm10
646
- ; AVX2-NEXT: vpand %xmm6, %xmm10, %xmm6
647
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm6, %xmm6
648
- ; AVX2-NEXT: vinserti128 $1, %xmm6, %ymm8, %ymm6
649
- ; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm8
650
- ; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm10 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0,4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
651
- ; AVX2-NEXT: # ymm10 = mem[0,1,0,1]
652
- ; AVX2-NEXT: vpshufb %ymm8, %ymm10, %ymm11
653
- ; AVX2-NEXT: vpand %ymm6, %ymm11, %ymm6
654
- ; AVX2-NEXT: vpsrlw $4, %ymm8, %ymm8
655
- ; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm11 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
656
- ; AVX2-NEXT: vpand %ymm11, %ymm8, %ymm8
657
- ; AVX2-NEXT: vpshufb %ymm8, %ymm10, %ymm8
658
- ; AVX2-NEXT: vpaddb %ymm6, %ymm8, %ymm6
659
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm3, %xmm8
660
- ; AVX2-NEXT: vinserti128 $1, %xmm8, %ymm7, %ymm7
661
- ; AVX2-NEXT: vpsrlw $8, %ymm7, %ymm7
662
- ; AVX2-NEXT: vpand %ymm7, %ymm6, %ymm7
663
- ; AVX2-NEXT: vpsrlw $8, %ymm6, %ymm6
664
- ; AVX2-NEXT: vpaddw %ymm7, %ymm6, %ymm6
665
- ; AVX2-NEXT: vpcmpeqw %xmm4, %xmm1, %xmm1
666
- ; AVX2-NEXT: vpcmpeqw %xmm4, %xmm3, %xmm3
667
635
; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1
668
- ; AVX2-NEXT: vpcmpeqw %xmm4, %xmm0, %xmm3
636
+ ; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0,4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
637
+ ; AVX2-NEXT: # ymm3 = mem[0,1,0,1]
638
+ ; AVX2-NEXT: vpshufb %ymm1, %ymm3, %ymm4
639
+ ; AVX2-NEXT: vpsrlw $4, %ymm1, %ymm5
640
+ ; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm6 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
641
+ ; AVX2-NEXT: vpand %ymm6, %ymm5, %ymm5
642
+ ; AVX2-NEXT: vpxor %xmm7, %xmm7, %xmm7
643
+ ; AVX2-NEXT: vpcmpeqb %ymm7, %ymm5, %ymm8
644
+ ; AVX2-NEXT: vpand %ymm4, %ymm8, %ymm4
645
+ ; AVX2-NEXT: vpshufb %ymm5, %ymm3, %ymm5
646
+ ; AVX2-NEXT: vpaddb %ymm5, %ymm4, %ymm4
647
+ ; AVX2-NEXT: vpcmpeqb %ymm7, %ymm1, %ymm5
648
+ ; AVX2-NEXT: vpsrlw $8, %ymm5, %ymm5
649
+ ; AVX2-NEXT: vpand %ymm5, %ymm4, %ymm5
650
+ ; AVX2-NEXT: vpsrlw $8, %ymm4, %ymm4
651
+ ; AVX2-NEXT: vpaddw %ymm5, %ymm4, %ymm4
652
+ ; AVX2-NEXT: vpcmpeqw %ymm7, %ymm1, %ymm1
669
653
; AVX2-NEXT: vpsrld $16, %ymm1, %ymm1
670
- ; AVX2-NEXT: vpand %ymm1, %ymm6, %ymm1
671
- ; AVX2-NEXT: vpsrld $16, %ymm6, %ymm6
672
- ; AVX2-NEXT: vpaddd %ymm1, %ymm6, %ymm1
673
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm0, %xmm6
674
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm5, %xmm5
675
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm9, %xmm7
676
- ; AVX2-NEXT: vinserti128 $1, %xmm7, %ymm5, %ymm5
677
- ; AVX2-NEXT: vpcmpeqw %xmm4, %xmm2, %xmm7
678
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm2, %xmm4
654
+ ; AVX2-NEXT: vpand %ymm1, %ymm4, %ymm1
655
+ ; AVX2-NEXT: vpsrld $16, %ymm4, %ymm4
656
+ ; AVX2-NEXT: vpaddd %ymm1, %ymm4, %ymm1
679
657
; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
680
- ; AVX2-NEXT: vpshufb %ymm0, %ymm10, %ymm2
658
+ ; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm2
659
+ ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4
660
+ ; AVX2-NEXT: vpand %ymm6, %ymm4, %ymm4
661
+ ; AVX2-NEXT: vpcmpeqb %ymm7, %ymm4, %ymm5
681
662
; AVX2-NEXT: vpand %ymm5, %ymm2, %ymm2
682
- ; AVX2-NEXT: vpsrlw $4 , %ymm0 , %ymm0
683
- ; AVX2-NEXT: vpand %ymm0 , %ymm11 , %ymm0
684
- ; AVX2-NEXT: vpshufb %ymm0 , %ymm10 , %ymm0
685
- ; AVX2-NEXT: vpaddb %ymm0 , %ymm2 , %ymm0
686
- ; AVX2-NEXT: vinserti128 $1, %xmm4 , %ymm6 , %ymm2
663
+ ; AVX2-NEXT: vpshufb %ymm4 , %ymm3 , %ymm3
664
+ ; AVX2-NEXT: vpaddb %ymm3 , %ymm2 , %ymm2
665
+ ; AVX2-NEXT: vpcmpeqb %ymm7 , %ymm0 , %ymm3
666
+ ; AVX2-NEXT: vpsrlw $8 , %ymm3 , %ymm3
667
+ ; AVX2-NEXT: vpand %ymm3 , %ymm2 , %ymm3
687
668
; AVX2-NEXT: vpsrlw $8, %ymm2, %ymm2
688
- ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm2
689
- ; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0
690
- ; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
691
- ; AVX2-NEXT: vinserti128 $1, %xmm7, %ymm3, %ymm2
692
- ; AVX2-NEXT: vpsrld $16, %ymm2, %ymm2
693
- ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm2
669
+ ; AVX2-NEXT: vpaddw %ymm3, %ymm2, %ymm2
670
+ ; AVX2-NEXT: vpcmpeqw %ymm7, %ymm0, %ymm0
694
671
; AVX2-NEXT: vpsrld $16, %ymm0, %ymm0
695
- ; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
672
+ ; AVX2-NEXT: vpand %ymm0, %ymm2, %ymm0
673
+ ; AVX2-NEXT: vpsrld $16, %ymm2, %ymm2
674
+ ; AVX2-NEXT: vpaddd %ymm0, %ymm2, %ymm0
696
675
; AVX2-NEXT: vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
697
676
; AVX2-NEXT: retq
698
677
;
@@ -1008,67 +987,46 @@ define <8 x i32> @widen_ctlz_undef_v2i32_v8i32(<2 x i32> %a0, <2 x i32> %a1, <2
1008
987
; AVX2: # %bb.0:
1009
988
; AVX2-NEXT: # kill: def $xmm1 killed $xmm1 def $ymm1
1010
989
; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1011
- ; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4
1012
- ; AVX2-NEXT: vpsrlw $4, %xmm0, %xmm5
1013
- ; AVX2-NEXT: vpbroadcastb {{.*#+}} xmm6 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1014
- ; AVX2-NEXT: vpand %xmm6, %xmm5, %xmm5
1015
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm1, %xmm7
1016
- ; AVX2-NEXT: vpsrlw $4, %xmm1, %xmm8
1017
- ; AVX2-NEXT: vpand %xmm6, %xmm8, %xmm8
1018
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm8, %xmm8
1019
- ; AVX2-NEXT: vpsrlw $4, %xmm2, %xmm9
1020
- ; AVX2-NEXT: vpand %xmm6, %xmm9, %xmm9
1021
- ; AVX2-NEXT: vpsrlw $4, %xmm3, %xmm10
1022
- ; AVX2-NEXT: vpand %xmm6, %xmm10, %xmm6
1023
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm6, %xmm6
1024
- ; AVX2-NEXT: vinserti128 $1, %xmm6, %ymm8, %ymm6
1025
- ; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm8
1026
- ; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm10 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0,4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
1027
- ; AVX2-NEXT: # ymm10 = mem[0,1,0,1]
1028
- ; AVX2-NEXT: vpshufb %ymm8, %ymm10, %ymm11
1029
- ; AVX2-NEXT: vpand %ymm6, %ymm11, %ymm6
1030
- ; AVX2-NEXT: vpsrlw $4, %ymm8, %ymm8
1031
- ; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm11 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
1032
- ; AVX2-NEXT: vpand %ymm11, %ymm8, %ymm8
1033
- ; AVX2-NEXT: vpshufb %ymm8, %ymm10, %ymm8
1034
- ; AVX2-NEXT: vpaddb %ymm6, %ymm8, %ymm6
1035
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm3, %xmm8
1036
- ; AVX2-NEXT: vinserti128 $1, %xmm8, %ymm7, %ymm7
1037
- ; AVX2-NEXT: vpsrlw $8, %ymm7, %ymm7
1038
- ; AVX2-NEXT: vpand %ymm7, %ymm6, %ymm7
1039
- ; AVX2-NEXT: vpsrlw $8, %ymm6, %ymm6
1040
- ; AVX2-NEXT: vpaddw %ymm7, %ymm6, %ymm6
1041
- ; AVX2-NEXT: vpcmpeqw %xmm4, %xmm1, %xmm1
1042
- ; AVX2-NEXT: vpcmpeqw %xmm4, %xmm3, %xmm3
1043
990
; AVX2-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1
1044
- ; AVX2-NEXT: vpcmpeqw %xmm4, %xmm0, %xmm3
991
+ ; AVX2-NEXT: vbroadcasti128 {{.*#+}} ymm3 = [4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0,4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0]
992
+ ; AVX2-NEXT: # ymm3 = mem[0,1,0,1]
993
+ ; AVX2-NEXT: vpshufb %ymm1, %ymm3, %ymm4
994
+ ; AVX2-NEXT: vpsrlw $4, %ymm1, %ymm5
995
+ ; AVX2-NEXT: vpbroadcastb {{.*#+}} ymm6 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
996
+ ; AVX2-NEXT: vpand %ymm6, %ymm5, %ymm5
997
+ ; AVX2-NEXT: vpxor %xmm7, %xmm7, %xmm7
998
+ ; AVX2-NEXT: vpcmpeqb %ymm7, %ymm5, %ymm8
999
+ ; AVX2-NEXT: vpand %ymm4, %ymm8, %ymm4
1000
+ ; AVX2-NEXT: vpshufb %ymm5, %ymm3, %ymm5
1001
+ ; AVX2-NEXT: vpaddb %ymm5, %ymm4, %ymm4
1002
+ ; AVX2-NEXT: vpcmpeqb %ymm7, %ymm1, %ymm5
1003
+ ; AVX2-NEXT: vpsrlw $8, %ymm5, %ymm5
1004
+ ; AVX2-NEXT: vpand %ymm5, %ymm4, %ymm5
1005
+ ; AVX2-NEXT: vpsrlw $8, %ymm4, %ymm4
1006
+ ; AVX2-NEXT: vpaddw %ymm5, %ymm4, %ymm4
1007
+ ; AVX2-NEXT: vpcmpeqw %ymm7, %ymm1, %ymm1
1045
1008
; AVX2-NEXT: vpsrld $16, %ymm1, %ymm1
1046
- ; AVX2-NEXT: vpand %ymm1, %ymm6, %ymm1
1047
- ; AVX2-NEXT: vpsrld $16, %ymm6, %ymm6
1048
- ; AVX2-NEXT: vpaddd %ymm1, %ymm6, %ymm1
1049
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm0, %xmm6
1050
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm5, %xmm5
1051
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm9, %xmm7
1052
- ; AVX2-NEXT: vinserti128 $1, %xmm7, %ymm5, %ymm5
1053
- ; AVX2-NEXT: vpcmpeqw %xmm4, %xmm2, %xmm7
1054
- ; AVX2-NEXT: vpcmpeqb %xmm4, %xmm2, %xmm4
1009
+ ; AVX2-NEXT: vpand %ymm1, %ymm4, %ymm1
1010
+ ; AVX2-NEXT: vpsrld $16, %ymm4, %ymm4
1011
+ ; AVX2-NEXT: vpaddd %ymm1, %ymm4, %ymm1
1055
1012
; AVX2-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0
1056
- ; AVX2-NEXT: vpshufb %ymm0, %ymm10, %ymm2
1013
+ ; AVX2-NEXT: vpshufb %ymm0, %ymm3, %ymm2
1014
+ ; AVX2-NEXT: vpsrlw $4, %ymm0, %ymm4
1015
+ ; AVX2-NEXT: vpand %ymm6, %ymm4, %ymm4
1016
+ ; AVX2-NEXT: vpcmpeqb %ymm7, %ymm4, %ymm5
1057
1017
; AVX2-NEXT: vpand %ymm5, %ymm2, %ymm2
1058
- ; AVX2-NEXT: vpsrlw $4 , %ymm0 , %ymm0
1059
- ; AVX2-NEXT: vpand %ymm0 , %ymm11 , %ymm0
1060
- ; AVX2-NEXT: vpshufb %ymm0 , %ymm10 , %ymm0
1061
- ; AVX2-NEXT: vpaddb %ymm0 , %ymm2 , %ymm0
1062
- ; AVX2-NEXT: vinserti128 $1, %xmm4 , %ymm6 , %ymm2
1018
+ ; AVX2-NEXT: vpshufb %ymm4 , %ymm3 , %ymm3
1019
+ ; AVX2-NEXT: vpaddb %ymm3 , %ymm2 , %ymm2
1020
+ ; AVX2-NEXT: vpcmpeqb %ymm7 , %ymm0 , %ymm3
1021
+ ; AVX2-NEXT: vpsrlw $8 , %ymm3 , %ymm3
1022
+ ; AVX2-NEXT: vpand %ymm3 , %ymm2 , %ymm3
1063
1023
; AVX2-NEXT: vpsrlw $8, %ymm2, %ymm2
1064
- ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm2
1065
- ; AVX2-NEXT: vpsrlw $8, %ymm0, %ymm0
1066
- ; AVX2-NEXT: vpaddw %ymm2, %ymm0, %ymm0
1067
- ; AVX2-NEXT: vinserti128 $1, %xmm7, %ymm3, %ymm2
1068
- ; AVX2-NEXT: vpsrld $16, %ymm2, %ymm2
1069
- ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm2
1024
+ ; AVX2-NEXT: vpaddw %ymm3, %ymm2, %ymm2
1025
+ ; AVX2-NEXT: vpcmpeqw %ymm7, %ymm0, %ymm0
1070
1026
; AVX2-NEXT: vpsrld $16, %ymm0, %ymm0
1071
- ; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
1027
+ ; AVX2-NEXT: vpand %ymm0, %ymm2, %ymm0
1028
+ ; AVX2-NEXT: vpsrld $16, %ymm2, %ymm2
1029
+ ; AVX2-NEXT: vpaddd %ymm0, %ymm2, %ymm0
1072
1030
; AVX2-NEXT: vpunpcklqdq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
1073
1031
; AVX2-NEXT: retq
1074
1032
;
0 commit comments