[ARM] Adjust how NEON shifts are lowered
[llvm-core.git] / test / CodeGen / X86 / avx512-calling-conv.ll
blob4145fe98c77aa3a0116f12c219393c0ccb418ff8
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin9 -mcpu=knl | FileCheck %s --check-prefix=ALL_X64 --check-prefix=KNL
3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin9 -mcpu=skx | FileCheck %s --check-prefix=ALL_X64 --check-prefix=SKX
4 ; RUN: llc < %s -mtriple=i686-apple-darwin9 -mcpu=knl | FileCheck %s --check-prefix=KNL_X32
6 define <16 x i1> @test1() {
7 ; ALL_X64-LABEL: test1:
8 ; ALL_X64:       ## %bb.0:
9 ; ALL_X64-NEXT:    vxorps %xmm0, %xmm0, %xmm0
10 ; ALL_X64-NEXT:    retq
12 ; KNL_X32-LABEL: test1:
13 ; KNL_X32:       ## %bb.0:
14 ; KNL_X32-NEXT:    vxorps %xmm0, %xmm0, %xmm0
15 ; KNL_X32-NEXT:    retl
16   ret <16 x i1> zeroinitializer
19 define <16 x i1> @test2(<16 x i1>%a, <16 x i1>%b) {
20 ; ALL_X64-LABEL: test2:
21 ; ALL_X64:       ## %bb.0:
22 ; ALL_X64-NEXT:    vandps %xmm1, %xmm0, %xmm0
23 ; ALL_X64-NEXT:    retq
25 ; KNL_X32-LABEL: test2:
26 ; KNL_X32:       ## %bb.0:
27 ; KNL_X32-NEXT:    vandps %xmm1, %xmm0, %xmm0
28 ; KNL_X32-NEXT:    retl
29   %c = and <16 x i1>%a, %b
30   ret <16 x i1> %c
33 define <8 x i1> @test3(<8 x i1>%a, <8 x i1>%b) {
34 ; ALL_X64-LABEL: test3:
35 ; ALL_X64:       ## %bb.0:
36 ; ALL_X64-NEXT:    vandps %xmm1, %xmm0, %xmm0
37 ; ALL_X64-NEXT:    retq
39 ; KNL_X32-LABEL: test3:
40 ; KNL_X32:       ## %bb.0:
41 ; KNL_X32-NEXT:    vandps %xmm1, %xmm0, %xmm0
42 ; KNL_X32-NEXT:    retl
43   %c = and <8 x i1>%a, %b
44   ret <8 x i1> %c
47 define <4 x i1> @test4(<4 x i1>%a, <4 x i1>%b) {
48 ; ALL_X64-LABEL: test4:
49 ; ALL_X64:       ## %bb.0:
50 ; ALL_X64-NEXT:    vandps %xmm1, %xmm0, %xmm0
51 ; ALL_X64-NEXT:    retq
53 ; KNL_X32-LABEL: test4:
54 ; KNL_X32:       ## %bb.0:
55 ; KNL_X32-NEXT:    vandps %xmm1, %xmm0, %xmm0
56 ; KNL_X32-NEXT:    retl
57   %c = and <4 x i1>%a, %b
58   ret <4 x i1> %c
61 declare <8 x i1> @func8xi1(<8 x i1> %a)
63 define <8 x i32> @test5(<8 x i32>%a, <8 x i32>%b) {
64 ; KNL-LABEL: test5:
65 ; KNL:       ## %bb.0:
66 ; KNL-NEXT:    pushq %rax
67 ; KNL-NEXT:    .cfi_def_cfa_offset 16
68 ; KNL-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
69 ; KNL-NEXT:    vpmovdw %zmm0, %ymm0
70 ; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0
71 ; KNL-NEXT:    callq _func8xi1
72 ; KNL-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
73 ; KNL-NEXT:    vpslld $31, %ymm0, %ymm0
74 ; KNL-NEXT:    vpsrad $31, %ymm0, %ymm0
75 ; KNL-NEXT:    popq %rax
76 ; KNL-NEXT:    retq
78 ; SKX-LABEL: test5:
79 ; SKX:       ## %bb.0:
80 ; SKX-NEXT:    pushq %rax
81 ; SKX-NEXT:    .cfi_def_cfa_offset 16
82 ; SKX-NEXT:    vpcmpgtd %ymm1, %ymm0, %k0
83 ; SKX-NEXT:    vpmovm2w %k0, %xmm0
84 ; SKX-NEXT:    vzeroupper
85 ; SKX-NEXT:    callq _func8xi1
86 ; SKX-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
87 ; SKX-NEXT:    vpslld $31, %ymm0, %ymm0
88 ; SKX-NEXT:    vpsrad $31, %ymm0, %ymm0
89 ; SKX-NEXT:    popq %rax
90 ; SKX-NEXT:    retq
92 ; KNL_X32-LABEL: test5:
93 ; KNL_X32:       ## %bb.0:
94 ; KNL_X32-NEXT:    subl $12, %esp
95 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
96 ; KNL_X32-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
97 ; KNL_X32-NEXT:    vpmovdw %zmm0, %ymm0
98 ; KNL_X32-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0
99 ; KNL_X32-NEXT:    calll _func8xi1
100 ; KNL_X32-NEXT:    vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
101 ; KNL_X32-NEXT:    vpslld $31, %ymm0, %ymm0
102 ; KNL_X32-NEXT:    vpsrad $31, %ymm0, %ymm0
103 ; KNL_X32-NEXT:    addl $12, %esp
104 ; KNL_X32-NEXT:    retl
105   %cmpRes = icmp sgt <8 x i32>%a, %b
106   %resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
107   %res = sext <8 x i1>%resi to <8 x i32>
108   ret <8 x i32> %res
111 declare <16 x i1> @func16xi1(<16 x i1> %a)
113 define <16 x i32> @test6(<16 x i32>%a, <16 x i32>%b) {
114 ; KNL-LABEL: test6:
115 ; KNL:       ## %bb.0:
116 ; KNL-NEXT:    pushq %rax
117 ; KNL-NEXT:    .cfi_def_cfa_offset 16
118 ; KNL-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
119 ; KNL-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
120 ; KNL-NEXT:    vpmovdb %zmm0, %xmm0
121 ; KNL-NEXT:    callq _func16xi1
122 ; KNL-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
123 ; KNL-NEXT:    vpslld $31, %zmm0, %zmm0
124 ; KNL-NEXT:    vpsrad $31, %zmm0, %zmm0
125 ; KNL-NEXT:    popq %rax
126 ; KNL-NEXT:    retq
128 ; SKX-LABEL: test6:
129 ; SKX:       ## %bb.0:
130 ; SKX-NEXT:    pushq %rax
131 ; SKX-NEXT:    .cfi_def_cfa_offset 16
132 ; SKX-NEXT:    vpcmpgtd %zmm1, %zmm0, %k0
133 ; SKX-NEXT:    vpmovm2b %k0, %xmm0
134 ; SKX-NEXT:    vzeroupper
135 ; SKX-NEXT:    callq _func16xi1
136 ; SKX-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
137 ; SKX-NEXT:    vpslld $31, %zmm0, %zmm0
138 ; SKX-NEXT:    vpsrad $31, %zmm0, %zmm0
139 ; SKX-NEXT:    popq %rax
140 ; SKX-NEXT:    retq
142 ; KNL_X32-LABEL: test6:
143 ; KNL_X32:       ## %bb.0:
144 ; KNL_X32-NEXT:    subl $12, %esp
145 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
146 ; KNL_X32-NEXT:    vpcmpgtd %zmm1, %zmm0, %k1
147 ; KNL_X32-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
148 ; KNL_X32-NEXT:    vpmovdb %zmm0, %xmm0
149 ; KNL_X32-NEXT:    calll _func16xi1
150 ; KNL_X32-NEXT:    vpmovzxbd {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero,xmm0[8],zero,zero,zero,xmm0[9],zero,zero,zero,xmm0[10],zero,zero,zero,xmm0[11],zero,zero,zero,xmm0[12],zero,zero,zero,xmm0[13],zero,zero,zero,xmm0[14],zero,zero,zero,xmm0[15],zero,zero,zero
151 ; KNL_X32-NEXT:    vpslld $31, %zmm0, %zmm0
152 ; KNL_X32-NEXT:    vpsrad $31, %zmm0, %zmm0
153 ; KNL_X32-NEXT:    addl $12, %esp
154 ; KNL_X32-NEXT:    retl
155   %cmpRes = icmp sgt <16 x i32>%a, %b
156   %resi = call <16 x i1> @func16xi1(<16 x i1> %cmpRes)
157   %res = sext <16 x i1>%resi to <16 x i32>
158   ret <16 x i32> %res
161 declare <4 x i1> @func4xi1(<4 x i1> %a)
163 define <4 x i32> @test7(<4 x i32>%a, <4 x i32>%b) {
164 ; ALL_X64-LABEL: test7:
165 ; ALL_X64:       ## %bb.0:
166 ; ALL_X64-NEXT:    pushq %rax
167 ; ALL_X64-NEXT:    .cfi_def_cfa_offset 16
168 ; ALL_X64-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
169 ; ALL_X64-NEXT:    callq _func4xi1
170 ; ALL_X64-NEXT:    vpslld $31, %xmm0, %xmm0
171 ; ALL_X64-NEXT:    vpsrad $31, %xmm0, %xmm0
172 ; ALL_X64-NEXT:    popq %rax
173 ; ALL_X64-NEXT:    retq
175 ; KNL_X32-LABEL: test7:
176 ; KNL_X32:       ## %bb.0:
177 ; KNL_X32-NEXT:    subl $12, %esp
178 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
179 ; KNL_X32-NEXT:    vpcmpgtd %xmm1, %xmm0, %xmm0
180 ; KNL_X32-NEXT:    calll _func4xi1
181 ; KNL_X32-NEXT:    vpslld $31, %xmm0, %xmm0
182 ; KNL_X32-NEXT:    vpsrad $31, %xmm0, %xmm0
183 ; KNL_X32-NEXT:    addl $12, %esp
184 ; KNL_X32-NEXT:    retl
185   %cmpRes = icmp sgt <4 x i32>%a, %b
186   %resi = call <4 x i1> @func4xi1(<4 x i1> %cmpRes)
187   %res = sext <4 x i1>%resi to <4 x i32>
188   ret <4 x i32> %res
191 define <8 x i1> @test7a(<8 x i32>%a, <8 x i32>%b) {
192 ; KNL-LABEL: test7a:
193 ; KNL:       ## %bb.0:
194 ; KNL-NEXT:    pushq %rax
195 ; KNL-NEXT:    .cfi_def_cfa_offset 16
196 ; KNL-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
197 ; KNL-NEXT:    vpmovdw %zmm0, %ymm0
198 ; KNL-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0
199 ; KNL-NEXT:    callq _func8xi1
200 ; KNL-NEXT:    vandps {{.*}}(%rip), %xmm0, %xmm0
201 ; KNL-NEXT:    popq %rax
202 ; KNL-NEXT:    retq
204 ; SKX-LABEL: test7a:
205 ; SKX:       ## %bb.0:
206 ; SKX-NEXT:    pushq %rax
207 ; SKX-NEXT:    .cfi_def_cfa_offset 16
208 ; SKX-NEXT:    vpcmpgtd %ymm1, %ymm0, %k0
209 ; SKX-NEXT:    vpmovm2w %k0, %xmm0
210 ; SKX-NEXT:    vzeroupper
211 ; SKX-NEXT:    callq _func8xi1
212 ; SKX-NEXT:    vpand {{.*}}(%rip), %xmm0, %xmm0
213 ; SKX-NEXT:    popq %rax
214 ; SKX-NEXT:    retq
216 ; KNL_X32-LABEL: test7a:
217 ; KNL_X32:       ## %bb.0:
218 ; KNL_X32-NEXT:    subl $12, %esp
219 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
220 ; KNL_X32-NEXT:    vpcmpgtd %ymm1, %ymm0, %ymm0
221 ; KNL_X32-NEXT:    vpmovdw %zmm0, %ymm0
222 ; KNL_X32-NEXT:    ## kill: def $xmm0 killed $xmm0 killed $ymm0
223 ; KNL_X32-NEXT:    calll _func8xi1
224 ; KNL_X32-NEXT:    vandps LCPI7_0, %xmm0, %xmm0
225 ; KNL_X32-NEXT:    addl $12, %esp
226 ; KNL_X32-NEXT:    retl
227   %cmpRes = icmp sgt <8 x i32>%a, %b
228   %resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
229   %res = and <8 x i1>%resi,  <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>
230   ret <8 x i1> %res
233 define <16 x i8> @test8(<16 x i8> %a1, <16 x i8> %a2, i1 %cond) {
234 ; ALL_X64-LABEL: test8:
235 ; ALL_X64:       ## %bb.0:
236 ; ALL_X64-NEXT:    testb $1, %dil
237 ; ALL_X64-NEXT:    jne LBB8_2
238 ; ALL_X64-NEXT:  ## %bb.1:
239 ; ALL_X64-NEXT:    vmovaps %xmm1, %xmm0
240 ; ALL_X64-NEXT:  LBB8_2:
241 ; ALL_X64-NEXT:    retq
243 ; KNL_X32-LABEL: test8:
244 ; KNL_X32:       ## %bb.0:
245 ; KNL_X32-NEXT:    testb $1, {{[0-9]+}}(%esp)
246 ; KNL_X32-NEXT:    jne LBB8_2
247 ; KNL_X32-NEXT:  ## %bb.1:
248 ; KNL_X32-NEXT:    vmovaps %xmm1, %xmm0
249 ; KNL_X32-NEXT:  LBB8_2:
250 ; KNL_X32-NEXT:    retl
251   %res = select i1 %cond, <16 x i8> %a1, <16 x i8> %a2
252   ret <16 x i8> %res
255 define i1 @test9(double %a, double %b) {
256 ; ALL_X64-LABEL: test9:
257 ; ALL_X64:       ## %bb.0:
258 ; ALL_X64-NEXT:    vucomisd %xmm0, %xmm1
259 ; ALL_X64-NEXT:    setb %al
260 ; ALL_X64-NEXT:    retq
262 ; KNL_X32-LABEL: test9:
263 ; KNL_X32:       ## %bb.0:
264 ; KNL_X32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
265 ; KNL_X32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0
266 ; KNL_X32-NEXT:    setb %al
267 ; KNL_X32-NEXT:    retl
268   %c = fcmp ugt double %a, %b
269   ret i1 %c
272 define i32 @test10(i32 %a, i32 %b, i1 %cond) {
273 ; ALL_X64-LABEL: test10:
274 ; ALL_X64:       ## %bb.0:
275 ; ALL_X64-NEXT:    movl %edi, %eax
276 ; ALL_X64-NEXT:    testb $1, %dl
277 ; ALL_X64-NEXT:    cmovel %esi, %eax
278 ; ALL_X64-NEXT:    retq
280 ; KNL_X32-LABEL: test10:
281 ; KNL_X32:       ## %bb.0:
282 ; KNL_X32-NEXT:    testb $1, {{[0-9]+}}(%esp)
283 ; KNL_X32-NEXT:    leal {{[0-9]+}}(%esp), %eax
284 ; KNL_X32-NEXT:    leal {{[0-9]+}}(%esp), %ecx
285 ; KNL_X32-NEXT:    cmovnel %eax, %ecx
286 ; KNL_X32-NEXT:    movl (%ecx), %eax
287 ; KNL_X32-NEXT:    retl
288   %c = select i1 %cond, i32 %a, i32 %b
289   ret i32 %c
292 define i1 @test11(i32 %a, i32 %b) {
293 ; ALL_X64-LABEL: test11:
294 ; ALL_X64:       ## %bb.0:
295 ; ALL_X64-NEXT:    cmpl %esi, %edi
296 ; ALL_X64-NEXT:    setg %al
297 ; ALL_X64-NEXT:    retq
299 ; KNL_X32-LABEL: test11:
300 ; KNL_X32:       ## %bb.0:
301 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
302 ; KNL_X32-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
303 ; KNL_X32-NEXT:    setg %al
304 ; KNL_X32-NEXT:    retl
305   %c = icmp sgt i32 %a, %b
306   ret i1 %c
309 define i32 @test12(i32 %a1, i32 %a2, i32 %b1) {
310 ; ALL_X64-LABEL: test12:
311 ; ALL_X64:       ## %bb.0:
312 ; ALL_X64-NEXT:    pushq %rbp
313 ; ALL_X64-NEXT:    .cfi_def_cfa_offset 16
314 ; ALL_X64-NEXT:    pushq %r14
315 ; ALL_X64-NEXT:    .cfi_def_cfa_offset 24
316 ; ALL_X64-NEXT:    pushq %rbx
317 ; ALL_X64-NEXT:    .cfi_def_cfa_offset 32
318 ; ALL_X64-NEXT:    .cfi_offset %rbx, -32
319 ; ALL_X64-NEXT:    .cfi_offset %r14, -24
320 ; ALL_X64-NEXT:    .cfi_offset %rbp, -16
321 ; ALL_X64-NEXT:    movl %esi, %r14d
322 ; ALL_X64-NEXT:    movl %edi, %ebp
323 ; ALL_X64-NEXT:    movl %edx, %esi
324 ; ALL_X64-NEXT:    callq _test11
325 ; ALL_X64-NEXT:    movzbl %al, %ebx
326 ; ALL_X64-NEXT:    movl %ebp, %edi
327 ; ALL_X64-NEXT:    movl %r14d, %esi
328 ; ALL_X64-NEXT:    movl %ebx, %edx
329 ; ALL_X64-NEXT:    callq _test10
330 ; ALL_X64-NEXT:    xorl %ecx, %ecx
331 ; ALL_X64-NEXT:    testb $1, %bl
332 ; ALL_X64-NEXT:    cmovel %ecx, %eax
333 ; ALL_X64-NEXT:    popq %rbx
334 ; ALL_X64-NEXT:    popq %r14
335 ; ALL_X64-NEXT:    popq %rbp
336 ; ALL_X64-NEXT:    retq
338 ; KNL_X32-LABEL: test12:
339 ; KNL_X32:       ## %bb.0:
340 ; KNL_X32-NEXT:    pushl %ebx
341 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 8
342 ; KNL_X32-NEXT:    pushl %edi
343 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 12
344 ; KNL_X32-NEXT:    pushl %esi
345 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 16
346 ; KNL_X32-NEXT:    subl $16, %esp
347 ; KNL_X32-NEXT:    .cfi_def_cfa_offset 32
348 ; KNL_X32-NEXT:    .cfi_offset %esi, -16
349 ; KNL_X32-NEXT:    .cfi_offset %edi, -12
350 ; KNL_X32-NEXT:    .cfi_offset %ebx, -8
351 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
352 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %edi
353 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
354 ; KNL_X32-NEXT:    movl %eax, {{[0-9]+}}(%esp)
355 ; KNL_X32-NEXT:    movl %edi, (%esp)
356 ; KNL_X32-NEXT:    calll _test11
357 ; KNL_X32-NEXT:    movl %eax, %ebx
358 ; KNL_X32-NEXT:    movzbl %al, %eax
359 ; KNL_X32-NEXT:    movl %eax, {{[0-9]+}}(%esp)
360 ; KNL_X32-NEXT:    movl %esi, {{[0-9]+}}(%esp)
361 ; KNL_X32-NEXT:    movl %edi, (%esp)
362 ; KNL_X32-NEXT:    calll _test10
363 ; KNL_X32-NEXT:    xorl %ecx, %ecx
364 ; KNL_X32-NEXT:    testb $1, %bl
365 ; KNL_X32-NEXT:    cmovel %ecx, %eax
366 ; KNL_X32-NEXT:    addl $16, %esp
367 ; KNL_X32-NEXT:    popl %esi
368 ; KNL_X32-NEXT:    popl %edi
369 ; KNL_X32-NEXT:    popl %ebx
370 ; KNL_X32-NEXT:    retl
371   %cond = call i1 @test11(i32 %a1, i32 %b1)
372   %res = call i32 @test10(i32 %a1, i32 %a2, i1 %cond)
373   %res1 = select i1 %cond, i32 %res, i32 0
374   ret i32 %res1
377 define <1 x i1> @test13(<1 x i1>* %foo) {
378 ; KNL-LABEL: test13:
379 ; KNL:       ## %bb.0:
380 ; KNL-NEXT:    movzbl (%rdi), %eax
381 ; KNL-NEXT:    ## kill: def $al killed $al killed $eax
382 ; KNL-NEXT:    retq
384 ; SKX-LABEL: test13:
385 ; SKX:       ## %bb.0:
386 ; SKX-NEXT:    kmovb (%rdi), %k0
387 ; SKX-NEXT:    kmovd %k0, %eax
388 ; SKX-NEXT:    ## kill: def $al killed $al killed $eax
389 ; SKX-NEXT:    retq
391 ; KNL_X32-LABEL: test13:
392 ; KNL_X32:       ## %bb.0:
393 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
394 ; KNL_X32-NEXT:    movzbl (%eax), %eax
395 ; KNL_X32-NEXT:    ## kill: def $al killed $al killed $eax
396 ; KNL_X32-NEXT:    retl
397   %bar = load <1 x i1>, <1 x i1>* %foo
398   ret <1 x i1> %bar