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

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: 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
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: -ffunction-sections | 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: -ffunction-sections | 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
46 ; CHECK: mov dword ptr [esp + 4], 123 44 ; CHECK-NEXT: R_{{.*}} ignoreFpArgsNoInline
47 ; CHECK: call ignoreFpArgsNoInline 45 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
48 ; CHECK: mov dword ptr [esp + 4], 123 46 ; CHECK: call
49 ; CHECK: call ignoreFpArgsNoInline 47 ; CHECK-NEXT: R_{{.*}} ignoreFpArgsNoInline
48 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
49 ; CHECK: call
50 ; CHECK-NEXT: R_{{.*}} ignoreFpArgsNoInline
50 51
51 declare i32 @ignoreFpArgsNoInline(float %x, i32 %y, double %z) 52 declare i32 @ignoreFpArgsNoInline(float %x, i32 %y, double %z)
52 53
53 define internal i32 @passFpConstArg(float %a, double %b) { 54 define internal i32 @passFpConstArg(float %a, double %b) {
54 entry: 55 entry:
55 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00) 56 %call = call i32 @ignoreFpArgsNoInline(float %a, i32 123, double 2.340000e+00)
56 ret i32 %call 57 ret i32 %call
57 } 58 }
58 ; CHECK-LABEL: passFpConstArg 59 ; CHECK-LABEL: passFpConstArg
59 ; CHECK: mov dword ptr [esp + 4], 123 60 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
60 ; CHECK: call ignoreFpArgsNoInline 61 ; CHECK: call
62 ; CHECK-NEXT: R_{{.*}} ignoreFpArgsNoInline
61 63
62 define internal i32 @passFp32ConstArg(float %a) { 64 define internal i32 @passFp32ConstArg(float %a) {
63 entry: 65 entry:
64 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0) 66 %call = call i32 @ignoreFp32ArgsNoInline(float %a, i32 123, float 2.0)
65 ret i32 %call 67 ret i32 %call
66 } 68 }
67 ; CHECK-LABEL: passFp32ConstArg 69 ; CHECK-LABEL: passFp32ConstArg
68 ; CHECK: mov dword ptr [esp + 4], 123 70 ; CHECK: mov DWORD PTR [esp+0x4],0x7b
69 ; CHECK: movss dword ptr [esp + 8] 71 ; CHECK: movss DWORD PTR [esp+0x8]
70 ; CHECK: call ignoreFp32ArgsNoInline 72 ; CHECK: call
73 ; CHECK-NEXT: R_{{.*}} ignoreFp32ArgsNoInline
71 74
72 define i32 @ignoreFp32ArgsNoInline(float %x, i32 %y, float %z) { 75 define i32 @ignoreFp32ArgsNoInline(float %x, i32 %y, float %z) {
73 entry: 76 entry:
74 ret i32 %y 77 ret i32 %y
75 } 78 }
76 79
77 define internal float @returnFloatArg(float %a) { 80 define internal float @returnFloatArg(float %a) {
78 entry: 81 entry:
79 ret float %a 82 ret float %a
80 } 83 }
81 ; CHECK-LABEL: returnFloatArg 84 ; CHECK-LABEL: returnFloatArg
82 ; CHECK: fld dword ptr [esp 85 ; CHECK: fld DWORD PTR [esp
83 86
84 define internal double @returnDoubleArg(double %a) { 87 define internal double @returnDoubleArg(double %a) {
85 entry: 88 entry:
86 ret double %a 89 ret double %a
87 } 90 }
88 ; CHECK-LABEL: returnDoubleArg 91 ; CHECK-LABEL: returnDoubleArg
89 ; CHECK: fld qword ptr [esp 92 ; CHECK: fld QWORD PTR [esp
90 93
91 define internal float @returnFloatConst() { 94 define internal float @returnFloatConst() {
92 entry: 95 entry:
93 ret float 0x3FF3AE1480000000 96 ret float 0x3FF3AE1480000000
94 } 97 }
95 ; CHECK-LABEL: returnFloatConst 98 ; CHECK-LABEL: returnFloatConst
96 ; CHECK: fld 99 ; CHECK: fld
97 100
98 define internal double @returnDoubleConst() { 101 define internal double @returnDoubleConst() {
99 entry: 102 entry:
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 ; CHECK-LABEL: divDouble 176 ; CHECK-LABEL: divDouble
174 ; CHECK: divsd 177 ; CHECK: divsd
175 ; CHECK: fld 178 ; CHECK: fld
176 179
177 define internal float @remFloat(float %a, float %b) { 180 define internal float @remFloat(float %a, float %b) {
178 entry: 181 entry:
179 %div = frem float %a, %b 182 %div = frem float %a, %b
180 ret float %div 183 ret float %div
181 } 184 }
182 ; CHECK-LABEL: remFloat 185 ; CHECK-LABEL: remFloat
183 ; CHECK: call fmodf 186 ; CHECK: call
187 ; CHECK-NEXT: R_{{.*}} fmodf
184 188
185 define internal double @remDouble(double %a, double %b) { 189 define internal double @remDouble(double %a, double %b) {
186 entry: 190 entry:
187 %div = frem double %a, %b 191 %div = frem double %a, %b
188 ret double %div 192 ret double %div
189 } 193 }
190 ; CHECK-LABEL: remDouble 194 ; CHECK-LABEL: remDouble
191 ; CHECK: call fmod 195 ; CHECK: call
196 ; CHECK-NEXT: R_{{.*}} fmod
192 197
193 define internal float @fptrunc(double %a) { 198 define internal float @fptrunc(double %a) {
194 entry: 199 entry:
195 %conv = fptrunc double %a to float 200 %conv = fptrunc double %a to float
196 ret float %conv 201 ret float %conv
197 } 202 }
198 ; CHECK-LABEL: fptrunc 203 ; CHECK-LABEL: fptrunc
199 ; CHECK: cvtsd2ss 204 ; CHECK: cvtsd2ss
200 ; CHECK: fld 205 ; CHECK: fld
201 206
202 define internal double @fpext(float %a) { 207 define internal double @fpext(float %a) {
203 entry: 208 entry:
204 %conv = fpext float %a to double 209 %conv = fpext float %a to double
205 ret double %conv 210 ret double %conv
206 } 211 }
207 ; CHECK-LABEL: fpext 212 ; CHECK-LABEL: fpext
208 ; CHECK: cvtss2sd 213 ; CHECK: cvtss2sd
209 ; CHECK: fld 214 ; CHECK: fld
210 215
211 define internal i64 @doubleToSigned64(double %a) { 216 define internal i64 @doubleToSigned64(double %a) {
212 entry: 217 entry:
213 %conv = fptosi double %a to i64 218 %conv = fptosi double %a to i64
214 ret i64 %conv 219 ret i64 %conv
215 } 220 }
216 ; CHECK-LABEL: doubleToSigned64 221 ; CHECK-LABEL: doubleToSigned64
217 ; CHECK: call cvtdtosi64 222 ; CHECK: call
223 ; CHECK-NEXT: R_{{.*}} cvtdtosi64
218 224
219 define internal i64 @floatToSigned64(float %a) { 225 define internal i64 @floatToSigned64(float %a) {
220 entry: 226 entry:
221 %conv = fptosi float %a to i64 227 %conv = fptosi float %a to i64
222 ret i64 %conv 228 ret i64 %conv
223 } 229 }
224 ; CHECK-LABEL: floatToSigned64 230 ; CHECK-LABEL: floatToSigned64
225 ; CHECK: call cvtftosi64 231 ; CHECK: call
232 ; CHECK-NEXT: R_{{.*}} cvtftosi64
226 233
227 define internal i64 @doubleToUnsigned64(double %a) { 234 define internal i64 @doubleToUnsigned64(double %a) {
228 entry: 235 entry:
229 %conv = fptoui double %a to i64 236 %conv = fptoui double %a to i64
230 ret i64 %conv 237 ret i64 %conv
231 } 238 }
232 ; CHECK-LABEL: doubleToUnsigned64 239 ; CHECK-LABEL: doubleToUnsigned64
233 ; CHECK: call cvtdtoui64 240 ; CHECK: call
241 ; CHECK-NEXT: R_{{.*}} cvtdtoui64
234 242
235 define internal i64 @floatToUnsigned64(float %a) { 243 define internal i64 @floatToUnsigned64(float %a) {
236 entry: 244 entry:
237 %conv = fptoui float %a to i64 245 %conv = fptoui float %a to i64
238 ret i64 %conv 246 ret i64 %conv
239 } 247 }
240 ; CHECK-LABEL: floatToUnsigned64 248 ; CHECK-LABEL: floatToUnsigned64
241 ; CHECK: call cvtftoui64 249 ; CHECK: call
250 ; CHECK-NEXT: R_{{.*}} cvtftoui64
242 251
243 define internal i32 @doubleToSigned32(double %a) { 252 define internal i32 @doubleToSigned32(double %a) {
244 entry: 253 entry:
245 %conv = fptosi double %a to i32 254 %conv = fptosi double %a to i32
246 ret i32 %conv 255 ret i32 %conv
247 } 256 }
248 ; CHECK-LABEL: doubleToSigned32 257 ; CHECK-LABEL: doubleToSigned32
249 ; CHECK: cvttsd2si 258 ; CHECK: cvttsd2si
250 259
251 define internal i32 @doubleToSigned32Const() { 260 define internal i32 @doubleToSigned32Const() {
(...skipping 11 matching lines...) Expand all
263 } 272 }
264 ; CHECK-LABEL: floatToSigned32 273 ; CHECK-LABEL: floatToSigned32
265 ; CHECK: cvttss2si 274 ; CHECK: cvttss2si
266 275
267 define internal i32 @doubleToUnsigned32(double %a) { 276 define internal i32 @doubleToUnsigned32(double %a) {
268 entry: 277 entry:
269 %conv = fptoui double %a to i32 278 %conv = fptoui double %a to i32
270 ret i32 %conv 279 ret i32 %conv
271 } 280 }
272 ; CHECK-LABEL: doubleToUnsigned32 281 ; CHECK-LABEL: doubleToUnsigned32
273 ; CHECK: call cvtdtoui32 282 ; CHECK: call
283 ; CHECK-NEXT: R_{{.*}} cvtdtoui32
274 284
275 define internal i32 @floatToUnsigned32(float %a) { 285 define internal i32 @floatToUnsigned32(float %a) {
276 entry: 286 entry:
277 %conv = fptoui float %a to i32 287 %conv = fptoui float %a to i32
278 ret i32 %conv 288 ret i32 %conv
279 } 289 }
280 ; CHECK-LABEL: floatToUnsigned32 290 ; CHECK-LABEL: floatToUnsigned32
281 ; CHECK: call cvtftoui32 291 ; CHECK: call
282 292 ; CHECK-NEXT: R_{{.*}} cvtftoui32
283 293
284 define internal i32 @doubleToSigned16(double %a) { 294 define internal i32 @doubleToSigned16(double %a) {
285 entry: 295 entry:
286 %conv = fptosi double %a to i16 296 %conv = fptosi double %a to i16
287 %conv.ret_ext = sext i16 %conv to i32 297 %conv.ret_ext = sext i16 %conv to i32
288 ret i32 %conv.ret_ext 298 ret i32 %conv.ret_ext
289 } 299 }
290 ; CHECK-LABEL: doubleToSigned16 300 ; CHECK-LABEL: doubleToSigned16
291 ; CHECK: cvttsd2si 301 ; CHECK: cvttsd2si
292 ; CHECK: movsx 302 ; CHECK: movsx
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 ; CHECK: movzx 372 ; CHECK: movzx
363 373
364 define internal i32 @doubleToUnsigned1(double %a) { 374 define internal i32 @doubleToUnsigned1(double %a) {
365 entry: 375 entry:
366 %tobool = fptoui double %a to i1 376 %tobool = fptoui double %a to i1
367 %tobool.ret_ext = zext i1 %tobool to i32 377 %tobool.ret_ext = zext i1 %tobool to i32
368 ret i32 %tobool.ret_ext 378 ret i32 %tobool.ret_ext
369 } 379 }
370 ; CHECK-LABEL: doubleToUnsigned1 380 ; CHECK-LABEL: doubleToUnsigned1
371 ; CHECK: cvttsd2si 381 ; CHECK: cvttsd2si
372 ; CHECK: and eax, 1 382 ; CHECK: and eax,0x1
373 383
374 define internal i32 @floatToUnsigned1(float %a) { 384 define internal i32 @floatToUnsigned1(float %a) {
375 entry: 385 entry:
376 %tobool = fptoui float %a to i1 386 %tobool = fptoui float %a to i1
377 %tobool.ret_ext = zext i1 %tobool to i32 387 %tobool.ret_ext = zext i1 %tobool to i32
378 ret i32 %tobool.ret_ext 388 ret i32 %tobool.ret_ext
379 } 389 }
380 ; CHECK-LABEL: floatToUnsigned1 390 ; CHECK-LABEL: floatToUnsigned1
381 ; CHECK: cvttss2si 391 ; CHECK: cvttss2si
382 ; CHECK: and eax, 1 392 ; CHECK: and eax,0x1
383 393
384 define internal double @signed64ToDouble(i64 %a) { 394 define internal double @signed64ToDouble(i64 %a) {
385 entry: 395 entry:
386 %conv = sitofp i64 %a to double 396 %conv = sitofp i64 %a to double
387 ret double %conv 397 ret double %conv
388 } 398 }
389 ; CHECK-LABEL: signed64ToDouble 399 ; CHECK-LABEL: signed64ToDouble
390 ; CHECK: call cvtsi64tod 400 ; CHECK: call
391 ; CHECK: fstp qword 401 ; CHECK-NEXT: R_{{.*}} cvtsi64tod
402 ; CHECK: fstp QWORD
392 403
393 define internal float @signed64ToFloat(i64 %a) { 404 define internal float @signed64ToFloat(i64 %a) {
394 entry: 405 entry:
395 %conv = sitofp i64 %a to float 406 %conv = sitofp i64 %a to float
396 ret float %conv 407 ret float %conv
397 } 408 }
398 ; CHECK-LABEL: signed64ToFloat 409 ; CHECK-LABEL: signed64ToFloat
399 ; CHECK: call cvtsi64tof 410 ; CHECK: call
400 ; CHECK: fstp dword 411 ; CHECK-NEXT: R_{{.*}} cvtsi64tof
412 ; CHECK: fstp DWORD
401 413
402 define internal double @unsigned64ToDouble(i64 %a) { 414 define internal double @unsigned64ToDouble(i64 %a) {
403 entry: 415 entry:
404 %conv = uitofp i64 %a to double 416 %conv = uitofp i64 %a to double
405 ret double %conv 417 ret double %conv
406 } 418 }
407 ; CHECK-LABEL: unsigned64ToDouble 419 ; CHECK-LABEL: unsigned64ToDouble
408 ; CHECK: call cvtui64tod 420 ; CHECK: call
421 ; CHECK-NEXT: R_{{.*}} cvtui64tod
409 ; CHECK: fstp 422 ; CHECK: fstp
410 423
411 define internal float @unsigned64ToFloat(i64 %a) { 424 define internal float @unsigned64ToFloat(i64 %a) {
412 entry: 425 entry:
413 %conv = uitofp i64 %a to float 426 %conv = uitofp i64 %a to float
414 ret float %conv 427 ret float %conv
415 } 428 }
416 ; CHECK-LABEL: unsigned64ToFloat 429 ; CHECK-LABEL: unsigned64ToFloat
417 ; CHECK: call cvtui64tof 430 ; CHECK: call
431 ; CHECK-NEXT: R_{{.*}} cvtui64tof
418 ; CHECK: fstp 432 ; CHECK: fstp
419 433
420 define internal double @unsigned64ToDoubleConst() { 434 define internal double @unsigned64ToDoubleConst() {
421 entry: 435 entry:
422 %conv = uitofp i64 12345678901234 to double 436 %conv = uitofp i64 12345678901234 to double
423 ret double %conv 437 ret double %conv
424 } 438 }
425 ; CHECK-LABEL: unsigned64ToDouble 439 ; CHECK-LABEL: unsigned64ToDouble
426 ; CHECK: mov dword ptr [esp + 4], 2874 440 ; CHECK: mov DWORD PTR [esp+0x4],0xb3a
427 ; CHECK: mov dword ptr [esp], 1942892530 441 ; CHECK: mov DWORD PTR [esp],0x73ce2ff2
428 ; CHECK: call cvtui64tod 442 ; CHECK: call
443 ; CHECK-NEXT: R_{{.*}} cvtui64tod
429 ; CHECK: fstp 444 ; CHECK: fstp
430 445
431 define internal double @signed32ToDouble(i32 %a) { 446 define internal double @signed32ToDouble(i32 %a) {
432 entry: 447 entry:
433 %conv = sitofp i32 %a to double 448 %conv = sitofp i32 %a to double
434 ret double %conv 449 ret double %conv
435 } 450 }
436 ; CHECK-LABEL: signed32ToDouble 451 ; CHECK-LABEL: signed32ToDouble
437 ; CHECK: cvtsi2sd 452 ; CHECK: cvtsi2sd
438 ; CHECK: fld 453 ; CHECK: fld
(...skipping 15 matching lines...) Expand all
454 ; CHECK-LABEL: signed32ToFloat 469 ; CHECK-LABEL: signed32ToFloat
455 ; CHECK: cvtsi2ss 470 ; CHECK: cvtsi2ss
456 ; CHECK: fld 471 ; CHECK: fld
457 472
458 define internal double @unsigned32ToDouble(i32 %a) { 473 define internal double @unsigned32ToDouble(i32 %a) {
459 entry: 474 entry:
460 %conv = uitofp i32 %a to double 475 %conv = uitofp i32 %a to double
461 ret double %conv 476 ret double %conv
462 } 477 }
463 ; CHECK-LABEL: unsigned32ToDouble 478 ; CHECK-LABEL: unsigned32ToDouble
464 ; CHECK: call cvtui32tod 479 ; CHECK: call
465 ; CHECK: fstp qword 480 ; CHECK-NEXT: R_{{.*}} cvtui32tod
481 ; CHECK: fstp QWORD
466 482
467 define internal float @unsigned32ToFloat(i32 %a) { 483 define internal float @unsigned32ToFloat(i32 %a) {
468 entry: 484 entry:
469 %conv = uitofp i32 %a to float 485 %conv = uitofp i32 %a to float
470 ret float %conv 486 ret float %conv
471 } 487 }
472 ; CHECK-LABEL: unsigned32ToFloat 488 ; CHECK-LABEL: unsigned32ToFloat
473 ; CHECK: call cvtui32tof 489 ; CHECK: call
474 ; CHECK: fstp dword 490 ; CHECK-NEXT: R_{{.*}} cvtui32tof
491 ; CHECK: fstp DWORD
475 492
476 define internal double @signed16ToDouble(i32 %a) { 493 define internal double @signed16ToDouble(i32 %a) {
477 entry: 494 entry:
478 %a.arg_trunc = trunc i32 %a to i16 495 %a.arg_trunc = trunc i32 %a to i16
479 %conv = sitofp i16 %a.arg_trunc to double 496 %conv = sitofp i16 %a.arg_trunc to double
480 ret double %conv 497 ret double %conv
481 } 498 }
482 ; CHECK-LABEL: signed16ToDouble 499 ; CHECK-LABEL: signed16ToDouble
483 ; CHECK: cvtsi2sd 500 ; CHECK: cvtsi2sd
484 ; CHECK: fld qword 501 ; CHECK: fld QWORD
485 502
486 define internal float @signed16ToFloat(i32 %a) { 503 define internal float @signed16ToFloat(i32 %a) {
487 entry: 504 entry:
488 %a.arg_trunc = trunc i32 %a to i16 505 %a.arg_trunc = trunc i32 %a to i16
489 %conv = sitofp i16 %a.arg_trunc to float 506 %conv = sitofp i16 %a.arg_trunc to float
490 ret float %conv 507 ret float %conv
491 } 508 }
492 ; CHECK-LABEL: signed16ToFloat 509 ; CHECK-LABEL: signed16ToFloat
493 ; CHECK: cvtsi2ss 510 ; CHECK: cvtsi2ss
494 ; CHECK: fld dword 511 ; CHECK: fld DWORD
495 512
496 define internal double @unsigned16ToDouble(i32 %a) { 513 define internal double @unsigned16ToDouble(i32 %a) {
497 entry: 514 entry:
498 %a.arg_trunc = trunc i32 %a to i16 515 %a.arg_trunc = trunc i32 %a to i16
499 %conv = uitofp i16 %a.arg_trunc to double 516 %conv = uitofp i16 %a.arg_trunc to double
500 ret double %conv 517 ret double %conv
501 } 518 }
502 ; CHECK-LABEL: unsigned16ToDouble 519 ; CHECK-LABEL: unsigned16ToDouble
503 ; CHECK: cvtsi2sd 520 ; CHECK: cvtsi2sd
504 ; CHECK: fld 521 ; CHECK: fld
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 call void @func() 648 call void @func()
632 br label %if.end3 649 br label %if.end3
633 650
634 if.end3: ; preds = %if.then2, %if.end 651 if.end3: ; preds = %if.then2, %if.end
635 ret void 652 ret void
636 } 653 }
637 ; CHECK-LABEL: fcmpEq 654 ; CHECK-LABEL: fcmpEq
638 ; CHECK: ucomiss 655 ; CHECK: ucomiss
639 ; CHECK: jne {{[0-9]}} 656 ; CHECK: jne {{[0-9]}}
640 ; CHECK-NEXT: jp {{[0-9]}} 657 ; CHECK-NEXT: jp {{[0-9]}}
641 ; CHECK: call func 658 ; CHECK: call
659 ; CHECK-NEXT: R_{{.*}} func
642 ; CHECK: ucomisd 660 ; CHECK: ucomisd
643 ; CHECK: jne {{[0-9]}} 661 ; CHECK: jne {{[0-9]}}
644 ; CHECK-NEXT: jp {{[0-9]}} 662 ; CHECK-NEXT: jp {{[0-9]}}
645 ; CHECK: call func 663 ; CHECK: call
664 ; CHECK-NEXT: R_{{.*}} func
646 665
647 define void @func() { 666 define void @func() {
648 entry: 667 entry:
649 ret void 668 ret void
650 } 669 }
651 670
652 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { 671 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
653 entry: 672 entry:
654 %cmp = fcmp une float %a, %b 673 %cmp = fcmp une float %a, %b
655 br i1 %cmp, label %if.then, label %if.end 674 br i1 %cmp, label %if.then, label %if.end
(...skipping 10 matching lines...) Expand all
666 call void @func() 685 call void @func()
667 br label %if.end3 686 br label %if.end3
668 687
669 if.end3: ; preds = %if.then2, %if.end 688 if.end3: ; preds = %if.then2, %if.end
670 ret void 689 ret void
671 } 690 }
672 ; CHECK-LABEL: fcmpNe 691 ; CHECK-LABEL: fcmpNe
673 ; CHECK: ucomiss 692 ; CHECK: ucomiss
674 ; CHECK: jne {{[0-9]}} 693 ; CHECK: jne {{[0-9]}}
675 ; CHECK-NEXT: jp {{[0-9]}} 694 ; CHECK-NEXT: jp {{[0-9]}}
676 ; CHECK: call func 695 ; CHECK: call
696 ; CHECK-NEXT: R_{{.*}} func
677 ; CHECK: ucomisd 697 ; CHECK: ucomisd
678 ; CHECK: jne {{[0-9]}} 698 ; CHECK: jne {{[0-9]}}
679 ; CHECK-NEXT: jp {{[0-9]}} 699 ; CHECK-NEXT: jp {{[0-9]}}
680 ; CHECK: call func 700 ; CHECK: call
701 ; CHECK-NEXT: R_{{.*}} func
681 702
682 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 703 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
683 entry: 704 entry:
684 %cmp = fcmp ogt float %a, %b 705 %cmp = fcmp ogt float %a, %b
685 br i1 %cmp, label %if.then, label %if.end 706 br i1 %cmp, label %if.then, label %if.end
686 707
687 if.then: ; preds = %entry 708 if.then: ; preds = %entry
688 call void @func() 709 call void @func()
689 br label %if.end 710 br label %if.end
690 711
691 if.end: ; preds = %if.then, %entry 712 if.end: ; preds = %if.then, %entry
692 %cmp1 = fcmp ogt double %c, %d 713 %cmp1 = fcmp ogt double %c, %d
693 br i1 %cmp1, label %if.then2, label %if.end3 714 br i1 %cmp1, label %if.then2, label %if.end3
694 715
695 if.then2: ; preds = %if.end 716 if.then2: ; preds = %if.end
696 call void @func() 717 call void @func()
697 br label %if.end3 718 br label %if.end3
698 719
699 if.end3: ; preds = %if.then2, %if.end 720 if.end3: ; preds = %if.then2, %if.end
700 ret void 721 ret void
701 } 722 }
702 ; CHECK-LABEL: fcmpGt 723 ; CHECK-LABEL: fcmpGt
703 ; CHECK: ucomiss 724 ; CHECK: ucomiss
704 ; CHECK: ja {{[0-9]}} 725 ; CHECK: ja {{[0-9]}}
705 ; CHECK: call func 726 ; CHECK: call
727 ; CHECK-NEXT: R_{{.*}} func
706 ; CHECK: ucomisd 728 ; CHECK: ucomisd
707 ; CHECK: ja {{[0-9]}} 729 ; CHECK: ja {{[0-9]}}
708 ; CHECK: call func 730 ; CHECK: call
731 ; CHECK-NEXT: R_{{.*}} func
709 732
710 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 733 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
711 entry: 734 entry:
712 %cmp = fcmp ult float %a, %b 735 %cmp = fcmp ult float %a, %b
713 br i1 %cmp, label %if.end, label %if.then 736 br i1 %cmp, label %if.end, label %if.then
714 737
715 if.then: ; preds = %entry 738 if.then: ; preds = %entry
716 call void @func() 739 call void @func()
717 br label %if.end 740 br label %if.end
718 741
719 if.end: ; preds = %entry, %if.then 742 if.end: ; preds = %entry, %if.then
720 %cmp1 = fcmp ult double %c, %d 743 %cmp1 = fcmp ult double %c, %d
721 br i1 %cmp1, label %if.end3, label %if.then2 744 br i1 %cmp1, label %if.end3, label %if.then2
722 745
723 if.then2: ; preds = %if.end 746 if.then2: ; preds = %if.end
724 call void @func() 747 call void @func()
725 br label %if.end3 748 br label %if.end3
726 749
727 if.end3: ; preds = %if.end, %if.then2 750 if.end3: ; preds = %if.end, %if.then2
728 ret void 751 ret void
729 } 752 }
730 ; CHECK-LABEL: fcmpGe 753 ; CHECK-LABEL: fcmpGe
731 ; CHECK: ucomiss 754 ; CHECK: ucomiss
732 ; CHECK: jb {{[0-9]}} 755 ; CHECK: jb {{[0-9]}}
733 ; CHECK: call func 756 ; CHECK: call
757 ; CHECK-NEXT: R_{{.*}} func
734 ; CHECK: ucomisd 758 ; CHECK: ucomisd
735 ; CHECK: jb {{[0-9]}} 759 ; CHECK: jb {{[0-9]}}
736 ; CHECK: call func 760 ; CHECK: call
761 ; CHECK-NEXT: R_{{.*}} func
737 762
738 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 763 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
739 entry: 764 entry:
740 %cmp = fcmp olt float %a, %b 765 %cmp = fcmp olt float %a, %b
741 br i1 %cmp, label %if.then, label %if.end 766 br i1 %cmp, label %if.then, label %if.end
742 767
743 if.then: ; preds = %entry 768 if.then: ; preds = %entry
744 call void @func() 769 call void @func()
745 br label %if.end 770 br label %if.end
746 771
747 if.end: ; preds = %if.then, %entry 772 if.end: ; preds = %if.then, %entry
748 %cmp1 = fcmp olt double %c, %d 773 %cmp1 = fcmp olt double %c, %d
749 br i1 %cmp1, label %if.then2, label %if.end3 774 br i1 %cmp1, label %if.then2, label %if.end3
750 775
751 if.then2: ; preds = %if.end 776 if.then2: ; preds = %if.end
752 call void @func() 777 call void @func()
753 br label %if.end3 778 br label %if.end3
754 779
755 if.end3: ; preds = %if.then2, %if.end 780 if.end3: ; preds = %if.then2, %if.end
756 ret void 781 ret void
757 } 782 }
758 ; CHECK-LABEL: fcmpLt 783 ; CHECK-LABEL: fcmpLt
759 ; CHECK: ucomiss 784 ; CHECK: ucomiss
760 ; CHECK: ja {{[0-9]}} 785 ; CHECK: ja {{[0-9]}}
761 ; CHECK: call func 786 ; CHECK: call
787 ; CHECK-NEXT: R_{{.*}} func
762 ; CHECK: ucomisd 788 ; CHECK: ucomisd
763 ; CHECK: ja {{[0-9]}} 789 ; CHECK: ja {{[0-9]}}
764 ; CHECK: call func 790 ; CHECK: call
791 ; CHECK-NEXT: R_{{.*}} func
765 792
766 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 793 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
767 entry: 794 entry:
768 %cmp = fcmp ugt float %a, %b 795 %cmp = fcmp ugt float %a, %b
769 br i1 %cmp, label %if.end, label %if.then 796 br i1 %cmp, label %if.end, label %if.then
770 797
771 if.then: ; preds = %entry 798 if.then: ; preds = %entry
772 call void @func() 799 call void @func()
773 br label %if.end 800 br label %if.end
774 801
775 if.end: ; preds = %entry, %if.then 802 if.end: ; preds = %entry, %if.then
776 %cmp1 = fcmp ugt double %c, %d 803 %cmp1 = fcmp ugt double %c, %d
777 br i1 %cmp1, label %if.end3, label %if.then2 804 br i1 %cmp1, label %if.end3, label %if.then2
778 805
779 if.then2: ; preds = %if.end 806 if.then2: ; preds = %if.end
780 call void @func() 807 call void @func()
781 br label %if.end3 808 br label %if.end3
782 809
783 if.end3: ; preds = %if.end, %if.then2 810 if.end3: ; preds = %if.end, %if.then2
784 ret void 811 ret void
785 } 812 }
786 ; CHECK-LABEL: fcmpLe 813 ; CHECK-LABEL: fcmpLe
787 ; CHECK: ucomiss 814 ; CHECK: ucomiss
788 ; CHECK: jb {{[0-9]}} 815 ; CHECK: jb {{[0-9]}}
789 ; CHECK: call func 816 ; CHECK: call
817 ; CHECK-NEXT: R_{{.*}} func
790 ; CHECK: ucomisd 818 ; CHECK: ucomisd
791 ; CHECK: jb {{[0-9]}} 819 ; CHECK: jb {{[0-9]}}
792 ; CHECK: call func 820 ; CHECK: call
821 ; CHECK-NEXT: R_{{.*}} func
793 822
794 define internal i32 @fcmpFalseFloat(float %a, float %b) { 823 define internal i32 @fcmpFalseFloat(float %a, float %b) {
795 entry: 824 entry:
796 %cmp = fcmp false float %a, %b 825 %cmp = fcmp false float %a, %b
797 %cmp.ret_ext = zext i1 %cmp to i32 826 %cmp.ret_ext = zext i1 %cmp to i32
798 ret i32 %cmp.ret_ext 827 ret i32 %cmp.ret_ext
799 } 828 }
800 ; CHECK-LABEL: fcmpFalseFloat 829 ; CHECK-LABEL: fcmpFalseFloat
801 ; CHECK: mov {{.*}}, 0 830 ; CHECK: mov {{.*}},0x0
802 831
803 define internal i32 @fcmpFalseDouble(double %a, double %b) { 832 define internal i32 @fcmpFalseDouble(double %a, double %b) {
804 entry: 833 entry:
805 %cmp = fcmp false double %a, %b 834 %cmp = fcmp false double %a, %b
806 %cmp.ret_ext = zext i1 %cmp to i32 835 %cmp.ret_ext = zext i1 %cmp to i32
807 ret i32 %cmp.ret_ext 836 ret i32 %cmp.ret_ext
808 } 837 }
809 ; CHECK-LABEL: fcmpFalseDouble 838 ; CHECK-LABEL: fcmpFalseDouble
810 ; CHECK: mov {{.*}}, 0 839 ; CHECK: mov {{.*}},0x0
811 840
812 define internal i32 @fcmpOeqFloat(float %a, float %b) { 841 define internal i32 @fcmpOeqFloat(float %a, float %b) {
813 entry: 842 entry:
814 %cmp = fcmp oeq float %a, %b 843 %cmp = fcmp oeq float %a, %b
815 %cmp.ret_ext = zext i1 %cmp to i32 844 %cmp.ret_ext = zext i1 %cmp to i32
816 ret i32 %cmp.ret_ext 845 ret i32 %cmp.ret_ext
817 } 846 }
818 ; CHECK-LABEL: fcmpOeqFloat 847 ; CHECK-LABEL: fcmpOeqFloat
819 ; CHECK: ucomiss 848 ; CHECK: ucomiss
820 ; CHECK: jne {{[0-9]}} 849 ; CHECK: jne {{[0-9]}}
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
1093 ; CHECK: ucomisd 1122 ; CHECK: ucomisd
1094 ; CHECK: jp {{[0-9]}} 1123 ; CHECK: jp {{[0-9]}}
1095 1124
1096 define internal i32 @fcmpTrueFloat(float %a, float %b) { 1125 define internal i32 @fcmpTrueFloat(float %a, float %b) {
1097 entry: 1126 entry:
1098 %cmp = fcmp true float %a, %b 1127 %cmp = fcmp true float %a, %b
1099 %cmp.ret_ext = zext i1 %cmp to i32 1128 %cmp.ret_ext = zext i1 %cmp to i32
1100 ret i32 %cmp.ret_ext 1129 ret i32 %cmp.ret_ext
1101 } 1130 }
1102 ; CHECK-LABEL: fcmpTrueFloat 1131 ; CHECK-LABEL: fcmpTrueFloat
1103 ; CHECK: mov {{.*}}, 1 1132 ; CHECK: mov {{.*}},0x1
1104 1133
1105 define internal i32 @fcmpTrueDouble(double %a, double %b) { 1134 define internal i32 @fcmpTrueDouble(double %a, double %b) {
1106 entry: 1135 entry:
1107 %cmp = fcmp true double %a, %b 1136 %cmp = fcmp true double %a, %b
1108 %cmp.ret_ext = zext i1 %cmp to i32 1137 %cmp.ret_ext = zext i1 %cmp to i32
1109 ret i32 %cmp.ret_ext 1138 ret i32 %cmp.ret_ext
1110 } 1139 }
1111 ; CHECK-LABEL: fcmpTrueDouble 1140 ; CHECK-LABEL: fcmpTrueDouble
1112 ; CHECK: mov {{.*}}, 1 1141 ; CHECK: mov {{.*}},0x1
1113 1142
1114 define internal float @loadFloat(i32 %a) { 1143 define internal float @loadFloat(i32 %a) {
1115 entry: 1144 entry:
1116 %__1 = inttoptr i32 %a to float* 1145 %__1 = inttoptr i32 %a to float*
1117 %v0 = load float* %__1, align 4 1146 %v0 = load float* %__1, align 4
1118 ret float %v0 1147 ret float %v0
1119 } 1148 }
1120 ; CHECK-LABEL: loadFloat 1149 ; CHECK-LABEL: loadFloat
1121 ; CHECK: movss 1150 ; CHECK: movss
1122 ; CHECK: fld 1151 ; CHECK: fld
1123 1152
1124 define internal double @loadDouble(i32 %a) { 1153 define internal double @loadDouble(i32 %a) {
1125 entry: 1154 entry:
1126 %__1 = inttoptr i32 %a to double* 1155 %__1 = inttoptr i32 %a to double*
1127 %v0 = load double* %__1, align 8 1156 %v0 = load double* %__1, align 8
1128 ret double %v0 1157 ret double %v0
1129 } 1158 }
1130 ; CHECK-LABEL: loadDouble 1159 ; CHECK-LABEL: loadDouble
1131 ; CHECK: movsd 1160 ; CHECK: movsd
1132 ; CHECK: fld 1161 ; CHECK: fld
1133 1162
1134 define internal void @storeFloat(i32 %a, float %value) { 1163 define internal void @storeFloat(i32 %a, float %value) {
1135 entry: 1164 entry:
1136 %__2 = inttoptr i32 %a to float* 1165 %__2 = inttoptr i32 %a to float*
1137 store float %value, float* %__2, align 4 1166 store float %value, float* %__2, align 4
1138 ret void 1167 ret void
1139 } 1168 }
1140 ; CHECK-LABEL: storeFloat: 1169 ; CHECK-LABEL: storeFloat
1141 ; CHECK: movss 1170 ; CHECK: movss
1142 ; CHECK: movss 1171 ; CHECK: movss
1143 1172
1144 define internal void @storeDouble(i32 %a, double %value) { 1173 define internal void @storeDouble(i32 %a, double %value) {
1145 entry: 1174 entry:
1146 %__2 = inttoptr i32 %a to double* 1175 %__2 = inttoptr i32 %a to double*
1147 store double %value, double* %__2, align 8 1176 store double %value, double* %__2, align 8
1148 ret void 1177 ret void
1149 } 1178 }
1150 ; CHECK-LABEL: storeDouble: 1179 ; CHECK-LABEL: storeDouble
1151 ; CHECK: movsd 1180 ; CHECK: movsd
1152 ; CHECK: movsd 1181 ; CHECK: movsd
1153 1182
1154 define internal void @storeFloatConst(i32 %a) { 1183 define internal void @storeFloatConst(i32 %a) {
1155 entry: 1184 entry:
1156 %a.asptr = inttoptr i32 %a to float* 1185 %a.asptr = inttoptr i32 %a to float*
1157 store float 0x3FF3AE1480000000, float* %a.asptr, align 4 1186 store float 0x3FF3AE1480000000, float* %a.asptr, align 4
1158 ret void 1187 ret void
1159 } 1188 }
1160 ; CHECK-LABEL: storeFloatConst 1189 ; CHECK-LABEL: storeFloatConst
(...skipping 24 matching lines...) Expand all
1185 define internal double @selectDoubleVarVar(double %a, double %b) { 1214 define internal double @selectDoubleVarVar(double %a, double %b) {
1186 entry: 1215 entry:
1187 %cmp = fcmp olt double %a, %b 1216 %cmp = fcmp olt double %a, %b
1188 %cond = select i1 %cmp, double %a, double %b 1217 %cond = select i1 %cmp, double %a, double %b
1189 ret double %cond 1218 ret double %cond
1190 } 1219 }
1191 ; CHECK-LABEL: selectDoubleVarVar 1220 ; CHECK-LABEL: selectDoubleVarVar
1192 ; CHECK: ucomisd 1221 ; CHECK: ucomisd
1193 ; CHECK: ja {{[0-9]}} 1222 ; CHECK: ja {{[0-9]}}
1194 ; CHECK: fld 1223 ; CHECK: fld
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698