182 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=riscv32 -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECKI,RV323; RUN: llc -mtriple=riscv64 -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECKI,RV644; RUN: llc -mtriple=riscv32 -mattr=+f -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECKIF,RV325; RUN: llc -mtriple=riscv64 -mattr=+f -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECKIF,RV646 7define i1 @phi_i1(i1 %cnd, i1 %a, i1 %b) {8; CHECK-LABEL: phi_i1:9; CHECK: # %bb.0: # %entry10; CHECK-NEXT: mv a3, a011; CHECK-NEXT: mv a0, a112; CHECK-NEXT: andi a3, a3, 113; CHECK-NEXT: bnez a3, .LBB0_214; CHECK-NEXT: # %bb.1: # %cond.false15; CHECK-NEXT: mv a0, a216; CHECK-NEXT: .LBB0_2: # %cond.end17; CHECK-NEXT: ret18entry:19 br i1 %cnd, label %cond.end, label %cond.false20 21cond.false: ; preds = %entry22 br label %cond.end23 24cond.end: ; preds = %entry, %cond.false25 %cond = phi i1 [ %b, %cond.false ], [ %a, %entry ]26 ret i1 %cond27}28 29define i8 @phi_i8(i1 %cnd, i8 %a, i8 %b) {30; CHECK-LABEL: phi_i8:31; CHECK: # %bb.0: # %entry32; CHECK-NEXT: mv a3, a033; CHECK-NEXT: mv a0, a134; CHECK-NEXT: andi a3, a3, 135; CHECK-NEXT: bnez a3, .LBB1_236; CHECK-NEXT: # %bb.1: # %cond.false37; CHECK-NEXT: mv a0, a238; CHECK-NEXT: .LBB1_2: # %cond.end39; CHECK-NEXT: ret40entry:41 br i1 %cnd, label %cond.end, label %cond.false42 43cond.false: ; preds = %entry44 br label %cond.end45 46cond.end: ; preds = %entry, %cond.false47 %cond = phi i8 [ %b, %cond.false ], [ %a, %entry ]48 ret i8 %cond49}50 51define i16 @phi_i16(i1 %cnd, i16 %a, i16 %b) {52; CHECK-LABEL: phi_i16:53; CHECK: # %bb.0: # %entry54; CHECK-NEXT: mv a3, a055; CHECK-NEXT: mv a0, a156; CHECK-NEXT: andi a3, a3, 157; CHECK-NEXT: bnez a3, .LBB2_258; CHECK-NEXT: # %bb.1: # %cond.false59; CHECK-NEXT: mv a0, a260; CHECK-NEXT: .LBB2_2: # %cond.end61; CHECK-NEXT: ret62entry:63 br i1 %cnd, label %cond.end, label %cond.false64 65cond.false: ; preds = %entry66 br label %cond.end67 68cond.end: ; preds = %entry, %cond.false69 %cond = phi i16 [ %b, %cond.false ], [ %a, %entry ]70 ret i16 %cond71}72 73define i32 @phi_i32(i1 %cnd, i32 %a, i32 %b) {74; CHECK-LABEL: phi_i32:75; CHECK: # %bb.0: # %entry76; CHECK-NEXT: mv a3, a077; CHECK-NEXT: mv a0, a178; CHECK-NEXT: andi a3, a3, 179; CHECK-NEXT: bnez a3, .LBB3_280; CHECK-NEXT: # %bb.1: # %cond.false81; CHECK-NEXT: mv a0, a282; CHECK-NEXT: .LBB3_2: # %cond.end83; CHECK-NEXT: ret84entry:85 br i1 %cnd, label %cond.end, label %cond.false86 87cond.false: ; preds = %entry88 br label %cond.end89 90cond.end: ; preds = %entry, %cond.false91 %cond = phi i32 [ %b, %cond.false ], [ %a, %entry ]92 ret i32 %cond93}94 95define i64 @phi_i64(i1 %cnd, i64 %a, i64 %b) {96; RV32-LABEL: phi_i64:97; RV32: # %bb.0: # %entry98; RV32-NEXT: mv a5, a099; RV32-NEXT: mv a0, a1100; RV32-NEXT: mv a1, a2101; RV32-NEXT: andi a5, a5, 1102; RV32-NEXT: bnez a5, .LBB4_2103; RV32-NEXT: # %bb.1: # %cond.false104; RV32-NEXT: mv a0, a3105; RV32-NEXT: mv a1, a4106; RV32-NEXT: .LBB4_2: # %cond.end107; RV32-NEXT: ret108;109; RV64-LABEL: phi_i64:110; RV64: # %bb.0: # %entry111; RV64-NEXT: mv a3, a0112; RV64-NEXT: mv a0, a1113; RV64-NEXT: andi a3, a3, 1114; RV64-NEXT: bnez a3, .LBB4_2115; RV64-NEXT: # %bb.1: # %cond.false116; RV64-NEXT: mv a0, a2117; RV64-NEXT: .LBB4_2: # %cond.end118; RV64-NEXT: ret119entry:120 br i1 %cnd, label %cond.end, label %cond.false121 122cond.false: ; preds = %entry123 br label %cond.end124 125cond.end: ; preds = %entry, %cond.false126 %cond = phi i64 [ %b, %cond.false ], [ %a, %entry ]127 ret i64 %cond128}129 130define ptr @phi_ptr(i1 %cnd, ptr %a, ptr %b) {131; CHECK-LABEL: phi_ptr:132; CHECK: # %bb.0: # %entry133; CHECK-NEXT: mv a3, a0134; CHECK-NEXT: mv a0, a1135; CHECK-NEXT: andi a3, a3, 1136; CHECK-NEXT: bnez a3, .LBB5_2137; CHECK-NEXT: # %bb.1: # %cond.false138; CHECK-NEXT: mv a0, a2139; CHECK-NEXT: .LBB5_2: # %cond.end140; CHECK-NEXT: ret141entry:142 br i1 %cnd, label %cond.end, label %cond.false143 144cond.false: ; preds = %entry145 br label %cond.end146 147cond.end: ; preds = %entry, %cond.false148 %cond = phi ptr [ %b, %cond.false ], [ %a, %entry ]149 ret ptr %cond150}151 152define float @phi_float(i1 %cnd, float %a, float %b) {153; CHECKI-LABEL: phi_float:154; CHECKI: # %bb.0: # %entry155; CHECKI-NEXT: mv a3, a0156; CHECKI-NEXT: mv a0, a1157; CHECKI-NEXT: andi a3, a3, 1158; CHECKI-NEXT: bnez a3, .LBB6_2159; CHECKI-NEXT: # %bb.1: # %cond.false160; CHECKI-NEXT: mv a0, a2161; CHECKI-NEXT: .LBB6_2: # %cond.end162; CHECKI-NEXT: ret163;164; CHECKIF-LABEL: phi_float:165; CHECKIF: # %bb.0: # %entry166; CHECKIF-NEXT: andi a0, a0, 1167; CHECKIF-NEXT: bnez a0, .LBB6_2168; CHECKIF-NEXT: # %bb.1: # %cond.false169; CHECKIF-NEXT: fmv.s fa0, fa1170; CHECKIF-NEXT: .LBB6_2: # %cond.end171; CHECKIF-NEXT: ret172entry:173 br i1 %cnd, label %cond.end, label %cond.false174 175cond.false: ; preds = %entry176 br label %cond.end177 178cond.end: ; preds = %entry, %cond.false179 %cond = phi float [ %b, %cond.false ], [ %a, %entry ]180 ret float %cond181}182