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

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

Issue 2357143002: [SubZero] Fix floating-point comparison for MIPS (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; This tries to be a comprehensive test of f32 and f64 compare operations. 1 ; This tries to be a comprehensive test of f32 and f64 compare operations.
2 2
3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ 3 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \
4 ; RUN: -allow-externally-defined-symbols | FileCheck %s 4 ; RUN: -allow-externally-defined-symbols | FileCheck %s
5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ 5 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \
6 ; RUN: -allow-externally-defined-symbols | FileCheck %s \ 6 ; RUN: -allow-externally-defined-symbols | FileCheck %s \
7 ; RUN: --check-prefix=CHECK-OM1 7 ; RUN: --check-prefix=CHECK-OM1
8 8
9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \ 9 ; RUN: %if --need=allow_dump --need=target_ARM32 --command %p2i --filetype=asm \
10 ; RUN: --target arm32 -i %s --args -O2 \ 10 ; RUN: --target arm32 -i %s --args -O2 \
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 ; ARM32-O2: bne 69 ; ARM32-O2: bne
70 ; ARM32: bl func 70 ; ARM32: bl func
71 ; ARM32: vcmp.f64 71 ; ARM32: vcmp.f64
72 ; ARM32: vmrs 72 ; ARM32: vmrs
73 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 73 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
74 ; ARM32-OM1: moveq [[R1]], #1 74 ; ARM32-OM1: moveq [[R1]], #1
75 ; ARM32-O2: bne 75 ; ARM32-O2: bne
76 ; MIPS32-LABEL: fcmpEq 76 ; MIPS32-LABEL: fcmpEq
77 ; MIPS32-LABEL: .LfcmpEq$entry 77 ; MIPS32-LABEL: .LfcmpEq$entry
78 ; MIPS32: c.eq.s 78 ; MIPS32: c.eq.s
79 ; MIPS32: movf 79 ; MIPS32: addiu [[REG:.*]], $zero, 1
80 ; MIPS32: movf [[REG]], $zero, {{.*}}
80 ; MIPS32-LABEL: .LfcmpEq$if.end 81 ; MIPS32-LABEL: .LfcmpEq$if.end
81 ; MIPS32: c.eq.d 82 ; MIPS32: c.eq.d
82 ; MIPS32: movf 83 ; MIPS32: addiu [[REG:.*]], $zero, 1
84 ; MIPS32: movf [[REG]], $zero, {{.*}}
83 85
84 declare void @func() 86 declare void @func()
85 87
86 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { 88 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
87 entry: 89 entry:
88 %cmp = fcmp une float %a, %b 90 %cmp = fcmp une float %a, %b
89 br i1 %cmp, label %if.then, label %if.end 91 br i1 %cmp, label %if.then, label %if.end
90 92
91 if.then: ; preds = %entry 93 if.then: ; preds = %entry
92 call void @func() 94 call void @func()
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 ; ARM32-OM1: movne [[R0]], #1 134 ; ARM32-OM1: movne [[R0]], #1
133 ; ARM32-O2: beq 135 ; ARM32-O2: beq
134 ; ARM32: vcmp.f64 136 ; ARM32: vcmp.f64
135 ; ARM32: vmrs 137 ; ARM32: vmrs
136 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 138 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
137 ; ARM32-OM1: movne [[R1]], #1 139 ; ARM32-OM1: movne [[R1]], #1
138 ; ARM32-O2: beq 140 ; ARM32-O2: beq
139 ; MIPS32-LABEL: fcmpNe 141 ; MIPS32-LABEL: fcmpNe
140 ; MIPS32-LABEL: .LfcmpNe$entry 142 ; MIPS32-LABEL: .LfcmpNe$entry
141 ; MIPS32: c.eq.s 143 ; MIPS32: c.eq.s
142 ; MIPS32: movt 144 ; MIPS32: addiu [[REG:.*]], $zero, 1
145 ; MIPS32: movt [[REG]], $zero, {{.*}}
143 ; MIPS32-LABEL: .LfcmpNe$if.end 146 ; MIPS32-LABEL: .LfcmpNe$if.end
144 ; MIPS32: c.eq.d 147 ; MIPS32: c.eq.d
145 ; MIPS32: movt 148 ; MIPS32: addiu [[REG:.*]], $zero, 1
149 ; MIPS32: movt [[REG]], $zero, {{.*}}
146 150
147 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 151 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
148 entry: 152 entry:
149 %cmp = fcmp ogt float %a, %b 153 %cmp = fcmp ogt float %a, %b
150 br i1 %cmp, label %if.then, label %if.end 154 br i1 %cmp, label %if.then, label %if.end
151 155
152 if.then: ; preds = %entry 156 if.then: ; preds = %entry
153 call void @func() 157 call void @func()
154 br label %if.end 158 br label %if.end
155 159
(...skipping 29 matching lines...) Expand all
185 ; ARM32-OM1: movgt [[R0]], #1 189 ; ARM32-OM1: movgt [[R0]], #1
186 ; ARM32-O2: ble 190 ; ARM32-O2: ble
187 ; ARM32: vcmp.f64 191 ; ARM32: vcmp.f64
188 ; ARM32: vmrs 192 ; ARM32: vmrs
189 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 193 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
190 ; ARM32-OM1: movgt [[R1]], #1 194 ; ARM32-OM1: movgt [[R1]], #1
191 ; ARM32-O2: ble 195 ; ARM32-O2: ble
192 ; MIPS32-LABEL: fcmpGt 196 ; MIPS32-LABEL: fcmpGt
193 ; MIPS32-LABEL: .LfcmpGt$entry 197 ; MIPS32-LABEL: .LfcmpGt$entry
194 ; MIPS32: c.ule.s 198 ; MIPS32: c.ule.s
195 ; MIPS32: movt 199 ; MIPS32: addiu [[REG:.*]], $zero, 1
200 ; MIPS32: movt [[REG]], $zero, {{.*}}
196 ; MIPS32-LABEL: .LfcmpGt$if.end 201 ; MIPS32-LABEL: .LfcmpGt$if.end
197 ; MIPS32: c.ule.d 202 ; MIPS32: c.ule.d
198 ; MIPS32: movt 203 ; MIPS32: addiu [[REG:.*]], $zero, 1
204 ; MIPS32: movt [[REG]], $zero, {{.*}}
199 205
200 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 206 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
201 entry: 207 entry:
202 %cmp = fcmp ult float %a, %b 208 %cmp = fcmp ult float %a, %b
203 br i1 %cmp, label %if.end, label %if.then 209 br i1 %cmp, label %if.end, label %if.then
204 210
205 if.then: ; preds = %entry 211 if.then: ; preds = %entry
206 call void @func() 212 call void @func()
207 br label %if.end 213 br label %if.end
208 214
(...skipping 29 matching lines...) Expand all
238 ; ARM32-OM1: movlt [[R0]], #1 244 ; ARM32-OM1: movlt [[R0]], #1
239 ; ARM32-O2: blt 245 ; ARM32-O2: blt
240 ; ARM32: vcmp.f64 246 ; ARM32: vcmp.f64
241 ; ARM32: vmrs 247 ; ARM32: vmrs
242 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 248 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
243 ; ARM32-OM1: movlt [[R1]], #1 249 ; ARM32-OM1: movlt [[R1]], #1
244 ; ARM32-O2: blt 250 ; ARM32-O2: blt
245 ; MIPS32-LABEL: fcmpGe 251 ; MIPS32-LABEL: fcmpGe
246 ; MIPS32-LABEL: .LfcmpGe$entry 252 ; MIPS32-LABEL: .LfcmpGe$entry
247 ; MIPS32: c.ult.s 253 ; MIPS32: c.ult.s
248 ; MIPS32: movf 254 ; MIPS32: addiu [[REG:.*]], $zero, 1
255 ; MIPS32: movf [[REG]], $zero, {{.*}}
249 ; MIPS32-LABEL: .LfcmpGe$if.end 256 ; MIPS32-LABEL: .LfcmpGe$if.end
250 ; MIPS32: c.ult.d 257 ; MIPS32: c.ult.d
251 ; MIPS32: movf 258 ; MIPS32: addiu [[REG:.*]], $zero, 1
259 ; MIPS32: movf [[REG]], $zero, {{.*}}
252 260
253 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 261 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
254 entry: 262 entry:
255 %cmp = fcmp olt float %a, %b 263 %cmp = fcmp olt float %a, %b
256 br i1 %cmp, label %if.then, label %if.end 264 br i1 %cmp, label %if.then, label %if.end
257 265
258 if.then: ; preds = %entry 266 if.then: ; preds = %entry
259 call void @func() 267 call void @func()
260 br label %if.end 268 br label %if.end
261 269
(...skipping 29 matching lines...) Expand all
291 ; ARM32-OM1: movmi [[R0]], #1 299 ; ARM32-OM1: movmi [[R0]], #1
292 ; ARM32-O2: bpl 300 ; ARM32-O2: bpl
293 ; ARM32: vcmp.f64 301 ; ARM32: vcmp.f64
294 ; ARM32: vmrs 302 ; ARM32: vmrs
295 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 303 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
296 ; ARM32-OM1: movmi [[R1]], #1 304 ; ARM32-OM1: movmi [[R1]], #1
297 ; ARM32-O2: bpl 305 ; ARM32-O2: bpl
298 ; MIPS32-LABEL: fcmpLt 306 ; MIPS32-LABEL: fcmpLt
299 ; MIPS32-LABEL: .LfcmpLt$entry 307 ; MIPS32-LABEL: .LfcmpLt$entry
300 ; MIPS32: c.olt.s 308 ; MIPS32: c.olt.s
301 ; MIPS32: movf 309 ; MIPS32: addiu [[REG:.*]], $zero, 1
310 ; MIPS32: movf [[REG]], $zero, {{.*}}
302 ; MIPS32-LABEL: .LfcmpLt$if.end 311 ; MIPS32-LABEL: .LfcmpLt$if.end
303 ; MIPS32: c.olt.d 312 ; MIPS32: c.olt.d
304 ; MIPS32: movf 313 ; MIPS32: addiu [[REG:.*]], $zero, 1
314 ; MIPS32: movf [[REG]], $zero, {{.*}}
305 315
306 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 316 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
307 entry: 317 entry:
308 %cmp = fcmp ugt float %a, %b 318 %cmp = fcmp ugt float %a, %b
309 br i1 %cmp, label %if.end, label %if.then 319 br i1 %cmp, label %if.end, label %if.then
310 320
311 if.then: ; preds = %entry 321 if.then: ; preds = %entry
312 call void @func() 322 call void @func()
313 br label %if.end 323 br label %if.end
314 324
(...skipping 29 matching lines...) Expand all
344 ; ARM32-OM1: movhi [[R0]], #1 354 ; ARM32-OM1: movhi [[R0]], #1
345 ; ARM32-O2: bhi 355 ; ARM32-O2: bhi
346 ; ARM32: vcmp.f64 356 ; ARM32: vcmp.f64
347 ; ARM32: vmrs 357 ; ARM32: vmrs
348 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0 358 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
349 ; ARM32-OM1: movhi [[R1]], #1 359 ; ARM32-OM1: movhi [[R1]], #1
350 ; ARM32-O2: bhi 360 ; ARM32-O2: bhi
351 ; MIPS32-LABEL: fcmpLe 361 ; MIPS32-LABEL: fcmpLe
352 ; MIPS32-LABEL: .LfcmpLe$entry 362 ; MIPS32-LABEL: .LfcmpLe$entry
353 ; MIPS32: c.ole.s 363 ; MIPS32: c.ole.s
354 ; MIPS32: movt 364 ; MIPS32: addiu [[REG:.*]], $zero, 1
365 ; MIPS32: movt [[REG]], $zero, {{.*}}
355 ; MIPS32-LABEL: .LfcmpLe$if.end 366 ; MIPS32-LABEL: .LfcmpLe$if.end
356 ; MIPS32: c.ole.d 367 ; MIPS32: c.ole.d
357 ; MIPS32: movt 368 ; MIPS32: addiu [[REG:.*]], $zero, 1
369 ; MIPS32: movt [[REG]], $zero, {{.*}}
358 370
359 define internal i32 @fcmpFalseFloat(float %a, float %b) { 371 define internal i32 @fcmpFalseFloat(float %a, float %b) {
360 entry: 372 entry:
361 %cmp = fcmp false float %a, %b 373 %cmp = fcmp false float %a, %b
362 %cmp.ret_ext = zext i1 %cmp to i32 374 %cmp.ret_ext = zext i1 %cmp to i32
363 ret i32 %cmp.ret_ext 375 ret i32 %cmp.ret_ext
364 } 376 }
365 ; CHECK-LABEL: fcmpFalseFloat 377 ; CHECK-LABEL: fcmpFalseFloat
366 ; CHECK: mov {{.*}},0x0 378 ; CHECK: mov {{.*}},0x0
367 ; ARM32-LABEL: fcmpFalseFloat 379 ; ARM32-LABEL: fcmpFalseFloat
(...skipping 27 matching lines...) Expand all
395 ; CHECK: jne 407 ; CHECK: jne
396 ; CHECK: jp 408 ; CHECK: jp
397 ; ARM32-LABEL: fcmpOeqFloat 409 ; ARM32-LABEL: fcmpOeqFloat
398 ; ARM32-O2: mov [[R:r[0-9]+]], #0 410 ; ARM32-O2: mov [[R:r[0-9]+]], #0
399 ; ARM32: vcmp.f32 411 ; ARM32: vcmp.f32
400 ; ARM32: vmrs 412 ; ARM32: vmrs
401 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 413 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
402 ; ARM32: moveq [[R]], #1 414 ; ARM32: moveq [[R]], #1
403 ; MIPS32-LABEL: fcmpOeqFloat 415 ; MIPS32-LABEL: fcmpOeqFloat
404 ; MIPS32: c.eq.s 416 ; MIPS32: c.eq.s
405 ; MIPS32: movf 417 ; MIPS32: addiu [[REG:.*]], $zero, 1
418 ; MIPS32: movf [[REG]], $zero, {{.*}}
406 419
407 define internal i32 @fcmpOeqDouble(double %a, double %b) { 420 define internal i32 @fcmpOeqDouble(double %a, double %b) {
408 entry: 421 entry:
409 %cmp = fcmp oeq double %a, %b 422 %cmp = fcmp oeq double %a, %b
410 %cmp.ret_ext = zext i1 %cmp to i32 423 %cmp.ret_ext = zext i1 %cmp to i32
411 ret i32 %cmp.ret_ext 424 ret i32 %cmp.ret_ext
412 } 425 }
413 ; CHECK-LABEL: fcmpOeqDouble 426 ; CHECK-LABEL: fcmpOeqDouble
414 ; CHECK: ucomisd 427 ; CHECK: ucomisd
415 ; CHECK: jne 428 ; CHECK: jne
416 ; CHECK: jp 429 ; CHECK: jp
417 ; ARM32-LABEL: fcmpOeqDouble 430 ; ARM32-LABEL: fcmpOeqDouble
418 ; ARM32-O2: mov [[R:r[0-9]+]], #0 431 ; ARM32-O2: mov [[R:r[0-9]+]], #0
419 ; ARM32: vcmp.f64 432 ; ARM32: vcmp.f64
420 ; ARM32: vmrs 433 ; ARM32: vmrs
421 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 434 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
422 ; ARM32: moveq [[R]], #1 435 ; ARM32: moveq [[R]], #1
423 ; MIPS32-LABEL: fcmpOeqDouble 436 ; MIPS32-LABEL: fcmpOeqDouble
424 ; MIPS32: c.eq.d 437 ; MIPS32: c.eq.d
425 ; MIPS32: movf 438 ; MIPS32: addiu [[REG:.*]], $zero, 1
439 ; MIPS32: movf [[REG]], $zero, {{.*}}
426 440
427 define internal i32 @fcmpOgtFloat(float %a, float %b) { 441 define internal i32 @fcmpOgtFloat(float %a, float %b) {
428 entry: 442 entry:
429 %cmp = fcmp ogt float %a, %b 443 %cmp = fcmp ogt float %a, %b
430 %cmp.ret_ext = zext i1 %cmp to i32 444 %cmp.ret_ext = zext i1 %cmp to i32
431 ret i32 %cmp.ret_ext 445 ret i32 %cmp.ret_ext
432 } 446 }
433 ; CHECK-LABEL: fcmpOgtFloat 447 ; CHECK-LABEL: fcmpOgtFloat
434 ; CHECK: ucomiss 448 ; CHECK: ucomiss
435 ; CHECK: seta 449 ; CHECK: seta
436 ; ARM32-LABEL: fcmpOgtFloat 450 ; ARM32-LABEL: fcmpOgtFloat
437 ; ARM32-O2: mov [[R:r[0-9]+]], #0 451 ; ARM32-O2: mov [[R:r[0-9]+]], #0
438 ; ARM32: vcmp.f32 452 ; ARM32: vcmp.f32
439 ; ARM32: vmrs 453 ; ARM32: vmrs
440 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 454 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
441 ; ARM32: movgt [[R]], #1 455 ; ARM32: movgt [[R]], #1
442 ; MIPS32-LABEL: fcmpOgtFloat 456 ; MIPS32-LABEL: fcmpOgtFloat
443 ; MIPS32: c.ule.s 457 ; MIPS32: c.ule.s
444 ; MIPS32: movt 458 ; MIPS32: addiu [[REG:.*]], $zero, 1
459 ; MIPS32: movt [[REG]], $zero, {{.*}}
445 460
446 define internal i32 @fcmpOgtDouble(double %a, double %b) { 461 define internal i32 @fcmpOgtDouble(double %a, double %b) {
447 entry: 462 entry:
448 %cmp = fcmp ogt double %a, %b 463 %cmp = fcmp ogt double %a, %b
449 %cmp.ret_ext = zext i1 %cmp to i32 464 %cmp.ret_ext = zext i1 %cmp to i32
450 ret i32 %cmp.ret_ext 465 ret i32 %cmp.ret_ext
451 } 466 }
452 ; CHECK-LABEL: fcmpOgtDouble 467 ; CHECK-LABEL: fcmpOgtDouble
453 ; CHECK: ucomisd 468 ; CHECK: ucomisd
454 ; CHECK: seta 469 ; CHECK: seta
455 ; ARM32-LABEL: fcmpOgtDouble 470 ; ARM32-LABEL: fcmpOgtDouble
456 ; ARM32-O2: mov [[R:r[0-9]+]], #0 471 ; ARM32-O2: mov [[R:r[0-9]+]], #0
457 ; ARM32: vcmp.f64 472 ; ARM32: vcmp.f64
458 ; ARM32: vmrs 473 ; ARM32: vmrs
459 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 474 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
460 ; ARM32: movgt [[R]], #1 475 ; ARM32: movgt [[R]], #1
461 ; MIPS32-LABEL: fcmpOgtDouble 476 ; MIPS32-LABEL: fcmpOgtDouble
462 ; MIPS32: c.ule.d 477 ; MIPS32: c.ule.d
463 ; MIPS32: movt 478 ; MIPS32: addiu [[REG:.*]], $zero, 1
479 ; MIPS32: movt [[REG]], $zero, {{.*}}
464 480
465 define internal i32 @fcmpOgeFloat(float %a, float %b) { 481 define internal i32 @fcmpOgeFloat(float %a, float %b) {
466 entry: 482 entry:
467 %cmp = fcmp oge float %a, %b 483 %cmp = fcmp oge float %a, %b
468 %cmp.ret_ext = zext i1 %cmp to i32 484 %cmp.ret_ext = zext i1 %cmp to i32
469 ret i32 %cmp.ret_ext 485 ret i32 %cmp.ret_ext
470 } 486 }
471 ; CHECK-LABEL: fcmpOgeFloat 487 ; CHECK-LABEL: fcmpOgeFloat
472 ; CHECK: ucomiss 488 ; CHECK: ucomiss
473 ; CHECK: setae 489 ; CHECK: setae
474 ; ARM32-LABEL: fcmpOgeFloat 490 ; ARM32-LABEL: fcmpOgeFloat
475 ; ARM32-O2: mov [[R:r[0-9]+]], #0 491 ; ARM32-O2: mov [[R:r[0-9]+]], #0
476 ; ARM32: vcmp.f32 492 ; ARM32: vcmp.f32
477 ; ARM32: vmrs 493 ; ARM32: vmrs
478 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 494 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
479 ; ARM32: movge [[R]], #1 495 ; ARM32: movge [[R]], #1
480 ; MIPS32-LABEL: fcmpOgeFloat 496 ; MIPS32-LABEL: fcmpOgeFloat
481 ; MIPS32: c.ult.s 497 ; MIPS32: c.ult.s
482 ; MIPS32: movt 498 ; MIPS32: addiu [[REG:.*]], $zero, 1
499 ; MIPS32: movt [[REG]], $zero, {{.*}}
483 500
484 define internal i32 @fcmpOgeDouble(double %a, double %b) { 501 define internal i32 @fcmpOgeDouble(double %a, double %b) {
485 entry: 502 entry:
486 %cmp = fcmp oge double %a, %b 503 %cmp = fcmp oge double %a, %b
487 %cmp.ret_ext = zext i1 %cmp to i32 504 %cmp.ret_ext = zext i1 %cmp to i32
488 ret i32 %cmp.ret_ext 505 ret i32 %cmp.ret_ext
489 } 506 }
490 ; CHECK-LABEL: fcmpOgeDouble 507 ; CHECK-LABEL: fcmpOgeDouble
491 ; CHECK: ucomisd 508 ; CHECK: ucomisd
492 ; CHECK: setae 509 ; CHECK: setae
493 ; ARM32-LABEL: fcmpOgeDouble 510 ; ARM32-LABEL: fcmpOgeDouble
494 ; ARM32-O2: mov [[R:r[0-9]+]], #0 511 ; ARM32-O2: mov [[R:r[0-9]+]], #0
495 ; ARM32: vcmp.f64 512 ; ARM32: vcmp.f64
496 ; ARM32: vmrs 513 ; ARM32: vmrs
497 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 514 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
498 ; ARM32: movge [[R]], #1 515 ; ARM32: movge [[R]], #1
499 ; MIPS32-LABEL: fcmpOgeDouble 516 ; MIPS32-LABEL: fcmpOgeDouble
500 ; MIPS32: c.ult.d 517 ; MIPS32: c.ult.d
501 ; MIPS32: movt 518 ; MIPS32: addiu [[REG:.*]], $zero, 1
519 ; MIPS32: movt [[REG]], $zero, {{.*}}
502 520
503 define internal i32 @fcmpOltFloat(float %a, float %b) { 521 define internal i32 @fcmpOltFloat(float %a, float %b) {
504 entry: 522 entry:
505 %cmp = fcmp olt float %a, %b 523 %cmp = fcmp olt float %a, %b
506 %cmp.ret_ext = zext i1 %cmp to i32 524 %cmp.ret_ext = zext i1 %cmp to i32
507 ret i32 %cmp.ret_ext 525 ret i32 %cmp.ret_ext
508 } 526 }
509 ; CHECK-LABEL: fcmpOltFloat 527 ; CHECK-LABEL: fcmpOltFloat
510 ; CHECK: ucomiss 528 ; CHECK: ucomiss
511 ; CHECK: seta 529 ; CHECK: seta
512 ; ARM32-LABEL: fcmpOltFloat 530 ; ARM32-LABEL: fcmpOltFloat
513 ; ARM32-O2: mov [[R:r[0-9]+]], #0 531 ; ARM32-O2: mov [[R:r[0-9]+]], #0
514 ; ARM32: vcmp.f32 532 ; ARM32: vcmp.f32
515 ; ARM32: vmrs 533 ; ARM32: vmrs
516 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 534 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
517 ; ARM32: movmi [[R]], #1 535 ; ARM32: movmi [[R]], #1
518 ; MIPS32-LABEL: fcmpOltFloat 536 ; MIPS32-LABEL: fcmpOltFloat
519 ; MIPS32: c.olt.s 537 ; MIPS32: c.olt.s
520 ; MIPS32: movf 538 ; MIPS32: addiu [[REG:.*]], $zero, 1
539 ; MIPS32: movf [[REG]], $zero, {{.*}}
521 540
522 define internal i32 @fcmpOltDouble(double %a, double %b) { 541 define internal i32 @fcmpOltDouble(double %a, double %b) {
523 entry: 542 entry:
524 %cmp = fcmp olt double %a, %b 543 %cmp = fcmp olt double %a, %b
525 %cmp.ret_ext = zext i1 %cmp to i32 544 %cmp.ret_ext = zext i1 %cmp to i32
526 ret i32 %cmp.ret_ext 545 ret i32 %cmp.ret_ext
527 } 546 }
528 ; CHECK-LABEL: fcmpOltDouble 547 ; CHECK-LABEL: fcmpOltDouble
529 ; CHECK: ucomisd 548 ; CHECK: ucomisd
530 ; CHECK: seta 549 ; CHECK: seta
531 ; ARM32-LABEL: fcmpOltDouble 550 ; ARM32-LABEL: fcmpOltDouble
532 ; ARM32-O2: mov [[R:r[0-9]+]], #0 551 ; ARM32-O2: mov [[R:r[0-9]+]], #0
533 ; ARM32: vcmp.f64 552 ; ARM32: vcmp.f64
534 ; ARM32: vmrs 553 ; ARM32: vmrs
535 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 554 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
536 ; ARM32: movmi [[R]], #1 555 ; ARM32: movmi [[R]], #1
537 ; MIPS32-LABEL: fcmpOltDouble 556 ; MIPS32-LABEL: fcmpOltDouble
538 ; MIPS32: c.olt.d 557 ; MIPS32: c.olt.d
539 ; MIPS32: movf 558 ; MIPS32: addiu [[REG:.*]], $zero, 1
559 ; MIPS32: movf [[REG]], $zero, {{.*}}
540 560
541 define internal i32 @fcmpOleFloat(float %a, float %b) { 561 define internal i32 @fcmpOleFloat(float %a, float %b) {
542 entry: 562 entry:
543 %cmp = fcmp ole float %a, %b 563 %cmp = fcmp ole float %a, %b
544 %cmp.ret_ext = zext i1 %cmp to i32 564 %cmp.ret_ext = zext i1 %cmp to i32
545 ret i32 %cmp.ret_ext 565 ret i32 %cmp.ret_ext
546 } 566 }
547 ; CHECK-LABEL: fcmpOleFloat 567 ; CHECK-LABEL: fcmpOleFloat
548 ; CHECK: ucomiss 568 ; CHECK: ucomiss
549 ; CHECK: setae 569 ; CHECK: setae
550 ; ARM32-LABEL: fcmpOleFloat 570 ; ARM32-LABEL: fcmpOleFloat
551 ; ARM32-O2: mov [[R:r[0-9]+]], #0 571 ; ARM32-O2: mov [[R:r[0-9]+]], #0
552 ; ARM32: vcmp.f32 572 ; ARM32: vcmp.f32
553 ; ARM32: vmrs 573 ; ARM32: vmrs
554 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 574 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
555 ; ARM32: movls [[R]], #1 575 ; ARM32: movls [[R]], #1
556 ; MIPS32-LABEL: fcmpOleFloat 576 ; MIPS32-LABEL: fcmpOleFloat
557 ; MIPS32: c.ole.s 577 ; MIPS32: c.ole.s
558 ; MIPS32: movf 578 ; MIPS32: addiu [[REG:.*]], $zero, 1
579 ; MIPS32: movf [[REG]], $zero, {{.*}}
559 580
560 define internal i32 @fcmpOleDouble(double %a, double %b) { 581 define internal i32 @fcmpOleDouble(double %a, double %b) {
561 entry: 582 entry:
562 %cmp = fcmp ole double %a, %b 583 %cmp = fcmp ole double %a, %b
563 %cmp.ret_ext = zext i1 %cmp to i32 584 %cmp.ret_ext = zext i1 %cmp to i32
564 ret i32 %cmp.ret_ext 585 ret i32 %cmp.ret_ext
565 } 586 }
566 ; CHECK-LABEL: fcmpOleDouble 587 ; CHECK-LABEL: fcmpOleDouble
567 ; CHECK: ucomisd 588 ; CHECK: ucomisd
568 ; CHECK: setae 589 ; CHECK: setae
569 ; ARM32-LABEL: fcmpOleDouble 590 ; ARM32-LABEL: fcmpOleDouble
570 ; ARM32-O2: mov [[R:r[0-9]+]], #0 591 ; ARM32-O2: mov [[R:r[0-9]+]], #0
571 ; ARM32: vcmp.f64 592 ; ARM32: vcmp.f64
572 ; ARM32: vmrs 593 ; ARM32: vmrs
573 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 594 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
574 ; ARM32: movls [[R]], #1 595 ; ARM32: movls [[R]], #1
575 ; MIPS32-LABEL: fcmpOleDouble 596 ; MIPS32-LABEL: fcmpOleDouble
576 ; MIPS32: c.ole.d 597 ; MIPS32: c.ole.d
577 ; MIPS32: movf 598 ; MIPS32: addiu [[REG:.*]], $zero, 1
599 ; MIPS32: movf [[REG]], $zero, {{.*}}
578 600
579 define internal i32 @fcmpOneFloat(float %a, float %b) { 601 define internal i32 @fcmpOneFloat(float %a, float %b) {
580 entry: 602 entry:
581 %cmp = fcmp one float %a, %b 603 %cmp = fcmp one float %a, %b
582 %cmp.ret_ext = zext i1 %cmp to i32 604 %cmp.ret_ext = zext i1 %cmp to i32
583 ret i32 %cmp.ret_ext 605 ret i32 %cmp.ret_ext
584 } 606 }
585 ; CHECK-LABEL: fcmpOneFloat 607 ; CHECK-LABEL: fcmpOneFloat
586 ; CHECK: ucomiss 608 ; CHECK: ucomiss
587 ; CHECK: setne 609 ; CHECK: setne
588 ; ARM32-LABEL: fcmpOneFloat 610 ; ARM32-LABEL: fcmpOneFloat
589 ; ARM32-O2: mov [[R:r[0-9]+]], #0 611 ; ARM32-O2: mov [[R:r[0-9]+]], #0
590 ; ARM32: vcmp.f32 612 ; ARM32: vcmp.f32
591 ; ARM32: vmrs 613 ; ARM32: vmrs
592 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 614 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
593 ; ARM32: movmi [[R]], #1 615 ; ARM32: movmi [[R]], #1
594 ; ARM32: movgt [[R]], #1 616 ; ARM32: movgt [[R]], #1
595 ; MIPS32-LABEL: fcmpOneFloat 617 ; MIPS32-LABEL: fcmpOneFloat
596 ; MIPS32: c.ueq.s 618 ; MIPS32: c.ueq.s
597 ; MIPS32: movt 619 ; MIPS32: addiu [[REG:.*]], $zero, 1
620 ; MIPS32: movt [[REG]], $zero, {{.*}}
598 621
599 define internal i32 @fcmpOneDouble(double %a, double %b) { 622 define internal i32 @fcmpOneDouble(double %a, double %b) {
600 entry: 623 entry:
601 %cmp = fcmp one double %a, %b 624 %cmp = fcmp one double %a, %b
602 %cmp.ret_ext = zext i1 %cmp to i32 625 %cmp.ret_ext = zext i1 %cmp to i32
603 ret i32 %cmp.ret_ext 626 ret i32 %cmp.ret_ext
604 } 627 }
605 ; CHECK-LABEL: fcmpOneDouble 628 ; CHECK-LABEL: fcmpOneDouble
606 ; CHECK: ucomisd 629 ; CHECK: ucomisd
607 ; CHECK: setne 630 ; CHECK: setne
608 ; ARM32-LABEL: fcmpOneDouble 631 ; ARM32-LABEL: fcmpOneDouble
609 ; ARM32-O2: mov [[R:r[0-9]+]], #0 632 ; ARM32-O2: mov [[R:r[0-9]+]], #0
610 ; ARM32: vcmp.f64 633 ; ARM32: vcmp.f64
611 ; ARM32: vmrs 634 ; ARM32: vmrs
612 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 635 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
613 ; ARM32: movmi [[R]], #1 636 ; ARM32: movmi [[R]], #1
614 ; ARM32: movgt [[R]], #1 637 ; ARM32: movgt [[R]], #1
615 ; MIPS32-LABEL: fcmpOneDouble 638 ; MIPS32-LABEL: fcmpOneDouble
616 ; MIPS32: c.ueq.d 639 ; MIPS32: c.ueq.d
617 ; MIPS32: movt 640 ; MIPS32: addiu [[REG:.*]], $zero, 1
641 ; MIPS32: movt [[REG]], $zero, {{.*}}
618 642
619 define internal i32 @fcmpOrdFloat(float %a, float %b) { 643 define internal i32 @fcmpOrdFloat(float %a, float %b) {
620 entry: 644 entry:
621 %cmp = fcmp ord float %a, %b 645 %cmp = fcmp ord float %a, %b
622 %cmp.ret_ext = zext i1 %cmp to i32 646 %cmp.ret_ext = zext i1 %cmp to i32
623 ret i32 %cmp.ret_ext 647 ret i32 %cmp.ret_ext
624 } 648 }
625 ; CHECK-LABEL: fcmpOrdFloat 649 ; CHECK-LABEL: fcmpOrdFloat
626 ; CHECK: ucomiss 650 ; CHECK: ucomiss
627 ; CHECK: setnp 651 ; CHECK: setnp
628 ; ARM32-LABEL: fcmpOrdFloat 652 ; ARM32-LABEL: fcmpOrdFloat
629 ; ARM32-O2: mov [[R:r[0-9]+]], #0 653 ; ARM32-O2: mov [[R:r[0-9]+]], #0
630 ; ARM32: vcmp.f32 654 ; ARM32: vcmp.f32
631 ; ARM32: vmrs 655 ; ARM32: vmrs
632 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 656 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
633 ; ARM32: movvc [[R]], #1 657 ; ARM32: movvc [[R]], #1
634 ; MIPS32-LABEL: fcmpOrdFloat 658 ; MIPS32-LABEL: fcmpOrdFloat
635 ; MIPS32: c.un.s 659 ; MIPS32: c.un.s
636 ; MIPS32: movt 660 ; MIPS32: addiu [[REG:.*]], $zero, 1
661 ; MIPS32: movt [[REG]], $zero, {{.*}}
637 662
638 define internal i32 @fcmpOrdDouble(double %a, double %b) { 663 define internal i32 @fcmpOrdDouble(double %a, double %b) {
639 entry: 664 entry:
640 %cmp = fcmp ord double %a, %b 665 %cmp = fcmp ord double %a, %b
641 %cmp.ret_ext = zext i1 %cmp to i32 666 %cmp.ret_ext = zext i1 %cmp to i32
642 ret i32 %cmp.ret_ext 667 ret i32 %cmp.ret_ext
643 } 668 }
644 ; CHECK-LABEL: fcmpOrdDouble 669 ; CHECK-LABEL: fcmpOrdDouble
645 ; CHECK: ucomisd 670 ; CHECK: ucomisd
646 ; CHECK: setnp 671 ; CHECK: setnp
647 ; ARM32-LABEL: fcmpOrdDouble 672 ; ARM32-LABEL: fcmpOrdDouble
648 ; ARM32-O2: mov [[R:r[0-9]+]], #0 673 ; ARM32-O2: mov [[R:r[0-9]+]], #0
649 ; ARM32: vcmp.f64 674 ; ARM32: vcmp.f64
650 ; ARM32: vmrs 675 ; ARM32: vmrs
651 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 676 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
652 ; ARM32: movvc [[R]], #1 677 ; ARM32: movvc [[R]], #1
653 ; MIPS32-LABEL: fcmpOrdDouble 678 ; MIPS32-LABEL: fcmpOrdDouble
654 ; MIPS32: c.un.d 679 ; MIPS32: c.un.d
655 ; MIPS32: movt 680 ; MIPS32: addiu [[REG:.*]], $zero, 1
681 ; MIPS32: movt [[REG]], $zero, {{.*}}
656 682
657 define internal i32 @fcmpUeqFloat(float %a, float %b) { 683 define internal i32 @fcmpUeqFloat(float %a, float %b) {
658 entry: 684 entry:
659 %cmp = fcmp ueq float %a, %b 685 %cmp = fcmp ueq float %a, %b
660 %cmp.ret_ext = zext i1 %cmp to i32 686 %cmp.ret_ext = zext i1 %cmp to i32
661 ret i32 %cmp.ret_ext 687 ret i32 %cmp.ret_ext
662 } 688 }
663 ; CHECK-LABEL: fcmpUeqFloat 689 ; CHECK-LABEL: fcmpUeqFloat
664 ; CHECK: ucomiss 690 ; CHECK: ucomiss
665 ; CHECK: sete 691 ; CHECK: sete
666 ; ARM32-LABEL: fcmpUeqFloat 692 ; ARM32-LABEL: fcmpUeqFloat
667 ; ARM32-O2: mov [[R:r[0-9]+]], #0 693 ; ARM32-O2: mov [[R:r[0-9]+]], #0
668 ; ARM32: vcmp.f32 694 ; ARM32: vcmp.f32
669 ; ARM32: vmrs 695 ; ARM32: vmrs
670 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 696 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
671 ; ARM32: moveq [[R]], #1 697 ; ARM32: moveq [[R]], #1
672 ; ARM32: movvs [[R]], #1 698 ; ARM32: movvs [[R]], #1
673 ; MIPS32-LABEL: fcmpUeqFloat 699 ; MIPS32-LABEL: fcmpUeqFloat
674 ; MIPS32: c.ueq.s 700 ; MIPS32: c.ueq.s
675 ; MIPS32: movf 701 ; MIPS32: addiu [[REG:.*]], $zero, 1
702 ; MIPS32: movf [[REG]], $zero, {{.*}}
676 703
677 define internal i32 @fcmpUeqDouble(double %a, double %b) { 704 define internal i32 @fcmpUeqDouble(double %a, double %b) {
678 entry: 705 entry:
679 %cmp = fcmp ueq double %a, %b 706 %cmp = fcmp ueq double %a, %b
680 %cmp.ret_ext = zext i1 %cmp to i32 707 %cmp.ret_ext = zext i1 %cmp to i32
681 ret i32 %cmp.ret_ext 708 ret i32 %cmp.ret_ext
682 } 709 }
683 ; CHECK-LABEL: fcmpUeqDouble 710 ; CHECK-LABEL: fcmpUeqDouble
684 ; CHECK: ucomisd 711 ; CHECK: ucomisd
685 ; CHECK: sete 712 ; CHECK: sete
686 ; ARM32-LABEL: fcmpUeqDouble 713 ; ARM32-LABEL: fcmpUeqDouble
687 ; ARM32-O2: mov [[R:r[0-9]+]], #0 714 ; ARM32-O2: mov [[R:r[0-9]+]], #0
688 ; ARM32: vcmp.f64 715 ; ARM32: vcmp.f64
689 ; ARM32: vmrs 716 ; ARM32: vmrs
690 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 717 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
691 ; ARM32: moveq [[R]], #1 718 ; ARM32: moveq [[R]], #1
692 ; ARM32: movvs [[R]], #1 719 ; ARM32: movvs [[R]], #1
693 ; MIPS32-LABEL: fcmpUeqDouble 720 ; MIPS32-LABEL: fcmpUeqDouble
694 ; MIPS32: c.ueq.d 721 ; MIPS32: c.ueq.d
695 ; MIPS32: movf 722 ; MIPS32: addiu [[REG:.*]], $zero, 1
723 ; MIPS32: movf [[REG]], $zero, {{.*}}
696 724
697 define internal i32 @fcmpUgtFloat(float %a, float %b) { 725 define internal i32 @fcmpUgtFloat(float %a, float %b) {
698 entry: 726 entry:
699 %cmp = fcmp ugt float %a, %b 727 %cmp = fcmp ugt float %a, %b
700 %cmp.ret_ext = zext i1 %cmp to i32 728 %cmp.ret_ext = zext i1 %cmp to i32
701 ret i32 %cmp.ret_ext 729 ret i32 %cmp.ret_ext
702 } 730 }
703 ; CHECK-LABEL: fcmpUgtFloat 731 ; CHECK-LABEL: fcmpUgtFloat
704 ; CHECK: ucomiss 732 ; CHECK: ucomiss
705 ; CHECK: setb 733 ; CHECK: setb
706 ; ARM32-LABEL: fcmpUgtFloat 734 ; ARM32-LABEL: fcmpUgtFloat
707 ; ARM32-O2: mov [[R:r[0-9]+]], #0 735 ; ARM32-O2: mov [[R:r[0-9]+]], #0
708 ; ARM32: vcmp.f32 736 ; ARM32: vcmp.f32
709 ; ARM32: vmrs 737 ; ARM32: vmrs
710 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 738 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
711 ; ARM32: movhi [[R]], #1 739 ; ARM32: movhi [[R]], #1
712 ; MIPS32-LABEL: fcmpUgtFloat 740 ; MIPS32-LABEL: fcmpUgtFloat
713 ; MIPS32: c.ole.s 741 ; MIPS32: c.ole.s
714 ; MIPS32: movt 742 ; MIPS32: addiu [[REG:.*]], $zero, 1
743 ; MIPS32: movt [[REG]], $zero, {{.*}}
715 744
716 define internal i32 @fcmpUgtDouble(double %a, double %b) { 745 define internal i32 @fcmpUgtDouble(double %a, double %b) {
717 entry: 746 entry:
718 %cmp = fcmp ugt double %a, %b 747 %cmp = fcmp ugt double %a, %b
719 %cmp.ret_ext = zext i1 %cmp to i32 748 %cmp.ret_ext = zext i1 %cmp to i32
720 ret i32 %cmp.ret_ext 749 ret i32 %cmp.ret_ext
721 } 750 }
722 ; CHECK-LABEL: fcmpUgtDouble 751 ; CHECK-LABEL: fcmpUgtDouble
723 ; CHECK: ucomisd 752 ; CHECK: ucomisd
724 ; CHECK: setb 753 ; CHECK: setb
725 ; ARM32-LABEL: fcmpUgtDouble 754 ; ARM32-LABEL: fcmpUgtDouble
726 ; ARM32-O2: mov [[R:r[0-9]+]], #0 755 ; ARM32-O2: mov [[R:r[0-9]+]], #0
727 ; ARM32: vcmp.f64 756 ; ARM32: vcmp.f64
728 ; ARM32: vmrs 757 ; ARM32: vmrs
729 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 758 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
730 ; ARM32: movhi [[R]], #1 759 ; ARM32: movhi [[R]], #1
731 ; MIPS32-LABEL: fcmpUgtDouble 760 ; MIPS32-LABEL: fcmpUgtDouble
732 ; MIPS32: c.ole.d 761 ; MIPS32: c.ole.d
733 ; MIPS32: movt 762 ; MIPS32: addiu [[REG:.*]], $zero, 1
763 ; MIPS32: movt [[REG]], $zero, {{.*}}
734 764
735 define internal i32 @fcmpUgeFloat(float %a, float %b) { 765 define internal i32 @fcmpUgeFloat(float %a, float %b) {
736 entry: 766 entry:
737 %cmp = fcmp uge float %a, %b 767 %cmp = fcmp uge float %a, %b
738 %cmp.ret_ext = zext i1 %cmp to i32 768 %cmp.ret_ext = zext i1 %cmp to i32
739 ret i32 %cmp.ret_ext 769 ret i32 %cmp.ret_ext
740 } 770 }
741 ; CHECK-LABEL: fcmpUgeFloat 771 ; CHECK-LABEL: fcmpUgeFloat
742 ; CHECK: ucomiss 772 ; CHECK: ucomiss
743 ; CHECK: setbe 773 ; CHECK: setbe
744 ; ARM32-LABEL: fcmpUgeFloat 774 ; ARM32-LABEL: fcmpUgeFloat
745 ; ARM32-O2: mov [[R:r[0-9]+]], #0 775 ; ARM32-O2: mov [[R:r[0-9]+]], #0
746 ; ARM32: vcmp.f32 776 ; ARM32: vcmp.f32
747 ; ARM32: vmrs 777 ; ARM32: vmrs
748 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 778 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
749 ; ARM32: movpl [[R]], #1 779 ; ARM32: movpl [[R]], #1
750 ; MIPS32-LABEL: fcmpUgeFloat 780 ; MIPS32-LABEL: fcmpUgeFloat
751 ; MIPS32: c.olt.s 781 ; MIPS32: c.olt.s
752 ; MIPS32: movt 782 ; MIPS32: addiu [[REG:.*]], $zero, 1
783 ; MIPS32: movt [[REG]], $zero, {{.*}}
753 784
754 define internal i32 @fcmpUgeDouble(double %a, double %b) { 785 define internal i32 @fcmpUgeDouble(double %a, double %b) {
755 entry: 786 entry:
756 %cmp = fcmp uge double %a, %b 787 %cmp = fcmp uge double %a, %b
757 %cmp.ret_ext = zext i1 %cmp to i32 788 %cmp.ret_ext = zext i1 %cmp to i32
758 ret i32 %cmp.ret_ext 789 ret i32 %cmp.ret_ext
759 } 790 }
760 ; CHECK-LABEL: fcmpUgeDouble 791 ; CHECK-LABEL: fcmpUgeDouble
761 ; CHECK: ucomisd 792 ; CHECK: ucomisd
762 ; CHECK: setbe 793 ; CHECK: setbe
763 ; ARM32-LABEL: fcmpUgeDouble 794 ; ARM32-LABEL: fcmpUgeDouble
764 ; ARM32-O2: mov [[R:r[0-9]+]], #0 795 ; ARM32-O2: mov [[R:r[0-9]+]], #0
765 ; ARM32: vcmp.f64 796 ; ARM32: vcmp.f64
766 ; ARM32: vmrs 797 ; ARM32: vmrs
767 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 798 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
768 ; ARM32: movpl [[R]], #1 799 ; ARM32: movpl [[R]], #1
769 ; MIPS32-LABEL: fcmpUgeDouble 800 ; MIPS32-LABEL: fcmpUgeDouble
770 ; MIPS32: c.olt.d 801 ; MIPS32: c.olt.d
771 ; MIPS32: movt 802 ; MIPS32: addiu [[REG:.*]], $zero, 1
803 ; MIPS32: movt [[REG]], $zero, {{.*}}
772 804
773 define internal i32 @fcmpUltFloat(float %a, float %b) { 805 define internal i32 @fcmpUltFloat(float %a, float %b) {
774 entry: 806 entry:
775 %cmp = fcmp ult float %a, %b 807 %cmp = fcmp ult float %a, %b
776 %cmp.ret_ext = zext i1 %cmp to i32 808 %cmp.ret_ext = zext i1 %cmp to i32
777 ret i32 %cmp.ret_ext 809 ret i32 %cmp.ret_ext
778 } 810 }
779 ; CHECK-LABEL: fcmpUltFloat 811 ; CHECK-LABEL: fcmpUltFloat
780 ; CHECK: ucomiss 812 ; CHECK: ucomiss
781 ; CHECK: setb 813 ; CHECK: setb
782 ; ARM32-LABEL: fcmpUltFloat 814 ; ARM32-LABEL: fcmpUltFloat
783 ; ARM32-O2: mov [[R:r[0-9]+]], #0 815 ; ARM32-O2: mov [[R:r[0-9]+]], #0
784 ; ARM32: vcmp.f32 816 ; ARM32: vcmp.f32
785 ; ARM32: vmrs 817 ; ARM32: vmrs
786 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 818 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
787 ; ARM32: movlt [[R]], #1 819 ; ARM32: movlt [[R]], #1
788 ; MIPS32-LABEL: fcmpUltFloat 820 ; MIPS32-LABEL: fcmpUltFloat
789 ; MIPS32: c.ult.s 821 ; MIPS32: c.ult.s
790 ; MIPS32: movf 822 ; MIPS32: addiu [[REG:.*]], $zero, 1
823 ; MIPS32: movf [[REG]], $zero, {{.*}}
791 824
792 define internal i32 @fcmpUltDouble(double %a, double %b) { 825 define internal i32 @fcmpUltDouble(double %a, double %b) {
793 entry: 826 entry:
794 %cmp = fcmp ult double %a, %b 827 %cmp = fcmp ult double %a, %b
795 %cmp.ret_ext = zext i1 %cmp to i32 828 %cmp.ret_ext = zext i1 %cmp to i32
796 ret i32 %cmp.ret_ext 829 ret i32 %cmp.ret_ext
797 } 830 }
798 ; CHECK-LABEL: fcmpUltDouble 831 ; CHECK-LABEL: fcmpUltDouble
799 ; CHECK: ucomisd 832 ; CHECK: ucomisd
800 ; CHECK: setb 833 ; CHECK: setb
801 ; ARM32-LABEL: fcmpUltDouble 834 ; ARM32-LABEL: fcmpUltDouble
802 ; ARM32-O2: mov [[R:r[0-9]+]], #0 835 ; ARM32-O2: mov [[R:r[0-9]+]], #0
803 ; ARM32: vcmp.f64 836 ; ARM32: vcmp.f64
804 ; ARM32: vmrs 837 ; ARM32: vmrs
805 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 838 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
806 ; ARM32: movlt [[R]], #1 839 ; ARM32: movlt [[R]], #1
807 ; MIPS32-LABEL: fcmpUltDouble 840 ; MIPS32-LABEL: fcmpUltDouble
808 ; MIPS32: c.ult.d 841 ; MIPS32: c.ult.d
809 ; MIPS32: movf 842 ; MIPS32: addiu [[REG:.*]], $zero, 1
843 ; MIPS32: movf [[REG]], $zero, {{.*}}
810 844
811 define internal i32 @fcmpUleFloat(float %a, float %b) { 845 define internal i32 @fcmpUleFloat(float %a, float %b) {
812 entry: 846 entry:
813 %cmp = fcmp ule float %a, %b 847 %cmp = fcmp ule float %a, %b
814 %cmp.ret_ext = zext i1 %cmp to i32 848 %cmp.ret_ext = zext i1 %cmp to i32
815 ret i32 %cmp.ret_ext 849 ret i32 %cmp.ret_ext
816 } 850 }
817 ; CHECK-LABEL: fcmpUleFloat 851 ; CHECK-LABEL: fcmpUleFloat
818 ; CHECK: ucomiss 852 ; CHECK: ucomiss
819 ; CHECK: setbe 853 ; CHECK: setbe
820 ; ARM32-LABEL: fcmpUleFloat 854 ; ARM32-LABEL: fcmpUleFloat
821 ; ARM32-O2: mov [[R:r[0-9]+]], #0 855 ; ARM32-O2: mov [[R:r[0-9]+]], #0
822 ; ARM32: vcmp.f32 856 ; ARM32: vcmp.f32
823 ; ARM32: vmrs 857 ; ARM32: vmrs
824 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 858 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
825 ; ARM32: movle [[R]], #1 859 ; ARM32: movle [[R]], #1
826 ; MIPS32-LABEL: fcmpUleFloat 860 ; MIPS32-LABEL: fcmpUleFloat
827 ; MIPS32: c.ule.s 861 ; MIPS32: c.ule.s
828 ; MIPS32: movf 862 ; MIPS32: addiu [[REG:.*]], $zero, 1
863 ; MIPS32: movf [[REG]], $zero, {{.*}}
829 864
830 define internal i32 @fcmpUleDouble(double %a, double %b) { 865 define internal i32 @fcmpUleDouble(double %a, double %b) {
831 entry: 866 entry:
832 %cmp = fcmp ule double %a, %b 867 %cmp = fcmp ule double %a, %b
833 %cmp.ret_ext = zext i1 %cmp to i32 868 %cmp.ret_ext = zext i1 %cmp to i32
834 ret i32 %cmp.ret_ext 869 ret i32 %cmp.ret_ext
835 } 870 }
836 ; CHECK-LABEL: fcmpUleDouble 871 ; CHECK-LABEL: fcmpUleDouble
837 ; CHECK: ucomisd 872 ; CHECK: ucomisd
838 ; CHECK: setbe 873 ; CHECK: setbe
839 ; ARM32-LABEL: fcmpUleDouble 874 ; ARM32-LABEL: fcmpUleDouble
840 ; ARM32-O2: mov [[R:r[0-9]+]], #0 875 ; ARM32-O2: mov [[R:r[0-9]+]], #0
841 ; ARM32: vcmp.f64 876 ; ARM32: vcmp.f64
842 ; ARM32: vmrs 877 ; ARM32: vmrs
843 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 878 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
844 ; ARM32: movle [[R]], #1 879 ; ARM32: movle [[R]], #1
845 ; MIPS32-LABEL: fcmpUleDouble 880 ; MIPS32-LABEL: fcmpUleDouble
846 ; MIPS32: c.ule.d 881 ; MIPS32: c.ule.d
847 ; MIPS32: movf 882 ; MIPS32: addiu [[REG:.*]], $zero, 1
883 ; MIPS32: movf [[REG]], $zero, {{.*}}
848 884
849 define internal i32 @fcmpUneFloat(float %a, float %b) { 885 define internal i32 @fcmpUneFloat(float %a, float %b) {
850 entry: 886 entry:
851 %cmp = fcmp une float %a, %b 887 %cmp = fcmp une float %a, %b
852 %cmp.ret_ext = zext i1 %cmp to i32 888 %cmp.ret_ext = zext i1 %cmp to i32
853 ret i32 %cmp.ret_ext 889 ret i32 %cmp.ret_ext
854 } 890 }
855 ; CHECK-LABEL: fcmpUneFloat 891 ; CHECK-LABEL: fcmpUneFloat
856 ; CHECK: ucomiss 892 ; CHECK: ucomiss
857 ; CHECK: jne 893 ; CHECK: jne
858 ; CHECK: jp 894 ; CHECK: jp
859 ; ARM32-LABEL: fcmpUneFloat 895 ; ARM32-LABEL: fcmpUneFloat
860 ; ARM32-O2: mov [[R:r[0-9]+]], #0 896 ; ARM32-O2: mov [[R:r[0-9]+]], #0
861 ; ARM32: vcmp.f32 897 ; ARM32: vcmp.f32
862 ; ARM32: vmrs 898 ; ARM32: vmrs
863 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 899 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
864 ; ARM32: movne [[R]], #1 900 ; ARM32: movne [[R]], #1
865 ; MIPS32-LABEL: fcmpUneFloat 901 ; MIPS32-LABEL: fcmpUneFloat
866 ; MIPS32: c.eq.s 902 ; MIPS32: c.eq.s
867 ; MIPS32: movt 903 ; MIPS32: addiu [[REG:.*]], $zero, 1
904 ; MIPS32: movt [[REG]], $zero, {{.*}}
868 905
869 define internal i32 @fcmpUneDouble(double %a, double %b) { 906 define internal i32 @fcmpUneDouble(double %a, double %b) {
870 entry: 907 entry:
871 %cmp = fcmp une double %a, %b 908 %cmp = fcmp une double %a, %b
872 %cmp.ret_ext = zext i1 %cmp to i32 909 %cmp.ret_ext = zext i1 %cmp to i32
873 ret i32 %cmp.ret_ext 910 ret i32 %cmp.ret_ext
874 } 911 }
875 ; CHECK-LABEL: fcmpUneDouble 912 ; CHECK-LABEL: fcmpUneDouble
876 ; CHECK: ucomisd 913 ; CHECK: ucomisd
877 ; CHECK: jne 914 ; CHECK: jne
878 ; CHECK: jp 915 ; CHECK: jp
879 ; ARM32-LABEL: fcmpUneDouble 916 ; ARM32-LABEL: fcmpUneDouble
880 ; ARM32-O2: mov [[R:r[0-9]+]], #0 917 ; ARM32-O2: mov [[R:r[0-9]+]], #0
881 ; ARM32: vcmp.f64 918 ; ARM32: vcmp.f64
882 ; ARM32: vmrs 919 ; ARM32: vmrs
883 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 920 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
884 ; ARM32: movne [[R]], #1 921 ; ARM32: movne [[R]], #1
885 ; MIPS32-LABEL: fcmpUneDouble 922 ; MIPS32-LABEL: fcmpUneDouble
886 ; MIPS32: c.eq.d 923 ; MIPS32: c.eq.d
887 ; MIPS32: movt 924 ; MIPS32: addiu [[REG:.*]], $zero, 1
925 ; MIPS32: movt [[REG]], $zero, {{.*}}
888 926
889 define internal i32 @fcmpUnoFloat(float %a, float %b) { 927 define internal i32 @fcmpUnoFloat(float %a, float %b) {
890 entry: 928 entry:
891 %cmp = fcmp uno float %a, %b 929 %cmp = fcmp uno float %a, %b
892 %cmp.ret_ext = zext i1 %cmp to i32 930 %cmp.ret_ext = zext i1 %cmp to i32
893 ret i32 %cmp.ret_ext 931 ret i32 %cmp.ret_ext
894 } 932 }
895 ; CHECK-LABEL: fcmpUnoFloat 933 ; CHECK-LABEL: fcmpUnoFloat
896 ; CHECK: ucomiss 934 ; CHECK: ucomiss
897 ; CHECK: setp 935 ; CHECK: setp
898 ; ARM32-LABEL: fcmpUnoFloat 936 ; ARM32-LABEL: fcmpUnoFloat
899 ; ARM32-O2: mov [[R:r[0-9]+]], #0 937 ; ARM32-O2: mov [[R:r[0-9]+]], #0
900 ; ARM32: vcmp.f32 938 ; ARM32: vcmp.f32
901 ; ARM32: vmrs 939 ; ARM32: vmrs
902 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 940 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
903 ; ARM32: movvs [[R]], #1 941 ; ARM32: movvs [[R]], #1
904 ; MIPS32-LABEL: fcmpUnoFloat 942 ; MIPS32-LABEL: fcmpUnoFloat
905 ; MIPS32: c.un.s 943 ; MIPS32: c.un.s
906 ; MIPS32: movf 944 ; MIPS32: addiu [[REG:.*]], $zero, 1
945 ; MIPS32: movf [[REG]], $zero, {{.*}}
907 946
908 define internal i32 @fcmpUnoDouble(double %a, double %b) { 947 define internal i32 @fcmpUnoDouble(double %a, double %b) {
909 entry: 948 entry:
910 %cmp = fcmp uno double %a, %b 949 %cmp = fcmp uno double %a, %b
911 %cmp.ret_ext = zext i1 %cmp to i32 950 %cmp.ret_ext = zext i1 %cmp to i32
912 ret i32 %cmp.ret_ext 951 ret i32 %cmp.ret_ext
913 } 952 }
914 ; CHECK-LABEL: fcmpUnoDouble 953 ; CHECK-LABEL: fcmpUnoDouble
915 ; CHECK: ucomisd 954 ; CHECK: ucomisd
916 ; CHECK: setp 955 ; CHECK: setp
917 ; ARM32-LABEL: fcmpUnoDouble 956 ; ARM32-LABEL: fcmpUnoDouble
918 ; ARM32-O2: mov [[R:r[0-9]+]], #0 957 ; ARM32-O2: mov [[R:r[0-9]+]], #0
919 ; ARM32: vcmp.f64 958 ; ARM32: vcmp.f64
920 ; ARM32: vmrs 959 ; ARM32: vmrs
921 ; ARM32-OM1: mov [[R:r[0-9]+]], #0 960 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
922 ; ARM32: movvs [[R]], #1 961 ; ARM32: movvs [[R]], #1
923 ; MIPS32-LABEL: fcmpUnoDouble 962 ; MIPS32-LABEL: fcmpUnoDouble
924 ; MIPS32: c.un.d 963 ; MIPS32: c.un.d
925 ; MIPS32: movf 964 ; MIPS32: addiu [[REG:.*]], $zero, 1
965 ; MIPS32: movf [[REG]], $zero, {{.*}}
926 966
927 define internal i32 @fcmpTrueFloat(float %a, float %b) { 967 define internal i32 @fcmpTrueFloat(float %a, float %b) {
928 entry: 968 entry:
929 %cmp = fcmp true float %a, %b 969 %cmp = fcmp true float %a, %b
930 %cmp.ret_ext = zext i1 %cmp to i32 970 %cmp.ret_ext = zext i1 %cmp to i32
931 ret i32 %cmp.ret_ext 971 ret i32 %cmp.ret_ext
932 } 972 }
933 ; CHECK-LABEL: fcmpTrueFloat 973 ; CHECK-LABEL: fcmpTrueFloat
934 ; CHECK: mov {{.*}},0x1 974 ; CHECK: mov {{.*}},0x1
935 ; ARM32-LABEL: fcmpTrueFloat 975 ; ARM32-LABEL: fcmpTrueFloat
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
984 ; CHECK: ja 1024 ; CHECK: ja
985 ; CHECK: movsd 1025 ; CHECK: movsd
986 ; ARM32-LABEL: selectDoubleVarVar 1026 ; ARM32-LABEL: selectDoubleVarVar
987 ; ARM32: vcmp.f64 1027 ; ARM32: vcmp.f64
988 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} 1028 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}}
989 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} 1029 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}}
990 ; ARM32: bx 1030 ; ARM32: bx
991 ; MIPS32-LABEL: selectDoubleVarVar 1031 ; MIPS32-LABEL: selectDoubleVarVar
992 ; MIPS32: movn.d {{.*}} 1032 ; MIPS32: movn.d {{.*}}
993 ; MIPS32: mov.d {{.*}} 1033 ; MIPS32: mov.d {{.*}}
OLDNEW
« src/IceTargetLoweringMIPS32.h ('K') | « tests_lit/assembler/mips32/encoding_test_fcmp.ll ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698