|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 |
| -; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s |
3 |
| -; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+bmi | FileCheck %s |
| 2 | +; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefixes=CHECK,NOBMI |
| 3 | +; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+bmi | FileCheck %s --check-prefixes=CHECK,BMI |
4 | 4 |
|
5 | 5 | define zeroext i1 @all_bits_clear(i32 %P, i32 %Q) nounwind {
|
6 | 6 | ; CHECK-LABEL: all_bits_clear:
|
@@ -607,51 +607,77 @@ define i1 @and_icmps_const_1bit_diff_common_op(i32 %x, i32 %y) {
|
607 | 607 | ret i1 %r
|
608 | 608 | }
|
609 | 609 |
|
610 |
| -; TODO: PR44136 - fold cmpeq(or(X,Y),X) --> cmpeq(and(~X,Y),0) |
| 610 | +; PR44136 - fold cmpeq(or(X,Y),X) --> cmpeq(and(~X,Y),0) |
611 | 611 |
|
612 | 612 | define i1 @or_cmp_eq_i64(i64 %x, i64 %y) {
|
613 |
| -; CHECK-LABEL: or_cmp_eq_i64: |
614 |
| -; CHECK: # %bb.0: |
615 |
| -; CHECK-NEXT: orq %rdi, %rsi |
616 |
| -; CHECK-NEXT: cmpq %rdi, %rsi |
617 |
| -; CHECK-NEXT: sete %al |
618 |
| -; CHECK-NEXT: retq |
| 613 | +; NOBMI-LABEL: or_cmp_eq_i64: |
| 614 | +; NOBMI: # %bb.0: |
| 615 | +; NOBMI-NEXT: orq %rdi, %rsi |
| 616 | +; NOBMI-NEXT: cmpq %rdi, %rsi |
| 617 | +; NOBMI-NEXT: sete %al |
| 618 | +; NOBMI-NEXT: retq |
| 619 | +; |
| 620 | +; BMI-LABEL: or_cmp_eq_i64: |
| 621 | +; BMI: # %bb.0: |
| 622 | +; BMI-NEXT: andnq %rsi, %rdi, %rax |
| 623 | +; BMI-NEXT: sete %al |
| 624 | +; BMI-NEXT: retq |
619 | 625 | %o = or i64 %x, %y
|
620 | 626 | %c = icmp eq i64 %o, %x
|
621 | 627 | ret i1 %c
|
622 | 628 | }
|
623 | 629 |
|
624 | 630 | define i1 @or_cmp_ne_i32(i32 %x, i32 %y) {
|
625 |
| -; CHECK-LABEL: or_cmp_ne_i32: |
626 |
| -; CHECK: # %bb.0: |
627 |
| -; CHECK-NEXT: orl %esi, %edi |
628 |
| -; CHECK-NEXT: cmpl %esi, %edi |
629 |
| -; CHECK-NEXT: setne %al |
630 |
| -; CHECK-NEXT: retq |
| 631 | +; NOBMI-LABEL: or_cmp_ne_i32: |
| 632 | +; NOBMI: # %bb.0: |
| 633 | +; NOBMI-NEXT: orl %esi, %edi |
| 634 | +; NOBMI-NEXT: cmpl %esi, %edi |
| 635 | +; NOBMI-NEXT: setne %al |
| 636 | +; NOBMI-NEXT: retq |
| 637 | +; |
| 638 | +; BMI-LABEL: or_cmp_ne_i32: |
| 639 | +; BMI: # %bb.0: |
| 640 | +; BMI-NEXT: andnl %edi, %esi, %eax |
| 641 | +; BMI-NEXT: setne %al |
| 642 | +; BMI-NEXT: retq |
631 | 643 | %o = or i32 %x, %y
|
632 | 644 | %c = icmp ne i32 %o, %y
|
633 | 645 | ret i1 %c
|
634 | 646 | }
|
635 | 647 |
|
636 | 648 | define i1 @or_cmp_eq_i16(i16 zeroext %x, i16 zeroext %y) {
|
637 |
| -; CHECK-LABEL: or_cmp_eq_i16: |
638 |
| -; CHECK: # %bb.0: |
639 |
| -; CHECK-NEXT: orl %edi, %esi |
640 |
| -; CHECK-NEXT: cmpw %si, %di |
641 |
| -; CHECK-NEXT: sete %al |
642 |
| -; CHECK-NEXT: retq |
| 649 | +; NOBMI-LABEL: or_cmp_eq_i16: |
| 650 | +; NOBMI: # %bb.0: |
| 651 | +; NOBMI-NEXT: orl %edi, %esi |
| 652 | +; NOBMI-NEXT: cmpw %si, %di |
| 653 | +; NOBMI-NEXT: sete %al |
| 654 | +; NOBMI-NEXT: retq |
| 655 | +; |
| 656 | +; BMI-LABEL: or_cmp_eq_i16: |
| 657 | +; BMI: # %bb.0: |
| 658 | +; BMI-NEXT: notl %edi |
| 659 | +; BMI-NEXT: testw %si, %di |
| 660 | +; BMI-NEXT: sete %al |
| 661 | +; BMI-NEXT: retq |
643 | 662 | %o = or i16 %x, %y
|
644 | 663 | %c = icmp eq i16 %x, %o
|
645 | 664 | ret i1 %c
|
646 | 665 | }
|
647 | 666 |
|
648 | 667 | define i1 @or_cmp_ne_i8(i8 zeroext %x, i8 zeroext %y) {
|
649 |
| -; CHECK-LABEL: or_cmp_ne_i8: |
650 |
| -; CHECK: # %bb.0: |
651 |
| -; CHECK-NEXT: orl %esi, %edi |
652 |
| -; CHECK-NEXT: cmpb %dil, %sil |
653 |
| -; CHECK-NEXT: setne %al |
654 |
| -; CHECK-NEXT: retq |
| 668 | +; NOBMI-LABEL: or_cmp_ne_i8: |
| 669 | +; NOBMI: # %bb.0: |
| 670 | +; NOBMI-NEXT: orl %esi, %edi |
| 671 | +; NOBMI-NEXT: cmpb %dil, %sil |
| 672 | +; NOBMI-NEXT: setne %al |
| 673 | +; NOBMI-NEXT: retq |
| 674 | +; |
| 675 | +; BMI-LABEL: or_cmp_ne_i8: |
| 676 | +; BMI: # %bb.0: |
| 677 | +; BMI-NEXT: notb %sil |
| 678 | +; BMI-NEXT: testb %dil, %sil |
| 679 | +; BMI-NEXT: setne %al |
| 680 | +; BMI-NEXT: retq |
655 | 681 | %o = or i8 %x, %y
|
656 | 682 | %c = icmp ne i8 %y, %o
|
657 | 683 | ret i1 %c
|
|
0 commit comments