1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \ 3; RUN: -target-abi ilp32f < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \ 5; RUN: -target-abi lp64f < %s | FileCheck %s 6; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \ 7; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=CHECKIZHINX %s 8; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \ 9; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=CHECKIZHINX %s 10; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs < %s \ 11; RUN: -target-abi=ilp32f | FileCheck -check-prefix=CHECKIZFHMIN %s 12; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs < %s \ 13; RUN: -target-abi=lp64f | FileCheck -check-prefix=CHECKIZFHMIN %s 14; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs < %s \ 15; RUN: -target-abi=ilp32 | FileCheck -check-prefix=CHECKIZHINXMIN %s 16; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs < %s \ 17; RUN: -target-abi=lp64 | FileCheck -check-prefix=CHECKIZHINXMIN %s 18 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, fa1 23; CHECK-NEXT: ret 24; 25; CHECKIZHINX-LABEL: select_fcmp_false: 26; CHECKIZHINX: # %bb.0: 27; CHECKIZHINX-NEXT: mv a0, a1 28; CHECKIZHINX-NEXT: ret 29; 30; CHECKIZFHMIN-LABEL: select_fcmp_false: 31; CHECKIZFHMIN: # %bb.0: 32; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 33; CHECKIZFHMIN-NEXT: ret 34; 35; CHECKIZHINXMIN-LABEL: select_fcmp_false: 36; CHECKIZHINXMIN: # %bb.0: 37; CHECKIZHINXMIN-NEXT: mv a0, a1 38; CHECKIZHINXMIN-NEXT: ret 39 %1 = fcmp false half %a, %b 40 %2 = select i1 %1, half %a, half %b 41 ret half %2 42} 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, fa1 48; CHECK-NEXT: bnez a0, .LBB1_2 49; CHECK-NEXT: # %bb.1: 50; CHECK-NEXT: fmv.h fa0, fa1 51; CHECK-NEXT: .LBB1_2: 52; CHECK-NEXT: ret 53; 54; CHECKIZHINX-LABEL: select_fcmp_oeq: 55; CHECKIZHINX: # %bb.0: 56; CHECKIZHINX-NEXT: feq.h a2, a0, a1 57; CHECKIZHINX-NEXT: bnez a2, .LBB1_2 58; CHECKIZHINX-NEXT: # %bb.1: 59; CHECKIZHINX-NEXT: mv a0, a1 60; CHECKIZHINX-NEXT: .LBB1_2: 61; CHECKIZHINX-NEXT: ret 62; 63; CHECKIZFHMIN-LABEL: select_fcmp_oeq: 64; CHECKIZFHMIN: # %bb.0: 65; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 66; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 67; CHECKIZFHMIN-NEXT: feq.s a0, fa4, fa5 68; CHECKIZFHMIN-NEXT: bnez a0, .LBB1_2 69; CHECKIZFHMIN-NEXT: # %bb.1: 70; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 71; CHECKIZFHMIN-NEXT: .LBB1_2: 72; CHECKIZFHMIN-NEXT: ret 73; 74; CHECKIZHINXMIN-LABEL: select_fcmp_oeq: 75; CHECKIZHINXMIN: # %bb.0: 76; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 77; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 78; CHECKIZHINXMIN-NEXT: feq.s a2, a3, a2 79; CHECKIZHINXMIN-NEXT: bnez a2, .LBB1_2 80; CHECKIZHINXMIN-NEXT: # %bb.1: 81; CHECKIZHINXMIN-NEXT: mv a0, a1 82; CHECKIZHINXMIN-NEXT: .LBB1_2: 83; CHECKIZHINXMIN-NEXT: ret 84 %1 = fcmp oeq half %a, %b 85 %2 = select i1 %1, half %a, half %b 86 ret half %2 87} 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, fa0 93; CHECK-NEXT: bnez a0, .LBB2_2 94; CHECK-NEXT: # %bb.1: 95; CHECK-NEXT: fmv.h fa0, fa1 96; CHECK-NEXT: .LBB2_2: 97; CHECK-NEXT: ret 98; 99; CHECKIZHINX-LABEL: select_fcmp_ogt: 100; CHECKIZHINX: # %bb.0: 101; CHECKIZHINX-NEXT: flt.h a2, a1, a0 102; CHECKIZHINX-NEXT: bnez a2, .LBB2_2 103; CHECKIZHINX-NEXT: # %bb.1: 104; CHECKIZHINX-NEXT: mv a0, a1 105; CHECKIZHINX-NEXT: .LBB2_2: 106; CHECKIZHINX-NEXT: ret 107; 108; CHECKIZFHMIN-LABEL: select_fcmp_ogt: 109; CHECKIZFHMIN: # %bb.0: 110; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa0 111; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa1 112; CHECKIZFHMIN-NEXT: flt.s a0, fa4, fa5 113; CHECKIZFHMIN-NEXT: bnez a0, .LBB2_2 114; CHECKIZFHMIN-NEXT: # %bb.1: 115; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 116; CHECKIZFHMIN-NEXT: .LBB2_2: 117; CHECKIZFHMIN-NEXT: ret 118; 119; CHECKIZHINXMIN-LABEL: select_fcmp_ogt: 120; CHECKIZHINXMIN: # %bb.0: 121; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0 122; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a1 123; CHECKIZHINXMIN-NEXT: flt.s a2, a3, a2 124; CHECKIZHINXMIN-NEXT: bnez a2, .LBB2_2 125; CHECKIZHINXMIN-NEXT: # %bb.1: 126; CHECKIZHINXMIN-NEXT: mv a0, a1 127; CHECKIZHINXMIN-NEXT: .LBB2_2: 128; CHECKIZHINXMIN-NEXT: ret 129 %1 = fcmp ogt half %a, %b 130 %2 = select i1 %1, half %a, half %b 131 ret half %2 132} 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, fa0 138; CHECK-NEXT: bnez a0, .LBB3_2 139; CHECK-NEXT: # %bb.1: 140; CHECK-NEXT: fmv.h fa0, fa1 141; CHECK-NEXT: .LBB3_2: 142; CHECK-NEXT: ret 143; 144; CHECKIZHINX-LABEL: select_fcmp_oge: 145; CHECKIZHINX: # %bb.0: 146; CHECKIZHINX-NEXT: fle.h a2, a1, a0 147; CHECKIZHINX-NEXT: bnez a2, .LBB3_2 148; CHECKIZHINX-NEXT: # %bb.1: 149; CHECKIZHINX-NEXT: mv a0, a1 150; CHECKIZHINX-NEXT: .LBB3_2: 151; CHECKIZHINX-NEXT: ret 152; 153; CHECKIZFHMIN-LABEL: select_fcmp_oge: 154; CHECKIZFHMIN: # %bb.0: 155; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa0 156; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa1 157; CHECKIZFHMIN-NEXT: fle.s a0, fa4, fa5 158; CHECKIZFHMIN-NEXT: bnez a0, .LBB3_2 159; CHECKIZFHMIN-NEXT: # %bb.1: 160; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 161; CHECKIZFHMIN-NEXT: .LBB3_2: 162; CHECKIZFHMIN-NEXT: ret 163; 164; CHECKIZHINXMIN-LABEL: select_fcmp_oge: 165; CHECKIZHINXMIN: # %bb.0: 166; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0 167; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a1 168; CHECKIZHINXMIN-NEXT: fle.s a2, a3, a2 169; CHECKIZHINXMIN-NEXT: bnez a2, .LBB3_2 170; CHECKIZHINXMIN-NEXT: # %bb.1: 171; CHECKIZHINXMIN-NEXT: mv a0, a1 172; CHECKIZHINXMIN-NEXT: .LBB3_2: 173; CHECKIZHINXMIN-NEXT: ret 174 %1 = fcmp oge half %a, %b 175 %2 = select i1 %1, half %a, half %b 176 ret half %2 177} 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, fa1 183; CHECK-NEXT: bnez a0, .LBB4_2 184; CHECK-NEXT: # %bb.1: 185; CHECK-NEXT: fmv.h fa0, fa1 186; CHECK-NEXT: .LBB4_2: 187; CHECK-NEXT: ret 188; 189; CHECKIZHINX-LABEL: select_fcmp_olt: 190; CHECKIZHINX: # %bb.0: 191; CHECKIZHINX-NEXT: flt.h a2, a0, a1 192; CHECKIZHINX-NEXT: bnez a2, .LBB4_2 193; CHECKIZHINX-NEXT: # %bb.1: 194; CHECKIZHINX-NEXT: mv a0, a1 195; CHECKIZHINX-NEXT: .LBB4_2: 196; CHECKIZHINX-NEXT: ret 197; 198; CHECKIZFHMIN-LABEL: select_fcmp_olt: 199; CHECKIZFHMIN: # %bb.0: 200; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 201; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 202; CHECKIZFHMIN-NEXT: flt.s a0, fa4, fa5 203; CHECKIZFHMIN-NEXT: bnez a0, .LBB4_2 204; CHECKIZFHMIN-NEXT: # %bb.1: 205; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 206; CHECKIZFHMIN-NEXT: .LBB4_2: 207; CHECKIZFHMIN-NEXT: ret 208; 209; CHECKIZHINXMIN-LABEL: select_fcmp_olt: 210; CHECKIZHINXMIN: # %bb.0: 211; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 212; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 213; CHECKIZHINXMIN-NEXT: flt.s a2, a3, a2 214; CHECKIZHINXMIN-NEXT: bnez a2, .LBB4_2 215; CHECKIZHINXMIN-NEXT: # %bb.1: 216; CHECKIZHINXMIN-NEXT: mv a0, a1 217; CHECKIZHINXMIN-NEXT: .LBB4_2: 218; CHECKIZHINXMIN-NEXT: ret 219 %1 = fcmp olt half %a, %b 220 %2 = select i1 %1, half %a, half %b 221 ret half %2 222} 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, fa1 228; CHECK-NEXT: bnez a0, .LBB5_2 229; CHECK-NEXT: # %bb.1: 230; CHECK-NEXT: fmv.h fa0, fa1 231; CHECK-NEXT: .LBB5_2: 232; CHECK-NEXT: ret 233; 234; CHECKIZHINX-LABEL: select_fcmp_ole: 235; CHECKIZHINX: # %bb.0: 236; CHECKIZHINX-NEXT: fle.h a2, a0, a1 237; CHECKIZHINX-NEXT: bnez a2, .LBB5_2 238; CHECKIZHINX-NEXT: # %bb.1: 239; CHECKIZHINX-NEXT: mv a0, a1 240; CHECKIZHINX-NEXT: .LBB5_2: 241; CHECKIZHINX-NEXT: ret 242; 243; CHECKIZFHMIN-LABEL: select_fcmp_ole: 244; CHECKIZFHMIN: # %bb.0: 245; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 246; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 247; CHECKIZFHMIN-NEXT: fle.s a0, fa4, fa5 248; CHECKIZFHMIN-NEXT: bnez a0, .LBB5_2 249; CHECKIZFHMIN-NEXT: # %bb.1: 250; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 251; CHECKIZFHMIN-NEXT: .LBB5_2: 252; CHECKIZFHMIN-NEXT: ret 253; 254; CHECKIZHINXMIN-LABEL: select_fcmp_ole: 255; CHECKIZHINXMIN: # %bb.0: 256; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 257; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 258; CHECKIZHINXMIN-NEXT: fle.s a2, a3, a2 259; CHECKIZHINXMIN-NEXT: bnez a2, .LBB5_2 260; CHECKIZHINXMIN-NEXT: # %bb.1: 261; CHECKIZHINXMIN-NEXT: mv a0, a1 262; CHECKIZHINXMIN-NEXT: .LBB5_2: 263; CHECKIZHINXMIN-NEXT: ret 264 %1 = fcmp ole half %a, %b 265 %2 = select i1 %1, half %a, half %b 266 ret half %2 267} 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, fa1 273; CHECK-NEXT: flt.h a1, fa1, fa0 274; CHECK-NEXT: or a0, a1, a0 275; CHECK-NEXT: bnez a0, .LBB6_2 276; CHECK-NEXT: # %bb.1: 277; CHECK-NEXT: fmv.h fa0, fa1 278; CHECK-NEXT: .LBB6_2: 279; CHECK-NEXT: ret 280; 281; CHECKIZHINX-LABEL: select_fcmp_one: 282; CHECKIZHINX: # %bb.0: 283; CHECKIZHINX-NEXT: flt.h a2, a0, a1 284; CHECKIZHINX-NEXT: flt.h a3, a1, a0 285; CHECKIZHINX-NEXT: or a2, a3, a2 286; CHECKIZHINX-NEXT: bnez a2, .LBB6_2 287; CHECKIZHINX-NEXT: # %bb.1: 288; CHECKIZHINX-NEXT: mv a0, a1 289; CHECKIZHINX-NEXT: .LBB6_2: 290; CHECKIZHINX-NEXT: ret 291; 292; CHECKIZFHMIN-LABEL: select_fcmp_one: 293; CHECKIZFHMIN: # %bb.0: 294; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 295; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 296; CHECKIZFHMIN-NEXT: flt.s a0, fa4, fa5 297; CHECKIZFHMIN-NEXT: flt.s a1, fa5, fa4 298; CHECKIZFHMIN-NEXT: or a0, a1, a0 299; CHECKIZFHMIN-NEXT: bnez a0, .LBB6_2 300; CHECKIZFHMIN-NEXT: # %bb.1: 301; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 302; CHECKIZFHMIN-NEXT: .LBB6_2: 303; CHECKIZFHMIN-NEXT: ret 304; 305; CHECKIZHINXMIN-LABEL: select_fcmp_one: 306; CHECKIZHINXMIN: # %bb.0: 307; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 308; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 309; CHECKIZHINXMIN-NEXT: flt.s a4, a3, a2 310; CHECKIZHINXMIN-NEXT: flt.s a2, a2, a3 311; CHECKIZHINXMIN-NEXT: or a2, a2, a4 312; CHECKIZHINXMIN-NEXT: bnez a2, .LBB6_2 313; CHECKIZHINXMIN-NEXT: # %bb.1: 314; CHECKIZHINXMIN-NEXT: mv a0, a1 315; CHECKIZHINXMIN-NEXT: .LBB6_2: 316; CHECKIZHINXMIN-NEXT: ret 317 %1 = fcmp one half %a, %b 318 %2 = select i1 %1, half %a, half %b 319 ret half %2 320} 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, fa1 326; CHECK-NEXT: feq.h a1, fa0, fa0 327; CHECK-NEXT: and a0, a1, a0 328; CHECK-NEXT: bnez a0, .LBB7_2 329; CHECK-NEXT: # %bb.1: 330; CHECK-NEXT: fmv.h fa0, fa1 331; CHECK-NEXT: .LBB7_2: 332; CHECK-NEXT: ret 333; 334; CHECKIZHINX-LABEL: select_fcmp_ord: 335; CHECKIZHINX: # %bb.0: 336; CHECKIZHINX-NEXT: feq.h a2, a1, a1 337; CHECKIZHINX-NEXT: feq.h a3, a0, a0 338; CHECKIZHINX-NEXT: and a2, a3, a2 339; CHECKIZHINX-NEXT: bnez a2, .LBB7_2 340; CHECKIZHINX-NEXT: # %bb.1: 341; CHECKIZHINX-NEXT: mv a0, a1 342; CHECKIZHINX-NEXT: .LBB7_2: 343; CHECKIZHINX-NEXT: ret 344; 345; CHECKIZFHMIN-LABEL: select_fcmp_ord: 346; CHECKIZFHMIN: # %bb.0: 347; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 348; CHECKIZFHMIN-NEXT: feq.s a0, fa5, fa5 349; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa0 350; CHECKIZFHMIN-NEXT: feq.s a1, fa5, fa5 351; CHECKIZFHMIN-NEXT: and a0, a1, a0 352; CHECKIZFHMIN-NEXT: bnez a0, .LBB7_2 353; CHECKIZFHMIN-NEXT: # %bb.1: 354; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 355; CHECKIZFHMIN-NEXT: .LBB7_2: 356; CHECKIZFHMIN-NEXT: ret 357; 358; CHECKIZHINXMIN-LABEL: select_fcmp_ord: 359; CHECKIZHINXMIN: # %bb.0: 360; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 361; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 362; CHECKIZHINXMIN-NEXT: feq.s a2, a2, a2 363; CHECKIZHINXMIN-NEXT: feq.s a3, a3, a3 364; CHECKIZHINXMIN-NEXT: and a2, a3, a2 365; CHECKIZHINXMIN-NEXT: bnez a2, .LBB7_2 366; CHECKIZHINXMIN-NEXT: # %bb.1: 367; CHECKIZHINXMIN-NEXT: mv a0, a1 368; CHECKIZHINXMIN-NEXT: .LBB7_2: 369; CHECKIZHINXMIN-NEXT: ret 370 %1 = fcmp ord half %a, %b 371 %2 = select i1 %1, half %a, half %b 372 ret half %2 373} 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, fa1 379; CHECK-NEXT: flt.h a1, fa1, fa0 380; CHECK-NEXT: or a0, a1, a0 381; CHECK-NEXT: beqz a0, .LBB8_2 382; CHECK-NEXT: # %bb.1: 383; CHECK-NEXT: fmv.h fa0, fa1 384; CHECK-NEXT: .LBB8_2: 385; CHECK-NEXT: ret 386; 387; CHECKIZHINX-LABEL: select_fcmp_ueq: 388; CHECKIZHINX: # %bb.0: 389; CHECKIZHINX-NEXT: flt.h a2, a0, a1 390; CHECKIZHINX-NEXT: flt.h a3, a1, a0 391; CHECKIZHINX-NEXT: or a2, a3, a2 392; CHECKIZHINX-NEXT: beqz a2, .LBB8_2 393; CHECKIZHINX-NEXT: # %bb.1: 394; CHECKIZHINX-NEXT: mv a0, a1 395; CHECKIZHINX-NEXT: .LBB8_2: 396; CHECKIZHINX-NEXT: ret 397; 398; CHECKIZFHMIN-LABEL: select_fcmp_ueq: 399; CHECKIZFHMIN: # %bb.0: 400; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 401; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 402; CHECKIZFHMIN-NEXT: flt.s a0, fa4, fa5 403; CHECKIZFHMIN-NEXT: flt.s a1, fa5, fa4 404; CHECKIZFHMIN-NEXT: or a0, a1, a0 405; CHECKIZFHMIN-NEXT: beqz a0, .LBB8_2 406; CHECKIZFHMIN-NEXT: # %bb.1: 407; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 408; CHECKIZFHMIN-NEXT: .LBB8_2: 409; CHECKIZFHMIN-NEXT: ret 410; 411; CHECKIZHINXMIN-LABEL: select_fcmp_ueq: 412; CHECKIZHINXMIN: # %bb.0: 413; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 414; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 415; CHECKIZHINXMIN-NEXT: flt.s a4, a3, a2 416; CHECKIZHINXMIN-NEXT: flt.s a2, a2, a3 417; CHECKIZHINXMIN-NEXT: or a2, a2, a4 418; CHECKIZHINXMIN-NEXT: beqz a2, .LBB8_2 419; CHECKIZHINXMIN-NEXT: # %bb.1: 420; CHECKIZHINXMIN-NEXT: mv a0, a1 421; CHECKIZHINXMIN-NEXT: .LBB8_2: 422; CHECKIZHINXMIN-NEXT: ret 423 %1 = fcmp ueq half %a, %b 424 %2 = select i1 %1, half %a, half %b 425 ret half %2 426} 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, fa1 432; CHECK-NEXT: beqz a0, .LBB9_2 433; CHECK-NEXT: # %bb.1: 434; CHECK-NEXT: fmv.h fa0, fa1 435; CHECK-NEXT: .LBB9_2: 436; CHECK-NEXT: ret 437; 438; CHECKIZHINX-LABEL: select_fcmp_ugt: 439; CHECKIZHINX: # %bb.0: 440; CHECKIZHINX-NEXT: fle.h a2, a0, a1 441; CHECKIZHINX-NEXT: beqz a2, .LBB9_2 442; CHECKIZHINX-NEXT: # %bb.1: 443; CHECKIZHINX-NEXT: mv a0, a1 444; CHECKIZHINX-NEXT: .LBB9_2: 445; CHECKIZHINX-NEXT: ret 446; 447; CHECKIZFHMIN-LABEL: select_fcmp_ugt: 448; CHECKIZFHMIN: # %bb.0: 449; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 450; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 451; CHECKIZFHMIN-NEXT: fle.s a0, fa4, fa5 452; CHECKIZFHMIN-NEXT: beqz a0, .LBB9_2 453; CHECKIZFHMIN-NEXT: # %bb.1: 454; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 455; CHECKIZFHMIN-NEXT: .LBB9_2: 456; CHECKIZFHMIN-NEXT: ret 457; 458; CHECKIZHINXMIN-LABEL: select_fcmp_ugt: 459; CHECKIZHINXMIN: # %bb.0: 460; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 461; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 462; CHECKIZHINXMIN-NEXT: fle.s a2, a3, a2 463; CHECKIZHINXMIN-NEXT: beqz a2, .LBB9_2 464; CHECKIZHINXMIN-NEXT: # %bb.1: 465; CHECKIZHINXMIN-NEXT: mv a0, a1 466; CHECKIZHINXMIN-NEXT: .LBB9_2: 467; CHECKIZHINXMIN-NEXT: ret 468 %1 = fcmp ugt half %a, %b 469 %2 = select i1 %1, half %a, half %b 470 ret half %2 471} 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, fa1 477; CHECK-NEXT: beqz a0, .LBB10_2 478; CHECK-NEXT: # %bb.1: 479; CHECK-NEXT: fmv.h fa0, fa1 480; CHECK-NEXT: .LBB10_2: 481; CHECK-NEXT: ret 482; 483; CHECKIZHINX-LABEL: select_fcmp_uge: 484; CHECKIZHINX: # %bb.0: 485; CHECKIZHINX-NEXT: flt.h a2, a0, a1 486; CHECKIZHINX-NEXT: beqz a2, .LBB10_2 487; CHECKIZHINX-NEXT: # %bb.1: 488; CHECKIZHINX-NEXT: mv a0, a1 489; CHECKIZHINX-NEXT: .LBB10_2: 490; CHECKIZHINX-NEXT: ret 491; 492; CHECKIZFHMIN-LABEL: select_fcmp_uge: 493; CHECKIZFHMIN: # %bb.0: 494; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 495; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 496; CHECKIZFHMIN-NEXT: flt.s a0, fa4, fa5 497; CHECKIZFHMIN-NEXT: beqz a0, .LBB10_2 498; CHECKIZFHMIN-NEXT: # %bb.1: 499; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 500; CHECKIZFHMIN-NEXT: .LBB10_2: 501; CHECKIZFHMIN-NEXT: ret 502; 503; CHECKIZHINXMIN-LABEL: select_fcmp_uge: 504; CHECKIZHINXMIN: # %bb.0: 505; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 506; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 507; CHECKIZHINXMIN-NEXT: flt.s a2, a3, a2 508; CHECKIZHINXMIN-NEXT: beqz a2, .LBB10_2 509; CHECKIZHINXMIN-NEXT: # %bb.1: 510; CHECKIZHINXMIN-NEXT: mv a0, a1 511; CHECKIZHINXMIN-NEXT: .LBB10_2: 512; CHECKIZHINXMIN-NEXT: ret 513 %1 = fcmp uge half %a, %b 514 %2 = select i1 %1, half %a, half %b 515 ret half %2 516} 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, fa0 522; CHECK-NEXT: beqz a0, .LBB11_2 523; CHECK-NEXT: # %bb.1: 524; CHECK-NEXT: fmv.h fa0, fa1 525; CHECK-NEXT: .LBB11_2: 526; CHECK-NEXT: ret 527; 528; CHECKIZHINX-LABEL: select_fcmp_ult: 529; CHECKIZHINX: # %bb.0: 530; CHECKIZHINX-NEXT: fle.h a2, a1, a0 531; CHECKIZHINX-NEXT: beqz a2, .LBB11_2 532; CHECKIZHINX-NEXT: # %bb.1: 533; CHECKIZHINX-NEXT: mv a0, a1 534; CHECKIZHINX-NEXT: .LBB11_2: 535; CHECKIZHINX-NEXT: ret 536; 537; CHECKIZFHMIN-LABEL: select_fcmp_ult: 538; CHECKIZFHMIN: # %bb.0: 539; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa0 540; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa1 541; CHECKIZFHMIN-NEXT: fle.s a0, fa4, fa5 542; CHECKIZFHMIN-NEXT: beqz a0, .LBB11_2 543; CHECKIZFHMIN-NEXT: # %bb.1: 544; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 545; CHECKIZFHMIN-NEXT: .LBB11_2: 546; CHECKIZFHMIN-NEXT: ret 547; 548; CHECKIZHINXMIN-LABEL: select_fcmp_ult: 549; CHECKIZHINXMIN: # %bb.0: 550; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0 551; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a1 552; CHECKIZHINXMIN-NEXT: fle.s a2, a3, a2 553; CHECKIZHINXMIN-NEXT: beqz a2, .LBB11_2 554; CHECKIZHINXMIN-NEXT: # %bb.1: 555; CHECKIZHINXMIN-NEXT: mv a0, a1 556; CHECKIZHINXMIN-NEXT: .LBB11_2: 557; CHECKIZHINXMIN-NEXT: ret 558 %1 = fcmp ult half %a, %b 559 %2 = select i1 %1, half %a, half %b 560 ret half %2 561} 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, fa0 567; CHECK-NEXT: beqz a0, .LBB12_2 568; CHECK-NEXT: # %bb.1: 569; CHECK-NEXT: fmv.h fa0, fa1 570; CHECK-NEXT: .LBB12_2: 571; CHECK-NEXT: ret 572; 573; CHECKIZHINX-LABEL: select_fcmp_ule: 574; CHECKIZHINX: # %bb.0: 575; CHECKIZHINX-NEXT: flt.h a2, a1, a0 576; CHECKIZHINX-NEXT: beqz a2, .LBB12_2 577; CHECKIZHINX-NEXT: # %bb.1: 578; CHECKIZHINX-NEXT: mv a0, a1 579; CHECKIZHINX-NEXT: .LBB12_2: 580; CHECKIZHINX-NEXT: ret 581; 582; CHECKIZFHMIN-LABEL: select_fcmp_ule: 583; CHECKIZFHMIN: # %bb.0: 584; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa0 585; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa1 586; CHECKIZFHMIN-NEXT: flt.s a0, fa4, fa5 587; CHECKIZFHMIN-NEXT: beqz a0, .LBB12_2 588; CHECKIZFHMIN-NEXT: # %bb.1: 589; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 590; CHECKIZFHMIN-NEXT: .LBB12_2: 591; CHECKIZFHMIN-NEXT: ret 592; 593; CHECKIZHINXMIN-LABEL: select_fcmp_ule: 594; CHECKIZHINXMIN: # %bb.0: 595; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0 596; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a1 597; CHECKIZHINXMIN-NEXT: flt.s a2, a3, a2 598; CHECKIZHINXMIN-NEXT: beqz a2, .LBB12_2 599; CHECKIZHINXMIN-NEXT: # %bb.1: 600; CHECKIZHINXMIN-NEXT: mv a0, a1 601; CHECKIZHINXMIN-NEXT: .LBB12_2: 602; CHECKIZHINXMIN-NEXT: ret 603 %1 = fcmp ule half %a, %b 604 %2 = select i1 %1, half %a, half %b 605 ret half %2 606} 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, fa1 612; CHECK-NEXT: beqz a0, .LBB13_2 613; CHECK-NEXT: # %bb.1: 614; CHECK-NEXT: fmv.h fa0, fa1 615; CHECK-NEXT: .LBB13_2: 616; CHECK-NEXT: ret 617; 618; CHECKIZHINX-LABEL: select_fcmp_une: 619; CHECKIZHINX: # %bb.0: 620; CHECKIZHINX-NEXT: feq.h a2, a0, a1 621; CHECKIZHINX-NEXT: beqz a2, .LBB13_2 622; CHECKIZHINX-NEXT: # %bb.1: 623; CHECKIZHINX-NEXT: mv a0, a1 624; CHECKIZHINX-NEXT: .LBB13_2: 625; CHECKIZHINX-NEXT: ret 626; 627; CHECKIZFHMIN-LABEL: select_fcmp_une: 628; CHECKIZFHMIN: # %bb.0: 629; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 630; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 631; CHECKIZFHMIN-NEXT: feq.s a0, fa4, fa5 632; CHECKIZFHMIN-NEXT: beqz a0, .LBB13_2 633; CHECKIZFHMIN-NEXT: # %bb.1: 634; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 635; CHECKIZFHMIN-NEXT: .LBB13_2: 636; CHECKIZFHMIN-NEXT: ret 637; 638; CHECKIZHINXMIN-LABEL: select_fcmp_une: 639; CHECKIZHINXMIN: # %bb.0: 640; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 641; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 642; CHECKIZHINXMIN-NEXT: feq.s a2, a3, a2 643; CHECKIZHINXMIN-NEXT: beqz a2, .LBB13_2 644; CHECKIZHINXMIN-NEXT: # %bb.1: 645; CHECKIZHINXMIN-NEXT: mv a0, a1 646; CHECKIZHINXMIN-NEXT: .LBB13_2: 647; CHECKIZHINXMIN-NEXT: ret 648 %1 = fcmp une half %a, %b 649 %2 = select i1 %1, half %a, half %b 650 ret half %2 651} 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, fa1 657; CHECK-NEXT: feq.h a1, fa0, fa0 658; CHECK-NEXT: and a0, a1, a0 659; CHECK-NEXT: beqz a0, .LBB14_2 660; CHECK-NEXT: # %bb.1: 661; CHECK-NEXT: fmv.h fa0, fa1 662; CHECK-NEXT: .LBB14_2: 663; CHECK-NEXT: ret 664; 665; CHECKIZHINX-LABEL: select_fcmp_uno: 666; CHECKIZHINX: # %bb.0: 667; CHECKIZHINX-NEXT: feq.h a2, a1, a1 668; CHECKIZHINX-NEXT: feq.h a3, a0, a0 669; CHECKIZHINX-NEXT: and a2, a3, a2 670; CHECKIZHINX-NEXT: beqz a2, .LBB14_2 671; CHECKIZHINX-NEXT: # %bb.1: 672; CHECKIZHINX-NEXT: mv a0, a1 673; CHECKIZHINX-NEXT: .LBB14_2: 674; CHECKIZHINX-NEXT: ret 675; 676; CHECKIZFHMIN-LABEL: select_fcmp_uno: 677; CHECKIZFHMIN: # %bb.0: 678; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 679; CHECKIZFHMIN-NEXT: feq.s a0, fa5, fa5 680; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa0 681; CHECKIZFHMIN-NEXT: feq.s a1, fa5, fa5 682; CHECKIZFHMIN-NEXT: and a0, a1, a0 683; CHECKIZFHMIN-NEXT: beqz a0, .LBB14_2 684; CHECKIZFHMIN-NEXT: # %bb.1: 685; CHECKIZFHMIN-NEXT: fmv.s fa0, fa1 686; CHECKIZFHMIN-NEXT: .LBB14_2: 687; CHECKIZFHMIN-NEXT: ret 688; 689; CHECKIZHINXMIN-LABEL: select_fcmp_uno: 690; CHECKIZHINXMIN: # %bb.0: 691; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a1 692; CHECKIZHINXMIN-NEXT: fcvt.s.h a3, a0 693; CHECKIZHINXMIN-NEXT: feq.s a2, a2, a2 694; CHECKIZHINXMIN-NEXT: feq.s a3, a3, a3 695; CHECKIZHINXMIN-NEXT: and a2, a3, a2 696; CHECKIZHINXMIN-NEXT: beqz a2, .LBB14_2 697; CHECKIZHINXMIN-NEXT: # %bb.1: 698; CHECKIZHINXMIN-NEXT: mv a0, a1 699; CHECKIZHINXMIN-NEXT: .LBB14_2: 700; CHECKIZHINXMIN-NEXT: ret 701 %1 = fcmp uno half %a, %b 702 %2 = select i1 %1, half %a, half %b 703 ret half %2 704} 705 706define half @select_fcmp_true(half %a, half %b) nounwind { 707; CHECK-LABEL: select_fcmp_true: 708; CHECK: # %bb.0: 709; CHECK-NEXT: ret 710; 711; CHECKIZHINX-LABEL: select_fcmp_true: 712; CHECKIZHINX: # %bb.0: 713; CHECKIZHINX-NEXT: ret 714; 715; CHECKIZFHMIN-LABEL: select_fcmp_true: 716; CHECKIZFHMIN: # %bb.0: 717; CHECKIZFHMIN-NEXT: ret 718; 719; CHECKIZHINXMIN-LABEL: select_fcmp_true: 720; CHECKIZHINXMIN: # %bb.0: 721; CHECKIZHINXMIN-NEXT: ret 722 %1 = fcmp true half %a, %b 723 %2 = select i1 %1, half %a, half %b 724 ret half %2 725} 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, fa1 732; CHECK-NEXT: bnez a2, .LBB16_2 733; CHECK-NEXT: # %bb.1: 734; CHECK-NEXT: mv a0, a1 735; CHECK-NEXT: .LBB16_2: 736; CHECK-NEXT: ret 737; 738; CHECKIZHINX-LABEL: i32_select_fcmp_oeq: 739; CHECKIZHINX: # %bb.0: 740; CHECKIZHINX-NEXT: feq.h a1, a0, a1 741; CHECKIZHINX-NEXT: mv a0, a2 742; CHECKIZHINX-NEXT: bnez a1, .LBB16_2 743; CHECKIZHINX-NEXT: # %bb.1: 744; CHECKIZHINX-NEXT: mv a0, a3 745; CHECKIZHINX-NEXT: .LBB16_2: 746; CHECKIZHINX-NEXT: ret 747; 748; CHECKIZFHMIN-LABEL: i32_select_fcmp_oeq: 749; CHECKIZFHMIN: # %bb.0: 750; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 751; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 752; CHECKIZFHMIN-NEXT: feq.s a2, fa4, fa5 753; CHECKIZFHMIN-NEXT: bnez a2, .LBB16_2 754; CHECKIZFHMIN-NEXT: # %bb.1: 755; CHECKIZFHMIN-NEXT: mv a0, a1 756; CHECKIZFHMIN-NEXT: .LBB16_2: 757; CHECKIZFHMIN-NEXT: ret 758; 759; CHECKIZHINXMIN-LABEL: i32_select_fcmp_oeq: 760; CHECKIZHINXMIN: # %bb.0: 761; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1 762; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0 763; CHECKIZHINXMIN-NEXT: feq.s a1, a0, a1 764; CHECKIZHINXMIN-NEXT: mv a0, a2 765; CHECKIZHINXMIN-NEXT: bnez a1, .LBB16_2 766; CHECKIZHINXMIN-NEXT: # %bb.1: 767; CHECKIZHINXMIN-NEXT: mv a0, a3 768; CHECKIZHINXMIN-NEXT: .LBB16_2: 769; CHECKIZHINXMIN-NEXT: ret 770 %1 = fcmp oeq half %a, %b 771 %2 = select i1 %1, i32 %c, i32 %d 772 ret i32 %2 773} 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, fa1 779; CHECK-NEXT: li a1, 2 780; CHECK-NEXT: sub a0, a1, a0 781; CHECK-NEXT: ret 782; 783; CHECKIZHINX-LABEL: select_fcmp_oeq_1_2: 784; CHECKIZHINX: # %bb.0: 785; CHECKIZHINX-NEXT: feq.h a0, a0, a1 786; CHECKIZHINX-NEXT: li a1, 2 787; CHECKIZHINX-NEXT: sub a0, a1, a0 788; CHECKIZHINX-NEXT: ret 789; 790; CHECKIZFHMIN-LABEL: select_fcmp_oeq_1_2: 791; CHECKIZFHMIN: # %bb.0: 792; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 793; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 794; CHECKIZFHMIN-NEXT: feq.s a0, fa4, fa5 795; CHECKIZFHMIN-NEXT: li a1, 2 796; CHECKIZFHMIN-NEXT: sub a0, a1, a0 797; CHECKIZFHMIN-NEXT: ret 798; 799; CHECKIZHINXMIN-LABEL: select_fcmp_oeq_1_2: 800; CHECKIZHINXMIN: # %bb.0: 801; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1 802; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0 803; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a1 804; CHECKIZHINXMIN-NEXT: li a1, 2 805; CHECKIZHINXMIN-NEXT: sub a0, a1, a0 806; CHECKIZHINXMIN-NEXT: ret 807 %1 = fcmp fast oeq half %a, %b 808 %2 = select i1 %1, i32 1, i32 2 809 ret i32 %2 810} 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, fa1 816; CHECK-NEXT: addi a0, a0, -1 817; CHECK-NEXT: ret 818; 819; CHECKIZHINX-LABEL: select_fcmp_uge_negone_zero: 820; CHECKIZHINX: # %bb.0: 821; CHECKIZHINX-NEXT: fle.h a0, a0, a1 822; CHECKIZHINX-NEXT: addi a0, a0, -1 823; CHECKIZHINX-NEXT: ret 824; 825; CHECKIZFHMIN-LABEL: select_fcmp_uge_negone_zero: 826; CHECKIZFHMIN: # %bb.0: 827; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 828; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 829; CHECKIZFHMIN-NEXT: fle.s a0, fa4, fa5 830; CHECKIZFHMIN-NEXT: addi a0, a0, -1 831; CHECKIZFHMIN-NEXT: ret 832; 833; CHECKIZHINXMIN-LABEL: select_fcmp_uge_negone_zero: 834; CHECKIZHINXMIN: # %bb.0: 835; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1 836; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0 837; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a1 838; CHECKIZHINXMIN-NEXT: addi a0, a0, -1 839; CHECKIZHINXMIN-NEXT: ret 840 %1 = fcmp ugt half %a, %b 841 %2 = select i1 %1, i32 -1, i32 0 842 ret i32 %2 843} 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, fa1 849; CHECK-NEXT: addi a0, a0, 1 850; CHECK-NEXT: ret 851; 852; CHECKIZHINX-LABEL: select_fcmp_uge_1_2: 853; CHECKIZHINX: # %bb.0: 854; CHECKIZHINX-NEXT: fle.h a0, a0, a1 855; CHECKIZHINX-NEXT: addi a0, a0, 1 856; CHECKIZHINX-NEXT: ret 857; 858; CHECKIZFHMIN-LABEL: select_fcmp_uge_1_2: 859; CHECKIZFHMIN: # %bb.0: 860; CHECKIZFHMIN-NEXT: fcvt.s.h fa5, fa1 861; CHECKIZFHMIN-NEXT: fcvt.s.h fa4, fa0 862; CHECKIZFHMIN-NEXT: fle.s a0, fa4, fa5 863; CHECKIZFHMIN-NEXT: addi a0, a0, 1 864; CHECKIZFHMIN-NEXT: ret 865; 866; CHECKIZHINXMIN-LABEL: select_fcmp_uge_1_2: 867; CHECKIZHINXMIN: # %bb.0: 868; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1 869; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0 870; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a1 871; CHECKIZHINXMIN-NEXT: addi a0, a0, 1 872; CHECKIZHINXMIN-NEXT: ret 873 %1 = fcmp ugt half %a, %b 874 %2 = select i1 %1, i32 1, i32 2 875 ret i32 %2 876} 877