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

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

Powered by Google App Engine
This is Rietveld 408576698