Use Align for TFL::TransientStackAlignment
[llvm-core.git] / test / CodeGen / X86 / inline-asm-flag-output.ll
blob1912f24b7fecab1db482a8f0089f14ea9bb12af0
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686--   -no-integrated-as | FileCheck %s -check-prefix=X32
3 ; RUN: llc < %s -mtriple=x86_64-- -no-integrated-as | FileCheck %s -check-prefix=X64
5 define i32 @test_cca(i64 %nr, i64* %addr) {
6 ; X32-LABEL: test_cca:
7 ; X32:       # %bb.0: # %entry
8 ; X32-NEXT:    pushl %esi
9 ; X32-NEXT:    .cfi_def_cfa_offset 8
10 ; X32-NEXT:    .cfi_offset %esi, -8
11 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
12 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
13 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
14 ; X32-NEXT:    xorl %eax, %eax
15 ; X32-NEXT:    #APP
16 ; X32-NEXT:    cmp %ecx,(%esi)
17 ; X32-NEXT:    #NO_APP
18 ; X32-NEXT:    setbe %al
19 ; X32-NEXT:    popl %esi
20 ; X32-NEXT:    .cfi_def_cfa_offset 4
21 ; X32-NEXT:    retl
23 ; X64-LABEL: test_cca:
24 ; X64:       # %bb.0: # %entry
25 ; X64-NEXT:    xorl %eax, %eax
26 ; X64-NEXT:    #APP
27 ; X64-NEXT:    cmp %rdi,(%rsi)
28 ; X64-NEXT:    #NO_APP
29 ; X64-NEXT:    setbe %al
30 ; X64-NEXT:    retq
31 entry:
32   %cc = tail call i32 asm "cmp $2,$1", "={@cca},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
33   %tobool = icmp eq i32 %cc, 0
34   %rv = zext i1 %tobool to i32
35   ret i32 %rv
39 define i32 @test_ccae(i64 %nr, i64* %addr) {
40 ; X32-LABEL: test_ccae:
41 ; X32:       # %bb.0: # %entry
42 ; X32-NEXT:    pushl %esi
43 ; X32-NEXT:    .cfi_def_cfa_offset 8
44 ; X32-NEXT:    .cfi_offset %esi, -8
45 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
46 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
47 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
48 ; X32-NEXT:    xorl %eax, %eax
49 ; X32-NEXT:    #APP
50 ; X32-NEXT:    cmp %ecx,(%esi)
51 ; X32-NEXT:    #NO_APP
52 ; X32-NEXT:    setb %al
53 ; X32-NEXT:    popl %esi
54 ; X32-NEXT:    .cfi_def_cfa_offset 4
55 ; X32-NEXT:    retl
57 ; X64-LABEL: test_ccae:
58 ; X64:       # %bb.0: # %entry
59 ; X64-NEXT:    xorl %eax, %eax
60 ; X64-NEXT:    #APP
61 ; X64-NEXT:    cmp %rdi,(%rsi)
62 ; X64-NEXT:    #NO_APP
63 ; X64-NEXT:    setb %al
64 ; X64-NEXT:    retq
65 entry:
66   %cc = tail call i32 asm "cmp $2,$1", "={@ccae},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
67   %tobool = icmp eq i32 %cc, 0
68   %rv = zext i1 %tobool to i32
69   ret i32 %rv
73 define i32 @test_ccb(i64 %nr, i64* %addr) {
74 ; X32-LABEL: test_ccb:
75 ; X32:       # %bb.0: # %entry
76 ; X32-NEXT:    pushl %esi
77 ; X32-NEXT:    .cfi_def_cfa_offset 8
78 ; X32-NEXT:    .cfi_offset %esi, -8
79 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
80 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
81 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
82 ; X32-NEXT:    xorl %eax, %eax
83 ; X32-NEXT:    #APP
84 ; X32-NEXT:    cmp %ecx,(%esi)
85 ; X32-NEXT:    #NO_APP
86 ; X32-NEXT:    setae %al
87 ; X32-NEXT:    popl %esi
88 ; X32-NEXT:    .cfi_def_cfa_offset 4
89 ; X32-NEXT:    retl
91 ; X64-LABEL: test_ccb:
92 ; X64:       # %bb.0: # %entry
93 ; X64-NEXT:    xorl %eax, %eax
94 ; X64-NEXT:    #APP
95 ; X64-NEXT:    cmp %rdi,(%rsi)
96 ; X64-NEXT:    #NO_APP
97 ; X64-NEXT:    setae %al
98 ; X64-NEXT:    retq
99 entry:
100   %cc = tail call i32 asm "cmp $2,$1", "={@ccb},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
101   %tobool = icmp eq i32 %cc, 0
102   %rv = zext i1 %tobool to i32
103   ret i32 %rv
107 define i32 @test_ccbe(i64 %nr, i64* %addr) {
108 ; X32-LABEL: test_ccbe:
109 ; X32:       # %bb.0: # %entry
110 ; X32-NEXT:    pushl %esi
111 ; X32-NEXT:    .cfi_def_cfa_offset 8
112 ; X32-NEXT:    .cfi_offset %esi, -8
113 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
114 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
115 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
116 ; X32-NEXT:    xorl %eax, %eax
117 ; X32-NEXT:    #APP
118 ; X32-NEXT:    cmp %ecx,(%esi)
119 ; X32-NEXT:    #NO_APP
120 ; X32-NEXT:    seta %al
121 ; X32-NEXT:    popl %esi
122 ; X32-NEXT:    .cfi_def_cfa_offset 4
123 ; X32-NEXT:    retl
125 ; X64-LABEL: test_ccbe:
126 ; X64:       # %bb.0: # %entry
127 ; X64-NEXT:    xorl %eax, %eax
128 ; X64-NEXT:    #APP
129 ; X64-NEXT:    cmp %rdi,(%rsi)
130 ; X64-NEXT:    #NO_APP
131 ; X64-NEXT:    seta %al
132 ; X64-NEXT:    retq
133 entry:
134   %cc = tail call i32 asm "cmp $2,$1", "={@ccbe},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
135   %tobool = icmp eq i32 %cc, 0
136   %rv = zext i1 %tobool to i32
137   ret i32 %rv
141 define i32 @test_ccc(i64 %nr, i64* %addr) {
142 ; X32-LABEL: test_ccc:
143 ; X32:       # %bb.0: # %entry
144 ; X32-NEXT:    pushl %esi
145 ; X32-NEXT:    .cfi_def_cfa_offset 8
146 ; X32-NEXT:    .cfi_offset %esi, -8
147 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
148 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
149 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
150 ; X32-NEXT:    xorl %eax, %eax
151 ; X32-NEXT:    #APP
152 ; X32-NEXT:    cmp %ecx,(%esi)
153 ; X32-NEXT:    #NO_APP
154 ; X32-NEXT:    setae %al
155 ; X32-NEXT:    popl %esi
156 ; X32-NEXT:    .cfi_def_cfa_offset 4
157 ; X32-NEXT:    retl
159 ; X64-LABEL: test_ccc:
160 ; X64:       # %bb.0: # %entry
161 ; X64-NEXT:    xorl %eax, %eax
162 ; X64-NEXT:    #APP
163 ; X64-NEXT:    cmp %rdi,(%rsi)
164 ; X64-NEXT:    #NO_APP
165 ; X64-NEXT:    setae %al
166 ; X64-NEXT:    retq
167 entry:
168   %cc = tail call i32 asm "cmp $2,$1", "={@ccc},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
169   %tobool = icmp eq i32 %cc, 0
170   %rv = zext i1 %tobool to i32
171   ret i32 %rv
175 define i32 @test_cce(i64 %nr, i64* %addr) {
176 ; X32-LABEL: test_cce:
177 ; X32:       # %bb.0: # %entry
178 ; X32-NEXT:    pushl %esi
179 ; X32-NEXT:    .cfi_def_cfa_offset 8
180 ; X32-NEXT:    .cfi_offset %esi, -8
181 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
182 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
183 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
184 ; X32-NEXT:    xorl %eax, %eax
185 ; X32-NEXT:    #APP
186 ; X32-NEXT:    cmp %ecx,(%esi)
187 ; X32-NEXT:    #NO_APP
188 ; X32-NEXT:    setne %al
189 ; X32-NEXT:    popl %esi
190 ; X32-NEXT:    .cfi_def_cfa_offset 4
191 ; X32-NEXT:    retl
193 ; X64-LABEL: test_cce:
194 ; X64:       # %bb.0: # %entry
195 ; X64-NEXT:    xorl %eax, %eax
196 ; X64-NEXT:    #APP
197 ; X64-NEXT:    cmp %rdi,(%rsi)
198 ; X64-NEXT:    #NO_APP
199 ; X64-NEXT:    setne %al
200 ; X64-NEXT:    retq
201 entry:
202   %cc = tail call i32 asm "cmp $2,$1", "={@cce},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
203   %tobool = icmp eq i32 %cc, 0
204   %rv = zext i1 %tobool to i32
205   ret i32 %rv
209 define i32 @test_ccz(i64 %nr, i64* %addr) {
210 ; X32-LABEL: test_ccz:
211 ; X32:       # %bb.0: # %entry
212 ; X32-NEXT:    pushl %esi
213 ; X32-NEXT:    .cfi_def_cfa_offset 8
214 ; X32-NEXT:    .cfi_offset %esi, -8
215 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
216 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
217 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
218 ; X32-NEXT:    xorl %eax, %eax
219 ; X32-NEXT:    #APP
220 ; X32-NEXT:    cmp %ecx,(%esi)
221 ; X32-NEXT:    #NO_APP
222 ; X32-NEXT:    setne %al
223 ; X32-NEXT:    popl %esi
224 ; X32-NEXT:    .cfi_def_cfa_offset 4
225 ; X32-NEXT:    retl
227 ; X64-LABEL: test_ccz:
228 ; X64:       # %bb.0: # %entry
229 ; X64-NEXT:    xorl %eax, %eax
230 ; X64-NEXT:    #APP
231 ; X64-NEXT:    cmp %rdi,(%rsi)
232 ; X64-NEXT:    #NO_APP
233 ; X64-NEXT:    setne %al
234 ; X64-NEXT:    retq
235 entry:
236   %cc = tail call i32 asm "cmp $2,$1", "={@ccz},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
237   %tobool = icmp eq i32 %cc, 0
238   %rv = zext i1 %tobool to i32
239   ret i32 %rv
243 define i32 @test_ccg(i64 %nr, i64* %addr) {
244 ; X32-LABEL: test_ccg:
245 ; X32:       # %bb.0: # %entry
246 ; X32-NEXT:    pushl %esi
247 ; X32-NEXT:    .cfi_def_cfa_offset 8
248 ; X32-NEXT:    .cfi_offset %esi, -8
249 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
250 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
251 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
252 ; X32-NEXT:    xorl %eax, %eax
253 ; X32-NEXT:    #APP
254 ; X32-NEXT:    cmp %ecx,(%esi)
255 ; X32-NEXT:    #NO_APP
256 ; X32-NEXT:    setle %al
257 ; X32-NEXT:    popl %esi
258 ; X32-NEXT:    .cfi_def_cfa_offset 4
259 ; X32-NEXT:    retl
261 ; X64-LABEL: test_ccg:
262 ; X64:       # %bb.0: # %entry
263 ; X64-NEXT:    xorl %eax, %eax
264 ; X64-NEXT:    #APP
265 ; X64-NEXT:    cmp %rdi,(%rsi)
266 ; X64-NEXT:    #NO_APP
267 ; X64-NEXT:    setle %al
268 ; X64-NEXT:    retq
269 entry:
270   %cc = tail call i32 asm "cmp $2,$1", "={@ccg},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
271   %tobool = icmp eq i32 %cc, 0
272   %rv = zext i1 %tobool to i32
273   ret i32 %rv
277 define i32 @test_ccge(i64 %nr, i64* %addr) {
278 ; X32-LABEL: test_ccge:
279 ; X32:       # %bb.0: # %entry
280 ; X32-NEXT:    pushl %esi
281 ; X32-NEXT:    .cfi_def_cfa_offset 8
282 ; X32-NEXT:    .cfi_offset %esi, -8
283 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
284 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
285 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
286 ; X32-NEXT:    xorl %eax, %eax
287 ; X32-NEXT:    #APP
288 ; X32-NEXT:    cmp %ecx,(%esi)
289 ; X32-NEXT:    #NO_APP
290 ; X32-NEXT:    setl %al
291 ; X32-NEXT:    popl %esi
292 ; X32-NEXT:    .cfi_def_cfa_offset 4
293 ; X32-NEXT:    retl
295 ; X64-LABEL: test_ccge:
296 ; X64:       # %bb.0: # %entry
297 ; X64-NEXT:    xorl %eax, %eax
298 ; X64-NEXT:    #APP
299 ; X64-NEXT:    cmp %rdi,(%rsi)
300 ; X64-NEXT:    #NO_APP
301 ; X64-NEXT:    setl %al
302 ; X64-NEXT:    retq
303 entry:
304   %cc = tail call i32 asm "cmp $2,$1", "={@ccge},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
305   %tobool = icmp eq i32 %cc, 0
306   %rv = zext i1 %tobool to i32
307   ret i32 %rv
311 define i32 @test_ccl(i64 %nr, i64* %addr) {
312 ; X32-LABEL: test_ccl:
313 ; X32:       # %bb.0: # %entry
314 ; X32-NEXT:    pushl %esi
315 ; X32-NEXT:    .cfi_def_cfa_offset 8
316 ; X32-NEXT:    .cfi_offset %esi, -8
317 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
318 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
319 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
320 ; X32-NEXT:    xorl %eax, %eax
321 ; X32-NEXT:    #APP
322 ; X32-NEXT:    cmp %ecx,(%esi)
323 ; X32-NEXT:    #NO_APP
324 ; X32-NEXT:    setge %al
325 ; X32-NEXT:    popl %esi
326 ; X32-NEXT:    .cfi_def_cfa_offset 4
327 ; X32-NEXT:    retl
329 ; X64-LABEL: test_ccl:
330 ; X64:       # %bb.0: # %entry
331 ; X64-NEXT:    xorl %eax, %eax
332 ; X64-NEXT:    #APP
333 ; X64-NEXT:    cmp %rdi,(%rsi)
334 ; X64-NEXT:    #NO_APP
335 ; X64-NEXT:    setge %al
336 ; X64-NEXT:    retq
337 entry:
338   %cc = tail call i32 asm "cmp $2,$1", "={@ccl},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
339   %tobool = icmp eq i32 %cc, 0
340   %rv = zext i1 %tobool to i32
341   ret i32 %rv
345 define i32 @test_ccle(i64 %nr, i64* %addr) {
346 ; X32-LABEL: test_ccle:
347 ; X32:       # %bb.0: # %entry
348 ; X32-NEXT:    pushl %esi
349 ; X32-NEXT:    .cfi_def_cfa_offset 8
350 ; X32-NEXT:    .cfi_offset %esi, -8
351 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
352 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
353 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
354 ; X32-NEXT:    xorl %eax, %eax
355 ; X32-NEXT:    #APP
356 ; X32-NEXT:    cmp %ecx,(%esi)
357 ; X32-NEXT:    #NO_APP
358 ; X32-NEXT:    setg %al
359 ; X32-NEXT:    popl %esi
360 ; X32-NEXT:    .cfi_def_cfa_offset 4
361 ; X32-NEXT:    retl
363 ; X64-LABEL: test_ccle:
364 ; X64:       # %bb.0: # %entry
365 ; X64-NEXT:    xorl %eax, %eax
366 ; X64-NEXT:    #APP
367 ; X64-NEXT:    cmp %rdi,(%rsi)
368 ; X64-NEXT:    #NO_APP
369 ; X64-NEXT:    setg %al
370 ; X64-NEXT:    retq
371 entry:
372   %cc = tail call i32 asm "cmp $2,$1", "={@ccle},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
373   %tobool = icmp eq i32 %cc, 0
374   %rv = zext i1 %tobool to i32
375   ret i32 %rv
379 define i32 @test_ccna(i64 %nr, i64* %addr) {
380 ; X32-LABEL: test_ccna:
381 ; X32:       # %bb.0: # %entry
382 ; X32-NEXT:    pushl %esi
383 ; X32-NEXT:    .cfi_def_cfa_offset 8
384 ; X32-NEXT:    .cfi_offset %esi, -8
385 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
386 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
387 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
388 ; X32-NEXT:    xorl %eax, %eax
389 ; X32-NEXT:    #APP
390 ; X32-NEXT:    cmp %ecx,(%esi)
391 ; X32-NEXT:    #NO_APP
392 ; X32-NEXT:    seta %al
393 ; X32-NEXT:    popl %esi
394 ; X32-NEXT:    .cfi_def_cfa_offset 4
395 ; X32-NEXT:    retl
397 ; X64-LABEL: test_ccna:
398 ; X64:       # %bb.0: # %entry
399 ; X64-NEXT:    xorl %eax, %eax
400 ; X64-NEXT:    #APP
401 ; X64-NEXT:    cmp %rdi,(%rsi)
402 ; X64-NEXT:    #NO_APP
403 ; X64-NEXT:    seta %al
404 ; X64-NEXT:    retq
405 entry:
406   %cc = tail call i32 asm "cmp $2,$1", "={@ccna},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
407   %tobool = icmp eq i32 %cc, 0
408   %rv = zext i1 %tobool to i32
409   ret i32 %rv
413 define i32 @test_ccnae(i64 %nr, i64* %addr) {
414 ; X32-LABEL: test_ccnae:
415 ; X32:       # %bb.0: # %entry
416 ; X32-NEXT:    pushl %esi
417 ; X32-NEXT:    .cfi_def_cfa_offset 8
418 ; X32-NEXT:    .cfi_offset %esi, -8
419 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
420 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
421 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
422 ; X32-NEXT:    xorl %eax, %eax
423 ; X32-NEXT:    #APP
424 ; X32-NEXT:    cmp %ecx,(%esi)
425 ; X32-NEXT:    #NO_APP
426 ; X32-NEXT:    setae %al
427 ; X32-NEXT:    popl %esi
428 ; X32-NEXT:    .cfi_def_cfa_offset 4
429 ; X32-NEXT:    retl
431 ; X64-LABEL: test_ccnae:
432 ; X64:       # %bb.0: # %entry
433 ; X64-NEXT:    xorl %eax, %eax
434 ; X64-NEXT:    #APP
435 ; X64-NEXT:    cmp %rdi,(%rsi)
436 ; X64-NEXT:    #NO_APP
437 ; X64-NEXT:    setae %al
438 ; X64-NEXT:    retq
439 entry:
440   %cc = tail call i32 asm "cmp $2,$1", "={@ccnae},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
441   %tobool = icmp eq i32 %cc, 0
442   %rv = zext i1 %tobool to i32
443   ret i32 %rv
447 define i32 @test_ccnb(i64 %nr, i64* %addr) {
448 ; X32-LABEL: test_ccnb:
449 ; X32:       # %bb.0: # %entry
450 ; X32-NEXT:    pushl %esi
451 ; X32-NEXT:    .cfi_def_cfa_offset 8
452 ; X32-NEXT:    .cfi_offset %esi, -8
453 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
454 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
455 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
456 ; X32-NEXT:    xorl %eax, %eax
457 ; X32-NEXT:    #APP
458 ; X32-NEXT:    cmp %ecx,(%esi)
459 ; X32-NEXT:    #NO_APP
460 ; X32-NEXT:    setb %al
461 ; X32-NEXT:    popl %esi
462 ; X32-NEXT:    .cfi_def_cfa_offset 4
463 ; X32-NEXT:    retl
465 ; X64-LABEL: test_ccnb:
466 ; X64:       # %bb.0: # %entry
467 ; X64-NEXT:    xorl %eax, %eax
468 ; X64-NEXT:    #APP
469 ; X64-NEXT:    cmp %rdi,(%rsi)
470 ; X64-NEXT:    #NO_APP
471 ; X64-NEXT:    setb %al
472 ; X64-NEXT:    retq
473 entry:
474   %cc = tail call i32 asm "cmp $2,$1", "={@ccnb},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
475   %tobool = icmp eq i32 %cc, 0
476   %rv = zext i1 %tobool to i32
477   ret i32 %rv
481 define i32 @test_ccnbe(i64 %nr, i64* %addr) {
482 ; X32-LABEL: test_ccnbe:
483 ; X32:       # %bb.0: # %entry
484 ; X32-NEXT:    pushl %esi
485 ; X32-NEXT:    .cfi_def_cfa_offset 8
486 ; X32-NEXT:    .cfi_offset %esi, -8
487 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
488 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
489 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
490 ; X32-NEXT:    xorl %eax, %eax
491 ; X32-NEXT:    #APP
492 ; X32-NEXT:    cmp %ecx,(%esi)
493 ; X32-NEXT:    #NO_APP
494 ; X32-NEXT:    setbe %al
495 ; X32-NEXT:    popl %esi
496 ; X32-NEXT:    .cfi_def_cfa_offset 4
497 ; X32-NEXT:    retl
499 ; X64-LABEL: test_ccnbe:
500 ; X64:       # %bb.0: # %entry
501 ; X64-NEXT:    xorl %eax, %eax
502 ; X64-NEXT:    #APP
503 ; X64-NEXT:    cmp %rdi,(%rsi)
504 ; X64-NEXT:    #NO_APP
505 ; X64-NEXT:    setbe %al
506 ; X64-NEXT:    retq
507 entry:
508   %cc = tail call i32 asm "cmp $2,$1", "={@ccnbe},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
509   %tobool = icmp eq i32 %cc, 0
510   %rv = zext i1 %tobool to i32
511   ret i32 %rv
515 define i32 @test_ccnc(i64 %nr, i64* %addr) {
516 ; X32-LABEL: test_ccnc:
517 ; X32:       # %bb.0: # %entry
518 ; X32-NEXT:    pushl %esi
519 ; X32-NEXT:    .cfi_def_cfa_offset 8
520 ; X32-NEXT:    .cfi_offset %esi, -8
521 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
522 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
523 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
524 ; X32-NEXT:    xorl %eax, %eax
525 ; X32-NEXT:    #APP
526 ; X32-NEXT:    cmp %ecx,(%esi)
527 ; X32-NEXT:    #NO_APP
528 ; X32-NEXT:    setb %al
529 ; X32-NEXT:    popl %esi
530 ; X32-NEXT:    .cfi_def_cfa_offset 4
531 ; X32-NEXT:    retl
533 ; X64-LABEL: test_ccnc:
534 ; X64:       # %bb.0: # %entry
535 ; X64-NEXT:    xorl %eax, %eax
536 ; X64-NEXT:    #APP
537 ; X64-NEXT:    cmp %rdi,(%rsi)
538 ; X64-NEXT:    #NO_APP
539 ; X64-NEXT:    setb %al
540 ; X64-NEXT:    retq
541 entry:
542   %cc = tail call i32 asm "cmp $2,$1", "={@ccnc},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
543   %tobool = icmp eq i32 %cc, 0
544   %rv = zext i1 %tobool to i32
545   ret i32 %rv
549 define i32 @test_ccne(i64 %nr, i64* %addr) {
550 ; X32-LABEL: test_ccne:
551 ; X32:       # %bb.0: # %entry
552 ; X32-NEXT:    pushl %esi
553 ; X32-NEXT:    .cfi_def_cfa_offset 8
554 ; X32-NEXT:    .cfi_offset %esi, -8
555 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
556 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
557 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
558 ; X32-NEXT:    xorl %eax, %eax
559 ; X32-NEXT:    #APP
560 ; X32-NEXT:    cmp %ecx,(%esi)
561 ; X32-NEXT:    #NO_APP
562 ; X32-NEXT:    sete %al
563 ; X32-NEXT:    popl %esi
564 ; X32-NEXT:    .cfi_def_cfa_offset 4
565 ; X32-NEXT:    retl
567 ; X64-LABEL: test_ccne:
568 ; X64:       # %bb.0: # %entry
569 ; X64-NEXT:    xorl %eax, %eax
570 ; X64-NEXT:    #APP
571 ; X64-NEXT:    cmp %rdi,(%rsi)
572 ; X64-NEXT:    #NO_APP
573 ; X64-NEXT:    sete %al
574 ; X64-NEXT:    retq
575 entry:
576   %cc = tail call i32 asm "cmp $2,$1", "={@ccne},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
577   %tobool = icmp eq i32 %cc, 0
578   %rv = zext i1 %tobool to i32
579   ret i32 %rv
583 define i32 @test_ccnz(i64 %nr, i64* %addr) {
584 ; X32-LABEL: test_ccnz:
585 ; X32:       # %bb.0: # %entry
586 ; X32-NEXT:    pushl %esi
587 ; X32-NEXT:    .cfi_def_cfa_offset 8
588 ; X32-NEXT:    .cfi_offset %esi, -8
589 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
590 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
591 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
592 ; X32-NEXT:    xorl %eax, %eax
593 ; X32-NEXT:    #APP
594 ; X32-NEXT:    cmp %ecx,(%esi)
595 ; X32-NEXT:    #NO_APP
596 ; X32-NEXT:    sete %al
597 ; X32-NEXT:    popl %esi
598 ; X32-NEXT:    .cfi_def_cfa_offset 4
599 ; X32-NEXT:    retl
601 ; X64-LABEL: test_ccnz:
602 ; X64:       # %bb.0: # %entry
603 ; X64-NEXT:    xorl %eax, %eax
604 ; X64-NEXT:    #APP
605 ; X64-NEXT:    cmp %rdi,(%rsi)
606 ; X64-NEXT:    #NO_APP
607 ; X64-NEXT:    sete %al
608 ; X64-NEXT:    retq
609 entry:
610   %cc = tail call i32 asm "cmp $2,$1", "={@ccnz},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
611   %tobool = icmp eq i32 %cc, 0
612   %rv = zext i1 %tobool to i32
613   ret i32 %rv
617 define i32 @test_ccng(i64 %nr, i64* %addr) {
618 ; X32-LABEL: test_ccng:
619 ; X32:       # %bb.0: # %entry
620 ; X32-NEXT:    pushl %esi
621 ; X32-NEXT:    .cfi_def_cfa_offset 8
622 ; X32-NEXT:    .cfi_offset %esi, -8
623 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
624 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
625 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
626 ; X32-NEXT:    xorl %eax, %eax
627 ; X32-NEXT:    #APP
628 ; X32-NEXT:    cmp %ecx,(%esi)
629 ; X32-NEXT:    #NO_APP
630 ; X32-NEXT:    setg %al
631 ; X32-NEXT:    popl %esi
632 ; X32-NEXT:    .cfi_def_cfa_offset 4
633 ; X32-NEXT:    retl
635 ; X64-LABEL: test_ccng:
636 ; X64:       # %bb.0: # %entry
637 ; X64-NEXT:    xorl %eax, %eax
638 ; X64-NEXT:    #APP
639 ; X64-NEXT:    cmp %rdi,(%rsi)
640 ; X64-NEXT:    #NO_APP
641 ; X64-NEXT:    setg %al
642 ; X64-NEXT:    retq
643 entry:
644   %cc = tail call i32 asm "cmp $2,$1", "={@ccng},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
645   %tobool = icmp eq i32 %cc, 0
646   %rv = zext i1 %tobool to i32
647   ret i32 %rv
651 define i32 @test_ccnge(i64 %nr, i64* %addr) {
652 ; X32-LABEL: test_ccnge:
653 ; X32:       # %bb.0: # %entry
654 ; X32-NEXT:    pushl %esi
655 ; X32-NEXT:    .cfi_def_cfa_offset 8
656 ; X32-NEXT:    .cfi_offset %esi, -8
657 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
658 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
659 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
660 ; X32-NEXT:    xorl %eax, %eax
661 ; X32-NEXT:    #APP
662 ; X32-NEXT:    cmp %ecx,(%esi)
663 ; X32-NEXT:    #NO_APP
664 ; X32-NEXT:    setge %al
665 ; X32-NEXT:    popl %esi
666 ; X32-NEXT:    .cfi_def_cfa_offset 4
667 ; X32-NEXT:    retl
669 ; X64-LABEL: test_ccnge:
670 ; X64:       # %bb.0: # %entry
671 ; X64-NEXT:    xorl %eax, %eax
672 ; X64-NEXT:    #APP
673 ; X64-NEXT:    cmp %rdi,(%rsi)
674 ; X64-NEXT:    #NO_APP
675 ; X64-NEXT:    setge %al
676 ; X64-NEXT:    retq
677 entry:
678   %cc = tail call i32 asm "cmp $2,$1", "={@ccnge},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
679   %tobool = icmp eq i32 %cc, 0
680   %rv = zext i1 %tobool to i32
681   ret i32 %rv
685 define i32 @test_ccnl(i64 %nr, i64* %addr) {
686 ; X32-LABEL: test_ccnl:
687 ; X32:       # %bb.0: # %entry
688 ; X32-NEXT:    pushl %esi
689 ; X32-NEXT:    .cfi_def_cfa_offset 8
690 ; X32-NEXT:    .cfi_offset %esi, -8
691 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
692 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
693 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
694 ; X32-NEXT:    xorl %eax, %eax
695 ; X32-NEXT:    #APP
696 ; X32-NEXT:    cmp %ecx,(%esi)
697 ; X32-NEXT:    #NO_APP
698 ; X32-NEXT:    setl %al
699 ; X32-NEXT:    popl %esi
700 ; X32-NEXT:    .cfi_def_cfa_offset 4
701 ; X32-NEXT:    retl
703 ; X64-LABEL: test_ccnl:
704 ; X64:       # %bb.0: # %entry
705 ; X64-NEXT:    xorl %eax, %eax
706 ; X64-NEXT:    #APP
707 ; X64-NEXT:    cmp %rdi,(%rsi)
708 ; X64-NEXT:    #NO_APP
709 ; X64-NEXT:    setl %al
710 ; X64-NEXT:    retq
711 entry:
712   %cc = tail call i32 asm "cmp $2,$1", "={@ccnl},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
713   %tobool = icmp eq i32 %cc, 0
714   %rv = zext i1 %tobool to i32
715   ret i32 %rv
719 define i32 @test_ccnle(i64 %nr, i64* %addr) {
720 ; X32-LABEL: test_ccnle:
721 ; X32:       # %bb.0: # %entry
722 ; X32-NEXT:    pushl %esi
723 ; X32-NEXT:    .cfi_def_cfa_offset 8
724 ; X32-NEXT:    .cfi_offset %esi, -8
725 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
726 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
727 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
728 ; X32-NEXT:    xorl %eax, %eax
729 ; X32-NEXT:    #APP
730 ; X32-NEXT:    cmp %ecx,(%esi)
731 ; X32-NEXT:    #NO_APP
732 ; X32-NEXT:    setle %al
733 ; X32-NEXT:    popl %esi
734 ; X32-NEXT:    .cfi_def_cfa_offset 4
735 ; X32-NEXT:    retl
737 ; X64-LABEL: test_ccnle:
738 ; X64:       # %bb.0: # %entry
739 ; X64-NEXT:    xorl %eax, %eax
740 ; X64-NEXT:    #APP
741 ; X64-NEXT:    cmp %rdi,(%rsi)
742 ; X64-NEXT:    #NO_APP
743 ; X64-NEXT:    setle %al
744 ; X64-NEXT:    retq
745 entry:
746   %cc = tail call i32 asm "cmp $2,$1", "={@ccnle},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
747   %tobool = icmp eq i32 %cc, 0
748   %rv = zext i1 %tobool to i32
749   ret i32 %rv
753 define i32 @test_ccno(i64 %nr, i64* %addr) {
754 ; X32-LABEL: test_ccno:
755 ; X32:       # %bb.0: # %entry
756 ; X32-NEXT:    pushl %esi
757 ; X32-NEXT:    .cfi_def_cfa_offset 8
758 ; X32-NEXT:    .cfi_offset %esi, -8
759 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
760 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
761 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
762 ; X32-NEXT:    xorl %eax, %eax
763 ; X32-NEXT:    #APP
764 ; X32-NEXT:    cmp %ecx,(%esi)
765 ; X32-NEXT:    #NO_APP
766 ; X32-NEXT:    seto %al
767 ; X32-NEXT:    popl %esi
768 ; X32-NEXT:    .cfi_def_cfa_offset 4
769 ; X32-NEXT:    retl
771 ; X64-LABEL: test_ccno:
772 ; X64:       # %bb.0: # %entry
773 ; X64-NEXT:    xorl %eax, %eax
774 ; X64-NEXT:    #APP
775 ; X64-NEXT:    cmp %rdi,(%rsi)
776 ; X64-NEXT:    #NO_APP
777 ; X64-NEXT:    seto %al
778 ; X64-NEXT:    retq
779 entry:
780   %cc = tail call i32 asm "cmp $2,$1", "={@ccno},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
781   %tobool = icmp eq i32 %cc, 0
782   %rv = zext i1 %tobool to i32
783   ret i32 %rv
787 define i32 @test_ccnp(i64 %nr, i64* %addr) {
788 ; X32-LABEL: test_ccnp:
789 ; X32:       # %bb.0: # %entry
790 ; X32-NEXT:    pushl %esi
791 ; X32-NEXT:    .cfi_def_cfa_offset 8
792 ; X32-NEXT:    .cfi_offset %esi, -8
793 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
794 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
795 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
796 ; X32-NEXT:    xorl %eax, %eax
797 ; X32-NEXT:    #APP
798 ; X32-NEXT:    cmp %ecx,(%esi)
799 ; X32-NEXT:    #NO_APP
800 ; X32-NEXT:    setnp %al
801 ; X32-NEXT:    popl %esi
802 ; X32-NEXT:    .cfi_def_cfa_offset 4
803 ; X32-NEXT:    retl
805 ; X64-LABEL: test_ccnp:
806 ; X64:       # %bb.0: # %entry
807 ; X64-NEXT:    xorl %eax, %eax
808 ; X64-NEXT:    #APP
809 ; X64-NEXT:    cmp %rdi,(%rsi)
810 ; X64-NEXT:    #NO_APP
811 ; X64-NEXT:    setnp %al
812 ; X64-NEXT:    retq
813 entry:
814   %cc = tail call i32 asm "cmp $2,$1", "={@ccnp},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
815   %tobool = icmp eq i32 %cc, 0
816   %rv = zext i1 %tobool to i32
817   ret i32 %rv
821 define i32 @test_ccns(i64 %nr, i64* %addr) {
822 ; X32-LABEL: test_ccns:
823 ; X32:       # %bb.0: # %entry
824 ; X32-NEXT:    pushl %esi
825 ; X32-NEXT:    .cfi_def_cfa_offset 8
826 ; X32-NEXT:    .cfi_offset %esi, -8
827 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
828 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
829 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
830 ; X32-NEXT:    xorl %eax, %eax
831 ; X32-NEXT:    #APP
832 ; X32-NEXT:    cmp %ecx,(%esi)
833 ; X32-NEXT:    #NO_APP
834 ; X32-NEXT:    sets %al
835 ; X32-NEXT:    popl %esi
836 ; X32-NEXT:    .cfi_def_cfa_offset 4
837 ; X32-NEXT:    retl
839 ; X64-LABEL: test_ccns:
840 ; X64:       # %bb.0: # %entry
841 ; X64-NEXT:    xorl %eax, %eax
842 ; X64-NEXT:    #APP
843 ; X64-NEXT:    cmp %rdi,(%rsi)
844 ; X64-NEXT:    #NO_APP
845 ; X64-NEXT:    sets %al
846 ; X64-NEXT:    retq
847 entry:
848   %cc = tail call i32 asm "cmp $2,$1", "={@ccns},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
849   %tobool = icmp eq i32 %cc, 0
850   %rv = zext i1 %tobool to i32
851   ret i32 %rv
855 define i32 @test_cco(i64 %nr, i64* %addr) {
856 ; X32-LABEL: test_cco:
857 ; X32:       # %bb.0: # %entry
858 ; X32-NEXT:    pushl %esi
859 ; X32-NEXT:    .cfi_def_cfa_offset 8
860 ; X32-NEXT:    .cfi_offset %esi, -8
861 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
862 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
863 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
864 ; X32-NEXT:    xorl %eax, %eax
865 ; X32-NEXT:    #APP
866 ; X32-NEXT:    cmp %ecx,(%esi)
867 ; X32-NEXT:    #NO_APP
868 ; X32-NEXT:    setno %al
869 ; X32-NEXT:    popl %esi
870 ; X32-NEXT:    .cfi_def_cfa_offset 4
871 ; X32-NEXT:    retl
873 ; X64-LABEL: test_cco:
874 ; X64:       # %bb.0: # %entry
875 ; X64-NEXT:    xorl %eax, %eax
876 ; X64-NEXT:    #APP
877 ; X64-NEXT:    cmp %rdi,(%rsi)
878 ; X64-NEXT:    #NO_APP
879 ; X64-NEXT:    setno %al
880 ; X64-NEXT:    retq
881 entry:
882   %cc = tail call i32 asm "cmp $2,$1", "={@cco},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
883   %tobool = icmp eq i32 %cc, 0
884   %rv = zext i1 %tobool to i32
885   ret i32 %rv
889 define i32 @test_ccp(i64 %nr, i64* %addr) {
890 ; X32-LABEL: test_ccp:
891 ; X32:       # %bb.0: # %entry
892 ; X32-NEXT:    pushl %esi
893 ; X32-NEXT:    .cfi_def_cfa_offset 8
894 ; X32-NEXT:    .cfi_offset %esi, -8
895 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
896 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
897 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
898 ; X32-NEXT:    xorl %eax, %eax
899 ; X32-NEXT:    #APP
900 ; X32-NEXT:    cmp %ecx,(%esi)
901 ; X32-NEXT:    #NO_APP
902 ; X32-NEXT:    setnp %al
903 ; X32-NEXT:    popl %esi
904 ; X32-NEXT:    .cfi_def_cfa_offset 4
905 ; X32-NEXT:    retl
907 ; X64-LABEL: test_ccp:
908 ; X64:       # %bb.0: # %entry
909 ; X64-NEXT:    xorl %eax, %eax
910 ; X64-NEXT:    #APP
911 ; X64-NEXT:    cmp %rdi,(%rsi)
912 ; X64-NEXT:    #NO_APP
913 ; X64-NEXT:    setnp %al
914 ; X64-NEXT:    retq
915 entry:
916   %cc = tail call i32 asm "cmp $2,$1", "={@ccp},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
917   %tobool = icmp eq i32 %cc, 0
918   %rv = zext i1 %tobool to i32
919   ret i32 %rv
923 define i32 @test_ccs(i64 %nr, i64* %addr) {
924 ; X32-LABEL: test_ccs:
925 ; X32:       # %bb.0: # %entry
926 ; X32-NEXT:    pushl %esi
927 ; X32-NEXT:    .cfi_def_cfa_offset 8
928 ; X32-NEXT:    .cfi_offset %esi, -8
929 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %ecx
930 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %edx
931 ; X32-NEXT:    movl {{[0-9]+}}(%esp), %esi
932 ; X32-NEXT:    xorl %eax, %eax
933 ; X32-NEXT:    #APP
934 ; X32-NEXT:    cmp %ecx,(%esi)
935 ; X32-NEXT:    #NO_APP
936 ; X32-NEXT:    setns %al
937 ; X32-NEXT:    popl %esi
938 ; X32-NEXT:    .cfi_def_cfa_offset 4
939 ; X32-NEXT:    retl
941 ; X64-LABEL: test_ccs:
942 ; X64:       # %bb.0: # %entry
943 ; X64-NEXT:    xorl %eax, %eax
944 ; X64-NEXT:    #APP
945 ; X64-NEXT:    cmp %rdi,(%rsi)
946 ; X64-NEXT:    #NO_APP
947 ; X64-NEXT:    setns %al
948 ; X64-NEXT:    retq
949 entry:
950   %cc = tail call i32 asm "cmp $2,$1", "={@ccs},=*m,r,~{cc},~{dirflag},~{fpsr},~{flags}"(i64* %addr, i64 %nr) nounwind
951   %tobool = icmp eq i32 %cc, 0
952   %rv = zext i1 %tobool to i32
953   ret i32 %rv