brintos

brintos / llvm-project-archived public Read only

0
0
Text · 30.0 KiB · 0e8a0c7 Raw
704 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; Zicond with zfinx(implies by zdinx)3; RUN: llc -mtriple=riscv64 -mattr=+zdinx,+zicond -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZDINX_ZICOND,RV64ZDINX_ZICOND4; RUN: llc -mtriple=riscv64 -mattr=+zdinx         -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZDINX_NOZICOND,RV64ZDINX_NOZICOND5 6; Zicond with zfinx(implies by zhinx)7; RUN: llc -mtriple=riscv64 -mattr=+zhinx,+zicond -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZHINX_ZICOND,RV64ZHINX_ZICOND8 9; Baseline with classic FP registers (no *inx); zicond select should NOT trigger10; RUN: llc -mtriple=riscv64 -mattr=+f,+d          -verify-machineinstrs < %s | FileCheck %s --check-prefix=RV64FD11 12; Check same optimize work on 32bit machine13; RUN: llc -mtriple=riscv32 -mattr=+zfinx,+zicond -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZHINX_ZICOND,RV32ZFINX_ZICOND14; RUN: llc -mtriple=riscv32 -mattr=+zfinx         -verify-machineinstrs < %s | FileCheck %s --check-prefix=RV32ZFINX_NOZICOND15; RUN: llc -mtriple=riscv32 -mattr=+zdinx,+zicond -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZDINX_ZICOND,RV32ZDINX_ZICOND16; RUN: llc -mtriple=riscv32 -mattr=+zdinx         -verify-machineinstrs < %s | FileCheck %s --check-prefixes=ZDINX_NOZICOND,RV32ZDINX_NOZICOND17 18; This test checks that floating-point SELECT is lowered through integer19; SELECT (and thus to Zicond czero.* sequence) when FP values live in GPRs20; (Zfinx/Zdinx) and Zicond is enabled. When Zicond is disabled, we expect21; a branch-based lowering instead.22 23; -----------------------------------------------------------------------------24; float select with i1 condition (Zfinx)25; -----------------------------------------------------------------------------26 27define float @select_f32_i1(i1 %cond, float %t, float %f) nounwind {28; ZDINX_ZICOND-LABEL: select_f32_i1:29; ZDINX_ZICOND:       # %bb.0: # %entry30; ZDINX_ZICOND-NEXT:    # kill: def $x12_w killed $x12_w def $x1231; ZDINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x1132; ZDINX_ZICOND-NEXT:    andi a0, a0, 133; ZDINX_ZICOND-NEXT:    czero.nez a2, a2, a034; ZDINX_ZICOND-NEXT:    czero.eqz a0, a1, a035; ZDINX_ZICOND-NEXT:    or a0, a0, a236; ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x1037; ZDINX_ZICOND-NEXT:    ret38;39; ZDINX_NOZICOND-LABEL: select_f32_i1:40; ZDINX_NOZICOND:       # %bb.0: # %entry41; ZDINX_NOZICOND-NEXT:    andi a3, a0, 142; ZDINX_NOZICOND-NEXT:    mv a0, a143; ZDINX_NOZICOND-NEXT:    bnez a3, .LBB0_244; ZDINX_NOZICOND-NEXT:  # %bb.1: # %entry45; ZDINX_NOZICOND-NEXT:    mv a0, a246; ZDINX_NOZICOND-NEXT:  .LBB0_2: # %entry47; ZDINX_NOZICOND-NEXT:    ret48;49; ZHINX_ZICOND-LABEL: select_f32_i1:50; ZHINX_ZICOND:       # %bb.0: # %entry51; ZHINX_ZICOND-NEXT:    # kill: def $x12_w killed $x12_w def $x1252; ZHINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x1153; ZHINX_ZICOND-NEXT:    andi a0, a0, 154; ZHINX_ZICOND-NEXT:    czero.nez a2, a2, a055; ZHINX_ZICOND-NEXT:    czero.eqz a0, a1, a056; ZHINX_ZICOND-NEXT:    or a0, a0, a257; ZHINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x1058; ZHINX_ZICOND-NEXT:    ret59;60; RV64FD-LABEL: select_f32_i1:61; RV64FD:       # %bb.0: # %entry62; RV64FD-NEXT:    andi a0, a0, 163; RV64FD-NEXT:    bnez a0, .LBB0_264; RV64FD-NEXT:  # %bb.1: # %entry65; RV64FD-NEXT:    fmv.s fa0, fa166; RV64FD-NEXT:  .LBB0_2: # %entry67; RV64FD-NEXT:    ret68;69; RV32ZFINX_NOZICOND-LABEL: select_f32_i1:70; RV32ZFINX_NOZICOND:       # %bb.0: # %entry71; RV32ZFINX_NOZICOND-NEXT:    andi a3, a0, 172; RV32ZFINX_NOZICOND-NEXT:    mv a0, a173; RV32ZFINX_NOZICOND-NEXT:    bnez a3, .LBB0_274; RV32ZFINX_NOZICOND-NEXT:  # %bb.1: # %entry75; RV32ZFINX_NOZICOND-NEXT:    mv a0, a276; RV32ZFINX_NOZICOND-NEXT:  .LBB0_2: # %entry77; RV32ZFINX_NOZICOND-NEXT:    ret78entry:79  %sel = select i1 %cond, float %t, float %f80  ret float %sel81}82 83; -----------------------------------------------------------------------------84; double select with i1 condition (Zdinx)85; -----------------------------------------------------------------------------86 87define double @select_f64_i1(i1 %cond, double %t, double %f) nounwind {88; RV64ZDINX_ZICOND-LABEL: select_f64_i1:89; RV64ZDINX_ZICOND:       # %bb.0: # %entry90; RV64ZDINX_ZICOND-NEXT:    andi a0, a0, 191; RV64ZDINX_ZICOND-NEXT:    czero.nez a2, a2, a092; RV64ZDINX_ZICOND-NEXT:    czero.eqz a0, a1, a093; RV64ZDINX_ZICOND-NEXT:    or a0, a0, a294; RV64ZDINX_ZICOND-NEXT:    ret95;96; RV64ZDINX_NOZICOND-LABEL: select_f64_i1:97; RV64ZDINX_NOZICOND:       # %bb.0: # %entry98; RV64ZDINX_NOZICOND-NEXT:    andi a3, a0, 199; RV64ZDINX_NOZICOND-NEXT:    mv a0, a1100; RV64ZDINX_NOZICOND-NEXT:    bnez a3, .LBB1_2101; RV64ZDINX_NOZICOND-NEXT:  # %bb.1: # %entry102; RV64ZDINX_NOZICOND-NEXT:    mv a0, a2103; RV64ZDINX_NOZICOND-NEXT:  .LBB1_2: # %entry104; RV64ZDINX_NOZICOND-NEXT:    ret105;106; RV64ZHINX_ZICOND-LABEL: select_f64_i1:107; RV64ZHINX_ZICOND:       # %bb.0: # %entry108; RV64ZHINX_ZICOND-NEXT:    andi a0, a0, 1109; RV64ZHINX_ZICOND-NEXT:    czero.nez a2, a2, a0110; RV64ZHINX_ZICOND-NEXT:    czero.eqz a0, a1, a0111; RV64ZHINX_ZICOND-NEXT:    or a0, a0, a2112; RV64ZHINX_ZICOND-NEXT:    ret113;114; RV64FD-LABEL: select_f64_i1:115; RV64FD:       # %bb.0: # %entry116; RV64FD-NEXT:    andi a0, a0, 1117; RV64FD-NEXT:    bnez a0, .LBB1_2118; RV64FD-NEXT:  # %bb.1: # %entry119; RV64FD-NEXT:    fmv.d fa0, fa1120; RV64FD-NEXT:  .LBB1_2: # %entry121; RV64FD-NEXT:    ret122;123; RV32ZFINX_ZICOND-LABEL: select_f64_i1:124; RV32ZFINX_ZICOND:       # %bb.0: # %entry125; RV32ZFINX_ZICOND-NEXT:    andi a0, a0, 1126; RV32ZFINX_ZICOND-NEXT:    czero.nez a3, a3, a0127; RV32ZFINX_ZICOND-NEXT:    czero.eqz a1, a1, a0128; RV32ZFINX_ZICOND-NEXT:    czero.nez a4, a4, a0129; RV32ZFINX_ZICOND-NEXT:    czero.eqz a2, a2, a0130; RV32ZFINX_ZICOND-NEXT:    or a0, a1, a3131; RV32ZFINX_ZICOND-NEXT:    or a1, a2, a4132; RV32ZFINX_ZICOND-NEXT:    ret133;134; RV32ZFINX_NOZICOND-LABEL: select_f64_i1:135; RV32ZFINX_NOZICOND:       # %bb.0: # %entry136; RV32ZFINX_NOZICOND-NEXT:    andi a5, a0, 1137; RV32ZFINX_NOZICOND-NEXT:    mv a0, a1138; RV32ZFINX_NOZICOND-NEXT:    bnez a5, .LBB1_2139; RV32ZFINX_NOZICOND-NEXT:  # %bb.1: # %entry140; RV32ZFINX_NOZICOND-NEXT:    mv a0, a3141; RV32ZFINX_NOZICOND-NEXT:    mv a2, a4142; RV32ZFINX_NOZICOND-NEXT:  .LBB1_2: # %entry143; RV32ZFINX_NOZICOND-NEXT:    mv a1, a2144; RV32ZFINX_NOZICOND-NEXT:    ret145;146; RV32ZDINX_ZICOND-LABEL: select_f64_i1:147; RV32ZDINX_ZICOND:       # %bb.0: # %entry148; RV32ZDINX_ZICOND-NEXT:    andi a0, a0, 1149; RV32ZDINX_ZICOND-NEXT:    bnez a0, .LBB1_2150; RV32ZDINX_ZICOND-NEXT:  # %bb.1: # %entry151; RV32ZDINX_ZICOND-NEXT:    mv a7, a4152; RV32ZDINX_ZICOND-NEXT:    mv a6, a3153; RV32ZDINX_ZICOND-NEXT:    fmv.d a4, a6154; RV32ZDINX_ZICOND-NEXT:    j .LBB1_3155; RV32ZDINX_ZICOND-NEXT:  .LBB1_2:156; RV32ZDINX_ZICOND-NEXT:    mv a5, a2157; RV32ZDINX_ZICOND-NEXT:    mv a4, a1158; RV32ZDINX_ZICOND-NEXT:  .LBB1_3: # %entry159; RV32ZDINX_ZICOND-NEXT:    mv a0, a4160; RV32ZDINX_ZICOND-NEXT:    mv a1, a5161; RV32ZDINX_ZICOND-NEXT:    ret162;163; RV32ZDINX_NOZICOND-LABEL: select_f64_i1:164; RV32ZDINX_NOZICOND:       # %bb.0: # %entry165; RV32ZDINX_NOZICOND-NEXT:    andi a0, a0, 1166; RV32ZDINX_NOZICOND-NEXT:    bnez a0, .LBB1_2167; RV32ZDINX_NOZICOND-NEXT:  # %bb.1: # %entry168; RV32ZDINX_NOZICOND-NEXT:    mv a7, a4169; RV32ZDINX_NOZICOND-NEXT:    mv a6, a3170; RV32ZDINX_NOZICOND-NEXT:    fmv.d a4, a6171; RV32ZDINX_NOZICOND-NEXT:    j .LBB1_3172; RV32ZDINX_NOZICOND-NEXT:  .LBB1_2:173; RV32ZDINX_NOZICOND-NEXT:    mv a5, a2174; RV32ZDINX_NOZICOND-NEXT:    mv a4, a1175; RV32ZDINX_NOZICOND-NEXT:  .LBB1_3: # %entry176; RV32ZDINX_NOZICOND-NEXT:    mv a0, a4177; RV32ZDINX_NOZICOND-NEXT:    mv a1, a5178; RV32ZDINX_NOZICOND-NEXT:    ret179entry:180  %sel = select i1 %cond, double %t, double %f181  ret double %sel182}183 184; -----------------------------------------------------------------------------185; double select with floating-point compare condition (a > b ? c : d), Zdinx186; -----------------------------------------------------------------------------187 188define double @select_f64_fcmp(double %a, double %b, double %c, double %d) nounwind {189; RV64ZDINX_ZICOND-LABEL: select_f64_fcmp:190; RV64ZDINX_ZICOND:       # %bb.0: # %entry191; RV64ZDINX_ZICOND-NEXT:    flt.d a0, a1, a0192; RV64ZDINX_ZICOND-NEXT:    czero.nez a1, a3, a0193; RV64ZDINX_ZICOND-NEXT:    czero.eqz a0, a2, a0194; RV64ZDINX_ZICOND-NEXT:    or a0, a0, a1195; RV64ZDINX_ZICOND-NEXT:    ret196;197; RV64ZDINX_NOZICOND-LABEL: select_f64_fcmp:198; RV64ZDINX_NOZICOND:       # %bb.0: # %entry199; RV64ZDINX_NOZICOND-NEXT:    flt.d a1, a1, a0200; RV64ZDINX_NOZICOND-NEXT:    mv a0, a2201; RV64ZDINX_NOZICOND-NEXT:    bnez a1, .LBB2_2202; RV64ZDINX_NOZICOND-NEXT:  # %bb.1: # %entry203; RV64ZDINX_NOZICOND-NEXT:    mv a0, a3204; RV64ZDINX_NOZICOND-NEXT:  .LBB2_2: # %entry205; RV64ZDINX_NOZICOND-NEXT:    ret206;207; RV64ZHINX_ZICOND-LABEL: select_f64_fcmp:208; RV64ZHINX_ZICOND:       # %bb.0: # %entry209; RV64ZHINX_ZICOND-NEXT:    addi sp, sp, -32210; RV64ZHINX_ZICOND-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill211; RV64ZHINX_ZICOND-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill212; RV64ZHINX_ZICOND-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill213; RV64ZHINX_ZICOND-NEXT:    mv s0, a3214; RV64ZHINX_ZICOND-NEXT:    mv s1, a2215; RV64ZHINX_ZICOND-NEXT:    call __gtdf2216; RV64ZHINX_ZICOND-NEXT:    sgtz a0, a0217; RV64ZHINX_ZICOND-NEXT:    czero.nez a1, s0, a0218; RV64ZHINX_ZICOND-NEXT:    czero.eqz a0, s1, a0219; RV64ZHINX_ZICOND-NEXT:    or a0, a0, a1220; RV64ZHINX_ZICOND-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload221; RV64ZHINX_ZICOND-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload222; RV64ZHINX_ZICOND-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload223; RV64ZHINX_ZICOND-NEXT:    addi sp, sp, 32224; RV64ZHINX_ZICOND-NEXT:    ret225;226; RV64FD-LABEL: select_f64_fcmp:227; RV64FD:       # %bb.0: # %entry228; RV64FD-NEXT:    flt.d a0, fa1, fa0229; RV64FD-NEXT:    fmv.d fa0, fa2230; RV64FD-NEXT:    bnez a0, .LBB2_2231; RV64FD-NEXT:  # %bb.1: # %entry232; RV64FD-NEXT:    fmv.d fa0, fa3233; RV64FD-NEXT:  .LBB2_2: # %entry234; RV64FD-NEXT:    ret235;236; RV32ZFINX_ZICOND-LABEL: select_f64_fcmp:237; RV32ZFINX_ZICOND:       # %bb.0: # %entry238; RV32ZFINX_ZICOND-NEXT:    addi sp, sp, -32239; RV32ZFINX_ZICOND-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill240; RV32ZFINX_ZICOND-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill241; RV32ZFINX_ZICOND-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill242; RV32ZFINX_ZICOND-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill243; RV32ZFINX_ZICOND-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill244; RV32ZFINX_ZICOND-NEXT:    mv s0, a7245; RV32ZFINX_ZICOND-NEXT:    mv s1, a6246; RV32ZFINX_ZICOND-NEXT:    mv s2, a5247; RV32ZFINX_ZICOND-NEXT:    mv s3, a4248; RV32ZFINX_ZICOND-NEXT:    call __gtdf2249; RV32ZFINX_ZICOND-NEXT:    sgtz a0, a0250; RV32ZFINX_ZICOND-NEXT:    czero.nez a1, s1, a0251; RV32ZFINX_ZICOND-NEXT:    czero.eqz a2, s3, a0252; RV32ZFINX_ZICOND-NEXT:    czero.nez a3, s0, a0253; RV32ZFINX_ZICOND-NEXT:    czero.eqz a4, s2, a0254; RV32ZFINX_ZICOND-NEXT:    or a0, a2, a1255; RV32ZFINX_ZICOND-NEXT:    or a1, a4, a3256; RV32ZFINX_ZICOND-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload257; RV32ZFINX_ZICOND-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload258; RV32ZFINX_ZICOND-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload259; RV32ZFINX_ZICOND-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload260; RV32ZFINX_ZICOND-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload261; RV32ZFINX_ZICOND-NEXT:    addi sp, sp, 32262; RV32ZFINX_ZICOND-NEXT:    ret263;264; RV32ZFINX_NOZICOND-LABEL: select_f64_fcmp:265; RV32ZFINX_NOZICOND:       # %bb.0: # %entry266; RV32ZFINX_NOZICOND-NEXT:    addi sp, sp, -32267; RV32ZFINX_NOZICOND-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill268; RV32ZFINX_NOZICOND-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill269; RV32ZFINX_NOZICOND-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill270; RV32ZFINX_NOZICOND-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill271; RV32ZFINX_NOZICOND-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill272; RV32ZFINX_NOZICOND-NEXT:    mv s1, a7273; RV32ZFINX_NOZICOND-NEXT:    mv s3, a6274; RV32ZFINX_NOZICOND-NEXT:    mv s0, a5275; RV32ZFINX_NOZICOND-NEXT:    mv s2, a4276; RV32ZFINX_NOZICOND-NEXT:    call __gtdf2277; RV32ZFINX_NOZICOND-NEXT:    bgtz a0, .LBB2_2278; RV32ZFINX_NOZICOND-NEXT:  # %bb.1: # %entry279; RV32ZFINX_NOZICOND-NEXT:    mv s2, s3280; RV32ZFINX_NOZICOND-NEXT:    mv s0, s1281; RV32ZFINX_NOZICOND-NEXT:  .LBB2_2: # %entry282; RV32ZFINX_NOZICOND-NEXT:    mv a0, s2283; RV32ZFINX_NOZICOND-NEXT:    mv a1, s0284; RV32ZFINX_NOZICOND-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload285; RV32ZFINX_NOZICOND-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload286; RV32ZFINX_NOZICOND-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload287; RV32ZFINX_NOZICOND-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload288; RV32ZFINX_NOZICOND-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload289; RV32ZFINX_NOZICOND-NEXT:    addi sp, sp, 32290; RV32ZFINX_NOZICOND-NEXT:    ret291;292; RV32ZDINX_ZICOND-LABEL: select_f64_fcmp:293; RV32ZDINX_ZICOND:       # %bb.0: # %entry294; RV32ZDINX_ZICOND-NEXT:    flt.d a0, a2, a0295; RV32ZDINX_ZICOND-NEXT:    bnez a0, .LBB2_2296; RV32ZDINX_ZICOND-NEXT:  # %bb.1: # %entry297; RV32ZDINX_ZICOND-NEXT:    fmv.d a4, a6298; RV32ZDINX_ZICOND-NEXT:  .LBB2_2: # %entry299; RV32ZDINX_ZICOND-NEXT:    mv a0, a4300; RV32ZDINX_ZICOND-NEXT:    mv a1, a5301; RV32ZDINX_ZICOND-NEXT:    ret302;303; RV32ZDINX_NOZICOND-LABEL: select_f64_fcmp:304; RV32ZDINX_NOZICOND:       # %bb.0: # %entry305; RV32ZDINX_NOZICOND-NEXT:    flt.d a0, a2, a0306; RV32ZDINX_NOZICOND-NEXT:    bnez a0, .LBB2_2307; RV32ZDINX_NOZICOND-NEXT:  # %bb.1: # %entry308; RV32ZDINX_NOZICOND-NEXT:    fmv.d a4, a6309; RV32ZDINX_NOZICOND-NEXT:  .LBB2_2: # %entry310; RV32ZDINX_NOZICOND-NEXT:    mv a0, a4311; RV32ZDINX_NOZICOND-NEXT:    mv a1, a5312; RV32ZDINX_NOZICOND-NEXT:    ret313entry:314  %cmp = fcmp ogt double %a, %b315  %sel = select i1 %cmp, double %c, double %d316  ret double %sel317}318 319; -----------------------------------------------------------------------------320; half select with  i1 condition (cond ? a : b), Zfinx321; -----------------------------------------------------------------------------322 323define dso_local noundef half @select_half_i1(i1 %cond, half %a, half %b) nounwind {324; ZDINX_ZICOND-LABEL: select_half_i1:325; ZDINX_ZICOND:       # %bb.0: # %entry326; ZDINX_ZICOND-NEXT:    # kill: def $x12_w killed $x12_w def $x12327; ZDINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11328; ZDINX_ZICOND-NEXT:    andi a0, a0, 1329; ZDINX_ZICOND-NEXT:    czero.nez a2, a2, a0330; ZDINX_ZICOND-NEXT:    czero.eqz a0, a1, a0331; ZDINX_ZICOND-NEXT:    or a0, a0, a2332; ZDINX_ZICOND-NEXT:    lui a1, 1048560333; ZDINX_ZICOND-NEXT:    or a0, a0, a1334; ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10335; ZDINX_ZICOND-NEXT:    ret336;337; ZDINX_NOZICOND-LABEL: select_half_i1:338; ZDINX_NOZICOND:       # %bb.0: # %entry339; ZDINX_NOZICOND-NEXT:    # kill: def $x12_w killed $x12_w def $x12340; ZDINX_NOZICOND-NEXT:    andi a0, a0, 1341; ZDINX_NOZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11342; ZDINX_NOZICOND-NEXT:    bnez a0, .LBB3_2343; ZDINX_NOZICOND-NEXT:  # %bb.1: # %entry344; ZDINX_NOZICOND-NEXT:    mv a1, a2345; ZDINX_NOZICOND-NEXT:  .LBB3_2: # %entry346; ZDINX_NOZICOND-NEXT:    lui a0, 1048560347; ZDINX_NOZICOND-NEXT:    or a0, a1, a0348; ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10349; ZDINX_NOZICOND-NEXT:    ret350;351; RV64ZHINX_ZICOND-LABEL: select_half_i1:352; RV64ZHINX_ZICOND:       # %bb.0: # %entry353; RV64ZHINX_ZICOND-NEXT:    # kill: def $x12_h killed $x12_h def $x12354; RV64ZHINX_ZICOND-NEXT:    # kill: def $x11_h killed $x11_h def $x11355; RV64ZHINX_ZICOND-NEXT:    andi a0, a0, 1356; RV64ZHINX_ZICOND-NEXT:    czero.nez a2, a2, a0357; RV64ZHINX_ZICOND-NEXT:    czero.eqz a0, a1, a0358; RV64ZHINX_ZICOND-NEXT:    or a0, a0, a2359; RV64ZHINX_ZICOND-NEXT:    # kill: def $x10_h killed $x10_h killed $x10360; RV64ZHINX_ZICOND-NEXT:    ret361;362; RV64FD-LABEL: select_half_i1:363; RV64FD:       # %bb.0: # %entry364; RV64FD-NEXT:    andi a0, a0, 1365; RV64FD-NEXT:    bnez a0, .LBB3_2366; RV64FD-NEXT:  # %bb.1: # %entry367; RV64FD-NEXT:    fmv.x.w a0, fa1368; RV64FD-NEXT:    j .LBB3_3369; RV64FD-NEXT:  .LBB3_2:370; RV64FD-NEXT:    fmv.x.w a0, fa0371; RV64FD-NEXT:  .LBB3_3: # %entry372; RV64FD-NEXT:    lui a1, 1048560373; RV64FD-NEXT:    or a0, a0, a1374; RV64FD-NEXT:    fmv.w.x fa0, a0375; RV64FD-NEXT:    ret376;377; RV32ZFINX_ZICOND-LABEL: select_half_i1:378; RV32ZFINX_ZICOND:       # %bb.0: # %entry379; RV32ZFINX_ZICOND-NEXT:    # kill: def $x12_w killed $x12_w def $x12380; RV32ZFINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11381; RV32ZFINX_ZICOND-NEXT:    andi a0, a0, 1382; RV32ZFINX_ZICOND-NEXT:    czero.nez a2, a2, a0383; RV32ZFINX_ZICOND-NEXT:    czero.eqz a0, a1, a0384; RV32ZFINX_ZICOND-NEXT:    or a0, a0, a2385; RV32ZFINX_ZICOND-NEXT:    lui a1, 1048560386; RV32ZFINX_ZICOND-NEXT:    or a0, a0, a1387; RV32ZFINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10388; RV32ZFINX_ZICOND-NEXT:    ret389;390; RV32ZFINX_NOZICOND-LABEL: select_half_i1:391; RV32ZFINX_NOZICOND:       # %bb.0: # %entry392; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x12_w killed $x12_w def $x12393; RV32ZFINX_NOZICOND-NEXT:    andi a0, a0, 1394; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11395; RV32ZFINX_NOZICOND-NEXT:    bnez a0, .LBB3_2396; RV32ZFINX_NOZICOND-NEXT:  # %bb.1: # %entry397; RV32ZFINX_NOZICOND-NEXT:    mv a1, a2398; RV32ZFINX_NOZICOND-NEXT:  .LBB3_2: # %entry399; RV32ZFINX_NOZICOND-NEXT:    lui a0, 1048560400; RV32ZFINX_NOZICOND-NEXT:    or a0, a1, a0401; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10402; RV32ZFINX_NOZICOND-NEXT:    ret403entry:404  %sel = select i1 %cond, half %a, half %b405  ret half %sel406}407 408; -----------------------------------------------------------------------------409; Test select with i1 condition and zero ret val (cond ? a : 0), Zfinx410; -----------------------------------------------------------------------------411define dso_local noundef float @select_i1_f32_0(i1 %cond, float %t) nounwind {412; ZDINX_ZICOND-LABEL: select_i1_f32_0:413; ZDINX_ZICOND:       # %bb.0: # %entry414; ZDINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11415; ZDINX_ZICOND-NEXT:    andi a0, a0, 1416; ZDINX_ZICOND-NEXT:    czero.eqz a0, a1, a0417; ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10418; ZDINX_ZICOND-NEXT:    ret419;420; ZDINX_NOZICOND-LABEL: select_i1_f32_0:421; ZDINX_NOZICOND:       # %bb.0: # %entry422; ZDINX_NOZICOND-NEXT:    andi a2, a0, 1423; ZDINX_NOZICOND-NEXT:    mv a0, a1424; ZDINX_NOZICOND-NEXT:    bnez a2, .LBB4_2425; ZDINX_NOZICOND-NEXT:  # %bb.1: # %entry426; ZDINX_NOZICOND-NEXT:    li a0, 0427; ZDINX_NOZICOND-NEXT:  .LBB4_2: # %entry428; ZDINX_NOZICOND-NEXT:    ret429;430; ZHINX_ZICOND-LABEL: select_i1_f32_0:431; ZHINX_ZICOND:       # %bb.0: # %entry432; ZHINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11433; ZHINX_ZICOND-NEXT:    andi a0, a0, 1434; ZHINX_ZICOND-NEXT:    czero.eqz a0, a1, a0435; ZHINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10436; ZHINX_ZICOND-NEXT:    ret437;438; RV64FD-LABEL: select_i1_f32_0:439; RV64FD:       # %bb.0: # %entry440; RV64FD-NEXT:    andi a0, a0, 1441; RV64FD-NEXT:    bnez a0, .LBB4_2442; RV64FD-NEXT:  # %bb.1: # %entry443; RV64FD-NEXT:    fmv.w.x fa0, zero444; RV64FD-NEXT:  .LBB4_2: # %entry445; RV64FD-NEXT:    ret446;447; RV32ZFINX_NOZICOND-LABEL: select_i1_f32_0:448; RV32ZFINX_NOZICOND:       # %bb.0: # %entry449; RV32ZFINX_NOZICOND-NEXT:    andi a2, a0, 1450; RV32ZFINX_NOZICOND-NEXT:    mv a0, a1451; RV32ZFINX_NOZICOND-NEXT:    bnez a2, .LBB4_2452; RV32ZFINX_NOZICOND-NEXT:  # %bb.1: # %entry453; RV32ZFINX_NOZICOND-NEXT:    li a0, 0454; RV32ZFINX_NOZICOND-NEXT:  .LBB4_2: # %entry455; RV32ZFINX_NOZICOND-NEXT:    ret456entry:457  %sel = select i1 %cond, float %t, float 0.000000e+00458  ret float %sel459}460 461; -----------------------------------------------------------------------------462; Test select with i1 condition and zero ret val for half fp (cond ? a : 0)463; -----------------------------------------------------------------------------464define dso_local noundef half @select_i1_half_0(i1 %cond, half %val) nounwind {465; ZDINX_ZICOND-LABEL: select_i1_half_0:466; ZDINX_ZICOND:       # %bb.0: # %entry467; ZDINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11468; ZDINX_ZICOND-NEXT:    andi a0, a0, 1469; ZDINX_ZICOND-NEXT:    czero.eqz a0, a1, a0470; ZDINX_ZICOND-NEXT:    lui a1, 1048560471; ZDINX_ZICOND-NEXT:    or a0, a0, a1472; ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10473; ZDINX_ZICOND-NEXT:    ret474;475; RV64ZDINX_NOZICOND-LABEL: select_i1_half_0:476; RV64ZDINX_NOZICOND:       # %bb.0: # %entry477; RV64ZDINX_NOZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11478; RV64ZDINX_NOZICOND-NEXT:    slli a0, a0, 63479; RV64ZDINX_NOZICOND-NEXT:    srai a0, a0, 63480; RV64ZDINX_NOZICOND-NEXT:    and a0, a0, a1481; RV64ZDINX_NOZICOND-NEXT:    lui a1, 1048560482; RV64ZDINX_NOZICOND-NEXT:    or a0, a0, a1483; RV64ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10484; RV64ZDINX_NOZICOND-NEXT:    ret485;486; RV64ZHINX_ZICOND-LABEL: select_i1_half_0:487; RV64ZHINX_ZICOND:       # %bb.0: # %entry488; RV64ZHINX_ZICOND-NEXT:    # kill: def $x11_h killed $x11_h def $x11489; RV64ZHINX_ZICOND-NEXT:    andi a0, a0, 1490; RV64ZHINX_ZICOND-NEXT:    czero.eqz a0, a1, a0491; RV64ZHINX_ZICOND-NEXT:    # kill: def $x10_h killed $x10_h killed $x10492; RV64ZHINX_ZICOND-NEXT:    ret493;494; RV64FD-LABEL: select_i1_half_0:495; RV64FD:       # %bb.0: # %entry496; RV64FD-NEXT:    fmv.x.w a1, fa0497; RV64FD-NEXT:    slli a0, a0, 63498; RV64FD-NEXT:    srai a0, a0, 63499; RV64FD-NEXT:    and a0, a0, a1500; RV64FD-NEXT:    lui a1, 1048560501; RV64FD-NEXT:    or a0, a0, a1502; RV64FD-NEXT:    fmv.w.x fa0, a0503; RV64FD-NEXT:    ret504;505; RV32ZFINX_ZICOND-LABEL: select_i1_half_0:506; RV32ZFINX_ZICOND:       # %bb.0: # %entry507; RV32ZFINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11508; RV32ZFINX_ZICOND-NEXT:    andi a0, a0, 1509; RV32ZFINX_ZICOND-NEXT:    czero.eqz a0, a1, a0510; RV32ZFINX_ZICOND-NEXT:    lui a1, 1048560511; RV32ZFINX_ZICOND-NEXT:    or a0, a0, a1512; RV32ZFINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10513; RV32ZFINX_ZICOND-NEXT:    ret514;515; RV32ZFINX_NOZICOND-LABEL: select_i1_half_0:516; RV32ZFINX_NOZICOND:       # %bb.0: # %entry517; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11518; RV32ZFINX_NOZICOND-NEXT:    slli a0, a0, 31519; RV32ZFINX_NOZICOND-NEXT:    srai a0, a0, 31520; RV32ZFINX_NOZICOND-NEXT:    and a0, a0, a1521; RV32ZFINX_NOZICOND-NEXT:    lui a1, 1048560522; RV32ZFINX_NOZICOND-NEXT:    or a0, a0, a1523; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10524; RV32ZFINX_NOZICOND-NEXT:    ret525;526; RV32ZDINX_NOZICOND-LABEL: select_i1_half_0:527; RV32ZDINX_NOZICOND:       # %bb.0: # %entry528; RV32ZDINX_NOZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11529; RV32ZDINX_NOZICOND-NEXT:    slli a0, a0, 31530; RV32ZDINX_NOZICOND-NEXT:    srai a0, a0, 31531; RV32ZDINX_NOZICOND-NEXT:    and a0, a0, a1532; RV32ZDINX_NOZICOND-NEXT:    lui a1, 1048560533; RV32ZDINX_NOZICOND-NEXT:    or a0, a0, a1534; RV32ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10535; RV32ZDINX_NOZICOND-NEXT:    ret536entry:537  %sel = select i1 %cond, half %val, half 0xH0000538  ret half %sel539}540 541; -----------------------------------------------------------------------------542; Test select with i1 condition and zero value for half fp, feeding into fadd ((cond ? a : 0) + 1.0)543; -----------------------------------------------------------------------------544define half @select_i1_half_0_add(i1 %cond, half %val) nounwind {545; RV64ZDINX_ZICOND-LABEL: select_i1_half_0_add:546; RV64ZDINX_ZICOND:       # %bb.0: # %entry547; RV64ZDINX_ZICOND-NEXT:    addi sp, sp, -16548; RV64ZDINX_ZICOND-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill549; RV64ZDINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11550; RV64ZDINX_ZICOND-NEXT:    andi a0, a0, 1551; RV64ZDINX_ZICOND-NEXT:    czero.eqz a0, a1, a0552; RV64ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10553; RV64ZDINX_ZICOND-NEXT:    call __extendhfsf2554; RV64ZDINX_ZICOND-NEXT:    lui a1, 260096555; RV64ZDINX_ZICOND-NEXT:    fadd.s a0, a0, a1556; RV64ZDINX_ZICOND-NEXT:    call __truncsfhf2557; RV64ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w def $x10558; RV64ZDINX_ZICOND-NEXT:    lui a1, 1048560559; RV64ZDINX_ZICOND-NEXT:    or a0, a0, a1560; RV64ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10561; RV64ZDINX_ZICOND-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload562; RV64ZDINX_ZICOND-NEXT:    addi sp, sp, 16563; RV64ZDINX_ZICOND-NEXT:    ret564;565; RV64ZDINX_NOZICOND-LABEL: select_i1_half_0_add:566; RV64ZDINX_NOZICOND:       # %bb.0: # %entry567; RV64ZDINX_NOZICOND-NEXT:    addi sp, sp, -16568; RV64ZDINX_NOZICOND-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill569; RV64ZDINX_NOZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11570; RV64ZDINX_NOZICOND-NEXT:    slli a0, a0, 63571; RV64ZDINX_NOZICOND-NEXT:    srai a0, a0, 63572; RV64ZDINX_NOZICOND-NEXT:    and a0, a0, a1573; RV64ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10574; RV64ZDINX_NOZICOND-NEXT:    call __extendhfsf2575; RV64ZDINX_NOZICOND-NEXT:    lui a1, 260096576; RV64ZDINX_NOZICOND-NEXT:    fadd.s a0, a0, a1577; RV64ZDINX_NOZICOND-NEXT:    call __truncsfhf2578; RV64ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w def $x10579; RV64ZDINX_NOZICOND-NEXT:    lui a1, 1048560580; RV64ZDINX_NOZICOND-NEXT:    or a0, a0, a1581; RV64ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10582; RV64ZDINX_NOZICOND-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload583; RV64ZDINX_NOZICOND-NEXT:    addi sp, sp, 16584; RV64ZDINX_NOZICOND-NEXT:    ret585;586; RV64ZHINX_ZICOND-LABEL: select_i1_half_0_add:587; RV64ZHINX_ZICOND:       # %bb.0: # %entry588; RV64ZHINX_ZICOND-NEXT:    # kill: def $x11_h killed $x11_h def $x11589; RV64ZHINX_ZICOND-NEXT:    andi a0, a0, 1590; RV64ZHINX_ZICOND-NEXT:    czero.eqz a0, a1, a0591; RV64ZHINX_ZICOND-NEXT:    li a1, 15592; RV64ZHINX_ZICOND-NEXT:    slli a1, a1, 10593; RV64ZHINX_ZICOND-NEXT:    fadd.h a0, a0, a1594; RV64ZHINX_ZICOND-NEXT:    ret595;596; RV64FD-LABEL: select_i1_half_0_add:597; RV64FD:       # %bb.0: # %entry598; RV64FD-NEXT:    addi sp, sp, -16599; RV64FD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill600; RV64FD-NEXT:    fmv.x.w a1, fa0601; RV64FD-NEXT:    slli a0, a0, 63602; RV64FD-NEXT:    srai a0, a0, 63603; RV64FD-NEXT:    and a0, a0, a1604; RV64FD-NEXT:    fmv.w.x fa0, a0605; RV64FD-NEXT:    call __extendhfsf2606; RV64FD-NEXT:    lui a0, 260096607; RV64FD-NEXT:    fmv.w.x fa5, a0608; RV64FD-NEXT:    fadd.s fa0, fa0, fa5609; RV64FD-NEXT:    call __truncsfhf2610; RV64FD-NEXT:    fmv.x.w a0, fa0611; RV64FD-NEXT:    lui a1, 1048560612; RV64FD-NEXT:    or a0, a0, a1613; RV64FD-NEXT:    fmv.w.x fa0, a0614; RV64FD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload615; RV64FD-NEXT:    addi sp, sp, 16616; RV64FD-NEXT:    ret617;618; RV32ZFINX_ZICOND-LABEL: select_i1_half_0_add:619; RV32ZFINX_ZICOND:       # %bb.0: # %entry620; RV32ZFINX_ZICOND-NEXT:    addi sp, sp, -16621; RV32ZFINX_ZICOND-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill622; RV32ZFINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11623; RV32ZFINX_ZICOND-NEXT:    andi a0, a0, 1624; RV32ZFINX_ZICOND-NEXT:    czero.eqz a0, a1, a0625; RV32ZFINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10626; RV32ZFINX_ZICOND-NEXT:    call __extendhfsf2627; RV32ZFINX_ZICOND-NEXT:    lui a1, 260096628; RV32ZFINX_ZICOND-NEXT:    fadd.s a0, a0, a1629; RV32ZFINX_ZICOND-NEXT:    call __truncsfhf2630; RV32ZFINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w def $x10631; RV32ZFINX_ZICOND-NEXT:    lui a1, 1048560632; RV32ZFINX_ZICOND-NEXT:    or a0, a0, a1633; RV32ZFINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10634; RV32ZFINX_ZICOND-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload635; RV32ZFINX_ZICOND-NEXT:    addi sp, sp, 16636; RV32ZFINX_ZICOND-NEXT:    ret637;638; RV32ZFINX_NOZICOND-LABEL: select_i1_half_0_add:639; RV32ZFINX_NOZICOND:       # %bb.0: # %entry640; RV32ZFINX_NOZICOND-NEXT:    addi sp, sp, -16641; RV32ZFINX_NOZICOND-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill642; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11643; RV32ZFINX_NOZICOND-NEXT:    slli a0, a0, 31644; RV32ZFINX_NOZICOND-NEXT:    srai a0, a0, 31645; RV32ZFINX_NOZICOND-NEXT:    and a0, a0, a1646; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10647; RV32ZFINX_NOZICOND-NEXT:    call __extendhfsf2648; RV32ZFINX_NOZICOND-NEXT:    lui a1, 260096649; RV32ZFINX_NOZICOND-NEXT:    fadd.s a0, a0, a1650; RV32ZFINX_NOZICOND-NEXT:    call __truncsfhf2651; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w def $x10652; RV32ZFINX_NOZICOND-NEXT:    lui a1, 1048560653; RV32ZFINX_NOZICOND-NEXT:    or a0, a0, a1654; RV32ZFINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10655; RV32ZFINX_NOZICOND-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload656; RV32ZFINX_NOZICOND-NEXT:    addi sp, sp, 16657; RV32ZFINX_NOZICOND-NEXT:    ret658;659; RV32ZDINX_ZICOND-LABEL: select_i1_half_0_add:660; RV32ZDINX_ZICOND:       # %bb.0: # %entry661; RV32ZDINX_ZICOND-NEXT:    addi sp, sp, -16662; RV32ZDINX_ZICOND-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill663; RV32ZDINX_ZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11664; RV32ZDINX_ZICOND-NEXT:    andi a0, a0, 1665; RV32ZDINX_ZICOND-NEXT:    czero.eqz a0, a1, a0666; RV32ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10667; RV32ZDINX_ZICOND-NEXT:    call __extendhfsf2668; RV32ZDINX_ZICOND-NEXT:    lui a1, 260096669; RV32ZDINX_ZICOND-NEXT:    fadd.s a0, a0, a1670; RV32ZDINX_ZICOND-NEXT:    call __truncsfhf2671; RV32ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w def $x10672; RV32ZDINX_ZICOND-NEXT:    lui a1, 1048560673; RV32ZDINX_ZICOND-NEXT:    or a0, a0, a1674; RV32ZDINX_ZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10675; RV32ZDINX_ZICOND-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload676; RV32ZDINX_ZICOND-NEXT:    addi sp, sp, 16677; RV32ZDINX_ZICOND-NEXT:    ret678;679; RV32ZDINX_NOZICOND-LABEL: select_i1_half_0_add:680; RV32ZDINX_NOZICOND:       # %bb.0: # %entry681; RV32ZDINX_NOZICOND-NEXT:    addi sp, sp, -16682; RV32ZDINX_NOZICOND-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill683; RV32ZDINX_NOZICOND-NEXT:    # kill: def $x11_w killed $x11_w def $x11684; RV32ZDINX_NOZICOND-NEXT:    slli a0, a0, 31685; RV32ZDINX_NOZICOND-NEXT:    srai a0, a0, 31686; RV32ZDINX_NOZICOND-NEXT:    and a0, a0, a1687; RV32ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10688; RV32ZDINX_NOZICOND-NEXT:    call __extendhfsf2689; RV32ZDINX_NOZICOND-NEXT:    lui a1, 260096690; RV32ZDINX_NOZICOND-NEXT:    fadd.s a0, a0, a1691; RV32ZDINX_NOZICOND-NEXT:    call __truncsfhf2692; RV32ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w def $x10693; RV32ZDINX_NOZICOND-NEXT:    lui a1, 1048560694; RV32ZDINX_NOZICOND-NEXT:    or a0, a0, a1695; RV32ZDINX_NOZICOND-NEXT:    # kill: def $x10_w killed $x10_w killed $x10696; RV32ZDINX_NOZICOND-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload697; RV32ZDINX_NOZICOND-NEXT:    addi sp, sp, 16698; RV32ZDINX_NOZICOND-NEXT:    ret699entry:700  %sel = select i1 %cond, half %val, half 0xH0000701  %add = fadd half %sel, 1.0702  ret half %add703}704