@@ -6611,3 +6611,232 @@ label1:
6611
6611
label 2:
6612
6612
ret i1 0
6613
6613
}
6614
+
6615
+ define i32 @br_bit_test_eq_0 (i32 %c ) {
6616
+ ; CHECK-LABEL: br_bit_test_eq_0:
6617
+ ; CHECK: # %bb.0:
6618
+ ; CHECK-NEXT: movih32 a1, 2
6619
+ ; CHECK-NEXT: and16 a0, a1
6620
+ ; CHECK-NEXT: bnez32 a0, .LBB145_2
6621
+ ; CHECK-NEXT: # %bb.1: # %label1
6622
+ ; CHECK-NEXT: movi16 a0, 1
6623
+ ; CHECK-NEXT: rts16
6624
+ ; CHECK-NEXT: .LBB145_2: # %label2
6625
+ ; CHECK-NEXT: movi16 a0, 0
6626
+ ; CHECK-NEXT: rts16
6627
+ ;
6628
+ ; GENERIC-LABEL: br_bit_test_eq_0:
6629
+ ; GENERIC: # %bb.0:
6630
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 0
6631
+ ; GENERIC-NEXT: subi16 sp, sp, 4
6632
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 4
6633
+ ; GENERIC-NEXT: movi16 a1, 0
6634
+ ; GENERIC-NEXT: lsli16 a2, a1, 24
6635
+ ; GENERIC-NEXT: movi16 a3, 2
6636
+ ; GENERIC-NEXT: lsli16 a3, a3, 16
6637
+ ; GENERIC-NEXT: or16 a3, a2
6638
+ ; GENERIC-NEXT: lsli16 a2, a1, 8
6639
+ ; GENERIC-NEXT: or16 a2, a3
6640
+ ; GENERIC-NEXT: or16 a2, a1
6641
+ ; GENERIC-NEXT: and16 a2, a0
6642
+ ; GENERIC-NEXT: cmpnei16 a2, 0
6643
+ ; GENERIC-NEXT: bt16 .LBB145_2
6644
+ ; GENERIC-NEXT: # %bb.1: # %label1
6645
+ ; GENERIC-NEXT: movi16 a0, 1
6646
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6647
+ ; GENERIC-NEXT: rts16
6648
+ ; GENERIC-NEXT: .LBB145_2: # %label2
6649
+ ; GENERIC-NEXT: movi16 a0, 0
6650
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6651
+ ; GENERIC-NEXT: rts16
6652
+ %t0 = and i32 %c , 131072
6653
+ %t1 = icmp eq i32 %t0 , 0
6654
+ br i1 %t1 , label %label1 , label %label2
6655
+ label 1:
6656
+ ret i32 1
6657
+ label 2:
6658
+ ret i32 0
6659
+ }
6660
+
6661
+ define i32 @br_bit_test_ne_0 (i32 %c ) {
6662
+ ; CHECK-LABEL: br_bit_test_ne_0:
6663
+ ; CHECK: # %bb.0:
6664
+ ; CHECK-NEXT: movih32 a1, 2
6665
+ ; CHECK-NEXT: and16 a0, a1
6666
+ ; CHECK-NEXT: bez32 a0, .LBB146_2
6667
+ ; CHECK-NEXT: # %bb.1: # %label1
6668
+ ; CHECK-NEXT: movi16 a0, 1
6669
+ ; CHECK-NEXT: rts16
6670
+ ; CHECK-NEXT: .LBB146_2: # %label2
6671
+ ; CHECK-NEXT: movi16 a0, 0
6672
+ ; CHECK-NEXT: rts16
6673
+ ;
6674
+ ; GENERIC-LABEL: br_bit_test_ne_0:
6675
+ ; GENERIC: # %bb.0:
6676
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 0
6677
+ ; GENERIC-NEXT: subi16 sp, sp, 4
6678
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 4
6679
+ ; GENERIC-NEXT: movi16 a1, 0
6680
+ ; GENERIC-NEXT: lsli16 a2, a1, 24
6681
+ ; GENERIC-NEXT: movi16 a3, 2
6682
+ ; GENERIC-NEXT: lsli16 a3, a3, 16
6683
+ ; GENERIC-NEXT: or16 a3, a2
6684
+ ; GENERIC-NEXT: lsli16 a2, a1, 8
6685
+ ; GENERIC-NEXT: or16 a2, a3
6686
+ ; GENERIC-NEXT: or16 a2, a1
6687
+ ; GENERIC-NEXT: and16 a2, a0
6688
+ ; GENERIC-NEXT: cmpnei16 a2, 0
6689
+ ; GENERIC-NEXT: bf16 .LBB146_2
6690
+ ; GENERIC-NEXT: # %bb.1: # %label1
6691
+ ; GENERIC-NEXT: movi16 a0, 1
6692
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6693
+ ; GENERIC-NEXT: rts16
6694
+ ; GENERIC-NEXT: .LBB146_2: # %label2
6695
+ ; GENERIC-NEXT: movi16 a0, 0
6696
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6697
+ ; GENERIC-NEXT: rts16
6698
+ %t0 = and i32 %c , 131072
6699
+ %t1 = icmp ne i32 %t0 , 0
6700
+ br i1 %t1 , label %label1 , label %label2
6701
+ label 1:
6702
+ ret i32 1
6703
+ label 2:
6704
+ ret i32 0
6705
+ }
6706
+
6707
+ define i32 @br_bit_test_eq_mask (i32 %c ) {
6708
+ ; CHECK-LABEL: br_bit_test_eq_mask:
6709
+ ; CHECK: # %bb.0:
6710
+ ; CHECK-NEXT: movih32 a1, 2
6711
+ ; CHECK-NEXT: and16 a0, a1
6712
+ ; CHECK-NEXT: bez32 a0, .LBB147_2
6713
+ ; CHECK-NEXT: # %bb.1: # %label1
6714
+ ; CHECK-NEXT: movi16 a0, 1
6715
+ ; CHECK-NEXT: rts16
6716
+ ; CHECK-NEXT: .LBB147_2: # %label2
6717
+ ; CHECK-NEXT: movi16 a0, 0
6718
+ ; CHECK-NEXT: rts16
6719
+ ;
6720
+ ; GENERIC-LABEL: br_bit_test_eq_mask:
6721
+ ; GENERIC: # %bb.0:
6722
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 0
6723
+ ; GENERIC-NEXT: subi16 sp, sp, 4
6724
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 4
6725
+ ; GENERIC-NEXT: movi16 a1, 0
6726
+ ; GENERIC-NEXT: lsli16 a2, a1, 24
6727
+ ; GENERIC-NEXT: movi16 a3, 2
6728
+ ; GENERIC-NEXT: lsli16 a3, a3, 16
6729
+ ; GENERIC-NEXT: or16 a3, a2
6730
+ ; GENERIC-NEXT: lsli16 a2, a1, 8
6731
+ ; GENERIC-NEXT: or16 a2, a3
6732
+ ; GENERIC-NEXT: or16 a2, a1
6733
+ ; GENERIC-NEXT: and16 a2, a0
6734
+ ; GENERIC-NEXT: cmpnei16 a2, 0
6735
+ ; GENERIC-NEXT: bf16 .LBB147_2
6736
+ ; GENERIC-NEXT: # %bb.1: # %label1
6737
+ ; GENERIC-NEXT: movi16 a0, 1
6738
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6739
+ ; GENERIC-NEXT: rts16
6740
+ ; GENERIC-NEXT: .LBB147_2: # %label2
6741
+ ; GENERIC-NEXT: movi16 a0, 0
6742
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6743
+ ; GENERIC-NEXT: rts16
6744
+ %t0 = and i32 %c , 131072
6745
+ %t1 = icmp eq i32 %t0 , 131072
6746
+ br i1 %t1 , label %label1 , label %label2
6747
+ label 1:
6748
+ ret i32 1
6749
+ label 2:
6750
+ ret i32 0
6751
+ }
6752
+
6753
+ define i32 @br_bit_test_ne_mask (i32 %c ) {
6754
+ ; CHECK-LABEL: br_bit_test_ne_mask:
6755
+ ; CHECK: # %bb.0:
6756
+ ; CHECK-NEXT: movih32 a1, 2
6757
+ ; CHECK-NEXT: and16 a0, a1
6758
+ ; CHECK-NEXT: bnez32 a0, .LBB148_2
6759
+ ; CHECK-NEXT: # %bb.1: # %label1
6760
+ ; CHECK-NEXT: movi16 a0, 1
6761
+ ; CHECK-NEXT: rts16
6762
+ ; CHECK-NEXT: .LBB148_2: # %label2
6763
+ ; CHECK-NEXT: movi16 a0, 0
6764
+ ; CHECK-NEXT: rts16
6765
+ ;
6766
+ ; GENERIC-LABEL: br_bit_test_ne_mask:
6767
+ ; GENERIC: # %bb.0:
6768
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 0
6769
+ ; GENERIC-NEXT: subi16 sp, sp, 4
6770
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 4
6771
+ ; GENERIC-NEXT: movi16 a1, 0
6772
+ ; GENERIC-NEXT: lsli16 a2, a1, 24
6773
+ ; GENERIC-NEXT: movi16 a3, 2
6774
+ ; GENERIC-NEXT: lsli16 a3, a3, 16
6775
+ ; GENERIC-NEXT: or16 a3, a2
6776
+ ; GENERIC-NEXT: lsli16 a2, a1, 8
6777
+ ; GENERIC-NEXT: or16 a2, a3
6778
+ ; GENERIC-NEXT: or16 a2, a1
6779
+ ; GENERIC-NEXT: and16 a2, a0
6780
+ ; GENERIC-NEXT: cmpnei16 a2, 0
6781
+ ; GENERIC-NEXT: bt16 .LBB148_2
6782
+ ; GENERIC-NEXT: # %bb.1: # %label1
6783
+ ; GENERIC-NEXT: movi16 a0, 1
6784
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6785
+ ; GENERIC-NEXT: rts16
6786
+ ; GENERIC-NEXT: .LBB148_2: # %label2
6787
+ ; GENERIC-NEXT: movi16 a0, 0
6788
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6789
+ ; GENERIC-NEXT: rts16
6790
+ %t0 = and i32 %c , 131072
6791
+ %t1 = icmp ne i32 %t0 , 131072
6792
+ br i1 %t1 , label %label1 , label %label2
6793
+ label 1:
6794
+ ret i32 1
6795
+ label 2:
6796
+ ret i32 0
6797
+ }
6798
+
6799
+ define i32 @br_lowbit_test_ne_0 (i32 %c ) {
6800
+ ; CHECK-LABEL: br_lowbit_test_ne_0:
6801
+ ; CHECK: # %bb.0:
6802
+ ; CHECK-NEXT: andi32 a0, a0, 256
6803
+ ; CHECK-NEXT: bez32 a0, .LBB149_2
6804
+ ; CHECK-NEXT: # %bb.1: # %label1
6805
+ ; CHECK-NEXT: movi16 a0, 1
6806
+ ; CHECK-NEXT: rts16
6807
+ ; CHECK-NEXT: .LBB149_2: # %label2
6808
+ ; CHECK-NEXT: movi16 a0, 0
6809
+ ; CHECK-NEXT: rts16
6810
+ ;
6811
+ ; GENERIC-LABEL: br_lowbit_test_ne_0:
6812
+ ; GENERIC: # %bb.0:
6813
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 0
6814
+ ; GENERIC-NEXT: subi16 sp, sp, 4
6815
+ ; GENERIC-NEXT: .cfi_def_cfa_offset 4
6816
+ ; GENERIC-NEXT: movi16 a1, 0
6817
+ ; GENERIC-NEXT: lsli16 a2, a1, 24
6818
+ ; GENERIC-NEXT: lsli16 a3, a1, 16
6819
+ ; GENERIC-NEXT: or16 a3, a2
6820
+ ; GENERIC-NEXT: movi16 a2, 1
6821
+ ; GENERIC-NEXT: lsli16 a2, a2, 8
6822
+ ; GENERIC-NEXT: or16 a2, a3
6823
+ ; GENERIC-NEXT: or16 a2, a1
6824
+ ; GENERIC-NEXT: and16 a2, a0
6825
+ ; GENERIC-NEXT: cmpnei16 a2, 0
6826
+ ; GENERIC-NEXT: bf16 .LBB149_2
6827
+ ; GENERIC-NEXT: # %bb.1: # %label1
6828
+ ; GENERIC-NEXT: movi16 a0, 1
6829
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6830
+ ; GENERIC-NEXT: rts16
6831
+ ; GENERIC-NEXT: .LBB149_2: # %label2
6832
+ ; GENERIC-NEXT: movi16 a0, 0
6833
+ ; GENERIC-NEXT: addi16 sp, sp, 4
6834
+ ; GENERIC-NEXT: rts16
6835
+ %t0 = and i32 %c , 256
6836
+ %t1 = icmp ne i32 %t0 , 0
6837
+ br i1 %t1 , label %label1 , label %label2
6838
+ label 1:
6839
+ ret i32 1
6840
+ label 2:
6841
+ ret i32 0
6842
+ }
0 commit comments