[x86] Fix wrong lowering of vsetcc nodes (PR25080).
[oota-llvm.git] / test / CodeGen / X86 / vector-lzcnt-512.ll
1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl -mattr=+avx512cd | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512CD
2
3 define <8 x i64> @testv8i64(<8 x i64> %in) nounwind {
4 ; ALL-LABEL: testv8i64:
5 ; ALL:       ## BB#0:
6 ; ALL-NEXT:    vplzcntq %zmm0, %zmm0
7 ; ALL-NEXT:    retq
8   %out = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %in, i1 0)
9   ret <8 x i64> %out
10 }
11
12 define <8 x i64> @testv8i64u(<8 x i64> %in) nounwind {
13 ; ALL-LABEL: testv8i64u:
14 ; ALL:       ## BB#0:
15 ; ALL-NEXT:    vplzcntq %zmm0, %zmm0
16 ; ALL-NEXT:    retq
17   %out = call <8 x i64> @llvm.ctlz.v8i64(<8 x i64> %in, i1 -1)
18   ret <8 x i64> %out
19 }
20
21 define <16 x i32> @testv16i32(<16 x i32> %in) nounwind {
22 ; ALL-LABEL: testv16i32:
23 ; ALL:       ## BB#0:
24 ; ALL-NEXT:    vplzcntd %zmm0, %zmm0
25 ; ALL-NEXT:    retq
26   %out = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %in, i1 0)
27   ret <16 x i32> %out
28 }
29
30 define <16 x i32> @testv16i32u(<16 x i32> %in) nounwind {
31 ; ALL-LABEL: testv16i32u:
32 ; ALL:       ## BB#0:
33 ; ALL-NEXT:    vplzcntd %zmm0, %zmm0
34 ; ALL-NEXT:    retq
35   %out = call <16 x i32> @llvm.ctlz.v16i32(<16 x i32> %in, i1 -1)
36   ret <16 x i32> %out
37 }
38
39 define <32 x i16> @testv32i16(<32 x i16> %in) nounwind {
40 ; ALL-LABEL: testv32i16:
41 ; ALL:       ## BB#0:
42 ; ALL-NEXT:    vextracti128 $1, %ymm0, %xmm2
43 ; ALL-NEXT:    vpextrw $1, %xmm2, %eax
44 ; ALL-NEXT:    lzcntw %ax, %ax
45 ; ALL-NEXT:    vmovd %xmm2, %ecx
46 ; ALL-NEXT:    lzcntw %cx, %cx
47 ; ALL-NEXT:    vmovd %ecx, %xmm3
48 ; ALL-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
49 ; ALL-NEXT:    vpextrw $2, %xmm2, %eax
50 ; ALL-NEXT:    lzcntw %ax, %ax
51 ; ALL-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
52 ; ALL-NEXT:    vpextrw $3, %xmm2, %eax
53 ; ALL-NEXT:    lzcntw %ax, %ax
54 ; ALL-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
55 ; ALL-NEXT:    vpextrw $4, %xmm2, %eax
56 ; ALL-NEXT:    lzcntw %ax, %ax
57 ; ALL-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
58 ; ALL-NEXT:    vpextrw $5, %xmm2, %eax
59 ; ALL-NEXT:    lzcntw %ax, %ax
60 ; ALL-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
61 ; ALL-NEXT:    vpextrw $6, %xmm2, %eax
62 ; ALL-NEXT:    lzcntw %ax, %ax
63 ; ALL-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
64 ; ALL-NEXT:    vpextrw $7, %xmm2, %eax
65 ; ALL-NEXT:    lzcntw %ax, %ax
66 ; ALL-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm2
67 ; ALL-NEXT:    vpextrw $1, %xmm0, %eax
68 ; ALL-NEXT:    lzcntw %ax, %ax
69 ; ALL-NEXT:    vmovd %xmm0, %ecx
70 ; ALL-NEXT:    lzcntw %cx, %cx
71 ; ALL-NEXT:    vmovd %ecx, %xmm3
72 ; ALL-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
73 ; ALL-NEXT:    vpextrw $2, %xmm0, %eax
74 ; ALL-NEXT:    lzcntw %ax, %ax
75 ; ALL-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
76 ; ALL-NEXT:    vpextrw $3, %xmm0, %eax
77 ; ALL-NEXT:    lzcntw %ax, %ax
78 ; ALL-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
79 ; ALL-NEXT:    vpextrw $4, %xmm0, %eax
80 ; ALL-NEXT:    lzcntw %ax, %ax
81 ; ALL-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
82 ; ALL-NEXT:    vpextrw $5, %xmm0, %eax
83 ; ALL-NEXT:    lzcntw %ax, %ax
84 ; ALL-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
85 ; ALL-NEXT:    vpextrw $6, %xmm0, %eax
86 ; ALL-NEXT:    lzcntw %ax, %ax
87 ; ALL-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
88 ; ALL-NEXT:    vpextrw $7, %xmm0, %eax
89 ; ALL-NEXT:    lzcntw %ax, %ax
90 ; ALL-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm0
91 ; ALL-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
92 ; ALL-NEXT:    vextracti128 $1, %ymm1, %xmm2
93 ; ALL-NEXT:    vpextrw $1, %xmm2, %eax
94 ; ALL-NEXT:    lzcntw %ax, %ax
95 ; ALL-NEXT:    vmovd %xmm2, %ecx
96 ; ALL-NEXT:    lzcntw %cx, %cx
97 ; ALL-NEXT:    vmovd %ecx, %xmm3
98 ; ALL-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
99 ; ALL-NEXT:    vpextrw $2, %xmm2, %eax
100 ; ALL-NEXT:    lzcntw %ax, %ax
101 ; ALL-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
102 ; ALL-NEXT:    vpextrw $3, %xmm2, %eax
103 ; ALL-NEXT:    lzcntw %ax, %ax
104 ; ALL-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
105 ; ALL-NEXT:    vpextrw $4, %xmm2, %eax
106 ; ALL-NEXT:    lzcntw %ax, %ax
107 ; ALL-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
108 ; ALL-NEXT:    vpextrw $5, %xmm2, %eax
109 ; ALL-NEXT:    lzcntw %ax, %ax
110 ; ALL-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
111 ; ALL-NEXT:    vpextrw $6, %xmm2, %eax
112 ; ALL-NEXT:    lzcntw %ax, %ax
113 ; ALL-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
114 ; ALL-NEXT:    vpextrw $7, %xmm2, %eax
115 ; ALL-NEXT:    lzcntw %ax, %ax
116 ; ALL-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm2
117 ; ALL-NEXT:    vpextrw $1, %xmm1, %eax
118 ; ALL-NEXT:    lzcntw %ax, %ax
119 ; ALL-NEXT:    vmovd %xmm1, %ecx
120 ; ALL-NEXT:    lzcntw %cx, %cx
121 ; ALL-NEXT:    vmovd %ecx, %xmm3
122 ; ALL-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
123 ; ALL-NEXT:    vpextrw $2, %xmm1, %eax
124 ; ALL-NEXT:    lzcntw %ax, %ax
125 ; ALL-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
126 ; ALL-NEXT:    vpextrw $3, %xmm1, %eax
127 ; ALL-NEXT:    lzcntw %ax, %ax
128 ; ALL-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
129 ; ALL-NEXT:    vpextrw $4, %xmm1, %eax
130 ; ALL-NEXT:    lzcntw %ax, %ax
131 ; ALL-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
132 ; ALL-NEXT:    vpextrw $5, %xmm1, %eax
133 ; ALL-NEXT:    lzcntw %ax, %ax
134 ; ALL-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
135 ; ALL-NEXT:    vpextrw $6, %xmm1, %eax
136 ; ALL-NEXT:    lzcntw %ax, %ax
137 ; ALL-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
138 ; ALL-NEXT:    vpextrw $7, %xmm1, %eax
139 ; ALL-NEXT:    lzcntw %ax, %ax
140 ; ALL-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm1
141 ; ALL-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
142 ; ALL-NEXT:    retq
143   %out = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %in, i1 0)
144   ret <32 x i16> %out
145 }
146
147 define <32 x i16> @testv32i16u(<32 x i16> %in) nounwind {
148 ; ALL-LABEL: testv32i16u:
149 ; ALL:       ## BB#0:
150 ; ALL-NEXT:    vextracti128 $1, %ymm0, %xmm2
151 ; ALL-NEXT:    vpextrw $1, %xmm2, %eax
152 ; ALL-NEXT:    lzcntw %ax, %ax
153 ; ALL-NEXT:    vmovd %xmm2, %ecx
154 ; ALL-NEXT:    lzcntw %cx, %cx
155 ; ALL-NEXT:    vmovd %ecx, %xmm3
156 ; ALL-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
157 ; ALL-NEXT:    vpextrw $2, %xmm2, %eax
158 ; ALL-NEXT:    lzcntw %ax, %ax
159 ; ALL-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
160 ; ALL-NEXT:    vpextrw $3, %xmm2, %eax
161 ; ALL-NEXT:    lzcntw %ax, %ax
162 ; ALL-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
163 ; ALL-NEXT:    vpextrw $4, %xmm2, %eax
164 ; ALL-NEXT:    lzcntw %ax, %ax
165 ; ALL-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
166 ; ALL-NEXT:    vpextrw $5, %xmm2, %eax
167 ; ALL-NEXT:    lzcntw %ax, %ax
168 ; ALL-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
169 ; ALL-NEXT:    vpextrw $6, %xmm2, %eax
170 ; ALL-NEXT:    lzcntw %ax, %ax
171 ; ALL-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
172 ; ALL-NEXT:    vpextrw $7, %xmm2, %eax
173 ; ALL-NEXT:    lzcntw %ax, %ax
174 ; ALL-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm2
175 ; ALL-NEXT:    vpextrw $1, %xmm0, %eax
176 ; ALL-NEXT:    lzcntw %ax, %ax
177 ; ALL-NEXT:    vmovd %xmm0, %ecx
178 ; ALL-NEXT:    lzcntw %cx, %cx
179 ; ALL-NEXT:    vmovd %ecx, %xmm3
180 ; ALL-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
181 ; ALL-NEXT:    vpextrw $2, %xmm0, %eax
182 ; ALL-NEXT:    lzcntw %ax, %ax
183 ; ALL-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
184 ; ALL-NEXT:    vpextrw $3, %xmm0, %eax
185 ; ALL-NEXT:    lzcntw %ax, %ax
186 ; ALL-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
187 ; ALL-NEXT:    vpextrw $4, %xmm0, %eax
188 ; ALL-NEXT:    lzcntw %ax, %ax
189 ; ALL-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
190 ; ALL-NEXT:    vpextrw $5, %xmm0, %eax
191 ; ALL-NEXT:    lzcntw %ax, %ax
192 ; ALL-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
193 ; ALL-NEXT:    vpextrw $6, %xmm0, %eax
194 ; ALL-NEXT:    lzcntw %ax, %ax
195 ; ALL-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
196 ; ALL-NEXT:    vpextrw $7, %xmm0, %eax
197 ; ALL-NEXT:    lzcntw %ax, %ax
198 ; ALL-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm0
199 ; ALL-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
200 ; ALL-NEXT:    vextracti128 $1, %ymm1, %xmm2
201 ; ALL-NEXT:    vpextrw $1, %xmm2, %eax
202 ; ALL-NEXT:    lzcntw %ax, %ax
203 ; ALL-NEXT:    vmovd %xmm2, %ecx
204 ; ALL-NEXT:    lzcntw %cx, %cx
205 ; ALL-NEXT:    vmovd %ecx, %xmm3
206 ; ALL-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
207 ; ALL-NEXT:    vpextrw $2, %xmm2, %eax
208 ; ALL-NEXT:    lzcntw %ax, %ax
209 ; ALL-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
210 ; ALL-NEXT:    vpextrw $3, %xmm2, %eax
211 ; ALL-NEXT:    lzcntw %ax, %ax
212 ; ALL-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
213 ; ALL-NEXT:    vpextrw $4, %xmm2, %eax
214 ; ALL-NEXT:    lzcntw %ax, %ax
215 ; ALL-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
216 ; ALL-NEXT:    vpextrw $5, %xmm2, %eax
217 ; ALL-NEXT:    lzcntw %ax, %ax
218 ; ALL-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
219 ; ALL-NEXT:    vpextrw $6, %xmm2, %eax
220 ; ALL-NEXT:    lzcntw %ax, %ax
221 ; ALL-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
222 ; ALL-NEXT:    vpextrw $7, %xmm2, %eax
223 ; ALL-NEXT:    lzcntw %ax, %ax
224 ; ALL-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm2
225 ; ALL-NEXT:    vpextrw $1, %xmm1, %eax
226 ; ALL-NEXT:    lzcntw %ax, %ax
227 ; ALL-NEXT:    vmovd %xmm1, %ecx
228 ; ALL-NEXT:    lzcntw %cx, %cx
229 ; ALL-NEXT:    vmovd %ecx, %xmm3
230 ; ALL-NEXT:    vpinsrw $1, %eax, %xmm3, %xmm3
231 ; ALL-NEXT:    vpextrw $2, %xmm1, %eax
232 ; ALL-NEXT:    lzcntw %ax, %ax
233 ; ALL-NEXT:    vpinsrw $2, %eax, %xmm3, %xmm3
234 ; ALL-NEXT:    vpextrw $3, %xmm1, %eax
235 ; ALL-NEXT:    lzcntw %ax, %ax
236 ; ALL-NEXT:    vpinsrw $3, %eax, %xmm3, %xmm3
237 ; ALL-NEXT:    vpextrw $4, %xmm1, %eax
238 ; ALL-NEXT:    lzcntw %ax, %ax
239 ; ALL-NEXT:    vpinsrw $4, %eax, %xmm3, %xmm3
240 ; ALL-NEXT:    vpextrw $5, %xmm1, %eax
241 ; ALL-NEXT:    lzcntw %ax, %ax
242 ; ALL-NEXT:    vpinsrw $5, %eax, %xmm3, %xmm3
243 ; ALL-NEXT:    vpextrw $6, %xmm1, %eax
244 ; ALL-NEXT:    lzcntw %ax, %ax
245 ; ALL-NEXT:    vpinsrw $6, %eax, %xmm3, %xmm3
246 ; ALL-NEXT:    vpextrw $7, %xmm1, %eax
247 ; ALL-NEXT:    lzcntw %ax, %ax
248 ; ALL-NEXT:    vpinsrw $7, %eax, %xmm3, %xmm1
249 ; ALL-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
250 ; ALL-NEXT:    retq
251   %out = call <32 x i16> @llvm.ctlz.v32i16(<32 x i16> %in, i1 -1)
252   ret <32 x i16> %out
253 }
254
255 define <64 x i8> @testv64i8(<64 x i8> %in) nounwind {
256 ; ALL-LABEL: testv64i8:
257 ; ALL:       ## BB#0:
258 ; ALL-NEXT:    vextracti128 $1, %ymm0, %xmm2
259 ; ALL-NEXT:    vpextrb $1, %xmm2, %eax
260 ; ALL-NEXT:    lzcntl %eax, %eax
261 ; ALL-NEXT:    addl $-24, %eax
262 ; ALL-NEXT:    vpextrb $0, %xmm2, %ecx
263 ; ALL-NEXT:    lzcntl %ecx, %ecx
264 ; ALL-NEXT:    addl $-24, %ecx
265 ; ALL-NEXT:    vmovd %ecx, %xmm3
266 ; ALL-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
267 ; ALL-NEXT:    vpextrb $2, %xmm2, %eax
268 ; ALL-NEXT:    lzcntl %eax, %eax
269 ; ALL-NEXT:    addl $-24, %eax
270 ; ALL-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
271 ; ALL-NEXT:    vpextrb $3, %xmm2, %eax
272 ; ALL-NEXT:    lzcntl %eax, %eax
273 ; ALL-NEXT:    addl $-24, %eax
274 ; ALL-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
275 ; ALL-NEXT:    vpextrb $4, %xmm2, %eax
276 ; ALL-NEXT:    lzcntl %eax, %eax
277 ; ALL-NEXT:    addl $-24, %eax
278 ; ALL-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
279 ; ALL-NEXT:    vpextrb $5, %xmm2, %eax
280 ; ALL-NEXT:    lzcntl %eax, %eax
281 ; ALL-NEXT:    addl $-24, %eax
282 ; ALL-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
283 ; ALL-NEXT:    vpextrb $6, %xmm2, %eax
284 ; ALL-NEXT:    lzcntl %eax, %eax
285 ; ALL-NEXT:    addl $-24, %eax
286 ; ALL-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
287 ; ALL-NEXT:    vpextrb $7, %xmm2, %eax
288 ; ALL-NEXT:    lzcntl %eax, %eax
289 ; ALL-NEXT:    addl $-24, %eax
290 ; ALL-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
291 ; ALL-NEXT:    vpextrb $8, %xmm2, %eax
292 ; ALL-NEXT:    lzcntl %eax, %eax
293 ; ALL-NEXT:    addl $-24, %eax
294 ; ALL-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
295 ; ALL-NEXT:    vpextrb $9, %xmm2, %eax
296 ; ALL-NEXT:    lzcntl %eax, %eax
297 ; ALL-NEXT:    addl $-24, %eax
298 ; ALL-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
299 ; ALL-NEXT:    vpextrb $10, %xmm2, %eax
300 ; ALL-NEXT:    lzcntl %eax, %eax
301 ; ALL-NEXT:    addl $-24, %eax
302 ; ALL-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
303 ; ALL-NEXT:    vpextrb $11, %xmm2, %eax
304 ; ALL-NEXT:    lzcntl %eax, %eax
305 ; ALL-NEXT:    addl $-24, %eax
306 ; ALL-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
307 ; ALL-NEXT:    vpextrb $12, %xmm2, %eax
308 ; ALL-NEXT:    lzcntl %eax, %eax
309 ; ALL-NEXT:    addl $-24, %eax
310 ; ALL-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
311 ; ALL-NEXT:    vpextrb $13, %xmm2, %eax
312 ; ALL-NEXT:    lzcntl %eax, %eax
313 ; ALL-NEXT:    addl $-24, %eax
314 ; ALL-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
315 ; ALL-NEXT:    vpextrb $14, %xmm2, %eax
316 ; ALL-NEXT:    lzcntl %eax, %eax
317 ; ALL-NEXT:    addl $-24, %eax
318 ; ALL-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
319 ; ALL-NEXT:    vpextrb $15, %xmm2, %eax
320 ; ALL-NEXT:    lzcntl %eax, %eax
321 ; ALL-NEXT:    addl $-24, %eax
322 ; ALL-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm2
323 ; ALL-NEXT:    vpextrb $1, %xmm0, %eax
324 ; ALL-NEXT:    lzcntl %eax, %eax
325 ; ALL-NEXT:    addl $-24, %eax
326 ; ALL-NEXT:    vpextrb $0, %xmm0, %ecx
327 ; ALL-NEXT:    lzcntl %ecx, %ecx
328 ; ALL-NEXT:    addl $-24, %ecx
329 ; ALL-NEXT:    vmovd %ecx, %xmm3
330 ; ALL-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
331 ; ALL-NEXT:    vpextrb $2, %xmm0, %eax
332 ; ALL-NEXT:    lzcntl %eax, %eax
333 ; ALL-NEXT:    addl $-24, %eax
334 ; ALL-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
335 ; ALL-NEXT:    vpextrb $3, %xmm0, %eax
336 ; ALL-NEXT:    lzcntl %eax, %eax
337 ; ALL-NEXT:    addl $-24, %eax
338 ; ALL-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
339 ; ALL-NEXT:    vpextrb $4, %xmm0, %eax
340 ; ALL-NEXT:    lzcntl %eax, %eax
341 ; ALL-NEXT:    addl $-24, %eax
342 ; ALL-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
343 ; ALL-NEXT:    vpextrb $5, %xmm0, %eax
344 ; ALL-NEXT:    lzcntl %eax, %eax
345 ; ALL-NEXT:    addl $-24, %eax
346 ; ALL-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
347 ; ALL-NEXT:    vpextrb $6, %xmm0, %eax
348 ; ALL-NEXT:    lzcntl %eax, %eax
349 ; ALL-NEXT:    addl $-24, %eax
350 ; ALL-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
351 ; ALL-NEXT:    vpextrb $7, %xmm0, %eax
352 ; ALL-NEXT:    lzcntl %eax, %eax
353 ; ALL-NEXT:    addl $-24, %eax
354 ; ALL-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
355 ; ALL-NEXT:    vpextrb $8, %xmm0, %eax
356 ; ALL-NEXT:    lzcntl %eax, %eax
357 ; ALL-NEXT:    addl $-24, %eax
358 ; ALL-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
359 ; ALL-NEXT:    vpextrb $9, %xmm0, %eax
360 ; ALL-NEXT:    lzcntl %eax, %eax
361 ; ALL-NEXT:    addl $-24, %eax
362 ; ALL-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
363 ; ALL-NEXT:    vpextrb $10, %xmm0, %eax
364 ; ALL-NEXT:    lzcntl %eax, %eax
365 ; ALL-NEXT:    addl $-24, %eax
366 ; ALL-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
367 ; ALL-NEXT:    vpextrb $11, %xmm0, %eax
368 ; ALL-NEXT:    lzcntl %eax, %eax
369 ; ALL-NEXT:    addl $-24, %eax
370 ; ALL-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
371 ; ALL-NEXT:    vpextrb $12, %xmm0, %eax
372 ; ALL-NEXT:    lzcntl %eax, %eax
373 ; ALL-NEXT:    addl $-24, %eax
374 ; ALL-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
375 ; ALL-NEXT:    vpextrb $13, %xmm0, %eax
376 ; ALL-NEXT:    lzcntl %eax, %eax
377 ; ALL-NEXT:    addl $-24, %eax
378 ; ALL-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
379 ; ALL-NEXT:    vpextrb $14, %xmm0, %eax
380 ; ALL-NEXT:    lzcntl %eax, %eax
381 ; ALL-NEXT:    addl $-24, %eax
382 ; ALL-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
383 ; ALL-NEXT:    vpextrb $15, %xmm0, %eax
384 ; ALL-NEXT:    lzcntl %eax, %eax
385 ; ALL-NEXT:    addl $-24, %eax
386 ; ALL-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm0
387 ; ALL-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
388 ; ALL-NEXT:    vextracti128 $1, %ymm1, %xmm2
389 ; ALL-NEXT:    vpextrb $1, %xmm2, %eax
390 ; ALL-NEXT:    lzcntl %eax, %eax
391 ; ALL-NEXT:    addl $-24, %eax
392 ; ALL-NEXT:    vpextrb $0, %xmm2, %ecx
393 ; ALL-NEXT:    lzcntl %ecx, %ecx
394 ; ALL-NEXT:    addl $-24, %ecx
395 ; ALL-NEXT:    vmovd %ecx, %xmm3
396 ; ALL-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
397 ; ALL-NEXT:    vpextrb $2, %xmm2, %eax
398 ; ALL-NEXT:    lzcntl %eax, %eax
399 ; ALL-NEXT:    addl $-24, %eax
400 ; ALL-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
401 ; ALL-NEXT:    vpextrb $3, %xmm2, %eax
402 ; ALL-NEXT:    lzcntl %eax, %eax
403 ; ALL-NEXT:    addl $-24, %eax
404 ; ALL-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
405 ; ALL-NEXT:    vpextrb $4, %xmm2, %eax
406 ; ALL-NEXT:    lzcntl %eax, %eax
407 ; ALL-NEXT:    addl $-24, %eax
408 ; ALL-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
409 ; ALL-NEXT:    vpextrb $5, %xmm2, %eax
410 ; ALL-NEXT:    lzcntl %eax, %eax
411 ; ALL-NEXT:    addl $-24, %eax
412 ; ALL-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
413 ; ALL-NEXT:    vpextrb $6, %xmm2, %eax
414 ; ALL-NEXT:    lzcntl %eax, %eax
415 ; ALL-NEXT:    addl $-24, %eax
416 ; ALL-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
417 ; ALL-NEXT:    vpextrb $7, %xmm2, %eax
418 ; ALL-NEXT:    lzcntl %eax, %eax
419 ; ALL-NEXT:    addl $-24, %eax
420 ; ALL-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
421 ; ALL-NEXT:    vpextrb $8, %xmm2, %eax
422 ; ALL-NEXT:    lzcntl %eax, %eax
423 ; ALL-NEXT:    addl $-24, %eax
424 ; ALL-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
425 ; ALL-NEXT:    vpextrb $9, %xmm2, %eax
426 ; ALL-NEXT:    lzcntl %eax, %eax
427 ; ALL-NEXT:    addl $-24, %eax
428 ; ALL-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
429 ; ALL-NEXT:    vpextrb $10, %xmm2, %eax
430 ; ALL-NEXT:    lzcntl %eax, %eax
431 ; ALL-NEXT:    addl $-24, %eax
432 ; ALL-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
433 ; ALL-NEXT:    vpextrb $11, %xmm2, %eax
434 ; ALL-NEXT:    lzcntl %eax, %eax
435 ; ALL-NEXT:    addl $-24, %eax
436 ; ALL-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
437 ; ALL-NEXT:    vpextrb $12, %xmm2, %eax
438 ; ALL-NEXT:    lzcntl %eax, %eax
439 ; ALL-NEXT:    addl $-24, %eax
440 ; ALL-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
441 ; ALL-NEXT:    vpextrb $13, %xmm2, %eax
442 ; ALL-NEXT:    lzcntl %eax, %eax
443 ; ALL-NEXT:    addl $-24, %eax
444 ; ALL-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
445 ; ALL-NEXT:    vpextrb $14, %xmm2, %eax
446 ; ALL-NEXT:    lzcntl %eax, %eax
447 ; ALL-NEXT:    addl $-24, %eax
448 ; ALL-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
449 ; ALL-NEXT:    vpextrb $15, %xmm2, %eax
450 ; ALL-NEXT:    lzcntl %eax, %eax
451 ; ALL-NEXT:    addl $-24, %eax
452 ; ALL-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm2
453 ; ALL-NEXT:    vpextrb $1, %xmm1, %eax
454 ; ALL-NEXT:    lzcntl %eax, %eax
455 ; ALL-NEXT:    addl $-24, %eax
456 ; ALL-NEXT:    vpextrb $0, %xmm1, %ecx
457 ; ALL-NEXT:    lzcntl %ecx, %ecx
458 ; ALL-NEXT:    addl $-24, %ecx
459 ; ALL-NEXT:    vmovd %ecx, %xmm3
460 ; ALL-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
461 ; ALL-NEXT:    vpextrb $2, %xmm1, %eax
462 ; ALL-NEXT:    lzcntl %eax, %eax
463 ; ALL-NEXT:    addl $-24, %eax
464 ; ALL-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
465 ; ALL-NEXT:    vpextrb $3, %xmm1, %eax
466 ; ALL-NEXT:    lzcntl %eax, %eax
467 ; ALL-NEXT:    addl $-24, %eax
468 ; ALL-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
469 ; ALL-NEXT:    vpextrb $4, %xmm1, %eax
470 ; ALL-NEXT:    lzcntl %eax, %eax
471 ; ALL-NEXT:    addl $-24, %eax
472 ; ALL-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
473 ; ALL-NEXT:    vpextrb $5, %xmm1, %eax
474 ; ALL-NEXT:    lzcntl %eax, %eax
475 ; ALL-NEXT:    addl $-24, %eax
476 ; ALL-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
477 ; ALL-NEXT:    vpextrb $6, %xmm1, %eax
478 ; ALL-NEXT:    lzcntl %eax, %eax
479 ; ALL-NEXT:    addl $-24, %eax
480 ; ALL-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
481 ; ALL-NEXT:    vpextrb $7, %xmm1, %eax
482 ; ALL-NEXT:    lzcntl %eax, %eax
483 ; ALL-NEXT:    addl $-24, %eax
484 ; ALL-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
485 ; ALL-NEXT:    vpextrb $8, %xmm1, %eax
486 ; ALL-NEXT:    lzcntl %eax, %eax
487 ; ALL-NEXT:    addl $-24, %eax
488 ; ALL-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
489 ; ALL-NEXT:    vpextrb $9, %xmm1, %eax
490 ; ALL-NEXT:    lzcntl %eax, %eax
491 ; ALL-NEXT:    addl $-24, %eax
492 ; ALL-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
493 ; ALL-NEXT:    vpextrb $10, %xmm1, %eax
494 ; ALL-NEXT:    lzcntl %eax, %eax
495 ; ALL-NEXT:    addl $-24, %eax
496 ; ALL-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
497 ; ALL-NEXT:    vpextrb $11, %xmm1, %eax
498 ; ALL-NEXT:    lzcntl %eax, %eax
499 ; ALL-NEXT:    addl $-24, %eax
500 ; ALL-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
501 ; ALL-NEXT:    vpextrb $12, %xmm1, %eax
502 ; ALL-NEXT:    lzcntl %eax, %eax
503 ; ALL-NEXT:    addl $-24, %eax
504 ; ALL-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
505 ; ALL-NEXT:    vpextrb $13, %xmm1, %eax
506 ; ALL-NEXT:    lzcntl %eax, %eax
507 ; ALL-NEXT:    addl $-24, %eax
508 ; ALL-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
509 ; ALL-NEXT:    vpextrb $14, %xmm1, %eax
510 ; ALL-NEXT:    lzcntl %eax, %eax
511 ; ALL-NEXT:    addl $-24, %eax
512 ; ALL-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
513 ; ALL-NEXT:    vpextrb $15, %xmm1, %eax
514 ; ALL-NEXT:    lzcntl %eax, %eax
515 ; ALL-NEXT:    addl $-24, %eax
516 ; ALL-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm1
517 ; ALL-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
518 ; ALL-NEXT:    retq
519   %out = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %in, i1 0)
520   ret <64 x i8> %out
521 }
522
523 define <64 x i8> @testv64i8u(<64 x i8> %in) nounwind {
524 ; ALL-LABEL: testv64i8u:
525 ; ALL:       ## BB#0:
526 ; ALL-NEXT:    vextracti128 $1, %ymm0, %xmm2
527 ; ALL-NEXT:    vpextrb $1, %xmm2, %eax
528 ; ALL-NEXT:    lzcntl %eax, %eax
529 ; ALL-NEXT:    addl $-24, %eax
530 ; ALL-NEXT:    vpextrb $0, %xmm2, %ecx
531 ; ALL-NEXT:    lzcntl %ecx, %ecx
532 ; ALL-NEXT:    addl $-24, %ecx
533 ; ALL-NEXT:    vmovd %ecx, %xmm3
534 ; ALL-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
535 ; ALL-NEXT:    vpextrb $2, %xmm2, %eax
536 ; ALL-NEXT:    lzcntl %eax, %eax
537 ; ALL-NEXT:    addl $-24, %eax
538 ; ALL-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
539 ; ALL-NEXT:    vpextrb $3, %xmm2, %eax
540 ; ALL-NEXT:    lzcntl %eax, %eax
541 ; ALL-NEXT:    addl $-24, %eax
542 ; ALL-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
543 ; ALL-NEXT:    vpextrb $4, %xmm2, %eax
544 ; ALL-NEXT:    lzcntl %eax, %eax
545 ; ALL-NEXT:    addl $-24, %eax
546 ; ALL-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
547 ; ALL-NEXT:    vpextrb $5, %xmm2, %eax
548 ; ALL-NEXT:    lzcntl %eax, %eax
549 ; ALL-NEXT:    addl $-24, %eax
550 ; ALL-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
551 ; ALL-NEXT:    vpextrb $6, %xmm2, %eax
552 ; ALL-NEXT:    lzcntl %eax, %eax
553 ; ALL-NEXT:    addl $-24, %eax
554 ; ALL-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
555 ; ALL-NEXT:    vpextrb $7, %xmm2, %eax
556 ; ALL-NEXT:    lzcntl %eax, %eax
557 ; ALL-NEXT:    addl $-24, %eax
558 ; ALL-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
559 ; ALL-NEXT:    vpextrb $8, %xmm2, %eax
560 ; ALL-NEXT:    lzcntl %eax, %eax
561 ; ALL-NEXT:    addl $-24, %eax
562 ; ALL-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
563 ; ALL-NEXT:    vpextrb $9, %xmm2, %eax
564 ; ALL-NEXT:    lzcntl %eax, %eax
565 ; ALL-NEXT:    addl $-24, %eax
566 ; ALL-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
567 ; ALL-NEXT:    vpextrb $10, %xmm2, %eax
568 ; ALL-NEXT:    lzcntl %eax, %eax
569 ; ALL-NEXT:    addl $-24, %eax
570 ; ALL-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
571 ; ALL-NEXT:    vpextrb $11, %xmm2, %eax
572 ; ALL-NEXT:    lzcntl %eax, %eax
573 ; ALL-NEXT:    addl $-24, %eax
574 ; ALL-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
575 ; ALL-NEXT:    vpextrb $12, %xmm2, %eax
576 ; ALL-NEXT:    lzcntl %eax, %eax
577 ; ALL-NEXT:    addl $-24, %eax
578 ; ALL-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
579 ; ALL-NEXT:    vpextrb $13, %xmm2, %eax
580 ; ALL-NEXT:    lzcntl %eax, %eax
581 ; ALL-NEXT:    addl $-24, %eax
582 ; ALL-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
583 ; ALL-NEXT:    vpextrb $14, %xmm2, %eax
584 ; ALL-NEXT:    lzcntl %eax, %eax
585 ; ALL-NEXT:    addl $-24, %eax
586 ; ALL-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
587 ; ALL-NEXT:    vpextrb $15, %xmm2, %eax
588 ; ALL-NEXT:    lzcntl %eax, %eax
589 ; ALL-NEXT:    addl $-24, %eax
590 ; ALL-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm2
591 ; ALL-NEXT:    vpextrb $1, %xmm0, %eax
592 ; ALL-NEXT:    lzcntl %eax, %eax
593 ; ALL-NEXT:    addl $-24, %eax
594 ; ALL-NEXT:    vpextrb $0, %xmm0, %ecx
595 ; ALL-NEXT:    lzcntl %ecx, %ecx
596 ; ALL-NEXT:    addl $-24, %ecx
597 ; ALL-NEXT:    vmovd %ecx, %xmm3
598 ; ALL-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
599 ; ALL-NEXT:    vpextrb $2, %xmm0, %eax
600 ; ALL-NEXT:    lzcntl %eax, %eax
601 ; ALL-NEXT:    addl $-24, %eax
602 ; ALL-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
603 ; ALL-NEXT:    vpextrb $3, %xmm0, %eax
604 ; ALL-NEXT:    lzcntl %eax, %eax
605 ; ALL-NEXT:    addl $-24, %eax
606 ; ALL-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
607 ; ALL-NEXT:    vpextrb $4, %xmm0, %eax
608 ; ALL-NEXT:    lzcntl %eax, %eax
609 ; ALL-NEXT:    addl $-24, %eax
610 ; ALL-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
611 ; ALL-NEXT:    vpextrb $5, %xmm0, %eax
612 ; ALL-NEXT:    lzcntl %eax, %eax
613 ; ALL-NEXT:    addl $-24, %eax
614 ; ALL-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
615 ; ALL-NEXT:    vpextrb $6, %xmm0, %eax
616 ; ALL-NEXT:    lzcntl %eax, %eax
617 ; ALL-NEXT:    addl $-24, %eax
618 ; ALL-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
619 ; ALL-NEXT:    vpextrb $7, %xmm0, %eax
620 ; ALL-NEXT:    lzcntl %eax, %eax
621 ; ALL-NEXT:    addl $-24, %eax
622 ; ALL-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
623 ; ALL-NEXT:    vpextrb $8, %xmm0, %eax
624 ; ALL-NEXT:    lzcntl %eax, %eax
625 ; ALL-NEXT:    addl $-24, %eax
626 ; ALL-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
627 ; ALL-NEXT:    vpextrb $9, %xmm0, %eax
628 ; ALL-NEXT:    lzcntl %eax, %eax
629 ; ALL-NEXT:    addl $-24, %eax
630 ; ALL-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
631 ; ALL-NEXT:    vpextrb $10, %xmm0, %eax
632 ; ALL-NEXT:    lzcntl %eax, %eax
633 ; ALL-NEXT:    addl $-24, %eax
634 ; ALL-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
635 ; ALL-NEXT:    vpextrb $11, %xmm0, %eax
636 ; ALL-NEXT:    lzcntl %eax, %eax
637 ; ALL-NEXT:    addl $-24, %eax
638 ; ALL-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
639 ; ALL-NEXT:    vpextrb $12, %xmm0, %eax
640 ; ALL-NEXT:    lzcntl %eax, %eax
641 ; ALL-NEXT:    addl $-24, %eax
642 ; ALL-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
643 ; ALL-NEXT:    vpextrb $13, %xmm0, %eax
644 ; ALL-NEXT:    lzcntl %eax, %eax
645 ; ALL-NEXT:    addl $-24, %eax
646 ; ALL-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
647 ; ALL-NEXT:    vpextrb $14, %xmm0, %eax
648 ; ALL-NEXT:    lzcntl %eax, %eax
649 ; ALL-NEXT:    addl $-24, %eax
650 ; ALL-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
651 ; ALL-NEXT:    vpextrb $15, %xmm0, %eax
652 ; ALL-NEXT:    lzcntl %eax, %eax
653 ; ALL-NEXT:    addl $-24, %eax
654 ; ALL-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm0
655 ; ALL-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
656 ; ALL-NEXT:    vextracti128 $1, %ymm1, %xmm2
657 ; ALL-NEXT:    vpextrb $1, %xmm2, %eax
658 ; ALL-NEXT:    lzcntl %eax, %eax
659 ; ALL-NEXT:    addl $-24, %eax
660 ; ALL-NEXT:    vpextrb $0, %xmm2, %ecx
661 ; ALL-NEXT:    lzcntl %ecx, %ecx
662 ; ALL-NEXT:    addl $-24, %ecx
663 ; ALL-NEXT:    vmovd %ecx, %xmm3
664 ; ALL-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
665 ; ALL-NEXT:    vpextrb $2, %xmm2, %eax
666 ; ALL-NEXT:    lzcntl %eax, %eax
667 ; ALL-NEXT:    addl $-24, %eax
668 ; ALL-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
669 ; ALL-NEXT:    vpextrb $3, %xmm2, %eax
670 ; ALL-NEXT:    lzcntl %eax, %eax
671 ; ALL-NEXT:    addl $-24, %eax
672 ; ALL-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
673 ; ALL-NEXT:    vpextrb $4, %xmm2, %eax
674 ; ALL-NEXT:    lzcntl %eax, %eax
675 ; ALL-NEXT:    addl $-24, %eax
676 ; ALL-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
677 ; ALL-NEXT:    vpextrb $5, %xmm2, %eax
678 ; ALL-NEXT:    lzcntl %eax, %eax
679 ; ALL-NEXT:    addl $-24, %eax
680 ; ALL-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
681 ; ALL-NEXT:    vpextrb $6, %xmm2, %eax
682 ; ALL-NEXT:    lzcntl %eax, %eax
683 ; ALL-NEXT:    addl $-24, %eax
684 ; ALL-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
685 ; ALL-NEXT:    vpextrb $7, %xmm2, %eax
686 ; ALL-NEXT:    lzcntl %eax, %eax
687 ; ALL-NEXT:    addl $-24, %eax
688 ; ALL-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
689 ; ALL-NEXT:    vpextrb $8, %xmm2, %eax
690 ; ALL-NEXT:    lzcntl %eax, %eax
691 ; ALL-NEXT:    addl $-24, %eax
692 ; ALL-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
693 ; ALL-NEXT:    vpextrb $9, %xmm2, %eax
694 ; ALL-NEXT:    lzcntl %eax, %eax
695 ; ALL-NEXT:    addl $-24, %eax
696 ; ALL-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
697 ; ALL-NEXT:    vpextrb $10, %xmm2, %eax
698 ; ALL-NEXT:    lzcntl %eax, %eax
699 ; ALL-NEXT:    addl $-24, %eax
700 ; ALL-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
701 ; ALL-NEXT:    vpextrb $11, %xmm2, %eax
702 ; ALL-NEXT:    lzcntl %eax, %eax
703 ; ALL-NEXT:    addl $-24, %eax
704 ; ALL-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
705 ; ALL-NEXT:    vpextrb $12, %xmm2, %eax
706 ; ALL-NEXT:    lzcntl %eax, %eax
707 ; ALL-NEXT:    addl $-24, %eax
708 ; ALL-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
709 ; ALL-NEXT:    vpextrb $13, %xmm2, %eax
710 ; ALL-NEXT:    lzcntl %eax, %eax
711 ; ALL-NEXT:    addl $-24, %eax
712 ; ALL-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
713 ; ALL-NEXT:    vpextrb $14, %xmm2, %eax
714 ; ALL-NEXT:    lzcntl %eax, %eax
715 ; ALL-NEXT:    addl $-24, %eax
716 ; ALL-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
717 ; ALL-NEXT:    vpextrb $15, %xmm2, %eax
718 ; ALL-NEXT:    lzcntl %eax, %eax
719 ; ALL-NEXT:    addl $-24, %eax
720 ; ALL-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm2
721 ; ALL-NEXT:    vpextrb $1, %xmm1, %eax
722 ; ALL-NEXT:    lzcntl %eax, %eax
723 ; ALL-NEXT:    addl $-24, %eax
724 ; ALL-NEXT:    vpextrb $0, %xmm1, %ecx
725 ; ALL-NEXT:    lzcntl %ecx, %ecx
726 ; ALL-NEXT:    addl $-24, %ecx
727 ; ALL-NEXT:    vmovd %ecx, %xmm3
728 ; ALL-NEXT:    vpinsrb $1, %eax, %xmm3, %xmm3
729 ; ALL-NEXT:    vpextrb $2, %xmm1, %eax
730 ; ALL-NEXT:    lzcntl %eax, %eax
731 ; ALL-NEXT:    addl $-24, %eax
732 ; ALL-NEXT:    vpinsrb $2, %eax, %xmm3, %xmm3
733 ; ALL-NEXT:    vpextrb $3, %xmm1, %eax
734 ; ALL-NEXT:    lzcntl %eax, %eax
735 ; ALL-NEXT:    addl $-24, %eax
736 ; ALL-NEXT:    vpinsrb $3, %eax, %xmm3, %xmm3
737 ; ALL-NEXT:    vpextrb $4, %xmm1, %eax
738 ; ALL-NEXT:    lzcntl %eax, %eax
739 ; ALL-NEXT:    addl $-24, %eax
740 ; ALL-NEXT:    vpinsrb $4, %eax, %xmm3, %xmm3
741 ; ALL-NEXT:    vpextrb $5, %xmm1, %eax
742 ; ALL-NEXT:    lzcntl %eax, %eax
743 ; ALL-NEXT:    addl $-24, %eax
744 ; ALL-NEXT:    vpinsrb $5, %eax, %xmm3, %xmm3
745 ; ALL-NEXT:    vpextrb $6, %xmm1, %eax
746 ; ALL-NEXT:    lzcntl %eax, %eax
747 ; ALL-NEXT:    addl $-24, %eax
748 ; ALL-NEXT:    vpinsrb $6, %eax, %xmm3, %xmm3
749 ; ALL-NEXT:    vpextrb $7, %xmm1, %eax
750 ; ALL-NEXT:    lzcntl %eax, %eax
751 ; ALL-NEXT:    addl $-24, %eax
752 ; ALL-NEXT:    vpinsrb $7, %eax, %xmm3, %xmm3
753 ; ALL-NEXT:    vpextrb $8, %xmm1, %eax
754 ; ALL-NEXT:    lzcntl %eax, %eax
755 ; ALL-NEXT:    addl $-24, %eax
756 ; ALL-NEXT:    vpinsrb $8, %eax, %xmm3, %xmm3
757 ; ALL-NEXT:    vpextrb $9, %xmm1, %eax
758 ; ALL-NEXT:    lzcntl %eax, %eax
759 ; ALL-NEXT:    addl $-24, %eax
760 ; ALL-NEXT:    vpinsrb $9, %eax, %xmm3, %xmm3
761 ; ALL-NEXT:    vpextrb $10, %xmm1, %eax
762 ; ALL-NEXT:    lzcntl %eax, %eax
763 ; ALL-NEXT:    addl $-24, %eax
764 ; ALL-NEXT:    vpinsrb $10, %eax, %xmm3, %xmm3
765 ; ALL-NEXT:    vpextrb $11, %xmm1, %eax
766 ; ALL-NEXT:    lzcntl %eax, %eax
767 ; ALL-NEXT:    addl $-24, %eax
768 ; ALL-NEXT:    vpinsrb $11, %eax, %xmm3, %xmm3
769 ; ALL-NEXT:    vpextrb $12, %xmm1, %eax
770 ; ALL-NEXT:    lzcntl %eax, %eax
771 ; ALL-NEXT:    addl $-24, %eax
772 ; ALL-NEXT:    vpinsrb $12, %eax, %xmm3, %xmm3
773 ; ALL-NEXT:    vpextrb $13, %xmm1, %eax
774 ; ALL-NEXT:    lzcntl %eax, %eax
775 ; ALL-NEXT:    addl $-24, %eax
776 ; ALL-NEXT:    vpinsrb $13, %eax, %xmm3, %xmm3
777 ; ALL-NEXT:    vpextrb $14, %xmm1, %eax
778 ; ALL-NEXT:    lzcntl %eax, %eax
779 ; ALL-NEXT:    addl $-24, %eax
780 ; ALL-NEXT:    vpinsrb $14, %eax, %xmm3, %xmm3
781 ; ALL-NEXT:    vpextrb $15, %xmm1, %eax
782 ; ALL-NEXT:    lzcntl %eax, %eax
783 ; ALL-NEXT:    addl $-24, %eax
784 ; ALL-NEXT:    vpinsrb $15, %eax, %xmm3, %xmm1
785 ; ALL-NEXT:    vinserti128 $1, %xmm2, %ymm1, %ymm1
786 ; ALL-NEXT:    retq
787   %out = call <64 x i8> @llvm.ctlz.v64i8(<64 x i8> %in, i1 -1)
788   ret <64 x i8> %out
789 }
790
791 declare <8 x i64> @llvm.ctlz.v8i64(<8 x i64>, i1)
792 declare <16 x i32> @llvm.ctlz.v16i32(<16 x i32>, i1)
793 declare <32 x i16> @llvm.ctlz.v32i16(<32 x i16>, i1)
794 declare <64 x i8> @llvm.ctlz.v64i8(<64 x i8>, i1)