[PowerPC] Recommit r314244 with refactoring and off by default
[llvm-core.git] / test / CodeGen / X86 / avx512-calling-conv.ll
blob60c454ae16ca0f6fda87b102c617139f3cb9e83f
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 ; KNL-LABEL: test2:
21 ; KNL:       ## BB#0:
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
30 ; KNL-NEXT:    retq
32 ; SKX-LABEL: test2:
33 ; SKX:       ## BB#0:
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
40 ; SKX-NEXT:    retq
42 ; KNL_X32-LABEL: test2:
43 ; KNL_X32:       ## BB#0:
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
52 ; KNL_X32-NEXT:    retl
53   %c = and <16 x i1>%a, %b
54   ret <16 x i1> %c
57 define <8 x i1> @test3(<8 x i1>%a, <8 x i1>%b) {
58 ; KNL-LABEL: test3:
59 ; KNL:       ## BB#0:
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
68 ; KNL-NEXT:    retq
70 ; SKX-LABEL: test3:
71 ; SKX:       ## BB#0:
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
78 ; SKX-NEXT:    retq
80 ; KNL_X32-LABEL: test3:
81 ; KNL_X32:       ## BB#0:
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
90 ; KNL_X32-NEXT:    retl
91   %c = and <8 x i1>%a, %b
92   ret <8 x i1> %c
95 define <4 x i1> @test4(<4 x i1>%a, <4 x i1>%b) {
96 ; KNL-LABEL: test4:
97 ; KNL:       ## BB#0:
98 ; KNL-NEXT:    vandps %xmm1, %xmm0, %xmm0
99 ; KNL-NEXT:    retq
101 ; SKX-LABEL: test4:
102 ; SKX:       ## BB#0:
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
108 ; SKX-NEXT:    retq
110 ; KNL_X32-LABEL: test4:
111 ; KNL_X32:       ## BB#0:
112 ; KNL_X32-NEXT:    vandps %xmm1, %xmm0, %xmm0
113 ; KNL_X32-NEXT:    retl
114   %c = and <4 x i1>%a, %b
115   ret <4 x i1> %c
118 declare <8 x i1> @func8xi1(<8 x i1> %a)
120 define <8 x i32> @test5(<8 x i32>%a, <8 x i32>%b) {
121 ; KNL-LABEL: test5:
122 ; KNL:       ## BB#0:
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
133 ; KNL-NEXT:    retq
135 ; SKX-LABEL: test5:
136 ; SKX:       ## BB#0:
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
147 ; SKX-NEXT:    retq
149 ; KNL_X32-LABEL: test5:
150 ; KNL_X32:       ## BB#0:
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
161 ; KNL_X32-NEXT:    retl
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>
165   ret <8 x i32> %res
168 declare <16 x i1> @func16xi1(<16 x i1> %a)
170 define <16 x i32> @test6(<16 x i32>%a, <16 x i32>%b) {
171 ; KNL-LABEL: test6:
172 ; KNL:       ## BB#0:
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
183 ; KNL-NEXT:    retq
185 ; SKX-LABEL: test6:
186 ; SKX:       ## BB#0:
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
197 ; SKX-NEXT:    retq
199 ; KNL_X32-LABEL: test6:
200 ; KNL_X32:       ## BB#0:
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
211 ; KNL_X32-NEXT:    retl
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>
215   ret <16 x i32> %res
218 declare <4 x i1> @func4xi1(<4 x i1> %a)
220 define <4 x i32> @test7(<4 x i32>%a, <4 x i32>%b) {
221 ; KNL-LABEL: test7:
222 ; KNL:       ## BB#0:
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
230 ; KNL-NEXT:    retq
232 ; SKX-LABEL: test7:
233 ; SKX:       ## BB#0:
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
242 ; SKX-NEXT:    retq
244 ; KNL_X32-LABEL: test7:
245 ; KNL_X32:       ## BB#0:
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
253 ; KNL_X32-NEXT:    retl
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>
257   ret <4 x i32> %res
260 define <8 x i1> @test7a(<8 x i32>%a, <8 x i32>%b) {
261 ; KNL-LABEL: test7a:
262 ; KNL:       ## BB#0:
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
277 ; KNL-NEXT:    retq
279 ; SKX-LABEL: test7a:
280 ; SKX:       ## BB#0:
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
294 ; SKX-NEXT:    retq
296 ; KNL_X32-LABEL: test7a:
297 ; KNL_X32:       ## BB#0:
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
312 ; KNL_X32-NEXT:    retl
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>
316   ret <8 x i1> %res
319 define <16 x i8> @test8(<16 x i8> %a1, <16 x i8> %a2, i1 %cond) {
320 ; ALL_X64-LABEL: test8:
321 ; ALL_X64:       ## BB#0:
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:
327 ; ALL_X64-NEXT:    retq
329 ; KNL_X32-LABEL: test8:
330 ; KNL_X32:       ## BB#0:
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:
336 ; KNL_X32-NEXT:    retl
337   %res = select i1 %cond, <16 x i8> %a1, <16 x i8> %a2
338   ret <16 x i8> %res
341 define i1 @test9(double %a, double %b) {
342 ; ALL_X64-LABEL: test9:
343 ; ALL_X64:       ## BB#0:
344 ; ALL_X64-NEXT:    vucomisd %xmm0, %xmm1
345 ; ALL_X64-NEXT:    setb %al
346 ; ALL_X64-NEXT:    retq
348 ; KNL_X32-LABEL: test9:
349 ; KNL_X32:       ## BB#0:
350 ; KNL_X32-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
351 ; KNL_X32-NEXT:    vucomisd {{[0-9]+}}(%esp), %xmm0
352 ; KNL_X32-NEXT:    setb %al
353 ; KNL_X32-NEXT:    retl
354   %c = fcmp ugt double %a, %b
355   ret i1 %c
358 define i32 @test10(i32 %a, i32 %b, i1 %cond) {
359 ; ALL_X64-LABEL: test10:
360 ; ALL_X64:       ## BB#0:
361 ; ALL_X64-NEXT:    testb $1, %dl
362 ; ALL_X64-NEXT:    cmovel %esi, %edi
363 ; ALL_X64-NEXT:    movl %edi, %eax
364 ; ALL_X64-NEXT:    retq
366 ; KNL_X32-LABEL: test10:
367 ; KNL_X32:       ## BB#0:
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
373 ; KNL_X32-NEXT:    retl
374   %c = select i1 %cond, i32 %a, i32 %b
375   ret i32 %c
378 define i1 @test11(i32 %a, i32 %b) {
379 ; ALL_X64-LABEL: test11:
380 ; ALL_X64:       ## BB#0:
381 ; ALL_X64-NEXT:    cmpl %esi, %edi
382 ; ALL_X64-NEXT:    setg %al
383 ; ALL_X64-NEXT:    retq
385 ; KNL_X32-LABEL: test11:
386 ; KNL_X32:       ## BB#0:
387 ; KNL_X32-NEXT:    movl {{[0-9]+}}(%esp), %eax
388 ; KNL_X32-NEXT:    cmpl {{[0-9]+}}(%esp), %eax
389 ; KNL_X32-NEXT:    setg %al
390 ; KNL_X32-NEXT:    retl
391   %c = icmp sgt i32 %a, %b
392   ret i1 %c
395 define i32 @test12(i32 %a1, i32 %a2, i32 %b1) {
396 ; ALL_X64-LABEL: test12:
397 ; ALL_X64:       ## BB#0:
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
422 ; ALL_X64-NEXT:    retq
424 ; KNL_X32-LABEL: test12:
425 ; KNL_X32:       ## BB#0:
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
456 ; KNL_X32-NEXT:    retl
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
460   ret i32 %res1