xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/vector-tzcnt-256.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by update_llc_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512cd,+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512CDVL
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512cd,-avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX512CD
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @testv4i64(<4 x i64> %in) nounwind {
8*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv4i64:
9*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
10*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
11*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
12*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm1, %xmm2, %xmm1
13*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm0, %xmm2, %xmm3
14*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm3, %ymm1
15*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
16*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
17*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,1]
18*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm3, %xmm1, %xmm1
19*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
20*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm5
21*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
22*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
23*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
24*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
25*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm6, %xmm1
26*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm5, %xmm1, %xmm1
27*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm2, %xmm1, %xmm1
28*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm3, %xmm0, %xmm0
29*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm3
30*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3
31*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
32*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
33*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0
34*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm0
35*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm2, %xmm0, %xmm0
36*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
37*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
38*9880d681SAndroid Build Coastguard Worker;
39*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv4i64:
40*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
41*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
42*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm0, %ymm1, %ymm2
43*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
44*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
45*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm2, %ymm0, %ymm0
46*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [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]
47*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm3
48*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
49*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
50*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
51*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
52*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
53*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
54*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
55*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
56*9880d681SAndroid Build Coastguard Worker;
57*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv4i64:
58*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
59*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpxord %ymm1, %ymm1, %ymm1
60*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubq %ymm0, %ymm1, %ymm2
61*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm2, %ymm0, %ymm0
62*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubq {{.*}}(%rip){1to4}, %ymm0, %ymm0
63*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm2 = [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]
64*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm2, %ymm0, %ymm3
65*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
66*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
67*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
68*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm2, %ymm0, %ymm0
69*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
70*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
71*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
72*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
73*9880d681SAndroid Build Coastguard Worker;
74*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv4i64:
75*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
76*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpxor %ymm1, %ymm1, %ymm1
77*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubq %ymm0, %ymm1, %ymm2
78*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm2, %ymm0, %ymm0
79*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
80*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubq %ymm2, %ymm0, %ymm0
81*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm2 = [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]
82*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm2, %ymm0, %ymm3
83*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
84*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
85*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsrlw $4, %ymm0, %ymm0
86*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm2, %ymm0, %ymm0
87*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
88*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
89*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
90*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
91*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %in, i1 0)
92*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %out
93*9880d681SAndroid Build Coastguard Worker}
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @testv4i64u(<4 x i64> %in) nounwind {
96*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv4i64u:
97*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
98*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
99*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
100*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm1, %xmm2, %xmm1
101*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm0, %xmm2, %xmm3
102*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm3, %ymm1
103*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
104*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
105*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,1]
106*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm3, %xmm1, %xmm1
107*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
108*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm5
109*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
110*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
111*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
112*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
113*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm6, %xmm1
114*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm5, %xmm1, %xmm1
115*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm2, %xmm1, %xmm1
116*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubq %xmm3, %xmm0, %xmm0
117*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm3
118*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3
119*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
120*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
121*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0
122*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm0
123*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm2, %xmm0, %xmm0
124*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
125*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
126*9880d681SAndroid Build Coastguard Worker;
127*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv4i64u:
128*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
129*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
130*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm0, %ymm1, %ymm2
131*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
132*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm2
133*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubq %ymm2, %ymm0, %ymm0
134*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [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]
135*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm3
136*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
137*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
138*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
139*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
140*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
141*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
142*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
143*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
144*9880d681SAndroid Build Coastguard Worker;
145*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv4i64u:
146*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
147*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpxord %ymm1, %ymm1, %ymm1
148*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubq %ymm0, %ymm1, %ymm1
149*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
150*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vplzcntq %ymm0, %ymm0
151*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm1
152*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubq %ymm0, %ymm1, %ymm0
153*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
154*9880d681SAndroid Build Coastguard Worker;
155*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv4i64u:
156*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
157*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpxor %ymm1, %ymm1, %ymm1
158*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubq %ymm0, %ymm1, %ymm1
159*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
160*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vplzcntq %zmm0, %zmm0
161*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpbroadcastq {{.*}}(%rip), %ymm1
162*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubq %ymm0, %ymm1, %ymm0
163*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
164*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %in, i1 -1)
165*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %out
166*9880d681SAndroid Build Coastguard Worker}
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @testv8i32(<8 x i32> %in) nounwind {
169*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv8i32:
170*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
171*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
172*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
173*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm2, %xmm1, %xmm2
174*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm0, %xmm1, %xmm3
175*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
176*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0
177*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
178*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,1,1,1]
179*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm3, %xmm2, %xmm2
180*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
181*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5
182*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
183*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
184*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
185*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
186*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm6, %xmm2
187*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm5, %xmm2, %xmm2
188*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
189*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm1, %xmm5, %xmm5
190*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
191*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
192*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
193*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm3, %xmm0, %xmm0
194*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm3
195*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3
196*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
197*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
198*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0
199*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm0
200*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
201*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm1, %xmm3, %xmm3
202*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
203*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
204*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
205*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
206*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
207*9880d681SAndroid Build Coastguard Worker;
208*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv8i32:
209*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
210*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
211*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd %ymm0, %ymm1, %ymm2
212*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
213*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm2
214*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd %ymm2, %ymm0, %ymm0
215*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [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]
216*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm3
217*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
218*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
219*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
220*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
221*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
222*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
223*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
224*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
225*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
226*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
227*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
228*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
229*9880d681SAndroid Build Coastguard Worker;
230*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv8i32:
231*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
232*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpxord %ymm1, %ymm1, %ymm1
233*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubd %ymm0, %ymm1, %ymm2
234*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandd %ymm2, %ymm0, %ymm0
235*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubd {{.*}}(%rip){1to8}, %ymm0, %ymm0
236*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm2 = [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]
237*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm2, %ymm0, %ymm3
238*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
239*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
240*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
241*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm2, %ymm0, %ymm0
242*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
243*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
244*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
245*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
246*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
247*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
248*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
249*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
250*9880d681SAndroid Build Coastguard Worker;
251*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv8i32:
252*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
253*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpxor %ymm1, %ymm1, %ymm1
254*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubd %ymm0, %ymm1, %ymm2
255*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm2, %ymm0, %ymm0
256*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm2
257*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubd %ymm2, %ymm0, %ymm0
258*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm2 = [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]
259*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm2, %ymm0, %ymm3
260*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
261*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
262*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsrlw $4, %ymm0, %ymm0
263*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm2, %ymm0, %ymm0
264*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
265*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
266*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
267*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
268*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
269*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
270*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
271*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
272*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %in, i1 0)
273*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %out
274*9880d681SAndroid Build Coastguard Worker}
275*9880d681SAndroid Build Coastguard Worker
276*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @testv8i32u(<8 x i32> %in) nounwind {
277*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv8i32u:
278*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
279*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
280*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
281*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm2, %xmm1, %xmm2
282*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm0, %xmm1, %xmm3
283*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
284*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm2, %ymm0, %ymm0
285*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
286*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,1,1,1]
287*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm3, %xmm2, %xmm2
288*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
289*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm5
290*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
291*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm5, %xmm6, %xmm5
292*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
293*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm2, %xmm2
294*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm6, %xmm2
295*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm5, %xmm2, %xmm2
296*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm5 = xmm2[2],xmm1[2],xmm2[3],xmm1[3]
297*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm1, %xmm5, %xmm5
298*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
299*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm1, %xmm2, %xmm2
300*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm5, %xmm2, %xmm2
301*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubd %xmm3, %xmm0, %xmm0
302*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm3
303*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm3, %xmm6, %xmm3
304*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
305*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
306*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm6, %xmm0
307*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm3, %xmm0, %xmm0
308*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm3 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]
309*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm1, %xmm3, %xmm3
310*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpunpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
311*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsadbw %xmm1, %xmm0, %xmm0
312*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
313*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
314*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
315*9880d681SAndroid Build Coastguard Worker;
316*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv8i32u:
317*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
318*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
319*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd %ymm0, %ymm1, %ymm2
320*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
321*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm2
322*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubd %ymm2, %ymm0, %ymm0
323*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [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]
324*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm3
325*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm4 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
326*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm3, %ymm4, %ymm3
327*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
328*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm2, %ymm0, %ymm0
329*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm4, %ymm0
330*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm3, %ymm0, %ymm0
331*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckhdq {{.*#+}} ymm2 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
332*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsadbw %ymm1, %ymm2, %ymm2
333*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpunpckldq {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
334*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsadbw %ymm1, %ymm0, %ymm0
335*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
336*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
337*9880d681SAndroid Build Coastguard Worker;
338*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv8i32u:
339*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
340*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpxord %ymm1, %ymm1, %ymm1
341*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubd %ymm0, %ymm1, %ymm1
342*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandd %ymm1, %ymm0, %ymm0
343*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vplzcntd %ymm0, %ymm0
344*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm1
345*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubd %ymm0, %ymm1, %ymm0
346*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
347*9880d681SAndroid Build Coastguard Worker;
348*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv8i32u:
349*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
350*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpxor %ymm1, %ymm1, %ymm1
351*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubd %ymm0, %ymm1, %ymm1
352*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
353*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vplzcntd %zmm0, %zmm0
354*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpbroadcastd {{.*}}(%rip), %ymm1
355*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubd %ymm0, %ymm1, %ymm0
356*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
357*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %in, i1 -1)
358*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %out
359*9880d681SAndroid Build Coastguard Worker}
360*9880d681SAndroid Build Coastguard Worker
361*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @testv16i16(<16 x i16> %in) nounwind {
362*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv16i16:
363*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
364*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
365*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
366*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm1, %xmm2, %xmm1
367*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm0, %xmm2, %xmm2
368*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
369*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
370*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1]
371*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm1, %xmm0, %xmm2
372*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
373*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm4
374*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
375*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
376*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
377*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2
378*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2
379*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm4, %xmm2, %xmm2
380*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
381*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
382*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
383*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
384*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm1, %xmm0, %xmm0
385*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm1
386*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm5, %xmm1
387*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
388*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
389*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm5, %xmm0
390*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
391*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
392*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
393*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
394*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm0
395*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
396*9880d681SAndroid Build Coastguard Worker;
397*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv16i16:
398*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
399*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
400*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubw %ymm0, %ymm1, %ymm1
401*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
402*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
403*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [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]
404*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
405*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
406*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
407*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
408*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
409*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
410*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
411*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
412*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
413*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
414*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
415*9880d681SAndroid Build Coastguard Worker;
416*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv16i16:
417*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
418*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpxord %ymm1, %ymm1, %ymm1
419*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubw %ymm0, %ymm1, %ymm1
420*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
421*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
422*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm1 = [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]
423*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm2
424*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
425*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
426*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
427*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
428*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
429*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
430*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsllw $8, %ymm0, %ymm1
431*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
432*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsrlw $8, %ymm0, %ymm0
433*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
434*9880d681SAndroid Build Coastguard Worker;
435*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv16i16:
436*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
437*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpxor %ymm1, %ymm1, %ymm1
438*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubw %ymm0, %ymm1, %ymm1
439*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
440*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
441*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm1 = [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]
442*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm2
443*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
444*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
445*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsrlw $4, %ymm0, %ymm0
446*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
447*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
448*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
449*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsllw $8, %ymm0, %ymm1
450*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
451*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsrlw $8, %ymm0, %ymm0
452*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
453*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %in, i1 0)
454*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %out
455*9880d681SAndroid Build Coastguard Worker}
456*9880d681SAndroid Build Coastguard Worker
457*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @testv16i16u(<16 x i16> %in) nounwind {
458*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv16i16u:
459*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
460*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
461*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
462*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm1, %xmm2, %xmm1
463*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm0, %xmm2, %xmm2
464*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
465*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
466*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [1,1,1,1,1,1,1,1]
467*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm1, %xmm0, %xmm2
468*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
469*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm4
470*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
471*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
472*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm2, %xmm2
473*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2
474*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2
475*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm4, %xmm2, %xmm2
476*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $8, %xmm2, %xmm4
477*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm2, %xmm4, %xmm2
478*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
479*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
480*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubw %xmm1, %xmm0, %xmm0
481*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm1
482*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm5, %xmm1
483*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
484*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
485*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm5, %xmm0
486*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm1, %xmm0, %xmm0
487*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsllw $8, %xmm0, %xmm1
488*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm0, %xmm1, %xmm0
489*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
490*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm2, %ymm0
491*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
492*9880d681SAndroid Build Coastguard Worker;
493*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv16i16u:
494*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
495*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
496*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubw %ymm0, %ymm1, %ymm1
497*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
498*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
499*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [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]
500*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
501*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
502*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
503*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
504*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
505*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
506*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
507*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsllw $8, %ymm0, %ymm1
508*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
509*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
510*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
511*9880d681SAndroid Build Coastguard Worker;
512*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv16i16u:
513*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
514*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpxord %ymm1, %ymm1, %ymm1
515*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubw %ymm0, %ymm1, %ymm1
516*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
517*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
518*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm1 = [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]
519*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm2
520*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
521*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
522*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
523*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
524*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
525*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
526*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsllw $8, %ymm0, %ymm1
527*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
528*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsrlw $8, %ymm0, %ymm0
529*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
530*9880d681SAndroid Build Coastguard Worker;
531*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv16i16u:
532*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
533*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpxor %ymm1, %ymm1, %ymm1
534*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubw %ymm0, %ymm1, %ymm1
535*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
536*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubw {{.*}}(%rip), %ymm0, %ymm0
537*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm1 = [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]
538*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm2
539*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
540*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
541*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsrlw $4, %ymm0, %ymm0
542*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
543*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
544*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
545*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsllw $8, %ymm0, %ymm1
546*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpaddb %ymm0, %ymm1, %ymm0
547*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsrlw $8, %ymm0, %ymm0
548*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
549*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %in, i1 -1)
550*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %out
551*9880d681SAndroid Build Coastguard Worker}
552*9880d681SAndroid Build Coastguard Worker
553*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @testv32i8(<32 x i8> %in) nounwind {
554*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv32i8:
555*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
556*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
557*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
558*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubb %xmm1, %xmm2, %xmm1
559*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubb %xmm0, %xmm2, %xmm2
560*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
561*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
562*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
563*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
564*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubb %xmm2, %xmm1, %xmm1
565*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
566*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm4
567*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
568*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
569*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
570*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
571*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm5, %xmm1
572*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm4, %xmm1, %xmm1
573*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubb %xmm2, %xmm0, %xmm0
574*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm2
575*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2
576*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
577*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
578*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm5, %xmm0
579*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
580*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
581*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
582*9880d681SAndroid Build Coastguard Worker;
583*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv32i8:
584*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
585*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
586*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubb %ymm0, %ymm1, %ymm1
587*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
588*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubb {{.*}}(%rip), %ymm0, %ymm0
589*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [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]
590*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
591*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
592*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
593*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
594*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
595*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
596*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
597*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
598*9880d681SAndroid Build Coastguard Worker;
599*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv32i8:
600*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
601*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpxord %ymm1, %ymm1, %ymm1
602*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubb %ymm0, %ymm1, %ymm1
603*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
604*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubb {{.*}}(%rip), %ymm0, %ymm0
605*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm1 = [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]
606*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm2
607*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
608*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
609*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
610*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
611*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
612*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
613*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
614*9880d681SAndroid Build Coastguard Worker;
615*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv32i8:
616*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
617*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpxor %ymm1, %ymm1, %ymm1
618*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubb %ymm0, %ymm1, %ymm1
619*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
620*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubb {{.*}}(%rip), %ymm0, %ymm0
621*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm1 = [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]
622*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm2
623*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
624*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
625*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsrlw $4, %ymm0, %ymm0
626*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
627*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
628*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
629*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
630*9880d681SAndroid Build Coastguard Worker  %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %in, i1 0)
631*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %out
632*9880d681SAndroid Build Coastguard Worker}
633*9880d681SAndroid Build Coastguard Worker
634*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @testv32i8u(<32 x i8> %in) nounwind {
635*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: testv32i8u:
636*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
637*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
638*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
639*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubb %xmm1, %xmm2, %xmm1
640*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubb %xmm0, %xmm2, %xmm2
641*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
642*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vandps %ymm1, %ymm0, %ymm0
643*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
644*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
645*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubb %xmm2, %xmm1, %xmm1
646*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15]
647*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm4
648*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovdqa {{.*#+}} xmm5 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
649*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm4, %xmm5, %xmm4
650*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm1, %xmm1
651*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
652*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm1, %xmm5, %xmm1
653*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm4, %xmm1, %xmm1
654*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsubb %xmm2, %xmm0, %xmm0
655*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm2
656*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm2, %xmm5, %xmm2
657*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpsrlw $4, %xmm0, %xmm0
658*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpand %xmm3, %xmm0, %xmm0
659*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpshufb %xmm0, %xmm5, %xmm0
660*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vpaddb %xmm2, %xmm0, %xmm0
661*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
662*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
663*9880d681SAndroid Build Coastguard Worker;
664*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: testv32i8u:
665*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
666*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpxor %ymm1, %ymm1, %ymm1
667*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubb %ymm0, %ymm1, %ymm1
668*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
669*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsubb {{.*}}(%rip), %ymm0, %ymm0
670*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [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]
671*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm2
672*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
673*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
674*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpsrlw $4, %ymm0, %ymm0
675*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpand %ymm1, %ymm0, %ymm0
676*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
677*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
678*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
679*9880d681SAndroid Build Coastguard Worker;
680*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: testv32i8u:
681*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
682*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpxord %ymm1, %ymm1, %ymm1
683*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubb %ymm0, %ymm1, %ymm1
684*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
685*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsubb {{.*}}(%rip), %ymm0, %ymm0
686*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm1 = [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]
687*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm2
688*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
689*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
690*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpsrlw $4, %ymm0, %ymm0
691*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpandq %ymm1, %ymm0, %ymm0
692*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
693*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
694*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
695*9880d681SAndroid Build Coastguard Worker;
696*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: testv32i8u:
697*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
698*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpxor %ymm1, %ymm1, %ymm1
699*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubb %ymm0, %ymm1, %ymm1
700*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
701*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsubb {{.*}}(%rip), %ymm0, %ymm0
702*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm1 = [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]
703*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm2
704*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovdqa {{.*#+}} ymm3 = [0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4]
705*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm2, %ymm3, %ymm2
706*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpsrlw $4, %ymm0, %ymm0
707*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpand %ymm1, %ymm0, %ymm0
708*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpshufb %ymm0, %ymm3, %ymm0
709*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vpaddb %ymm2, %ymm0, %ymm0
710*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
711*9880d681SAndroid Build Coastguard Worker  %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %in, i1 -1)
712*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %out
713*9880d681SAndroid Build Coastguard Worker}
714*9880d681SAndroid Build Coastguard Worker
715*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @foldv4i64() nounwind {
716*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv4i64:
717*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
718*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,64,0]
719*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
720*9880d681SAndroid Build Coastguard Worker;
721*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv4i64:
722*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
723*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,64,0]
724*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
725*9880d681SAndroid Build Coastguard Worker;
726*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv4i64:
727*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
728*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm0 = [8,0,64,0]
729*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
730*9880d681SAndroid Build Coastguard Worker;
731*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv4i64:
732*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
733*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,64,0]
734*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
735*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> <i64 256, i64 -1, i64 0, i64 255>, i1 0)
736*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %out
737*9880d681SAndroid Build Coastguard Worker}
738*9880d681SAndroid Build Coastguard Worker
739*9880d681SAndroid Build Coastguard Workerdefine <4 x i64> @foldv4i64u() nounwind {
740*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv4i64u:
741*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
742*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,64,0]
743*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
744*9880d681SAndroid Build Coastguard Worker;
745*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv4i64u:
746*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
747*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,64,0]
748*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
749*9880d681SAndroid Build Coastguard Worker;
750*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv4i64u:
751*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
752*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm0 = [8,0,64,0]
753*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
754*9880d681SAndroid Build Coastguard Worker;
755*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv4i64u:
756*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
757*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,64,0]
758*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
759*9880d681SAndroid Build Coastguard Worker  %out = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> <i64 256, i64 -1, i64 0, i64 255>, i1 -1)
760*9880d681SAndroid Build Coastguard Worker  ret <4 x i64> %out
761*9880d681SAndroid Build Coastguard Worker}
762*9880d681SAndroid Build Coastguard Worker
763*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @foldv8i32() nounwind {
764*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv8i32:
765*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
766*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3]
767*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
768*9880d681SAndroid Build Coastguard Worker;
769*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv8i32:
770*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
771*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3]
772*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
773*9880d681SAndroid Build Coastguard Worker;
774*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv8i32:
775*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
776*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa32 {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3]
777*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
778*9880d681SAndroid Build Coastguard Worker;
779*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv8i32:
780*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
781*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3]
782*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
783*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> <i32 256, i32 -1, i32 0, i32 255, i32 -65536, i32 7, i32 24, i32 88>, i1 0)
784*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %out
785*9880d681SAndroid Build Coastguard Worker}
786*9880d681SAndroid Build Coastguard Worker
787*9880d681SAndroid Build Coastguard Workerdefine <8 x i32> @foldv8i32u() nounwind {
788*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv8i32u:
789*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
790*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3]
791*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
792*9880d681SAndroid Build Coastguard Worker;
793*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv8i32u:
794*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
795*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3]
796*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
797*9880d681SAndroid Build Coastguard Worker;
798*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv8i32u:
799*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
800*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa32 {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3]
801*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
802*9880d681SAndroid Build Coastguard Worker;
803*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv8i32u:
804*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
805*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,32,0,16,0,3,3]
806*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
807*9880d681SAndroid Build Coastguard Worker  %out = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> <i32 256, i32 -1, i32 0, i32 255, i32 -65536, i32 7, i32 24, i32 88>, i1 -1)
808*9880d681SAndroid Build Coastguard Worker  ret <8 x i32> %out
809*9880d681SAndroid Build Coastguard Worker}
810*9880d681SAndroid Build Coastguard Worker
811*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @foldv16i16() nounwind {
812*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv16i16:
813*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
814*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5]
815*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
816*9880d681SAndroid Build Coastguard Worker;
817*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv16i16:
818*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
819*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5]
820*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
821*9880d681SAndroid Build Coastguard Worker;
822*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv16i16:
823*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
824*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5]
825*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
826*9880d681SAndroid Build Coastguard Worker;
827*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv16i16:
828*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
829*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5]
830*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
831*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88, i16 -2, i16 254, i16 1, i16 2, i16 4, i16 8, i16 16, i16 32>, i1 0)
832*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %out
833*9880d681SAndroid Build Coastguard Worker}
834*9880d681SAndroid Build Coastguard Worker
835*9880d681SAndroid Build Coastguard Workerdefine <16 x i16> @foldv16i16u() nounwind {
836*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv16i16u:
837*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
838*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5]
839*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
840*9880d681SAndroid Build Coastguard Worker;
841*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv16i16u:
842*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
843*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5]
844*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
845*9880d681SAndroid Build Coastguard Worker;
846*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv16i16u:
847*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
848*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5]
849*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
850*9880d681SAndroid Build Coastguard Worker;
851*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv16i16u:
852*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
853*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,16,0,16,0,3,3,1,1,0,1,2,3,4,5]
854*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
855*9880d681SAndroid Build Coastguard Worker  %out = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> <i16 256, i16 -1, i16 0, i16 255, i16 -65536, i16 7, i16 24, i16 88, i16 -2, i16 254, i16 1, i16 2, i16 4, i16 8, i16 16, i16 32>, i1 -1)
856*9880d681SAndroid Build Coastguard Worker  ret <16 x i16> %out
857*9880d681SAndroid Build Coastguard Worker}
858*9880d681SAndroid Build Coastguard Worker
859*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @foldv32i8() nounwind {
860*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv32i8:
861*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
862*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0]
863*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
864*9880d681SAndroid Build Coastguard Worker;
865*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv32i8:
866*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
867*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0]
868*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
869*9880d681SAndroid Build Coastguard Worker;
870*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv32i8:
871*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
872*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0]
873*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
874*9880d681SAndroid Build Coastguard Worker;
875*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv32i8:
876*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
877*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0]
878*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
879*9880d681SAndroid Build Coastguard Worker  %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 128, i8 256, i8 -256, i8 -128, i8 -64, i8 -32, i8 -16, i8 -8, i8 -4, i8 -2, i8 -1, i8 3, i8 5, i8 7, i8 127>, i1 0)
880*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %out
881*9880d681SAndroid Build Coastguard Worker}
882*9880d681SAndroid Build Coastguard Worker
883*9880d681SAndroid Build Coastguard Workerdefine <32 x i8> @foldv32i8u() nounwind {
884*9880d681SAndroid Build Coastguard Worker; AVX1-LABEL: foldv32i8u:
885*9880d681SAndroid Build Coastguard Worker; AVX1:       # BB#0:
886*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0]
887*9880d681SAndroid Build Coastguard Worker; AVX1-NEXT:    retq
888*9880d681SAndroid Build Coastguard Worker;
889*9880d681SAndroid Build Coastguard Worker; AVX2-LABEL: foldv32i8u:
890*9880d681SAndroid Build Coastguard Worker; AVX2:       # BB#0:
891*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0]
892*9880d681SAndroid Build Coastguard Worker; AVX2-NEXT:    retq
893*9880d681SAndroid Build Coastguard Worker;
894*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-LABEL: foldv32i8u:
895*9880d681SAndroid Build Coastguard Worker; AVX512CDVL:       # BB#0:
896*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    vmovdqa64 {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0]
897*9880d681SAndroid Build Coastguard Worker; AVX512CDVL-NEXT:    retq
898*9880d681SAndroid Build Coastguard Worker;
899*9880d681SAndroid Build Coastguard Worker; AVX512CD-LABEL: foldv32i8u:
900*9880d681SAndroid Build Coastguard Worker; AVX512CD:       # BB#0:
901*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    vmovaps {{.*#+}} ymm0 = [8,0,8,0,8,0,3,3,1,1,0,1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,0,0,0,0,0]
902*9880d681SAndroid Build Coastguard Worker; AVX512CD-NEXT:    retq
903*9880d681SAndroid Build Coastguard Worker  %out = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> <i8 256, i8 -1, i8 0, i8 255, i8 -65536, i8 7, i8 24, i8 88, i8 -2, i8 254, i8 1, i8 2, i8 4, i8 8, i8 16, i8 32, i8 64, i8 128, i8 256, i8 -256, i8 -128, i8 -64, i8 -32, i8 -16, i8 -8, i8 -4, i8 -2, i8 -1, i8 3, i8 5, i8 7, i8 127>, i1 -1)
904*9880d681SAndroid Build Coastguard Worker  ret <32 x i8> %out
905*9880d681SAndroid Build Coastguard Worker}
906*9880d681SAndroid Build Coastguard Worker
907*9880d681SAndroid Build Coastguard Workerdeclare <4 x i64> @llvm.cttz.v4i64(<4 x i64>, i1)
908*9880d681SAndroid Build Coastguard Workerdeclare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1)
909*9880d681SAndroid Build Coastguard Workerdeclare <16 x i16> @llvm.cttz.v16i16(<16 x i16>, i1)
910*9880d681SAndroid Build Coastguard Workerdeclare <32 x i8> @llvm.cttz.v32i8(<32 x i8>, i1)
911