brintos

brintos / llvm-project-archived public Read only

0
0
Text · 30.2 KiB · e969950 Raw
963 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \3; RUN:   -target-abi ilp32f < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \5; RUN:   -target-abi lp64f < %s | FileCheck %s6; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \7; RUN:   -target-abi ilp32 < %s | FileCheck -check-prefix=CHECKIZHINX %s8; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \9; RUN:   -target-abi lp64 < %s | FileCheck -check-prefix=CHECKIZHINX %s10; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs < %s \11; RUN:   -target-abi=ilp32f | FileCheck -check-prefix=CHECKIZFHMIN %s12; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs < %s \13; RUN:   -target-abi=lp64f | FileCheck -check-prefix=CHECKIZFHMIN %s14; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs < %s \15; RUN:   -target-abi=ilp32 | FileCheck -check-prefix=CHECKIZHINXMIN %s16; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs < %s \17; RUN:   -target-abi=lp64 | FileCheck -check-prefix=CHECKIZHINXMIN %s18 19define half @select_fcmp_false(half %a, half %b) nounwind {20; CHECK-LABEL: select_fcmp_false:21; CHECK:       # %bb.0:22; CHECK-NEXT:    fmv.h fa0, fa123; CHECK-NEXT:    ret24;25; CHECKIZHINX-LABEL: select_fcmp_false:26; CHECKIZHINX:       # %bb.0:27; CHECKIZHINX-NEXT:    mv a0, a128; CHECKIZHINX-NEXT:    ret29;30; CHECKIZFHMIN-LABEL: select_fcmp_false:31; CHECKIZFHMIN:       # %bb.0:32; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa133; CHECKIZFHMIN-NEXT:    ret34;35; CHECKIZHINXMIN-LABEL: select_fcmp_false:36; CHECKIZHINXMIN:       # %bb.0:37; CHECKIZHINXMIN-NEXT:    mv a0, a138; CHECKIZHINXMIN-NEXT:    ret39  %1 = fcmp false half %a, %b40  %2 = select i1 %1, half %a, half %b41  ret half %242}43 44define half @select_fcmp_oeq(half %a, half %b) nounwind {45; CHECK-LABEL: select_fcmp_oeq:46; CHECK:       # %bb.0:47; CHECK-NEXT:    feq.h a0, fa0, fa148; CHECK-NEXT:    bnez a0, .LBB1_249; CHECK-NEXT:  # %bb.1:50; CHECK-NEXT:    fmv.h fa0, fa151; CHECK-NEXT:  .LBB1_2:52; CHECK-NEXT:    ret53;54; CHECKIZHINX-LABEL: select_fcmp_oeq:55; CHECKIZHINX:       # %bb.0:56; CHECKIZHINX-NEXT:    feq.h a2, a0, a157; CHECKIZHINX-NEXT:    bnez a2, .LBB1_258; CHECKIZHINX-NEXT:  # %bb.1:59; CHECKIZHINX-NEXT:    mv a0, a160; CHECKIZHINX-NEXT:  .LBB1_2:61; CHECKIZHINX-NEXT:    ret62;63; CHECKIZFHMIN-LABEL: select_fcmp_oeq:64; CHECKIZFHMIN:       # %bb.0:65; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa166; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa067; CHECKIZFHMIN-NEXT:    feq.s a0, fa4, fa568; CHECKIZFHMIN-NEXT:    bnez a0, .LBB1_269; CHECKIZFHMIN-NEXT:  # %bb.1:70; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa171; CHECKIZFHMIN-NEXT:  .LBB1_2:72; CHECKIZFHMIN-NEXT:    ret73;74; CHECKIZHINXMIN-LABEL: select_fcmp_oeq:75; CHECKIZHINXMIN:       # %bb.0:76; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a177; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a078; CHECKIZHINXMIN-NEXT:    feq.s a2, a3, a279; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB1_280; CHECKIZHINXMIN-NEXT:  # %bb.1:81; CHECKIZHINXMIN-NEXT:    mv a0, a182; CHECKIZHINXMIN-NEXT:  .LBB1_2:83; CHECKIZHINXMIN-NEXT:    ret84  %1 = fcmp oeq half %a, %b85  %2 = select i1 %1, half %a, half %b86  ret half %287}88 89define half @select_fcmp_ogt(half %a, half %b) nounwind {90; CHECK-LABEL: select_fcmp_ogt:91; CHECK:       # %bb.0:92; CHECK-NEXT:    flt.h a0, fa1, fa093; CHECK-NEXT:    bnez a0, .LBB2_294; CHECK-NEXT:  # %bb.1:95; CHECK-NEXT:    fmv.h fa0, fa196; CHECK-NEXT:  .LBB2_2:97; CHECK-NEXT:    ret98;99; CHECKIZHINX-LABEL: select_fcmp_ogt:100; CHECKIZHINX:       # %bb.0:101; CHECKIZHINX-NEXT:    flt.h a2, a1, a0102; CHECKIZHINX-NEXT:    bnez a2, .LBB2_2103; CHECKIZHINX-NEXT:  # %bb.1:104; CHECKIZHINX-NEXT:    mv a0, a1105; CHECKIZHINX-NEXT:  .LBB2_2:106; CHECKIZHINX-NEXT:    ret107;108; CHECKIZFHMIN-LABEL: select_fcmp_ogt:109; CHECKIZFHMIN:       # %bb.0:110; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0111; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa1112; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5113; CHECKIZFHMIN-NEXT:    bnez a0, .LBB2_2114; CHECKIZFHMIN-NEXT:  # %bb.1:115; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1116; CHECKIZFHMIN-NEXT:  .LBB2_2:117; CHECKIZFHMIN-NEXT:    ret118;119; CHECKIZHINXMIN-LABEL: select_fcmp_ogt:120; CHECKIZHINXMIN:       # %bb.0:121; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a0122; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a1123; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2124; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB2_2125; CHECKIZHINXMIN-NEXT:  # %bb.1:126; CHECKIZHINXMIN-NEXT:    mv a0, a1127; CHECKIZHINXMIN-NEXT:  .LBB2_2:128; CHECKIZHINXMIN-NEXT:    ret129  %1 = fcmp ogt half %a, %b130  %2 = select i1 %1, half %a, half %b131  ret half %2132}133 134define half @select_fcmp_oge(half %a, half %b) nounwind {135; CHECK-LABEL: select_fcmp_oge:136; CHECK:       # %bb.0:137; CHECK-NEXT:    fle.h a0, fa1, fa0138; CHECK-NEXT:    bnez a0, .LBB3_2139; CHECK-NEXT:  # %bb.1:140; CHECK-NEXT:    fmv.h fa0, fa1141; CHECK-NEXT:  .LBB3_2:142; CHECK-NEXT:    ret143;144; CHECKIZHINX-LABEL: select_fcmp_oge:145; CHECKIZHINX:       # %bb.0:146; CHECKIZHINX-NEXT:    fle.h a2, a1, a0147; CHECKIZHINX-NEXT:    bnez a2, .LBB3_2148; CHECKIZHINX-NEXT:  # %bb.1:149; CHECKIZHINX-NEXT:    mv a0, a1150; CHECKIZHINX-NEXT:  .LBB3_2:151; CHECKIZHINX-NEXT:    ret152;153; CHECKIZFHMIN-LABEL: select_fcmp_oge:154; CHECKIZFHMIN:       # %bb.0:155; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0156; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa1157; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5158; CHECKIZFHMIN-NEXT:    bnez a0, .LBB3_2159; CHECKIZFHMIN-NEXT:  # %bb.1:160; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1161; CHECKIZFHMIN-NEXT:  .LBB3_2:162; CHECKIZFHMIN-NEXT:    ret163;164; CHECKIZHINXMIN-LABEL: select_fcmp_oge:165; CHECKIZHINXMIN:       # %bb.0:166; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a0167; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a1168; CHECKIZHINXMIN-NEXT:    fle.s a2, a3, a2169; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB3_2170; CHECKIZHINXMIN-NEXT:  # %bb.1:171; CHECKIZHINXMIN-NEXT:    mv a0, a1172; CHECKIZHINXMIN-NEXT:  .LBB3_2:173; CHECKIZHINXMIN-NEXT:    ret174  %1 = fcmp oge half %a, %b175  %2 = select i1 %1, half %a, half %b176  ret half %2177}178 179define half @select_fcmp_olt(half %a, half %b) nounwind {180; CHECK-LABEL: select_fcmp_olt:181; CHECK:       # %bb.0:182; CHECK-NEXT:    flt.h a0, fa0, fa1183; CHECK-NEXT:    bnez a0, .LBB4_2184; CHECK-NEXT:  # %bb.1:185; CHECK-NEXT:    fmv.h fa0, fa1186; CHECK-NEXT:  .LBB4_2:187; CHECK-NEXT:    ret188;189; CHECKIZHINX-LABEL: select_fcmp_olt:190; CHECKIZHINX:       # %bb.0:191; CHECKIZHINX-NEXT:    flt.h a2, a0, a1192; CHECKIZHINX-NEXT:    bnez a2, .LBB4_2193; CHECKIZHINX-NEXT:  # %bb.1:194; CHECKIZHINX-NEXT:    mv a0, a1195; CHECKIZHINX-NEXT:  .LBB4_2:196; CHECKIZHINX-NEXT:    ret197;198; CHECKIZFHMIN-LABEL: select_fcmp_olt:199; CHECKIZFHMIN:       # %bb.0:200; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1201; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0202; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5203; CHECKIZFHMIN-NEXT:    bnez a0, .LBB4_2204; CHECKIZFHMIN-NEXT:  # %bb.1:205; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1206; CHECKIZFHMIN-NEXT:  .LBB4_2:207; CHECKIZFHMIN-NEXT:    ret208;209; CHECKIZHINXMIN-LABEL: select_fcmp_olt:210; CHECKIZHINXMIN:       # %bb.0:211; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1212; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0213; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2214; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB4_2215; CHECKIZHINXMIN-NEXT:  # %bb.1:216; CHECKIZHINXMIN-NEXT:    mv a0, a1217; CHECKIZHINXMIN-NEXT:  .LBB4_2:218; CHECKIZHINXMIN-NEXT:    ret219  %1 = fcmp olt half %a, %b220  %2 = select i1 %1, half %a, half %b221  ret half %2222}223 224define half @select_fcmp_ole(half %a, half %b) nounwind {225; CHECK-LABEL: select_fcmp_ole:226; CHECK:       # %bb.0:227; CHECK-NEXT:    fle.h a0, fa0, fa1228; CHECK-NEXT:    bnez a0, .LBB5_2229; CHECK-NEXT:  # %bb.1:230; CHECK-NEXT:    fmv.h fa0, fa1231; CHECK-NEXT:  .LBB5_2:232; CHECK-NEXT:    ret233;234; CHECKIZHINX-LABEL: select_fcmp_ole:235; CHECKIZHINX:       # %bb.0:236; CHECKIZHINX-NEXT:    fle.h a2, a0, a1237; CHECKIZHINX-NEXT:    bnez a2, .LBB5_2238; CHECKIZHINX-NEXT:  # %bb.1:239; CHECKIZHINX-NEXT:    mv a0, a1240; CHECKIZHINX-NEXT:  .LBB5_2:241; CHECKIZHINX-NEXT:    ret242;243; CHECKIZFHMIN-LABEL: select_fcmp_ole:244; CHECKIZFHMIN:       # %bb.0:245; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1246; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0247; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5248; CHECKIZFHMIN-NEXT:    bnez a0, .LBB5_2249; CHECKIZFHMIN-NEXT:  # %bb.1:250; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1251; CHECKIZFHMIN-NEXT:  .LBB5_2:252; CHECKIZFHMIN-NEXT:    ret253;254; CHECKIZHINXMIN-LABEL: select_fcmp_ole:255; CHECKIZHINXMIN:       # %bb.0:256; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1257; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0258; CHECKIZHINXMIN-NEXT:    fle.s a2, a3, a2259; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB5_2260; CHECKIZHINXMIN-NEXT:  # %bb.1:261; CHECKIZHINXMIN-NEXT:    mv a0, a1262; CHECKIZHINXMIN-NEXT:  .LBB5_2:263; CHECKIZHINXMIN-NEXT:    ret264  %1 = fcmp ole half %a, %b265  %2 = select i1 %1, half %a, half %b266  ret half %2267}268 269define half @select_fcmp_one(half %a, half %b) nounwind {270; CHECK-LABEL: select_fcmp_one:271; CHECK:       # %bb.0:272; CHECK-NEXT:    flt.h a0, fa0, fa1273; CHECK-NEXT:    flt.h a1, fa1, fa0274; CHECK-NEXT:    or a0, a1, a0275; CHECK-NEXT:    bnez a0, .LBB6_2276; CHECK-NEXT:  # %bb.1:277; CHECK-NEXT:    fmv.h fa0, fa1278; CHECK-NEXT:  .LBB6_2:279; CHECK-NEXT:    ret280;281; CHECKIZHINX-LABEL: select_fcmp_one:282; CHECKIZHINX:       # %bb.0:283; CHECKIZHINX-NEXT:    flt.h a2, a0, a1284; CHECKIZHINX-NEXT:    flt.h a3, a1, a0285; CHECKIZHINX-NEXT:    or a2, a3, a2286; CHECKIZHINX-NEXT:    bnez a2, .LBB6_2287; CHECKIZHINX-NEXT:  # %bb.1:288; CHECKIZHINX-NEXT:    mv a0, a1289; CHECKIZHINX-NEXT:  .LBB6_2:290; CHECKIZHINX-NEXT:    ret291;292; CHECKIZFHMIN-LABEL: select_fcmp_one:293; CHECKIZFHMIN:       # %bb.0:294; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1295; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0296; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5297; CHECKIZFHMIN-NEXT:    flt.s a1, fa5, fa4298; CHECKIZFHMIN-NEXT:    or a0, a1, a0299; CHECKIZFHMIN-NEXT:    bnez a0, .LBB6_2300; CHECKIZFHMIN-NEXT:  # %bb.1:301; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1302; CHECKIZFHMIN-NEXT:  .LBB6_2:303; CHECKIZFHMIN-NEXT:    ret304;305; CHECKIZHINXMIN-LABEL: select_fcmp_one:306; CHECKIZHINXMIN:       # %bb.0:307; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1308; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0309; CHECKIZHINXMIN-NEXT:    flt.s a4, a3, a2310; CHECKIZHINXMIN-NEXT:    flt.s a2, a2, a3311; CHECKIZHINXMIN-NEXT:    or a2, a2, a4312; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB6_2313; CHECKIZHINXMIN-NEXT:  # %bb.1:314; CHECKIZHINXMIN-NEXT:    mv a0, a1315; CHECKIZHINXMIN-NEXT:  .LBB6_2:316; CHECKIZHINXMIN-NEXT:    ret317  %1 = fcmp one half %a, %b318  %2 = select i1 %1, half %a, half %b319  ret half %2320}321 322define half @select_fcmp_ord(half %a, half %b) nounwind {323; CHECK-LABEL: select_fcmp_ord:324; CHECK:       # %bb.0:325; CHECK-NEXT:    feq.h a0, fa1, fa1326; CHECK-NEXT:    feq.h a1, fa0, fa0327; CHECK-NEXT:    and a0, a1, a0328; CHECK-NEXT:    bnez a0, .LBB7_2329; CHECK-NEXT:  # %bb.1:330; CHECK-NEXT:    fmv.h fa0, fa1331; CHECK-NEXT:  .LBB7_2:332; CHECK-NEXT:    ret333;334; CHECKIZHINX-LABEL: select_fcmp_ord:335; CHECKIZHINX:       # %bb.0:336; CHECKIZHINX-NEXT:    feq.h a2, a1, a1337; CHECKIZHINX-NEXT:    feq.h a3, a0, a0338; CHECKIZHINX-NEXT:    and a2, a3, a2339; CHECKIZHINX-NEXT:    bnez a2, .LBB7_2340; CHECKIZHINX-NEXT:  # %bb.1:341; CHECKIZHINX-NEXT:    mv a0, a1342; CHECKIZHINX-NEXT:  .LBB7_2:343; CHECKIZHINX-NEXT:    ret344;345; CHECKIZFHMIN-LABEL: select_fcmp_ord:346; CHECKIZFHMIN:       # %bb.0:347; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1348; CHECKIZFHMIN-NEXT:    feq.s a0, fa5, fa5349; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0350; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa5351; CHECKIZFHMIN-NEXT:    and a0, a1, a0352; CHECKIZFHMIN-NEXT:    bnez a0, .LBB7_2353; CHECKIZFHMIN-NEXT:  # %bb.1:354; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1355; CHECKIZFHMIN-NEXT:  .LBB7_2:356; CHECKIZFHMIN-NEXT:    ret357;358; CHECKIZHINXMIN-LABEL: select_fcmp_ord:359; CHECKIZHINXMIN:       # %bb.0:360; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1361; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0362; CHECKIZHINXMIN-NEXT:    feq.s a2, a2, a2363; CHECKIZHINXMIN-NEXT:    feq.s a3, a3, a3364; CHECKIZHINXMIN-NEXT:    and a2, a3, a2365; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB7_2366; CHECKIZHINXMIN-NEXT:  # %bb.1:367; CHECKIZHINXMIN-NEXT:    mv a0, a1368; CHECKIZHINXMIN-NEXT:  .LBB7_2:369; CHECKIZHINXMIN-NEXT:    ret370  %1 = fcmp ord half %a, %b371  %2 = select i1 %1, half %a, half %b372  ret half %2373}374 375define half @select_fcmp_ueq(half %a, half %b) nounwind {376; CHECK-LABEL: select_fcmp_ueq:377; CHECK:       # %bb.0:378; CHECK-NEXT:    flt.h a0, fa0, fa1379; CHECK-NEXT:    flt.h a1, fa1, fa0380; CHECK-NEXT:    or a0, a1, a0381; CHECK-NEXT:    beqz a0, .LBB8_2382; CHECK-NEXT:  # %bb.1:383; CHECK-NEXT:    fmv.h fa0, fa1384; CHECK-NEXT:  .LBB8_2:385; CHECK-NEXT:    ret386;387; CHECKIZHINX-LABEL: select_fcmp_ueq:388; CHECKIZHINX:       # %bb.0:389; CHECKIZHINX-NEXT:    flt.h a2, a0, a1390; CHECKIZHINX-NEXT:    flt.h a3, a1, a0391; CHECKIZHINX-NEXT:    or a2, a3, a2392; CHECKIZHINX-NEXT:    beqz a2, .LBB8_2393; CHECKIZHINX-NEXT:  # %bb.1:394; CHECKIZHINX-NEXT:    mv a0, a1395; CHECKIZHINX-NEXT:  .LBB8_2:396; CHECKIZHINX-NEXT:    ret397;398; CHECKIZFHMIN-LABEL: select_fcmp_ueq:399; CHECKIZFHMIN:       # %bb.0:400; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1401; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0402; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5403; CHECKIZFHMIN-NEXT:    flt.s a1, fa5, fa4404; CHECKIZFHMIN-NEXT:    or a0, a1, a0405; CHECKIZFHMIN-NEXT:    beqz a0, .LBB8_2406; CHECKIZFHMIN-NEXT:  # %bb.1:407; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1408; CHECKIZFHMIN-NEXT:  .LBB8_2:409; CHECKIZFHMIN-NEXT:    ret410;411; CHECKIZHINXMIN-LABEL: select_fcmp_ueq:412; CHECKIZHINXMIN:       # %bb.0:413; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1414; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0415; CHECKIZHINXMIN-NEXT:    flt.s a4, a3, a2416; CHECKIZHINXMIN-NEXT:    flt.s a2, a2, a3417; CHECKIZHINXMIN-NEXT:    or a2, a2, a4418; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB8_2419; CHECKIZHINXMIN-NEXT:  # %bb.1:420; CHECKIZHINXMIN-NEXT:    mv a0, a1421; CHECKIZHINXMIN-NEXT:  .LBB8_2:422; CHECKIZHINXMIN-NEXT:    ret423  %1 = fcmp ueq half %a, %b424  %2 = select i1 %1, half %a, half %b425  ret half %2426}427 428define half @select_fcmp_ugt(half %a, half %b) nounwind {429; CHECK-LABEL: select_fcmp_ugt:430; CHECK:       # %bb.0:431; CHECK-NEXT:    fle.h a0, fa0, fa1432; CHECK-NEXT:    beqz a0, .LBB9_2433; CHECK-NEXT:  # %bb.1:434; CHECK-NEXT:    fmv.h fa0, fa1435; CHECK-NEXT:  .LBB9_2:436; CHECK-NEXT:    ret437;438; CHECKIZHINX-LABEL: select_fcmp_ugt:439; CHECKIZHINX:       # %bb.0:440; CHECKIZHINX-NEXT:    fle.h a2, a0, a1441; CHECKIZHINX-NEXT:    beqz a2, .LBB9_2442; CHECKIZHINX-NEXT:  # %bb.1:443; CHECKIZHINX-NEXT:    mv a0, a1444; CHECKIZHINX-NEXT:  .LBB9_2:445; CHECKIZHINX-NEXT:    ret446;447; CHECKIZFHMIN-LABEL: select_fcmp_ugt:448; CHECKIZFHMIN:       # %bb.0:449; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1450; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0451; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5452; CHECKIZFHMIN-NEXT:    beqz a0, .LBB9_2453; CHECKIZFHMIN-NEXT:  # %bb.1:454; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1455; CHECKIZFHMIN-NEXT:  .LBB9_2:456; CHECKIZFHMIN-NEXT:    ret457;458; CHECKIZHINXMIN-LABEL: select_fcmp_ugt:459; CHECKIZHINXMIN:       # %bb.0:460; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1461; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0462; CHECKIZHINXMIN-NEXT:    fle.s a2, a3, a2463; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB9_2464; CHECKIZHINXMIN-NEXT:  # %bb.1:465; CHECKIZHINXMIN-NEXT:    mv a0, a1466; CHECKIZHINXMIN-NEXT:  .LBB9_2:467; CHECKIZHINXMIN-NEXT:    ret468  %1 = fcmp ugt half %a, %b469  %2 = select i1 %1, half %a, half %b470  ret half %2471}472 473define half @select_fcmp_uge(half %a, half %b) nounwind {474; CHECK-LABEL: select_fcmp_uge:475; CHECK:       # %bb.0:476; CHECK-NEXT:    flt.h a0, fa0, fa1477; CHECK-NEXT:    beqz a0, .LBB10_2478; CHECK-NEXT:  # %bb.1:479; CHECK-NEXT:    fmv.h fa0, fa1480; CHECK-NEXT:  .LBB10_2:481; CHECK-NEXT:    ret482;483; CHECKIZHINX-LABEL: select_fcmp_uge:484; CHECKIZHINX:       # %bb.0:485; CHECKIZHINX-NEXT:    flt.h a2, a0, a1486; CHECKIZHINX-NEXT:    beqz a2, .LBB10_2487; CHECKIZHINX-NEXT:  # %bb.1:488; CHECKIZHINX-NEXT:    mv a0, a1489; CHECKIZHINX-NEXT:  .LBB10_2:490; CHECKIZHINX-NEXT:    ret491;492; CHECKIZFHMIN-LABEL: select_fcmp_uge:493; CHECKIZFHMIN:       # %bb.0:494; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1495; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0496; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5497; CHECKIZFHMIN-NEXT:    beqz a0, .LBB10_2498; CHECKIZFHMIN-NEXT:  # %bb.1:499; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1500; CHECKIZFHMIN-NEXT:  .LBB10_2:501; CHECKIZFHMIN-NEXT:    ret502;503; CHECKIZHINXMIN-LABEL: select_fcmp_uge:504; CHECKIZHINXMIN:       # %bb.0:505; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1506; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0507; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2508; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB10_2509; CHECKIZHINXMIN-NEXT:  # %bb.1:510; CHECKIZHINXMIN-NEXT:    mv a0, a1511; CHECKIZHINXMIN-NEXT:  .LBB10_2:512; CHECKIZHINXMIN-NEXT:    ret513  %1 = fcmp uge half %a, %b514  %2 = select i1 %1, half %a, half %b515  ret half %2516}517 518define half @select_fcmp_ult(half %a, half %b) nounwind {519; CHECK-LABEL: select_fcmp_ult:520; CHECK:       # %bb.0:521; CHECK-NEXT:    fle.h a0, fa1, fa0522; CHECK-NEXT:    beqz a0, .LBB11_2523; CHECK-NEXT:  # %bb.1:524; CHECK-NEXT:    fmv.h fa0, fa1525; CHECK-NEXT:  .LBB11_2:526; CHECK-NEXT:    ret527;528; CHECKIZHINX-LABEL: select_fcmp_ult:529; CHECKIZHINX:       # %bb.0:530; CHECKIZHINX-NEXT:    fle.h a2, a1, a0531; CHECKIZHINX-NEXT:    beqz a2, .LBB11_2532; CHECKIZHINX-NEXT:  # %bb.1:533; CHECKIZHINX-NEXT:    mv a0, a1534; CHECKIZHINX-NEXT:  .LBB11_2:535; CHECKIZHINX-NEXT:    ret536;537; CHECKIZFHMIN-LABEL: select_fcmp_ult:538; CHECKIZFHMIN:       # %bb.0:539; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0540; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa1541; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5542; CHECKIZFHMIN-NEXT:    beqz a0, .LBB11_2543; CHECKIZFHMIN-NEXT:  # %bb.1:544; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1545; CHECKIZFHMIN-NEXT:  .LBB11_2:546; CHECKIZFHMIN-NEXT:    ret547;548; CHECKIZHINXMIN-LABEL: select_fcmp_ult:549; CHECKIZHINXMIN:       # %bb.0:550; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a0551; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a1552; CHECKIZHINXMIN-NEXT:    fle.s a2, a3, a2553; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB11_2554; CHECKIZHINXMIN-NEXT:  # %bb.1:555; CHECKIZHINXMIN-NEXT:    mv a0, a1556; CHECKIZHINXMIN-NEXT:  .LBB11_2:557; CHECKIZHINXMIN-NEXT:    ret558  %1 = fcmp ult half %a, %b559  %2 = select i1 %1, half %a, half %b560  ret half %2561}562 563define half @select_fcmp_ule(half %a, half %b) nounwind {564; CHECK-LABEL: select_fcmp_ule:565; CHECK:       # %bb.0:566; CHECK-NEXT:    flt.h a0, fa1, fa0567; CHECK-NEXT:    beqz a0, .LBB12_2568; CHECK-NEXT:  # %bb.1:569; CHECK-NEXT:    fmv.h fa0, fa1570; CHECK-NEXT:  .LBB12_2:571; CHECK-NEXT:    ret572;573; CHECKIZHINX-LABEL: select_fcmp_ule:574; CHECKIZHINX:       # %bb.0:575; CHECKIZHINX-NEXT:    flt.h a2, a1, a0576; CHECKIZHINX-NEXT:    beqz a2, .LBB12_2577; CHECKIZHINX-NEXT:  # %bb.1:578; CHECKIZHINX-NEXT:    mv a0, a1579; CHECKIZHINX-NEXT:  .LBB12_2:580; CHECKIZHINX-NEXT:    ret581;582; CHECKIZFHMIN-LABEL: select_fcmp_ule:583; CHECKIZFHMIN:       # %bb.0:584; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0585; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa1586; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5587; CHECKIZFHMIN-NEXT:    beqz a0, .LBB12_2588; CHECKIZFHMIN-NEXT:  # %bb.1:589; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1590; CHECKIZFHMIN-NEXT:  .LBB12_2:591; CHECKIZFHMIN-NEXT:    ret592;593; CHECKIZHINXMIN-LABEL: select_fcmp_ule:594; CHECKIZHINXMIN:       # %bb.0:595; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a0596; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a1597; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2598; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB12_2599; CHECKIZHINXMIN-NEXT:  # %bb.1:600; CHECKIZHINXMIN-NEXT:    mv a0, a1601; CHECKIZHINXMIN-NEXT:  .LBB12_2:602; CHECKIZHINXMIN-NEXT:    ret603  %1 = fcmp ule half %a, %b604  %2 = select i1 %1, half %a, half %b605  ret half %2606}607 608define half @select_fcmp_une(half %a, half %b) nounwind {609; CHECK-LABEL: select_fcmp_une:610; CHECK:       # %bb.0:611; CHECK-NEXT:    feq.h a0, fa0, fa1612; CHECK-NEXT:    beqz a0, .LBB13_2613; CHECK-NEXT:  # %bb.1:614; CHECK-NEXT:    fmv.h fa0, fa1615; CHECK-NEXT:  .LBB13_2:616; CHECK-NEXT:    ret617;618; CHECKIZHINX-LABEL: select_fcmp_une:619; CHECKIZHINX:       # %bb.0:620; CHECKIZHINX-NEXT:    feq.h a2, a0, a1621; CHECKIZHINX-NEXT:    beqz a2, .LBB13_2622; CHECKIZHINX-NEXT:  # %bb.1:623; CHECKIZHINX-NEXT:    mv a0, a1624; CHECKIZHINX-NEXT:  .LBB13_2:625; CHECKIZHINX-NEXT:    ret626;627; CHECKIZFHMIN-LABEL: select_fcmp_une:628; CHECKIZFHMIN:       # %bb.0:629; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1630; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0631; CHECKIZFHMIN-NEXT:    feq.s a0, fa4, fa5632; CHECKIZFHMIN-NEXT:    beqz a0, .LBB13_2633; CHECKIZFHMIN-NEXT:  # %bb.1:634; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1635; CHECKIZFHMIN-NEXT:  .LBB13_2:636; CHECKIZFHMIN-NEXT:    ret637;638; CHECKIZHINXMIN-LABEL: select_fcmp_une:639; CHECKIZHINXMIN:       # %bb.0:640; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1641; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0642; CHECKIZHINXMIN-NEXT:    feq.s a2, a3, a2643; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB13_2644; CHECKIZHINXMIN-NEXT:  # %bb.1:645; CHECKIZHINXMIN-NEXT:    mv a0, a1646; CHECKIZHINXMIN-NEXT:  .LBB13_2:647; CHECKIZHINXMIN-NEXT:    ret648  %1 = fcmp une half %a, %b649  %2 = select i1 %1, half %a, half %b650  ret half %2651}652 653define half @select_fcmp_uno(half %a, half %b) nounwind {654; CHECK-LABEL: select_fcmp_uno:655; CHECK:       # %bb.0:656; CHECK-NEXT:    feq.h a0, fa1, fa1657; CHECK-NEXT:    feq.h a1, fa0, fa0658; CHECK-NEXT:    and a0, a1, a0659; CHECK-NEXT:    beqz a0, .LBB14_2660; CHECK-NEXT:  # %bb.1:661; CHECK-NEXT:    fmv.h fa0, fa1662; CHECK-NEXT:  .LBB14_2:663; CHECK-NEXT:    ret664;665; CHECKIZHINX-LABEL: select_fcmp_uno:666; CHECKIZHINX:       # %bb.0:667; CHECKIZHINX-NEXT:    feq.h a2, a1, a1668; CHECKIZHINX-NEXT:    feq.h a3, a0, a0669; CHECKIZHINX-NEXT:    and a2, a3, a2670; CHECKIZHINX-NEXT:    beqz a2, .LBB14_2671; CHECKIZHINX-NEXT:  # %bb.1:672; CHECKIZHINX-NEXT:    mv a0, a1673; CHECKIZHINX-NEXT:  .LBB14_2:674; CHECKIZHINX-NEXT:    ret675;676; CHECKIZFHMIN-LABEL: select_fcmp_uno:677; CHECKIZFHMIN:       # %bb.0:678; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1679; CHECKIZFHMIN-NEXT:    feq.s a0, fa5, fa5680; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0681; CHECKIZFHMIN-NEXT:    feq.s a1, fa5, fa5682; CHECKIZFHMIN-NEXT:    and a0, a1, a0683; CHECKIZFHMIN-NEXT:    beqz a0, .LBB14_2684; CHECKIZFHMIN-NEXT:  # %bb.1:685; CHECKIZFHMIN-NEXT:    fmv.s fa0, fa1686; CHECKIZFHMIN-NEXT:  .LBB14_2:687; CHECKIZFHMIN-NEXT:    ret688;689; CHECKIZHINXMIN-LABEL: select_fcmp_uno:690; CHECKIZHINXMIN:       # %bb.0:691; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1692; CHECKIZHINXMIN-NEXT:    fcvt.s.h a3, a0693; CHECKIZHINXMIN-NEXT:    feq.s a2, a2, a2694; CHECKIZHINXMIN-NEXT:    feq.s a3, a3, a3695; CHECKIZHINXMIN-NEXT:    and a2, a3, a2696; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB14_2697; CHECKIZHINXMIN-NEXT:  # %bb.1:698; CHECKIZHINXMIN-NEXT:    mv a0, a1699; CHECKIZHINXMIN-NEXT:  .LBB14_2:700; CHECKIZHINXMIN-NEXT:    ret701  %1 = fcmp uno half %a, %b702  %2 = select i1 %1, half %a, half %b703  ret half %2704}705 706define half @select_fcmp_true(half %a, half %b) nounwind {707; CHECK-LABEL: select_fcmp_true:708; CHECK:       # %bb.0:709; CHECK-NEXT:    ret710;711; CHECKIZHINX-LABEL: select_fcmp_true:712; CHECKIZHINX:       # %bb.0:713; CHECKIZHINX-NEXT:    ret714;715; CHECKIZFHMIN-LABEL: select_fcmp_true:716; CHECKIZFHMIN:       # %bb.0:717; CHECKIZFHMIN-NEXT:    ret718;719; CHECKIZHINXMIN-LABEL: select_fcmp_true:720; CHECKIZHINXMIN:       # %bb.0:721; CHECKIZHINXMIN-NEXT:    ret722  %1 = fcmp true half %a, %b723  %2 = select i1 %1, half %a, half %b724  ret half %2725}726 727; Ensure that ISel succeeds for a select+fcmp that has an i32 result type.728define i32 @i32_select_fcmp_oeq(half %a, half %b, i32 %c, i32 %d) nounwind {729; CHECK-LABEL: i32_select_fcmp_oeq:730; CHECK:       # %bb.0:731; CHECK-NEXT:    feq.h a2, fa0, fa1732; CHECK-NEXT:    bnez a2, .LBB16_2733; CHECK-NEXT:  # %bb.1:734; CHECK-NEXT:    mv a0, a1735; CHECK-NEXT:  .LBB16_2:736; CHECK-NEXT:    ret737;738; CHECKIZHINX-LABEL: i32_select_fcmp_oeq:739; CHECKIZHINX:       # %bb.0:740; CHECKIZHINX-NEXT:    feq.h a1, a0, a1741; CHECKIZHINX-NEXT:    mv a0, a2742; CHECKIZHINX-NEXT:    bnez a1, .LBB16_2743; CHECKIZHINX-NEXT:  # %bb.1:744; CHECKIZHINX-NEXT:    mv a0, a3745; CHECKIZHINX-NEXT:  .LBB16_2:746; CHECKIZHINX-NEXT:    ret747;748; CHECKIZFHMIN-LABEL: i32_select_fcmp_oeq:749; CHECKIZFHMIN:       # %bb.0:750; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1751; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0752; CHECKIZFHMIN-NEXT:    feq.s a2, fa4, fa5753; CHECKIZFHMIN-NEXT:    bnez a2, .LBB16_2754; CHECKIZFHMIN-NEXT:  # %bb.1:755; CHECKIZFHMIN-NEXT:    mv a0, a1756; CHECKIZFHMIN-NEXT:  .LBB16_2:757; CHECKIZFHMIN-NEXT:    ret758;759; CHECKIZHINXMIN-LABEL: i32_select_fcmp_oeq:760; CHECKIZHINXMIN:       # %bb.0:761; CHECKIZHINXMIN-NEXT:    fcvt.s.h a1, a1762; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0763; CHECKIZHINXMIN-NEXT:    feq.s a1, a0, a1764; CHECKIZHINXMIN-NEXT:    mv a0, a2765; CHECKIZHINXMIN-NEXT:    bnez a1, .LBB16_2766; CHECKIZHINXMIN-NEXT:  # %bb.1:767; CHECKIZHINXMIN-NEXT:    mv a0, a3768; CHECKIZHINXMIN-NEXT:  .LBB16_2:769; CHECKIZHINXMIN-NEXT:    ret770  %1 = fcmp oeq half %a, %b771  %2 = select i1 %1, i32 %c, i32 %d772  ret i32 %2773}774 775define i32 @select_fcmp_oeq_1_2(half %a, half %b) {776; CHECK-LABEL: select_fcmp_oeq_1_2:777; CHECK:       # %bb.0:778; CHECK-NEXT:    feq.h a0, fa0, fa1779; CHECK-NEXT:    li a1, 2780; CHECK-NEXT:    sub a0, a1, a0781; CHECK-NEXT:    ret782;783; CHECKIZHINX-LABEL: select_fcmp_oeq_1_2:784; CHECKIZHINX:       # %bb.0:785; CHECKIZHINX-NEXT:    feq.h a0, a0, a1786; CHECKIZHINX-NEXT:    li a1, 2787; CHECKIZHINX-NEXT:    sub a0, a1, a0788; CHECKIZHINX-NEXT:    ret789;790; CHECKIZFHMIN-LABEL: select_fcmp_oeq_1_2:791; CHECKIZFHMIN:       # %bb.0:792; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1793; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0794; CHECKIZFHMIN-NEXT:    feq.s a0, fa4, fa5795; CHECKIZFHMIN-NEXT:    li a1, 2796; CHECKIZFHMIN-NEXT:    sub a0, a1, a0797; CHECKIZFHMIN-NEXT:    ret798;799; CHECKIZHINXMIN-LABEL: select_fcmp_oeq_1_2:800; CHECKIZHINXMIN:       # %bb.0:801; CHECKIZHINXMIN-NEXT:    fcvt.s.h a1, a1802; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0803; CHECKIZHINXMIN-NEXT:    feq.s a0, a0, a1804; CHECKIZHINXMIN-NEXT:    li a1, 2805; CHECKIZHINXMIN-NEXT:    sub a0, a1, a0806; CHECKIZHINXMIN-NEXT:    ret807  %1 = fcmp fast oeq half %a, %b808  %2 = select i1 %1, i32 1, i32 2809  ret i32 %2810}811 812define signext i32 @select_fcmp_uge_negone_zero(half %a, half %b) nounwind {813; CHECK-LABEL: select_fcmp_uge_negone_zero:814; CHECK:       # %bb.0:815; CHECK-NEXT:    fle.h a0, fa0, fa1816; CHECK-NEXT:    addi a0, a0, -1817; CHECK-NEXT:    ret818;819; CHECKIZHINX-LABEL: select_fcmp_uge_negone_zero:820; CHECKIZHINX:       # %bb.0:821; CHECKIZHINX-NEXT:    fle.h a0, a0, a1822; CHECKIZHINX-NEXT:    addi a0, a0, -1823; CHECKIZHINX-NEXT:    ret824;825; CHECKIZFHMIN-LABEL: select_fcmp_uge_negone_zero:826; CHECKIZFHMIN:       # %bb.0:827; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1828; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0829; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5830; CHECKIZFHMIN-NEXT:    addi a0, a0, -1831; CHECKIZFHMIN-NEXT:    ret832;833; CHECKIZHINXMIN-LABEL: select_fcmp_uge_negone_zero:834; CHECKIZHINXMIN:       # %bb.0:835; CHECKIZHINXMIN-NEXT:    fcvt.s.h a1, a1836; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0837; CHECKIZHINXMIN-NEXT:    fle.s a0, a0, a1838; CHECKIZHINXMIN-NEXT:    addi a0, a0, -1839; CHECKIZHINXMIN-NEXT:    ret840  %1 = fcmp ugt half %a, %b841  %2 = select i1 %1, i32 -1, i32 0842  ret i32 %2843}844 845define signext i32 @select_fcmp_uge_1_2(half %a, half %b) nounwind {846; CHECK-LABEL: select_fcmp_uge_1_2:847; CHECK:       # %bb.0:848; CHECK-NEXT:    fle.h a0, fa0, fa1849; CHECK-NEXT:    addi a0, a0, 1850; CHECK-NEXT:    ret851;852; CHECKIZHINX-LABEL: select_fcmp_uge_1_2:853; CHECKIZHINX:       # %bb.0:854; CHECKIZHINX-NEXT:    fle.h a0, a0, a1855; CHECKIZHINX-NEXT:    addi a0, a0, 1856; CHECKIZHINX-NEXT:    ret857;858; CHECKIZFHMIN-LABEL: select_fcmp_uge_1_2:859; CHECKIZFHMIN:       # %bb.0:860; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa1861; CHECKIZFHMIN-NEXT:    fcvt.s.h fa4, fa0862; CHECKIZFHMIN-NEXT:    fle.s a0, fa4, fa5863; CHECKIZFHMIN-NEXT:    addi a0, a0, 1864; CHECKIZFHMIN-NEXT:    ret865;866; CHECKIZHINXMIN-LABEL: select_fcmp_uge_1_2:867; CHECKIZHINXMIN:       # %bb.0:868; CHECKIZHINXMIN-NEXT:    fcvt.s.h a1, a1869; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0870; CHECKIZHINXMIN-NEXT:    fle.s a0, a0, a1871; CHECKIZHINXMIN-NEXT:    addi a0, a0, 1872; CHECKIZHINXMIN-NEXT:    ret873  %1 = fcmp ugt half %a, %b874  %2 = select i1 %1, i32 1, i32 2875  ret i32 %2876}877 878define half @CascadedSelect(half noundef %a) {879; CHECK-LABEL: CascadedSelect:880; CHECK:       # %bb.0: # %entry881; CHECK-NEXT:    li a0, 15882; CHECK-NEXT:    slli a0, a0, 10883; CHECK-NEXT:    fmv.h.x fa5, a0884; CHECK-NEXT:    flt.h a0, fa5, fa0885; CHECK-NEXT:    bnez a0, .LBB20_3886; CHECK-NEXT:  # %bb.1: # %entry887; CHECK-NEXT:    fmv.h.x fa5, zero888; CHECK-NEXT:    flt.h a0, fa0, fa5889; CHECK-NEXT:    bnez a0, .LBB20_3890; CHECK-NEXT:  # %bb.2: # %entry891; CHECK-NEXT:    fmv.h fa5, fa0892; CHECK-NEXT:  .LBB20_3: # %entry893; CHECK-NEXT:    fmv.h fa0, fa5894; CHECK-NEXT:    ret895;896; CHECKIZHINX-LABEL: CascadedSelect:897; CHECKIZHINX:       # %bb.0: # %entry898; CHECKIZHINX-NEXT:    li a1, 15899; CHECKIZHINX-NEXT:    slli a1, a1, 10900; CHECKIZHINX-NEXT:    flt.h a2, a1, a0901; CHECKIZHINX-NEXT:    bnez a2, .LBB20_3902; CHECKIZHINX-NEXT:  # %bb.1: # %entry903; CHECKIZHINX-NEXT:    flt.h a2, a0, zero904; CHECKIZHINX-NEXT:    li a1, 0905; CHECKIZHINX-NEXT:    bnez a2, .LBB20_3906; CHECKIZHINX-NEXT:  # %bb.2: # %entry907; CHECKIZHINX-NEXT:    mv a1, a0908; CHECKIZHINX-NEXT:  .LBB20_3: # %entry909; CHECKIZHINX-NEXT:    mv a0, a1910; CHECKIZHINX-NEXT:    ret911;912; CHECKIZFHMIN-LABEL: CascadedSelect:913; CHECKIZFHMIN:       # %bb.0: # %entry914; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0915; CHECKIZFHMIN-NEXT:    lui a0, 260096916; CHECKIZFHMIN-NEXT:    fmv.w.x fa4, zero917; CHECKIZFHMIN-NEXT:    flt.s a1, fa5, fa4918; CHECKIZFHMIN-NEXT:    fmv.w.x fa4, a0919; CHECKIZFHMIN-NEXT:    flt.s a0, fa4, fa5920; CHECKIZFHMIN-NEXT:    bnez a1, .LBB20_3921; CHECKIZFHMIN-NEXT:  # %bb.1: # %entry922; CHECKIZFHMIN-NEXT:    bnez a0, .LBB20_4923; CHECKIZFHMIN-NEXT:  .LBB20_2: # %entry924; CHECKIZFHMIN-NEXT:    ret925; CHECKIZFHMIN-NEXT:  .LBB20_3:926; CHECKIZFHMIN-NEXT:    fmv.h.x fa0, zero927; CHECKIZFHMIN-NEXT:    beqz a0, .LBB20_2928; CHECKIZFHMIN-NEXT:  .LBB20_4:929; CHECKIZFHMIN-NEXT:    li a0, 15930; CHECKIZFHMIN-NEXT:    slli a0, a0, 10931; CHECKIZFHMIN-NEXT:    fmv.h.x fa0, a0932; CHECKIZFHMIN-NEXT:    ret933;934; CHECKIZHINXMIN-LABEL: CascadedSelect:935; CHECKIZHINXMIN:       # %bb.0: # %entry936; CHECKIZHINXMIN-NEXT:    mv a1, a0937; CHECKIZHINXMIN-NEXT:    li a0, 0938; CHECKIZHINXMIN-NEXT:    fcvt.s.h a2, a1939; CHECKIZHINXMIN-NEXT:    lui a3, 260096940; CHECKIZHINXMIN-NEXT:    flt.s a4, a2, zero941; CHECKIZHINXMIN-NEXT:    flt.s a2, a3, a2942; CHECKIZHINXMIN-NEXT:    beqz a4, .LBB20_3943; CHECKIZHINXMIN-NEXT:  # %bb.1: # %entry944; CHECKIZHINXMIN-NEXT:    bnez a2, .LBB20_4945; CHECKIZHINXMIN-NEXT:  .LBB20_2: # %entry946; CHECKIZHINXMIN-NEXT:    # kill: def $x10_h killed $x10_h killed $x10947; CHECKIZHINXMIN-NEXT:    ret948; CHECKIZHINXMIN-NEXT:  .LBB20_3: # %entry949; CHECKIZHINXMIN-NEXT:    mv a0, a1950; CHECKIZHINXMIN-NEXT:    beqz a2, .LBB20_2951; CHECKIZHINXMIN-NEXT:  .LBB20_4:952; CHECKIZHINXMIN-NEXT:    li a0, 15953; CHECKIZHINXMIN-NEXT:    slli a0, a0, 10954; CHECKIZHINXMIN-NEXT:    # kill: def $x10_h killed $x10_h killed $x10955; CHECKIZHINXMIN-NEXT:    ret956entry:957  %cmp = fcmp ogt half %a, 1.000000e+00958  %cmp1 = fcmp olt half %a, 0.000000e+00959  %.a = select i1 %cmp1, half 0.000000e+00, half %a960  %retval.0 = select i1 %cmp, half 1.000000e+00, half %.a961  ret half %retval.0962}963