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

Side by Side Diff: crosstest/test_fcmp.pnacl.ll

Issue 1497033002: Fuse icmp/fcmp with select (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review changes. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | crosstest/test_fcmp_main.cpp » ('j') | src/IceInstX86BaseImpl.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ; This file is extracted from fp.pnacl.ll and vector-fcmp.ll in the lit 1 ; This file is extracted from fp.pnacl.ll and vector-fcmp.ll in the lit
2 ; tests, with the "internal" attribute removed from the functions. 2 ; tests, with the "internal" attribute removed from the functions.
3 3
4 define i32 @fcmpFalseFloat(float %a, float %b) { 4 define i32 @fcmpFalseFloat(float %a, float %b) {
5 entry: 5 entry:
6 %cmp = fcmp false float %a, %b 6 %cmp = fcmp false float %a, %b
7 %cmp.ret_ext = zext i1 %cmp to i32 7 %cmp.ret_ext = zext i1 %cmp to i32
8 ret i32 %cmp.ret_ext 8 ret i32 %cmp.ret_ext
9 } 9 }
10 ; CHECK: fcmpFalseFloat: 10 ; CHECK: fcmpFalseFloat:
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 314
315 define i32 @fcmpTrueDouble(double %a, double %b) { 315 define i32 @fcmpTrueDouble(double %a, double %b) {
316 entry: 316 entry:
317 %cmp = fcmp true double %a, %b 317 %cmp = fcmp true double %a, %b
318 %cmp.ret_ext = zext i1 %cmp to i32 318 %cmp.ret_ext = zext i1 %cmp to i32
319 ret i32 %cmp.ret_ext 319 ret i32 %cmp.ret_ext
320 } 320 }
321 ; CHECK: fcmpTrueDouble: 321 ; CHECK: fcmpTrueDouble:
322 ; CHECK: mov {{.*}}, 1 322 ; CHECK: mov {{.*}}, 1
323 323
324 define i32 @fcmpSelectFalseFloat(float %a, float %b, i32 %c, i32 %d) {
325 entry:
326 %cmp = fcmp false float %a, %b
327 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
328 ret i32 %cmp.ret_ext
329 }
330 ; CHECK: fcmpSelectFalseFloat:
331 ; CHECK: mov {{.*}}, 0
332
333 define i32 @fcmpSelectFalseDouble(double %a, double %b, i32 %c, i32 %d) {
334 entry:
335 %cmp = fcmp false double %a, %b
336 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
337 ret i32 %cmp.ret_ext
338 }
339 ; CHECK: fcmpSelectFalseDouble:
340 ; CHECK: mov {{.*}}, 0
341
342 define i32 @fcmpSelectOeqFloat(float %a, float %b, i32 %c, i32 %d) {
343 entry:
344 %cmp = fcmp oeq float %a, %b
345 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
346 ret i32 %cmp.ret_ext
347 }
348 ; CHECK: fcmpSelectOeqFloat:
349 ; CHECK: ucomiss
350 ; CHECK: jne .
351 ; CHECK: jp .
352
353 define i32 @fcmpSelectOeqDouble(double %a, double %b, i32 %c, i32 %d) {
354 entry:
355 %cmp = fcmp oeq double %a, %b
356 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
357 ret i32 %cmp.ret_ext
358 }
359 ; CHECK: fcmpSelectOeqDouble:
360 ; CHECK: ucomisd
361 ; CHECK: jne .
362 ; CHECK: jp .
363
364 define i32 @fcmpSelectOgtFloat(float %a, float %b, i32 %c, i32 %d) {
365 entry:
366 %cmp = fcmp ogt float %a, %b
367 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
368 ret i32 %cmp.ret_ext
369 }
370 ; CHECK: fcmpSelectOgtFloat:
371 ; CHECK: ucomiss
372 ; CHECK: ja .
373
374 define i32 @fcmpSelectOgtDouble(double %a, double %b, i32 %c, i32 %d) {
375 entry:
376 %cmp = fcmp ogt double %a, %b
377 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
378 ret i32 %cmp.ret_ext
379 }
380 ; CHECK: fcmpSelectOgtDouble:
381 ; CHECK: ucomisd
382 ; CHECK: ja .
383
384 define i32 @fcmpSelectOgeFloat(float %a, float %b, i32 %c, i32 %d) {
385 entry:
386 %cmp = fcmp oge float %a, %b
387 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
388 ret i32 %cmp.ret_ext
389 }
390 ; CHECK: fcmpSelectOgeFloat:
391 ; CHECK: ucomiss
392 ; CHECK: jae .
393
394 define i32 @fcmpSelectOgeDouble(double %a, double %b, i32 %c, i32 %d) {
395 entry:
396 %cmp = fcmp oge double %a, %b
397 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
398 ret i32 %cmp.ret_ext
399 }
400 ; CHECK: fcmpSelectOgeDouble:
401 ; CHECK: ucomisd
402 ; CHECK: jae .
403
404 define i32 @fcmpSelectOltFloat(float %a, float %b, i32 %c, i32 %d) {
405 entry:
406 %cmp = fcmp olt float %a, %b
407 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
408 ret i32 %cmp.ret_ext
409 }
410 ; CHECK: fcmpSelectOltFloat:
411 ; CHECK: ucomiss
412 ; CHECK: ja .
413
414 define i32 @fcmpSelectOltDouble(double %a, double %b, i32 %c, i32 %d) {
415 entry:
416 %cmp = fcmp olt double %a, %b
417 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
418 ret i32 %cmp.ret_ext
419 }
420 ; CHECK: fcmpSelectOltDouble:
421 ; CHECK: ucomisd
422 ; CHECK: ja .
423
424 define i32 @fcmpSelectOleFloat(float %a, float %b, i32 %c, i32 %d) {
425 entry:
426 %cmp = fcmp ole float %a, %b
427 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
428 ret i32 %cmp.ret_ext
429 }
430 ; CHECK: fcmpSelectOleFloat:
431 ; CHECK: ucomiss
432 ; CHECK: jae .
433
434 define i32 @fcmpSelectOleDouble(double %a, double %b, i32 %c, i32 %d) {
435 entry:
436 %cmp = fcmp ole double %a, %b
437 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
438 ret i32 %cmp.ret_ext
439 }
440 ; CHECK: fcmpSelectOleDouble:
441 ; CHECK: ucomisd
442 ; CHECK: jae .
443
444 define i32 @fcmpSelectOneFloat(float %a, float %b, i32 %c, i32 %d) {
445 entry:
446 %cmp = fcmp one float %a, %b
447 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
448 ret i32 %cmp.ret_ext
449 }
450 ; CHECK: fcmpSelectOneFloat:
451 ; CHECK: ucomiss
452 ; CHECK: jne .
453
454 define i32 @fcmpSelectOneDouble(double %a, double %b, i32 %c, i32 %d) {
455 entry:
456 %cmp = fcmp one double %a, %b
457 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
458 ret i32 %cmp.ret_ext
459 }
460 ; CHECK: fcmpSelectOneDouble:
461 ; CHECK: ucomisd
462 ; CHECK: jne .
463
464 define i32 @fcmpSelectOrdFloat(float %a, float %b, i32 %c, i32 %d) {
465 entry:
466 %cmp = fcmp ord float %a, %b
467 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
468 ret i32 %cmp.ret_ext
469 }
470 ; CHECK: fcmpSelectOrdFloat:
471 ; CHECK: ucomiss
472 ; CHECK: jnp .
473
474 define i32 @fcmpSelectOrdDouble(double %a, double %b, i32 %c, i32 %d) {
475 entry:
476 %cmp = fcmp ord double %a, %b
477 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
478 ret i32 %cmp.ret_ext
479 }
480 ; CHECK: fcmpSelectOrdDouble:
481 ; CHECK: ucomisd
482 ; CHECK: jnp .
483
484 define i32 @fcmpSelectUeqFloat(float %a, float %b, i32 %c, i32 %d) {
485 entry:
486 %cmp = fcmp ueq float %a, %b
487 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
488 ret i32 %cmp.ret_ext
489 }
490 ; CHECK: fcmpSelectUeqFloat:
491 ; CHECK: ucomiss
492 ; CHECK: je .
493
494 define i32 @fcmpSelectUeqDouble(double %a, double %b, i32 %c, i32 %d) {
495 entry:
496 %cmp = fcmp ueq double %a, %b
497 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
498 ret i32 %cmp.ret_ext
499 }
500 ; CHECK: fcmpSelectUeqDouble:
501 ; CHECK: ucomisd
502 ; CHECK: je .
503
504 define i32 @fcmpSelectUgtFloat(float %a, float %b, i32 %c, i32 %d) {
505 entry:
506 %cmp = fcmp ugt float %a, %b
507 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
508 ret i32 %cmp.ret_ext
509 }
510 ; CHECK: fcmpSelectUgtFloat:
511 ; CHECK: ucomiss
512 ; CHECK: jb .
513
514 define i32 @fcmpSelectUgtDouble(double %a, double %b, i32 %c, i32 %d) {
515 entry:
516 %cmp = fcmp ugt double %a, %b
517 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
518 ret i32 %cmp.ret_ext
519 }
520 ; CHECK: fcmpSelectUgtDouble:
521 ; CHECK: ucomisd
522 ; CHECK: jb .
523
524 define i32 @fcmpSelectUgeFloat(float %a, float %b, i32 %c, i32 %d) {
525 entry:
526 %cmp = fcmp uge float %a, %b
527 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
528 ret i32 %cmp.ret_ext
529 }
530 ; CHECK: fcmpSelectUgeFloat:
531 ; CHECK: ucomiss
532 ; CHECK: jbe .
533
534 define i32 @fcmpSelectUgeDouble(double %a, double %b, i32 %c, i32 %d) {
535 entry:
536 %cmp = fcmp uge double %a, %b
537 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
538 ret i32 %cmp.ret_ext
539 }
540 ; CHECK: fcmpSelectUgeDouble:
541 ; CHECK: ucomisd
542 ; CHECK: jbe .
543
544 define i32 @fcmpSelectUltFloat(float %a, float %b, i32 %c, i32 %d) {
545 entry:
546 %cmp = fcmp ult float %a, %b
547 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
548 ret i32 %cmp.ret_ext
549 }
550 ; CHECK: fcmpSelectUltFloat:
551 ; CHECK: ucomiss
552 ; CHECK: jb .
553
554 define i32 @fcmpSelectUltDouble(double %a, double %b, i32 %c, i32 %d) {
555 entry:
556 %cmp = fcmp ult double %a, %b
557 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
558 ret i32 %cmp.ret_ext
559 }
560 ; CHECK: fcmpSelectUltDouble:
561 ; CHECK: ucomisd
562 ; CHECK: jb .
563
564 define i32 @fcmpSelectUleFloat(float %a, float %b, i32 %c, i32 %d) {
565 entry:
566 %cmp = fcmp ule float %a, %b
567 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
568 ret i32 %cmp.ret_ext
569 }
570 ; CHECK: fcmpSelectUleFloat:
571 ; CHECK: ucomiss
572 ; CHECK: jbe .
573
574 define i32 @fcmpSelectUleDouble(double %a, double %b, i32 %c, i32 %d) {
575 entry:
576 %cmp = fcmp ule double %a, %b
577 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
578 ret i32 %cmp.ret_ext
579 }
580 ; CHECK: fcmpSelectUleDouble:
581 ; CHECK: ucomisd
582 ; CHECK: jbe .
583
584 define i32 @fcmpSelectUneFloat(float %a, float %b, i32 %c, i32 %d) {
585 entry:
586 %cmp = fcmp une float %a, %b
587 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
588 ret i32 %cmp.ret_ext
589 }
590 ; CHECK: fcmpSelectUneFloat:
591 ; CHECK: ucomiss
592 ; CHECK: je .
593 ; CHECK: jnp .
594
595 define i32 @fcmpSelectUneDouble(double %a, double %b, i32 %c, i32 %d) {
596 entry:
597 %cmp = fcmp une double %a, %b
598 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
599 ret i32 %cmp.ret_ext
600 }
601 ; CHECK: fcmpSelectUneDouble:
602 ; CHECK: ucomisd
603 ; CHECK: je .
604 ; CHECK: jnp .
605
606 define i32 @fcmpSelectUnoFloat(float %a, float %b, i32 %c, i32 %d) {
607 entry:
608 %cmp = fcmp uno float %a, %b
609 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
610 ret i32 %cmp.ret_ext
611 }
612 ; CHECK: fcmpSelectUnoFloat:
613 ; CHECK: ucomiss
614 ; CHECK: jp .
615
616 define i32 @fcmpSelectUnoDouble(double %a, double %b, i32 %c, i32 %d) {
617 entry:
618 %cmp = fcmp uno double %a, %b
619 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
620 ret i32 %cmp.ret_ext
621 }
622 ; CHECK: fcmpSelectUnoDouble:
623 ; CHECK: ucomisd
624 ; CHECK: jp .
625
626 define i32 @fcmpSelectTrueFloat(float %a, float %b, i32 %c, i32 %d) {
627 entry:
628 %cmp = fcmp true float %a, %b
629 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
630 ret i32 %cmp.ret_ext
631 }
632 ; CHECK: fcmpSelectTrueFloat:
633 ; CHECK: mov {{.*}}, 1
634
635 define i32 @fcmpSelectTrueDouble(double %a, double %b, i32 %c, i32 %d) {
636 entry:
637 %cmp = fcmp true double %a, %b
638 %cmp.ret_ext = select i1 %cmp, i32 %c, i32 %d
639 ret i32 %cmp.ret_ext
640 }
641 ; CHECK: fcmpSelectTrueDouble:
642 ; CHECK: mov {{.*}}, 1
643
324 define <4 x i32> @fcmpFalseVector(<4 x float> %a, <4 x float> %b) { 644 define <4 x i32> @fcmpFalseVector(<4 x float> %a, <4 x float> %b) {
325 entry: 645 entry:
326 %res.trunc = fcmp false <4 x float> %a, %b 646 %res.trunc = fcmp false <4 x float> %a, %b
327 %res = sext <4 x i1> %res.trunc to <4 x i32> 647 %res = sext <4 x i1> %res.trunc to <4 x i32>
328 ret <4 x i32> %res 648 ret <4 x i32> %res
329 ; CHECK-LABEL: fcmpFalseVector: 649 ; CHECK-LABEL: fcmpFalseVector:
330 ; CHECK: pxor 650 ; CHECK: pxor
331 } 651 }
332 652
333 define <4 x i32> @fcmpOeqVector(<4 x float> %a, <4 x float> %b) { 653 define <4 x i32> @fcmpOeqVector(<4 x float> %a, <4 x float> %b) {
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 } 781 }
462 782
463 define <4 x i32> @fcmpUnoVector(<4 x float> %a, <4 x float> %b) { 783 define <4 x i32> @fcmpUnoVector(<4 x float> %a, <4 x float> %b) {
464 entry: 784 entry:
465 %res.trunc = fcmp uno <4 x float> %a, %b 785 %res.trunc = fcmp uno <4 x float> %a, %b
466 %res = sext <4 x i1> %res.trunc to <4 x i32> 786 %res = sext <4 x i1> %res.trunc to <4 x i32>
467 ret <4 x i32> %res 787 ret <4 x i32> %res
468 ; CHECK-LABEL: fcmpUnoVector: 788 ; CHECK-LABEL: fcmpUnoVector:
469 ; CHECK: cmpunordps 789 ; CHECK: cmpunordps
470 } 790 }
OLDNEW
« no previous file with comments | « no previous file | crosstest/test_fcmp_main.cpp » ('j') | src/IceInstX86BaseImpl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698