Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: tests_lit/llvm2ice_tests/fp.pnacl.ll

Issue 509233002: Convert lit tests to check disassembled assembly. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: reorder some CALLTARGETS-LABEL Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tests_lit/llvm2ice_tests/div_legalization.ll ('k') | tests_lit/llvm2ice_tests/fpconst.pnacl.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; This tries to be a comprehensive test of f32 and f64 operations. 1 ; This tries to be a comprehensive test of f32 and f64 operations.
2 ; The CHECK lines are only checking for basic instruction patterns 2 ; The CHECK lines are only checking for basic instruction patterns
3 ; that should be present regardless of the optimization level, so 3 ; that should be present regardless of the optimization level, so
4 ; there are no special OPTM1 match lines. 4 ; there are no special OPTM1 match lines.
5 5
6 ; RUN: %llvm2ice -O2 --verbose none %s | FileCheck %s 6 ; TODO(jvoung): fix extra "CALLTARGETS" run. The llvm-objdump symbolizer
7 ; RUN: %llvm2ice -Om1 --verbose none %s | FileCheck %s 7 ; doesn't know how to symbolize non-section-local functions.
8 ; The newer LLVM 3.6 one does work, but watch out for other bugs.
9
8 ; RUN: %llvm2ice -O2 --verbose none %s \ 10 ; RUN: %llvm2ice -O2 --verbose none %s \
9 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj 11 ; RUN: | FileCheck --check-prefix=CALLTARGETS %s
12 ; RUN: %llvm2ice -O2 --verbose none %s \
13 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
14 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
10 ; RUN: %llvm2ice -Om1 --verbose none %s \ 15 ; RUN: %llvm2ice -Om1 --verbose none %s \
11 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj 16 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \
17 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
12 ; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s 18 ; RUN: %llvm2ice --verbose none %s | FileCheck --check-prefix=ERRORS %s
13 ; RUN: %llvm2iceinsts %s | %szdiff %s | FileCheck --check-prefix=DUMP %s 19 ; RUN: %llvm2iceinsts %s | %szdiff %s | FileCheck --check-prefix=DUMP %s
14 ; RUN: %llvm2iceinsts --pnacl %s | %szdiff %s \ 20 ; RUN: %llvm2iceinsts --pnacl %s | %szdiff %s \
15 ; RUN: | FileCheck --check-prefix=DUMP %s 21 ; RUN: | FileCheck --check-prefix=DUMP %s
16 22
17 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 23 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
18 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 24 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
19 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 25 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
20 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 26 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
21 27
22 define internal i32 @doubleArgs(double %a, i32 %b, double %c) { 28 define internal i32 @doubleArgs(double %a, i32 %b, double %c) {
23 entry: 29 entry:
24 ret i32 %b 30 ret i32 %b
25 } 31 }
26 ; CHECK-LABEL: doubleArgs 32 ; CHECK-LABEL: doubleArgs
27 ; CHECK: mov eax, dword ptr [esp+12] 33 ; CHECK: mov eax, dword ptr [esp + 12]
28 ; CHECK-NEXT: ret 34 ; CHECK-NEXT: ret
29 35
30 define internal i32 @floatArgs(float %a, i32 %b, float %c) { 36 define internal i32 @floatArgs(float %a, i32 %b, float %c) {
31 entry: 37 entry:
32 ret i32 %b 38 ret i32 %b
33 } 39 }
34 ; CHECK-LABEL: floatArgs 40 ; CHECK-LABEL: floatArgs
35 ; CHECK: mov eax, dword ptr [esp+8] 41 ; CHECK: mov eax, dword ptr [esp + 8]
36 ; CHECK-NEXT: ret 42 ; CHECK-NEXT: ret
37 43
38 define internal i32 @passFpArgs(float %a, double %b, float %c, double %d, float %e, double %f) { 44 define internal i32 @passFpArgs(float %a, double %b, float %c, double %d, float %e, double %f) {
39 entry: 45 entry:
40 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double %b) 46 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double %b)
41 %call1 = call i32 @ignoreFpArgsNoInline(float %c, i32 123, double %d) 47 %call1 = call i32 @ignoreFpArgsNoInline(float %c, i32 123, double %d)
42 %call2 = call i32 @ignoreFpArgsNoInline(float %e, i32 123, double %f) 48 %call2 = call i32 @ignoreFpArgsNoInline(float %e, i32 123, double %f)
43 %add = add i32 %call1, %call 49 %add = add i32 %call1, %call
44 %add3 = add i32 %add, %call2 50 %add3 = add i32 %add, %call2
45 ret i32 %add3 51 ret i32 %add3
46 } 52 }
47 ; CHECK-LABEL: passFpArgs 53 ; CHECK-LABEL: passFpArgs
48 ; CHECK: mov dword ptr [esp+4], 123 54 ; CHECK: mov dword ptr [esp + 4], 123
49 ; CHECK: call ignoreFpArgsNoInline 55 ; CHECK: call ignoreFpArgsNoInline
50 ; CHECK: mov dword ptr [esp+4], 123 56 ; CHECK: mov dword ptr [esp + 4], 123
51 ; CHECK: call ignoreFpArgsNoInline 57 ; CHECK: call ignoreFpArgsNoInline
52 ; CHECK: mov dword ptr [esp+4], 123 58 ; CHECK: mov dword ptr [esp + 4], 123
53 ; CHECK: call ignoreFpArgsNoInline 59 ; CHECK: call ignoreFpArgsNoInline
54 60
55 declare i32 @ignoreFpArgsNoInline(float, i32, double) 61 define i32 @ignoreFpArgsNoInline(float %x, i32 %y, double %z) {
62 entry:
63 ret i32 %y
64 }
56 65
57 define internal i32 @passFpConstArg(float %a, double %b) { 66 define internal i32 @passFpConstArg(float %a, double %b) {
58 entry: 67 entry:
59 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00) 68 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00)
60 ret i32 %call 69 ret i32 %call
61 } 70 }
62 ; CHECK-LABEL: passFpConstArg 71 ; CHECK-LABEL: passFpConstArg
63 ; CHECK: mov dword ptr [esp+4], 123 72 ; CHECK: mov dword ptr [esp + 4], 123
64 ; CHECK: call ignoreFpArgsNoInline 73 ; CHECK: call ignoreFpArgsNoInline
65 74
66 define internal i32 @passFp32ConstArg(float %a) { 75 define internal i32 @passFp32ConstArg(float %a) {
67 entry: 76 entry:
68 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0) 77 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0)
69 ret i32 %call 78 ret i32 %call
70 } 79 }
71 ; CHECK-LABEL: passFp32ConstArg 80 ; CHECK-LABEL: passFp32ConstArg
72 ; CHECK: mov dword ptr [esp+4], 123 81 ; CHECK: mov dword ptr [esp + 4], 123
73 ; CHECK: movss dword ptr [esp+8] 82 ; CHECK: movss dword ptr [esp + 8]
74 ; CHECK: call ignoreFp32ArgsNoInline 83 ; CHECK: call ignoreFp32ArgsNoInline
75 84
76 declare i32 @ignoreFp32ArgsNoInline(float, i32, float) 85 define i32 @ignoreFp32ArgsNoInline(float %x, i32 %y, float %z) {
86 entry:
87 ret i32 %y
88 }
77 89
78 define internal float @returnFloatArg(float %a) { 90 define internal float @returnFloatArg(float %a) {
79 entry: 91 entry:
80 ret float %a 92 ret float %a
81 } 93 }
82 ; CHECK-LABEL: returnFloatArg 94 ; CHECK-LABEL: returnFloatArg
83 ; CHECK: fld dword ptr [esp 95 ; CHECK: fld dword ptr [esp
84 96
85 define internal double @returnDoubleArg(double %a) { 97 define internal double @returnDoubleArg(double %a) {
86 entry: 98 entry:
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 ; CHECK-LABEL: divDouble 186 ; CHECK-LABEL: divDouble
175 ; CHECK: divsd 187 ; CHECK: divsd
176 ; CHECK: fld 188 ; CHECK: fld
177 189
178 define internal float @remFloat(float %a, float %b) { 190 define internal float @remFloat(float %a, float %b) {
179 entry: 191 entry:
180 %div = frem float %a, %b 192 %div = frem float %a, %b
181 ret float %div 193 ret float %div
182 } 194 }
183 ; CHECK-LABEL: remFloat 195 ; CHECK-LABEL: remFloat
184 ; CHECK: call fmodf 196 ; CALLTARGETS-LABEL: remFloat
197 ; CHECK: call -4
198 ; CALLTARGETS: call fmodf
185 199
186 define internal double @remDouble(double %a, double %b) { 200 define internal double @remDouble(double %a, double %b) {
187 entry: 201 entry:
188 %div = frem double %a, %b 202 %div = frem double %a, %b
189 ret double %div 203 ret double %div
190 } 204 }
191 ; CHECK-LABEL: remDouble 205 ; CHECK-LABEL: remDouble
192 ; CHECK: call fmod 206 ; CALLTARGETS-LABEL: remDouble
207 ; CHECK: call -4
208 ; CALLTARGETS: call fmod
193 209
194 define internal float @fptrunc(double %a) { 210 define internal float @fptrunc(double %a) {
195 entry: 211 entry:
196 %conv = fptrunc double %a to float 212 %conv = fptrunc double %a to float
197 ret float %conv 213 ret float %conv
198 } 214 }
199 ; CHECK-LABEL: fptrunc 215 ; CHECK-LABEL: fptrunc
200 ; CHECK: cvtsd2ss 216 ; CHECK: cvtsd2ss
201 ; CHECK: fld 217 ; CHECK: fld
202 218
203 define internal double @fpext(float %a) { 219 define internal double @fpext(float %a) {
204 entry: 220 entry:
205 %conv = fpext float %a to double 221 %conv = fpext float %a to double
206 ret double %conv 222 ret double %conv
207 } 223 }
208 ; CHECK-LABEL: fpext 224 ; CHECK-LABEL: fpext
209 ; CHECK: cvtss2sd 225 ; CHECK: cvtss2sd
210 ; CHECK: fld 226 ; CHECK: fld
211 227
212 define internal i64 @doubleToSigned64(double %a) { 228 define internal i64 @doubleToSigned64(double %a) {
213 entry: 229 entry:
214 %conv = fptosi double %a to i64 230 %conv = fptosi double %a to i64
215 ret i64 %conv 231 ret i64 %conv
216 } 232 }
217 ; CHECK-LABEL: doubleToSigned64 233 ; CHECK-LABEL: doubleToSigned64
218 ; CHECK: call cvtdtosi64 234 ; CALLTARGETS-LABEL: doubleToSigned64
235 ; CHECK: call -4
236 ; CALLTARGETS: call cvtdtosi64
219 237
220 define internal i64 @floatToSigned64(float %a) { 238 define internal i64 @floatToSigned64(float %a) {
221 entry: 239 entry:
222 %conv = fptosi float %a to i64 240 %conv = fptosi float %a to i64
223 ret i64 %conv 241 ret i64 %conv
224 } 242 }
225 ; CHECK-LABEL: floatToSigned64 243 ; CHECK-LABEL: floatToSigned64
226 ; CHECK: call cvtftosi64 244 ; CALLTARGETS-LABEL: floatToSigned64
245 ; CHECK: call -4
246 ; CALLTARGETS: call cvtftosi64
227 247
228 define internal i64 @doubleToUnsigned64(double %a) { 248 define internal i64 @doubleToUnsigned64(double %a) {
229 entry: 249 entry:
230 %conv = fptoui double %a to i64 250 %conv = fptoui double %a to i64
231 ret i64 %conv 251 ret i64 %conv
232 } 252 }
233 ; CHECK-LABEL: doubleToUnsigned64 253 ; CHECK-LABEL: doubleToUnsigned64
234 ; CHECK: call cvtdtoui64 254 ; CALLTARGETS-LABEL: doubleToUnsigned64
255 ; CHECK: call -4
256 ; CALLTARGETS: call cvtdtoui64
235 257
236 define internal i64 @floatToUnsigned64(float %a) { 258 define internal i64 @floatToUnsigned64(float %a) {
237 entry: 259 entry:
238 %conv = fptoui float %a to i64 260 %conv = fptoui float %a to i64
239 ret i64 %conv 261 ret i64 %conv
240 } 262 }
241 ; CHECK-LABEL: floatToUnsigned64 263 ; CHECK-LABEL: floatToUnsigned64
242 ; CHECK: call cvtftoui64 264 ; CALLTARGETS-LABEL: floatToUnsigned64
265 ; CHECK: call -4
266 ; CALLTARGETS: call cvtftoui64
243 267
244 define internal i32 @doubleToSigned32(double %a) { 268 define internal i32 @doubleToSigned32(double %a) {
245 entry: 269 entry:
246 %conv = fptosi double %a to i32 270 %conv = fptosi double %a to i32
247 ret i32 %conv 271 ret i32 %conv
248 } 272 }
249 ; CHECK-LABEL: doubleToSigned32 273 ; CHECK-LABEL: doubleToSigned32
250 ; CHECK: cvtsd2si 274 ; CHECK: cvtsd2si
251 275
252 define internal i32 @floatToSigned32(float %a) { 276 define internal i32 @floatToSigned32(float %a) {
253 entry: 277 entry:
254 %conv = fptosi float %a to i32 278 %conv = fptosi float %a to i32
255 ret i32 %conv 279 ret i32 %conv
256 } 280 }
257 ; CHECK-LABEL: floatToSigned32 281 ; CHECK-LABEL: floatToSigned32
258 ; CHECK: cvtss2si 282 ; CHECK: cvtss2si
259 283
260 define internal i32 @doubleToUnsigned32(double %a) { 284 define internal i32 @doubleToUnsigned32(double %a) {
261 entry: 285 entry:
262 %conv = fptoui double %a to i32 286 %conv = fptoui double %a to i32
263 ret i32 %conv 287 ret i32 %conv
264 } 288 }
265 ; CHECK-LABEL: doubleToUnsigned32 289 ; CHECK-LABEL: doubleToUnsigned32
266 ; CHECK: call cvtdtoui32 290 ; CALLTARGETS-LABEL: doubleToUnsigned32
291 ; CHECK: call -4
292 ; CALLTARGETS: call cvtdtoui32
267 293
268 define internal i32 @floatToUnsigned32(float %a) { 294 define internal i32 @floatToUnsigned32(float %a) {
269 entry: 295 entry:
270 %conv = fptoui float %a to i32 296 %conv = fptoui float %a to i32
271 ret i32 %conv 297 ret i32 %conv
272 } 298 }
273 ; CHECK-LABEL: floatToUnsigned32 299 ; CHECK-LABEL: floatToUnsigned32
274 ; CHECK: call cvtftoui32 300 ; CALLTARGETS-LABEL: floatToUnsigned32
301 ; CHECK: call -4
302 ; CALLTARGETS: call cvtftoui32
303
275 304
276 define internal i32 @doubleToSigned16(double %a) { 305 define internal i32 @doubleToSigned16(double %a) {
277 entry: 306 entry:
278 %conv = fptosi double %a to i16 307 %conv = fptosi double %a to i16
279 %conv.ret_ext = sext i16 %conv to i32 308 %conv.ret_ext = sext i16 %conv to i32
280 ret i32 %conv.ret_ext 309 ret i32 %conv.ret_ext
281 } 310 }
282 ; CHECK-LABEL: doubleToSigned16 311 ; CHECK-LABEL: doubleToSigned16
283 ; CHECK: cvtsd2si 312 ; CHECK: cvtsd2si
284 ; CHECK: movsx 313 ; CHECK: movsx
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 ; CHECK-LABEL: floatToUnsigned1 401 ; CHECK-LABEL: floatToUnsigned1
373 ; CHECK: cvtss2si 402 ; CHECK: cvtss2si
374 ; CHECK: and eax, 1 403 ; CHECK: and eax, 1
375 404
376 define internal double @signed64ToDouble(i64 %a) { 405 define internal double @signed64ToDouble(i64 %a) {
377 entry: 406 entry:
378 %conv = sitofp i64 %a to double 407 %conv = sitofp i64 %a to double
379 ret double %conv 408 ret double %conv
380 } 409 }
381 ; CHECK-LABEL: signed64ToDouble 410 ; CHECK-LABEL: signed64ToDouble
382 ; CHECK: call cvtsi64tod 411 ; CALLTARGETS-LABEL: signed64ToDouble
412 ; CHECK: call -4
413 ; CALLTARGETS: call cvtsi64tod
383 ; CHECK: fstp 414 ; CHECK: fstp
384 415
385 define internal float @signed64ToFloat(i64 %a) { 416 define internal float @signed64ToFloat(i64 %a) {
386 entry: 417 entry:
387 %conv = sitofp i64 %a to float 418 %conv = sitofp i64 %a to float
388 ret float %conv 419 ret float %conv
389 } 420 }
390 ; CHECK-LABEL: signed64ToFloat 421 ; CHECK-LABEL: signed64ToFloat
391 ; CHECK: call cvtsi64tof 422 ; CALLTARGETS-LABEL: signed64ToFloat
423 ; CHECK: call -4
424 ; CALLTARGETS: call cvtsi64tof
392 ; CHECK: fstp 425 ; CHECK: fstp
393 426
394 define internal double @unsigned64ToDouble(i64 %a) { 427 define internal double @unsigned64ToDouble(i64 %a) {
395 entry: 428 entry:
396 %conv = uitofp i64 %a to double 429 %conv = uitofp i64 %a to double
397 ret double %conv 430 ret double %conv
398 } 431 }
399 ; CHECK-LABEL: unsigned64ToDouble 432 ; CHECK-LABEL: unsigned64ToDouble
400 ; CHECK: call cvtui64tod 433 ; CALLTARGETS-LABEL: unsigned64ToDouble
434 ; CHECK: call -4
435 ; CALLTARGETS: call cvtui64tod
401 ; CHECK: fstp 436 ; CHECK: fstp
402 437
403 define internal float @unsigned64ToFloat(i64 %a) { 438 define internal float @unsigned64ToFloat(i64 %a) {
404 entry: 439 entry:
405 %conv = uitofp i64 %a to float 440 %conv = uitofp i64 %a to float
406 ret float %conv 441 ret float %conv
407 } 442 }
408 ; CHECK-LABEL: unsigned64ToFloat 443 ; CHECK-LABEL: unsigned64ToFloat
409 ; CHECK: call cvtui64tof 444 ; CALLTARGETS-LABEL: unsigned64ToFloat
445 ; CHECK: call -4
446 ; CALLTARGETS: call cvtui64tof
410 ; CHECK: fstp 447 ; CHECK: fstp
411 448
412 define internal double @unsigned64ToDoubleConst() { 449 define internal double @unsigned64ToDoubleConst() {
413 entry: 450 entry:
414 %conv = uitofp i64 12345678901234 to double 451 %conv = uitofp i64 12345678901234 to double
415 ret double %conv 452 ret double %conv
416 } 453 }
417 ; CHECK-LABEL: unsigned64ToDouble 454 ; CHECK-LABEL: unsigned64ToDouble
418 ; CHECK: mov dword ptr [esp+4], 2874 455 ; CALLTARGETS-LABEL: unsigned64ToDouble
456 ; CHECK: mov dword ptr [esp + 4], 2874
419 ; CHECK: mov dword ptr [esp], 1942892530 457 ; CHECK: mov dword ptr [esp], 1942892530
420 ; CHECK: call cvtui64tod 458 ; CHECK: call -4
459 ; CALLTARGETS: call cvtui64tod
421 ; CHECK: fstp 460 ; CHECK: fstp
422 461
423 define internal double @signed32ToDouble(i32 %a) { 462 define internal double @signed32ToDouble(i32 %a) {
424 entry: 463 entry:
425 %conv = sitofp i32 %a to double 464 %conv = sitofp i32 %a to double
426 ret double %conv 465 ret double %conv
427 } 466 }
428 ; CHECK-LABEL: signed32ToDouble 467 ; CHECK-LABEL: signed32ToDouble
429 ; CHECK: cvtsi2sd 468 ; CHECK: cvtsi2sd
430 ; CHECK: fld 469 ; CHECK: fld
431 470
432 define internal float @signed32ToFloat(i32 %a) { 471 define internal float @signed32ToFloat(i32 %a) {
433 entry: 472 entry:
434 %conv = sitofp i32 %a to float 473 %conv = sitofp i32 %a to float
435 ret float %conv 474 ret float %conv
436 } 475 }
437 ; CHECK-LABEL: signed32ToFloat 476 ; CHECK-LABEL: signed32ToFloat
438 ; CHECK: cvtsi2ss 477 ; CHECK: cvtsi2ss
439 ; CHECK: fld 478 ; CHECK: fld
440 479
441 define internal double @unsigned32ToDouble(i32 %a) { 480 define internal double @unsigned32ToDouble(i32 %a) {
442 entry: 481 entry:
443 %conv = uitofp i32 %a to double 482 %conv = uitofp i32 %a to double
444 ret double %conv 483 ret double %conv
445 } 484 }
446 ; CHECK-LABEL: unsigned32ToDouble 485 ; CHECK-LABEL: unsigned32ToDouble
447 ; CHECK: call cvtui32tod 486 ; CALLTARGETS-LABEL: unsigned32ToDouble
487 ; CHECK: call -4
488 ; CALLTARGETS: call cvtui32tod
448 ; CHECK: fstp 489 ; CHECK: fstp
449 490
450 define internal float @unsigned32ToFloat(i32 %a) { 491 define internal float @unsigned32ToFloat(i32 %a) {
451 entry: 492 entry:
452 %conv = uitofp i32 %a to float 493 %conv = uitofp i32 %a to float
453 ret float %conv 494 ret float %conv
454 } 495 }
455 ; CHECK-LABEL: unsigned32ToFloat 496 ; CHECK-LABEL: unsigned32ToFloat
456 ; CHECK: call cvtui32tof 497 ; CALLTARGETS-LABEL: unsigned32ToFloat
498 ; CHECK: call -4
499 ; CALLTARGETS: call cvtui32tof
457 ; CHECK: fstp 500 ; CHECK: fstp
458 501
459 define internal double @signed16ToDouble(i32 %a) { 502 define internal double @signed16ToDouble(i32 %a) {
460 entry: 503 entry:
461 %a.arg_trunc = trunc i32 %a to i16 504 %a.arg_trunc = trunc i32 %a to i16
462 %conv = sitofp i16 %a.arg_trunc to double 505 %conv = sitofp i16 %a.arg_trunc to double
463 ret double %conv 506 ret double %conv
464 } 507 }
465 ; CHECK-LABEL: signed16ToDouble 508 ; CHECK-LABEL: signed16ToDouble
466 ; CHECK: cvtsi2sd 509 ; CHECK: cvtsi2sd
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 614
572 if.then2: ; preds = %if.end 615 if.then2: ; preds = %if.end
573 call void @func() 616 call void @func()
574 br label %if.end3 617 br label %if.end3
575 618
576 if.end3: ; preds = %if.then2, %if.end 619 if.end3: ; preds = %if.then2, %if.end
577 ret void 620 ret void
578 } 621 }
579 ; CHECK-LABEL: fcmpEq 622 ; CHECK-LABEL: fcmpEq
580 ; CHECK: ucomiss 623 ; CHECK: ucomiss
581 ; CHECK: jne . 624 ; CHECK: jne {{[0-9]}}
582 ; CHECK-NEXT: jp . 625 ; CHECK-NEXT: jp {{[0-9]}}
583 ; CHECK: call func 626 ; CHECK: call func
584 ; CHECK: ucomisd 627 ; CHECK: ucomisd
585 ; CHECK: jne . 628 ; CHECK: jne {{[0-9]}}
586 ; CHECK-NEXT: jp . 629 ; CHECK-NEXT: jp {{[0-9]}}
587 ; CHECK: call func 630 ; CHECK: call func
588 631
589 declare void @func() 632 define void @func() {
633 entry:
634 ret void
635 }
590 636
591 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { 637 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
592 entry: 638 entry:
593 %cmp = fcmp une float %a, %b 639 %cmp = fcmp une float %a, %b
594 br i1 %cmp, label %if.then, label %if.end 640 br i1 %cmp, label %if.then, label %if.end
595 641
596 if.then: ; preds = %entry 642 if.then: ; preds = %entry
597 call void @func() 643 call void @func()
598 br label %if.end 644 br label %if.end
599 645
600 if.end: ; preds = %if.then, %entry 646 if.end: ; preds = %if.then, %entry
601 %cmp1 = fcmp une double %c, %d 647 %cmp1 = fcmp une double %c, %d
602 br i1 %cmp1, label %if.then2, label %if.end3 648 br i1 %cmp1, label %if.then2, label %if.end3
603 649
604 if.then2: ; preds = %if.end 650 if.then2: ; preds = %if.end
605 call void @func() 651 call void @func()
606 br label %if.end3 652 br label %if.end3
607 653
608 if.end3: ; preds = %if.then2, %if.end 654 if.end3: ; preds = %if.then2, %if.end
609 ret void 655 ret void
610 } 656 }
611 ; CHECK-LABEL: fcmpNe 657 ; CHECK-LABEL: fcmpNe
612 ; CHECK: ucomiss 658 ; CHECK: ucomiss
613 ; CHECK: jne . 659 ; CHECK: jne {{[0-9]}}
614 ; CHECK-NEXT: jp . 660 ; CHECK-NEXT: jp {{[0-9]}}
615 ; CHECK: call func 661 ; CHECK: call func
616 ; CHECK: ucomisd 662 ; CHECK: ucomisd
617 ; CHECK: jne . 663 ; CHECK: jne {{[0-9]}}
618 ; CHECK-NEXT: jp . 664 ; CHECK-NEXT: jp {{[0-9]}}
619 ; CHECK: call func 665 ; CHECK: call func
620 666
621 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 667 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
622 entry: 668 entry:
623 %cmp = fcmp ogt float %a, %b 669 %cmp = fcmp ogt float %a, %b
624 br i1 %cmp, label %if.then, label %if.end 670 br i1 %cmp, label %if.then, label %if.end
625 671
626 if.then: ; preds = %entry 672 if.then: ; preds = %entry
627 call void @func() 673 call void @func()
628 br label %if.end 674 br label %if.end
629 675
630 if.end: ; preds = %if.then, %entry 676 if.end: ; preds = %if.then, %entry
631 %cmp1 = fcmp ogt double %c, %d 677 %cmp1 = fcmp ogt double %c, %d
632 br i1 %cmp1, label %if.then2, label %if.end3 678 br i1 %cmp1, label %if.then2, label %if.end3
633 679
634 if.then2: ; preds = %if.end 680 if.then2: ; preds = %if.end
635 call void @func() 681 call void @func()
636 br label %if.end3 682 br label %if.end3
637 683
638 if.end3: ; preds = %if.then2, %if.end 684 if.end3: ; preds = %if.then2, %if.end
639 ret void 685 ret void
640 } 686 }
641 ; CHECK-LABEL: fcmpGt 687 ; CHECK-LABEL: fcmpGt
642 ; CHECK: ucomiss 688 ; CHECK: ucomiss
643 ; CHECK: ja . 689 ; CHECK: ja {{[0-9]}}
644 ; CHECK: call func 690 ; CHECK: call func
645 ; CHECK: ucomisd 691 ; CHECK: ucomisd
646 ; CHECK: ja . 692 ; CHECK: ja {{[0-9]}}
647 ; CHECK: call func 693 ; CHECK: call func
648 694
649 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 695 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
650 entry: 696 entry:
651 %cmp = fcmp ult float %a, %b 697 %cmp = fcmp ult float %a, %b
652 br i1 %cmp, label %if.end, label %if.then 698 br i1 %cmp, label %if.end, label %if.then
653 699
654 if.then: ; preds = %entry 700 if.then: ; preds = %entry
655 call void @func() 701 call void @func()
656 br label %if.end 702 br label %if.end
657 703
658 if.end: ; preds = %entry, %if.then 704 if.end: ; preds = %entry, %if.then
659 %cmp1 = fcmp ult double %c, %d 705 %cmp1 = fcmp ult double %c, %d
660 br i1 %cmp1, label %if.end3, label %if.then2 706 br i1 %cmp1, label %if.end3, label %if.then2
661 707
662 if.then2: ; preds = %if.end 708 if.then2: ; preds = %if.end
663 call void @func() 709 call void @func()
664 br label %if.end3 710 br label %if.end3
665 711
666 if.end3: ; preds = %if.end, %if.then2 712 if.end3: ; preds = %if.end, %if.then2
667 ret void 713 ret void
668 } 714 }
669 ; CHECK-LABEL: fcmpGe 715 ; CHECK-LABEL: fcmpGe
670 ; CHECK: ucomiss 716 ; CHECK: ucomiss
671 ; CHECK: jb . 717 ; CHECK: jb {{[0-9]}}
672 ; CHECK: call func 718 ; CHECK: call func
673 ; CHECK: ucomisd 719 ; CHECK: ucomisd
674 ; CHECK: jb . 720 ; CHECK: jb {{[0-9]}}
675 ; CHECK: call func 721 ; CHECK: call func
676 722
677 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 723 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
678 entry: 724 entry:
679 %cmp = fcmp olt float %a, %b 725 %cmp = fcmp olt float %a, %b
680 br i1 %cmp, label %if.then, label %if.end 726 br i1 %cmp, label %if.then, label %if.end
681 727
682 if.then: ; preds = %entry 728 if.then: ; preds = %entry
683 call void @func() 729 call void @func()
684 br label %if.end 730 br label %if.end
685 731
686 if.end: ; preds = %if.then, %entry 732 if.end: ; preds = %if.then, %entry
687 %cmp1 = fcmp olt double %c, %d 733 %cmp1 = fcmp olt double %c, %d
688 br i1 %cmp1, label %if.then2, label %if.end3 734 br i1 %cmp1, label %if.then2, label %if.end3
689 735
690 if.then2: ; preds = %if.end 736 if.then2: ; preds = %if.end
691 call void @func() 737 call void @func()
692 br label %if.end3 738 br label %if.end3
693 739
694 if.end3: ; preds = %if.then2, %if.end 740 if.end3: ; preds = %if.then2, %if.end
695 ret void 741 ret void
696 } 742 }
697 ; CHECK-LABEL: fcmpLt 743 ; CHECK-LABEL: fcmpLt
698 ; CHECK: ucomiss 744 ; CHECK: ucomiss
699 ; CHECK: ja . 745 ; CHECK: ja {{[0-9]}}
700 ; CHECK: call func 746 ; CHECK: call func
701 ; CHECK: ucomisd 747 ; CHECK: ucomisd
702 ; CHECK: ja . 748 ; CHECK: ja {{[0-9]}}
703 ; CHECK: call func 749 ; CHECK: call func
704 750
705 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 751 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
706 entry: 752 entry:
707 %cmp = fcmp ugt float %a, %b 753 %cmp = fcmp ugt float %a, %b
708 br i1 %cmp, label %if.end, label %if.then 754 br i1 %cmp, label %if.end, label %if.then
709 755
710 if.then: ; preds = %entry 756 if.then: ; preds = %entry
711 call void @func() 757 call void @func()
712 br label %if.end 758 br label %if.end
713 759
714 if.end: ; preds = %entry, %if.then 760 if.end: ; preds = %entry, %if.then
715 %cmp1 = fcmp ugt double %c, %d 761 %cmp1 = fcmp ugt double %c, %d
716 br i1 %cmp1, label %if.end3, label %if.then2 762 br i1 %cmp1, label %if.end3, label %if.then2
717 763
718 if.then2: ; preds = %if.end 764 if.then2: ; preds = %if.end
719 call void @func() 765 call void @func()
720 br label %if.end3 766 br label %if.end3
721 767
722 if.end3: ; preds = %if.end, %if.then2 768 if.end3: ; preds = %if.end, %if.then2
723 ret void 769 ret void
724 } 770 }
725 ; CHECK-LABEL: fcmpLe 771 ; CHECK-LABEL: fcmpLe
726 ; CHECK: ucomiss 772 ; CHECK: ucomiss
727 ; CHECK: jb . 773 ; CHECK: jb {{[0-9]}}
728 ; CHECK: call func 774 ; CHECK: call func
729 ; CHECK: ucomisd 775 ; CHECK: ucomisd
730 ; CHECK: jb . 776 ; CHECK: jb {{[0-9]}}
731 ; CHECK: call func 777 ; CHECK: call func
732 778
733 define internal i32 @fcmpFalseFloat(float %a, float %b) { 779 define internal i32 @fcmpFalseFloat(float %a, float %b) {
734 entry: 780 entry:
735 %cmp = fcmp false float %a, %b 781 %cmp = fcmp false float %a, %b
736 %cmp.ret_ext = zext i1 %cmp to i32 782 %cmp.ret_ext = zext i1 %cmp to i32
737 ret i32 %cmp.ret_ext 783 ret i32 %cmp.ret_ext
738 } 784 }
739 ; CHECK-LABEL: fcmpFalseFloat 785 ; CHECK-LABEL: fcmpFalseFloat
740 ; CHECK: mov {{.*}}, 0 786 ; CHECK: mov {{.*}}, 0
741 787
742 define internal i32 @fcmpFalseDouble(double %a, double %b) { 788 define internal i32 @fcmpFalseDouble(double %a, double %b) {
743 entry: 789 entry:
744 %cmp = fcmp false double %a, %b 790 %cmp = fcmp false double %a, %b
745 %cmp.ret_ext = zext i1 %cmp to i32 791 %cmp.ret_ext = zext i1 %cmp to i32
746 ret i32 %cmp.ret_ext 792 ret i32 %cmp.ret_ext
747 } 793 }
748 ; CHECK-LABEL: fcmpFalseDouble 794 ; CHECK-LABEL: fcmpFalseDouble
749 ; CHECK: mov {{.*}}, 0 795 ; CHECK: mov {{.*}}, 0
750 796
751 define internal i32 @fcmpOeqFloat(float %a, float %b) { 797 define internal i32 @fcmpOeqFloat(float %a, float %b) {
752 entry: 798 entry:
753 %cmp = fcmp oeq float %a, %b 799 %cmp = fcmp oeq float %a, %b
754 %cmp.ret_ext = zext i1 %cmp to i32 800 %cmp.ret_ext = zext i1 %cmp to i32
755 ret i32 %cmp.ret_ext 801 ret i32 %cmp.ret_ext
756 } 802 }
757 ; CHECK-LABEL: fcmpOeqFloat 803 ; CHECK-LABEL: fcmpOeqFloat
758 ; CHECK: ucomiss 804 ; CHECK: ucomiss
759 ; CHECK: jne . 805 ; CHECK: jne {{[0-9]}}
760 ; CHECK: jp . 806 ; CHECK: jp {{[0-9]}}
761 807
762 define internal i32 @fcmpOeqDouble(double %a, double %b) { 808 define internal i32 @fcmpOeqDouble(double %a, double %b) {
763 entry: 809 entry:
764 %cmp = fcmp oeq double %a, %b 810 %cmp = fcmp oeq double %a, %b
765 %cmp.ret_ext = zext i1 %cmp to i32 811 %cmp.ret_ext = zext i1 %cmp to i32
766 ret i32 %cmp.ret_ext 812 ret i32 %cmp.ret_ext
767 } 813 }
768 ; CHECK-LABEL: fcmpOeqDouble 814 ; CHECK-LABEL: fcmpOeqDouble
769 ; CHECK: ucomisd 815 ; CHECK: ucomisd
770 ; CHECK: jne . 816 ; CHECK: jne {{[0-9]}}
771 ; CHECK: jp . 817 ; CHECK: jp {{[0-9]}}
772 818
773 define internal i32 @fcmpOgtFloat(float %a, float %b) { 819 define internal i32 @fcmpOgtFloat(float %a, float %b) {
774 entry: 820 entry:
775 %cmp = fcmp ogt float %a, %b 821 %cmp = fcmp ogt float %a, %b
776 %cmp.ret_ext = zext i1 %cmp to i32 822 %cmp.ret_ext = zext i1 %cmp to i32
777 ret i32 %cmp.ret_ext 823 ret i32 %cmp.ret_ext
778 } 824 }
779 ; CHECK-LABEL: fcmpOgtFloat 825 ; CHECK-LABEL: fcmpOgtFloat
780 ; CHECK: ucomiss 826 ; CHECK: ucomiss
781 ; CHECK: ja . 827 ; CHECK: ja {{[0-9]}}
782 828
783 define internal i32 @fcmpOgtDouble(double %a, double %b) { 829 define internal i32 @fcmpOgtDouble(double %a, double %b) {
784 entry: 830 entry:
785 %cmp = fcmp ogt double %a, %b 831 %cmp = fcmp ogt double %a, %b
786 %cmp.ret_ext = zext i1 %cmp to i32 832 %cmp.ret_ext = zext i1 %cmp to i32
787 ret i32 %cmp.ret_ext 833 ret i32 %cmp.ret_ext
788 } 834 }
789 ; CHECK-LABEL: fcmpOgtDouble 835 ; CHECK-LABEL: fcmpOgtDouble
790 ; CHECK: ucomisd 836 ; CHECK: ucomisd
791 ; CHECK: ja . 837 ; CHECK: ja {{[0-9]}}
792 838
793 define internal i32 @fcmpOgeFloat(float %a, float %b) { 839 define internal i32 @fcmpOgeFloat(float %a, float %b) {
794 entry: 840 entry:
795 %cmp = fcmp oge float %a, %b 841 %cmp = fcmp oge float %a, %b
796 %cmp.ret_ext = zext i1 %cmp to i32 842 %cmp.ret_ext = zext i1 %cmp to i32
797 ret i32 %cmp.ret_ext 843 ret i32 %cmp.ret_ext
798 } 844 }
799 ; CHECK-LABEL: fcmpOgeFloat 845 ; CHECK-LABEL: fcmpOgeFloat
800 ; CHECK: ucomiss 846 ; CHECK: ucomiss
801 ; CHECK: jae . 847 ; CHECK: jae {{[0-9]}}
802 848
803 define internal i32 @fcmpOgeDouble(double %a, double %b) { 849 define internal i32 @fcmpOgeDouble(double %a, double %b) {
804 entry: 850 entry:
805 %cmp = fcmp oge double %a, %b 851 %cmp = fcmp oge double %a, %b
806 %cmp.ret_ext = zext i1 %cmp to i32 852 %cmp.ret_ext = zext i1 %cmp to i32
807 ret i32 %cmp.ret_ext 853 ret i32 %cmp.ret_ext
808 } 854 }
809 ; CHECK-LABEL: fcmpOgeDouble 855 ; CHECK-LABEL: fcmpOgeDouble
810 ; CHECK: ucomisd 856 ; CHECK: ucomisd
811 ; CHECK: jae . 857 ; CHECK: jae {{[0-9]}}
812 858
813 define internal i32 @fcmpOltFloat(float %a, float %b) { 859 define internal i32 @fcmpOltFloat(float %a, float %b) {
814 entry: 860 entry:
815 %cmp = fcmp olt float %a, %b 861 %cmp = fcmp olt float %a, %b
816 %cmp.ret_ext = zext i1 %cmp to i32 862 %cmp.ret_ext = zext i1 %cmp to i32
817 ret i32 %cmp.ret_ext 863 ret i32 %cmp.ret_ext
818 } 864 }
819 ; CHECK-LABEL: fcmpOltFloat 865 ; CHECK-LABEL: fcmpOltFloat
820 ; CHECK: ucomiss 866 ; CHECK: ucomiss
821 ; CHECK: ja . 867 ; CHECK: ja {{[0-9]}}
822 868
823 define internal i32 @fcmpOltDouble(double %a, double %b) { 869 define internal i32 @fcmpOltDouble(double %a, double %b) {
824 entry: 870 entry:
825 %cmp = fcmp olt double %a, %b 871 %cmp = fcmp olt double %a, %b
826 %cmp.ret_ext = zext i1 %cmp to i32 872 %cmp.ret_ext = zext i1 %cmp to i32
827 ret i32 %cmp.ret_ext 873 ret i32 %cmp.ret_ext
828 } 874 }
829 ; CHECK-LABEL: fcmpOltDouble 875 ; CHECK-LABEL: fcmpOltDouble
830 ; CHECK: ucomisd 876 ; CHECK: ucomisd
831 ; CHECK: ja . 877 ; CHECK: ja {{[0-9]}}
832 878
833 define internal i32 @fcmpOleFloat(float %a, float %b) { 879 define internal i32 @fcmpOleFloat(float %a, float %b) {
834 entry: 880 entry:
835 %cmp = fcmp ole float %a, %b 881 %cmp = fcmp ole float %a, %b
836 %cmp.ret_ext = zext i1 %cmp to i32 882 %cmp.ret_ext = zext i1 %cmp to i32
837 ret i32 %cmp.ret_ext 883 ret i32 %cmp.ret_ext
838 } 884 }
839 ; CHECK-LABEL: fcmpOleFloat 885 ; CHECK-LABEL: fcmpOleFloat
840 ; CHECK: ucomiss 886 ; CHECK: ucomiss
841 ; CHECK: jae . 887 ; CHECK: jae {{[0-9]}}
842 888
843 define internal i32 @fcmpOleDouble(double %a, double %b) { 889 define internal i32 @fcmpOleDouble(double %a, double %b) {
844 entry: 890 entry:
845 %cmp = fcmp ole double %a, %b 891 %cmp = fcmp ole double %a, %b
846 %cmp.ret_ext = zext i1 %cmp to i32 892 %cmp.ret_ext = zext i1 %cmp to i32
847 ret i32 %cmp.ret_ext 893 ret i32 %cmp.ret_ext
848 } 894 }
849 ; CHECK-LABEL: fcmpOleDouble 895 ; CHECK-LABEL: fcmpOleDouble
850 ; CHECK: ucomisd 896 ; CHECK: ucomisd
851 ; CHECK: jae . 897 ; CHECK: jae {{[0-9]}}
852 898
853 define internal i32 @fcmpOneFloat(float %a, float %b) { 899 define internal i32 @fcmpOneFloat(float %a, float %b) {
854 entry: 900 entry:
855 %cmp = fcmp one float %a, %b 901 %cmp = fcmp one float %a, %b
856 %cmp.ret_ext = zext i1 %cmp to i32 902 %cmp.ret_ext = zext i1 %cmp to i32
857 ret i32 %cmp.ret_ext 903 ret i32 %cmp.ret_ext
858 } 904 }
859 ; CHECK-LABEL: fcmpOneFloat 905 ; CHECK-LABEL: fcmpOneFloat
860 ; CHECK: ucomiss 906 ; CHECK: ucomiss
861 ; CHECK: jne . 907 ; CHECK: jne {{[0-9]}}
862 908
863 define internal i32 @fcmpOneDouble(double %a, double %b) { 909 define internal i32 @fcmpOneDouble(double %a, double %b) {
864 entry: 910 entry:
865 %cmp = fcmp one double %a, %b 911 %cmp = fcmp one double %a, %b
866 %cmp.ret_ext = zext i1 %cmp to i32 912 %cmp.ret_ext = zext i1 %cmp to i32
867 ret i32 %cmp.ret_ext 913 ret i32 %cmp.ret_ext
868 } 914 }
869 ; CHECK-LABEL: fcmpOneDouble 915 ; CHECK-LABEL: fcmpOneDouble
870 ; CHECK: ucomisd 916 ; CHECK: ucomisd
871 ; CHECK: jne . 917 ; CHECK: jne {{[0-9]}}
872 918
873 define internal i32 @fcmpOrdFloat(float %a, float %b) { 919 define internal i32 @fcmpOrdFloat(float %a, float %b) {
874 entry: 920 entry:
875 %cmp = fcmp ord float %a, %b 921 %cmp = fcmp ord float %a, %b
876 %cmp.ret_ext = zext i1 %cmp to i32 922 %cmp.ret_ext = zext i1 %cmp to i32
877 ret i32 %cmp.ret_ext 923 ret i32 %cmp.ret_ext
878 } 924 }
879 ; CHECK-LABEL: fcmpOrdFloat 925 ; CHECK-LABEL: fcmpOrdFloat
880 ; CHECK: ucomiss 926 ; CHECK: ucomiss
881 ; CHECK: jnp . 927 ; CHECK: jnp {{[0-9]}}
882 928
883 define internal i32 @fcmpOrdDouble(double %a, double %b) { 929 define internal i32 @fcmpOrdDouble(double %a, double %b) {
884 entry: 930 entry:
885 %cmp = fcmp ord double %a, %b 931 %cmp = fcmp ord double %a, %b
886 %cmp.ret_ext = zext i1 %cmp to i32 932 %cmp.ret_ext = zext i1 %cmp to i32
887 ret i32 %cmp.ret_ext 933 ret i32 %cmp.ret_ext
888 } 934 }
889 ; CHECK-LABEL: fcmpOrdDouble 935 ; CHECK-LABEL: fcmpOrdDouble
890 ; CHECK: ucomisd 936 ; CHECK: ucomisd
891 ; CHECK: jnp . 937 ; CHECK: jnp {{[0-9]}}
892 938
893 define internal i32 @fcmpUeqFloat(float %a, float %b) { 939 define internal i32 @fcmpUeqFloat(float %a, float %b) {
894 entry: 940 entry:
895 %cmp = fcmp ueq float %a, %b 941 %cmp = fcmp ueq float %a, %b
896 %cmp.ret_ext = zext i1 %cmp to i32 942 %cmp.ret_ext = zext i1 %cmp to i32
897 ret i32 %cmp.ret_ext 943 ret i32 %cmp.ret_ext
898 } 944 }
899 ; CHECK-LABEL: fcmpUeqFloat 945 ; CHECK-LABEL: fcmpUeqFloat
900 ; CHECK: ucomiss 946 ; CHECK: ucomiss
901 ; CHECK: je . 947 ; CHECK: je {{[0-9]}}
902 948
903 define internal i32 @fcmpUeqDouble(double %a, double %b) { 949 define internal i32 @fcmpUeqDouble(double %a, double %b) {
904 entry: 950 entry:
905 %cmp = fcmp ueq double %a, %b 951 %cmp = fcmp ueq double %a, %b
906 %cmp.ret_ext = zext i1 %cmp to i32 952 %cmp.ret_ext = zext i1 %cmp to i32
907 ret i32 %cmp.ret_ext 953 ret i32 %cmp.ret_ext
908 } 954 }
909 ; CHECK-LABEL: fcmpUeqDouble 955 ; CHECK-LABEL: fcmpUeqDouble
910 ; CHECK: ucomisd 956 ; CHECK: ucomisd
911 ; CHECK: je . 957 ; CHECK: je {{[0-9]}}
912 958
913 define internal i32 @fcmpUgtFloat(float %a, float %b) { 959 define internal i32 @fcmpUgtFloat(float %a, float %b) {
914 entry: 960 entry:
915 %cmp = fcmp ugt float %a, %b 961 %cmp = fcmp ugt float %a, %b
916 %cmp.ret_ext = zext i1 %cmp to i32 962 %cmp.ret_ext = zext i1 %cmp to i32
917 ret i32 %cmp.ret_ext 963 ret i32 %cmp.ret_ext
918 } 964 }
919 ; CHECK-LABEL: fcmpUgtFloat 965 ; CHECK-LABEL: fcmpUgtFloat
920 ; CHECK: ucomiss 966 ; CHECK: ucomiss
921 ; CHECK: jb . 967 ; CHECK: jb {{[0-9]}}
922 968
923 define internal i32 @fcmpUgtDouble(double %a, double %b) { 969 define internal i32 @fcmpUgtDouble(double %a, double %b) {
924 entry: 970 entry:
925 %cmp = fcmp ugt double %a, %b 971 %cmp = fcmp ugt double %a, %b
926 %cmp.ret_ext = zext i1 %cmp to i32 972 %cmp.ret_ext = zext i1 %cmp to i32
927 ret i32 %cmp.ret_ext 973 ret i32 %cmp.ret_ext
928 } 974 }
929 ; CHECK-LABEL: fcmpUgtDouble 975 ; CHECK-LABEL: fcmpUgtDouble
930 ; CHECK: ucomisd 976 ; CHECK: ucomisd
931 ; CHECK: jb . 977 ; CHECK: jb {{[0-9]}}
932 978
933 define internal i32 @fcmpUgeFloat(float %a, float %b) { 979 define internal i32 @fcmpUgeFloat(float %a, float %b) {
934 entry: 980 entry:
935 %cmp = fcmp uge float %a, %b 981 %cmp = fcmp uge float %a, %b
936 %cmp.ret_ext = zext i1 %cmp to i32 982 %cmp.ret_ext = zext i1 %cmp to i32
937 ret i32 %cmp.ret_ext 983 ret i32 %cmp.ret_ext
938 } 984 }
939 ; CHECK-LABEL: fcmpUgeFloat 985 ; CHECK-LABEL: fcmpUgeFloat
940 ; CHECK: ucomiss 986 ; CHECK: ucomiss
941 ; CHECK: jbe . 987 ; CHECK: jbe {{[0-9]}}
942 988
943 define internal i32 @fcmpUgeDouble(double %a, double %b) { 989 define internal i32 @fcmpUgeDouble(double %a, double %b) {
944 entry: 990 entry:
945 %cmp = fcmp uge double %a, %b 991 %cmp = fcmp uge double %a, %b
946 %cmp.ret_ext = zext i1 %cmp to i32 992 %cmp.ret_ext = zext i1 %cmp to i32
947 ret i32 %cmp.ret_ext 993 ret i32 %cmp.ret_ext
948 } 994 }
949 ; CHECK-LABEL: fcmpUgeDouble 995 ; CHECK-LABEL: fcmpUgeDouble
950 ; CHECK: ucomisd 996 ; CHECK: ucomisd
951 ; CHECK: jbe . 997 ; CHECK: jbe {{[0-9]}}
952 998
953 define internal i32 @fcmpUltFloat(float %a, float %b) { 999 define internal i32 @fcmpUltFloat(float %a, float %b) {
954 entry: 1000 entry:
955 %cmp = fcmp ult float %a, %b 1001 %cmp = fcmp ult float %a, %b
956 %cmp.ret_ext = zext i1 %cmp to i32 1002 %cmp.ret_ext = zext i1 %cmp to i32
957 ret i32 %cmp.ret_ext 1003 ret i32 %cmp.ret_ext
958 } 1004 }
959 ; CHECK-LABEL: fcmpUltFloat 1005 ; CHECK-LABEL: fcmpUltFloat
960 ; CHECK: ucomiss 1006 ; CHECK: ucomiss
961 ; CHECK: jb . 1007 ; CHECK: jb {{[0-9]}}
962 1008
963 define internal i32 @fcmpUltDouble(double %a, double %b) { 1009 define internal i32 @fcmpUltDouble(double %a, double %b) {
964 entry: 1010 entry:
965 %cmp = fcmp ult double %a, %b 1011 %cmp = fcmp ult double %a, %b
966 %cmp.ret_ext = zext i1 %cmp to i32 1012 %cmp.ret_ext = zext i1 %cmp to i32
967 ret i32 %cmp.ret_ext 1013 ret i32 %cmp.ret_ext
968 } 1014 }
969 ; CHECK-LABEL: fcmpUltDouble 1015 ; CHECK-LABEL: fcmpUltDouble
970 ; CHECK: ucomisd 1016 ; CHECK: ucomisd
971 ; CHECK: jb . 1017 ; CHECK: jb {{[0-9]}}
972 1018
973 define internal i32 @fcmpUleFloat(float %a, float %b) { 1019 define internal i32 @fcmpUleFloat(float %a, float %b) {
974 entry: 1020 entry:
975 %cmp = fcmp ule float %a, %b 1021 %cmp = fcmp ule float %a, %b
976 %cmp.ret_ext = zext i1 %cmp to i32 1022 %cmp.ret_ext = zext i1 %cmp to i32
977 ret i32 %cmp.ret_ext 1023 ret i32 %cmp.ret_ext
978 } 1024 }
979 ; CHECK-LABEL: fcmpUleFloat 1025 ; CHECK-LABEL: fcmpUleFloat
980 ; CHECK: ucomiss 1026 ; CHECK: ucomiss
981 ; CHECK: jbe . 1027 ; CHECK: jbe {{[0-9]}}
982 1028
983 define internal i32 @fcmpUleDouble(double %a, double %b) { 1029 define internal i32 @fcmpUleDouble(double %a, double %b) {
984 entry: 1030 entry:
985 %cmp = fcmp ule double %a, %b 1031 %cmp = fcmp ule double %a, %b
986 %cmp.ret_ext = zext i1 %cmp to i32 1032 %cmp.ret_ext = zext i1 %cmp to i32
987 ret i32 %cmp.ret_ext 1033 ret i32 %cmp.ret_ext
988 } 1034 }
989 ; CHECK-LABEL: fcmpUleDouble 1035 ; CHECK-LABEL: fcmpUleDouble
990 ; CHECK: ucomisd 1036 ; CHECK: ucomisd
991 ; CHECK: jbe . 1037 ; CHECK: jbe {{[0-9]}}
992 1038
993 define internal i32 @fcmpUneFloat(float %a, float %b) { 1039 define internal i32 @fcmpUneFloat(float %a, float %b) {
994 entry: 1040 entry:
995 %cmp = fcmp une float %a, %b 1041 %cmp = fcmp une float %a, %b
996 %cmp.ret_ext = zext i1 %cmp to i32 1042 %cmp.ret_ext = zext i1 %cmp to i32
997 ret i32 %cmp.ret_ext 1043 ret i32 %cmp.ret_ext
998 } 1044 }
999 ; CHECK-LABEL: fcmpUneFloat 1045 ; CHECK-LABEL: fcmpUneFloat
1000 ; CHECK: ucomiss 1046 ; CHECK: ucomiss
1001 ; CHECK: jne . 1047 ; CHECK: jne {{[0-9]}}
1002 ; CHECK: jp . 1048 ; CHECK: jp {{[0-9]}}
1003 1049
1004 define internal i32 @fcmpUneDouble(double %a, double %b) { 1050 define internal i32 @fcmpUneDouble(double %a, double %b) {
1005 entry: 1051 entry:
1006 %cmp = fcmp une double %a, %b 1052 %cmp = fcmp une double %a, %b
1007 %cmp.ret_ext = zext i1 %cmp to i32 1053 %cmp.ret_ext = zext i1 %cmp to i32
1008 ret i32 %cmp.ret_ext 1054 ret i32 %cmp.ret_ext
1009 } 1055 }
1010 ; CHECK-LABEL: fcmpUneDouble 1056 ; CHECK-LABEL: fcmpUneDouble
1011 ; CHECK: ucomisd 1057 ; CHECK: ucomisd
1012 ; CHECK: jne . 1058 ; CHECK: jne {{[0-9]}}
1013 ; CHECK: jp . 1059 ; CHECK: jp {{[0-9]}}
1014 1060
1015 define internal i32 @fcmpUnoFloat(float %a, float %b) { 1061 define internal i32 @fcmpUnoFloat(float %a, float %b) {
1016 entry: 1062 entry:
1017 %cmp = fcmp uno float %a, %b 1063 %cmp = fcmp uno float %a, %b
1018 %cmp.ret_ext = zext i1 %cmp to i32 1064 %cmp.ret_ext = zext i1 %cmp to i32
1019 ret i32 %cmp.ret_ext 1065 ret i32 %cmp.ret_ext
1020 } 1066 }
1021 ; CHECK-LABEL: fcmpUnoFloat 1067 ; CHECK-LABEL: fcmpUnoFloat
1022 ; CHECK: ucomiss 1068 ; CHECK: ucomiss
1023 ; CHECK: jp . 1069 ; CHECK: jp {{[0-9]}}
1024 1070
1025 define internal i32 @fcmpUnoDouble(double %a, double %b) { 1071 define internal i32 @fcmpUnoDouble(double %a, double %b) {
1026 entry: 1072 entry:
1027 %cmp = fcmp uno double %a, %b 1073 %cmp = fcmp uno double %a, %b
1028 %cmp.ret_ext = zext i1 %cmp to i32 1074 %cmp.ret_ext = zext i1 %cmp to i32
1029 ret i32 %cmp.ret_ext 1075 ret i32 %cmp.ret_ext
1030 } 1076 }
1031 ; CHECK-LABEL: fcmpUnoDouble 1077 ; CHECK-LABEL: fcmpUnoDouble
1032 ; CHECK: ucomisd 1078 ; CHECK: ucomisd
1033 ; CHECK: jp . 1079 ; CHECK: jp {{[0-9]}}
1034 1080
1035 define internal i32 @fcmpTrueFloat(float %a, float %b) { 1081 define internal i32 @fcmpTrueFloat(float %a, float %b) {
1036 entry: 1082 entry:
1037 %cmp = fcmp true float %a, %b 1083 %cmp = fcmp true float %a, %b
1038 %cmp.ret_ext = zext i1 %cmp to i32 1084 %cmp.ret_ext = zext i1 %cmp to i32
1039 ret i32 %cmp.ret_ext 1085 ret i32 %cmp.ret_ext
1040 } 1086 }
1041 ; CHECK-LABEL: fcmpTrueFloat 1087 ; CHECK-LABEL: fcmpTrueFloat
1042 ; CHECK: mov {{.*}}, 1 1088 ; CHECK: mov {{.*}}, 1
1043 1089
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1111 ; CHECK: movsd 1157 ; CHECK: movsd
1112 1158
1113 define internal float @selectFloatVarVar(float %a, float %b) { 1159 define internal float @selectFloatVarVar(float %a, float %b) {
1114 entry: 1160 entry:
1115 %cmp = fcmp olt float %a, %b 1161 %cmp = fcmp olt float %a, %b
1116 %cond = select i1 %cmp, float %a, float %b 1162 %cond = select i1 %cmp, float %a, float %b
1117 ret float %cond 1163 ret float %cond
1118 } 1164 }
1119 ; CHECK-LABEL: selectFloatVarVar 1165 ; CHECK-LABEL: selectFloatVarVar
1120 ; CHECK: ucomiss 1166 ; CHECK: ucomiss
1121 ; CHECK: ja . 1167 ; CHECK: ja {{[0-9]}}
1122 ; CHECK: fld 1168 ; CHECK: fld
1123 1169
1124 define internal double @selectDoubleVarVar(double %a, double %b) { 1170 define internal double @selectDoubleVarVar(double %a, double %b) {
1125 entry: 1171 entry:
1126 %cmp = fcmp olt double %a, %b 1172 %cmp = fcmp olt double %a, %b
1127 %cond = select i1 %cmp, double %a, double %b 1173 %cond = select i1 %cmp, double %a, double %b
1128 ret double %cond 1174 ret double %cond
1129 } 1175 }
1130 ; CHECK-LABEL: selectDoubleVarVar 1176 ; CHECK-LABEL: selectDoubleVarVar
1131 ; CHECK: ucomisd 1177 ; CHECK: ucomisd
1132 ; CHECK: ja . 1178 ; CHECK: ja {{[0-9]}}
1133 ; CHECK: fld 1179 ; CHECK: fld
1134 1180
1135 ; ERRORS-NOT: ICE translation error 1181 ; ERRORS-NOT: ICE translation error
1136 ; DUMP-NOT: SZ 1182 ; DUMP-NOT: SZ
OLDNEW
« no previous file with comments | « tests_lit/llvm2ice_tests/div_legalization.ll ('k') | tests_lit/llvm2ice_tests/fpconst.pnacl.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698