[X86] Added tzcnt vector tests.
[oota-llvm.git] / test / CodeGen / X86 / vector-tzcnt-128.ll
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE2
2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE3
3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+ssse3 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSSE3
4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+sse4.1 | FileCheck %s --check-prefix=ALL --check-prefix=SSE --check-prefix=SSE41
5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mcpu=x86-64 -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
7
8 target triple = "x86_64-unknown-unknown"
9
10 define <2 x i64> @testv2i64(<2 x i64> %in) {
11 ; SSE2-LABEL: testv2i64:
12 ; SSE2:       # BB#0:
13 ; SSE2-NEXT:    movd %xmm0, %rax
14 ; SSE2-NEXT:    bsfq %rax, %rax
15 ; SSE2-NEXT:    movl $64, %ecx
16 ; SSE2-NEXT:    cmoveq %rcx, %rax
17 ; SSE2-NEXT:    movd %rax, %xmm1
18 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
19 ; SSE2-NEXT:    movd %xmm0, %rax
20 ; SSE2-NEXT:    bsfq %rax, %rax
21 ; SSE2-NEXT:    cmoveq %rcx, %rax
22 ; SSE2-NEXT:    movd %rax, %xmm0
23 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
24 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
25 ; SSE2-NEXT:    retq
26 ;
27 ; SSE3-LABEL: testv2i64:
28 ; SSE3:       # BB#0:
29 ; SSE3-NEXT:    movd %xmm0, %rax
30 ; SSE3-NEXT:    bsfq %rax, %rax
31 ; SSE3-NEXT:    movl $64, %ecx
32 ; SSE3-NEXT:    cmoveq %rcx, %rax
33 ; SSE3-NEXT:    movd %rax, %xmm1
34 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
35 ; SSE3-NEXT:    movd %xmm0, %rax
36 ; SSE3-NEXT:    bsfq %rax, %rax
37 ; SSE3-NEXT:    cmoveq %rcx, %rax
38 ; SSE3-NEXT:    movd %rax, %xmm0
39 ; SSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
40 ; SSE3-NEXT:    movdqa %xmm1, %xmm0
41 ; SSE3-NEXT:    retq
42 ;
43 ; SSSE3-LABEL: testv2i64:
44 ; SSSE3:       # BB#0:
45 ; SSSE3-NEXT:    movd %xmm0, %rax
46 ; SSSE3-NEXT:    bsfq %rax, %rax
47 ; SSSE3-NEXT:    movl $64, %ecx
48 ; SSSE3-NEXT:    cmoveq %rcx, %rax
49 ; SSSE3-NEXT:    movd %rax, %xmm1
50 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
51 ; SSSE3-NEXT:    movd %xmm0, %rax
52 ; SSSE3-NEXT:    bsfq %rax, %rax
53 ; SSSE3-NEXT:    cmoveq %rcx, %rax
54 ; SSSE3-NEXT:    movd %rax, %xmm0
55 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
56 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
57 ; SSSE3-NEXT:    retq
58 ;
59 ; SSE41-LABEL: testv2i64:
60 ; SSE41:       # BB#0:
61 ; SSE41-NEXT:    pextrq $1, %xmm0, %rax
62 ; SSE41-NEXT:    bsfq %rax, %rax
63 ; SSE41-NEXT:    movl $64, %ecx
64 ; SSE41-NEXT:    cmoveq %rcx, %rax
65 ; SSE41-NEXT:    movd %rax, %xmm1
66 ; SSE41-NEXT:    movd %xmm0, %rax
67 ; SSE41-NEXT:    bsfq %rax, %rax
68 ; SSE41-NEXT:    cmoveq %rcx, %rax
69 ; SSE41-NEXT:    movd %rax, %xmm0
70 ; SSE41-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
71 ; SSE41-NEXT:    retq
72 ;
73 ; AVX-LABEL: testv2i64:
74 ; AVX:       # BB#0:
75 ; AVX-NEXT:    vpextrq $1, %xmm0, %rax
76 ; AVX-NEXT:    bsfq %rax, %rax
77 ; AVX-NEXT:    movl $64, %ecx
78 ; AVX-NEXT:    cmoveq %rcx, %rax
79 ; AVX-NEXT:    vmovq %rax, %xmm1
80 ; AVX-NEXT:    vmovq %xmm0, %rax
81 ; AVX-NEXT:    bsfq %rax, %rax
82 ; AVX-NEXT:    cmoveq %rcx, %rax
83 ; AVX-NEXT:    vmovq %rax, %xmm0
84 ; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
85 ; AVX-NEXT:    retq
86   %out = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %in, i1 0)
87   ret <2 x i64> %out
88 }
89
90 define <2 x i64> @testv2i64u(<2 x i64> %in) {
91 ; SSE2-LABEL: testv2i64u:
92 ; SSE2:       # BB#0:
93 ; SSE2-NEXT:    movd %xmm0, %rax
94 ; SSE2-NEXT:    bsfq %rax, %rax
95 ; SSE2-NEXT:    movd %rax, %xmm1
96 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
97 ; SSE2-NEXT:    movd %xmm0, %rax
98 ; SSE2-NEXT:    bsfq %rax, %rax
99 ; SSE2-NEXT:    movd %rax, %xmm0
100 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
101 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
102 ; SSE2-NEXT:    retq
103 ;
104 ; SSE3-LABEL: testv2i64u:
105 ; SSE3:       # BB#0:
106 ; SSE3-NEXT:    movd %xmm0, %rax
107 ; SSE3-NEXT:    bsfq %rax, %rax
108 ; SSE3-NEXT:    movd %rax, %xmm1
109 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
110 ; SSE3-NEXT:    movd %xmm0, %rax
111 ; SSE3-NEXT:    bsfq %rax, %rax
112 ; SSE3-NEXT:    movd %rax, %xmm0
113 ; SSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
114 ; SSE3-NEXT:    movdqa %xmm1, %xmm0
115 ; SSE3-NEXT:    retq
116 ;
117 ; SSSE3-LABEL: testv2i64u:
118 ; SSSE3:       # BB#0:
119 ; SSSE3-NEXT:    movd %xmm0, %rax
120 ; SSSE3-NEXT:    bsfq %rax, %rax
121 ; SSSE3-NEXT:    movd %rax, %xmm1
122 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
123 ; SSSE3-NEXT:    movd %xmm0, %rax
124 ; SSSE3-NEXT:    bsfq %rax, %rax
125 ; SSSE3-NEXT:    movd %rax, %xmm0
126 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
127 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
128 ; SSSE3-NEXT:    retq
129 ;
130 ; SSE41-LABEL: testv2i64u:
131 ; SSE41:       # BB#0:
132 ; SSE41-NEXT:    pextrq $1, %xmm0, %rax
133 ; SSE41-NEXT:    bsfq %rax, %rax
134 ; SSE41-NEXT:    movd %rax, %xmm1
135 ; SSE41-NEXT:    movd %xmm0, %rax
136 ; SSE41-NEXT:    bsfq %rax, %rax
137 ; SSE41-NEXT:    movd %rax, %xmm0
138 ; SSE41-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
139 ; SSE41-NEXT:    retq
140 ;
141 ; AVX-LABEL: testv2i64u:
142 ; AVX:       # BB#0:
143 ; AVX-NEXT:    vpextrq $1, %xmm0, %rax
144 ; AVX-NEXT:    bsfq %rax, %rax
145 ; AVX-NEXT:    vmovq %rax, %xmm1
146 ; AVX-NEXT:    vmovq %xmm0, %rax
147 ; AVX-NEXT:    bsfq %rax, %rax
148 ; AVX-NEXT:    vmovq %rax, %xmm0
149 ; AVX-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
150 ; AVX-NEXT:    retq
151   %out = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %in, i1 -1)
152   ret <2 x i64> %out
153 }
154
155 define <4 x i32> @testv4i32(<4 x i32> %in) {
156 ; SSE2-LABEL: testv4i32:
157 ; SSE2:       # BB#0:
158 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
159 ; SSE2-NEXT:    movd %xmm1, %eax
160 ; SSE2-NEXT:    bsfl %eax, %eax
161 ; SSE2-NEXT:    movl $32, %ecx
162 ; SSE2-NEXT:    cmovel %ecx, %eax
163 ; SSE2-NEXT:    movd %eax, %xmm1
164 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
165 ; SSE2-NEXT:    movd %xmm2, %eax
166 ; SSE2-NEXT:    bsfl %eax, %eax
167 ; SSE2-NEXT:    cmovel %ecx, %eax
168 ; SSE2-NEXT:    movd %eax, %xmm2
169 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
170 ; SSE2-NEXT:    movd %xmm0, %eax
171 ; SSE2-NEXT:    bsfl %eax, %eax
172 ; SSE2-NEXT:    cmovel %ecx, %eax
173 ; SSE2-NEXT:    movd %eax, %xmm1
174 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
175 ; SSE2-NEXT:    movd %xmm0, %eax
176 ; SSE2-NEXT:    bsfl %eax, %eax
177 ; SSE2-NEXT:    cmovel %ecx, %eax
178 ; SSE2-NEXT:    movd %eax, %xmm0
179 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
180 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
181 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
182 ; SSE2-NEXT:    retq
183 ;
184 ; SSE3-LABEL: testv4i32:
185 ; SSE3:       # BB#0:
186 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
187 ; SSE3-NEXT:    movd %xmm1, %eax
188 ; SSE3-NEXT:    bsfl %eax, %eax
189 ; SSE3-NEXT:    movl $32, %ecx
190 ; SSE3-NEXT:    cmovel %ecx, %eax
191 ; SSE3-NEXT:    movd %eax, %xmm1
192 ; SSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
193 ; SSE3-NEXT:    movd %xmm2, %eax
194 ; SSE3-NEXT:    bsfl %eax, %eax
195 ; SSE3-NEXT:    cmovel %ecx, %eax
196 ; SSE3-NEXT:    movd %eax, %xmm2
197 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
198 ; SSE3-NEXT:    movd %xmm0, %eax
199 ; SSE3-NEXT:    bsfl %eax, %eax
200 ; SSE3-NEXT:    cmovel %ecx, %eax
201 ; SSE3-NEXT:    movd %eax, %xmm1
202 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
203 ; SSE3-NEXT:    movd %xmm0, %eax
204 ; SSE3-NEXT:    bsfl %eax, %eax
205 ; SSE3-NEXT:    cmovel %ecx, %eax
206 ; SSE3-NEXT:    movd %eax, %xmm0
207 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
208 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
209 ; SSE3-NEXT:    movdqa %xmm1, %xmm0
210 ; SSE3-NEXT:    retq
211 ;
212 ; SSSE3-LABEL: testv4i32:
213 ; SSSE3:       # BB#0:
214 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
215 ; SSSE3-NEXT:    movd %xmm1, %eax
216 ; SSSE3-NEXT:    bsfl %eax, %eax
217 ; SSSE3-NEXT:    movl $32, %ecx
218 ; SSSE3-NEXT:    cmovel %ecx, %eax
219 ; SSSE3-NEXT:    movd %eax, %xmm1
220 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
221 ; SSSE3-NEXT:    movd %xmm2, %eax
222 ; SSSE3-NEXT:    bsfl %eax, %eax
223 ; SSSE3-NEXT:    cmovel %ecx, %eax
224 ; SSSE3-NEXT:    movd %eax, %xmm2
225 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
226 ; SSSE3-NEXT:    movd %xmm0, %eax
227 ; SSSE3-NEXT:    bsfl %eax, %eax
228 ; SSSE3-NEXT:    cmovel %ecx, %eax
229 ; SSSE3-NEXT:    movd %eax, %xmm1
230 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
231 ; SSSE3-NEXT:    movd %xmm0, %eax
232 ; SSSE3-NEXT:    bsfl %eax, %eax
233 ; SSSE3-NEXT:    cmovel %ecx, %eax
234 ; SSSE3-NEXT:    movd %eax, %xmm0
235 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
236 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
237 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
238 ; SSSE3-NEXT:    retq
239 ;
240 ; SSE41-LABEL: testv4i32:
241 ; SSE41:       # BB#0:
242 ; SSE41-NEXT:    pextrd $1, %xmm0, %eax
243 ; SSE41-NEXT:    bsfl %eax, %eax
244 ; SSE41-NEXT:    movl $32, %ecx
245 ; SSE41-NEXT:    cmovel %ecx, %eax
246 ; SSE41-NEXT:    movd %xmm0, %edx
247 ; SSE41-NEXT:    bsfl %edx, %edx
248 ; SSE41-NEXT:    cmovel %ecx, %edx
249 ; SSE41-NEXT:    movd %edx, %xmm1
250 ; SSE41-NEXT:    pinsrd $1, %eax, %xmm1
251 ; SSE41-NEXT:    pextrd $2, %xmm0, %eax
252 ; SSE41-NEXT:    bsfl %eax, %eax
253 ; SSE41-NEXT:    cmovel %ecx, %eax
254 ; SSE41-NEXT:    pinsrd $2, %eax, %xmm1
255 ; SSE41-NEXT:    pextrd $3, %xmm0, %eax
256 ; SSE41-NEXT:    bsfl %eax, %eax
257 ; SSE41-NEXT:    cmovel %ecx, %eax
258 ; SSE41-NEXT:    pinsrd $3, %eax, %xmm1
259 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
260 ; SSE41-NEXT:    retq
261 ;
262 ; AVX-LABEL: testv4i32:
263 ; AVX:       # BB#0:
264 ; AVX-NEXT:    vpextrd $1, %xmm0, %eax
265 ; AVX-NEXT:    bsfl %eax, %eax
266 ; AVX-NEXT:    movl $32, %ecx
267 ; AVX-NEXT:    cmovel %ecx, %eax
268 ; AVX-NEXT:    vmovd %xmm0, %edx
269 ; AVX-NEXT:    bsfl %edx, %edx
270 ; AVX-NEXT:    cmovel %ecx, %edx
271 ; AVX-NEXT:    vmovd %edx, %xmm1
272 ; AVX-NEXT:    vpinsrd $1, %eax, %xmm1, %xmm1
273 ; AVX-NEXT:    vpextrd $2, %xmm0, %eax
274 ; AVX-NEXT:    bsfl %eax, %eax
275 ; AVX-NEXT:    cmovel %ecx, %eax
276 ; AVX-NEXT:    vpinsrd $2, %eax, %xmm1, %xmm1
277 ; AVX-NEXT:    vpextrd $3, %xmm0, %eax
278 ; AVX-NEXT:    bsfl %eax, %eax
279 ; AVX-NEXT:    cmovel %ecx, %eax
280 ; AVX-NEXT:    vpinsrd $3, %eax, %xmm1, %xmm0
281 ; AVX-NEXT:    retq
282   %out = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %in, i1 0)
283   ret <4 x i32> %out
284 }
285
286 define <4 x i32> @testv4i32u(<4 x i32> %in) {
287 ; SSE2-LABEL: testv4i32u:
288 ; SSE2:       # BB#0:
289 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
290 ; SSE2-NEXT:    movd %xmm1, %eax
291 ; SSE2-NEXT:    bsfl %eax, %eax
292 ; SSE2-NEXT:    movd %eax, %xmm1
293 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
294 ; SSE2-NEXT:    movd %xmm2, %eax
295 ; SSE2-NEXT:    bsfl %eax, %eax
296 ; SSE2-NEXT:    movd %eax, %xmm2
297 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
298 ; SSE2-NEXT:    movd %xmm0, %eax
299 ; SSE2-NEXT:    bsfl %eax, %eax
300 ; SSE2-NEXT:    movd %eax, %xmm1
301 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
302 ; SSE2-NEXT:    movd %xmm0, %eax
303 ; SSE2-NEXT:    bsfl %eax, %eax
304 ; SSE2-NEXT:    movd %eax, %xmm0
305 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
306 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
307 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
308 ; SSE2-NEXT:    retq
309 ;
310 ; SSE3-LABEL: testv4i32u:
311 ; SSE3:       # BB#0:
312 ; SSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
313 ; SSE3-NEXT:    movd %xmm1, %eax
314 ; SSE3-NEXT:    bsfl %eax, %eax
315 ; SSE3-NEXT:    movd %eax, %xmm1
316 ; SSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
317 ; SSE3-NEXT:    movd %xmm2, %eax
318 ; SSE3-NEXT:    bsfl %eax, %eax
319 ; SSE3-NEXT:    movd %eax, %xmm2
320 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
321 ; SSE3-NEXT:    movd %xmm0, %eax
322 ; SSE3-NEXT:    bsfl %eax, %eax
323 ; SSE3-NEXT:    movd %eax, %xmm1
324 ; SSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
325 ; SSE3-NEXT:    movd %xmm0, %eax
326 ; SSE3-NEXT:    bsfl %eax, %eax
327 ; SSE3-NEXT:    movd %eax, %xmm0
328 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
329 ; SSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
330 ; SSE3-NEXT:    movdqa %xmm1, %xmm0
331 ; SSE3-NEXT:    retq
332 ;
333 ; SSSE3-LABEL: testv4i32u:
334 ; SSSE3:       # BB#0:
335 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[3,1,2,3]
336 ; SSSE3-NEXT:    movd %xmm1, %eax
337 ; SSSE3-NEXT:    bsfl %eax, %eax
338 ; SSSE3-NEXT:    movd %eax, %xmm1
339 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
340 ; SSSE3-NEXT:    movd %xmm2, %eax
341 ; SSSE3-NEXT:    bsfl %eax, %eax
342 ; SSSE3-NEXT:    movd %eax, %xmm2
343 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
344 ; SSSE3-NEXT:    movd %xmm0, %eax
345 ; SSSE3-NEXT:    bsfl %eax, %eax
346 ; SSSE3-NEXT:    movd %eax, %xmm1
347 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
348 ; SSSE3-NEXT:    movd %xmm0, %eax
349 ; SSSE3-NEXT:    bsfl %eax, %eax
350 ; SSSE3-NEXT:    movd %eax, %xmm0
351 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
352 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
353 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
354 ; SSSE3-NEXT:    retq
355 ;
356 ; SSE41-LABEL: testv4i32u:
357 ; SSE41:       # BB#0:
358 ; SSE41-NEXT:    pextrd $1, %xmm0, %eax
359 ; SSE41-NEXT:    bsfl %eax, %eax
360 ; SSE41-NEXT:    movd %xmm0, %ecx
361 ; SSE41-NEXT:    bsfl %ecx, %ecx
362 ; SSE41-NEXT:    movd %ecx, %xmm1
363 ; SSE41-NEXT:    pinsrd $1, %eax, %xmm1
364 ; SSE41-NEXT:    pextrd $2, %xmm0, %eax
365 ; SSE41-NEXT:    bsfl %eax, %eax
366 ; SSE41-NEXT:    pinsrd $2, %eax, %xmm1
367 ; SSE41-NEXT:    pextrd $3, %xmm0, %eax
368 ; SSE41-NEXT:    bsfl %eax, %eax
369 ; SSE41-NEXT:    pinsrd $3, %eax, %xmm1
370 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
371 ; SSE41-NEXT:    retq
372 ;
373 ; AVX-LABEL: testv4i32u:
374 ; AVX:       # BB#0:
375 ; AVX-NEXT:    vpextrd $1, %xmm0, %eax
376 ; AVX-NEXT:    bsfl %eax, %eax
377 ; AVX-NEXT:    vmovd %xmm0, %ecx
378 ; AVX-NEXT:    bsfl %ecx, %ecx
379 ; AVX-NEXT:    vmovd %ecx, %xmm1
380 ; AVX-NEXT:    vpinsrd $1, %eax, %xmm1, %xmm1
381 ; AVX-NEXT:    vpextrd $2, %xmm0, %eax
382 ; AVX-NEXT:    bsfl %eax, %eax
383 ; AVX-NEXT:    vpinsrd $2, %eax, %xmm1, %xmm1
384 ; AVX-NEXT:    vpextrd $3, %xmm0, %eax
385 ; AVX-NEXT:    bsfl %eax, %eax
386 ; AVX-NEXT:    vpinsrd $3, %eax, %xmm1, %xmm0
387 ; AVX-NEXT:    retq
388   %out = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %in, i1 -1)
389   ret <4 x i32> %out
390 }
391
392 define <8 x i16> @testv8i16(<8 x i16> %in) {
393 ; SSE2-LABEL: testv8i16:
394 ; SSE2:       # BB#0:
395 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
396 ; SSE2-NEXT:    bsfw %ax, %cx
397 ; SSE2-NEXT:    movw $16, %ax
398 ; SSE2-NEXT:    cmovew %ax, %cx
399 ; SSE2-NEXT:    movd %ecx, %xmm1
400 ; SSE2-NEXT:    pextrw $3, %xmm0, %ecx
401 ; SSE2-NEXT:    bsfw %cx, %cx
402 ; SSE2-NEXT:    cmovew %ax, %cx
403 ; SSE2-NEXT:    movd %ecx, %xmm2
404 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
405 ; SSE2-NEXT:    pextrw $5, %xmm0, %ecx
406 ; SSE2-NEXT:    bsfw %cx, %cx
407 ; SSE2-NEXT:    cmovew %ax, %cx
408 ; SSE2-NEXT:    movd %ecx, %xmm3
409 ; SSE2-NEXT:    pextrw $1, %xmm0, %ecx
410 ; SSE2-NEXT:    bsfw %cx, %cx
411 ; SSE2-NEXT:    cmovew %ax, %cx
412 ; SSE2-NEXT:    movd %ecx, %xmm1
413 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
414 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
415 ; SSE2-NEXT:    pextrw $6, %xmm0, %ecx
416 ; SSE2-NEXT:    bsfw %cx, %cx
417 ; SSE2-NEXT:    cmovew %ax, %cx
418 ; SSE2-NEXT:    movd %ecx, %xmm2
419 ; SSE2-NEXT:    pextrw $2, %xmm0, %ecx
420 ; SSE2-NEXT:    bsfw %cx, %cx
421 ; SSE2-NEXT:    cmovew %ax, %cx
422 ; SSE2-NEXT:    movd %ecx, %xmm3
423 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
424 ; SSE2-NEXT:    pextrw $4, %xmm0, %ecx
425 ; SSE2-NEXT:    bsfw %cx, %cx
426 ; SSE2-NEXT:    cmovew %ax, %cx
427 ; SSE2-NEXT:    movd %ecx, %xmm2
428 ; SSE2-NEXT:    movd %xmm0, %ecx
429 ; SSE2-NEXT:    bsfw %cx, %cx
430 ; SSE2-NEXT:    cmovew %ax, %cx
431 ; SSE2-NEXT:    movd %ecx, %xmm0
432 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
433 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
434 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
435 ; SSE2-NEXT:    retq
436 ;
437 ; SSE3-LABEL: testv8i16:
438 ; SSE3:       # BB#0:
439 ; SSE3-NEXT:    pextrw $7, %xmm0, %eax
440 ; SSE3-NEXT:    bsfw %ax, %cx
441 ; SSE3-NEXT:    movw $16, %ax
442 ; SSE3-NEXT:    cmovew %ax, %cx
443 ; SSE3-NEXT:    movd %ecx, %xmm1
444 ; SSE3-NEXT:    pextrw $3, %xmm0, %ecx
445 ; SSE3-NEXT:    bsfw %cx, %cx
446 ; SSE3-NEXT:    cmovew %ax, %cx
447 ; SSE3-NEXT:    movd %ecx, %xmm2
448 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
449 ; SSE3-NEXT:    pextrw $5, %xmm0, %ecx
450 ; SSE3-NEXT:    bsfw %cx, %cx
451 ; SSE3-NEXT:    cmovew %ax, %cx
452 ; SSE3-NEXT:    movd %ecx, %xmm3
453 ; SSE3-NEXT:    pextrw $1, %xmm0, %ecx
454 ; SSE3-NEXT:    bsfw %cx, %cx
455 ; SSE3-NEXT:    cmovew %ax, %cx
456 ; SSE3-NEXT:    movd %ecx, %xmm1
457 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
458 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
459 ; SSE3-NEXT:    pextrw $6, %xmm0, %ecx
460 ; SSE3-NEXT:    bsfw %cx, %cx
461 ; SSE3-NEXT:    cmovew %ax, %cx
462 ; SSE3-NEXT:    movd %ecx, %xmm2
463 ; SSE3-NEXT:    pextrw $2, %xmm0, %ecx
464 ; SSE3-NEXT:    bsfw %cx, %cx
465 ; SSE3-NEXT:    cmovew %ax, %cx
466 ; SSE3-NEXT:    movd %ecx, %xmm3
467 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
468 ; SSE3-NEXT:    pextrw $4, %xmm0, %ecx
469 ; SSE3-NEXT:    bsfw %cx, %cx
470 ; SSE3-NEXT:    cmovew %ax, %cx
471 ; SSE3-NEXT:    movd %ecx, %xmm2
472 ; SSE3-NEXT:    movd %xmm0, %ecx
473 ; SSE3-NEXT:    bsfw %cx, %cx
474 ; SSE3-NEXT:    cmovew %ax, %cx
475 ; SSE3-NEXT:    movd %ecx, %xmm0
476 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
477 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
478 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
479 ; SSE3-NEXT:    retq
480 ;
481 ; SSSE3-LABEL: testv8i16:
482 ; SSSE3:       # BB#0:
483 ; SSSE3-NEXT:    pextrw $7, %xmm0, %eax
484 ; SSSE3-NEXT:    bsfw %ax, %cx
485 ; SSSE3-NEXT:    movw $16, %ax
486 ; SSSE3-NEXT:    cmovew %ax, %cx
487 ; SSSE3-NEXT:    movd %ecx, %xmm1
488 ; SSSE3-NEXT:    pextrw $3, %xmm0, %ecx
489 ; SSSE3-NEXT:    bsfw %cx, %cx
490 ; SSSE3-NEXT:    cmovew %ax, %cx
491 ; SSSE3-NEXT:    movd %ecx, %xmm2
492 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
493 ; SSSE3-NEXT:    pextrw $5, %xmm0, %ecx
494 ; SSSE3-NEXT:    bsfw %cx, %cx
495 ; SSSE3-NEXT:    cmovew %ax, %cx
496 ; SSSE3-NEXT:    movd %ecx, %xmm3
497 ; SSSE3-NEXT:    pextrw $1, %xmm0, %ecx
498 ; SSSE3-NEXT:    bsfw %cx, %cx
499 ; SSSE3-NEXT:    cmovew %ax, %cx
500 ; SSSE3-NEXT:    movd %ecx, %xmm1
501 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3]
502 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
503 ; SSSE3-NEXT:    pextrw $6, %xmm0, %ecx
504 ; SSSE3-NEXT:    bsfw %cx, %cx
505 ; SSSE3-NEXT:    cmovew %ax, %cx
506 ; SSSE3-NEXT:    movd %ecx, %xmm2
507 ; SSSE3-NEXT:    pextrw $2, %xmm0, %ecx
508 ; SSSE3-NEXT:    bsfw %cx, %cx
509 ; SSSE3-NEXT:    cmovew %ax, %cx
510 ; SSSE3-NEXT:    movd %ecx, %xmm3
511 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
512 ; SSSE3-NEXT:    pextrw $4, %xmm0, %ecx
513 ; SSSE3-NEXT:    bsfw %cx, %cx
514 ; SSSE3-NEXT:    cmovew %ax, %cx
515 ; SSSE3-NEXT:    movd %ecx, %xmm2
516 ; SSSE3-NEXT:    movd %xmm0, %ecx
517 ; SSSE3-NEXT:    bsfw %cx, %cx
518 ; SSSE3-NEXT:    cmovew %ax, %cx
519 ; SSSE3-NEXT:    movd %ecx, %xmm0
520 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
521 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
522 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
523 ; SSSE3-NEXT:    retq
524 ;
525 ; SSE41-LABEL: testv8i16:
526 ; SSE41:       # BB#0:
527 ; SSE41-NEXT:    pextrw $1, %xmm0, %eax
528 ; SSE41-NEXT:    bsfw %ax, %cx
529 ; SSE41-NEXT:    movw $16, %ax
530 ; SSE41-NEXT:    cmovew %ax, %cx
531 ; SSE41-NEXT:    movd %xmm0, %edx
532 ; SSE41-NEXT:    bsfw %dx, %dx
533 ; SSE41-NEXT:    cmovew %ax, %dx
534 ; SSE41-NEXT:    movd %edx, %xmm1
535 ; SSE41-NEXT:    pinsrw $1, %ecx, %xmm1
536 ; SSE41-NEXT:    pextrw $2, %xmm0, %ecx
537 ; SSE41-NEXT:    bsfw %cx, %cx
538 ; SSE41-NEXT:    cmovew %ax, %cx
539 ; SSE41-NEXT:    pinsrw $2, %ecx, %xmm1
540 ; SSE41-NEXT:    pextrw $3, %xmm0, %ecx
541 ; SSE41-NEXT:    bsfw %cx, %cx
542 ; SSE41-NEXT:    cmovew %ax, %cx
543 ; SSE41-NEXT:    pinsrw $3, %ecx, %xmm1
544 ; SSE41-NEXT:    pextrw $4, %xmm0, %ecx
545 ; SSE41-NEXT:    bsfw %cx, %cx
546 ; SSE41-NEXT:    cmovew %ax, %cx
547 ; SSE41-NEXT:    pinsrw $4, %ecx, %xmm1
548 ; SSE41-NEXT:    pextrw $5, %xmm0, %ecx
549 ; SSE41-NEXT:    bsfw %cx, %cx
550 ; SSE41-NEXT:    cmovew %ax, %cx
551 ; SSE41-NEXT:    pinsrw $5, %ecx, %xmm1
552 ; SSE41-NEXT:    pextrw $6, %xmm0, %ecx
553 ; SSE41-NEXT:    bsfw %cx, %cx
554 ; SSE41-NEXT:    cmovew %ax, %cx
555 ; SSE41-NEXT:    pinsrw $6, %ecx, %xmm1
556 ; SSE41-NEXT:    pextrw $7, %xmm0, %ecx
557 ; SSE41-NEXT:    bsfw %cx, %cx
558 ; SSE41-NEXT:    cmovew %ax, %cx
559 ; SSE41-NEXT:    pinsrw $7, %ecx, %xmm1
560 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
561 ; SSE41-NEXT:    retq
562 ;
563 ; AVX-LABEL: testv8i16:
564 ; AVX:       # BB#0:
565 ; AVX-NEXT:    vpextrw $1, %xmm0, %eax
566 ; AVX-NEXT:    bsfw %ax, %cx
567 ; AVX-NEXT:    movw $16, %ax
568 ; AVX-NEXT:    cmovew %ax, %cx
569 ; AVX-NEXT:    vmovd %xmm0, %edx
570 ; AVX-NEXT:    bsfw %dx, %dx
571 ; AVX-NEXT:    cmovew %ax, %dx
572 ; AVX-NEXT:    vmovd %edx, %xmm1
573 ; AVX-NEXT:    vpinsrw $1, %ecx, %xmm1, %xmm1
574 ; AVX-NEXT:    vpextrw $2, %xmm0, %ecx
575 ; AVX-NEXT:    bsfw %cx, %cx
576 ; AVX-NEXT:    cmovew %ax, %cx
577 ; AVX-NEXT:    vpinsrw $2, %ecx, %xmm1, %xmm1
578 ; AVX-NEXT:    vpextrw $3, %xmm0, %ecx
579 ; AVX-NEXT:    bsfw %cx, %cx
580 ; AVX-NEXT:    cmovew %ax, %cx
581 ; AVX-NEXT:    vpinsrw $3, %ecx, %xmm1, %xmm1
582 ; AVX-NEXT:    vpextrw $4, %xmm0, %ecx
583 ; AVX-NEXT:    bsfw %cx, %cx
584 ; AVX-NEXT:    cmovew %ax, %cx
585 ; AVX-NEXT:    vpinsrw $4, %ecx, %xmm1, %xmm1
586 ; AVX-NEXT:    vpextrw $5, %xmm0, %ecx
587 ; AVX-NEXT:    bsfw %cx, %cx
588 ; AVX-NEXT:    cmovew %ax, %cx
589 ; AVX-NEXT:    vpinsrw $5, %ecx, %xmm1, %xmm1
590 ; AVX-NEXT:    vpextrw $6, %xmm0, %ecx
591 ; AVX-NEXT:    bsfw %cx, %cx
592 ; AVX-NEXT:    cmovew %ax, %cx
593 ; AVX-NEXT:    vpinsrw $6, %ecx, %xmm1, %xmm1
594 ; AVX-NEXT:    vpextrw $7, %xmm0, %ecx
595 ; AVX-NEXT:    bsfw %cx, %cx
596 ; AVX-NEXT:    cmovew %ax, %cx
597 ; AVX-NEXT:    vpinsrw $7, %ecx, %xmm1, %xmm0
598 ; AVX-NEXT:    retq
599   %out = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %in, i1 0)
600   ret <8 x i16> %out
601 }
602
603 define <8 x i16> @testv8i16u(<8 x i16> %in) {
604 ; SSE2-LABEL: testv8i16u:
605 ; SSE2:       # BB#0:
606 ; SSE2-NEXT:    pextrw $7, %xmm0, %eax
607 ; SSE2-NEXT:    bsfw %ax, %ax
608 ; SSE2-NEXT:    movd %eax, %xmm1
609 ; SSE2-NEXT:    pextrw $3, %xmm0, %eax
610 ; SSE2-NEXT:    bsfw %ax, %ax
611 ; SSE2-NEXT:    movd %eax, %xmm2
612 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
613 ; SSE2-NEXT:    pextrw $5, %xmm0, %eax
614 ; SSE2-NEXT:    bsfw %ax, %ax
615 ; SSE2-NEXT:    movd %eax, %xmm1
616 ; SSE2-NEXT:    pextrw $1, %xmm0, %eax
617 ; SSE2-NEXT:    bsfw %ax, %ax
618 ; SSE2-NEXT:    movd %eax, %xmm3
619 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
620 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
621 ; SSE2-NEXT:    pextrw $6, %xmm0, %eax
622 ; SSE2-NEXT:    bsfw %ax, %ax
623 ; SSE2-NEXT:    movd %eax, %xmm1
624 ; SSE2-NEXT:    pextrw $2, %xmm0, %eax
625 ; SSE2-NEXT:    bsfw %ax, %ax
626 ; SSE2-NEXT:    movd %eax, %xmm2
627 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
628 ; SSE2-NEXT:    pextrw $4, %xmm0, %eax
629 ; SSE2-NEXT:    bsfw %ax, %ax
630 ; SSE2-NEXT:    movd %eax, %xmm1
631 ; SSE2-NEXT:    movd %xmm0, %eax
632 ; SSE2-NEXT:    bsfw %ax, %ax
633 ; SSE2-NEXT:    movd %eax, %xmm0
634 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
635 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
636 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
637 ; SSE2-NEXT:    retq
638 ;
639 ; SSE3-LABEL: testv8i16u:
640 ; SSE3:       # BB#0:
641 ; SSE3-NEXT:    pextrw $7, %xmm0, %eax
642 ; SSE3-NEXT:    bsfw %ax, %ax
643 ; SSE3-NEXT:    movd %eax, %xmm1
644 ; SSE3-NEXT:    pextrw $3, %xmm0, %eax
645 ; SSE3-NEXT:    bsfw %ax, %ax
646 ; SSE3-NEXT:    movd %eax, %xmm2
647 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
648 ; SSE3-NEXT:    pextrw $5, %xmm0, %eax
649 ; SSE3-NEXT:    bsfw %ax, %ax
650 ; SSE3-NEXT:    movd %eax, %xmm1
651 ; SSE3-NEXT:    pextrw $1, %xmm0, %eax
652 ; SSE3-NEXT:    bsfw %ax, %ax
653 ; SSE3-NEXT:    movd %eax, %xmm3
654 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
655 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
656 ; SSE3-NEXT:    pextrw $6, %xmm0, %eax
657 ; SSE3-NEXT:    bsfw %ax, %ax
658 ; SSE3-NEXT:    movd %eax, %xmm1
659 ; SSE3-NEXT:    pextrw $2, %xmm0, %eax
660 ; SSE3-NEXT:    bsfw %ax, %ax
661 ; SSE3-NEXT:    movd %eax, %xmm2
662 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
663 ; SSE3-NEXT:    pextrw $4, %xmm0, %eax
664 ; SSE3-NEXT:    bsfw %ax, %ax
665 ; SSE3-NEXT:    movd %eax, %xmm1
666 ; SSE3-NEXT:    movd %xmm0, %eax
667 ; SSE3-NEXT:    bsfw %ax, %ax
668 ; SSE3-NEXT:    movd %eax, %xmm0
669 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
670 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
671 ; SSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
672 ; SSE3-NEXT:    retq
673 ;
674 ; SSSE3-LABEL: testv8i16u:
675 ; SSSE3:       # BB#0:
676 ; SSSE3-NEXT:    pextrw $7, %xmm0, %eax
677 ; SSSE3-NEXT:    bsfw %ax, %ax
678 ; SSSE3-NEXT:    movd %eax, %xmm1
679 ; SSSE3-NEXT:    pextrw $3, %xmm0, %eax
680 ; SSSE3-NEXT:    bsfw %ax, %ax
681 ; SSSE3-NEXT:    movd %eax, %xmm2
682 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
683 ; SSSE3-NEXT:    pextrw $5, %xmm0, %eax
684 ; SSSE3-NEXT:    bsfw %ax, %ax
685 ; SSSE3-NEXT:    movd %eax, %xmm1
686 ; SSSE3-NEXT:    pextrw $1, %xmm0, %eax
687 ; SSSE3-NEXT:    bsfw %ax, %ax
688 ; SSSE3-NEXT:    movd %eax, %xmm3
689 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
690 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
691 ; SSSE3-NEXT:    pextrw $6, %xmm0, %eax
692 ; SSSE3-NEXT:    bsfw %ax, %ax
693 ; SSSE3-NEXT:    movd %eax, %xmm1
694 ; SSSE3-NEXT:    pextrw $2, %xmm0, %eax
695 ; SSSE3-NEXT:    bsfw %ax, %ax
696 ; SSSE3-NEXT:    movd %eax, %xmm2
697 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
698 ; SSSE3-NEXT:    pextrw $4, %xmm0, %eax
699 ; SSSE3-NEXT:    bsfw %ax, %ax
700 ; SSSE3-NEXT:    movd %eax, %xmm1
701 ; SSSE3-NEXT:    movd %xmm0, %eax
702 ; SSSE3-NEXT:    bsfw %ax, %ax
703 ; SSSE3-NEXT:    movd %eax, %xmm0
704 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
705 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
706 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
707 ; SSSE3-NEXT:    retq
708 ;
709 ; SSE41-LABEL: testv8i16u:
710 ; SSE41:       # BB#0:
711 ; SSE41-NEXT:   pextrw $1, %xmm0, %eax
712 ; SSE41-NEXT:   bsfw %ax, %ax
713 ; SSE41-NEXT:   movd %xmm0, %ecx
714 ; SSE41-NEXT:   bsfw %cx, %cx
715 ; SSE41-NEXT:   movd %ecx, %xmm1
716 ; SSE41-NEXT:   pinsrw $1, %eax, %xmm1
717 ; SSE41-NEXT:   pextrw $2, %xmm0, %eax
718 ; SSE41-NEXT:   bsfw %ax, %ax
719 ; SSE41-NEXT:   pinsrw $2, %eax, %xmm1
720 ; SSE41-NEXT:   pextrw $3, %xmm0, %eax
721 ; SSE41-NEXT:   bsfw %ax, %ax
722 ; SSE41-NEXT:   pinsrw $3, %eax, %xmm1
723 ; SSE41-NEXT:   pextrw $4, %xmm0, %eax
724 ; SSE41-NEXT:   bsfw %ax, %ax
725 ; SSE41-NEXT:   pinsrw $4, %eax, %xmm1
726 ; SSE41-NEXT:   pextrw $5, %xmm0, %eax
727 ; SSE41-NEXT:   bsfw %ax, %ax
728 ; SSE41-NEXT:   pinsrw $5, %eax, %xmm1
729 ; SSE41-NEXT:   pextrw $6, %xmm0, %eax
730 ; SSE41-NEXT:   bsfw %ax, %ax
731 ; SSE41-NEXT:   pinsrw $6, %eax, %xmm1
732 ; SSE41-NEXT:   pextrw $7, %xmm0, %eax
733 ; SSE41-NEXT:   bsfw %ax, %ax
734 ; SSE41-NEXT:   pinsrw $7, %eax, %xmm1
735 ; SSE41-NEXT:   movdqa %xmm1, %xmm0
736 ; SSE41-NEXT:   retq
737 ;
738 ; AVX-LABEL: testv8i16u:
739 ; AVX:       # BB#0:
740 ; AVX-NEXT:    vpextrw $1, %xmm0, %eax
741 ; AVX-NEXT:    bsfw %ax, %ax
742 ; AVX-NEXT:    vmovd %xmm0, %ecx
743 ; AVX-NEXT:    bsfw %cx, %cx
744 ; AVX-NEXT:    vmovd %ecx, %xmm1
745 ; AVX-NEXT:    vpinsrw $1, %eax, %xmm1, %xmm1
746 ; AVX-NEXT:    vpextrw $2, %xmm0, %eax
747 ; AVX-NEXT:    bsfw %ax, %ax
748 ; AVX-NEXT:    vpinsrw $2, %eax, %xmm1, %xmm1
749 ; AVX-NEXT:    vpextrw $3, %xmm0, %eax
750 ; AVX-NEXT:    bsfw %ax, %ax
751 ; AVX-NEXT:    vpinsrw $3, %eax, %xmm1, %xmm1
752 ; AVX-NEXT:    vpextrw $4, %xmm0, %eax
753 ; AVX-NEXT:    bsfw %ax, %ax
754 ; AVX-NEXT:    vpinsrw $4, %eax, %xmm1, %xmm1
755 ; AVX-NEXT:    vpextrw $5, %xmm0, %eax
756 ; AVX-NEXT:    bsfw %ax, %ax
757 ; AVX-NEXT:    vpinsrw $5, %eax, %xmm1, %xmm1
758 ; AVX-NEXT:    vpextrw $6, %xmm0, %eax
759 ; AVX-NEXT:    bsfw %ax, %ax
760 ; AVX-NEXT:    vpinsrw $6, %eax, %xmm1, %xmm1
761 ; AVX-NEXT:    vpextrw $7, %xmm0, %eax
762 ; AVX-NEXT:    bsfw %ax, %ax
763 ; AVX-NEXT:    vpinsrw $7, %eax, %xmm1, %xmm0
764 ; AVX-NEXT:    retq
765   %out = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %in, i1 -1)
766   ret <8 x i16> %out
767 }
768
769 define <16 x i8> @testv16i8(<16 x i8> %in) {
770 ; SSE2-LABEL: testv16i8:
771 ; SSE2:       # BB#0:
772 ; SSE2:         pushq %rbp
773 ; SSE2:         pushq %r14
774 ; SSE2:         pushq %rbx
775 ; SSE2:         movaps %xmm0, -16(%rsp)
776 ; SSE2-NEXT:    movzbl -1(%rsp), %eax
777 ; SSE2-NEXT:    bsfl %eax, %edx
778 ; SSE2-NEXT:    movl $32, %eax
779 ; SSE2-NEXT:    cmovel %eax, %edx
780 ; SSE2-NEXT:    cmpl $32, %edx
781 ; SSE2-NEXT:    movl $8, %ecx
782 ; SSE2-NEXT:    cmovel %ecx, %edx
783 ; SSE2-NEXT:    movd %edx, %xmm0
784 ; SSE2-NEXT:    movzbl -2(%rsp), %r14d
785 ; SSE2-NEXT:    movzbl -3(%rsp), %ebx
786 ; SSE2-NEXT:    movzbl -4(%rsp), %r9d
787 ; SSE2-NEXT:    movzbl -5(%rsp), %edi
788 ; SSE2-NEXT:    movzbl -6(%rsp), %r11d
789 ; SSE2-NEXT:    movzbl -7(%rsp), %edx
790 ; SSE2-NEXT:    movzbl -8(%rsp), %r8d
791 ; SSE2-NEXT:    movzbl -9(%rsp), %esi
792 ; SSE2-NEXT:    bsfl %esi, %esi
793 ; SSE2-NEXT:    cmovel %eax, %esi
794 ; SSE2-NEXT:    cmpl $32, %esi
795 ; SSE2-NEXT:    cmovel %ecx, %esi
796 ; SSE2-NEXT:    movd %esi, %xmm1
797 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
798 ; SSE2-NEXT:    bsfl %edi, %esi
799 ; SSE2-NEXT:    cmovel %eax, %esi
800 ; SSE2-NEXT:    cmpl $32, %esi
801 ; SSE2-NEXT:    cmovel %ecx, %esi
802 ; SSE2-NEXT:    movd %esi, %xmm2
803 ; SSE2-NEXT:    movzbl -10(%rsp), %edi
804 ; SSE2-NEXT:    movzbl -11(%rsp), %esi
805 ; SSE2-NEXT:    movzbl -12(%rsp), %r10d
806 ; SSE2-NEXT:    movzbl -13(%rsp), %ebp
807 ; SSE2-NEXT:    bsfl %ebp, %ebp
808 ; SSE2-NEXT:    cmovel %eax, %ebp
809 ; SSE2-NEXT:    cmpl $32, %ebp
810 ; SSE2-NEXT:    cmovel %ecx, %ebp
811 ; SSE2-NEXT:    movd %ebp, %xmm0
812 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
813 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
814 ; SSE2-NEXT:    bsfl %ebx, %ebx
815 ; SSE2-NEXT:    cmovel %eax, %ebx
816 ; SSE2-NEXT:    cmpl $32, %ebx
817 ; SSE2-NEXT:    cmovel %ecx, %ebx
818 ; SSE2-NEXT:    movd %ebx, %xmm1
819 ; SSE2-NEXT:    bsfl %esi, %esi
820 ; SSE2-NEXT:    cmovel %eax, %esi
821 ; SSE2-NEXT:    cmpl $32, %esi
822 ; SSE2-NEXT:    cmovel %ecx, %esi
823 ; SSE2-NEXT:    movd %esi, %xmm2
824 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
825 ; SSE2-NEXT:    bsfl %edx, %edx
826 ; SSE2-NEXT:    cmovel %eax, %edx
827 ; SSE2-NEXT:    cmpl $32, %edx
828 ; SSE2-NEXT:    cmovel %ecx, %edx
829 ; SSE2-NEXT:    movd %edx, %xmm3
830 ; SSE2-NEXT:    movzbl -14(%rsp), %edx
831 ; SSE2-NEXT:    movzbl -15(%rsp), %esi
832 ; SSE2-NEXT:    bsfl %esi, %esi
833 ; SSE2-NEXT:    cmovel %eax, %esi
834 ; SSE2-NEXT:    cmpl $32, %esi
835 ; SSE2-NEXT:    cmovel %ecx, %esi
836 ; SSE2-NEXT:    movd %esi, %xmm1
837 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
838 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
839 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
840 ; SSE2-NEXT:    bsfl %r14d, %esi
841 ; SSE2-NEXT:    cmovel %eax, %esi
842 ; SSE2-NEXT:    cmpl $32, %esi
843 ; SSE2-NEXT:    cmovel %ecx, %esi
844 ; SSE2-NEXT:    movd %esi, %xmm0
845 ; SSE2-NEXT:    bsfl %edi, %esi
846 ; SSE2-NEXT:    cmovel %eax, %esi
847 ; SSE2-NEXT:    cmpl $32, %esi
848 ; SSE2-NEXT:    cmovel %ecx, %esi
849 ; SSE2-NEXT:    movd %esi, %xmm3
850 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
851 ; SSE2-NEXT:    bsfl %r11d, %esi
852 ; SSE2-NEXT:    cmovel %eax, %esi
853 ; SSE2-NEXT:    cmpl $32, %esi
854 ; SSE2-NEXT:    cmovel %ecx, %esi
855 ; SSE2-NEXT:    movd %esi, %xmm0
856 ; SSE2-NEXT:    bsfl %edx, %edx
857 ; SSE2-NEXT:    cmovel %eax, %edx
858 ; SSE2-NEXT:    cmpl $32, %edx
859 ; SSE2-NEXT:    cmovel %ecx, %edx
860 ; SSE2-NEXT:    movd %edx, %xmm2
861 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
862 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
863 ; SSE2-NEXT:    bsfl %r9d, %edx
864 ; SSE2-NEXT:    cmovel %eax, %edx
865 ; SSE2-NEXT:    cmpl $32, %edx
866 ; SSE2-NEXT:    cmovel %ecx, %edx
867 ; SSE2-NEXT:    movd %edx, %xmm0
868 ; SSE2-NEXT:    bsfl %r10d, %edx
869 ; SSE2-NEXT:    cmovel %eax, %edx
870 ; SSE2-NEXT:    cmpl $32, %edx
871 ; SSE2-NEXT:    cmovel %ecx, %edx
872 ; SSE2-NEXT:    movd %edx, %xmm3
873 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
874 ; SSE2-NEXT:    bsfl %r8d, %edx
875 ; SSE2-NEXT:    cmovel %eax, %edx
876 ; SSE2-NEXT:    cmpl $32, %edx
877 ; SSE2-NEXT:    cmovel %ecx, %edx
878 ; SSE2-NEXT:    movd %edx, %xmm4
879 ; SSE2-NEXT:    movzbl -16(%rsp), %edx
880 ; SSE2-NEXT:    bsfl %edx, %edx
881 ; SSE2-NEXT:    cmovel %eax, %edx
882 ; SSE2-NEXT:    cmpl $32, %edx
883 ; SSE2-NEXT:    cmovel %ecx, %edx
884 ; SSE2-NEXT:    movd %edx, %xmm0
885 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
886 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
887 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
888 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
889 ; SSE2-NEXT:    popq %rbx
890 ; SSE2-NEXT:    popq %r14
891 ; SSE2-NEXT:    popq %rbp
892 ; SSE2-NEXT:    retq
893 ;
894 ; SSE3-LABEL: testv16i8:
895 ; SSE3:       # BB#0:
896 ; SSE3:         pushq %rbp
897 ; SSE3:         pushq %r14
898 ; SSE3:         pushq %rbx
899 ; SSE3:         movaps %xmm0, -16(%rsp)
900 ; SSE3-NEXT:    movzbl -1(%rsp), %eax
901 ; SSE3-NEXT:    bsfl %eax, %edx
902 ; SSE3-NEXT:    movl $32, %eax
903 ; SSE3-NEXT:    cmovel %eax, %edx
904 ; SSE3-NEXT:    cmpl $32, %edx
905 ; SSE3-NEXT:    movl $8, %ecx
906 ; SSE3-NEXT:    cmovel %ecx, %edx
907 ; SSE3-NEXT:    movd %edx, %xmm0
908 ; SSE3-NEXT:    movzbl -2(%rsp), %r14d
909 ; SSE3-NEXT:    movzbl -3(%rsp), %ebx
910 ; SSE3-NEXT:    movzbl -4(%rsp), %r9d
911 ; SSE3-NEXT:    movzbl -5(%rsp), %edi
912 ; SSE3-NEXT:    movzbl -6(%rsp), %r11d
913 ; SSE3-NEXT:    movzbl -7(%rsp), %edx
914 ; SSE3-NEXT:    movzbl -8(%rsp), %r8d
915 ; SSE3-NEXT:    movzbl -9(%rsp), %esi
916 ; SSE3-NEXT:    bsfl %esi, %esi
917 ; SSE3-NEXT:    cmovel %eax, %esi
918 ; SSE3-NEXT:    cmpl $32, %esi
919 ; SSE3-NEXT:    cmovel %ecx, %esi
920 ; SSE3-NEXT:    movd %esi, %xmm1
921 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
922 ; SSE3-NEXT:    bsfl %edi, %esi
923 ; SSE3-NEXT:    cmovel %eax, %esi
924 ; SSE3-NEXT:    cmpl $32, %esi
925 ; SSE3-NEXT:    cmovel %ecx, %esi
926 ; SSE3-NEXT:    movd %esi, %xmm2
927 ; SSE3-NEXT:    movzbl -10(%rsp), %edi
928 ; SSE3-NEXT:    movzbl -11(%rsp), %esi
929 ; SSE3-NEXT:    movzbl -12(%rsp), %r10d
930 ; SSE3-NEXT:    movzbl -13(%rsp), %ebp
931 ; SSE3-NEXT:    bsfl %ebp, %ebp
932 ; SSE3-NEXT:    cmovel %eax, %ebp
933 ; SSE3-NEXT:    cmpl $32, %ebp
934 ; SSE3-NEXT:    cmovel %ecx, %ebp
935 ; SSE3-NEXT:    movd %ebp, %xmm0
936 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
937 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
938 ; SSE3-NEXT:    bsfl %ebx, %ebx
939 ; SSE3-NEXT:    cmovel %eax, %ebx
940 ; SSE3-NEXT:    cmpl $32, %ebx
941 ; SSE3-NEXT:    cmovel %ecx, %ebx
942 ; SSE3-NEXT:    movd %ebx, %xmm1
943 ; SSE3-NEXT:    bsfl %esi, %esi
944 ; SSE3-NEXT:    cmovel %eax, %esi
945 ; SSE3-NEXT:    cmpl $32, %esi
946 ; SSE3-NEXT:    cmovel %ecx, %esi
947 ; SSE3-NEXT:    movd %esi, %xmm2
948 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
949 ; SSE3-NEXT:    bsfl %edx, %edx
950 ; SSE3-NEXT:    cmovel %eax, %edx
951 ; SSE3-NEXT:    cmpl $32, %edx
952 ; SSE3-NEXT:    cmovel %ecx, %edx
953 ; SSE3-NEXT:    movd %edx, %xmm3
954 ; SSE3-NEXT:    movzbl -14(%rsp), %edx
955 ; SSE3-NEXT:    movzbl -15(%rsp), %esi
956 ; SSE3-NEXT:    bsfl %esi, %esi
957 ; SSE3-NEXT:    cmovel %eax, %esi
958 ; SSE3-NEXT:    cmpl $32, %esi
959 ; SSE3-NEXT:    cmovel %ecx, %esi
960 ; SSE3-NEXT:    movd %esi, %xmm1
961 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
962 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
963 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
964 ; SSE3-NEXT:    bsfl %r14d, %esi
965 ; SSE3-NEXT:    cmovel %eax, %esi
966 ; SSE3-NEXT:    cmpl $32, %esi
967 ; SSE3-NEXT:    cmovel %ecx, %esi
968 ; SSE3-NEXT:    movd %esi, %xmm0
969 ; SSE3-NEXT:    bsfl %edi, %esi
970 ; SSE3-NEXT:    cmovel %eax, %esi
971 ; SSE3-NEXT:    cmpl $32, %esi
972 ; SSE3-NEXT:    cmovel %ecx, %esi
973 ; SSE3-NEXT:    movd %esi, %xmm3
974 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
975 ; SSE3-NEXT:    bsfl %r11d, %esi
976 ; SSE3-NEXT:    cmovel %eax, %esi
977 ; SSE3-NEXT:    cmpl $32, %esi
978 ; SSE3-NEXT:    cmovel %ecx, %esi
979 ; SSE3-NEXT:    movd %esi, %xmm0
980 ; SSE3-NEXT:    bsfl %edx, %edx
981 ; SSE3-NEXT:    cmovel %eax, %edx
982 ; SSE3-NEXT:    cmpl $32, %edx
983 ; SSE3-NEXT:    cmovel %ecx, %edx
984 ; SSE3-NEXT:    movd %edx, %xmm2
985 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
986 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
987 ; SSE3-NEXT:    bsfl %r9d, %edx
988 ; SSE3-NEXT:    cmovel %eax, %edx
989 ; SSE3-NEXT:    cmpl $32, %edx
990 ; SSE3-NEXT:    cmovel %ecx, %edx
991 ; SSE3-NEXT:    movd %edx, %xmm0
992 ; SSE3-NEXT:    bsfl %r10d, %edx
993 ; SSE3-NEXT:    cmovel %eax, %edx
994 ; SSE3-NEXT:    cmpl $32, %edx
995 ; SSE3-NEXT:    cmovel %ecx, %edx
996 ; SSE3-NEXT:    movd %edx, %xmm3
997 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
998 ; SSE3-NEXT:    bsfl %r8d, %edx
999 ; SSE3-NEXT:    cmovel %eax, %edx
1000 ; SSE3-NEXT:    cmpl $32, %edx
1001 ; SSE3-NEXT:    cmovel %ecx, %edx
1002 ; SSE3-NEXT:    movd %edx, %xmm4
1003 ; SSE3-NEXT:    movzbl -16(%rsp), %edx
1004 ; SSE3-NEXT:    bsfl %edx, %edx
1005 ; SSE3-NEXT:    cmovel %eax, %edx
1006 ; SSE3-NEXT:    cmpl $32, %edx
1007 ; SSE3-NEXT:    cmovel %ecx, %edx
1008 ; SSE3-NEXT:    movd %edx, %xmm0
1009 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1010 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1011 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1012 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1013 ; SSE3-NEXT:    popq %rbx
1014 ; SSE3-NEXT:    popq %r14
1015 ; SSE3-NEXT:    popq %rbp
1016 ; SSE3-NEXT:    retq
1017 ;
1018 ; SSSE3-LABEL: testv16i8:
1019 ; SSSE3:       # BB#0:
1020 ; SSSE3:         pushq %rbp
1021 ; SSSE3:         pushq %r14
1022 ; SSSE3:         pushq %rbx
1023 ; SSSE3:         movaps %xmm0, -16(%rsp)
1024 ; SSSE3-NEXT:    movzbl -1(%rsp), %eax
1025 ; SSSE3-NEXT:    bsfl %eax, %edx
1026 ; SSSE3-NEXT:    movl $32, %eax
1027 ; SSSE3-NEXT:    cmovel %eax, %edx
1028 ; SSSE3-NEXT:    cmpl $32, %edx
1029 ; SSSE3-NEXT:    movl $8, %ecx
1030 ; SSSE3-NEXT:    cmovel %ecx, %edx
1031 ; SSSE3-NEXT:    movd %edx, %xmm0
1032 ; SSSE3-NEXT:    movzbl -2(%rsp), %r14d
1033 ; SSSE3-NEXT:    movzbl -3(%rsp), %ebx
1034 ; SSSE3-NEXT:    movzbl -4(%rsp), %r9d
1035 ; SSSE3-NEXT:    movzbl -5(%rsp), %edi
1036 ; SSSE3-NEXT:    movzbl -6(%rsp), %r11d
1037 ; SSSE3-NEXT:    movzbl -7(%rsp), %edx
1038 ; SSSE3-NEXT:    movzbl -8(%rsp), %r8d
1039 ; SSSE3-NEXT:    movzbl -9(%rsp), %esi
1040 ; SSSE3-NEXT:    bsfl %esi, %esi
1041 ; SSSE3-NEXT:    cmovel %eax, %esi
1042 ; SSSE3-NEXT:    cmpl $32, %esi
1043 ; SSSE3-NEXT:    cmovel %ecx, %esi
1044 ; SSSE3-NEXT:    movd %esi, %xmm1
1045 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1046 ; SSSE3-NEXT:    bsfl %edi, %esi
1047 ; SSSE3-NEXT:    cmovel %eax, %esi
1048 ; SSSE3-NEXT:    cmpl $32, %esi
1049 ; SSSE3-NEXT:    cmovel %ecx, %esi
1050 ; SSSE3-NEXT:    movd %esi, %xmm2
1051 ; SSSE3-NEXT:    movzbl -10(%rsp), %edi
1052 ; SSSE3-NEXT:    movzbl -11(%rsp), %esi
1053 ; SSSE3-NEXT:    movzbl -12(%rsp), %r10d
1054 ; SSSE3-NEXT:    movzbl -13(%rsp), %ebp
1055 ; SSSE3-NEXT:    bsfl %ebp, %ebp
1056 ; SSSE3-NEXT:    cmovel %eax, %ebp
1057 ; SSSE3-NEXT:    cmpl $32, %ebp
1058 ; SSSE3-NEXT:    cmovel %ecx, %ebp
1059 ; SSSE3-NEXT:    movd %ebp, %xmm0
1060 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1061 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1062 ; SSSE3-NEXT:    bsfl %ebx, %ebx
1063 ; SSSE3-NEXT:    cmovel %eax, %ebx
1064 ; SSSE3-NEXT:    cmpl $32, %ebx
1065 ; SSSE3-NEXT:    cmovel %ecx, %ebx
1066 ; SSSE3-NEXT:    movd %ebx, %xmm1
1067 ; SSSE3-NEXT:    bsfl %esi, %esi
1068 ; SSSE3-NEXT:    cmovel %eax, %esi
1069 ; SSSE3-NEXT:    cmpl $32, %esi
1070 ; SSSE3-NEXT:    cmovel %ecx, %esi
1071 ; SSSE3-NEXT:    movd %esi, %xmm2
1072 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1073 ; SSSE3-NEXT:    bsfl %edx, %edx
1074 ; SSSE3-NEXT:    cmovel %eax, %edx
1075 ; SSSE3-NEXT:    cmpl $32, %edx
1076 ; SSSE3-NEXT:    cmovel %ecx, %edx
1077 ; SSSE3-NEXT:    movd %edx, %xmm3
1078 ; SSSE3-NEXT:    movzbl -14(%rsp), %edx
1079 ; SSSE3-NEXT:    movzbl -15(%rsp), %esi
1080 ; SSSE3-NEXT:    bsfl %esi, %esi
1081 ; SSSE3-NEXT:    cmovel %eax, %esi
1082 ; SSSE3-NEXT:    cmpl $32, %esi
1083 ; SSSE3-NEXT:    cmovel %ecx, %esi
1084 ; SSSE3-NEXT:    movd %esi, %xmm1
1085 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1086 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1087 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1088 ; SSSE3-NEXT:    bsfl %r14d, %esi
1089 ; SSSE3-NEXT:    cmovel %eax, %esi
1090 ; SSSE3-NEXT:    cmpl $32, %esi
1091 ; SSSE3-NEXT:    cmovel %ecx, %esi
1092 ; SSSE3-NEXT:    movd %esi, %xmm0
1093 ; SSSE3-NEXT:    bsfl %edi, %esi
1094 ; SSSE3-NEXT:    cmovel %eax, %esi
1095 ; SSSE3-NEXT:    cmpl $32, %esi
1096 ; SSSE3-NEXT:    cmovel %ecx, %esi
1097 ; SSSE3-NEXT:    movd %esi, %xmm3
1098 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1099 ; SSSE3-NEXT:    bsfl %r11d, %esi
1100 ; SSSE3-NEXT:    cmovel %eax, %esi
1101 ; SSSE3-NEXT:    cmpl $32, %esi
1102 ; SSSE3-NEXT:    cmovel %ecx, %esi
1103 ; SSSE3-NEXT:    movd %esi, %xmm0
1104 ; SSSE3-NEXT:    bsfl %edx, %edx
1105 ; SSSE3-NEXT:    cmovel %eax, %edx
1106 ; SSSE3-NEXT:    cmpl $32, %edx
1107 ; SSSE3-NEXT:    cmovel %ecx, %edx
1108 ; SSSE3-NEXT:    movd %edx, %xmm2
1109 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1110 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
1111 ; SSSE3-NEXT:    bsfl %r9d, %edx
1112 ; SSSE3-NEXT:    cmovel %eax, %edx
1113 ; SSSE3-NEXT:    cmpl $32, %edx
1114 ; SSSE3-NEXT:    cmovel %ecx, %edx
1115 ; SSSE3-NEXT:    movd %edx, %xmm0
1116 ; SSSE3-NEXT:    bsfl %r10d, %edx
1117 ; SSSE3-NEXT:    cmovel %eax, %edx
1118 ; SSSE3-NEXT:    cmpl $32, %edx
1119 ; SSSE3-NEXT:    cmovel %ecx, %edx
1120 ; SSSE3-NEXT:    movd %edx, %xmm3
1121 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1122 ; SSSE3-NEXT:    bsfl %r8d, %edx
1123 ; SSSE3-NEXT:    cmovel %eax, %edx
1124 ; SSSE3-NEXT:    cmpl $32, %edx
1125 ; SSSE3-NEXT:    cmovel %ecx, %edx
1126 ; SSSE3-NEXT:    movd %edx, %xmm4
1127 ; SSSE3-NEXT:    movzbl -16(%rsp), %edx
1128 ; SSSE3-NEXT:    bsfl %edx, %edx
1129 ; SSSE3-NEXT:    cmovel %eax, %edx
1130 ; SSSE3-NEXT:    cmpl $32, %edx
1131 ; SSSE3-NEXT:    cmovel %ecx, %edx
1132 ; SSSE3-NEXT:    movd %edx, %xmm0
1133 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1134 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1135 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1136 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1137 ; SSSE3-NEXT:    popq %rbx
1138 ; SSSE3-NEXT:    popq %r14
1139 ; SSSE3-NEXT:    popq %rbp
1140 ; SSSE3-NEXT:    retq
1141 ;
1142 ; SSE41-LABEL: testv16i8:
1143 ; SSE41:       # BB#0:
1144 ; SSE41-NEXT:    pextrb $1, %xmm0, %eax
1145 ; SSE41-NEXT:    bsfl %eax, %edx
1146 ; SSE41-NEXT:    movl $32, %eax
1147 ; SSE41-NEXT:    cmovel %eax, %edx
1148 ; SSE41-NEXT:    cmpl $32, %edx
1149 ; SSE41-NEXT:    movl $8, %ecx
1150 ; SSE41-NEXT:    cmovel %ecx, %edx
1151 ; SSE41-NEXT:    pextrb $0, %xmm0, %esi
1152 ; SSE41-NEXT:    bsfl %esi, %esi
1153 ; SSE41-NEXT:    cmovel %eax, %esi
1154 ; SSE41-NEXT:    cmpl $32, %esi
1155 ; SSE41-NEXT:    cmovel %ecx, %esi
1156 ; SSE41-NEXT:    movd %esi, %xmm1
1157 ; SSE41-NEXT:    pinsrb $1, %edx, %xmm1
1158 ; SSE41-NEXT:    pextrb $2, %xmm0, %edx
1159 ; SSE41-NEXT:    bsfl %edx, %edx
1160 ; SSE41-NEXT:    cmovel %eax, %edx
1161 ; SSE41-NEXT:    cmpl $32, %edx
1162 ; SSE41-NEXT:    cmovel %ecx, %edx
1163 ; SSE41-NEXT:    pinsrb $2, %edx, %xmm1
1164 ; SSE41-NEXT:    pextrb $3, %xmm0, %edx
1165 ; SSE41-NEXT:    bsfl %edx, %edx
1166 ; SSE41-NEXT:    cmovel %eax, %edx
1167 ; SSE41-NEXT:    cmpl $32, %edx
1168 ; SSE41-NEXT:    cmovel %ecx, %edx
1169 ; SSE41-NEXT:    pinsrb $3, %edx, %xmm1
1170 ; SSE41-NEXT:    pextrb $4, %xmm0, %edx
1171 ; SSE41-NEXT:    bsfl %edx, %edx
1172 ; SSE41-NEXT:    cmovel %eax, %edx
1173 ; SSE41-NEXT:    cmpl $32, %edx
1174 ; SSE41-NEXT:    cmovel %ecx, %edx
1175 ; SSE41-NEXT:    pinsrb $4, %edx, %xmm1
1176 ; SSE41-NEXT:    pextrb $5, %xmm0, %edx
1177 ; SSE41-NEXT:    bsfl %edx, %edx
1178 ; SSE41-NEXT:    cmovel %eax, %edx
1179 ; SSE41-NEXT:    cmpl $32, %edx
1180 ; SSE41-NEXT:    cmovel %ecx, %edx
1181 ; SSE41-NEXT:    pinsrb $5, %edx, %xmm1
1182 ; SSE41-NEXT:    pextrb $6, %xmm0, %edx
1183 ; SSE41-NEXT:    bsfl %edx, %edx
1184 ; SSE41-NEXT:    cmovel %eax, %edx
1185 ; SSE41-NEXT:    cmpl $32, %edx
1186 ; SSE41-NEXT:    cmovel %ecx, %edx
1187 ; SSE41-NEXT:    pinsrb $6, %edx, %xmm1
1188 ; SSE41-NEXT:    pextrb $7, %xmm0, %edx
1189 ; SSE41-NEXT:    bsfl %edx, %edx
1190 ; SSE41-NEXT:    cmovel %eax, %edx
1191 ; SSE41-NEXT:    cmpl $32, %edx
1192 ; SSE41-NEXT:    cmovel %ecx, %edx
1193 ; SSE41-NEXT:    pinsrb $7, %edx, %xmm1
1194 ; SSE41-NEXT:    pextrb $8, %xmm0, %edx
1195 ; SSE41-NEXT:    bsfl %edx, %edx
1196 ; SSE41-NEXT:    cmovel %eax, %edx
1197 ; SSE41-NEXT:    cmpl $32, %edx
1198 ; SSE41-NEXT:    cmovel %ecx, %edx
1199 ; SSE41-NEXT:    pinsrb $8, %edx, %xmm1
1200 ; SSE41-NEXT:    pextrb $9, %xmm0, %edx
1201 ; SSE41-NEXT:    bsfl %edx, %edx
1202 ; SSE41-NEXT:    cmovel %eax, %edx
1203 ; SSE41-NEXT:    cmpl $32, %edx
1204 ; SSE41-NEXT:    cmovel %ecx, %edx
1205 ; SSE41-NEXT:    pinsrb $9, %edx, %xmm1
1206 ; SSE41-NEXT:    pextrb $10, %xmm0, %edx
1207 ; SSE41-NEXT:    bsfl %edx, %edx
1208 ; SSE41-NEXT:    cmovel %eax, %edx
1209 ; SSE41-NEXT:    cmpl $32, %edx
1210 ; SSE41-NEXT:    cmovel %ecx, %edx
1211 ; SSE41-NEXT:    pinsrb $10, %edx, %xmm1
1212 ; SSE41-NEXT:    pextrb $11, %xmm0, %edx
1213 ; SSE41-NEXT:    bsfl %edx, %edx
1214 ; SSE41-NEXT:    cmovel %eax, %edx
1215 ; SSE41-NEXT:    cmpl $32, %edx
1216 ; SSE41-NEXT:    cmovel %ecx, %edx
1217 ; SSE41-NEXT:    pinsrb $11, %edx, %xmm1
1218 ; SSE41-NEXT:    pextrb $12, %xmm0, %edx
1219 ; SSE41-NEXT:    bsfl %edx, %edx
1220 ; SSE41-NEXT:    cmovel %eax, %edx
1221 ; SSE41-NEXT:    cmpl $32, %edx
1222 ; SSE41-NEXT:    cmovel %ecx, %edx
1223 ; SSE41-NEXT:    pinsrb $12, %edx, %xmm1
1224 ; SSE41-NEXT:    pextrb $13, %xmm0, %edx
1225 ; SSE41-NEXT:    bsfl %edx, %edx
1226 ; SSE41-NEXT:    cmovel %eax, %edx
1227 ; SSE41-NEXT:    cmpl $32, %edx
1228 ; SSE41-NEXT:    cmovel %ecx, %edx
1229 ; SSE41-NEXT:    pinsrb $13, %edx, %xmm1
1230 ; SSE41-NEXT:    pextrb $14, %xmm0, %edx
1231 ; SSE41-NEXT:    bsfl %edx, %edx
1232 ; SSE41-NEXT:    cmovel %eax, %edx
1233 ; SSE41-NEXT:    cmpl $32, %edx
1234 ; SSE41-NEXT:    cmovel %ecx, %edx
1235 ; SSE41-NEXT:    pinsrb $14, %edx, %xmm1
1236 ; SSE41-NEXT:    pextrb $15, %xmm0, %edx
1237 ; SSE41-NEXT:    bsfl %edx, %edx
1238 ; SSE41-NEXT:    cmovel %eax, %edx
1239 ; SSE41-NEXT:    cmpl $32, %edx
1240 ; SSE41-NEXT:    cmovel %ecx, %edx
1241 ; SSE41-NEXT:    pinsrb $15, %edx, %xmm1
1242 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1243 ; SSE41-NEXT:    retq
1244 ;
1245 ; AVX-LABEL: testv16i8:
1246 ; AVX:       # BB#0:
1247 ; AVX-NEXT:    vpextrb $1, %xmm0, %eax
1248 ; AVX-NEXT:    bsfl %eax, %edx
1249 ; AVX-NEXT:    movl $32, %eax
1250 ; AVX-NEXT:    cmovel %eax, %edx
1251 ; AVX-NEXT:    cmpl $32, %edx
1252 ; AVX-NEXT:    movl $8, %ecx
1253 ; AVX-NEXT:    cmovel %ecx, %edx
1254 ; AVX-NEXT:    vpextrb $0, %xmm0, %esi
1255 ; AVX-NEXT:    bsfl %esi, %esi
1256 ; AVX-NEXT:    cmovel %eax, %esi
1257 ; AVX-NEXT:    cmpl $32, %esi
1258 ; AVX-NEXT:    cmovel %ecx, %esi
1259 ; AVX-NEXT:    vmovd %esi, %xmm1
1260 ; AVX-NEXT:    vpinsrb $1, %edx, %xmm1, %xmm1
1261 ; AVX-NEXT:    vpextrb $2, %xmm0, %edx
1262 ; AVX-NEXT:    bsfl %edx, %edx
1263 ; AVX-NEXT:    cmovel %eax, %edx
1264 ; AVX-NEXT:    cmpl $32, %edx
1265 ; AVX-NEXT:    cmovel %ecx, %edx
1266 ; AVX-NEXT:    vpinsrb $2, %edx, %xmm1, %xmm1
1267 ; AVX-NEXT:    vpextrb $3, %xmm0, %edx
1268 ; AVX-NEXT:    bsfl %edx, %edx
1269 ; AVX-NEXT:    cmovel %eax, %edx
1270 ; AVX-NEXT:    cmpl $32, %edx
1271 ; AVX-NEXT:    cmovel %ecx, %edx
1272 ; AVX-NEXT:    vpinsrb $3, %edx, %xmm1, %xmm1
1273 ; AVX-NEXT:    vpextrb $4, %xmm0, %edx
1274 ; AVX-NEXT:    bsfl %edx, %edx
1275 ; AVX-NEXT:    cmovel %eax, %edx
1276 ; AVX-NEXT:    cmpl $32, %edx
1277 ; AVX-NEXT:    cmovel %ecx, %edx
1278 ; AVX-NEXT:    vpinsrb $4, %edx, %xmm1, %xmm1
1279 ; AVX-NEXT:    vpextrb $5, %xmm0, %edx
1280 ; AVX-NEXT:    bsfl %edx, %edx
1281 ; AVX-NEXT:    cmovel %eax, %edx
1282 ; AVX-NEXT:    cmpl $32, %edx
1283 ; AVX-NEXT:    cmovel %ecx, %edx
1284 ; AVX-NEXT:    vpinsrb $5, %edx, %xmm1, %xmm1
1285 ; AVX-NEXT:    vpextrb $6, %xmm0, %edx
1286 ; AVX-NEXT:    bsfl %edx, %edx
1287 ; AVX-NEXT:    cmovel %eax, %edx
1288 ; AVX-NEXT:    cmpl $32, %edx
1289 ; AVX-NEXT:    cmovel %ecx, %edx
1290 ; AVX-NEXT:    vpinsrb $6, %edx, %xmm1, %xmm1
1291 ; AVX-NEXT:    vpextrb $7, %xmm0, %edx
1292 ; AVX-NEXT:    bsfl %edx, %edx
1293 ; AVX-NEXT:    cmovel %eax, %edx
1294 ; AVX-NEXT:    cmpl $32, %edx
1295 ; AVX-NEXT:    cmovel %ecx, %edx
1296 ; AVX-NEXT:    vpinsrb $7, %edx, %xmm1, %xmm1
1297 ; AVX-NEXT:    vpextrb $8, %xmm0, %edx
1298 ; AVX-NEXT:    bsfl %edx, %edx
1299 ; AVX-NEXT:    cmovel %eax, %edx
1300 ; AVX-NEXT:    cmpl $32, %edx
1301 ; AVX-NEXT:    cmovel %ecx, %edx
1302 ; AVX-NEXT:    vpinsrb $8, %edx, %xmm1, %xmm1
1303 ; AVX-NEXT:    vpextrb $9, %xmm0, %edx
1304 ; AVX-NEXT:    bsfl %edx, %edx
1305 ; AVX-NEXT:    cmovel %eax, %edx
1306 ; AVX-NEXT:    cmpl $32, %edx
1307 ; AVX-NEXT:    cmovel %ecx, %edx
1308 ; AVX-NEXT:    vpinsrb $9, %edx, %xmm1, %xmm1
1309 ; AVX-NEXT:    vpextrb $10, %xmm0, %edx
1310 ; AVX-NEXT:    bsfl %edx, %edx
1311 ; AVX-NEXT:    cmovel %eax, %edx
1312 ; AVX-NEXT:    cmpl $32, %edx
1313 ; AVX-NEXT:    cmovel %ecx, %edx
1314 ; AVX-NEXT:    vpinsrb $10, %edx, %xmm1, %xmm1
1315 ; AVX-NEXT:    vpextrb $11, %xmm0, %edx
1316 ; AVX-NEXT:    bsfl %edx, %edx
1317 ; AVX-NEXT:    cmovel %eax, %edx
1318 ; AVX-NEXT:    cmpl $32, %edx
1319 ; AVX-NEXT:    cmovel %ecx, %edx
1320 ; AVX-NEXT:    vpinsrb $11, %edx, %xmm1, %xmm1
1321 ; AVX-NEXT:    vpextrb $12, %xmm0, %edx
1322 ; AVX-NEXT:    bsfl %edx, %edx
1323 ; AVX-NEXT:    cmovel %eax, %edx
1324 ; AVX-NEXT:    cmpl $32, %edx
1325 ; AVX-NEXT:    cmovel %ecx, %edx
1326 ; AVX-NEXT:    vpinsrb $12, %edx, %xmm1, %xmm1
1327 ; AVX-NEXT:    vpextrb $13, %xmm0, %edx
1328 ; AVX-NEXT:    bsfl %edx, %edx
1329 ; AVX-NEXT:    cmovel %eax, %edx
1330 ; AVX-NEXT:    cmpl $32, %edx
1331 ; AVX-NEXT:    cmovel %ecx, %edx
1332 ; AVX-NEXT:    vpinsrb $13, %edx, %xmm1, %xmm1
1333 ; AVX-NEXT:    vpextrb $14, %xmm0, %edx
1334 ; AVX-NEXT:    bsfl %edx, %edx
1335 ; AVX-NEXT:    cmovel %eax, %edx
1336 ; AVX-NEXT:    cmpl $32, %edx
1337 ; AVX-NEXT:    cmovel %ecx, %edx
1338 ; AVX-NEXT:    vpinsrb $14, %edx, %xmm1, %xmm1
1339 ; AVX-NEXT:    vpextrb $15, %xmm0, %edx
1340 ; AVX-NEXT:    bsfl %edx, %edx
1341 ; AVX-NEXT:    cmovel %eax, %edx
1342 ; AVX-NEXT:    cmpl $32, %edx
1343 ; AVX-NEXT:    cmovel %ecx, %edx
1344 ; AVX-NEXT:    vpinsrb $15, %edx, %xmm1, %xmm0
1345 ; AVX-NEXT:    retq
1346   %out = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %in, i1 0)
1347   ret <16 x i8> %out
1348 }
1349
1350 define <16 x i8> @testv16i8u(<16 x i8> %in) {
1351 ; SSE2-LABEL: testv16i8u:
1352 ; SSE2:       # BB#0:
1353 ; SSE2:         pushq %rbx
1354 ; SSE2:         movaps %xmm0, -16(%rsp)
1355 ; SSE2-NEXT:    movzbl -1(%rsp), %eax
1356 ; SSE2-NEXT:    bsfl %eax, %eax
1357 ; SSE2-NEXT:    movd %eax, %xmm0
1358 ; SSE2-NEXT:    movzbl -2(%rsp), %r11d
1359 ; SSE2-NEXT:    movzbl -3(%rsp), %eax
1360 ; SSE2-NEXT:    movzbl -4(%rsp), %r9d
1361 ; SSE2-NEXT:    movzbl -5(%rsp), %edi
1362 ; SSE2-NEXT:    movzbl -6(%rsp), %r10d
1363 ; SSE2-NEXT:    movzbl -7(%rsp), %ecx
1364 ; SSE2-NEXT:    movzbl -8(%rsp), %r8d
1365 ; SSE2-NEXT:    movzbl -9(%rsp), %edx
1366 ; SSE2-NEXT:    bsfl %edx, %edx
1367 ; SSE2-NEXT:    movd %edx, %xmm1
1368 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1369 ; SSE2-NEXT:    bsfl %edi, %edx
1370 ; SSE2-NEXT:    movd %edx, %xmm0
1371 ; SSE2-NEXT:    movzbl -10(%rsp), %edx
1372 ; SSE2-NEXT:    movzbl -11(%rsp), %esi
1373 ; SSE2-NEXT:    movzbl -12(%rsp), %edi
1374 ; SSE2-NEXT:    movzbl -13(%rsp), %ebx
1375 ; SSE2-NEXT:    bsfl %ebx, %ebx
1376 ; SSE2-NEXT:    movd %ebx, %xmm2
1377 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1378 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1379 ; SSE2-NEXT:    bsfl %eax, %eax
1380 ; SSE2-NEXT:    movd %eax, %xmm0
1381 ; SSE2-NEXT:    bsfl %esi, %eax
1382 ; SSE2-NEXT:    movd %eax, %xmm3
1383 ; SSE2-NEXT:    punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1384 ; SSE2-NEXT:    bsfl %ecx, %eax
1385 ; SSE2-NEXT:    movd %eax, %xmm0
1386 ; SSE2-NEXT:    movzbl -14(%rsp), %eax
1387 ; SSE2-NEXT:    movzbl -15(%rsp), %ecx
1388 ; SSE2-NEXT:    bsfl %ecx, %ecx
1389 ; SSE2-NEXT:    movd %ecx, %xmm1
1390 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1391 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1392 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1393 ; SSE2-NEXT:    bsfl %r11d, %ecx
1394 ; SSE2-NEXT:    movd %ecx, %xmm0
1395 ; SSE2-NEXT:    bsfl %edx, %ecx
1396 ; SSE2-NEXT:    movd %ecx, %xmm2
1397 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1398 ; SSE2-NEXT:    bsfl %r10d, %ecx
1399 ; SSE2-NEXT:    movd %ecx, %xmm0
1400 ; SSE2-NEXT:    bsfl %eax, %eax
1401 ; SSE2-NEXT:    movd %eax, %xmm3
1402 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1403 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
1404 ; SSE2-NEXT:    bsfl %r9d, %eax
1405 ; SSE2-NEXT:    movd %eax, %xmm0
1406 ; SSE2-NEXT:    bsfl %edi, %eax
1407 ; SSE2-NEXT:    movd %eax, %xmm2
1408 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1409 ; SSE2-NEXT:    bsfl %r8d, %eax
1410 ; SSE2-NEXT:    movd %eax, %xmm4
1411 ; SSE2-NEXT:    movzbl -16(%rsp), %eax
1412 ; SSE2-NEXT:    bsfl %eax, %eax
1413 ; SSE2-NEXT:    movd %eax, %xmm0
1414 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1415 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1416 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1417 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1418 ; SSE2-NEXT:    popq %rbx
1419 ; SSE2-NEXT:    retq
1420 ;
1421 ; SSE3-LABEL: testv16i8u:
1422 ; SSE3:       # BB#0:
1423 ; SSE3:         pushq %rbx
1424 ; SSE3:         movaps %xmm0, -16(%rsp)
1425 ; SSE3-NEXT:    movzbl -1(%rsp), %eax
1426 ; SSE3-NEXT:    bsfl %eax, %eax
1427 ; SSE3-NEXT:    movd %eax, %xmm0
1428 ; SSE3-NEXT:    movzbl -2(%rsp), %r11d
1429 ; SSE3-NEXT:    movzbl -3(%rsp), %eax
1430 ; SSE3-NEXT:    movzbl -4(%rsp), %r9d
1431 ; SSE3-NEXT:    movzbl -5(%rsp), %edi
1432 ; SSE3-NEXT:    movzbl -6(%rsp), %r10d
1433 ; SSE3-NEXT:    movzbl -7(%rsp), %ecx
1434 ; SSE3-NEXT:    movzbl -8(%rsp), %r8d
1435 ; SSE3-NEXT:    movzbl -9(%rsp), %edx
1436 ; SSE3-NEXT:    bsfl %edx, %edx
1437 ; SSE3-NEXT:    movd %edx, %xmm1
1438 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1439 ; SSE3-NEXT:    bsfl %edi, %edx
1440 ; SSE3-NEXT:    movd %edx, %xmm0
1441 ; SSE3-NEXT:    movzbl -10(%rsp), %edx
1442 ; SSE3-NEXT:    movzbl -11(%rsp), %esi
1443 ; SSE3-NEXT:    movzbl -12(%rsp), %edi
1444 ; SSE3-NEXT:    movzbl -13(%rsp), %ebx
1445 ; SSE3-NEXT:    bsfl %ebx, %ebx
1446 ; SSE3-NEXT:    movd %ebx, %xmm2
1447 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1448 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1449 ; SSE3-NEXT:    bsfl %eax, %eax
1450 ; SSE3-NEXT:    movd %eax, %xmm0
1451 ; SSE3-NEXT:    bsfl %esi, %eax
1452 ; SSE3-NEXT:    movd %eax, %xmm3
1453 ; SSE3-NEXT:    punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1454 ; SSE3-NEXT:    bsfl %ecx, %eax
1455 ; SSE3-NEXT:    movd %eax, %xmm0
1456 ; SSE3-NEXT:    movzbl -14(%rsp), %eax
1457 ; SSE3-NEXT:    movzbl -15(%rsp), %ecx
1458 ; SSE3-NEXT:    bsfl %ecx, %ecx
1459 ; SSE3-NEXT:    movd %ecx, %xmm1
1460 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1461 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1462 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1463 ; SSE3-NEXT:    bsfl %r11d, %ecx
1464 ; SSE3-NEXT:    movd %ecx, %xmm0
1465 ; SSE3-NEXT:    bsfl %edx, %ecx
1466 ; SSE3-NEXT:    movd %ecx, %xmm2
1467 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1468 ; SSE3-NEXT:    bsfl %r10d, %ecx
1469 ; SSE3-NEXT:    movd %ecx, %xmm0
1470 ; SSE3-NEXT:    bsfl %eax, %eax
1471 ; SSE3-NEXT:    movd %eax, %xmm3
1472 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1473 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
1474 ; SSE3-NEXT:    bsfl %r9d, %eax
1475 ; SSE3-NEXT:    movd %eax, %xmm0
1476 ; SSE3-NEXT:    bsfl %edi, %eax
1477 ; SSE3-NEXT:    movd %eax, %xmm2
1478 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1479 ; SSE3-NEXT:    bsfl %r8d, %eax
1480 ; SSE3-NEXT:    movd %eax, %xmm4
1481 ; SSE3-NEXT:    movzbl -16(%rsp), %eax
1482 ; SSE3-NEXT:    bsfl %eax, %eax
1483 ; SSE3-NEXT:    movd %eax, %xmm0
1484 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1485 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1486 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1487 ; SSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1488 ; SSE3-NEXT:    popq %rbx
1489 ; SSE3-NEXT:    retq
1490 ;
1491 ; SSSE3-LABEL: testv16i8u:
1492 ; SSSE3:       # BB#0:
1493 ; SSSE3:         pushq %rbx
1494 ; SSSE3:         movaps %xmm0, -16(%rsp)
1495 ; SSSE3-NEXT:    movzbl -1(%rsp), %eax
1496 ; SSSE3-NEXT:    bsfl %eax, %eax
1497 ; SSSE3-NEXT:    movd %eax, %xmm0
1498 ; SSSE3-NEXT:    movzbl -2(%rsp), %r11d
1499 ; SSSE3-NEXT:    movzbl -3(%rsp), %eax
1500 ; SSSE3-NEXT:    movzbl -4(%rsp), %r9d
1501 ; SSSE3-NEXT:    movzbl -5(%rsp), %edi
1502 ; SSSE3-NEXT:    movzbl -6(%rsp), %r10d
1503 ; SSSE3-NEXT:    movzbl -7(%rsp), %ecx
1504 ; SSSE3-NEXT:    movzbl -8(%rsp), %r8d
1505 ; SSSE3-NEXT:    movzbl -9(%rsp), %edx
1506 ; SSSE3-NEXT:    bsfl %edx, %edx
1507 ; SSSE3-NEXT:    movd %edx, %xmm1
1508 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1509 ; SSSE3-NEXT:    bsfl %edi, %edx
1510 ; SSSE3-NEXT:    movd %edx, %xmm0
1511 ; SSSE3-NEXT:    movzbl -10(%rsp), %edx
1512 ; SSSE3-NEXT:    movzbl -11(%rsp), %esi
1513 ; SSSE3-NEXT:    movzbl -12(%rsp), %edi
1514 ; SSSE3-NEXT:    movzbl -13(%rsp), %ebx
1515 ; SSSE3-NEXT:    bsfl %ebx, %ebx
1516 ; SSSE3-NEXT:    movd %ebx, %xmm2
1517 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1518 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
1519 ; SSSE3-NEXT:    bsfl %eax, %eax
1520 ; SSSE3-NEXT:    movd %eax, %xmm0
1521 ; SSSE3-NEXT:    bsfl %esi, %eax
1522 ; SSSE3-NEXT:    movd %eax, %xmm3
1523 ; SSSE3-NEXT:    punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1524 ; SSSE3-NEXT:    bsfl %ecx, %eax
1525 ; SSSE3-NEXT:    movd %eax, %xmm0
1526 ; SSSE3-NEXT:    movzbl -14(%rsp), %eax
1527 ; SSSE3-NEXT:    movzbl -15(%rsp), %ecx
1528 ; SSSE3-NEXT:    bsfl %ecx, %ecx
1529 ; SSSE3-NEXT:    movd %ecx, %xmm1
1530 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
1531 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7]
1532 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
1533 ; SSSE3-NEXT:    bsfl %r11d, %ecx
1534 ; SSSE3-NEXT:    movd %ecx, %xmm0
1535 ; SSSE3-NEXT:    bsfl %edx, %ecx
1536 ; SSSE3-NEXT:    movd %ecx, %xmm2
1537 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1538 ; SSSE3-NEXT:    bsfl %r10d, %ecx
1539 ; SSSE3-NEXT:    movd %ecx, %xmm0
1540 ; SSSE3-NEXT:    bsfl %eax, %eax
1541 ; SSSE3-NEXT:    movd %eax, %xmm3
1542 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
1543 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
1544 ; SSSE3-NEXT:    bsfl %r9d, %eax
1545 ; SSSE3-NEXT:    movd %eax, %xmm0
1546 ; SSSE3-NEXT:    bsfl %edi, %eax
1547 ; SSSE3-NEXT:    movd %eax, %xmm2
1548 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
1549 ; SSSE3-NEXT:    bsfl %r8d, %eax
1550 ; SSSE3-NEXT:    movd %eax, %xmm4
1551 ; SSSE3-NEXT:    movzbl -16(%rsp), %eax
1552 ; SSSE3-NEXT:    bsfl %eax, %eax
1553 ; SSSE3-NEXT:    movd %eax, %xmm0
1554 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
1555 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
1556 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
1557 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
1558 ; SSSE3-NEXT:    popq %rbx
1559 ; SSSE3-NEXT:    retq
1560 ;
1561 ; SSE41-LABEL: testv16i8u:
1562 ; SSE41:       # BB#0:
1563 ; SSE41-NEXT:    pextrb $1, %xmm0, %eax
1564 ; SSE41-NEXT:    bsfl %eax, %eax
1565 ; SSE41-NEXT:    pextrb $0, %xmm0, %ecx
1566 ; SSE41-NEXT:    bsfl %ecx, %ecx
1567 ; SSE41-NEXT:    movd %ecx, %xmm1
1568 ; SSE41-NEXT:    pinsrb $1, %eax, %xmm1
1569 ; SSE41-NEXT:    pextrb $2, %xmm0, %eax
1570 ; SSE41-NEXT:    bsfl %eax, %eax
1571 ; SSE41-NEXT:    pinsrb $2, %eax, %xmm1
1572 ; SSE41-NEXT:    pextrb $3, %xmm0, %eax
1573 ; SSE41-NEXT:    bsfl %eax, %eax
1574 ; SSE41-NEXT:    pinsrb $3, %eax, %xmm1
1575 ; SSE41-NEXT:    pextrb $4, %xmm0, %eax
1576 ; SSE41-NEXT:    bsfl %eax, %eax
1577 ; SSE41-NEXT:    pinsrb $4, %eax, %xmm1
1578 ; SSE41-NEXT:    pextrb $5, %xmm0, %eax
1579 ; SSE41-NEXT:    bsfl %eax, %eax
1580 ; SSE41-NEXT:    pinsrb $5, %eax, %xmm1
1581 ; SSE41-NEXT:    pextrb $6, %xmm0, %eax
1582 ; SSE41-NEXT:    bsfl %eax, %eax
1583 ; SSE41-NEXT:    pinsrb $6, %eax, %xmm1
1584 ; SSE41-NEXT:    pextrb $7, %xmm0, %eax
1585 ; SSE41-NEXT:    bsfl %eax, %eax
1586 ; SSE41-NEXT:    pinsrb $7, %eax, %xmm1
1587 ; SSE41-NEXT:    pextrb $8, %xmm0, %eax
1588 ; SSE41-NEXT:    bsfl %eax, %eax
1589 ; SSE41-NEXT:    pinsrb $8, %eax, %xmm1
1590 ; SSE41-NEXT:    pextrb $9, %xmm0, %eax
1591 ; SSE41-NEXT:    bsfl %eax, %eax
1592 ; SSE41-NEXT:    pinsrb $9, %eax, %xmm1
1593 ; SSE41-NEXT:    pextrb $10, %xmm0, %eax
1594 ; SSE41-NEXT:    bsfl %eax, %eax
1595 ; SSE41-NEXT:    pinsrb $10, %eax, %xmm1
1596 ; SSE41-NEXT:    pextrb $11, %xmm0, %eax
1597 ; SSE41-NEXT:    bsfl %eax, %eax
1598 ; SSE41-NEXT:    pinsrb $11, %eax, %xmm1
1599 ; SSE41-NEXT:    pextrb $12, %xmm0, %eax
1600 ; SSE41-NEXT:    bsfl %eax, %eax
1601 ; SSE41-NEXT:    pinsrb $12, %eax, %xmm1
1602 ; SSE41-NEXT:    pextrb $13, %xmm0, %eax
1603 ; SSE41-NEXT:    bsfl %eax, %eax
1604 ; SSE41-NEXT:    pinsrb $13, %eax, %xmm1
1605 ; SSE41-NEXT:    pextrb $14, %xmm0, %eax
1606 ; SSE41-NEXT:    bsfl %eax, %eax
1607 ; SSE41-NEXT:    pinsrb $14, %eax, %xmm1
1608 ; SSE41-NEXT:    pextrb $15, %xmm0, %eax
1609 ; SSE41-NEXT:    bsfl %eax, %eax
1610 ; SSE41-NEXT:    pinsrb $15, %eax, %xmm1
1611 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
1612 ; SSE41-NEXT:    retq
1613 ;
1614 ; AVX-LABEL: testv16i8u:
1615 ; AVX:       # BB#0:
1616 ; AVX-NEXT:    vpextrb $1, %xmm0, %eax
1617 ; AVX-NEXT:    bsfl %eax, %eax
1618 ; AVX-NEXT:    vpextrb $0, %xmm0, %ecx
1619 ; AVX-NEXT:    bsfl %ecx, %ecx
1620 ; AVX-NEXT:    vmovd %ecx, %xmm1
1621 ; AVX-NEXT:    vpinsrb $1, %eax, %xmm1, %xmm1
1622 ; AVX-NEXT:    vpextrb $2, %xmm0, %eax
1623 ; AVX-NEXT:    bsfl %eax, %eax
1624 ; AVX-NEXT:    vpinsrb $2, %eax, %xmm1, %xmm1
1625 ; AVX-NEXT:    vpextrb $3, %xmm0, %eax
1626 ; AVX-NEXT:    bsfl %eax, %eax
1627 ; AVX-NEXT:    vpinsrb $3, %eax, %xmm1, %xmm1
1628 ; AVX-NEXT:    vpextrb $4, %xmm0, %eax
1629 ; AVX-NEXT:    bsfl %eax, %eax
1630 ; AVX-NEXT:    vpinsrb $4, %eax, %xmm1, %xmm1
1631 ; AVX-NEXT:    vpextrb $5, %xmm0, %eax
1632 ; AVX-NEXT:    bsfl %eax, %eax
1633 ; AVX-NEXT:    vpinsrb $5, %eax, %xmm1, %xmm1
1634 ; AVX-NEXT:    vpextrb $6, %xmm0, %eax
1635 ; AVX-NEXT:    bsfl %eax, %eax
1636 ; AVX-NEXT:    vpinsrb $6, %eax, %xmm1, %xmm1
1637 ; AVX-NEXT:    vpextrb $7, %xmm0, %eax
1638 ; AVX-NEXT:    bsfl %eax, %eax
1639 ; AVX-NEXT:    vpinsrb $7, %eax, %xmm1, %xmm1
1640 ; AVX-NEXT:    vpextrb $8, %xmm0, %eax
1641 ; AVX-NEXT:    bsfl %eax, %eax
1642 ; AVX-NEXT:    vpinsrb $8, %eax, %xmm1, %xmm1
1643 ; AVX-NEXT:    vpextrb $9, %xmm0, %eax
1644 ; AVX-NEXT:    bsfl %eax, %eax
1645 ; AVX-NEXT:    vpinsrb $9, %eax, %xmm1, %xmm1
1646 ; AVX-NEXT:    vpextrb $10, %xmm0, %eax
1647 ; AVX-NEXT:    bsfl %eax, %eax
1648 ; AVX-NEXT:    vpinsrb $10, %eax, %xmm1, %xmm1
1649 ; AVX-NEXT:    vpextrb $11, %xmm0, %eax
1650 ; AVX-NEXT:    bsfl %eax, %eax
1651 ; AVX-NEXT:    vpinsrb $11, %eax, %xmm1, %xmm1
1652 ; AVX-NEXT:    vpextrb $12, %xmm0, %eax
1653 ; AVX-NEXT:    bsfl %eax, %eax
1654 ; AVX-NEXT:    vpinsrb $12, %eax, %xmm1, %xmm1
1655 ; AVX-NEXT:    vpextrb $13, %xmm0, %eax
1656 ; AVX-NEXT:    bsfl %eax, %eax
1657 ; AVX-NEXT:    vpinsrb $13, %eax, %xmm1, %xmm1
1658 ; AVX-NEXT:    vpextrb $14, %xmm0, %eax
1659 ; AVX-NEXT:    bsfl %eax, %eax
1660 ; AVX-NEXT:    vpinsrb $14, %eax, %xmm1, %xmm1
1661 ; AVX-NEXT:    vpextrb $15, %xmm0, %eax
1662 ; AVX-NEXT:    bsfl %eax, %eax
1663 ; AVX-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm0
1664 ; AVX-NEXT:    retq
1665   %out = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %in, i1 -1)
1666   ret <16 x i8> %out
1667 }
1668
1669 declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)
1670 declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1)
1671 declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1)
1672 declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1)