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 -check-prefix=RV32IZFH %s 4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \ 5; RUN: -target-abi lp64f < %s | FileCheck -check-prefix=RV64IZFH %s 6; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \ 7; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=RV32IZHINX %s 8; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \ 9; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=RV64IZHINX %s 10; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs \ 11; RUN: -target-abi ilp32f < %s | FileCheck -check-prefix=RV32IZFHMIN %s 12; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs \ 13; RUN: -target-abi lp64f < %s | FileCheck -check-prefix=RV64IZFHMIN %s 14; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs \ 15; RUN: -target-abi ilp32 < %s | FileCheck -check-prefix=RV32IZHINXMIN %s 16; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs \ 17; RUN: -target-abi lp64 < %s | FileCheck -check-prefix=RV64IZHINXMIN %s 18 19declare void @abort() 20declare void @exit(i32) 21declare half @dummy(half) 22 23define void @br_fcmp_false(half %a, half %b) nounwind { 24; RV32IZFH-LABEL: br_fcmp_false: 25; RV32IZFH: # %bb.0: 26; RV32IZFH-NEXT: li a0, 1 27; RV32IZFH-NEXT: bnez a0, .LBB0_2 28; RV32IZFH-NEXT: # %bb.1: # %if.then 29; RV32IZFH-NEXT: ret 30; RV32IZFH-NEXT: .LBB0_2: # %if.else 31; RV32IZFH-NEXT: addi sp, sp, -16 32; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 33; RV32IZFH-NEXT: call abort 34; 35; RV64IZFH-LABEL: br_fcmp_false: 36; RV64IZFH: # %bb.0: 37; RV64IZFH-NEXT: li a0, 1 38; RV64IZFH-NEXT: bnez a0, .LBB0_2 39; RV64IZFH-NEXT: # %bb.1: # %if.then 40; RV64IZFH-NEXT: ret 41; RV64IZFH-NEXT: .LBB0_2: # %if.else 42; RV64IZFH-NEXT: addi sp, sp, -16 43; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 44; RV64IZFH-NEXT: call abort 45; 46; RV32IZHINX-LABEL: br_fcmp_false: 47; RV32IZHINX: # %bb.0: 48; RV32IZHINX-NEXT: li a0, 1 49; RV32IZHINX-NEXT: bnez a0, .LBB0_2 50; RV32IZHINX-NEXT: # %bb.1: # %if.then 51; RV32IZHINX-NEXT: ret 52; RV32IZHINX-NEXT: .LBB0_2: # %if.else 53; RV32IZHINX-NEXT: addi sp, sp, -16 54; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 55; RV32IZHINX-NEXT: call abort 56; 57; RV64IZHINX-LABEL: br_fcmp_false: 58; RV64IZHINX: # %bb.0: 59; RV64IZHINX-NEXT: li a0, 1 60; RV64IZHINX-NEXT: bnez a0, .LBB0_2 61; RV64IZHINX-NEXT: # %bb.1: # %if.then 62; RV64IZHINX-NEXT: ret 63; RV64IZHINX-NEXT: .LBB0_2: # %if.else 64; RV64IZHINX-NEXT: addi sp, sp, -16 65; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 66; RV64IZHINX-NEXT: call abort 67; 68; RV32IZFHMIN-LABEL: br_fcmp_false: 69; RV32IZFHMIN: # %bb.0: 70; RV32IZFHMIN-NEXT: li a0, 1 71; RV32IZFHMIN-NEXT: bnez a0, .LBB0_2 72; RV32IZFHMIN-NEXT: # %bb.1: # %if.then 73; RV32IZFHMIN-NEXT: ret 74; RV32IZFHMIN-NEXT: .LBB0_2: # %if.else 75; RV32IZFHMIN-NEXT: addi sp, sp, -16 76; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 77; RV32IZFHMIN-NEXT: call abort 78; 79; RV64IZFHMIN-LABEL: br_fcmp_false: 80; RV64IZFHMIN: # %bb.0: 81; RV64IZFHMIN-NEXT: li a0, 1 82; RV64IZFHMIN-NEXT: bnez a0, .LBB0_2 83; RV64IZFHMIN-NEXT: # %bb.1: # %if.then 84; RV64IZFHMIN-NEXT: ret 85; RV64IZFHMIN-NEXT: .LBB0_2: # %if.else 86; RV64IZFHMIN-NEXT: addi sp, sp, -16 87; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 88; RV64IZFHMIN-NEXT: call abort 89; 90; RV32IZHINXMIN-LABEL: br_fcmp_false: 91; RV32IZHINXMIN: # %bb.0: 92; RV32IZHINXMIN-NEXT: li a0, 1 93; RV32IZHINXMIN-NEXT: bnez a0, .LBB0_2 94; RV32IZHINXMIN-NEXT: # %bb.1: # %if.then 95; RV32IZHINXMIN-NEXT: ret 96; RV32IZHINXMIN-NEXT: .LBB0_2: # %if.else 97; RV32IZHINXMIN-NEXT: addi sp, sp, -16 98; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 99; RV32IZHINXMIN-NEXT: call abort 100; 101; RV64IZHINXMIN-LABEL: br_fcmp_false: 102; RV64IZHINXMIN: # %bb.0: 103; RV64IZHINXMIN-NEXT: li a0, 1 104; RV64IZHINXMIN-NEXT: bnez a0, .LBB0_2 105; RV64IZHINXMIN-NEXT: # %bb.1: # %if.then 106; RV64IZHINXMIN-NEXT: ret 107; RV64IZHINXMIN-NEXT: .LBB0_2: # %if.else 108; RV64IZHINXMIN-NEXT: addi sp, sp, -16 109; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 110; RV64IZHINXMIN-NEXT: call abort 111 %1 = fcmp false half %a, %b 112 br i1 %1, label %if.then, label %if.else 113if.then: 114 ret void 115if.else: 116 tail call void @abort() 117 unreachable 118} 119 120define void @br_fcmp_oeq(half %a, half %b) nounwind { 121; RV32IZFH-LABEL: br_fcmp_oeq: 122; RV32IZFH: # %bb.0: 123; RV32IZFH-NEXT: feq.h a0, fa0, fa1 124; RV32IZFH-NEXT: bnez a0, .LBB1_2 125; RV32IZFH-NEXT: # %bb.1: # %if.else 126; RV32IZFH-NEXT: ret 127; RV32IZFH-NEXT: .LBB1_2: # %if.then 128; RV32IZFH-NEXT: addi sp, sp, -16 129; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 130; RV32IZFH-NEXT: call abort 131; 132; RV64IZFH-LABEL: br_fcmp_oeq: 133; RV64IZFH: # %bb.0: 134; RV64IZFH-NEXT: feq.h a0, fa0, fa1 135; RV64IZFH-NEXT: bnez a0, .LBB1_2 136; RV64IZFH-NEXT: # %bb.1: # %if.else 137; RV64IZFH-NEXT: ret 138; RV64IZFH-NEXT: .LBB1_2: # %if.then 139; RV64IZFH-NEXT: addi sp, sp, -16 140; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 141; RV64IZFH-NEXT: call abort 142; 143; RV32IZHINX-LABEL: br_fcmp_oeq: 144; RV32IZHINX: # %bb.0: 145; RV32IZHINX-NEXT: feq.h a0, a0, a1 146; RV32IZHINX-NEXT: bnez a0, .LBB1_2 147; RV32IZHINX-NEXT: # %bb.1: # %if.else 148; RV32IZHINX-NEXT: ret 149; RV32IZHINX-NEXT: .LBB1_2: # %if.then 150; RV32IZHINX-NEXT: addi sp, sp, -16 151; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 152; RV32IZHINX-NEXT: call abort 153; 154; RV64IZHINX-LABEL: br_fcmp_oeq: 155; RV64IZHINX: # %bb.0: 156; RV64IZHINX-NEXT: feq.h a0, a0, a1 157; RV64IZHINX-NEXT: bnez a0, .LBB1_2 158; RV64IZHINX-NEXT: # %bb.1: # %if.else 159; RV64IZHINX-NEXT: ret 160; RV64IZHINX-NEXT: .LBB1_2: # %if.then 161; RV64IZHINX-NEXT: addi sp, sp, -16 162; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 163; RV64IZHINX-NEXT: call abort 164; 165; RV32IZFHMIN-LABEL: br_fcmp_oeq: 166; RV32IZFHMIN: # %bb.0: 167; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 168; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 169; RV32IZFHMIN-NEXT: feq.s a0, fa4, fa5 170; RV32IZFHMIN-NEXT: bnez a0, .LBB1_2 171; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 172; RV32IZFHMIN-NEXT: ret 173; RV32IZFHMIN-NEXT: .LBB1_2: # %if.then 174; RV32IZFHMIN-NEXT: addi sp, sp, -16 175; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 176; RV32IZFHMIN-NEXT: call abort 177; 178; RV64IZFHMIN-LABEL: br_fcmp_oeq: 179; RV64IZFHMIN: # %bb.0: 180; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 181; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 182; RV64IZFHMIN-NEXT: feq.s a0, fa4, fa5 183; RV64IZFHMIN-NEXT: bnez a0, .LBB1_2 184; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 185; RV64IZFHMIN-NEXT: ret 186; RV64IZFHMIN-NEXT: .LBB1_2: # %if.then 187; RV64IZFHMIN-NEXT: addi sp, sp, -16 188; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 189; RV64IZFHMIN-NEXT: call abort 190; 191; RV32IZHINXMIN-LABEL: br_fcmp_oeq: 192; RV32IZHINXMIN: # %bb.0: 193; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 194; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 195; RV32IZHINXMIN-NEXT: feq.s a0, a0, a1 196; RV32IZHINXMIN-NEXT: bnez a0, .LBB1_2 197; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 198; RV32IZHINXMIN-NEXT: ret 199; RV32IZHINXMIN-NEXT: .LBB1_2: # %if.then 200; RV32IZHINXMIN-NEXT: addi sp, sp, -16 201; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 202; RV32IZHINXMIN-NEXT: call abort 203; 204; RV64IZHINXMIN-LABEL: br_fcmp_oeq: 205; RV64IZHINXMIN: # %bb.0: 206; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 207; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 208; RV64IZHINXMIN-NEXT: feq.s a0, a0, a1 209; RV64IZHINXMIN-NEXT: bnez a0, .LBB1_2 210; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 211; RV64IZHINXMIN-NEXT: ret 212; RV64IZHINXMIN-NEXT: .LBB1_2: # %if.then 213; RV64IZHINXMIN-NEXT: addi sp, sp, -16 214; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 215; RV64IZHINXMIN-NEXT: call abort 216 %1 = fcmp oeq half %a, %b 217 br i1 %1, label %if.then, label %if.else 218if.else: 219 ret void 220if.then: 221 tail call void @abort() 222 unreachable 223} 224 225; TODO: generated code quality for this is very poor due to 226; DAGCombiner::visitXOR converting the legal setoeq to setune, which requires 227; expansion. 228define void @br_fcmp_oeq_alt(half %a, half %b) nounwind { 229; RV32IZFH-LABEL: br_fcmp_oeq_alt: 230; RV32IZFH: # %bb.0: 231; RV32IZFH-NEXT: feq.h a0, fa0, fa1 232; RV32IZFH-NEXT: bnez a0, .LBB2_2 233; RV32IZFH-NEXT: # %bb.1: # %if.else 234; RV32IZFH-NEXT: ret 235; RV32IZFH-NEXT: .LBB2_2: # %if.then 236; RV32IZFH-NEXT: addi sp, sp, -16 237; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 238; RV32IZFH-NEXT: call abort 239; 240; RV64IZFH-LABEL: br_fcmp_oeq_alt: 241; RV64IZFH: # %bb.0: 242; RV64IZFH-NEXT: feq.h a0, fa0, fa1 243; RV64IZFH-NEXT: bnez a0, .LBB2_2 244; RV64IZFH-NEXT: # %bb.1: # %if.else 245; RV64IZFH-NEXT: ret 246; RV64IZFH-NEXT: .LBB2_2: # %if.then 247; RV64IZFH-NEXT: addi sp, sp, -16 248; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 249; RV64IZFH-NEXT: call abort 250; 251; RV32IZHINX-LABEL: br_fcmp_oeq_alt: 252; RV32IZHINX: # %bb.0: 253; RV32IZHINX-NEXT: feq.h a0, a0, a1 254; RV32IZHINX-NEXT: bnez a0, .LBB2_2 255; RV32IZHINX-NEXT: # %bb.1: # %if.else 256; RV32IZHINX-NEXT: ret 257; RV32IZHINX-NEXT: .LBB2_2: # %if.then 258; RV32IZHINX-NEXT: addi sp, sp, -16 259; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 260; RV32IZHINX-NEXT: call abort 261; 262; RV64IZHINX-LABEL: br_fcmp_oeq_alt: 263; RV64IZHINX: # %bb.0: 264; RV64IZHINX-NEXT: feq.h a0, a0, a1 265; RV64IZHINX-NEXT: bnez a0, .LBB2_2 266; RV64IZHINX-NEXT: # %bb.1: # %if.else 267; RV64IZHINX-NEXT: ret 268; RV64IZHINX-NEXT: .LBB2_2: # %if.then 269; RV64IZHINX-NEXT: addi sp, sp, -16 270; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 271; RV64IZHINX-NEXT: call abort 272; 273; RV32IZFHMIN-LABEL: br_fcmp_oeq_alt: 274; RV32IZFHMIN: # %bb.0: 275; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 276; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 277; RV32IZFHMIN-NEXT: feq.s a0, fa4, fa5 278; RV32IZFHMIN-NEXT: bnez a0, .LBB2_2 279; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 280; RV32IZFHMIN-NEXT: ret 281; RV32IZFHMIN-NEXT: .LBB2_2: # %if.then 282; RV32IZFHMIN-NEXT: addi sp, sp, -16 283; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 284; RV32IZFHMIN-NEXT: call abort 285; 286; RV64IZFHMIN-LABEL: br_fcmp_oeq_alt: 287; RV64IZFHMIN: # %bb.0: 288; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 289; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 290; RV64IZFHMIN-NEXT: feq.s a0, fa4, fa5 291; RV64IZFHMIN-NEXT: bnez a0, .LBB2_2 292; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 293; RV64IZFHMIN-NEXT: ret 294; RV64IZFHMIN-NEXT: .LBB2_2: # %if.then 295; RV64IZFHMIN-NEXT: addi sp, sp, -16 296; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 297; RV64IZFHMIN-NEXT: call abort 298; 299; RV32IZHINXMIN-LABEL: br_fcmp_oeq_alt: 300; RV32IZHINXMIN: # %bb.0: 301; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 302; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 303; RV32IZHINXMIN-NEXT: feq.s a0, a0, a1 304; RV32IZHINXMIN-NEXT: bnez a0, .LBB2_2 305; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 306; RV32IZHINXMIN-NEXT: ret 307; RV32IZHINXMIN-NEXT: .LBB2_2: # %if.then 308; RV32IZHINXMIN-NEXT: addi sp, sp, -16 309; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 310; RV32IZHINXMIN-NEXT: call abort 311; 312; RV64IZHINXMIN-LABEL: br_fcmp_oeq_alt: 313; RV64IZHINXMIN: # %bb.0: 314; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 315; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 316; RV64IZHINXMIN-NEXT: feq.s a0, a0, a1 317; RV64IZHINXMIN-NEXT: bnez a0, .LBB2_2 318; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 319; RV64IZHINXMIN-NEXT: ret 320; RV64IZHINXMIN-NEXT: .LBB2_2: # %if.then 321; RV64IZHINXMIN-NEXT: addi sp, sp, -16 322; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 323; RV64IZHINXMIN-NEXT: call abort 324 %1 = fcmp oeq half %a, %b 325 br i1 %1, label %if.then, label %if.else 326if.then: 327 tail call void @abort() 328 unreachable 329if.else: 330 ret void 331} 332 333define void @br_fcmp_ogt(half %a, half %b) nounwind { 334; RV32IZFH-LABEL: br_fcmp_ogt: 335; RV32IZFH: # %bb.0: 336; RV32IZFH-NEXT: flt.h a0, fa1, fa0 337; RV32IZFH-NEXT: bnez a0, .LBB3_2 338; RV32IZFH-NEXT: # %bb.1: # %if.else 339; RV32IZFH-NEXT: ret 340; RV32IZFH-NEXT: .LBB3_2: # %if.then 341; RV32IZFH-NEXT: addi sp, sp, -16 342; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 343; RV32IZFH-NEXT: call abort 344; 345; RV64IZFH-LABEL: br_fcmp_ogt: 346; RV64IZFH: # %bb.0: 347; RV64IZFH-NEXT: flt.h a0, fa1, fa0 348; RV64IZFH-NEXT: bnez a0, .LBB3_2 349; RV64IZFH-NEXT: # %bb.1: # %if.else 350; RV64IZFH-NEXT: ret 351; RV64IZFH-NEXT: .LBB3_2: # %if.then 352; RV64IZFH-NEXT: addi sp, sp, -16 353; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 354; RV64IZFH-NEXT: call abort 355; 356; RV32IZHINX-LABEL: br_fcmp_ogt: 357; RV32IZHINX: # %bb.0: 358; RV32IZHINX-NEXT: flt.h a0, a1, a0 359; RV32IZHINX-NEXT: bnez a0, .LBB3_2 360; RV32IZHINX-NEXT: # %bb.1: # %if.else 361; RV32IZHINX-NEXT: ret 362; RV32IZHINX-NEXT: .LBB3_2: # %if.then 363; RV32IZHINX-NEXT: addi sp, sp, -16 364; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 365; RV32IZHINX-NEXT: call abort 366; 367; RV64IZHINX-LABEL: br_fcmp_ogt: 368; RV64IZHINX: # %bb.0: 369; RV64IZHINX-NEXT: flt.h a0, a1, a0 370; RV64IZHINX-NEXT: bnez a0, .LBB3_2 371; RV64IZHINX-NEXT: # %bb.1: # %if.else 372; RV64IZHINX-NEXT: ret 373; RV64IZHINX-NEXT: .LBB3_2: # %if.then 374; RV64IZHINX-NEXT: addi sp, sp, -16 375; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 376; RV64IZHINX-NEXT: call abort 377; 378; RV32IZFHMIN-LABEL: br_fcmp_ogt: 379; RV32IZFHMIN: # %bb.0: 380; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0 381; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa1 382; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5 383; RV32IZFHMIN-NEXT: bnez a0, .LBB3_2 384; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 385; RV32IZFHMIN-NEXT: ret 386; RV32IZFHMIN-NEXT: .LBB3_2: # %if.then 387; RV32IZFHMIN-NEXT: addi sp, sp, -16 388; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 389; RV32IZFHMIN-NEXT: call abort 390; 391; RV64IZFHMIN-LABEL: br_fcmp_ogt: 392; RV64IZFHMIN: # %bb.0: 393; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0 394; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa1 395; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5 396; RV64IZFHMIN-NEXT: bnez a0, .LBB3_2 397; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 398; RV64IZFHMIN-NEXT: ret 399; RV64IZFHMIN-NEXT: .LBB3_2: # %if.then 400; RV64IZFHMIN-NEXT: addi sp, sp, -16 401; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 402; RV64IZFHMIN-NEXT: call abort 403; 404; RV32IZHINXMIN-LABEL: br_fcmp_ogt: 405; RV32IZHINXMIN: # %bb.0: 406; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 407; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 408; RV32IZHINXMIN-NEXT: flt.s a0, a1, a0 409; RV32IZHINXMIN-NEXT: bnez a0, .LBB3_2 410; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 411; RV32IZHINXMIN-NEXT: ret 412; RV32IZHINXMIN-NEXT: .LBB3_2: # %if.then 413; RV32IZHINXMIN-NEXT: addi sp, sp, -16 414; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 415; RV32IZHINXMIN-NEXT: call abort 416; 417; RV64IZHINXMIN-LABEL: br_fcmp_ogt: 418; RV64IZHINXMIN: # %bb.0: 419; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 420; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 421; RV64IZHINXMIN-NEXT: flt.s a0, a1, a0 422; RV64IZHINXMIN-NEXT: bnez a0, .LBB3_2 423; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 424; RV64IZHINXMIN-NEXT: ret 425; RV64IZHINXMIN-NEXT: .LBB3_2: # %if.then 426; RV64IZHINXMIN-NEXT: addi sp, sp, -16 427; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 428; RV64IZHINXMIN-NEXT: call abort 429 %1 = fcmp ogt half %a, %b 430 br i1 %1, label %if.then, label %if.else 431if.else: 432 ret void 433if.then: 434 tail call void @abort() 435 unreachable 436} 437 438define void @br_fcmp_oge(half %a, half %b) nounwind { 439; RV32IZFH-LABEL: br_fcmp_oge: 440; RV32IZFH: # %bb.0: 441; RV32IZFH-NEXT: fle.h a0, fa1, fa0 442; RV32IZFH-NEXT: bnez a0, .LBB4_2 443; RV32IZFH-NEXT: # %bb.1: # %if.else 444; RV32IZFH-NEXT: ret 445; RV32IZFH-NEXT: .LBB4_2: # %if.then 446; RV32IZFH-NEXT: addi sp, sp, -16 447; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 448; RV32IZFH-NEXT: call abort 449; 450; RV64IZFH-LABEL: br_fcmp_oge: 451; RV64IZFH: # %bb.0: 452; RV64IZFH-NEXT: fle.h a0, fa1, fa0 453; RV64IZFH-NEXT: bnez a0, .LBB4_2 454; RV64IZFH-NEXT: # %bb.1: # %if.else 455; RV64IZFH-NEXT: ret 456; RV64IZFH-NEXT: .LBB4_2: # %if.then 457; RV64IZFH-NEXT: addi sp, sp, -16 458; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 459; RV64IZFH-NEXT: call abort 460; 461; RV32IZHINX-LABEL: br_fcmp_oge: 462; RV32IZHINX: # %bb.0: 463; RV32IZHINX-NEXT: fle.h a0, a1, a0 464; RV32IZHINX-NEXT: bnez a0, .LBB4_2 465; RV32IZHINX-NEXT: # %bb.1: # %if.else 466; RV32IZHINX-NEXT: ret 467; RV32IZHINX-NEXT: .LBB4_2: # %if.then 468; RV32IZHINX-NEXT: addi sp, sp, -16 469; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 470; RV32IZHINX-NEXT: call abort 471; 472; RV64IZHINX-LABEL: br_fcmp_oge: 473; RV64IZHINX: # %bb.0: 474; RV64IZHINX-NEXT: fle.h a0, a1, a0 475; RV64IZHINX-NEXT: bnez a0, .LBB4_2 476; RV64IZHINX-NEXT: # %bb.1: # %if.else 477; RV64IZHINX-NEXT: ret 478; RV64IZHINX-NEXT: .LBB4_2: # %if.then 479; RV64IZHINX-NEXT: addi sp, sp, -16 480; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 481; RV64IZHINX-NEXT: call abort 482; 483; RV32IZFHMIN-LABEL: br_fcmp_oge: 484; RV32IZFHMIN: # %bb.0: 485; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0 486; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa1 487; RV32IZFHMIN-NEXT: fle.s a0, fa4, fa5 488; RV32IZFHMIN-NEXT: bnez a0, .LBB4_2 489; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 490; RV32IZFHMIN-NEXT: ret 491; RV32IZFHMIN-NEXT: .LBB4_2: # %if.then 492; RV32IZFHMIN-NEXT: addi sp, sp, -16 493; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 494; RV32IZFHMIN-NEXT: call abort 495; 496; RV64IZFHMIN-LABEL: br_fcmp_oge: 497; RV64IZFHMIN: # %bb.0: 498; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0 499; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa1 500; RV64IZFHMIN-NEXT: fle.s a0, fa4, fa5 501; RV64IZFHMIN-NEXT: bnez a0, .LBB4_2 502; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 503; RV64IZFHMIN-NEXT: ret 504; RV64IZFHMIN-NEXT: .LBB4_2: # %if.then 505; RV64IZFHMIN-NEXT: addi sp, sp, -16 506; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 507; RV64IZFHMIN-NEXT: call abort 508; 509; RV32IZHINXMIN-LABEL: br_fcmp_oge: 510; RV32IZHINXMIN: # %bb.0: 511; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 512; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 513; RV32IZHINXMIN-NEXT: fle.s a0, a1, a0 514; RV32IZHINXMIN-NEXT: bnez a0, .LBB4_2 515; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 516; RV32IZHINXMIN-NEXT: ret 517; RV32IZHINXMIN-NEXT: .LBB4_2: # %if.then 518; RV32IZHINXMIN-NEXT: addi sp, sp, -16 519; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 520; RV32IZHINXMIN-NEXT: call abort 521; 522; RV64IZHINXMIN-LABEL: br_fcmp_oge: 523; RV64IZHINXMIN: # %bb.0: 524; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 525; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 526; RV64IZHINXMIN-NEXT: fle.s a0, a1, a0 527; RV64IZHINXMIN-NEXT: bnez a0, .LBB4_2 528; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 529; RV64IZHINXMIN-NEXT: ret 530; RV64IZHINXMIN-NEXT: .LBB4_2: # %if.then 531; RV64IZHINXMIN-NEXT: addi sp, sp, -16 532; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 533; RV64IZHINXMIN-NEXT: call abort 534 %1 = fcmp oge half %a, %b 535 br i1 %1, label %if.then, label %if.else 536if.else: 537 ret void 538if.then: 539 tail call void @abort() 540 unreachable 541} 542 543define void @br_fcmp_olt(half %a, half %b) nounwind { 544; RV32IZFH-LABEL: br_fcmp_olt: 545; RV32IZFH: # %bb.0: 546; RV32IZFH-NEXT: flt.h a0, fa0, fa1 547; RV32IZFH-NEXT: bnez a0, .LBB5_2 548; RV32IZFH-NEXT: # %bb.1: # %if.else 549; RV32IZFH-NEXT: ret 550; RV32IZFH-NEXT: .LBB5_2: # %if.then 551; RV32IZFH-NEXT: addi sp, sp, -16 552; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 553; RV32IZFH-NEXT: call abort 554; 555; RV64IZFH-LABEL: br_fcmp_olt: 556; RV64IZFH: # %bb.0: 557; RV64IZFH-NEXT: flt.h a0, fa0, fa1 558; RV64IZFH-NEXT: bnez a0, .LBB5_2 559; RV64IZFH-NEXT: # %bb.1: # %if.else 560; RV64IZFH-NEXT: ret 561; RV64IZFH-NEXT: .LBB5_2: # %if.then 562; RV64IZFH-NEXT: addi sp, sp, -16 563; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 564; RV64IZFH-NEXT: call abort 565; 566; RV32IZHINX-LABEL: br_fcmp_olt: 567; RV32IZHINX: # %bb.0: 568; RV32IZHINX-NEXT: flt.h a0, a0, a1 569; RV32IZHINX-NEXT: bnez a0, .LBB5_2 570; RV32IZHINX-NEXT: # %bb.1: # %if.else 571; RV32IZHINX-NEXT: ret 572; RV32IZHINX-NEXT: .LBB5_2: # %if.then 573; RV32IZHINX-NEXT: addi sp, sp, -16 574; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 575; RV32IZHINX-NEXT: call abort 576; 577; RV64IZHINX-LABEL: br_fcmp_olt: 578; RV64IZHINX: # %bb.0: 579; RV64IZHINX-NEXT: flt.h a0, a0, a1 580; RV64IZHINX-NEXT: bnez a0, .LBB5_2 581; RV64IZHINX-NEXT: # %bb.1: # %if.else 582; RV64IZHINX-NEXT: ret 583; RV64IZHINX-NEXT: .LBB5_2: # %if.then 584; RV64IZHINX-NEXT: addi sp, sp, -16 585; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 586; RV64IZHINX-NEXT: call abort 587; 588; RV32IZFHMIN-LABEL: br_fcmp_olt: 589; RV32IZFHMIN: # %bb.0: 590; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 591; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 592; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5 593; RV32IZFHMIN-NEXT: bnez a0, .LBB5_2 594; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 595; RV32IZFHMIN-NEXT: ret 596; RV32IZFHMIN-NEXT: .LBB5_2: # %if.then 597; RV32IZFHMIN-NEXT: addi sp, sp, -16 598; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 599; RV32IZFHMIN-NEXT: call abort 600; 601; RV64IZFHMIN-LABEL: br_fcmp_olt: 602; RV64IZFHMIN: # %bb.0: 603; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 604; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 605; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5 606; RV64IZFHMIN-NEXT: bnez a0, .LBB5_2 607; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 608; RV64IZFHMIN-NEXT: ret 609; RV64IZFHMIN-NEXT: .LBB5_2: # %if.then 610; RV64IZFHMIN-NEXT: addi sp, sp, -16 611; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 612; RV64IZFHMIN-NEXT: call abort 613; 614; RV32IZHINXMIN-LABEL: br_fcmp_olt: 615; RV32IZHINXMIN: # %bb.0: 616; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 617; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 618; RV32IZHINXMIN-NEXT: flt.s a0, a0, a1 619; RV32IZHINXMIN-NEXT: bnez a0, .LBB5_2 620; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 621; RV32IZHINXMIN-NEXT: ret 622; RV32IZHINXMIN-NEXT: .LBB5_2: # %if.then 623; RV32IZHINXMIN-NEXT: addi sp, sp, -16 624; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 625; RV32IZHINXMIN-NEXT: call abort 626; 627; RV64IZHINXMIN-LABEL: br_fcmp_olt: 628; RV64IZHINXMIN: # %bb.0: 629; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 630; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 631; RV64IZHINXMIN-NEXT: flt.s a0, a0, a1 632; RV64IZHINXMIN-NEXT: bnez a0, .LBB5_2 633; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 634; RV64IZHINXMIN-NEXT: ret 635; RV64IZHINXMIN-NEXT: .LBB5_2: # %if.then 636; RV64IZHINXMIN-NEXT: addi sp, sp, -16 637; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 638; RV64IZHINXMIN-NEXT: call abort 639 %1 = fcmp olt half %a, %b 640 br i1 %1, label %if.then, label %if.else 641if.else: 642 ret void 643if.then: 644 tail call void @abort() 645 unreachable 646} 647 648define void @br_fcmp_ole(half %a, half %b) nounwind { 649; RV32IZFH-LABEL: br_fcmp_ole: 650; RV32IZFH: # %bb.0: 651; RV32IZFH-NEXT: fle.h a0, fa0, fa1 652; RV32IZFH-NEXT: bnez a0, .LBB6_2 653; RV32IZFH-NEXT: # %bb.1: # %if.else 654; RV32IZFH-NEXT: ret 655; RV32IZFH-NEXT: .LBB6_2: # %if.then 656; RV32IZFH-NEXT: addi sp, sp, -16 657; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 658; RV32IZFH-NEXT: call abort 659; 660; RV64IZFH-LABEL: br_fcmp_ole: 661; RV64IZFH: # %bb.0: 662; RV64IZFH-NEXT: fle.h a0, fa0, fa1 663; RV64IZFH-NEXT: bnez a0, .LBB6_2 664; RV64IZFH-NEXT: # %bb.1: # %if.else 665; RV64IZFH-NEXT: ret 666; RV64IZFH-NEXT: .LBB6_2: # %if.then 667; RV64IZFH-NEXT: addi sp, sp, -16 668; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 669; RV64IZFH-NEXT: call abort 670; 671; RV32IZHINX-LABEL: br_fcmp_ole: 672; RV32IZHINX: # %bb.0: 673; RV32IZHINX-NEXT: fle.h a0, a0, a1 674; RV32IZHINX-NEXT: bnez a0, .LBB6_2 675; RV32IZHINX-NEXT: # %bb.1: # %if.else 676; RV32IZHINX-NEXT: ret 677; RV32IZHINX-NEXT: .LBB6_2: # %if.then 678; RV32IZHINX-NEXT: addi sp, sp, -16 679; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 680; RV32IZHINX-NEXT: call abort 681; 682; RV64IZHINX-LABEL: br_fcmp_ole: 683; RV64IZHINX: # %bb.0: 684; RV64IZHINX-NEXT: fle.h a0, a0, a1 685; RV64IZHINX-NEXT: bnez a0, .LBB6_2 686; RV64IZHINX-NEXT: # %bb.1: # %if.else 687; RV64IZHINX-NEXT: ret 688; RV64IZHINX-NEXT: .LBB6_2: # %if.then 689; RV64IZHINX-NEXT: addi sp, sp, -16 690; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 691; RV64IZHINX-NEXT: call abort 692; 693; RV32IZFHMIN-LABEL: br_fcmp_ole: 694; RV32IZFHMIN: # %bb.0: 695; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 696; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 697; RV32IZFHMIN-NEXT: fle.s a0, fa4, fa5 698; RV32IZFHMIN-NEXT: bnez a0, .LBB6_2 699; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 700; RV32IZFHMIN-NEXT: ret 701; RV32IZFHMIN-NEXT: .LBB6_2: # %if.then 702; RV32IZFHMIN-NEXT: addi sp, sp, -16 703; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 704; RV32IZFHMIN-NEXT: call abort 705; 706; RV64IZFHMIN-LABEL: br_fcmp_ole: 707; RV64IZFHMIN: # %bb.0: 708; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 709; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 710; RV64IZFHMIN-NEXT: fle.s a0, fa4, fa5 711; RV64IZFHMIN-NEXT: bnez a0, .LBB6_2 712; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 713; RV64IZFHMIN-NEXT: ret 714; RV64IZFHMIN-NEXT: .LBB6_2: # %if.then 715; RV64IZFHMIN-NEXT: addi sp, sp, -16 716; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 717; RV64IZFHMIN-NEXT: call abort 718; 719; RV32IZHINXMIN-LABEL: br_fcmp_ole: 720; RV32IZHINXMIN: # %bb.0: 721; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 722; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 723; RV32IZHINXMIN-NEXT: fle.s a0, a0, a1 724; RV32IZHINXMIN-NEXT: bnez a0, .LBB6_2 725; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 726; RV32IZHINXMIN-NEXT: ret 727; RV32IZHINXMIN-NEXT: .LBB6_2: # %if.then 728; RV32IZHINXMIN-NEXT: addi sp, sp, -16 729; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 730; RV32IZHINXMIN-NEXT: call abort 731; 732; RV64IZHINXMIN-LABEL: br_fcmp_ole: 733; RV64IZHINXMIN: # %bb.0: 734; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 735; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 736; RV64IZHINXMIN-NEXT: fle.s a0, a0, a1 737; RV64IZHINXMIN-NEXT: bnez a0, .LBB6_2 738; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 739; RV64IZHINXMIN-NEXT: ret 740; RV64IZHINXMIN-NEXT: .LBB6_2: # %if.then 741; RV64IZHINXMIN-NEXT: addi sp, sp, -16 742; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 743; RV64IZHINXMIN-NEXT: call abort 744 %1 = fcmp ole half %a, %b 745 br i1 %1, label %if.then, label %if.else 746if.else: 747 ret void 748if.then: 749 tail call void @abort() 750 unreachable 751} 752 753define void @br_fcmp_one(half %a, half %b) nounwind { 754; RV32IZFH-LABEL: br_fcmp_one: 755; RV32IZFH: # %bb.0: 756; RV32IZFH-NEXT: flt.h a0, fa0, fa1 757; RV32IZFH-NEXT: flt.h a1, fa1, fa0 758; RV32IZFH-NEXT: or a0, a1, a0 759; RV32IZFH-NEXT: bnez a0, .LBB7_2 760; RV32IZFH-NEXT: # %bb.1: # %if.else 761; RV32IZFH-NEXT: ret 762; RV32IZFH-NEXT: .LBB7_2: # %if.then 763; RV32IZFH-NEXT: addi sp, sp, -16 764; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 765; RV32IZFH-NEXT: call abort 766; 767; RV64IZFH-LABEL: br_fcmp_one: 768; RV64IZFH: # %bb.0: 769; RV64IZFH-NEXT: flt.h a0, fa0, fa1 770; RV64IZFH-NEXT: flt.h a1, fa1, fa0 771; RV64IZFH-NEXT: or a0, a1, a0 772; RV64IZFH-NEXT: bnez a0, .LBB7_2 773; RV64IZFH-NEXT: # %bb.1: # %if.else 774; RV64IZFH-NEXT: ret 775; RV64IZFH-NEXT: .LBB7_2: # %if.then 776; RV64IZFH-NEXT: addi sp, sp, -16 777; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 778; RV64IZFH-NEXT: call abort 779; 780; RV32IZHINX-LABEL: br_fcmp_one: 781; RV32IZHINX: # %bb.0: 782; RV32IZHINX-NEXT: flt.h a2, a0, a1 783; RV32IZHINX-NEXT: flt.h a0, a1, a0 784; RV32IZHINX-NEXT: or a0, a0, a2 785; RV32IZHINX-NEXT: bnez a0, .LBB7_2 786; RV32IZHINX-NEXT: # %bb.1: # %if.else 787; RV32IZHINX-NEXT: ret 788; RV32IZHINX-NEXT: .LBB7_2: # %if.then 789; RV32IZHINX-NEXT: addi sp, sp, -16 790; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 791; RV32IZHINX-NEXT: call abort 792; 793; RV64IZHINX-LABEL: br_fcmp_one: 794; RV64IZHINX: # %bb.0: 795; RV64IZHINX-NEXT: flt.h a2, a0, a1 796; RV64IZHINX-NEXT: flt.h a0, a1, a0 797; RV64IZHINX-NEXT: or a0, a0, a2 798; RV64IZHINX-NEXT: bnez a0, .LBB7_2 799; RV64IZHINX-NEXT: # %bb.1: # %if.else 800; RV64IZHINX-NEXT: ret 801; RV64IZHINX-NEXT: .LBB7_2: # %if.then 802; RV64IZHINX-NEXT: addi sp, sp, -16 803; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 804; RV64IZHINX-NEXT: call abort 805; 806; RV32IZFHMIN-LABEL: br_fcmp_one: 807; RV32IZFHMIN: # %bb.0: 808; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 809; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 810; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5 811; RV32IZFHMIN-NEXT: flt.s a1, fa5, fa4 812; RV32IZFHMIN-NEXT: or a0, a1, a0 813; RV32IZFHMIN-NEXT: bnez a0, .LBB7_2 814; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 815; RV32IZFHMIN-NEXT: ret 816; RV32IZFHMIN-NEXT: .LBB7_2: # %if.then 817; RV32IZFHMIN-NEXT: addi sp, sp, -16 818; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 819; RV32IZFHMIN-NEXT: call abort 820; 821; RV64IZFHMIN-LABEL: br_fcmp_one: 822; RV64IZFHMIN: # %bb.0: 823; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 824; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 825; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5 826; RV64IZFHMIN-NEXT: flt.s a1, fa5, fa4 827; RV64IZFHMIN-NEXT: or a0, a1, a0 828; RV64IZFHMIN-NEXT: bnez a0, .LBB7_2 829; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 830; RV64IZFHMIN-NEXT: ret 831; RV64IZFHMIN-NEXT: .LBB7_2: # %if.then 832; RV64IZFHMIN-NEXT: addi sp, sp, -16 833; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 834; RV64IZFHMIN-NEXT: call abort 835; 836; RV32IZHINXMIN-LABEL: br_fcmp_one: 837; RV32IZHINXMIN: # %bb.0: 838; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 839; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 840; RV32IZHINXMIN-NEXT: flt.s a2, a0, a1 841; RV32IZHINXMIN-NEXT: flt.s a0, a1, a0 842; RV32IZHINXMIN-NEXT: or a0, a0, a2 843; RV32IZHINXMIN-NEXT: bnez a0, .LBB7_2 844; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 845; RV32IZHINXMIN-NEXT: ret 846; RV32IZHINXMIN-NEXT: .LBB7_2: # %if.then 847; RV32IZHINXMIN-NEXT: addi sp, sp, -16 848; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 849; RV32IZHINXMIN-NEXT: call abort 850; 851; RV64IZHINXMIN-LABEL: br_fcmp_one: 852; RV64IZHINXMIN: # %bb.0: 853; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 854; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 855; RV64IZHINXMIN-NEXT: flt.s a2, a0, a1 856; RV64IZHINXMIN-NEXT: flt.s a0, a1, a0 857; RV64IZHINXMIN-NEXT: or a0, a0, a2 858; RV64IZHINXMIN-NEXT: bnez a0, .LBB7_2 859; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 860; RV64IZHINXMIN-NEXT: ret 861; RV64IZHINXMIN-NEXT: .LBB7_2: # %if.then 862; RV64IZHINXMIN-NEXT: addi sp, sp, -16 863; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 864; RV64IZHINXMIN-NEXT: call abort 865 %1 = fcmp one half %a, %b 866 br i1 %1, label %if.then, label %if.else 867if.else: 868 ret void 869if.then: 870 tail call void @abort() 871 unreachable 872} 873 874define void @br_fcmp_ord(half %a, half %b) nounwind { 875; RV32IZFH-LABEL: br_fcmp_ord: 876; RV32IZFH: # %bb.0: 877; RV32IZFH-NEXT: feq.h a0, fa1, fa1 878; RV32IZFH-NEXT: feq.h a1, fa0, fa0 879; RV32IZFH-NEXT: and a0, a1, a0 880; RV32IZFH-NEXT: bnez a0, .LBB8_2 881; RV32IZFH-NEXT: # %bb.1: # %if.else 882; RV32IZFH-NEXT: ret 883; RV32IZFH-NEXT: .LBB8_2: # %if.then 884; RV32IZFH-NEXT: addi sp, sp, -16 885; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 886; RV32IZFH-NEXT: call abort 887; 888; RV64IZFH-LABEL: br_fcmp_ord: 889; RV64IZFH: # %bb.0: 890; RV64IZFH-NEXT: feq.h a0, fa1, fa1 891; RV64IZFH-NEXT: feq.h a1, fa0, fa0 892; RV64IZFH-NEXT: and a0, a1, a0 893; RV64IZFH-NEXT: bnez a0, .LBB8_2 894; RV64IZFH-NEXT: # %bb.1: # %if.else 895; RV64IZFH-NEXT: ret 896; RV64IZFH-NEXT: .LBB8_2: # %if.then 897; RV64IZFH-NEXT: addi sp, sp, -16 898; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 899; RV64IZFH-NEXT: call abort 900; 901; RV32IZHINX-LABEL: br_fcmp_ord: 902; RV32IZHINX: # %bb.0: 903; RV32IZHINX-NEXT: feq.h a1, a1, a1 904; RV32IZHINX-NEXT: feq.h a0, a0, a0 905; RV32IZHINX-NEXT: and a0, a0, a1 906; RV32IZHINX-NEXT: bnez a0, .LBB8_2 907; RV32IZHINX-NEXT: # %bb.1: # %if.else 908; RV32IZHINX-NEXT: ret 909; RV32IZHINX-NEXT: .LBB8_2: # %if.then 910; RV32IZHINX-NEXT: addi sp, sp, -16 911; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 912; RV32IZHINX-NEXT: call abort 913; 914; RV64IZHINX-LABEL: br_fcmp_ord: 915; RV64IZHINX: # %bb.0: 916; RV64IZHINX-NEXT: feq.h a1, a1, a1 917; RV64IZHINX-NEXT: feq.h a0, a0, a0 918; RV64IZHINX-NEXT: and a0, a0, a1 919; RV64IZHINX-NEXT: bnez a0, .LBB8_2 920; RV64IZHINX-NEXT: # %bb.1: # %if.else 921; RV64IZHINX-NEXT: ret 922; RV64IZHINX-NEXT: .LBB8_2: # %if.then 923; RV64IZHINX-NEXT: addi sp, sp, -16 924; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 925; RV64IZHINX-NEXT: call abort 926; 927; RV32IZFHMIN-LABEL: br_fcmp_ord: 928; RV32IZFHMIN: # %bb.0: 929; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 930; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 931; RV32IZFHMIN-NEXT: feq.s a0, fa5, fa5 932; RV32IZFHMIN-NEXT: feq.s a1, fa4, fa4 933; RV32IZFHMIN-NEXT: and a0, a1, a0 934; RV32IZFHMIN-NEXT: bnez a0, .LBB8_2 935; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 936; RV32IZFHMIN-NEXT: ret 937; RV32IZFHMIN-NEXT: .LBB8_2: # %if.then 938; RV32IZFHMIN-NEXT: addi sp, sp, -16 939; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 940; RV32IZFHMIN-NEXT: call abort 941; 942; RV64IZFHMIN-LABEL: br_fcmp_ord: 943; RV64IZFHMIN: # %bb.0: 944; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 945; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 946; RV64IZFHMIN-NEXT: feq.s a0, fa5, fa5 947; RV64IZFHMIN-NEXT: feq.s a1, fa4, fa4 948; RV64IZFHMIN-NEXT: and a0, a1, a0 949; RV64IZFHMIN-NEXT: bnez a0, .LBB8_2 950; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 951; RV64IZFHMIN-NEXT: ret 952; RV64IZFHMIN-NEXT: .LBB8_2: # %if.then 953; RV64IZFHMIN-NEXT: addi sp, sp, -16 954; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 955; RV64IZFHMIN-NEXT: call abort 956; 957; RV32IZHINXMIN-LABEL: br_fcmp_ord: 958; RV32IZHINXMIN: # %bb.0: 959; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 960; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 961; RV32IZHINXMIN-NEXT: feq.s a1, a1, a1 962; RV32IZHINXMIN-NEXT: feq.s a0, a0, a0 963; RV32IZHINXMIN-NEXT: and a0, a0, a1 964; RV32IZHINXMIN-NEXT: bnez a0, .LBB8_2 965; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 966; RV32IZHINXMIN-NEXT: ret 967; RV32IZHINXMIN-NEXT: .LBB8_2: # %if.then 968; RV32IZHINXMIN-NEXT: addi sp, sp, -16 969; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 970; RV32IZHINXMIN-NEXT: call abort 971; 972; RV64IZHINXMIN-LABEL: br_fcmp_ord: 973; RV64IZHINXMIN: # %bb.0: 974; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 975; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 976; RV64IZHINXMIN-NEXT: feq.s a1, a1, a1 977; RV64IZHINXMIN-NEXT: feq.s a0, a0, a0 978; RV64IZHINXMIN-NEXT: and a0, a0, a1 979; RV64IZHINXMIN-NEXT: bnez a0, .LBB8_2 980; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 981; RV64IZHINXMIN-NEXT: ret 982; RV64IZHINXMIN-NEXT: .LBB8_2: # %if.then 983; RV64IZHINXMIN-NEXT: addi sp, sp, -16 984; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 985; RV64IZHINXMIN-NEXT: call abort 986 %1 = fcmp ord half %a, %b 987 br i1 %1, label %if.then, label %if.else 988if.else: 989 ret void 990if.then: 991 tail call void @abort() 992 unreachable 993} 994 995define void @br_fcmp_ueq(half %a, half %b) nounwind { 996; RV32IZFH-LABEL: br_fcmp_ueq: 997; RV32IZFH: # %bb.0: 998; RV32IZFH-NEXT: flt.h a0, fa0, fa1 999; RV32IZFH-NEXT: flt.h a1, fa1, fa0 1000; RV32IZFH-NEXT: or a0, a1, a0 1001; RV32IZFH-NEXT: beqz a0, .LBB9_2 1002; RV32IZFH-NEXT: # %bb.1: # %if.else 1003; RV32IZFH-NEXT: ret 1004; RV32IZFH-NEXT: .LBB9_2: # %if.then 1005; RV32IZFH-NEXT: addi sp, sp, -16 1006; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1007; RV32IZFH-NEXT: call abort 1008; 1009; RV64IZFH-LABEL: br_fcmp_ueq: 1010; RV64IZFH: # %bb.0: 1011; RV64IZFH-NEXT: flt.h a0, fa0, fa1 1012; RV64IZFH-NEXT: flt.h a1, fa1, fa0 1013; RV64IZFH-NEXT: or a0, a1, a0 1014; RV64IZFH-NEXT: beqz a0, .LBB9_2 1015; RV64IZFH-NEXT: # %bb.1: # %if.else 1016; RV64IZFH-NEXT: ret 1017; RV64IZFH-NEXT: .LBB9_2: # %if.then 1018; RV64IZFH-NEXT: addi sp, sp, -16 1019; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1020; RV64IZFH-NEXT: call abort 1021; 1022; RV32IZHINX-LABEL: br_fcmp_ueq: 1023; RV32IZHINX: # %bb.0: 1024; RV32IZHINX-NEXT: flt.h a2, a0, a1 1025; RV32IZHINX-NEXT: flt.h a0, a1, a0 1026; RV32IZHINX-NEXT: or a0, a0, a2 1027; RV32IZHINX-NEXT: beqz a0, .LBB9_2 1028; RV32IZHINX-NEXT: # %bb.1: # %if.else 1029; RV32IZHINX-NEXT: ret 1030; RV32IZHINX-NEXT: .LBB9_2: # %if.then 1031; RV32IZHINX-NEXT: addi sp, sp, -16 1032; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1033; RV32IZHINX-NEXT: call abort 1034; 1035; RV64IZHINX-LABEL: br_fcmp_ueq: 1036; RV64IZHINX: # %bb.0: 1037; RV64IZHINX-NEXT: flt.h a2, a0, a1 1038; RV64IZHINX-NEXT: flt.h a0, a1, a0 1039; RV64IZHINX-NEXT: or a0, a0, a2 1040; RV64IZHINX-NEXT: beqz a0, .LBB9_2 1041; RV64IZHINX-NEXT: # %bb.1: # %if.else 1042; RV64IZHINX-NEXT: ret 1043; RV64IZHINX-NEXT: .LBB9_2: # %if.then 1044; RV64IZHINX-NEXT: addi sp, sp, -16 1045; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1046; RV64IZHINX-NEXT: call abort 1047; 1048; RV32IZFHMIN-LABEL: br_fcmp_ueq: 1049; RV32IZFHMIN: # %bb.0: 1050; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1051; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1052; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5 1053; RV32IZFHMIN-NEXT: flt.s a1, fa5, fa4 1054; RV32IZFHMIN-NEXT: or a0, a1, a0 1055; RV32IZFHMIN-NEXT: beqz a0, .LBB9_2 1056; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 1057; RV32IZFHMIN-NEXT: ret 1058; RV32IZFHMIN-NEXT: .LBB9_2: # %if.then 1059; RV32IZFHMIN-NEXT: addi sp, sp, -16 1060; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1061; RV32IZFHMIN-NEXT: call abort 1062; 1063; RV64IZFHMIN-LABEL: br_fcmp_ueq: 1064; RV64IZFHMIN: # %bb.0: 1065; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1066; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1067; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5 1068; RV64IZFHMIN-NEXT: flt.s a1, fa5, fa4 1069; RV64IZFHMIN-NEXT: or a0, a1, a0 1070; RV64IZFHMIN-NEXT: beqz a0, .LBB9_2 1071; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 1072; RV64IZFHMIN-NEXT: ret 1073; RV64IZFHMIN-NEXT: .LBB9_2: # %if.then 1074; RV64IZFHMIN-NEXT: addi sp, sp, -16 1075; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1076; RV64IZFHMIN-NEXT: call abort 1077; 1078; RV32IZHINXMIN-LABEL: br_fcmp_ueq: 1079; RV32IZHINXMIN: # %bb.0: 1080; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 1081; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 1082; RV32IZHINXMIN-NEXT: flt.s a2, a0, a1 1083; RV32IZHINXMIN-NEXT: flt.s a0, a1, a0 1084; RV32IZHINXMIN-NEXT: or a0, a0, a2 1085; RV32IZHINXMIN-NEXT: beqz a0, .LBB9_2 1086; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 1087; RV32IZHINXMIN-NEXT: ret 1088; RV32IZHINXMIN-NEXT: .LBB9_2: # %if.then 1089; RV32IZHINXMIN-NEXT: addi sp, sp, -16 1090; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1091; RV32IZHINXMIN-NEXT: call abort 1092; 1093; RV64IZHINXMIN-LABEL: br_fcmp_ueq: 1094; RV64IZHINXMIN: # %bb.0: 1095; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 1096; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 1097; RV64IZHINXMIN-NEXT: flt.s a2, a0, a1 1098; RV64IZHINXMIN-NEXT: flt.s a0, a1, a0 1099; RV64IZHINXMIN-NEXT: or a0, a0, a2 1100; RV64IZHINXMIN-NEXT: beqz a0, .LBB9_2 1101; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 1102; RV64IZHINXMIN-NEXT: ret 1103; RV64IZHINXMIN-NEXT: .LBB9_2: # %if.then 1104; RV64IZHINXMIN-NEXT: addi sp, sp, -16 1105; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1106; RV64IZHINXMIN-NEXT: call abort 1107 %1 = fcmp ueq half %a, %b 1108 br i1 %1, label %if.then, label %if.else 1109if.else: 1110 ret void 1111if.then: 1112 tail call void @abort() 1113 unreachable 1114} 1115 1116define void @br_fcmp_ugt(half %a, half %b) nounwind { 1117; RV32IZFH-LABEL: br_fcmp_ugt: 1118; RV32IZFH: # %bb.0: 1119; RV32IZFH-NEXT: fle.h a0, fa0, fa1 1120; RV32IZFH-NEXT: beqz a0, .LBB10_2 1121; RV32IZFH-NEXT: # %bb.1: # %if.else 1122; RV32IZFH-NEXT: ret 1123; RV32IZFH-NEXT: .LBB10_2: # %if.then 1124; RV32IZFH-NEXT: addi sp, sp, -16 1125; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1126; RV32IZFH-NEXT: call abort 1127; 1128; RV64IZFH-LABEL: br_fcmp_ugt: 1129; RV64IZFH: # %bb.0: 1130; RV64IZFH-NEXT: fle.h a0, fa0, fa1 1131; RV64IZFH-NEXT: beqz a0, .LBB10_2 1132; RV64IZFH-NEXT: # %bb.1: # %if.else 1133; RV64IZFH-NEXT: ret 1134; RV64IZFH-NEXT: .LBB10_2: # %if.then 1135; RV64IZFH-NEXT: addi sp, sp, -16 1136; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1137; RV64IZFH-NEXT: call abort 1138; 1139; RV32IZHINX-LABEL: br_fcmp_ugt: 1140; RV32IZHINX: # %bb.0: 1141; RV32IZHINX-NEXT: fle.h a0, a0, a1 1142; RV32IZHINX-NEXT: beqz a0, .LBB10_2 1143; RV32IZHINX-NEXT: # %bb.1: # %if.else 1144; RV32IZHINX-NEXT: ret 1145; RV32IZHINX-NEXT: .LBB10_2: # %if.then 1146; RV32IZHINX-NEXT: addi sp, sp, -16 1147; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1148; RV32IZHINX-NEXT: call abort 1149; 1150; RV64IZHINX-LABEL: br_fcmp_ugt: 1151; RV64IZHINX: # %bb.0: 1152; RV64IZHINX-NEXT: fle.h a0, a0, a1 1153; RV64IZHINX-NEXT: beqz a0, .LBB10_2 1154; RV64IZHINX-NEXT: # %bb.1: # %if.else 1155; RV64IZHINX-NEXT: ret 1156; RV64IZHINX-NEXT: .LBB10_2: # %if.then 1157; RV64IZHINX-NEXT: addi sp, sp, -16 1158; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1159; RV64IZHINX-NEXT: call abort 1160; 1161; RV32IZFHMIN-LABEL: br_fcmp_ugt: 1162; RV32IZFHMIN: # %bb.0: 1163; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1164; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1165; RV32IZFHMIN-NEXT: fle.s a0, fa4, fa5 1166; RV32IZFHMIN-NEXT: beqz a0, .LBB10_2 1167; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 1168; RV32IZFHMIN-NEXT: ret 1169; RV32IZFHMIN-NEXT: .LBB10_2: # %if.then 1170; RV32IZFHMIN-NEXT: addi sp, sp, -16 1171; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1172; RV32IZFHMIN-NEXT: call abort 1173; 1174; RV64IZFHMIN-LABEL: br_fcmp_ugt: 1175; RV64IZFHMIN: # %bb.0: 1176; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1177; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1178; RV64IZFHMIN-NEXT: fle.s a0, fa4, fa5 1179; RV64IZFHMIN-NEXT: beqz a0, .LBB10_2 1180; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 1181; RV64IZFHMIN-NEXT: ret 1182; RV64IZFHMIN-NEXT: .LBB10_2: # %if.then 1183; RV64IZFHMIN-NEXT: addi sp, sp, -16 1184; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1185; RV64IZFHMIN-NEXT: call abort 1186; 1187; RV32IZHINXMIN-LABEL: br_fcmp_ugt: 1188; RV32IZHINXMIN: # %bb.0: 1189; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 1190; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 1191; RV32IZHINXMIN-NEXT: fle.s a0, a0, a1 1192; RV32IZHINXMIN-NEXT: beqz a0, .LBB10_2 1193; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 1194; RV32IZHINXMIN-NEXT: ret 1195; RV32IZHINXMIN-NEXT: .LBB10_2: # %if.then 1196; RV32IZHINXMIN-NEXT: addi sp, sp, -16 1197; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1198; RV32IZHINXMIN-NEXT: call abort 1199; 1200; RV64IZHINXMIN-LABEL: br_fcmp_ugt: 1201; RV64IZHINXMIN: # %bb.0: 1202; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 1203; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 1204; RV64IZHINXMIN-NEXT: fle.s a0, a0, a1 1205; RV64IZHINXMIN-NEXT: beqz a0, .LBB10_2 1206; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 1207; RV64IZHINXMIN-NEXT: ret 1208; RV64IZHINXMIN-NEXT: .LBB10_2: # %if.then 1209; RV64IZHINXMIN-NEXT: addi sp, sp, -16 1210; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1211; RV64IZHINXMIN-NEXT: call abort 1212 %1 = fcmp ugt half %a, %b 1213 br i1 %1, label %if.then, label %if.else 1214if.else: 1215 ret void 1216if.then: 1217 tail call void @abort() 1218 unreachable 1219} 1220 1221define void @br_fcmp_uge(half %a, half %b) nounwind { 1222; RV32IZFH-LABEL: br_fcmp_uge: 1223; RV32IZFH: # %bb.0: 1224; RV32IZFH-NEXT: flt.h a0, fa0, fa1 1225; RV32IZFH-NEXT: beqz a0, .LBB11_2 1226; RV32IZFH-NEXT: # %bb.1: # %if.else 1227; RV32IZFH-NEXT: ret 1228; RV32IZFH-NEXT: .LBB11_2: # %if.then 1229; RV32IZFH-NEXT: addi sp, sp, -16 1230; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1231; RV32IZFH-NEXT: call abort 1232; 1233; RV64IZFH-LABEL: br_fcmp_uge: 1234; RV64IZFH: # %bb.0: 1235; RV64IZFH-NEXT: flt.h a0, fa0, fa1 1236; RV64IZFH-NEXT: beqz a0, .LBB11_2 1237; RV64IZFH-NEXT: # %bb.1: # %if.else 1238; RV64IZFH-NEXT: ret 1239; RV64IZFH-NEXT: .LBB11_2: # %if.then 1240; RV64IZFH-NEXT: addi sp, sp, -16 1241; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1242; RV64IZFH-NEXT: call abort 1243; 1244; RV32IZHINX-LABEL: br_fcmp_uge: 1245; RV32IZHINX: # %bb.0: 1246; RV32IZHINX-NEXT: flt.h a0, a0, a1 1247; RV32IZHINX-NEXT: beqz a0, .LBB11_2 1248; RV32IZHINX-NEXT: # %bb.1: # %if.else 1249; RV32IZHINX-NEXT: ret 1250; RV32IZHINX-NEXT: .LBB11_2: # %if.then 1251; RV32IZHINX-NEXT: addi sp, sp, -16 1252; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1253; RV32IZHINX-NEXT: call abort 1254; 1255; RV64IZHINX-LABEL: br_fcmp_uge: 1256; RV64IZHINX: # %bb.0: 1257; RV64IZHINX-NEXT: flt.h a0, a0, a1 1258; RV64IZHINX-NEXT: beqz a0, .LBB11_2 1259; RV64IZHINX-NEXT: # %bb.1: # %if.else 1260; RV64IZHINX-NEXT: ret 1261; RV64IZHINX-NEXT: .LBB11_2: # %if.then 1262; RV64IZHINX-NEXT: addi sp, sp, -16 1263; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1264; RV64IZHINX-NEXT: call abort 1265; 1266; RV32IZFHMIN-LABEL: br_fcmp_uge: 1267; RV32IZFHMIN: # %bb.0: 1268; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1269; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1270; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5 1271; RV32IZFHMIN-NEXT: beqz a0, .LBB11_2 1272; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 1273; RV32IZFHMIN-NEXT: ret 1274; RV32IZFHMIN-NEXT: .LBB11_2: # %if.then 1275; RV32IZFHMIN-NEXT: addi sp, sp, -16 1276; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1277; RV32IZFHMIN-NEXT: call abort 1278; 1279; RV64IZFHMIN-LABEL: br_fcmp_uge: 1280; RV64IZFHMIN: # %bb.0: 1281; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1282; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1283; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5 1284; RV64IZFHMIN-NEXT: beqz a0, .LBB11_2 1285; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 1286; RV64IZFHMIN-NEXT: ret 1287; RV64IZFHMIN-NEXT: .LBB11_2: # %if.then 1288; RV64IZFHMIN-NEXT: addi sp, sp, -16 1289; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1290; RV64IZFHMIN-NEXT: call abort 1291; 1292; RV32IZHINXMIN-LABEL: br_fcmp_uge: 1293; RV32IZHINXMIN: # %bb.0: 1294; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 1295; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 1296; RV32IZHINXMIN-NEXT: flt.s a0, a0, a1 1297; RV32IZHINXMIN-NEXT: beqz a0, .LBB11_2 1298; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 1299; RV32IZHINXMIN-NEXT: ret 1300; RV32IZHINXMIN-NEXT: .LBB11_2: # %if.then 1301; RV32IZHINXMIN-NEXT: addi sp, sp, -16 1302; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1303; RV32IZHINXMIN-NEXT: call abort 1304; 1305; RV64IZHINXMIN-LABEL: br_fcmp_uge: 1306; RV64IZHINXMIN: # %bb.0: 1307; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 1308; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 1309; RV64IZHINXMIN-NEXT: flt.s a0, a0, a1 1310; RV64IZHINXMIN-NEXT: beqz a0, .LBB11_2 1311; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 1312; RV64IZHINXMIN-NEXT: ret 1313; RV64IZHINXMIN-NEXT: .LBB11_2: # %if.then 1314; RV64IZHINXMIN-NEXT: addi sp, sp, -16 1315; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1316; RV64IZHINXMIN-NEXT: call abort 1317 %1 = fcmp uge half %a, %b 1318 br i1 %1, label %if.then, label %if.else 1319if.else: 1320 ret void 1321if.then: 1322 tail call void @abort() 1323 unreachable 1324} 1325 1326define void @br_fcmp_ult(half %a, half %b) nounwind { 1327; RV32IZFH-LABEL: br_fcmp_ult: 1328; RV32IZFH: # %bb.0: 1329; RV32IZFH-NEXT: fle.h a0, fa1, fa0 1330; RV32IZFH-NEXT: beqz a0, .LBB12_2 1331; RV32IZFH-NEXT: # %bb.1: # %if.else 1332; RV32IZFH-NEXT: ret 1333; RV32IZFH-NEXT: .LBB12_2: # %if.then 1334; RV32IZFH-NEXT: addi sp, sp, -16 1335; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1336; RV32IZFH-NEXT: call abort 1337; 1338; RV64IZFH-LABEL: br_fcmp_ult: 1339; RV64IZFH: # %bb.0: 1340; RV64IZFH-NEXT: fle.h a0, fa1, fa0 1341; RV64IZFH-NEXT: beqz a0, .LBB12_2 1342; RV64IZFH-NEXT: # %bb.1: # %if.else 1343; RV64IZFH-NEXT: ret 1344; RV64IZFH-NEXT: .LBB12_2: # %if.then 1345; RV64IZFH-NEXT: addi sp, sp, -16 1346; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1347; RV64IZFH-NEXT: call abort 1348; 1349; RV32IZHINX-LABEL: br_fcmp_ult: 1350; RV32IZHINX: # %bb.0: 1351; RV32IZHINX-NEXT: fle.h a0, a1, a0 1352; RV32IZHINX-NEXT: beqz a0, .LBB12_2 1353; RV32IZHINX-NEXT: # %bb.1: # %if.else 1354; RV32IZHINX-NEXT: ret 1355; RV32IZHINX-NEXT: .LBB12_2: # %if.then 1356; RV32IZHINX-NEXT: addi sp, sp, -16 1357; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1358; RV32IZHINX-NEXT: call abort 1359; 1360; RV64IZHINX-LABEL: br_fcmp_ult: 1361; RV64IZHINX: # %bb.0: 1362; RV64IZHINX-NEXT: fle.h a0, a1, a0 1363; RV64IZHINX-NEXT: beqz a0, .LBB12_2 1364; RV64IZHINX-NEXT: # %bb.1: # %if.else 1365; RV64IZHINX-NEXT: ret 1366; RV64IZHINX-NEXT: .LBB12_2: # %if.then 1367; RV64IZHINX-NEXT: addi sp, sp, -16 1368; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1369; RV64IZHINX-NEXT: call abort 1370; 1371; RV32IZFHMIN-LABEL: br_fcmp_ult: 1372; RV32IZFHMIN: # %bb.0: 1373; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0 1374; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa1 1375; RV32IZFHMIN-NEXT: fle.s a0, fa4, fa5 1376; RV32IZFHMIN-NEXT: beqz a0, .LBB12_2 1377; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 1378; RV32IZFHMIN-NEXT: ret 1379; RV32IZFHMIN-NEXT: .LBB12_2: # %if.then 1380; RV32IZFHMIN-NEXT: addi sp, sp, -16 1381; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1382; RV32IZFHMIN-NEXT: call abort 1383; 1384; RV64IZFHMIN-LABEL: br_fcmp_ult: 1385; RV64IZFHMIN: # %bb.0: 1386; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0 1387; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa1 1388; RV64IZFHMIN-NEXT: fle.s a0, fa4, fa5 1389; RV64IZFHMIN-NEXT: beqz a0, .LBB12_2 1390; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 1391; RV64IZFHMIN-NEXT: ret 1392; RV64IZFHMIN-NEXT: .LBB12_2: # %if.then 1393; RV64IZFHMIN-NEXT: addi sp, sp, -16 1394; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1395; RV64IZFHMIN-NEXT: call abort 1396; 1397; RV32IZHINXMIN-LABEL: br_fcmp_ult: 1398; RV32IZHINXMIN: # %bb.0: 1399; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 1400; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 1401; RV32IZHINXMIN-NEXT: fle.s a0, a1, a0 1402; RV32IZHINXMIN-NEXT: beqz a0, .LBB12_2 1403; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 1404; RV32IZHINXMIN-NEXT: ret 1405; RV32IZHINXMIN-NEXT: .LBB12_2: # %if.then 1406; RV32IZHINXMIN-NEXT: addi sp, sp, -16 1407; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1408; RV32IZHINXMIN-NEXT: call abort 1409; 1410; RV64IZHINXMIN-LABEL: br_fcmp_ult: 1411; RV64IZHINXMIN: # %bb.0: 1412; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 1413; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 1414; RV64IZHINXMIN-NEXT: fle.s a0, a1, a0 1415; RV64IZHINXMIN-NEXT: beqz a0, .LBB12_2 1416; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 1417; RV64IZHINXMIN-NEXT: ret 1418; RV64IZHINXMIN-NEXT: .LBB12_2: # %if.then 1419; RV64IZHINXMIN-NEXT: addi sp, sp, -16 1420; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1421; RV64IZHINXMIN-NEXT: call abort 1422 %1 = fcmp ult half %a, %b 1423 br i1 %1, label %if.then, label %if.else 1424if.else: 1425 ret void 1426if.then: 1427 tail call void @abort() 1428 unreachable 1429} 1430 1431define void @br_fcmp_ule(half %a, half %b) nounwind { 1432; RV32IZFH-LABEL: br_fcmp_ule: 1433; RV32IZFH: # %bb.0: 1434; RV32IZFH-NEXT: flt.h a0, fa1, fa0 1435; RV32IZFH-NEXT: beqz a0, .LBB13_2 1436; RV32IZFH-NEXT: # %bb.1: # %if.else 1437; RV32IZFH-NEXT: ret 1438; RV32IZFH-NEXT: .LBB13_2: # %if.then 1439; RV32IZFH-NEXT: addi sp, sp, -16 1440; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1441; RV32IZFH-NEXT: call abort 1442; 1443; RV64IZFH-LABEL: br_fcmp_ule: 1444; RV64IZFH: # %bb.0: 1445; RV64IZFH-NEXT: flt.h a0, fa1, fa0 1446; RV64IZFH-NEXT: beqz a0, .LBB13_2 1447; RV64IZFH-NEXT: # %bb.1: # %if.else 1448; RV64IZFH-NEXT: ret 1449; RV64IZFH-NEXT: .LBB13_2: # %if.then 1450; RV64IZFH-NEXT: addi sp, sp, -16 1451; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1452; RV64IZFH-NEXT: call abort 1453; 1454; RV32IZHINX-LABEL: br_fcmp_ule: 1455; RV32IZHINX: # %bb.0: 1456; RV32IZHINX-NEXT: flt.h a0, a1, a0 1457; RV32IZHINX-NEXT: beqz a0, .LBB13_2 1458; RV32IZHINX-NEXT: # %bb.1: # %if.else 1459; RV32IZHINX-NEXT: ret 1460; RV32IZHINX-NEXT: .LBB13_2: # %if.then 1461; RV32IZHINX-NEXT: addi sp, sp, -16 1462; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1463; RV32IZHINX-NEXT: call abort 1464; 1465; RV64IZHINX-LABEL: br_fcmp_ule: 1466; RV64IZHINX: # %bb.0: 1467; RV64IZHINX-NEXT: flt.h a0, a1, a0 1468; RV64IZHINX-NEXT: beqz a0, .LBB13_2 1469; RV64IZHINX-NEXT: # %bb.1: # %if.else 1470; RV64IZHINX-NEXT: ret 1471; RV64IZHINX-NEXT: .LBB13_2: # %if.then 1472; RV64IZHINX-NEXT: addi sp, sp, -16 1473; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1474; RV64IZHINX-NEXT: call abort 1475; 1476; RV32IZFHMIN-LABEL: br_fcmp_ule: 1477; RV32IZFHMIN: # %bb.0: 1478; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa0 1479; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa1 1480; RV32IZFHMIN-NEXT: flt.s a0, fa4, fa5 1481; RV32IZFHMIN-NEXT: beqz a0, .LBB13_2 1482; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 1483; RV32IZFHMIN-NEXT: ret 1484; RV32IZFHMIN-NEXT: .LBB13_2: # %if.then 1485; RV32IZFHMIN-NEXT: addi sp, sp, -16 1486; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1487; RV32IZFHMIN-NEXT: call abort 1488; 1489; RV64IZFHMIN-LABEL: br_fcmp_ule: 1490; RV64IZFHMIN: # %bb.0: 1491; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa0 1492; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa1 1493; RV64IZFHMIN-NEXT: flt.s a0, fa4, fa5 1494; RV64IZFHMIN-NEXT: beqz a0, .LBB13_2 1495; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 1496; RV64IZFHMIN-NEXT: ret 1497; RV64IZFHMIN-NEXT: .LBB13_2: # %if.then 1498; RV64IZFHMIN-NEXT: addi sp, sp, -16 1499; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1500; RV64IZFHMIN-NEXT: call abort 1501; 1502; RV32IZHINXMIN-LABEL: br_fcmp_ule: 1503; RV32IZHINXMIN: # %bb.0: 1504; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 1505; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 1506; RV32IZHINXMIN-NEXT: flt.s a0, a1, a0 1507; RV32IZHINXMIN-NEXT: beqz a0, .LBB13_2 1508; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 1509; RV32IZHINXMIN-NEXT: ret 1510; RV32IZHINXMIN-NEXT: .LBB13_2: # %if.then 1511; RV32IZHINXMIN-NEXT: addi sp, sp, -16 1512; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1513; RV32IZHINXMIN-NEXT: call abort 1514; 1515; RV64IZHINXMIN-LABEL: br_fcmp_ule: 1516; RV64IZHINXMIN: # %bb.0: 1517; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 1518; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 1519; RV64IZHINXMIN-NEXT: flt.s a0, a1, a0 1520; RV64IZHINXMIN-NEXT: beqz a0, .LBB13_2 1521; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 1522; RV64IZHINXMIN-NEXT: ret 1523; RV64IZHINXMIN-NEXT: .LBB13_2: # %if.then 1524; RV64IZHINXMIN-NEXT: addi sp, sp, -16 1525; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1526; RV64IZHINXMIN-NEXT: call abort 1527 %1 = fcmp ule half %a, %b 1528 br i1 %1, label %if.then, label %if.else 1529if.else: 1530 ret void 1531if.then: 1532 tail call void @abort() 1533 unreachable 1534} 1535 1536define void @br_fcmp_une(half %a, half %b) nounwind { 1537; RV32IZFH-LABEL: br_fcmp_une: 1538; RV32IZFH: # %bb.0: 1539; RV32IZFH-NEXT: feq.h a0, fa0, fa1 1540; RV32IZFH-NEXT: beqz a0, .LBB14_2 1541; RV32IZFH-NEXT: # %bb.1: # %if.else 1542; RV32IZFH-NEXT: ret 1543; RV32IZFH-NEXT: .LBB14_2: # %if.then 1544; RV32IZFH-NEXT: addi sp, sp, -16 1545; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1546; RV32IZFH-NEXT: call abort 1547; 1548; RV64IZFH-LABEL: br_fcmp_une: 1549; RV64IZFH: # %bb.0: 1550; RV64IZFH-NEXT: feq.h a0, fa0, fa1 1551; RV64IZFH-NEXT: beqz a0, .LBB14_2 1552; RV64IZFH-NEXT: # %bb.1: # %if.else 1553; RV64IZFH-NEXT: ret 1554; RV64IZFH-NEXT: .LBB14_2: # %if.then 1555; RV64IZFH-NEXT: addi sp, sp, -16 1556; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1557; RV64IZFH-NEXT: call abort 1558; 1559; RV32IZHINX-LABEL: br_fcmp_une: 1560; RV32IZHINX: # %bb.0: 1561; RV32IZHINX-NEXT: feq.h a0, a0, a1 1562; RV32IZHINX-NEXT: beqz a0, .LBB14_2 1563; RV32IZHINX-NEXT: # %bb.1: # %if.else 1564; RV32IZHINX-NEXT: ret 1565; RV32IZHINX-NEXT: .LBB14_2: # %if.then 1566; RV32IZHINX-NEXT: addi sp, sp, -16 1567; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1568; RV32IZHINX-NEXT: call abort 1569; 1570; RV64IZHINX-LABEL: br_fcmp_une: 1571; RV64IZHINX: # %bb.0: 1572; RV64IZHINX-NEXT: feq.h a0, a0, a1 1573; RV64IZHINX-NEXT: beqz a0, .LBB14_2 1574; RV64IZHINX-NEXT: # %bb.1: # %if.else 1575; RV64IZHINX-NEXT: ret 1576; RV64IZHINX-NEXT: .LBB14_2: # %if.then 1577; RV64IZHINX-NEXT: addi sp, sp, -16 1578; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1579; RV64IZHINX-NEXT: call abort 1580; 1581; RV32IZFHMIN-LABEL: br_fcmp_une: 1582; RV32IZFHMIN: # %bb.0: 1583; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1584; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1585; RV32IZFHMIN-NEXT: feq.s a0, fa4, fa5 1586; RV32IZFHMIN-NEXT: beqz a0, .LBB14_2 1587; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 1588; RV32IZFHMIN-NEXT: ret 1589; RV32IZFHMIN-NEXT: .LBB14_2: # %if.then 1590; RV32IZFHMIN-NEXT: addi sp, sp, -16 1591; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1592; RV32IZFHMIN-NEXT: call abort 1593; 1594; RV64IZFHMIN-LABEL: br_fcmp_une: 1595; RV64IZFHMIN: # %bb.0: 1596; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1597; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1598; RV64IZFHMIN-NEXT: feq.s a0, fa4, fa5 1599; RV64IZFHMIN-NEXT: beqz a0, .LBB14_2 1600; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 1601; RV64IZFHMIN-NEXT: ret 1602; RV64IZFHMIN-NEXT: .LBB14_2: # %if.then 1603; RV64IZFHMIN-NEXT: addi sp, sp, -16 1604; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1605; RV64IZFHMIN-NEXT: call abort 1606; 1607; RV32IZHINXMIN-LABEL: br_fcmp_une: 1608; RV32IZHINXMIN: # %bb.0: 1609; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 1610; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 1611; RV32IZHINXMIN-NEXT: feq.s a0, a0, a1 1612; RV32IZHINXMIN-NEXT: beqz a0, .LBB14_2 1613; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 1614; RV32IZHINXMIN-NEXT: ret 1615; RV32IZHINXMIN-NEXT: .LBB14_2: # %if.then 1616; RV32IZHINXMIN-NEXT: addi sp, sp, -16 1617; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1618; RV32IZHINXMIN-NEXT: call abort 1619; 1620; RV64IZHINXMIN-LABEL: br_fcmp_une: 1621; RV64IZHINXMIN: # %bb.0: 1622; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 1623; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 1624; RV64IZHINXMIN-NEXT: feq.s a0, a0, a1 1625; RV64IZHINXMIN-NEXT: beqz a0, .LBB14_2 1626; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 1627; RV64IZHINXMIN-NEXT: ret 1628; RV64IZHINXMIN-NEXT: .LBB14_2: # %if.then 1629; RV64IZHINXMIN-NEXT: addi sp, sp, -16 1630; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1631; RV64IZHINXMIN-NEXT: call abort 1632 %1 = fcmp une half %a, %b 1633 br i1 %1, label %if.then, label %if.else 1634if.else: 1635 ret void 1636if.then: 1637 tail call void @abort() 1638 unreachable 1639} 1640 1641define void @br_fcmp_uno(half %a, half %b) nounwind { 1642; RV32IZFH-LABEL: br_fcmp_uno: 1643; RV32IZFH: # %bb.0: 1644; RV32IZFH-NEXT: feq.h a0, fa1, fa1 1645; RV32IZFH-NEXT: feq.h a1, fa0, fa0 1646; RV32IZFH-NEXT: and a0, a1, a0 1647; RV32IZFH-NEXT: beqz a0, .LBB15_2 1648; RV32IZFH-NEXT: # %bb.1: # %if.else 1649; RV32IZFH-NEXT: ret 1650; RV32IZFH-NEXT: .LBB15_2: # %if.then 1651; RV32IZFH-NEXT: addi sp, sp, -16 1652; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1653; RV32IZFH-NEXT: call abort 1654; 1655; RV64IZFH-LABEL: br_fcmp_uno: 1656; RV64IZFH: # %bb.0: 1657; RV64IZFH-NEXT: feq.h a0, fa1, fa1 1658; RV64IZFH-NEXT: feq.h a1, fa0, fa0 1659; RV64IZFH-NEXT: and a0, a1, a0 1660; RV64IZFH-NEXT: beqz a0, .LBB15_2 1661; RV64IZFH-NEXT: # %bb.1: # %if.else 1662; RV64IZFH-NEXT: ret 1663; RV64IZFH-NEXT: .LBB15_2: # %if.then 1664; RV64IZFH-NEXT: addi sp, sp, -16 1665; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1666; RV64IZFH-NEXT: call abort 1667; 1668; RV32IZHINX-LABEL: br_fcmp_uno: 1669; RV32IZHINX: # %bb.0: 1670; RV32IZHINX-NEXT: feq.h a1, a1, a1 1671; RV32IZHINX-NEXT: feq.h a0, a0, a0 1672; RV32IZHINX-NEXT: and a0, a0, a1 1673; RV32IZHINX-NEXT: beqz a0, .LBB15_2 1674; RV32IZHINX-NEXT: # %bb.1: # %if.else 1675; RV32IZHINX-NEXT: ret 1676; RV32IZHINX-NEXT: .LBB15_2: # %if.then 1677; RV32IZHINX-NEXT: addi sp, sp, -16 1678; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1679; RV32IZHINX-NEXT: call abort 1680; 1681; RV64IZHINX-LABEL: br_fcmp_uno: 1682; RV64IZHINX: # %bb.0: 1683; RV64IZHINX-NEXT: feq.h a1, a1, a1 1684; RV64IZHINX-NEXT: feq.h a0, a0, a0 1685; RV64IZHINX-NEXT: and a0, a0, a1 1686; RV64IZHINX-NEXT: beqz a0, .LBB15_2 1687; RV64IZHINX-NEXT: # %bb.1: # %if.else 1688; RV64IZHINX-NEXT: ret 1689; RV64IZHINX-NEXT: .LBB15_2: # %if.then 1690; RV64IZHINX-NEXT: addi sp, sp, -16 1691; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1692; RV64IZHINX-NEXT: call abort 1693; 1694; RV32IZFHMIN-LABEL: br_fcmp_uno: 1695; RV32IZFHMIN: # %bb.0: 1696; RV32IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1697; RV32IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1698; RV32IZFHMIN-NEXT: feq.s a0, fa5, fa5 1699; RV32IZFHMIN-NEXT: feq.s a1, fa4, fa4 1700; RV32IZFHMIN-NEXT: and a0, a1, a0 1701; RV32IZFHMIN-NEXT: beqz a0, .LBB15_2 1702; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 1703; RV32IZFHMIN-NEXT: ret 1704; RV32IZFHMIN-NEXT: .LBB15_2: # %if.then 1705; RV32IZFHMIN-NEXT: addi sp, sp, -16 1706; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1707; RV32IZFHMIN-NEXT: call abort 1708; 1709; RV64IZFHMIN-LABEL: br_fcmp_uno: 1710; RV64IZFHMIN: # %bb.0: 1711; RV64IZFHMIN-NEXT: fcvt.s.h fa5, fa1 1712; RV64IZFHMIN-NEXT: fcvt.s.h fa4, fa0 1713; RV64IZFHMIN-NEXT: feq.s a0, fa5, fa5 1714; RV64IZFHMIN-NEXT: feq.s a1, fa4, fa4 1715; RV64IZFHMIN-NEXT: and a0, a1, a0 1716; RV64IZFHMIN-NEXT: beqz a0, .LBB15_2 1717; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 1718; RV64IZFHMIN-NEXT: ret 1719; RV64IZFHMIN-NEXT: .LBB15_2: # %if.then 1720; RV64IZFHMIN-NEXT: addi sp, sp, -16 1721; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1722; RV64IZFHMIN-NEXT: call abort 1723; 1724; RV32IZHINXMIN-LABEL: br_fcmp_uno: 1725; RV32IZHINXMIN: # %bb.0: 1726; RV32IZHINXMIN-NEXT: fcvt.s.h a1, a1 1727; RV32IZHINXMIN-NEXT: fcvt.s.h a0, a0 1728; RV32IZHINXMIN-NEXT: feq.s a1, a1, a1 1729; RV32IZHINXMIN-NEXT: feq.s a0, a0, a0 1730; RV32IZHINXMIN-NEXT: and a0, a0, a1 1731; RV32IZHINXMIN-NEXT: beqz a0, .LBB15_2 1732; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 1733; RV32IZHINXMIN-NEXT: ret 1734; RV32IZHINXMIN-NEXT: .LBB15_2: # %if.then 1735; RV32IZHINXMIN-NEXT: addi sp, sp, -16 1736; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1737; RV32IZHINXMIN-NEXT: call abort 1738; 1739; RV64IZHINXMIN-LABEL: br_fcmp_uno: 1740; RV64IZHINXMIN: # %bb.0: 1741; RV64IZHINXMIN-NEXT: fcvt.s.h a1, a1 1742; RV64IZHINXMIN-NEXT: fcvt.s.h a0, a0 1743; RV64IZHINXMIN-NEXT: feq.s a1, a1, a1 1744; RV64IZHINXMIN-NEXT: feq.s a0, a0, a0 1745; RV64IZHINXMIN-NEXT: and a0, a0, a1 1746; RV64IZHINXMIN-NEXT: beqz a0, .LBB15_2 1747; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 1748; RV64IZHINXMIN-NEXT: ret 1749; RV64IZHINXMIN-NEXT: .LBB15_2: # %if.then 1750; RV64IZHINXMIN-NEXT: addi sp, sp, -16 1751; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1752; RV64IZHINXMIN-NEXT: call abort 1753 %1 = fcmp uno half %a, %b 1754 br i1 %1, label %if.then, label %if.else 1755if.else: 1756 ret void 1757if.then: 1758 tail call void @abort() 1759 unreachable 1760} 1761 1762define void @br_fcmp_true(half %a, half %b) nounwind { 1763; RV32IZFH-LABEL: br_fcmp_true: 1764; RV32IZFH: # %bb.0: 1765; RV32IZFH-NEXT: li a0, 1 1766; RV32IZFH-NEXT: bnez a0, .LBB16_2 1767; RV32IZFH-NEXT: # %bb.1: # %if.else 1768; RV32IZFH-NEXT: ret 1769; RV32IZFH-NEXT: .LBB16_2: # %if.then 1770; RV32IZFH-NEXT: addi sp, sp, -16 1771; RV32IZFH-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1772; RV32IZFH-NEXT: call abort 1773; 1774; RV64IZFH-LABEL: br_fcmp_true: 1775; RV64IZFH: # %bb.0: 1776; RV64IZFH-NEXT: li a0, 1 1777; RV64IZFH-NEXT: bnez a0, .LBB16_2 1778; RV64IZFH-NEXT: # %bb.1: # %if.else 1779; RV64IZFH-NEXT: ret 1780; RV64IZFH-NEXT: .LBB16_2: # %if.then 1781; RV64IZFH-NEXT: addi sp, sp, -16 1782; RV64IZFH-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1783; RV64IZFH-NEXT: call abort 1784; 1785; RV32IZHINX-LABEL: br_fcmp_true: 1786; RV32IZHINX: # %bb.0: 1787; RV32IZHINX-NEXT: li a0, 1 1788; RV32IZHINX-NEXT: bnez a0, .LBB16_2 1789; RV32IZHINX-NEXT: # %bb.1: # %if.else 1790; RV32IZHINX-NEXT: ret 1791; RV32IZHINX-NEXT: .LBB16_2: # %if.then 1792; RV32IZHINX-NEXT: addi sp, sp, -16 1793; RV32IZHINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1794; RV32IZHINX-NEXT: call abort 1795; 1796; RV64IZHINX-LABEL: br_fcmp_true: 1797; RV64IZHINX: # %bb.0: 1798; RV64IZHINX-NEXT: li a0, 1 1799; RV64IZHINX-NEXT: bnez a0, .LBB16_2 1800; RV64IZHINX-NEXT: # %bb.1: # %if.else 1801; RV64IZHINX-NEXT: ret 1802; RV64IZHINX-NEXT: .LBB16_2: # %if.then 1803; RV64IZHINX-NEXT: addi sp, sp, -16 1804; RV64IZHINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1805; RV64IZHINX-NEXT: call abort 1806; 1807; RV32IZFHMIN-LABEL: br_fcmp_true: 1808; RV32IZFHMIN: # %bb.0: 1809; RV32IZFHMIN-NEXT: li a0, 1 1810; RV32IZFHMIN-NEXT: bnez a0, .LBB16_2 1811; RV32IZFHMIN-NEXT: # %bb.1: # %if.else 1812; RV32IZFHMIN-NEXT: ret 1813; RV32IZFHMIN-NEXT: .LBB16_2: # %if.then 1814; RV32IZFHMIN-NEXT: addi sp, sp, -16 1815; RV32IZFHMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1816; RV32IZFHMIN-NEXT: call abort 1817; 1818; RV64IZFHMIN-LABEL: br_fcmp_true: 1819; RV64IZFHMIN: # %bb.0: 1820; RV64IZFHMIN-NEXT: li a0, 1 1821; RV64IZFHMIN-NEXT: bnez a0, .LBB16_2 1822; RV64IZFHMIN-NEXT: # %bb.1: # %if.else 1823; RV64IZFHMIN-NEXT: ret 1824; RV64IZFHMIN-NEXT: .LBB16_2: # %if.then 1825; RV64IZFHMIN-NEXT: addi sp, sp, -16 1826; RV64IZFHMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1827; RV64IZFHMIN-NEXT: call abort 1828; 1829; RV32IZHINXMIN-LABEL: br_fcmp_true: 1830; RV32IZHINXMIN: # %bb.0: 1831; RV32IZHINXMIN-NEXT: li a0, 1 1832; RV32IZHINXMIN-NEXT: bnez a0, .LBB16_2 1833; RV32IZHINXMIN-NEXT: # %bb.1: # %if.else 1834; RV32IZHINXMIN-NEXT: ret 1835; RV32IZHINXMIN-NEXT: .LBB16_2: # %if.then 1836; RV32IZHINXMIN-NEXT: addi sp, sp, -16 1837; RV32IZHINXMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 1838; RV32IZHINXMIN-NEXT: call abort 1839; 1840; RV64IZHINXMIN-LABEL: br_fcmp_true: 1841; RV64IZHINXMIN: # %bb.0: 1842; RV64IZHINXMIN-NEXT: li a0, 1 1843; RV64IZHINXMIN-NEXT: bnez a0, .LBB16_2 1844; RV64IZHINXMIN-NEXT: # %bb.1: # %if.else 1845; RV64IZHINXMIN-NEXT: ret 1846; RV64IZHINXMIN-NEXT: .LBB16_2: # %if.then 1847; RV64IZHINXMIN-NEXT: addi sp, sp, -16 1848; RV64IZHINXMIN-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 1849; RV64IZHINXMIN-NEXT: call abort 1850 %1 = fcmp true half %a, %b 1851 br i1 %1, label %if.then, label %if.else 1852if.else: 1853 ret void 1854if.then: 1855 tail call void @abort() 1856 unreachable 1857} 1858