Skip to content

Commit

Permalink
[CSKY][test][NFC] Add tests of conditional branch and value select
Browse files Browse the repository at this point in the history
These tests will be optimzied with BTSTI16/BTSTI32
in the future.

Reviewed By: zixuan-wu

Differential Revision: https://reviews.llvm.org/D154767
  • Loading branch information
benshi001 committed Aug 4, 2023
1 parent 528831d commit eac78fd
Show file tree
Hide file tree
Showing 2 changed files with 445 additions and 0 deletions.
229 changes: 229 additions & 0 deletions llvm/test/CodeGen/CSKY/br.ll
Original file line number Diff line number Diff line change
Expand Up @@ -6611,3 +6611,232 @@ label1:
label2:
ret i1 0
}

define i32 @br_bit_test_eq_0(i32 %c) {
; CHECK-LABEL: br_bit_test_eq_0:
; CHECK: # %bb.0:
; CHECK-NEXT: movih32 a1, 2
; CHECK-NEXT: and16 a0, a1
; CHECK-NEXT: bnez32 a0, .LBB145_2
; CHECK-NEXT: # %bb.1: # %label1
; CHECK-NEXT: movi16 a0, 1
; CHECK-NEXT: rts16
; CHECK-NEXT: .LBB145_2: # %label2
; CHECK-NEXT: movi16 a0, 0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: br_bit_test_eq_0:
; GENERIC: # %bb.0:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
; GENERIC-NEXT: movi16 a1, 0
; GENERIC-NEXT: lsli16 a2, a1, 24
; GENERIC-NEXT: movi16 a3, 2
; GENERIC-NEXT: lsli16 a3, a3, 16
; GENERIC-NEXT: or16 a3, a2
; GENERIC-NEXT: lsli16 a2, a1, 8
; GENERIC-NEXT: or16 a2, a3
; GENERIC-NEXT: or16 a2, a1
; GENERIC-NEXT: and16 a2, a0
; GENERIC-NEXT: cmpnei16 a2, 0
; GENERIC-NEXT: bt16 .LBB145_2
; GENERIC-NEXT: # %bb.1: # %label1
; GENERIC-NEXT: movi16 a0, 1
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .LBB145_2: # %label2
; GENERIC-NEXT: movi16 a0, 0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
%t0 = and i32 %c, 131072
%t1 = icmp eq i32 %t0, 0
br i1 %t1, label %label1, label %label2
label1:
ret i32 1
label2:
ret i32 0
}

define i32 @br_bit_test_ne_0(i32 %c) {
; CHECK-LABEL: br_bit_test_ne_0:
; CHECK: # %bb.0:
; CHECK-NEXT: movih32 a1, 2
; CHECK-NEXT: and16 a0, a1
; CHECK-NEXT: bez32 a0, .LBB146_2
; CHECK-NEXT: # %bb.1: # %label1
; CHECK-NEXT: movi16 a0, 1
; CHECK-NEXT: rts16
; CHECK-NEXT: .LBB146_2: # %label2
; CHECK-NEXT: movi16 a0, 0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: br_bit_test_ne_0:
; GENERIC: # %bb.0:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
; GENERIC-NEXT: movi16 a1, 0
; GENERIC-NEXT: lsli16 a2, a1, 24
; GENERIC-NEXT: movi16 a3, 2
; GENERIC-NEXT: lsli16 a3, a3, 16
; GENERIC-NEXT: or16 a3, a2
; GENERIC-NEXT: lsli16 a2, a1, 8
; GENERIC-NEXT: or16 a2, a3
; GENERIC-NEXT: or16 a2, a1
; GENERIC-NEXT: and16 a2, a0
; GENERIC-NEXT: cmpnei16 a2, 0
; GENERIC-NEXT: bf16 .LBB146_2
; GENERIC-NEXT: # %bb.1: # %label1
; GENERIC-NEXT: movi16 a0, 1
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .LBB146_2: # %label2
; GENERIC-NEXT: movi16 a0, 0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
%t0 = and i32 %c, 131072
%t1 = icmp ne i32 %t0, 0
br i1 %t1, label %label1, label %label2
label1:
ret i32 1
label2:
ret i32 0
}

define i32 @br_bit_test_eq_mask(i32 %c) {
; CHECK-LABEL: br_bit_test_eq_mask:
; CHECK: # %bb.0:
; CHECK-NEXT: movih32 a1, 2
; CHECK-NEXT: and16 a0, a1
; CHECK-NEXT: bez32 a0, .LBB147_2
; CHECK-NEXT: # %bb.1: # %label1
; CHECK-NEXT: movi16 a0, 1
; CHECK-NEXT: rts16
; CHECK-NEXT: .LBB147_2: # %label2
; CHECK-NEXT: movi16 a0, 0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: br_bit_test_eq_mask:
; GENERIC: # %bb.0:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
; GENERIC-NEXT: movi16 a1, 0
; GENERIC-NEXT: lsli16 a2, a1, 24
; GENERIC-NEXT: movi16 a3, 2
; GENERIC-NEXT: lsli16 a3, a3, 16
; GENERIC-NEXT: or16 a3, a2
; GENERIC-NEXT: lsli16 a2, a1, 8
; GENERIC-NEXT: or16 a2, a3
; GENERIC-NEXT: or16 a2, a1
; GENERIC-NEXT: and16 a2, a0
; GENERIC-NEXT: cmpnei16 a2, 0
; GENERIC-NEXT: bf16 .LBB147_2
; GENERIC-NEXT: # %bb.1: # %label1
; GENERIC-NEXT: movi16 a0, 1
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .LBB147_2: # %label2
; GENERIC-NEXT: movi16 a0, 0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
%t0 = and i32 %c, 131072
%t1 = icmp eq i32 %t0, 131072
br i1 %t1, label %label1, label %label2
label1:
ret i32 1
label2:
ret i32 0
}

define i32 @br_bit_test_ne_mask(i32 %c) {
; CHECK-LABEL: br_bit_test_ne_mask:
; CHECK: # %bb.0:
; CHECK-NEXT: movih32 a1, 2
; CHECK-NEXT: and16 a0, a1
; CHECK-NEXT: bnez32 a0, .LBB148_2
; CHECK-NEXT: # %bb.1: # %label1
; CHECK-NEXT: movi16 a0, 1
; CHECK-NEXT: rts16
; CHECK-NEXT: .LBB148_2: # %label2
; CHECK-NEXT: movi16 a0, 0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: br_bit_test_ne_mask:
; GENERIC: # %bb.0:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
; GENERIC-NEXT: movi16 a1, 0
; GENERIC-NEXT: lsli16 a2, a1, 24
; GENERIC-NEXT: movi16 a3, 2
; GENERIC-NEXT: lsli16 a3, a3, 16
; GENERIC-NEXT: or16 a3, a2
; GENERIC-NEXT: lsli16 a2, a1, 8
; GENERIC-NEXT: or16 a2, a3
; GENERIC-NEXT: or16 a2, a1
; GENERIC-NEXT: and16 a2, a0
; GENERIC-NEXT: cmpnei16 a2, 0
; GENERIC-NEXT: bt16 .LBB148_2
; GENERIC-NEXT: # %bb.1: # %label1
; GENERIC-NEXT: movi16 a0, 1
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .LBB148_2: # %label2
; GENERIC-NEXT: movi16 a0, 0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
%t0 = and i32 %c, 131072
%t1 = icmp ne i32 %t0, 131072
br i1 %t1, label %label1, label %label2
label1:
ret i32 1
label2:
ret i32 0
}

define i32 @br_lowbit_test_ne_0(i32 %c) {
; CHECK-LABEL: br_lowbit_test_ne_0:
; CHECK: # %bb.0:
; CHECK-NEXT: andi32 a0, a0, 256
; CHECK-NEXT: bez32 a0, .LBB149_2
; CHECK-NEXT: # %bb.1: # %label1
; CHECK-NEXT: movi16 a0, 1
; CHECK-NEXT: rts16
; CHECK-NEXT: .LBB149_2: # %label2
; CHECK-NEXT: movi16 a0, 0
; CHECK-NEXT: rts16
;
; GENERIC-LABEL: br_lowbit_test_ne_0:
; GENERIC: # %bb.0:
; GENERIC-NEXT: .cfi_def_cfa_offset 0
; GENERIC-NEXT: subi16 sp, sp, 4
; GENERIC-NEXT: .cfi_def_cfa_offset 4
; GENERIC-NEXT: movi16 a1, 0
; GENERIC-NEXT: lsli16 a2, a1, 24
; GENERIC-NEXT: lsli16 a3, a1, 16
; GENERIC-NEXT: or16 a3, a2
; GENERIC-NEXT: movi16 a2, 1
; GENERIC-NEXT: lsli16 a2, a2, 8
; GENERIC-NEXT: or16 a2, a3
; GENERIC-NEXT: or16 a2, a1
; GENERIC-NEXT: and16 a2, a0
; GENERIC-NEXT: cmpnei16 a2, 0
; GENERIC-NEXT: bf16 .LBB149_2
; GENERIC-NEXT: # %bb.1: # %label1
; GENERIC-NEXT: movi16 a0, 1
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
; GENERIC-NEXT: .LBB149_2: # %label2
; GENERIC-NEXT: movi16 a0, 0
; GENERIC-NEXT: addi16 sp, sp, 4
; GENERIC-NEXT: rts16
%t0 = and i32 %c, 256
%t1 = icmp ne i32 %t0, 0
br i1 %t1, label %label1, label %label2
label1:
ret i32 1
label2:
ret i32 0
}
Loading

0 comments on commit eac78fd

Please sign in to comment.