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

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

Powered by Google App Engine
This is Rietveld 408576698