Skip to content

Commit eac78fd

Browse files
committed
[CSKY][test][NFC] Add tests of conditional branch and value select
These tests will be optimzied with BTSTI16/BTSTI32 in the future. Reviewed By: zixuan-wu Differential Revision: https://reviews.llvm.org/D154767
1 parent 528831d commit eac78fd

File tree

2 files changed

+445
-0
lines changed

2 files changed

+445
-0
lines changed

llvm/test/CodeGen/CSKY/br.ll

Lines changed: 229 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6611,3 +6611,232 @@ label1:
66116611
label2:
66126612
ret i1 0
66136613
}
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+
label1:
6656+
ret i32 1
6657+
label2:
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+
label1:
6702+
ret i32 1
6703+
label2:
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+
label1:
6748+
ret i32 1
6749+
label2:
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+
label1:
6794+
ret i32 1
6795+
label2:
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+
label1:
6839+
ret i32 1
6840+
label2:
6841+
ret i32 0
6842+
}

0 commit comments

Comments
 (0)