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

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

Issue 914263005: Subzero: switch from llvm-objdump to objdump for lit tests (for LLVM merge) (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: fix some line wrap Created 5 years, 10 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/elf_container.ll ('k') | tests_lit/llvm2ice_tests/fpcall.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: %p2i -i %s --args -O2 --verbose none \ 6 ; RUN: %p2i --assemble --disassemble -i %s --args -O2 --verbose none \
7 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ 7 ; RUN: | FileCheck %s
8 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s 8 ; RUN: %p2i --assemble --disassemble -i %s --args -Om1 --verbose none \
9 ; RUN: %p2i -i %s --args -Om1 --verbose none \ 9 ; RUN: | FileCheck %s
10 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \
11 ; RUN: | llvm-objdump -d --symbolize -x86-asm-syntax=intel - | FileCheck %s
12 10
13 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4 11 @__init_array_start = internal constant [0 x i8] zeroinitializer, align 4
14 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4 12 @__fini_array_start = internal constant [0 x i8] zeroinitializer, align 4
15 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8 13 @__tls_template_start = internal constant [0 x i8] zeroinitializer, align 8
16 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4 14 @__tls_template_alignment = internal constant [4 x i8] c"\01\00\00\00", align 4
17 15
18 define internal i32 @doubleArgs(double %a, i32 %b, double %c) { 16 define internal i32 @doubleArgs(double %a, i32 %b, double %c) {
19 entry: 17 entry:
20 ret i32 %b 18 ret i32 %b
21 } 19 }
22 ; CHECK-LABEL: doubleArgs 20 ; CHECK-LABEL: doubleArgs
23 ; CHECK: mov eax, dword ptr [esp + 12] 21 ; CHECK: mov eax,DWORD PTR [esp+0xc]
24 ; CHECK-NEXT: ret 22 ; CHECK-NEXT: ret
25 23
26 define internal i32 @floatArgs(float %a, i32 %b, float %c) { 24 define internal i32 @floatArgs(float %a, i32 %b, float %c) {
27 entry: 25 entry:
28 ret i32 %b 26 ret i32 %b
29 } 27 }
30 ; CHECK-LABEL: floatArgs 28 ; CHECK-LABEL: floatArgs
31 ; CHECK: mov eax, dword ptr [esp + 8] 29 ; CHECK: mov eax,DWORD PTR [esp+0x8]
32 ; CHECK-NEXT: ret 30 ; CHECK-NEXT: ret
33 31
34 define internal i32 @passFpArgs(float %a, double %b, float %c, double %d, float %e, double %f) { 32 define internal i32 @passFpArgs(float %a, double %b, float %c, double %d, float %e, double %f) {
35 entry: 33 entry:
36 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double %b) 34 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double %b)
37 %call1 = call i32 @ignoreFpArgsNoInline(float %c, i32 123, double %d) 35 %call1 = call i32 @ignoreFpArgsNoInline(float %c, i32 123, double %d)
38 %call2 = call i32 @ignoreFpArgsNoInline(float %e, i32 123, double %f) 36 %call2 = call i32 @ignoreFpArgsNoInline(float %e, i32 123, double %f)
39 %add = add i32 %call1, %call 37 %add = add i32 %call1, %call
40 %add3 = add i32 %add, %call2 38 %add3 = add i32 %add, %call2
41 ret i32 %add3 39 ret i32 %add3
42 } 40 }
43 ; CHECK-LABEL: passFpArgs 41 ; CHECK-LABEL: passFpArgs
44 ; CHECK: mov dword ptr [esp + 4], 123 42 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
45 ; CHECK: call ignoreFpArgsNoInline 43 ; CHECK: call {{.*}} R_{{.*}} ignoreFpArgsNoInline
46 ; CHECK: mov dword ptr [esp + 4], 123 44 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
47 ; CHECK: call ignoreFpArgsNoInline 45 ; CHECK: call {{.*}} R_{{.*}} ignoreFpArgsNoInline
48 ; CHECK: mov dword ptr [esp + 4], 123 46 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
49 ; CHECK: call ignoreFpArgsNoInline 47 ; CHECK: call {{.*}} R_{{.*}} ignoreFpArgsNoInline
50 48
51 declare i32 @ignoreFpArgsNoInline(float %x, i32 %y, double %z) 49 declare i32 @ignoreFpArgsNoInline(float %x, i32 %y, double %z)
52 50
53 define internal i32 @passFpConstArg(float %a, double %b) { 51 define internal i32 @passFpConstArg(float %a, double %b) {
54 entry: 52 entry:
55 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00) 53 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00)
56 ret i32 %call 54 ret i32 %call
57 } 55 }
58 ; CHECK-LABEL: passFpConstArg 56 ; CHECK-LABEL: passFpConstArg
59 ; CHECK: mov dword ptr [esp + 4], 123 57 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
60 ; CHECK: call ignoreFpArgsNoInline 58 ; CHECK: call {{.*}} R_{{.*}} ignoreFpArgsNoInline
61 59
62 define internal i32 @passFp32ConstArg(float %a) { 60 define internal i32 @passFp32ConstArg(float %a) {
63 entry: 61 entry:
64 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0) 62 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0)
65 ret i32 %call 63 ret i32 %call
66 } 64 }
67 ; CHECK-LABEL: passFp32ConstArg 65 ; CHECK-LABEL: passFp32ConstArg
68 ; CHECK: mov dword ptr [esp + 4], 123 66 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
69 ; CHECK: movss dword ptr [esp + 8] 67 ; CHECK: movss DWORD PTR [esp+0x8]
70 ; CHECK: call ignoreFp32ArgsNoInline 68 ; CHECK: call {{.*}} R_{{.*}} ignoreFp32ArgsNoInline
71 69
72 define i32 @ignoreFp32ArgsNoInline(float %x, i32 %y, float %z) { 70 declare i32 @ignoreFp32ArgsNoInline(float %x, i32 %y, float %z)
73 entry:
74 ret i32 %y
75 }
76 71
77 define internal float @returnFloatArg(float %a) { 72 define internal float @returnFloatArg(float %a) {
78 entry: 73 entry:
79 ret float %a 74 ret float %a
80 } 75 }
81 ; CHECK-LABEL: returnFloatArg 76 ; CHECK-LABEL: returnFloatArg
82 ; CHECK: fld dword ptr [esp 77 ; CHECK: fld DWORD PTR [esp
83 78
84 define internal double @returnDoubleArg(double %a) { 79 define internal double @returnDoubleArg(double %a) {
85 entry: 80 entry:
86 ret double %a 81 ret double %a
87 } 82 }
88 ; CHECK-LABEL: returnDoubleArg 83 ; CHECK-LABEL: returnDoubleArg
89 ; CHECK: fld qword ptr [esp 84 ; CHECK: fld QWORD PTR [esp
90 85
91 define internal float @returnFloatConst() { 86 define internal float @returnFloatConst() {
92 entry: 87 entry:
93 ret float 0x3FF3AE1480000000 88 ret float 0x3FF3AE1480000000
94 } 89 }
95 ; CHECK-LABEL: returnFloatConst 90 ; CHECK-LABEL: returnFloatConst
96 ; CHECK: fld 91 ; CHECK: fld
97 92
98 define internal double @returnDoubleConst() { 93 define internal double @returnDoubleConst() {
99 entry: 94 entry:
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 ; CHECK-LABEL: divDouble 168 ; CHECK-LABEL: divDouble
174 ; CHECK: divsd 169 ; CHECK: divsd
175 ; CHECK: fld 170 ; CHECK: fld
176 171
177 define internal float @remFloat(float %a, float %b) { 172 define internal float @remFloat(float %a, float %b) {
178 entry: 173 entry:
179 %div = frem float %a, %b 174 %div = frem float %a, %b
180 ret float %div 175 ret float %div
181 } 176 }
182 ; CHECK-LABEL: remFloat 177 ; CHECK-LABEL: remFloat
183 ; CHECK: call fmodf 178 ; CHECK: call {{.*}} R_{{.*}} fmodf
184 179
185 define internal double @remDouble(double %a, double %b) { 180 define internal double @remDouble(double %a, double %b) {
186 entry: 181 entry:
187 %div = frem double %a, %b 182 %div = frem double %a, %b
188 ret double %div 183 ret double %div
189 } 184 }
190 ; CHECK-LABEL: remDouble 185 ; CHECK-LABEL: remDouble
191 ; CHECK: call fmod 186 ; CHECK: call {{.*}} R_{{.*}} fmod
192 187
193 define internal float @fptrunc(double %a) { 188 define internal float @fptrunc(double %a) {
194 entry: 189 entry:
195 %conv = fptrunc double %a to float 190 %conv = fptrunc double %a to float
196 ret float %conv 191 ret float %conv
197 } 192 }
198 ; CHECK-LABEL: fptrunc 193 ; CHECK-LABEL: fptrunc
199 ; CHECK: cvtsd2ss 194 ; CHECK: cvtsd2ss
200 ; CHECK: fld 195 ; CHECK: fld
201 196
202 define internal double @fpext(float %a) { 197 define internal double @fpext(float %a) {
203 entry: 198 entry:
204 %conv = fpext float %a to double 199 %conv = fpext float %a to double
205 ret double %conv 200 ret double %conv
206 } 201 }
207 ; CHECK-LABEL: fpext 202 ; CHECK-LABEL: fpext
208 ; CHECK: cvtss2sd 203 ; CHECK: cvtss2sd
209 ; CHECK: fld 204 ; CHECK: fld
210 205
211 define internal i64 @doubleToSigned64(double %a) { 206 define internal i64 @doubleToSigned64(double %a) {
212 entry: 207 entry:
213 %conv = fptosi double %a to i64 208 %conv = fptosi double %a to i64
214 ret i64 %conv 209 ret i64 %conv
215 } 210 }
216 ; CHECK-LABEL: doubleToSigned64 211 ; CHECK-LABEL: doubleToSigned64
217 ; CHECK: call cvtdtosi64 212 ; CHECK: call {{.*}} R_{{.*}} cvtdtosi64
218 213
219 define internal i64 @floatToSigned64(float %a) { 214 define internal i64 @floatToSigned64(float %a) {
220 entry: 215 entry:
221 %conv = fptosi float %a to i64 216 %conv = fptosi float %a to i64
222 ret i64 %conv 217 ret i64 %conv
223 } 218 }
224 ; CHECK-LABEL: floatToSigned64 219 ; CHECK-LABEL: floatToSigned64
225 ; CHECK: call cvtftosi64 220 ; CHECK: call {{.*}} R_{{.*}} cvtftosi64
226 221
227 define internal i64 @doubleToUnsigned64(double %a) { 222 define internal i64 @doubleToUnsigned64(double %a) {
228 entry: 223 entry:
229 %conv = fptoui double %a to i64 224 %conv = fptoui double %a to i64
230 ret i64 %conv 225 ret i64 %conv
231 } 226 }
232 ; CHECK-LABEL: doubleToUnsigned64 227 ; CHECK-LABEL: doubleToUnsigned64
233 ; CHECK: call cvtdtoui64 228 ; CHECK: call {{.*}} R_{{.*}} cvtdtoui64
234 229
235 define internal i64 @floatToUnsigned64(float %a) { 230 define internal i64 @floatToUnsigned64(float %a) {
236 entry: 231 entry:
237 %conv = fptoui float %a to i64 232 %conv = fptoui float %a to i64
238 ret i64 %conv 233 ret i64 %conv
239 } 234 }
240 ; CHECK-LABEL: floatToUnsigned64 235 ; CHECK-LABEL: floatToUnsigned64
241 ; CHECK: call cvtftoui64 236 ; CHECK: call {{.*}} R_{{.*}} cvtftoui64
242 237
243 define internal i32 @doubleToSigned32(double %a) { 238 define internal i32 @doubleToSigned32(double %a) {
244 entry: 239 entry:
245 %conv = fptosi double %a to i32 240 %conv = fptosi double %a to i32
246 ret i32 %conv 241 ret i32 %conv
247 } 242 }
248 ; CHECK-LABEL: doubleToSigned32 243 ; CHECK-LABEL: doubleToSigned32
249 ; CHECK: cvttsd2si 244 ; CHECK: cvttsd2si
250 245
251 define internal i32 @doubleToSigned32Const() { 246 define internal i32 @doubleToSigned32Const() {
(...skipping 11 matching lines...) Expand all
263 } 258 }
264 ; CHECK-LABEL: floatToSigned32 259 ; CHECK-LABEL: floatToSigned32
265 ; CHECK: cvttss2si 260 ; CHECK: cvttss2si
266 261
267 define internal i32 @doubleToUnsigned32(double %a) { 262 define internal i32 @doubleToUnsigned32(double %a) {
268 entry: 263 entry:
269 %conv = fptoui double %a to i32 264 %conv = fptoui double %a to i32
270 ret i32 %conv 265 ret i32 %conv
271 } 266 }
272 ; CHECK-LABEL: doubleToUnsigned32 267 ; CHECK-LABEL: doubleToUnsigned32
273 ; CHECK: call cvtdtoui32 268 ; CHECK: call {{.*}} R_{{.*}} cvtdtoui32
274 269
275 define internal i32 @floatToUnsigned32(float %a) { 270 define internal i32 @floatToUnsigned32(float %a) {
276 entry: 271 entry:
277 %conv = fptoui float %a to i32 272 %conv = fptoui float %a to i32
278 ret i32 %conv 273 ret i32 %conv
279 } 274 }
280 ; CHECK-LABEL: floatToUnsigned32 275 ; CHECK-LABEL: floatToUnsigned32
281 ; CHECK: call cvtftoui32 276 ; CHECK: call {{.*}} R_{{.*}} cvtftoui32
282
283 277
284 define internal i32 @doubleToSigned16(double %a) { 278 define internal i32 @doubleToSigned16(double %a) {
285 entry: 279 entry:
286 %conv = fptosi double %a to i16 280 %conv = fptosi double %a to i16
287 %conv.ret_ext = sext i16 %conv to i32 281 %conv.ret_ext = sext i16 %conv to i32
288 ret i32 %conv.ret_ext 282 ret i32 %conv.ret_ext
289 } 283 }
290 ; CHECK-LABEL: doubleToSigned16 284 ; CHECK-LABEL: doubleToSigned16
291 ; CHECK: cvttsd2si 285 ; CHECK: cvttsd2si
292 ; CHECK: movsx 286 ; CHECK: movsx
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 ; CHECK: movzx 356 ; CHECK: movzx
363 357
364 define internal i32 @doubleToUnsigned1(double %a) { 358 define internal i32 @doubleToUnsigned1(double %a) {
365 entry: 359 entry:
366 %tobool = fptoui double %a to i1 360 %tobool = fptoui double %a to i1
367 %tobool.ret_ext = zext i1 %tobool to i32 361 %tobool.ret_ext = zext i1 %tobool to i32
368 ret i32 %tobool.ret_ext 362 ret i32 %tobool.ret_ext
369 } 363 }
370 ; CHECK-LABEL: doubleToUnsigned1 364 ; CHECK-LABEL: doubleToUnsigned1
371 ; CHECK: cvttsd2si 365 ; CHECK: cvttsd2si
372 ; CHECK: and eax, 1 366 ; CHECK: and eax,0x1
373 367
374 define internal i32 @floatToUnsigned1(float %a) { 368 define internal i32 @floatToUnsigned1(float %a) {
375 entry: 369 entry:
376 %tobool = fptoui float %a to i1 370 %tobool = fptoui float %a to i1
377 %tobool.ret_ext = zext i1 %tobool to i32 371 %tobool.ret_ext = zext i1 %tobool to i32
378 ret i32 %tobool.ret_ext 372 ret i32 %tobool.ret_ext
379 } 373 }
380 ; CHECK-LABEL: floatToUnsigned1 374 ; CHECK-LABEL: floatToUnsigned1
381 ; CHECK: cvttss2si 375 ; CHECK: cvttss2si
382 ; CHECK: and eax, 1 376 ; CHECK: and eax,0x1
383 377
384 define internal double @signed64ToDouble(i64 %a) { 378 define internal double @signed64ToDouble(i64 %a) {
385 entry: 379 entry:
386 %conv = sitofp i64 %a to double 380 %conv = sitofp i64 %a to double
387 ret double %conv 381 ret double %conv
388 } 382 }
389 ; CHECK-LABEL: signed64ToDouble 383 ; CHECK-LABEL: signed64ToDouble
390 ; CHECK: call cvtsi64tod 384 ; CHECK: call {{.*}} R_{{.*}} cvtsi64tod
391 ; CHECK: fstp qword 385 ; CHECK: fstp QWORD
392 386
393 define internal float @signed64ToFloat(i64 %a) { 387 define internal float @signed64ToFloat(i64 %a) {
394 entry: 388 entry:
395 %conv = sitofp i64 %a to float 389 %conv = sitofp i64 %a to float
396 ret float %conv 390 ret float %conv
397 } 391 }
398 ; CHECK-LABEL: signed64ToFloat 392 ; CHECK-LABEL: signed64ToFloat
399 ; CHECK: call cvtsi64tof 393 ; CHECK: call {{.*}} R_{{.*}} cvtsi64tof
400 ; CHECK: fstp dword 394 ; CHECK: fstp DWORD
401 395
402 define internal double @unsigned64ToDouble(i64 %a) { 396 define internal double @unsigned64ToDouble(i64 %a) {
403 entry: 397 entry:
404 %conv = uitofp i64 %a to double 398 %conv = uitofp i64 %a to double
405 ret double %conv 399 ret double %conv
406 } 400 }
407 ; CHECK-LABEL: unsigned64ToDouble 401 ; CHECK-LABEL: unsigned64ToDouble
408 ; CHECK: call cvtui64tod 402 ; CHECK: call {{.*}} R_{{.*}} cvtui64tod
409 ; CHECK: fstp 403 ; CHECK: fstp
410 404
411 define internal float @unsigned64ToFloat(i64 %a) { 405 define internal float @unsigned64ToFloat(i64 %a) {
412 entry: 406 entry:
413 %conv = uitofp i64 %a to float 407 %conv = uitofp i64 %a to float
414 ret float %conv 408 ret float %conv
415 } 409 }
416 ; CHECK-LABEL: unsigned64ToFloat 410 ; CHECK-LABEL: unsigned64ToFloat
417 ; CHECK: call cvtui64tof 411 ; CHECK: call {{.*}} R_{{.*}} cvtui64tof
418 ; CHECK: fstp 412 ; CHECK: fstp
419 413
420 define internal double @unsigned64ToDoubleConst() { 414 define internal double @unsigned64ToDoubleConst() {
421 entry: 415 entry:
422 %conv = uitofp i64 12345678901234 to double 416 %conv = uitofp i64 12345678901234 to double
423 ret double %conv 417 ret double %conv
424 } 418 }
425 ; CHECK-LABEL: unsigned64ToDouble 419 ; CHECK-LABEL: unsigned64ToDouble
426 ; CHECK: mov dword ptr [esp + 4], 2874 420 ; CHECK: mov DWORD PTR [esp+0x4],0xb3a
427 ; CHECK: mov dword ptr [esp], 1942892530 421 ; CHECK: mov DWORD PTR [esp],0x73ce2ff2
428 ; CHECK: call cvtui64tod 422 ; CHECK: call {{.*}} R_{{.*}} cvtui64tod
429 ; CHECK: fstp 423 ; CHECK: fstp
430 424
431 define internal double @signed32ToDouble(i32 %a) { 425 define internal double @signed32ToDouble(i32 %a) {
432 entry: 426 entry:
433 %conv = sitofp i32 %a to double 427 %conv = sitofp i32 %a to double
434 ret double %conv 428 ret double %conv
435 } 429 }
436 ; CHECK-LABEL: signed32ToDouble 430 ; CHECK-LABEL: signed32ToDouble
437 ; CHECK: cvtsi2sd 431 ; CHECK: cvtsi2sd
438 ; CHECK: fld 432 ; CHECK: fld
(...skipping 15 matching lines...) Expand all
454 ; CHECK-LABEL: signed32ToFloat 448 ; CHECK-LABEL: signed32ToFloat
455 ; CHECK: cvtsi2ss 449 ; CHECK: cvtsi2ss
456 ; CHECK: fld 450 ; CHECK: fld
457 451
458 define internal double @unsigned32ToDouble(i32 %a) { 452 define internal double @unsigned32ToDouble(i32 %a) {
459 entry: 453 entry:
460 %conv = uitofp i32 %a to double 454 %conv = uitofp i32 %a to double
461 ret double %conv 455 ret double %conv
462 } 456 }
463 ; CHECK-LABEL: unsigned32ToDouble 457 ; CHECK-LABEL: unsigned32ToDouble
464 ; CHECK: call cvtui32tod 458 ; CHECK: call {{.*}} R_{{.*}} cvtui32tod
465 ; CHECK: fstp qword 459 ; CHECK: fstp QWORD
466 460
467 define internal float @unsigned32ToFloat(i32 %a) { 461 define internal float @unsigned32ToFloat(i32 %a) {
468 entry: 462 entry:
469 %conv = uitofp i32 %a to float 463 %conv = uitofp i32 %a to float
470 ret float %conv 464 ret float %conv
471 } 465 }
472 ; CHECK-LABEL: unsigned32ToFloat 466 ; CHECK-LABEL: unsigned32ToFloat
473 ; CHECK: call cvtui32tof 467 ; CHECK: call {{.*}} R_{{.*}} cvtui32tof
474 ; CHECK: fstp dword 468 ; CHECK: fstp DWORD
475 469
476 define internal double @signed16ToDouble(i32 %a) { 470 define internal double @signed16ToDouble(i32 %a) {
477 entry: 471 entry:
478 %a.arg_trunc = trunc i32 %a to i16 472 %a.arg_trunc = trunc i32 %a to i16
479 %conv = sitofp i16 %a.arg_trunc to double 473 %conv = sitofp i16 %a.arg_trunc to double
480 ret double %conv 474 ret double %conv
481 } 475 }
482 ; CHECK-LABEL: signed16ToDouble 476 ; CHECK-LABEL: signed16ToDouble
483 ; CHECK: cvtsi2sd 477 ; CHECK: cvtsi2sd
484 ; CHECK: fld qword 478 ; CHECK: fld QWORD
485 479
486 define internal float @signed16ToFloat(i32 %a) { 480 define internal float @signed16ToFloat(i32 %a) {
487 entry: 481 entry:
488 %a.arg_trunc = trunc i32 %a to i16 482 %a.arg_trunc = trunc i32 %a to i16
489 %conv = sitofp i16 %a.arg_trunc to float 483 %conv = sitofp i16 %a.arg_trunc to float
490 ret float %conv 484 ret float %conv
491 } 485 }
492 ; CHECK-LABEL: signed16ToFloat 486 ; CHECK-LABEL: signed16ToFloat
493 ; CHECK: cvtsi2ss 487 ; CHECK: cvtsi2ss
494 ; CHECK: fld dword 488 ; CHECK: fld DWORD
495 489
496 define internal double @unsigned16ToDouble(i32 %a) { 490 define internal double @unsigned16ToDouble(i32 %a) {
497 entry: 491 entry:
498 %a.arg_trunc = trunc i32 %a to i16 492 %a.arg_trunc = trunc i32 %a to i16
499 %conv = uitofp i16 %a.arg_trunc to double 493 %conv = uitofp i16 %a.arg_trunc to double
500 ret double %conv 494 ret double %conv
501 } 495 }
502 ; CHECK-LABEL: unsigned16ToDouble 496 ; CHECK-LABEL: unsigned16ToDouble
503 ; CHECK: cvtsi2sd 497 ; CHECK: cvtsi2sd
504 ; CHECK: fld 498 ; CHECK: fld
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 623
630 if.then2: ; preds = %if.end 624 if.then2: ; preds = %if.end
631 call void @func() 625 call void @func()
632 br label %if.end3 626 br label %if.end3
633 627
634 if.end3: ; preds = %if.then2, %if.end 628 if.end3: ; preds = %if.then2, %if.end
635 ret void 629 ret void
636 } 630 }
637 ; CHECK-LABEL: fcmpEq 631 ; CHECK-LABEL: fcmpEq
638 ; CHECK: ucomiss 632 ; CHECK: ucomiss
639 ; CHECK: jne {{[0-9]}} 633 ; CHECK: jne
640 ; CHECK-NEXT: jp {{[0-9]}} 634 ; CHECK-NEXT: jp
641 ; CHECK: call func 635 ; CHECK: call {{.*}} R_{{.*}} func
642 ; CHECK: ucomisd 636 ; CHECK: ucomisd
643 ; CHECK: jne {{[0-9]}} 637 ; CHECK: jne
644 ; CHECK-NEXT: jp {{[0-9]}} 638 ; CHECK-NEXT: jp
645 ; CHECK: call func 639 ; CHECK: call {{.*}} R_{{.*}} func
646 640
647 define void @func() { 641 declare void @func()
648 entry:
649 ret void
650 }
651 642
652 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { 643 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
653 entry: 644 entry:
654 %cmp = fcmp une float %a, %b 645 %cmp = fcmp une float %a, %b
655 br i1 %cmp, label %if.then, label %if.end 646 br i1 %cmp, label %if.then, label %if.end
656 647
657 if.then: ; preds = %entry 648 if.then: ; preds = %entry
658 call void @func() 649 call void @func()
659 br label %if.end 650 br label %if.end
660 651
661 if.end: ; preds = %if.then, %entry 652 if.end: ; preds = %if.then, %entry
662 %cmp1 = fcmp une double %c, %d 653 %cmp1 = fcmp une double %c, %d
663 br i1 %cmp1, label %if.then2, label %if.end3 654 br i1 %cmp1, label %if.then2, label %if.end3
664 655
665 if.then2: ; preds = %if.end 656 if.then2: ; preds = %if.end
666 call void @func() 657 call void @func()
667 br label %if.end3 658 br label %if.end3
668 659
669 if.end3: ; preds = %if.then2, %if.end 660 if.end3: ; preds = %if.then2, %if.end
670 ret void 661 ret void
671 } 662 }
672 ; CHECK-LABEL: fcmpNe 663 ; CHECK-LABEL: fcmpNe
673 ; CHECK: ucomiss 664 ; CHECK: ucomiss
674 ; CHECK: jne {{[0-9]}} 665 ; CHECK: jne
675 ; CHECK-NEXT: jp {{[0-9]}} 666 ; CHECK-NEXT: jp
676 ; CHECK: call func 667 ; CHECK: call {{.*}} R_{{.*}} func
677 ; CHECK: ucomisd 668 ; CHECK: ucomisd
678 ; CHECK: jne {{[0-9]}} 669 ; CHECK: jne
679 ; CHECK-NEXT: jp {{[0-9]}} 670 ; CHECK-NEXT: jp
680 ; CHECK: call func 671 ; CHECK: call {{.*}} R_{{.*}} func
681 672
682 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 673 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
683 entry: 674 entry:
684 %cmp = fcmp ogt float %a, %b 675 %cmp = fcmp ogt float %a, %b
685 br i1 %cmp, label %if.then, label %if.end 676 br i1 %cmp, label %if.then, label %if.end
686 677
687 if.then: ; preds = %entry 678 if.then: ; preds = %entry
688 call void @func() 679 call void @func()
689 br label %if.end 680 br label %if.end
690 681
691 if.end: ; preds = %if.then, %entry 682 if.end: ; preds = %if.then, %entry
692 %cmp1 = fcmp ogt double %c, %d 683 %cmp1 = fcmp ogt double %c, %d
693 br i1 %cmp1, label %if.then2, label %if.end3 684 br i1 %cmp1, label %if.then2, label %if.end3
694 685
695 if.then2: ; preds = %if.end 686 if.then2: ; preds = %if.end
696 call void @func() 687 call void @func()
697 br label %if.end3 688 br label %if.end3
698 689
699 if.end3: ; preds = %if.then2, %if.end 690 if.end3: ; preds = %if.then2, %if.end
700 ret void 691 ret void
701 } 692 }
702 ; CHECK-LABEL: fcmpGt 693 ; CHECK-LABEL: fcmpGt
703 ; CHECK: ucomiss 694 ; CHECK: ucomiss
704 ; CHECK: ja {{[0-9]}} 695 ; CHECK: ja
705 ; CHECK: call func 696 ; CHECK: call {{.*}} R_{{.*}} func
706 ; CHECK: ucomisd 697 ; CHECK: ucomisd
707 ; CHECK: ja {{[0-9]}} 698 ; CHECK: ja
708 ; CHECK: call func 699 ; CHECK: call {{.*}} R_{{.*}} func
709 700
710 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 701 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
711 entry: 702 entry:
712 %cmp = fcmp ult float %a, %b 703 %cmp = fcmp ult float %a, %b
713 br i1 %cmp, label %if.end, label %if.then 704 br i1 %cmp, label %if.end, label %if.then
714 705
715 if.then: ; preds = %entry 706 if.then: ; preds = %entry
716 call void @func() 707 call void @func()
717 br label %if.end 708 br label %if.end
718 709
719 if.end: ; preds = %entry, %if.then 710 if.end: ; preds = %entry, %if.then
720 %cmp1 = fcmp ult double %c, %d 711 %cmp1 = fcmp ult double %c, %d
721 br i1 %cmp1, label %if.end3, label %if.then2 712 br i1 %cmp1, label %if.end3, label %if.then2
722 713
723 if.then2: ; preds = %if.end 714 if.then2: ; preds = %if.end
724 call void @func() 715 call void @func()
725 br label %if.end3 716 br label %if.end3
726 717
727 if.end3: ; preds = %if.end, %if.then2 718 if.end3: ; preds = %if.end, %if.then2
728 ret void 719 ret void
729 } 720 }
730 ; CHECK-LABEL: fcmpGe 721 ; CHECK-LABEL: fcmpGe
731 ; CHECK: ucomiss 722 ; CHECK: ucomiss
732 ; CHECK: jb {{[0-9]}} 723 ; CHECK: jb
733 ; CHECK: call func 724 ; CHECK: call {{.*}} R_{{.*}} func
734 ; CHECK: ucomisd 725 ; CHECK: ucomisd
735 ; CHECK: jb {{[0-9]}} 726 ; CHECK: jb
736 ; CHECK: call func 727 ; CHECK: call {{.*}} R_{{.*}} func
737 728
738 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 729 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
739 entry: 730 entry:
740 %cmp = fcmp olt float %a, %b 731 %cmp = fcmp olt float %a, %b
741 br i1 %cmp, label %if.then, label %if.end 732 br i1 %cmp, label %if.then, label %if.end
742 733
743 if.then: ; preds = %entry 734 if.then: ; preds = %entry
744 call void @func() 735 call void @func()
745 br label %if.end 736 br label %if.end
746 737
747 if.end: ; preds = %if.then, %entry 738 if.end: ; preds = %if.then, %entry
748 %cmp1 = fcmp olt double %c, %d 739 %cmp1 = fcmp olt double %c, %d
749 br i1 %cmp1, label %if.then2, label %if.end3 740 br i1 %cmp1, label %if.then2, label %if.end3
750 741
751 if.then2: ; preds = %if.end 742 if.then2: ; preds = %if.end
752 call void @func() 743 call void @func()
753 br label %if.end3 744 br label %if.end3
754 745
755 if.end3: ; preds = %if.then2, %if.end 746 if.end3: ; preds = %if.then2, %if.end
756 ret void 747 ret void
757 } 748 }
758 ; CHECK-LABEL: fcmpLt 749 ; CHECK-LABEL: fcmpLt
759 ; CHECK: ucomiss 750 ; CHECK: ucomiss
760 ; CHECK: ja {{[0-9]}} 751 ; CHECK: ja
761 ; CHECK: call func 752 ; CHECK: call {{.*}} R_{{.*}} func
762 ; CHECK: ucomisd 753 ; CHECK: ucomisd
763 ; CHECK: ja {{[0-9]}} 754 ; CHECK: ja
764 ; CHECK: call func 755 ; CHECK: call {{.*}} R_{{.*}} func
765 756
766 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 757 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
767 entry: 758 entry:
768 %cmp = fcmp ugt float %a, %b 759 %cmp = fcmp ugt float %a, %b
769 br i1 %cmp, label %if.end, label %if.then 760 br i1 %cmp, label %if.end, label %if.then
770 761
771 if.then: ; preds = %entry 762 if.then: ; preds = %entry
772 call void @func() 763 call void @func()
773 br label %if.end 764 br label %if.end
774 765
775 if.end: ; preds = %entry, %if.then 766 if.end: ; preds = %entry, %if.then
776 %cmp1 = fcmp ugt double %c, %d 767 %cmp1 = fcmp ugt double %c, %d
777 br i1 %cmp1, label %if.end3, label %if.then2 768 br i1 %cmp1, label %if.end3, label %if.then2
778 769
779 if.then2: ; preds = %if.end 770 if.then2: ; preds = %if.end
780 call void @func() 771 call void @func()
781 br label %if.end3 772 br label %if.end3
782 773
783 if.end3: ; preds = %if.end, %if.then2 774 if.end3: ; preds = %if.end, %if.then2
784 ret void 775 ret void
785 } 776 }
786 ; CHECK-LABEL: fcmpLe 777 ; CHECK-LABEL: fcmpLe
787 ; CHECK: ucomiss 778 ; CHECK: ucomiss
788 ; CHECK: jb {{[0-9]}} 779 ; CHECK: jb
789 ; CHECK: call func 780 ; CHECK: call {{.*}} R_{{.*}} func
790 ; CHECK: ucomisd 781 ; CHECK: ucomisd
791 ; CHECK: jb {{[0-9]}} 782 ; CHECK: jb
792 ; CHECK: call func 783 ; CHECK: call {{.*}} R_{{.*}} func
793 784
794 define internal i32 @fcmpFalseFloat(float %a, float %b) { 785 define internal i32 @fcmpFalseFloat(float %a, float %b) {
795 entry: 786 entry:
796 %cmp = fcmp false float %a, %b 787 %cmp = fcmp false float %a, %b
797 %cmp.ret_ext = zext i1 %cmp to i32 788 %cmp.ret_ext = zext i1 %cmp to i32
798 ret i32 %cmp.ret_ext 789 ret i32 %cmp.ret_ext
799 } 790 }
800 ; CHECK-LABEL: fcmpFalseFloat 791 ; CHECK-LABEL: fcmpFalseFloat
801 ; CHECK: mov {{.*}}, 0 792 ; CHECK: mov {{.*}},0x0
802 793
803 define internal i32 @fcmpFalseDouble(double %a, double %b) { 794 define internal i32 @fcmpFalseDouble(double %a, double %b) {
804 entry: 795 entry:
805 %cmp = fcmp false double %a, %b 796 %cmp = fcmp false double %a, %b
806 %cmp.ret_ext = zext i1 %cmp to i32 797 %cmp.ret_ext = zext i1 %cmp to i32
807 ret i32 %cmp.ret_ext 798 ret i32 %cmp.ret_ext
808 } 799 }
809 ; CHECK-LABEL: fcmpFalseDouble 800 ; CHECK-LABEL: fcmpFalseDouble
810 ; CHECK: mov {{.*}}, 0 801 ; CHECK: mov {{.*}},0x0
811 802
812 define internal i32 @fcmpOeqFloat(float %a, float %b) { 803 define internal i32 @fcmpOeqFloat(float %a, float %b) {
813 entry: 804 entry:
814 %cmp = fcmp oeq float %a, %b 805 %cmp = fcmp oeq float %a, %b
815 %cmp.ret_ext = zext i1 %cmp to i32 806 %cmp.ret_ext = zext i1 %cmp to i32
816 ret i32 %cmp.ret_ext 807 ret i32 %cmp.ret_ext
817 } 808 }
818 ; CHECK-LABEL: fcmpOeqFloat 809 ; CHECK-LABEL: fcmpOeqFloat
819 ; CHECK: ucomiss 810 ; CHECK: ucomiss
820 ; CHECK: jne {{[0-9]}} 811 ; CHECK: jne
821 ; CHECK: jp {{[0-9]}} 812 ; CHECK: jp
822 813
823 define internal i32 @fcmpOeqDouble(double %a, double %b) { 814 define internal i32 @fcmpOeqDouble(double %a, double %b) {
824 entry: 815 entry:
825 %cmp = fcmp oeq double %a, %b 816 %cmp = fcmp oeq double %a, %b
826 %cmp.ret_ext = zext i1 %cmp to i32 817 %cmp.ret_ext = zext i1 %cmp to i32
827 ret i32 %cmp.ret_ext 818 ret i32 %cmp.ret_ext
828 } 819 }
829 ; CHECK-LABEL: fcmpOeqDouble 820 ; CHECK-LABEL: fcmpOeqDouble
830 ; CHECK: ucomisd 821 ; CHECK: ucomisd
831 ; CHECK: jne {{[0-9]}} 822 ; CHECK: jne
832 ; CHECK: jp {{[0-9]}} 823 ; CHECK: jp
833 824
834 define internal i32 @fcmpOgtFloat(float %a, float %b) { 825 define internal i32 @fcmpOgtFloat(float %a, float %b) {
835 entry: 826 entry:
836 %cmp = fcmp ogt float %a, %b 827 %cmp = fcmp ogt float %a, %b
837 %cmp.ret_ext = zext i1 %cmp to i32 828 %cmp.ret_ext = zext i1 %cmp to i32
838 ret i32 %cmp.ret_ext 829 ret i32 %cmp.ret_ext
839 } 830 }
840 ; CHECK-LABEL: fcmpOgtFloat 831 ; CHECK-LABEL: fcmpOgtFloat
841 ; CHECK: ucomiss 832 ; CHECK: ucomiss
842 ; CHECK: ja {{[0-9]}} 833 ; CHECK: ja
843 834
844 define internal i32 @fcmpOgtDouble(double %a, double %b) { 835 define internal i32 @fcmpOgtDouble(double %a, double %b) {
845 entry: 836 entry:
846 %cmp = fcmp ogt double %a, %b 837 %cmp = fcmp ogt double %a, %b
847 %cmp.ret_ext = zext i1 %cmp to i32 838 %cmp.ret_ext = zext i1 %cmp to i32
848 ret i32 %cmp.ret_ext 839 ret i32 %cmp.ret_ext
849 } 840 }
850 ; CHECK-LABEL: fcmpOgtDouble 841 ; CHECK-LABEL: fcmpOgtDouble
851 ; CHECK: ucomisd 842 ; CHECK: ucomisd
852 ; CHECK: ja {{[0-9]}} 843 ; CHECK: ja
853 844
854 define internal i32 @fcmpOgeFloat(float %a, float %b) { 845 define internal i32 @fcmpOgeFloat(float %a, float %b) {
855 entry: 846 entry:
856 %cmp = fcmp oge float %a, %b 847 %cmp = fcmp oge float %a, %b
857 %cmp.ret_ext = zext i1 %cmp to i32 848 %cmp.ret_ext = zext i1 %cmp to i32
858 ret i32 %cmp.ret_ext 849 ret i32 %cmp.ret_ext
859 } 850 }
860 ; CHECK-LABEL: fcmpOgeFloat 851 ; CHECK-LABEL: fcmpOgeFloat
861 ; CHECK: ucomiss 852 ; CHECK: ucomiss
862 ; CHECK: jae {{[0-9]}} 853 ; CHECK: jae
863 854
864 define internal i32 @fcmpOgeDouble(double %a, double %b) { 855 define internal i32 @fcmpOgeDouble(double %a, double %b) {
865 entry: 856 entry:
866 %cmp = fcmp oge double %a, %b 857 %cmp = fcmp oge double %a, %b
867 %cmp.ret_ext = zext i1 %cmp to i32 858 %cmp.ret_ext = zext i1 %cmp to i32
868 ret i32 %cmp.ret_ext 859 ret i32 %cmp.ret_ext
869 } 860 }
870 ; CHECK-LABEL: fcmpOgeDouble 861 ; CHECK-LABEL: fcmpOgeDouble
871 ; CHECK: ucomisd 862 ; CHECK: ucomisd
872 ; CHECK: jae {{[0-9]}} 863 ; CHECK: jae
873 864
874 define internal i32 @fcmpOltFloat(float %a, float %b) { 865 define internal i32 @fcmpOltFloat(float %a, float %b) {
875 entry: 866 entry:
876 %cmp = fcmp olt float %a, %b 867 %cmp = fcmp olt float %a, %b
877 %cmp.ret_ext = zext i1 %cmp to i32 868 %cmp.ret_ext = zext i1 %cmp to i32
878 ret i32 %cmp.ret_ext 869 ret i32 %cmp.ret_ext
879 } 870 }
880 ; CHECK-LABEL: fcmpOltFloat 871 ; CHECK-LABEL: fcmpOltFloat
881 ; CHECK: ucomiss 872 ; CHECK: ucomiss
882 ; CHECK: ja {{[0-9]}} 873 ; CHECK: ja
883 874
884 define internal i32 @fcmpOltDouble(double %a, double %b) { 875 define internal i32 @fcmpOltDouble(double %a, double %b) {
885 entry: 876 entry:
886 %cmp = fcmp olt double %a, %b 877 %cmp = fcmp olt double %a, %b
887 %cmp.ret_ext = zext i1 %cmp to i32 878 %cmp.ret_ext = zext i1 %cmp to i32
888 ret i32 %cmp.ret_ext 879 ret i32 %cmp.ret_ext
889 } 880 }
890 ; CHECK-LABEL: fcmpOltDouble 881 ; CHECK-LABEL: fcmpOltDouble
891 ; CHECK: ucomisd 882 ; CHECK: ucomisd
892 ; CHECK: ja {{[0-9]}} 883 ; CHECK: ja
893 884
894 define internal i32 @fcmpOleFloat(float %a, float %b) { 885 define internal i32 @fcmpOleFloat(float %a, float %b) {
895 entry: 886 entry:
896 %cmp = fcmp ole float %a, %b 887 %cmp = fcmp ole float %a, %b
897 %cmp.ret_ext = zext i1 %cmp to i32 888 %cmp.ret_ext = zext i1 %cmp to i32
898 ret i32 %cmp.ret_ext 889 ret i32 %cmp.ret_ext
899 } 890 }
900 ; CHECK-LABEL: fcmpOleFloat 891 ; CHECK-LABEL: fcmpOleFloat
901 ; CHECK: ucomiss 892 ; CHECK: ucomiss
902 ; CHECK: jae {{[0-9]}} 893 ; CHECK: jae
903 894
904 define internal i32 @fcmpOleDouble(double %a, double %b) { 895 define internal i32 @fcmpOleDouble(double %a, double %b) {
905 entry: 896 entry:
906 %cmp = fcmp ole double %a, %b 897 %cmp = fcmp ole double %a, %b
907 %cmp.ret_ext = zext i1 %cmp to i32 898 %cmp.ret_ext = zext i1 %cmp to i32
908 ret i32 %cmp.ret_ext 899 ret i32 %cmp.ret_ext
909 } 900 }
910 ; CHECK-LABEL: fcmpOleDouble 901 ; CHECK-LABEL: fcmpOleDouble
911 ; CHECK: ucomisd 902 ; CHECK: ucomisd
912 ; CHECK: jae {{[0-9]}} 903 ; CHECK: jae
913 904
914 define internal i32 @fcmpOneFloat(float %a, float %b) { 905 define internal i32 @fcmpOneFloat(float %a, float %b) {
915 entry: 906 entry:
916 %cmp = fcmp one float %a, %b 907 %cmp = fcmp one float %a, %b
917 %cmp.ret_ext = zext i1 %cmp to i32 908 %cmp.ret_ext = zext i1 %cmp to i32
918 ret i32 %cmp.ret_ext 909 ret i32 %cmp.ret_ext
919 } 910 }
920 ; CHECK-LABEL: fcmpOneFloat 911 ; CHECK-LABEL: fcmpOneFloat
921 ; CHECK: ucomiss 912 ; CHECK: ucomiss
922 ; CHECK: jne {{[0-9]}} 913 ; CHECK: jne
923 914
924 define internal i32 @fcmpOneDouble(double %a, double %b) { 915 define internal i32 @fcmpOneDouble(double %a, double %b) {
925 entry: 916 entry:
926 %cmp = fcmp one double %a, %b 917 %cmp = fcmp one double %a, %b
927 %cmp.ret_ext = zext i1 %cmp to i32 918 %cmp.ret_ext = zext i1 %cmp to i32
928 ret i32 %cmp.ret_ext 919 ret i32 %cmp.ret_ext
929 } 920 }
930 ; CHECK-LABEL: fcmpOneDouble 921 ; CHECK-LABEL: fcmpOneDouble
931 ; CHECK: ucomisd 922 ; CHECK: ucomisd
932 ; CHECK: jne {{[0-9]}} 923 ; CHECK: jne
933 924
934 define internal i32 @fcmpOrdFloat(float %a, float %b) { 925 define internal i32 @fcmpOrdFloat(float %a, float %b) {
935 entry: 926 entry:
936 %cmp = fcmp ord float %a, %b 927 %cmp = fcmp ord float %a, %b
937 %cmp.ret_ext = zext i1 %cmp to i32 928 %cmp.ret_ext = zext i1 %cmp to i32
938 ret i32 %cmp.ret_ext 929 ret i32 %cmp.ret_ext
939 } 930 }
940 ; CHECK-LABEL: fcmpOrdFloat 931 ; CHECK-LABEL: fcmpOrdFloat
941 ; CHECK: ucomiss 932 ; CHECK: ucomiss
942 ; CHECK: jnp {{[0-9]}} 933 ; CHECK: jnp
943 934
944 define internal i32 @fcmpOrdDouble(double %a, double %b) { 935 define internal i32 @fcmpOrdDouble(double %a, double %b) {
945 entry: 936 entry:
946 %cmp = fcmp ord double %a, %b 937 %cmp = fcmp ord double %a, %b
947 %cmp.ret_ext = zext i1 %cmp to i32 938 %cmp.ret_ext = zext i1 %cmp to i32
948 ret i32 %cmp.ret_ext 939 ret i32 %cmp.ret_ext
949 } 940 }
950 ; CHECK-LABEL: fcmpOrdDouble 941 ; CHECK-LABEL: fcmpOrdDouble
951 ; CHECK: ucomisd 942 ; CHECK: ucomisd
952 ; CHECK: jnp {{[0-9]}} 943 ; CHECK: jnp
953 944
954 define internal i32 @fcmpUeqFloat(float %a, float %b) { 945 define internal i32 @fcmpUeqFloat(float %a, float %b) {
955 entry: 946 entry:
956 %cmp = fcmp ueq float %a, %b 947 %cmp = fcmp ueq float %a, %b
957 %cmp.ret_ext = zext i1 %cmp to i32 948 %cmp.ret_ext = zext i1 %cmp to i32
958 ret i32 %cmp.ret_ext 949 ret i32 %cmp.ret_ext
959 } 950 }
960 ; CHECK-LABEL: fcmpUeqFloat 951 ; CHECK-LABEL: fcmpUeqFloat
961 ; CHECK: ucomiss 952 ; CHECK: ucomiss
962 ; CHECK: je {{[0-9]}} 953 ; CHECK: je
963 954
964 define internal i32 @fcmpUeqDouble(double %a, double %b) { 955 define internal i32 @fcmpUeqDouble(double %a, double %b) {
965 entry: 956 entry:
966 %cmp = fcmp ueq double %a, %b 957 %cmp = fcmp ueq double %a, %b
967 %cmp.ret_ext = zext i1 %cmp to i32 958 %cmp.ret_ext = zext i1 %cmp to i32
968 ret i32 %cmp.ret_ext 959 ret i32 %cmp.ret_ext
969 } 960 }
970 ; CHECK-LABEL: fcmpUeqDouble 961 ; CHECK-LABEL: fcmpUeqDouble
971 ; CHECK: ucomisd 962 ; CHECK: ucomisd
972 ; CHECK: je {{[0-9]}} 963 ; CHECK: je
973 964
974 define internal i32 @fcmpUgtFloat(float %a, float %b) { 965 define internal i32 @fcmpUgtFloat(float %a, float %b) {
975 entry: 966 entry:
976 %cmp = fcmp ugt float %a, %b 967 %cmp = fcmp ugt float %a, %b
977 %cmp.ret_ext = zext i1 %cmp to i32 968 %cmp.ret_ext = zext i1 %cmp to i32
978 ret i32 %cmp.ret_ext 969 ret i32 %cmp.ret_ext
979 } 970 }
980 ; CHECK-LABEL: fcmpUgtFloat 971 ; CHECK-LABEL: fcmpUgtFloat
981 ; CHECK: ucomiss 972 ; CHECK: ucomiss
982 ; CHECK: jb {{[0-9]}} 973 ; CHECK: jb
983 974
984 define internal i32 @fcmpUgtDouble(double %a, double %b) { 975 define internal i32 @fcmpUgtDouble(double %a, double %b) {
985 entry: 976 entry:
986 %cmp = fcmp ugt double %a, %b 977 %cmp = fcmp ugt double %a, %b
987 %cmp.ret_ext = zext i1 %cmp to i32 978 %cmp.ret_ext = zext i1 %cmp to i32
988 ret i32 %cmp.ret_ext 979 ret i32 %cmp.ret_ext
989 } 980 }
990 ; CHECK-LABEL: fcmpUgtDouble 981 ; CHECK-LABEL: fcmpUgtDouble
991 ; CHECK: ucomisd 982 ; CHECK: ucomisd
992 ; CHECK: jb {{[0-9]}} 983 ; CHECK: jb
993 984
994 define internal i32 @fcmpUgeFloat(float %a, float %b) { 985 define internal i32 @fcmpUgeFloat(float %a, float %b) {
995 entry: 986 entry:
996 %cmp = fcmp uge float %a, %b 987 %cmp = fcmp uge float %a, %b
997 %cmp.ret_ext = zext i1 %cmp to i32 988 %cmp.ret_ext = zext i1 %cmp to i32
998 ret i32 %cmp.ret_ext 989 ret i32 %cmp.ret_ext
999 } 990 }
1000 ; CHECK-LABEL: fcmpUgeFloat 991 ; CHECK-LABEL: fcmpUgeFloat
1001 ; CHECK: ucomiss 992 ; CHECK: ucomiss
1002 ; CHECK: jbe {{[0-9]}} 993 ; CHECK: jbe
1003 994
1004 define internal i32 @fcmpUgeDouble(double %a, double %b) { 995 define internal i32 @fcmpUgeDouble(double %a, double %b) {
1005 entry: 996 entry:
1006 %cmp = fcmp uge double %a, %b 997 %cmp = fcmp uge double %a, %b
1007 %cmp.ret_ext = zext i1 %cmp to i32 998 %cmp.ret_ext = zext i1 %cmp to i32
1008 ret i32 %cmp.ret_ext 999 ret i32 %cmp.ret_ext
1009 } 1000 }
1010 ; CHECK-LABEL: fcmpUgeDouble 1001 ; CHECK-LABEL: fcmpUgeDouble
1011 ; CHECK: ucomisd 1002 ; CHECK: ucomisd
1012 ; CHECK: jbe {{[0-9]}} 1003 ; CHECK: jbe
1013 1004
1014 define internal i32 @fcmpUltFloat(float %a, float %b) { 1005 define internal i32 @fcmpUltFloat(float %a, float %b) {
1015 entry: 1006 entry:
1016 %cmp = fcmp ult float %a, %b 1007 %cmp = fcmp ult float %a, %b
1017 %cmp.ret_ext = zext i1 %cmp to i32 1008 %cmp.ret_ext = zext i1 %cmp to i32
1018 ret i32 %cmp.ret_ext 1009 ret i32 %cmp.ret_ext
1019 } 1010 }
1020 ; CHECK-LABEL: fcmpUltFloat 1011 ; CHECK-LABEL: fcmpUltFloat
1021 ; CHECK: ucomiss 1012 ; CHECK: ucomiss
1022 ; CHECK: jb {{[0-9]}} 1013 ; CHECK: jb
1023 1014
1024 define internal i32 @fcmpUltDouble(double %a, double %b) { 1015 define internal i32 @fcmpUltDouble(double %a, double %b) {
1025 entry: 1016 entry:
1026 %cmp = fcmp ult double %a, %b 1017 %cmp = fcmp ult double %a, %b
1027 %cmp.ret_ext = zext i1 %cmp to i32 1018 %cmp.ret_ext = zext i1 %cmp to i32
1028 ret i32 %cmp.ret_ext 1019 ret i32 %cmp.ret_ext
1029 } 1020 }
1030 ; CHECK-LABEL: fcmpUltDouble 1021 ; CHECK-LABEL: fcmpUltDouble
1031 ; CHECK: ucomisd 1022 ; CHECK: ucomisd
1032 ; CHECK: jb {{[0-9]}} 1023 ; CHECK: jb
1033 1024
1034 define internal i32 @fcmpUleFloat(float %a, float %b) { 1025 define internal i32 @fcmpUleFloat(float %a, float %b) {
1035 entry: 1026 entry:
1036 %cmp = fcmp ule float %a, %b 1027 %cmp = fcmp ule float %a, %b
1037 %cmp.ret_ext = zext i1 %cmp to i32 1028 %cmp.ret_ext = zext i1 %cmp to i32
1038 ret i32 %cmp.ret_ext 1029 ret i32 %cmp.ret_ext
1039 } 1030 }
1040 ; CHECK-LABEL: fcmpUleFloat 1031 ; CHECK-LABEL: fcmpUleFloat
1041 ; CHECK: ucomiss 1032 ; CHECK: ucomiss
1042 ; CHECK: jbe {{[0-9]}} 1033 ; CHECK: jbe
1043 1034
1044 define internal i32 @fcmpUleDouble(double %a, double %b) { 1035 define internal i32 @fcmpUleDouble(double %a, double %b) {
1045 entry: 1036 entry:
1046 %cmp = fcmp ule double %a, %b 1037 %cmp = fcmp ule double %a, %b
1047 %cmp.ret_ext = zext i1 %cmp to i32 1038 %cmp.ret_ext = zext i1 %cmp to i32
1048 ret i32 %cmp.ret_ext 1039 ret i32 %cmp.ret_ext
1049 } 1040 }
1050 ; CHECK-LABEL: fcmpUleDouble 1041 ; CHECK-LABEL: fcmpUleDouble
1051 ; CHECK: ucomisd 1042 ; CHECK: ucomisd
1052 ; CHECK: jbe {{[0-9]}} 1043 ; CHECK: jbe
1053 1044
1054 define internal i32 @fcmpUneFloat(float %a, float %b) { 1045 define internal i32 @fcmpUneFloat(float %a, float %b) {
1055 entry: 1046 entry:
1056 %cmp = fcmp une float %a, %b 1047 %cmp = fcmp une float %a, %b
1057 %cmp.ret_ext = zext i1 %cmp to i32 1048 %cmp.ret_ext = zext i1 %cmp to i32
1058 ret i32 %cmp.ret_ext 1049 ret i32 %cmp.ret_ext
1059 } 1050 }
1060 ; CHECK-LABEL: fcmpUneFloat 1051 ; CHECK-LABEL: fcmpUneFloat
1061 ; CHECK: ucomiss 1052 ; CHECK: ucomiss
1062 ; CHECK: jne {{[0-9]}} 1053 ; CHECK: jne
1063 ; CHECK: jp {{[0-9]}} 1054 ; CHECK: jp
1064 1055
1065 define internal i32 @fcmpUneDouble(double %a, double %b) { 1056 define internal i32 @fcmpUneDouble(double %a, double %b) {
1066 entry: 1057 entry:
1067 %cmp = fcmp une double %a, %b 1058 %cmp = fcmp une double %a, %b
1068 %cmp.ret_ext = zext i1 %cmp to i32 1059 %cmp.ret_ext = zext i1 %cmp to i32
1069 ret i32 %cmp.ret_ext 1060 ret i32 %cmp.ret_ext
1070 } 1061 }
1071 ; CHECK-LABEL: fcmpUneDouble 1062 ; CHECK-LABEL: fcmpUneDouble
1072 ; CHECK: ucomisd 1063 ; CHECK: ucomisd
1073 ; CHECK: jne {{[0-9]}} 1064 ; CHECK: jne
1074 ; CHECK: jp {{[0-9]}} 1065 ; CHECK: jp
1075 1066
1076 define internal i32 @fcmpUnoFloat(float %a, float %b) { 1067 define internal i32 @fcmpUnoFloat(float %a, float %b) {
1077 entry: 1068 entry:
1078 %cmp = fcmp uno float %a, %b 1069 %cmp = fcmp uno float %a, %b
1079 %cmp.ret_ext = zext i1 %cmp to i32 1070 %cmp.ret_ext = zext i1 %cmp to i32
1080 ret i32 %cmp.ret_ext 1071 ret i32 %cmp.ret_ext
1081 } 1072 }
1082 ; CHECK-LABEL: fcmpUnoFloat 1073 ; CHECK-LABEL: fcmpUnoFloat
1083 ; CHECK: ucomiss 1074 ; CHECK: ucomiss
1084 ; CHECK: jp {{[0-9]}} 1075 ; CHECK: jp
1085 1076
1086 define internal i32 @fcmpUnoDouble(double %a, double %b) { 1077 define internal i32 @fcmpUnoDouble(double %a, double %b) {
1087 entry: 1078 entry:
1088 %cmp = fcmp uno double %a, %b 1079 %cmp = fcmp uno double %a, %b
1089 %cmp.ret_ext = zext i1 %cmp to i32 1080 %cmp.ret_ext = zext i1 %cmp to i32
1090 ret i32 %cmp.ret_ext 1081 ret i32 %cmp.ret_ext
1091 } 1082 }
1092 ; CHECK-LABEL: fcmpUnoDouble 1083 ; CHECK-LABEL: fcmpUnoDouble
1093 ; CHECK: ucomisd 1084 ; CHECK: ucomisd
1094 ; CHECK: jp {{[0-9]}} 1085 ; CHECK: jp
1095 1086
1096 define internal i32 @fcmpTrueFloat(float %a, float %b) { 1087 define internal i32 @fcmpTrueFloat(float %a, float %b) {
1097 entry: 1088 entry:
1098 %cmp = fcmp true float %a, %b 1089 %cmp = fcmp true float %a, %b
1099 %cmp.ret_ext = zext i1 %cmp to i32 1090 %cmp.ret_ext = zext i1 %cmp to i32
1100 ret i32 %cmp.ret_ext 1091 ret i32 %cmp.ret_ext
1101 } 1092 }
1102 ; CHECK-LABEL: fcmpTrueFloat 1093 ; CHECK-LABEL: fcmpTrueFloat
1103 ; CHECK: mov {{.*}}, 1 1094 ; CHECK: mov {{.*}},0x1
1104 1095
1105 define internal i32 @fcmpTrueDouble(double %a, double %b) { 1096 define internal i32 @fcmpTrueDouble(double %a, double %b) {
1106 entry: 1097 entry:
1107 %cmp = fcmp true double %a, %b 1098 %cmp = fcmp true double %a, %b
1108 %cmp.ret_ext = zext i1 %cmp to i32 1099 %cmp.ret_ext = zext i1 %cmp to i32
1109 ret i32 %cmp.ret_ext 1100 ret i32 %cmp.ret_ext
1110 } 1101 }
1111 ; CHECK-LABEL: fcmpTrueDouble 1102 ; CHECK-LABEL: fcmpTrueDouble
1112 ; CHECK: mov {{.*}}, 1 1103 ; CHECK: mov {{.*}},0x1
1113 1104
1114 define internal float @loadFloat(i32 %a) { 1105 define internal float @loadFloat(i32 %a) {
1115 entry: 1106 entry:
1116 %__1 = inttoptr i32 %a to float* 1107 %__1 = inttoptr i32 %a to float*
1117 %v0 = load float* %__1, align 4 1108 %v0 = load float* %__1, align 4
1118 ret float %v0 1109 ret float %v0
1119 } 1110 }
1120 ; CHECK-LABEL: loadFloat 1111 ; CHECK-LABEL: loadFloat
1121 ; CHECK: movss 1112 ; CHECK: movss
1122 ; CHECK: fld 1113 ; CHECK: fld
1123 1114
1124 define internal double @loadDouble(i32 %a) { 1115 define internal double @loadDouble(i32 %a) {
1125 entry: 1116 entry:
1126 %__1 = inttoptr i32 %a to double* 1117 %__1 = inttoptr i32 %a to double*
1127 %v0 = load double* %__1, align 8 1118 %v0 = load double* %__1, align 8
1128 ret double %v0 1119 ret double %v0
1129 } 1120 }
1130 ; CHECK-LABEL: loadDouble 1121 ; CHECK-LABEL: loadDouble
1131 ; CHECK: movsd 1122 ; CHECK: movsd
1132 ; CHECK: fld 1123 ; CHECK: fld
1133 1124
1134 define internal void @storeFloat(i32 %a, float %value) { 1125 define internal void @storeFloat(i32 %a, float %value) {
1135 entry: 1126 entry:
1136 %__2 = inttoptr i32 %a to float* 1127 %__2 = inttoptr i32 %a to float*
1137 store float %value, float* %__2, align 4 1128 store float %value, float* %__2, align 4
1138 ret void 1129 ret void
1139 } 1130 }
1140 ; CHECK-LABEL: storeFloat: 1131 ; CHECK-LABEL: storeFloat
1141 ; CHECK: movss 1132 ; CHECK: movss
1142 ; CHECK: movss 1133 ; CHECK: movss
1143 1134
1144 define internal void @storeDouble(i32 %a, double %value) { 1135 define internal void @storeDouble(i32 %a, double %value) {
1145 entry: 1136 entry:
1146 %__2 = inttoptr i32 %a to double* 1137 %__2 = inttoptr i32 %a to double*
1147 store double %value, double* %__2, align 8 1138 store double %value, double* %__2, align 8
1148 ret void 1139 ret void
1149 } 1140 }
1150 ; CHECK-LABEL: storeDouble: 1141 ; CHECK-LABEL: storeDouble
1151 ; CHECK: movsd 1142 ; CHECK: movsd
1152 ; CHECK: movsd 1143 ; CHECK: movsd
1153 1144
1154 define internal void @storeFloatConst(i32 %a) { 1145 define internal void @storeFloatConst(i32 %a) {
1155 entry: 1146 entry:
1156 %a.asptr = inttoptr i32 %a to float* 1147 %a.asptr = inttoptr i32 %a to float*
1157 store float 0x3FF3AE1480000000, float* %a.asptr, align 4 1148 store float 0x3FF3AE1480000000, float* %a.asptr, align 4
1158 ret void 1149 ret void
1159 } 1150 }
1160 ; CHECK-LABEL: storeFloatConst 1151 ; CHECK-LABEL: storeFloatConst
(...skipping 11 matching lines...) Expand all
1172 ; CHECK: movsd 1163 ; CHECK: movsd
1173 1164
1174 define internal float @selectFloatVarVar(float %a, float %b) { 1165 define internal float @selectFloatVarVar(float %a, float %b) {
1175 entry: 1166 entry:
1176 %cmp = fcmp olt float %a, %b 1167 %cmp = fcmp olt float %a, %b
1177 %cond = select i1 %cmp, float %a, float %b 1168 %cond = select i1 %cmp, float %a, float %b
1178 ret float %cond 1169 ret float %cond
1179 } 1170 }
1180 ; CHECK-LABEL: selectFloatVarVar 1171 ; CHECK-LABEL: selectFloatVarVar
1181 ; CHECK: ucomiss 1172 ; CHECK: ucomiss
1182 ; CHECK: ja {{[0-9]}} 1173 ; CHECK: ja
1183 ; CHECK: fld 1174 ; CHECK: fld
1184 1175
1185 define internal double @selectDoubleVarVar(double %a, double %b) { 1176 define internal double @selectDoubleVarVar(double %a, double %b) {
1186 entry: 1177 entry:
1187 %cmp = fcmp olt double %a, %b 1178 %cmp = fcmp olt double %a, %b
1188 %cond = select i1 %cmp, double %a, double %b 1179 %cond = select i1 %cmp, double %a, double %b
1189 ret double %cond 1180 ret double %cond
1190 } 1181 }
1191 ; CHECK-LABEL: selectDoubleVarVar 1182 ; CHECK-LABEL: selectDoubleVarVar
1192 ; CHECK: ucomisd 1183 ; CHECK: ucomisd
1193 ; CHECK: ja {{[0-9]}} 1184 ; CHECK: ja
1194 ; CHECK: fld 1185 ; CHECK: fld
OLDNEW
« no previous file with comments | « tests_lit/llvm2ice_tests/elf_container.ll ('k') | tests_lit/llvm2ice_tests/fpcall.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698