1*ab0dc290SCraig Topper; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2*ab0dc290SCraig Topper; RUN: llc -mtriple=riscv32 -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECKI,RV32 3*ab0dc290SCraig Topper; RUN: llc -mtriple=riscv64 -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECKI,RV64 4*ab0dc290SCraig Topper; RUN: llc -mtriple=riscv32 -mattr=+f -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECKIF,RV32 5*ab0dc290SCraig Topper; RUN: llc -mtriple=riscv64 -mattr=+f -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECKIF,RV64 6*ab0dc290SCraig Topper 7*ab0dc290SCraig Topperdefine i1 @phi_i1(i1 %cnd, i1 %a, i1 %b) { 8*ab0dc290SCraig Topper; CHECK-LABEL: phi_i1: 9*ab0dc290SCraig Topper; CHECK: # %bb.0: # %entry 10*ab0dc290SCraig Topper; CHECK-NEXT: mv a3, a0 11*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a1 12*ab0dc290SCraig Topper; CHECK-NEXT: andi a3, a3, 1 13*ab0dc290SCraig Topper; CHECK-NEXT: bnez a3, .LBB0_2 14*ab0dc290SCraig Topper; CHECK-NEXT: # %bb.1: # %cond.false 15*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a2 16*ab0dc290SCraig Topper; CHECK-NEXT: .LBB0_2: # %cond.end 17*ab0dc290SCraig Topper; CHECK-NEXT: ret 18*ab0dc290SCraig Topperentry: 19*ab0dc290SCraig Topper br i1 %cnd, label %cond.end, label %cond.false 20*ab0dc290SCraig Topper 21*ab0dc290SCraig Toppercond.false: ; preds = %entry 22*ab0dc290SCraig Topper br label %cond.end 23*ab0dc290SCraig Topper 24*ab0dc290SCraig Toppercond.end: ; preds = %entry, %cond.false 25*ab0dc290SCraig Topper %cond = phi i1 [ %b, %cond.false ], [ %a, %entry ] 26*ab0dc290SCraig Topper ret i1 %cond 27*ab0dc290SCraig Topper} 28*ab0dc290SCraig Topper 29*ab0dc290SCraig Topperdefine i8 @phi_i8(i1 %cnd, i8 %a, i8 %b) { 30*ab0dc290SCraig Topper; CHECK-LABEL: phi_i8: 31*ab0dc290SCraig Topper; CHECK: # %bb.0: # %entry 32*ab0dc290SCraig Topper; CHECK-NEXT: mv a3, a0 33*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a1 34*ab0dc290SCraig Topper; CHECK-NEXT: andi a3, a3, 1 35*ab0dc290SCraig Topper; CHECK-NEXT: bnez a3, .LBB1_2 36*ab0dc290SCraig Topper; CHECK-NEXT: # %bb.1: # %cond.false 37*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a2 38*ab0dc290SCraig Topper; CHECK-NEXT: .LBB1_2: # %cond.end 39*ab0dc290SCraig Topper; CHECK-NEXT: ret 40*ab0dc290SCraig Topperentry: 41*ab0dc290SCraig Topper br i1 %cnd, label %cond.end, label %cond.false 42*ab0dc290SCraig Topper 43*ab0dc290SCraig Toppercond.false: ; preds = %entry 44*ab0dc290SCraig Topper br label %cond.end 45*ab0dc290SCraig Topper 46*ab0dc290SCraig Toppercond.end: ; preds = %entry, %cond.false 47*ab0dc290SCraig Topper %cond = phi i8 [ %b, %cond.false ], [ %a, %entry ] 48*ab0dc290SCraig Topper ret i8 %cond 49*ab0dc290SCraig Topper} 50*ab0dc290SCraig Topper 51*ab0dc290SCraig Topperdefine i16 @phi_i16(i1 %cnd, i16 %a, i16 %b) { 52*ab0dc290SCraig Topper; CHECK-LABEL: phi_i16: 53*ab0dc290SCraig Topper; CHECK: # %bb.0: # %entry 54*ab0dc290SCraig Topper; CHECK-NEXT: mv a3, a0 55*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a1 56*ab0dc290SCraig Topper; CHECK-NEXT: andi a3, a3, 1 57*ab0dc290SCraig Topper; CHECK-NEXT: bnez a3, .LBB2_2 58*ab0dc290SCraig Topper; CHECK-NEXT: # %bb.1: # %cond.false 59*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a2 60*ab0dc290SCraig Topper; CHECK-NEXT: .LBB2_2: # %cond.end 61*ab0dc290SCraig Topper; CHECK-NEXT: ret 62*ab0dc290SCraig Topperentry: 63*ab0dc290SCraig Topper br i1 %cnd, label %cond.end, label %cond.false 64*ab0dc290SCraig Topper 65*ab0dc290SCraig Toppercond.false: ; preds = %entry 66*ab0dc290SCraig Topper br label %cond.end 67*ab0dc290SCraig Topper 68*ab0dc290SCraig Toppercond.end: ; preds = %entry, %cond.false 69*ab0dc290SCraig Topper %cond = phi i16 [ %b, %cond.false ], [ %a, %entry ] 70*ab0dc290SCraig Topper ret i16 %cond 71*ab0dc290SCraig Topper} 72*ab0dc290SCraig Topper 73*ab0dc290SCraig Topperdefine i32 @phi_i32(i1 %cnd, i32 %a, i32 %b) { 74*ab0dc290SCraig Topper; CHECK-LABEL: phi_i32: 75*ab0dc290SCraig Topper; CHECK: # %bb.0: # %entry 76*ab0dc290SCraig Topper; CHECK-NEXT: mv a3, a0 77*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a1 78*ab0dc290SCraig Topper; CHECK-NEXT: andi a3, a3, 1 79*ab0dc290SCraig Topper; CHECK-NEXT: bnez a3, .LBB3_2 80*ab0dc290SCraig Topper; CHECK-NEXT: # %bb.1: # %cond.false 81*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a2 82*ab0dc290SCraig Topper; CHECK-NEXT: .LBB3_2: # %cond.end 83*ab0dc290SCraig Topper; CHECK-NEXT: ret 84*ab0dc290SCraig Topperentry: 85*ab0dc290SCraig Topper br i1 %cnd, label %cond.end, label %cond.false 86*ab0dc290SCraig Topper 87*ab0dc290SCraig Toppercond.false: ; preds = %entry 88*ab0dc290SCraig Topper br label %cond.end 89*ab0dc290SCraig Topper 90*ab0dc290SCraig Toppercond.end: ; preds = %entry, %cond.false 91*ab0dc290SCraig Topper %cond = phi i32 [ %b, %cond.false ], [ %a, %entry ] 92*ab0dc290SCraig Topper ret i32 %cond 93*ab0dc290SCraig Topper} 94*ab0dc290SCraig Topper 95*ab0dc290SCraig Topperdefine i64 @phi_i64(i1 %cnd, i64 %a, i64 %b) { 96*ab0dc290SCraig Topper; RV32-LABEL: phi_i64: 97*ab0dc290SCraig Topper; RV32: # %bb.0: # %entry 98*ab0dc290SCraig Topper; RV32-NEXT: mv a5, a0 99*ab0dc290SCraig Topper; RV32-NEXT: mv a0, a1 100*ab0dc290SCraig Topper; RV32-NEXT: mv a1, a2 101*ab0dc290SCraig Topper; RV32-NEXT: andi a5, a5, 1 102*ab0dc290SCraig Topper; RV32-NEXT: bnez a5, .LBB4_2 103*ab0dc290SCraig Topper; RV32-NEXT: # %bb.1: # %cond.false 104*ab0dc290SCraig Topper; RV32-NEXT: mv a0, a3 105*ab0dc290SCraig Topper; RV32-NEXT: mv a1, a4 106*ab0dc290SCraig Topper; RV32-NEXT: .LBB4_2: # %cond.end 107*ab0dc290SCraig Topper; RV32-NEXT: ret 108*ab0dc290SCraig Topper; 109*ab0dc290SCraig Topper; RV64-LABEL: phi_i64: 110*ab0dc290SCraig Topper; RV64: # %bb.0: # %entry 111*ab0dc290SCraig Topper; RV64-NEXT: mv a3, a0 112*ab0dc290SCraig Topper; RV64-NEXT: mv a0, a1 113*ab0dc290SCraig Topper; RV64-NEXT: andi a3, a3, 1 114*ab0dc290SCraig Topper; RV64-NEXT: bnez a3, .LBB4_2 115*ab0dc290SCraig Topper; RV64-NEXT: # %bb.1: # %cond.false 116*ab0dc290SCraig Topper; RV64-NEXT: mv a0, a2 117*ab0dc290SCraig Topper; RV64-NEXT: .LBB4_2: # %cond.end 118*ab0dc290SCraig Topper; RV64-NEXT: ret 119*ab0dc290SCraig Topperentry: 120*ab0dc290SCraig Topper br i1 %cnd, label %cond.end, label %cond.false 121*ab0dc290SCraig Topper 122*ab0dc290SCraig Toppercond.false: ; preds = %entry 123*ab0dc290SCraig Topper br label %cond.end 124*ab0dc290SCraig Topper 125*ab0dc290SCraig Toppercond.end: ; preds = %entry, %cond.false 126*ab0dc290SCraig Topper %cond = phi i64 [ %b, %cond.false ], [ %a, %entry ] 127*ab0dc290SCraig Topper ret i64 %cond 128*ab0dc290SCraig Topper} 129*ab0dc290SCraig Topper 130*ab0dc290SCraig Topperdefine ptr @phi_ptr(i1 %cnd, ptr %a, ptr %b) { 131*ab0dc290SCraig Topper; CHECK-LABEL: phi_ptr: 132*ab0dc290SCraig Topper; CHECK: # %bb.0: # %entry 133*ab0dc290SCraig Topper; CHECK-NEXT: mv a3, a0 134*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a1 135*ab0dc290SCraig Topper; CHECK-NEXT: andi a3, a3, 1 136*ab0dc290SCraig Topper; CHECK-NEXT: bnez a3, .LBB5_2 137*ab0dc290SCraig Topper; CHECK-NEXT: # %bb.1: # %cond.false 138*ab0dc290SCraig Topper; CHECK-NEXT: mv a0, a2 139*ab0dc290SCraig Topper; CHECK-NEXT: .LBB5_2: # %cond.end 140*ab0dc290SCraig Topper; CHECK-NEXT: ret 141*ab0dc290SCraig Topperentry: 142*ab0dc290SCraig Topper br i1 %cnd, label %cond.end, label %cond.false 143*ab0dc290SCraig Topper 144*ab0dc290SCraig Toppercond.false: ; preds = %entry 145*ab0dc290SCraig Topper br label %cond.end 146*ab0dc290SCraig Topper 147*ab0dc290SCraig Toppercond.end: ; preds = %entry, %cond.false 148*ab0dc290SCraig Topper %cond = phi ptr [ %b, %cond.false ], [ %a, %entry ] 149*ab0dc290SCraig Topper ret ptr %cond 150*ab0dc290SCraig Topper} 151*ab0dc290SCraig Topper 152*ab0dc290SCraig Topperdefine float @phi_float(i1 %cnd, float %a, float %b) { 153*ab0dc290SCraig Topper; CHECKI-LABEL: phi_float: 154*ab0dc290SCraig Topper; CHECKI: # %bb.0: # %entry 155*ab0dc290SCraig Topper; CHECKI-NEXT: mv a3, a0 156*ab0dc290SCraig Topper; CHECKI-NEXT: mv a0, a1 157*ab0dc290SCraig Topper; CHECKI-NEXT: andi a3, a3, 1 158*ab0dc290SCraig Topper; CHECKI-NEXT: bnez a3, .LBB6_2 159*ab0dc290SCraig Topper; CHECKI-NEXT: # %bb.1: # %cond.false 160*ab0dc290SCraig Topper; CHECKI-NEXT: mv a0, a2 161*ab0dc290SCraig Topper; CHECKI-NEXT: .LBB6_2: # %cond.end 162*ab0dc290SCraig Topper; CHECKI-NEXT: ret 163*ab0dc290SCraig Topper; 164*ab0dc290SCraig Topper; CHECKIF-LABEL: phi_float: 165*ab0dc290SCraig Topper; CHECKIF: # %bb.0: # %entry 166*ab0dc290SCraig Topper; CHECKIF-NEXT: andi a0, a0, 1 167*ab0dc290SCraig Topper; CHECKIF-NEXT: bnez a0, .LBB6_2 168*ab0dc290SCraig Topper; CHECKIF-NEXT: # %bb.1: # %cond.false 169*ab0dc290SCraig Topper; CHECKIF-NEXT: fmv.s fa0, fa1 170*ab0dc290SCraig Topper; CHECKIF-NEXT: .LBB6_2: # %cond.end 171*ab0dc290SCraig Topper; CHECKIF-NEXT: ret 172*ab0dc290SCraig Topperentry: 173*ab0dc290SCraig Topper br i1 %cnd, label %cond.end, label %cond.false 174*ab0dc290SCraig Topper 175*ab0dc290SCraig Toppercond.false: ; preds = %entry 176*ab0dc290SCraig Topper br label %cond.end 177*ab0dc290SCraig Topper 178*ab0dc290SCraig Toppercond.end: ; preds = %entry, %cond.false 179*ab0dc290SCraig Topper %cond = phi float [ %b, %cond.false ], [ %a, %entry ] 180*ab0dc290SCraig Topper ret float %cond 181*ab0dc290SCraig Topper} 182