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:
9 ; ALL_X64-NEXT: vxorps %xmm0, %xmm0, %xmm0
12 ; KNL_X32-LABEL: test1:
14 ; KNL_X32-NEXT: vxorps %xmm0, %xmm0, %xmm0
16 ret <16 x i1> zeroinitializer
19 define <16 x i1> @test2(<16 x i1>%a, <16 x i1>%b) {
22 ; KNL-NEXT: vpmovsxbd %xmm1, %zmm1
23 ; KNL-NEXT: vpslld $31, %zmm1, %zmm1
24 ; KNL-NEXT: vpmovsxbd %xmm0, %zmm0
25 ; KNL-NEXT: vpslld $31, %zmm0, %zmm0
26 ; KNL-NEXT: vptestmd %zmm0, %zmm0, %k1
27 ; KNL-NEXT: vptestmd %zmm1, %zmm1, %k1 {%k1}
28 ; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
29 ; KNL-NEXT: vpmovdb %zmm0, %xmm0
34 ; SKX-NEXT: vpsllw $7, %xmm1, %xmm1
35 ; SKX-NEXT: vpmovb2m %xmm1, %k0
36 ; SKX-NEXT: vpsllw $7, %xmm0, %xmm0
37 ; SKX-NEXT: vpmovb2m %xmm0, %k1
38 ; SKX-NEXT: kandw %k0, %k1, %k0
39 ; SKX-NEXT: vpmovm2b %k0, %xmm0
42 ; KNL_X32-LABEL: test2:
44 ; KNL_X32-NEXT: vpmovsxbd %xmm1, %zmm1
45 ; KNL_X32-NEXT: vpslld $31, %zmm1, %zmm1
46 ; KNL_X32-NEXT: vpmovsxbd %xmm0, %zmm0
47 ; KNL_X32-NEXT: vpslld $31, %zmm0, %zmm0
48 ; KNL_X32-NEXT: vptestmd %zmm0, %zmm0, %k1
49 ; KNL_X32-NEXT: vptestmd %zmm1, %zmm1, %k1 {%k1}
50 ; KNL_X32-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
51 ; KNL_X32-NEXT: vpmovdb %zmm0, %xmm0
53 %c = and <16 x i1>%a, %b
57 define <8 x i1> @test3(<8 x i1>%a, <8 x i1>%b) {
60 ; KNL-NEXT: vpmovsxwq %xmm1, %zmm1
61 ; KNL-NEXT: vpsllq $63, %zmm1, %zmm1
62 ; KNL-NEXT: vpmovsxwq %xmm0, %zmm0
63 ; KNL-NEXT: vpsllq $63, %zmm0, %zmm0
64 ; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1
65 ; KNL-NEXT: vptestmq %zmm1, %zmm1, %k1 {%k1}
66 ; KNL-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
67 ; KNL-NEXT: vpmovqw %zmm0, %xmm0
72 ; SKX-NEXT: vpsllw $15, %xmm1, %xmm1
73 ; SKX-NEXT: vpmovw2m %xmm1, %k0
74 ; SKX-NEXT: vpsllw $15, %xmm0, %xmm0
75 ; SKX-NEXT: vpmovw2m %xmm0, %k1
76 ; SKX-NEXT: kandb %k0, %k1, %k0
77 ; SKX-NEXT: vpmovm2w %k0, %xmm0
80 ; KNL_X32-LABEL: test3:
82 ; KNL_X32-NEXT: vpmovsxwq %xmm1, %zmm1
83 ; KNL_X32-NEXT: vpsllq $63, %zmm1, %zmm1
84 ; KNL_X32-NEXT: vpmovsxwq %xmm0, %zmm0
85 ; KNL_X32-NEXT: vpsllq $63, %zmm0, %zmm0
86 ; KNL_X32-NEXT: vptestmq %zmm0, %zmm0, %k1
87 ; KNL_X32-NEXT: vptestmq %zmm1, %zmm1, %k1 {%k1}
88 ; KNL_X32-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
89 ; KNL_X32-NEXT: vpmovqw %zmm0, %xmm0
91 %c = and <8 x i1>%a, %b
95 define <4 x i1> @test4(<4 x i1>%a, <4 x i1>%b) {
98 ; KNL-NEXT: vandps %xmm1, %xmm0, %xmm0
103 ; SKX-NEXT: vpslld $31, %xmm1, %xmm1
104 ; SKX-NEXT: vpslld $31, %xmm0, %xmm0
105 ; SKX-NEXT: vptestmd %xmm0, %xmm0, %k1
106 ; SKX-NEXT: vptestmd %xmm1, %xmm1, %k0 {%k1}
107 ; SKX-NEXT: vpmovm2d %k0, %xmm0
110 ; KNL_X32-LABEL: test4:
112 ; KNL_X32-NEXT: vandps %xmm1, %xmm0, %xmm0
114 %c = and <4 x i1>%a, %b
118 declare <8 x i1> @func8xi1(<8 x i1> %a)
120 define <8 x i32> @test5(<8 x i32>%a, <8 x i32>%b) {
123 ; KNL-NEXT: pushq %rax
124 ; KNL-NEXT: .cfi_def_cfa_offset 16
125 ; KNL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
126 ; KNL-NEXT: vpmovdw %zmm0, %ymm0
127 ; KNL-NEXT: ## kill: %xmm0<def> %xmm0<kill> %ymm0<kill>
128 ; KNL-NEXT: callq _func8xi1
129 ; 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
130 ; KNL-NEXT: vpslld $31, %ymm0, %ymm0
131 ; KNL-NEXT: vpsrad $31, %ymm0, %ymm0
132 ; KNL-NEXT: popq %rax
137 ; SKX-NEXT: pushq %rax
138 ; SKX-NEXT: .cfi_def_cfa_offset 16
139 ; SKX-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
140 ; SKX-NEXT: vpmovm2w %k0, %xmm0
141 ; SKX-NEXT: vzeroupper
142 ; SKX-NEXT: callq _func8xi1
143 ; 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
144 ; SKX-NEXT: vpslld $31, %ymm0, %ymm0
145 ; SKX-NEXT: vpsrad $31, %ymm0, %ymm0
146 ; SKX-NEXT: popq %rax
149 ; KNL_X32-LABEL: test5:
151 ; KNL_X32-NEXT: subl $12, %esp
152 ; KNL_X32-NEXT: .cfi_def_cfa_offset 16
153 ; KNL_X32-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
154 ; KNL_X32-NEXT: vpmovdw %zmm0, %ymm0
155 ; KNL_X32-NEXT: ## kill: %xmm0<def> %xmm0<kill> %ymm0<kill>
156 ; KNL_X32-NEXT: calll _func8xi1
157 ; 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
158 ; KNL_X32-NEXT: vpslld $31, %ymm0, %ymm0
159 ; KNL_X32-NEXT: vpsrad $31, %ymm0, %ymm0
160 ; KNL_X32-NEXT: addl $12, %esp
162 %cmpRes = icmp sgt <8 x i32>%a, %b
163 %resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
164 %res = sext <8 x i1>%resi to <8 x i32>
168 declare <16 x i1> @func16xi1(<16 x i1> %a)
170 define <16 x i32> @test6(<16 x i32>%a, <16 x i32>%b) {
173 ; KNL-NEXT: pushq %rax
174 ; KNL-NEXT: .cfi_def_cfa_offset 16
175 ; KNL-NEXT: vpcmpgtd %zmm1, %zmm0, %k1
176 ; KNL-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
177 ; KNL-NEXT: vpmovdb %zmm0, %xmm0
178 ; KNL-NEXT: callq _func16xi1
179 ; 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
180 ; KNL-NEXT: vpslld $31, %zmm0, %zmm0
181 ; KNL-NEXT: vpsrad $31, %zmm0, %zmm0
182 ; KNL-NEXT: popq %rax
187 ; SKX-NEXT: pushq %rax
188 ; SKX-NEXT: .cfi_def_cfa_offset 16
189 ; SKX-NEXT: vpcmpgtd %zmm1, %zmm0, %k0
190 ; SKX-NEXT: vpmovm2b %k0, %xmm0
191 ; SKX-NEXT: vzeroupper
192 ; SKX-NEXT: callq _func16xi1
193 ; 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
194 ; SKX-NEXT: vpslld $31, %zmm0, %zmm0
195 ; SKX-NEXT: vpsrad $31, %zmm0, %zmm0
196 ; SKX-NEXT: popq %rax
199 ; KNL_X32-LABEL: test6:
201 ; KNL_X32-NEXT: subl $12, %esp
202 ; KNL_X32-NEXT: .cfi_def_cfa_offset 16
203 ; KNL_X32-NEXT: vpcmpgtd %zmm1, %zmm0, %k1
204 ; KNL_X32-NEXT: vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
205 ; KNL_X32-NEXT: vpmovdb %zmm0, %xmm0
206 ; KNL_X32-NEXT: calll _func16xi1
207 ; 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
208 ; KNL_X32-NEXT: vpslld $31, %zmm0, %zmm0
209 ; KNL_X32-NEXT: vpsrad $31, %zmm0, %zmm0
210 ; KNL_X32-NEXT: addl $12, %esp
212 %cmpRes = icmp sgt <16 x i32>%a, %b
213 %resi = call <16 x i1> @func16xi1(<16 x i1> %cmpRes)
214 %res = sext <16 x i1>%resi to <16 x i32>
218 declare <4 x i1> @func4xi1(<4 x i1> %a)
220 define <4 x i32> @test7(<4 x i32>%a, <4 x i32>%b) {
223 ; KNL-NEXT: pushq %rax
224 ; KNL-NEXT: .cfi_def_cfa_offset 16
225 ; KNL-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
226 ; KNL-NEXT: callq _func4xi1
227 ; KNL-NEXT: vpslld $31, %xmm0, %xmm0
228 ; KNL-NEXT: vpsrad $31, %xmm0, %xmm0
229 ; KNL-NEXT: popq %rax
234 ; SKX-NEXT: pushq %rax
235 ; SKX-NEXT: .cfi_def_cfa_offset 16
236 ; SKX-NEXT: vpcmpgtd %xmm1, %xmm0, %k0
237 ; SKX-NEXT: vpmovm2d %k0, %xmm0
238 ; SKX-NEXT: callq _func4xi1
239 ; SKX-NEXT: vpslld $31, %xmm0, %xmm0
240 ; SKX-NEXT: vpsrad $31, %xmm0, %xmm0
241 ; SKX-NEXT: popq %rax
244 ; KNL_X32-LABEL: test7:
246 ; KNL_X32-NEXT: subl $12, %esp
247 ; KNL_X32-NEXT: .cfi_def_cfa_offset 16
248 ; KNL_X32-NEXT: vpcmpgtd %xmm1, %xmm0, %xmm0
249 ; KNL_X32-NEXT: calll _func4xi1
250 ; KNL_X32-NEXT: vpslld $31, %xmm0, %xmm0
251 ; KNL_X32-NEXT: vpsrad $31, %xmm0, %xmm0
252 ; KNL_X32-NEXT: addl $12, %esp
254 %cmpRes = icmp sgt <4 x i32>%a, %b
255 %resi = call <4 x i1> @func4xi1(<4 x i1> %cmpRes)
256 %res = sext <4 x i1>%resi to <4 x i32>
260 define <8 x i1> @test7a(<8 x i32>%a, <8 x i32>%b) {
263 ; KNL-NEXT: pushq %rax
264 ; KNL-NEXT: .cfi_def_cfa_offset 16
265 ; KNL-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
266 ; KNL-NEXT: vpmovdw %zmm0, %ymm0
267 ; KNL-NEXT: ## kill: %xmm0<def> %xmm0<kill> %ymm0<kill>
268 ; KNL-NEXT: callq _func8xi1
269 ; KNL-NEXT: vpmovsxwq %xmm0, %zmm0
270 ; KNL-NEXT: vpsllq $63, %zmm0, %zmm0
271 ; KNL-NEXT: movb $85, %al
272 ; KNL-NEXT: kmovw %eax, %k1
273 ; KNL-NEXT: vptestmq %zmm0, %zmm0, %k1 {%k1}
274 ; KNL-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
275 ; KNL-NEXT: vpmovqw %zmm0, %xmm0
276 ; KNL-NEXT: popq %rax
281 ; SKX-NEXT: pushq %rax
282 ; SKX-NEXT: .cfi_def_cfa_offset 16
283 ; SKX-NEXT: vpcmpgtd %ymm1, %ymm0, %k0
284 ; SKX-NEXT: vpmovm2w %k0, %xmm0
285 ; SKX-NEXT: vzeroupper
286 ; SKX-NEXT: callq _func8xi1
287 ; SKX-NEXT: vpsllw $15, %xmm0, %xmm0
288 ; SKX-NEXT: vpmovw2m %xmm0, %k0
289 ; SKX-NEXT: movb $85, %al
290 ; SKX-NEXT: kmovd %eax, %k1
291 ; SKX-NEXT: kandb %k1, %k0, %k0
292 ; SKX-NEXT: vpmovm2w %k0, %xmm0
293 ; SKX-NEXT: popq %rax
296 ; KNL_X32-LABEL: test7a:
298 ; KNL_X32-NEXT: subl $12, %esp
299 ; KNL_X32-NEXT: .cfi_def_cfa_offset 16
300 ; KNL_X32-NEXT: vpcmpgtd %ymm1, %ymm0, %ymm0
301 ; KNL_X32-NEXT: vpmovdw %zmm0, %ymm0
302 ; KNL_X32-NEXT: ## kill: %xmm0<def> %xmm0<kill> %ymm0<kill>
303 ; KNL_X32-NEXT: calll _func8xi1
304 ; KNL_X32-NEXT: vpmovsxwq %xmm0, %zmm0
305 ; KNL_X32-NEXT: vpsllq $63, %zmm0, %zmm0
306 ; KNL_X32-NEXT: movb $85, %al
307 ; KNL_X32-NEXT: kmovw %eax, %k1
308 ; KNL_X32-NEXT: vptestmq %zmm0, %zmm0, %k1 {%k1}
309 ; KNL_X32-NEXT: vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
310 ; KNL_X32-NEXT: vpmovqw %zmm0, %xmm0
311 ; KNL_X32-NEXT: addl $12, %esp
313 %cmpRes = icmp sgt <8 x i32>%a, %b
314 %resi = call <8 x i1> @func8xi1(<8 x i1> %cmpRes)
315 %res = and <8 x i1>%resi, <i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false>
319 define <16 x i8> @test8(<16 x i8> %a1, <16 x i8> %a2, i1 %cond) {
320 ; ALL_X64-LABEL: test8:
322 ; ALL_X64-NEXT: testb $1, %dil
323 ; ALL_X64-NEXT: jne LBB8_2
324 ; ALL_X64-NEXT: ## BB#1:
325 ; ALL_X64-NEXT: vmovaps %xmm1, %xmm0
326 ; ALL_X64-NEXT: LBB8_2:
329 ; KNL_X32-LABEL: test8:
331 ; KNL_X32-NEXT: testb $1, {{[0-9]+}}(%esp)
332 ; KNL_X32-NEXT: jne LBB8_2
333 ; KNL_X32-NEXT: ## BB#1:
334 ; KNL_X32-NEXT: vmovaps %xmm1, %xmm0
335 ; KNL_X32-NEXT: LBB8_2:
337 %res = select i1 %cond, <16 x i8> %a1, <16 x i8> %a2
341 define i1 @test9(double %a, double %b) {
342 ; ALL_X64-LABEL: test9:
344 ; ALL_X64-NEXT: vucomisd %xmm0, %xmm1
345 ; ALL_X64-NEXT: setb %al
348 ; KNL_X32-LABEL: test9:
350 ; KNL_X32-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
351 ; KNL_X32-NEXT: vucomisd {{[0-9]+}}(%esp), %xmm0
352 ; KNL_X32-NEXT: setb %al
354 %c = fcmp ugt double %a, %b
358 define i32 @test10(i32 %a, i32 %b, i1 %cond) {
359 ; ALL_X64-LABEL: test10:
361 ; ALL_X64-NEXT: testb $1, %dl
362 ; ALL_X64-NEXT: cmovel %esi, %edi
363 ; ALL_X64-NEXT: movl %edi, %eax
366 ; KNL_X32-LABEL: test10:
368 ; KNL_X32-NEXT: testb $1, {{[0-9]+}}(%esp)
369 ; KNL_X32-NEXT: leal {{[0-9]+}}(%esp), %eax
370 ; KNL_X32-NEXT: leal {{[0-9]+}}(%esp), %ecx
371 ; KNL_X32-NEXT: cmovnel %eax, %ecx
372 ; KNL_X32-NEXT: movl (%ecx), %eax
374 %c = select i1 %cond, i32 %a, i32 %b
378 define i1 @test11(i32 %a, i32 %b) {
379 ; ALL_X64-LABEL: test11:
381 ; ALL_X64-NEXT: cmpl %esi, %edi
382 ; ALL_X64-NEXT: setg %al
385 ; KNL_X32-LABEL: test11:
387 ; KNL_X32-NEXT: movl {{[0-9]+}}(%esp), %eax
388 ; KNL_X32-NEXT: cmpl {{[0-9]+}}(%esp), %eax
389 ; KNL_X32-NEXT: setg %al
391 %c = icmp sgt i32 %a, %b
395 define i32 @test12(i32 %a1, i32 %a2, i32 %b1) {
396 ; ALL_X64-LABEL: test12:
398 ; ALL_X64-NEXT: pushq %rbp
399 ; ALL_X64-NEXT: .cfi_def_cfa_offset 16
400 ; ALL_X64-NEXT: pushq %r14
401 ; ALL_X64-NEXT: .cfi_def_cfa_offset 24
402 ; ALL_X64-NEXT: pushq %rbx
403 ; ALL_X64-NEXT: .cfi_def_cfa_offset 32
404 ; ALL_X64-NEXT: .cfi_offset %rbx, -32
405 ; ALL_X64-NEXT: .cfi_offset %r14, -24
406 ; ALL_X64-NEXT: .cfi_offset %rbp, -16
407 ; ALL_X64-NEXT: movl %esi, %r14d
408 ; ALL_X64-NEXT: movl %edi, %ebp
409 ; ALL_X64-NEXT: movl %edx, %esi
410 ; ALL_X64-NEXT: callq _test11
411 ; ALL_X64-NEXT: movzbl %al, %ebx
412 ; ALL_X64-NEXT: movl %ebp, %edi
413 ; ALL_X64-NEXT: movl %r14d, %esi
414 ; ALL_X64-NEXT: movl %ebx, %edx
415 ; ALL_X64-NEXT: callq _test10
416 ; ALL_X64-NEXT: xorl %ecx, %ecx
417 ; ALL_X64-NEXT: testb $1, %bl
418 ; ALL_X64-NEXT: cmovel %ecx, %eax
419 ; ALL_X64-NEXT: popq %rbx
420 ; ALL_X64-NEXT: popq %r14
421 ; ALL_X64-NEXT: popq %rbp
424 ; KNL_X32-LABEL: test12:
426 ; KNL_X32-NEXT: pushl %ebx
427 ; KNL_X32-NEXT: .cfi_def_cfa_offset 8
428 ; KNL_X32-NEXT: pushl %edi
429 ; KNL_X32-NEXT: .cfi_def_cfa_offset 12
430 ; KNL_X32-NEXT: pushl %esi
431 ; KNL_X32-NEXT: .cfi_def_cfa_offset 16
432 ; KNL_X32-NEXT: subl $16, %esp
433 ; KNL_X32-NEXT: .cfi_def_cfa_offset 32
434 ; KNL_X32-NEXT: .cfi_offset %esi, -16
435 ; KNL_X32-NEXT: .cfi_offset %edi, -12
436 ; KNL_X32-NEXT: .cfi_offset %ebx, -8
437 ; KNL_X32-NEXT: movl {{[0-9]+}}(%esp), %esi
438 ; KNL_X32-NEXT: movl {{[0-9]+}}(%esp), %edi
439 ; KNL_X32-NEXT: movl {{[0-9]+}}(%esp), %eax
440 ; KNL_X32-NEXT: movl %eax, {{[0-9]+}}(%esp)
441 ; KNL_X32-NEXT: movl %edi, (%esp)
442 ; KNL_X32-NEXT: calll _test11
443 ; KNL_X32-NEXT: movl %eax, %ebx
444 ; KNL_X32-NEXT: movzbl %bl, %eax
445 ; KNL_X32-NEXT: movl %eax, {{[0-9]+}}(%esp)
446 ; KNL_X32-NEXT: movl %esi, {{[0-9]+}}(%esp)
447 ; KNL_X32-NEXT: movl %edi, (%esp)
448 ; KNL_X32-NEXT: calll _test10
449 ; KNL_X32-NEXT: xorl %ecx, %ecx
450 ; KNL_X32-NEXT: testb $1, %bl
451 ; KNL_X32-NEXT: cmovel %ecx, %eax
452 ; KNL_X32-NEXT: addl $16, %esp
453 ; KNL_X32-NEXT: popl %esi
454 ; KNL_X32-NEXT: popl %edi
455 ; KNL_X32-NEXT: popl %ebx
457 %cond = call i1 @test11(i32 %a1, i32 %b1)
458 %res = call i32 @test10(i32 %a1, i32 %a2, i1 %cond)
459 %res1 = select i1 %cond, i32 %res, i32 0