414 changes: 410 additions & 4 deletions llvm/test/CodeGen/RISCV/short-foward-branch-opt.ll
Original file line number Diff line number Diff line change
Expand Up @@ -192,10 +192,9 @@ define i16 @select_xor_1(i16 %A, i8 %cond) {
; SFB-LABEL: select_xor_1:
; SFB: # %bb.0: # %entry
; SFB-NEXT: andi a1, a1, 1
; SFB-NEXT: xori a2, a0, 43
; SFB-NEXT: beqz a1, .LBB7_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: mv a0, a2
; SFB-NEXT: xori a0, a0, 43
; SFB-NEXT: .LBB7_2: # %entry
; SFB-NEXT: ret
entry:
Expand All @@ -220,10 +219,9 @@ define i16 @select_xor_1b(i16 %A, i8 %cond) {
; SFB-LABEL: select_xor_1b:
; SFB: # %bb.0: # %entry
; SFB-NEXT: andi a1, a1, 1
; SFB-NEXT: xori a2, a0, 43
; SFB-NEXT: beqz a1, .LBB8_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: mv a0, a2
; SFB-NEXT: xori a0, a0, 43
; SFB-NEXT: .LBB8_2: # %entry
; SFB-NEXT: ret
entry:
Expand Down Expand Up @@ -522,3 +520,411 @@ bb2: ; preds = %bb2, %bb
bb7: ; preds = %bb2
ret void
}

define i32 @select_sllw(i32 %A, i32 %B, i32 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_sllw:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a3, .LBB17_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: sllw a2, a0, a1
; NOSFB-NEXT: .LBB17_2: # %entry
; NOSFB-NEXT: mv a0, a2
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_sllw:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a3, .LBB17_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: sllw a2, a0, a1
; SFB-NEXT: .LBB17_2: # %entry
; SFB-NEXT: mv a0, a2
; SFB-NEXT: ret
entry:
%0 = shl i32 %A, %B
%1 = select i1 %cond, i32 %C, i32 %0
ret i32 %1
}

define i32 @select_srlw(i32 %A, i32 %B, i32 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_srlw:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a3, .LBB18_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: srlw a2, a0, a1
; NOSFB-NEXT: .LBB18_2: # %entry
; NOSFB-NEXT: mv a0, a2
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_srlw:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a3, .LBB18_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: srlw a2, a0, a1
; SFB-NEXT: .LBB18_2: # %entry
; SFB-NEXT: mv a0, a2
; SFB-NEXT: ret
entry:
%0 = lshr i32 %A, %B
%1 = select i1 %cond, i32 %C, i32 %0
ret i32 %1
}

define i32 @select_sraw(i32 %A, i32 %B, i32 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_sraw:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a3, .LBB19_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: sraw a2, a0, a1
; NOSFB-NEXT: .LBB19_2: # %entry
; NOSFB-NEXT: mv a0, a2
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_sraw:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a3, .LBB19_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: sraw a2, a0, a1
; SFB-NEXT: .LBB19_2: # %entry
; SFB-NEXT: mv a0, a2
; SFB-NEXT: ret
entry:
%0 = ashr i32 %A, %B
%1 = select i1 %cond, i32 %C, i32 %0
ret i32 %1
}

define i64 @select_sll(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_sll:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a3, .LBB20_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: sll a2, a0, a1
; NOSFB-NEXT: .LBB20_2: # %entry
; NOSFB-NEXT: mv a0, a2
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_sll:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a3, .LBB20_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: sll a2, a0, a1
; SFB-NEXT: .LBB20_2: # %entry
; SFB-NEXT: mv a0, a2
; SFB-NEXT: ret
entry:
%0 = shl i64 %A, %B
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i64 @select_srl(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_srl:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a3, .LBB21_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: srl a2, a0, a1
; NOSFB-NEXT: .LBB21_2: # %entry
; NOSFB-NEXT: mv a0, a2
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_srl:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a3, .LBB21_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: srl a2, a0, a1
; SFB-NEXT: .LBB21_2: # %entry
; SFB-NEXT: mv a0, a2
; SFB-NEXT: ret
entry:
%0 = lshr i64 %A, %B
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i64 @select_sra(i64 %A, i64 %B, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_sra:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a3, .LBB22_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: sra a2, a0, a1
; NOSFB-NEXT: .LBB22_2: # %entry
; NOSFB-NEXT: mv a0, a2
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_sra:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a3, .LBB22_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: sra a2, a0, a1
; SFB-NEXT: .LBB22_2: # %entry
; SFB-NEXT: mv a0, a2
; SFB-NEXT: ret
entry:
%0 = ashr i64 %A, %B
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i32 @select_addiw(i32 %A, i32 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_addiw:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB23_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: addiw a1, a0, 1234
; NOSFB-NEXT: .LBB23_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_addiw:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB23_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: addiw a1, a0, 1234
; SFB-NEXT: .LBB23_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = add i32 %A, 1234
%1 = select i1 %cond, i32 %C, i32 %0
ret i32 %1
}

define i64 @select_addi(i64 %A, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_addi:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB24_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: addi a1, a0, 1234
; NOSFB-NEXT: .LBB24_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_addi:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB24_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: addi a1, a0, 1234
; SFB-NEXT: .LBB24_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = add i64 %A, 1234
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i64 @select_andi(i64 %A, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_andi:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB25_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: andi a1, a0, 567
; NOSFB-NEXT: .LBB25_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_andi:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB25_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: andi a1, a0, 567
; SFB-NEXT: .LBB25_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = and i64 %A, 567
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i64 @select_ori(i64 %A, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_ori:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB26_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: ori a1, a0, 890
; NOSFB-NEXT: .LBB26_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_ori:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB26_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: ori a1, a0, 890
; SFB-NEXT: .LBB26_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = or i64 %A, 890
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i64 @select_xori(i64 %A, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_xori:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB27_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: xori a1, a0, 321
; NOSFB-NEXT: .LBB27_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_xori:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB27_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: xori a1, a0, 321
; SFB-NEXT: .LBB27_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = xor i64 %A, 321
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i64 @select_slli(i64 %A, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_slli:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB28_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: slli a1, a0, 32
; NOSFB-NEXT: .LBB28_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_slli:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB28_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: slli a1, a0, 32
; SFB-NEXT: .LBB28_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = shl i64 %A, 32
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i64 @select_srli(i64 %A, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_srli:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB29_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: srli a1, a0, 35
; NOSFB-NEXT: .LBB29_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_srli:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB29_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: srli a1, a0, 35
; SFB-NEXT: .LBB29_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = lshr i64 %A, 35
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i64 @select_srai(i64 %A, i64 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_srai:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB30_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: srai a1, a0, 63
; NOSFB-NEXT: .LBB30_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_srai:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB30_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: srai a1, a0, 63
; SFB-NEXT: .LBB30_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = ashr i64 %A, 63
%1 = select i1 %cond, i64 %C, i64 %0
ret i64 %1
}

define i32 @select_slliw(i32 %A, i32 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_slliw:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB31_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: slliw a1, a0, 3
; NOSFB-NEXT: .LBB31_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_slliw:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB31_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: slliw a1, a0, 3
; SFB-NEXT: .LBB31_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = shl i32 %A, 3
%1 = select i1 %cond, i32 %C, i32 %0
ret i32 %1
}

define i32 @select_srliw(i32 %A, i32 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_srliw:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB32_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: srliw a1, a0, 17
; NOSFB-NEXT: .LBB32_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_srliw:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB32_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: srliw a1, a0, 17
; SFB-NEXT: .LBB32_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = lshr i32 %A, 17
%1 = select i1 %cond, i32 %C, i32 %0
ret i32 %1
}

define i32 @select_sraiw(i32 %A, i32 %C, i1 zeroext %cond) {
; NOSFB-LABEL: select_sraiw:
; NOSFB: # %bb.0: # %entry
; NOSFB-NEXT: bnez a2, .LBB33_2
; NOSFB-NEXT: # %bb.1: # %entry
; NOSFB-NEXT: sraiw a1, a0, 31
; NOSFB-NEXT: .LBB33_2: # %entry
; NOSFB-NEXT: mv a0, a1
; NOSFB-NEXT: ret
;
; SFB-LABEL: select_sraiw:
; SFB: # %bb.0: # %entry
; SFB-NEXT: bnez a2, .LBB33_2
; SFB-NEXT: # %bb.1: # %entry
; SFB-NEXT: sraiw a1, a0, 31
; SFB-NEXT: .LBB33_2: # %entry
; SFB-NEXT: mv a0, a1
; SFB-NEXT: ret
entry:
%0 = ashr i32 %A, 31
%1 = select i1 %cond, i32 %C, i32 %0
ret i32 %1
}