1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \ 3; RUN: -target-abi=ilp32d | FileCheck -check-prefix=RV32IFD %s 4; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \ 5; RUN: -target-abi=lp64d | FileCheck -check-prefix=RV64IFD %s 6; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \ 7; RUN: -target-abi=ilp32 | FileCheck -check-prefix=RV32IZFINXZDINX %s 8; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \ 9; RUN: -target-abi=lp64 | FileCheck -check-prefix=RV64IZFINXZDINX %s 10 11declare void @abort() 12declare void @exit(i32) 13 14define void @br_fcmp_false(double %a, double %b) nounwind { 15; RV32IFD-LABEL: br_fcmp_false: 16; RV32IFD: # %bb.0: 17; RV32IFD-NEXT: li a0, 1 18; RV32IFD-NEXT: bnez a0, .LBB0_2 19; RV32IFD-NEXT: # %bb.1: # %if.then 20; RV32IFD-NEXT: ret 21; RV32IFD-NEXT: .LBB0_2: # %if.else 22; RV32IFD-NEXT: addi sp, sp, -16 23; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 24; RV32IFD-NEXT: call abort 25; 26; RV64IFD-LABEL: br_fcmp_false: 27; RV64IFD: # %bb.0: 28; RV64IFD-NEXT: li a0, 1 29; RV64IFD-NEXT: bnez a0, .LBB0_2 30; RV64IFD-NEXT: # %bb.1: # %if.then 31; RV64IFD-NEXT: ret 32; RV64IFD-NEXT: .LBB0_2: # %if.else 33; RV64IFD-NEXT: addi sp, sp, -16 34; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 35; RV64IFD-NEXT: call abort 36; 37; RV32IZFINXZDINX-LABEL: br_fcmp_false: 38; RV32IZFINXZDINX: # %bb.0: 39; RV32IZFINXZDINX-NEXT: li a0, 1 40; RV32IZFINXZDINX-NEXT: bnez a0, .LBB0_2 41; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.then 42; RV32IZFINXZDINX-NEXT: ret 43; RV32IZFINXZDINX-NEXT: .LBB0_2: # %if.else 44; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 45; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 46; RV32IZFINXZDINX-NEXT: call abort 47; 48; RV64IZFINXZDINX-LABEL: br_fcmp_false: 49; RV64IZFINXZDINX: # %bb.0: 50; RV64IZFINXZDINX-NEXT: li a0, 1 51; RV64IZFINXZDINX-NEXT: bnez a0, .LBB0_2 52; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.then 53; RV64IZFINXZDINX-NEXT: ret 54; RV64IZFINXZDINX-NEXT: .LBB0_2: # %if.else 55; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 56; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 57; RV64IZFINXZDINX-NEXT: call abort 58 %1 = fcmp false double %a, %b 59 br i1 %1, label %if.then, label %if.else 60if.then: 61 ret void 62if.else: 63 tail call void @abort() 64 unreachable 65} 66 67define void @br_fcmp_oeq(double %a, double %b) nounwind { 68; RV32IFD-LABEL: br_fcmp_oeq: 69; RV32IFD: # %bb.0: 70; RV32IFD-NEXT: feq.d a0, fa0, fa1 71; RV32IFD-NEXT: bnez a0, .LBB1_2 72; RV32IFD-NEXT: # %bb.1: # %if.else 73; RV32IFD-NEXT: ret 74; RV32IFD-NEXT: .LBB1_2: # %if.then 75; RV32IFD-NEXT: addi sp, sp, -16 76; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 77; RV32IFD-NEXT: call abort 78; 79; RV64IFD-LABEL: br_fcmp_oeq: 80; RV64IFD: # %bb.0: 81; RV64IFD-NEXT: feq.d a0, fa0, fa1 82; RV64IFD-NEXT: bnez a0, .LBB1_2 83; RV64IFD-NEXT: # %bb.1: # %if.else 84; RV64IFD-NEXT: ret 85; RV64IFD-NEXT: .LBB1_2: # %if.then 86; RV64IFD-NEXT: addi sp, sp, -16 87; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 88; RV64IFD-NEXT: call abort 89; 90; RV32IZFINXZDINX-LABEL: br_fcmp_oeq: 91; RV32IZFINXZDINX: # %bb.0: 92; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a2 93; RV32IZFINXZDINX-NEXT: bnez a0, .LBB1_2 94; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 95; RV32IZFINXZDINX-NEXT: ret 96; RV32IZFINXZDINX-NEXT: .LBB1_2: # %if.then 97; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 98; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 99; RV32IZFINXZDINX-NEXT: call abort 100; 101; RV64IZFINXZDINX-LABEL: br_fcmp_oeq: 102; RV64IZFINXZDINX: # %bb.0: 103; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a1 104; RV64IZFINXZDINX-NEXT: bnez a0, .LBB1_2 105; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 106; RV64IZFINXZDINX-NEXT: ret 107; RV64IZFINXZDINX-NEXT: .LBB1_2: # %if.then 108; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 109; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 110; RV64IZFINXZDINX-NEXT: call abort 111 %1 = fcmp oeq double %a, %b 112 br i1 %1, label %if.then, label %if.else 113if.else: 114 ret void 115if.then: 116 tail call void @abort() 117 unreachable 118} 119 120; TODO: generated code quality for this is very poor due to 121; DAGCombiner::visitXOR converting the legal setoeq to setune, which requires 122; expansion. 123define void @br_fcmp_oeq_alt(double %a, double %b) nounwind { 124; RV32IFD-LABEL: br_fcmp_oeq_alt: 125; RV32IFD: # %bb.0: 126; RV32IFD-NEXT: feq.d a0, fa0, fa1 127; RV32IFD-NEXT: bnez a0, .LBB2_2 128; RV32IFD-NEXT: # %bb.1: # %if.else 129; RV32IFD-NEXT: ret 130; RV32IFD-NEXT: .LBB2_2: # %if.then 131; RV32IFD-NEXT: addi sp, sp, -16 132; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 133; RV32IFD-NEXT: call abort 134; 135; RV64IFD-LABEL: br_fcmp_oeq_alt: 136; RV64IFD: # %bb.0: 137; RV64IFD-NEXT: feq.d a0, fa0, fa1 138; RV64IFD-NEXT: bnez a0, .LBB2_2 139; RV64IFD-NEXT: # %bb.1: # %if.else 140; RV64IFD-NEXT: ret 141; RV64IFD-NEXT: .LBB2_2: # %if.then 142; RV64IFD-NEXT: addi sp, sp, -16 143; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 144; RV64IFD-NEXT: call abort 145; 146; RV32IZFINXZDINX-LABEL: br_fcmp_oeq_alt: 147; RV32IZFINXZDINX: # %bb.0: 148; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a2 149; RV32IZFINXZDINX-NEXT: bnez a0, .LBB2_2 150; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 151; RV32IZFINXZDINX-NEXT: ret 152; RV32IZFINXZDINX-NEXT: .LBB2_2: # %if.then 153; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 154; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 155; RV32IZFINXZDINX-NEXT: call abort 156; 157; RV64IZFINXZDINX-LABEL: br_fcmp_oeq_alt: 158; RV64IZFINXZDINX: # %bb.0: 159; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a1 160; RV64IZFINXZDINX-NEXT: bnez a0, .LBB2_2 161; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 162; RV64IZFINXZDINX-NEXT: ret 163; RV64IZFINXZDINX-NEXT: .LBB2_2: # %if.then 164; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 165; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 166; RV64IZFINXZDINX-NEXT: call abort 167 %1 = fcmp oeq double %a, %b 168 br i1 %1, label %if.then, label %if.else 169if.then: 170 tail call void @abort() 171 unreachable 172if.else: 173 ret void 174} 175 176define void @br_fcmp_ogt(double %a, double %b) nounwind { 177; RV32IFD-LABEL: br_fcmp_ogt: 178; RV32IFD: # %bb.0: 179; RV32IFD-NEXT: flt.d a0, fa1, fa0 180; RV32IFD-NEXT: bnez a0, .LBB3_2 181; RV32IFD-NEXT: # %bb.1: # %if.else 182; RV32IFD-NEXT: ret 183; RV32IFD-NEXT: .LBB3_2: # %if.then 184; RV32IFD-NEXT: addi sp, sp, -16 185; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 186; RV32IFD-NEXT: call abort 187; 188; RV64IFD-LABEL: br_fcmp_ogt: 189; RV64IFD: # %bb.0: 190; RV64IFD-NEXT: flt.d a0, fa1, fa0 191; RV64IFD-NEXT: bnez a0, .LBB3_2 192; RV64IFD-NEXT: # %bb.1: # %if.else 193; RV64IFD-NEXT: ret 194; RV64IFD-NEXT: .LBB3_2: # %if.then 195; RV64IFD-NEXT: addi sp, sp, -16 196; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 197; RV64IFD-NEXT: call abort 198; 199; RV32IZFINXZDINX-LABEL: br_fcmp_ogt: 200; RV32IZFINXZDINX: # %bb.0: 201; RV32IZFINXZDINX-NEXT: flt.d a0, a2, a0 202; RV32IZFINXZDINX-NEXT: bnez a0, .LBB3_2 203; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 204; RV32IZFINXZDINX-NEXT: ret 205; RV32IZFINXZDINX-NEXT: .LBB3_2: # %if.then 206; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 207; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 208; RV32IZFINXZDINX-NEXT: call abort 209; 210; RV64IZFINXZDINX-LABEL: br_fcmp_ogt: 211; RV64IZFINXZDINX: # %bb.0: 212; RV64IZFINXZDINX-NEXT: flt.d a0, a1, a0 213; RV64IZFINXZDINX-NEXT: bnez a0, .LBB3_2 214; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 215; RV64IZFINXZDINX-NEXT: ret 216; RV64IZFINXZDINX-NEXT: .LBB3_2: # %if.then 217; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 218; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 219; RV64IZFINXZDINX-NEXT: call abort 220 %1 = fcmp ogt double %a, %b 221 br i1 %1, label %if.then, label %if.else 222if.else: 223 ret void 224if.then: 225 tail call void @abort() 226 unreachable 227} 228 229define void @br_fcmp_oge(double %a, double %b) nounwind { 230; RV32IFD-LABEL: br_fcmp_oge: 231; RV32IFD: # %bb.0: 232; RV32IFD-NEXT: fle.d a0, fa1, fa0 233; RV32IFD-NEXT: bnez a0, .LBB4_2 234; RV32IFD-NEXT: # %bb.1: # %if.else 235; RV32IFD-NEXT: ret 236; RV32IFD-NEXT: .LBB4_2: # %if.then 237; RV32IFD-NEXT: addi sp, sp, -16 238; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 239; RV32IFD-NEXT: call abort 240; 241; RV64IFD-LABEL: br_fcmp_oge: 242; RV64IFD: # %bb.0: 243; RV64IFD-NEXT: fle.d a0, fa1, fa0 244; RV64IFD-NEXT: bnez a0, .LBB4_2 245; RV64IFD-NEXT: # %bb.1: # %if.else 246; RV64IFD-NEXT: ret 247; RV64IFD-NEXT: .LBB4_2: # %if.then 248; RV64IFD-NEXT: addi sp, sp, -16 249; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 250; RV64IFD-NEXT: call abort 251; 252; RV32IZFINXZDINX-LABEL: br_fcmp_oge: 253; RV32IZFINXZDINX: # %bb.0: 254; RV32IZFINXZDINX-NEXT: fle.d a0, a2, a0 255; RV32IZFINXZDINX-NEXT: bnez a0, .LBB4_2 256; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 257; RV32IZFINXZDINX-NEXT: ret 258; RV32IZFINXZDINX-NEXT: .LBB4_2: # %if.then 259; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 260; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 261; RV32IZFINXZDINX-NEXT: call abort 262; 263; RV64IZFINXZDINX-LABEL: br_fcmp_oge: 264; RV64IZFINXZDINX: # %bb.0: 265; RV64IZFINXZDINX-NEXT: fle.d a0, a1, a0 266; RV64IZFINXZDINX-NEXT: bnez a0, .LBB4_2 267; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 268; RV64IZFINXZDINX-NEXT: ret 269; RV64IZFINXZDINX-NEXT: .LBB4_2: # %if.then 270; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 271; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 272; RV64IZFINXZDINX-NEXT: call abort 273 %1 = fcmp oge double %a, %b 274 br i1 %1, label %if.then, label %if.else 275if.else: 276 ret void 277if.then: 278 tail call void @abort() 279 unreachable 280} 281 282define void @br_fcmp_olt(double %a, double %b) nounwind { 283; RV32IFD-LABEL: br_fcmp_olt: 284; RV32IFD: # %bb.0: 285; RV32IFD-NEXT: flt.d a0, fa0, fa1 286; RV32IFD-NEXT: bnez a0, .LBB5_2 287; RV32IFD-NEXT: # %bb.1: # %if.else 288; RV32IFD-NEXT: ret 289; RV32IFD-NEXT: .LBB5_2: # %if.then 290; RV32IFD-NEXT: addi sp, sp, -16 291; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 292; RV32IFD-NEXT: call abort 293; 294; RV64IFD-LABEL: br_fcmp_olt: 295; RV64IFD: # %bb.0: 296; RV64IFD-NEXT: flt.d a0, fa0, fa1 297; RV64IFD-NEXT: bnez a0, .LBB5_2 298; RV64IFD-NEXT: # %bb.1: # %if.else 299; RV64IFD-NEXT: ret 300; RV64IFD-NEXT: .LBB5_2: # %if.then 301; RV64IFD-NEXT: addi sp, sp, -16 302; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 303; RV64IFD-NEXT: call abort 304; 305; RV32IZFINXZDINX-LABEL: br_fcmp_olt: 306; RV32IZFINXZDINX: # %bb.0: 307; RV32IZFINXZDINX-NEXT: flt.d a0, a0, a2 308; RV32IZFINXZDINX-NEXT: bnez a0, .LBB5_2 309; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 310; RV32IZFINXZDINX-NEXT: ret 311; RV32IZFINXZDINX-NEXT: .LBB5_2: # %if.then 312; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 313; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 314; RV32IZFINXZDINX-NEXT: call abort 315; 316; RV64IZFINXZDINX-LABEL: br_fcmp_olt: 317; RV64IZFINXZDINX: # %bb.0: 318; RV64IZFINXZDINX-NEXT: flt.d a0, a0, a1 319; RV64IZFINXZDINX-NEXT: bnez a0, .LBB5_2 320; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 321; RV64IZFINXZDINX-NEXT: ret 322; RV64IZFINXZDINX-NEXT: .LBB5_2: # %if.then 323; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 324; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 325; RV64IZFINXZDINX-NEXT: call abort 326 %1 = fcmp olt double %a, %b 327 br i1 %1, label %if.then, label %if.else 328if.else: 329 ret void 330if.then: 331 tail call void @abort() 332 unreachable 333} 334 335define void @br_fcmp_ole(double %a, double %b) nounwind { 336; RV32IFD-LABEL: br_fcmp_ole: 337; RV32IFD: # %bb.0: 338; RV32IFD-NEXT: fle.d a0, fa0, fa1 339; RV32IFD-NEXT: bnez a0, .LBB6_2 340; RV32IFD-NEXT: # %bb.1: # %if.else 341; RV32IFD-NEXT: ret 342; RV32IFD-NEXT: .LBB6_2: # %if.then 343; RV32IFD-NEXT: addi sp, sp, -16 344; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 345; RV32IFD-NEXT: call abort 346; 347; RV64IFD-LABEL: br_fcmp_ole: 348; RV64IFD: # %bb.0: 349; RV64IFD-NEXT: fle.d a0, fa0, fa1 350; RV64IFD-NEXT: bnez a0, .LBB6_2 351; RV64IFD-NEXT: # %bb.1: # %if.else 352; RV64IFD-NEXT: ret 353; RV64IFD-NEXT: .LBB6_2: # %if.then 354; RV64IFD-NEXT: addi sp, sp, -16 355; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 356; RV64IFD-NEXT: call abort 357; 358; RV32IZFINXZDINX-LABEL: br_fcmp_ole: 359; RV32IZFINXZDINX: # %bb.0: 360; RV32IZFINXZDINX-NEXT: fle.d a0, a0, a2 361; RV32IZFINXZDINX-NEXT: bnez a0, .LBB6_2 362; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 363; RV32IZFINXZDINX-NEXT: ret 364; RV32IZFINXZDINX-NEXT: .LBB6_2: # %if.then 365; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 366; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 367; RV32IZFINXZDINX-NEXT: call abort 368; 369; RV64IZFINXZDINX-LABEL: br_fcmp_ole: 370; RV64IZFINXZDINX: # %bb.0: 371; RV64IZFINXZDINX-NEXT: fle.d a0, a0, a1 372; RV64IZFINXZDINX-NEXT: bnez a0, .LBB6_2 373; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 374; RV64IZFINXZDINX-NEXT: ret 375; RV64IZFINXZDINX-NEXT: .LBB6_2: # %if.then 376; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 377; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 378; RV64IZFINXZDINX-NEXT: call abort 379 %1 = fcmp ole double %a, %b 380 br i1 %1, label %if.then, label %if.else 381if.else: 382 ret void 383if.then: 384 tail call void @abort() 385 unreachable 386} 387 388define void @br_fcmp_one(double %a, double %b) nounwind { 389; RV32IFD-LABEL: br_fcmp_one: 390; RV32IFD: # %bb.0: 391; RV32IFD-NEXT: flt.d a0, fa0, fa1 392; RV32IFD-NEXT: flt.d a1, fa1, fa0 393; RV32IFD-NEXT: or a0, a1, a0 394; RV32IFD-NEXT: bnez a0, .LBB7_2 395; RV32IFD-NEXT: # %bb.1: # %if.else 396; RV32IFD-NEXT: ret 397; RV32IFD-NEXT: .LBB7_2: # %if.then 398; RV32IFD-NEXT: addi sp, sp, -16 399; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 400; RV32IFD-NEXT: call abort 401; 402; RV64IFD-LABEL: br_fcmp_one: 403; RV64IFD: # %bb.0: 404; RV64IFD-NEXT: flt.d a0, fa0, fa1 405; RV64IFD-NEXT: flt.d a1, fa1, fa0 406; RV64IFD-NEXT: or a0, a1, a0 407; RV64IFD-NEXT: bnez a0, .LBB7_2 408; RV64IFD-NEXT: # %bb.1: # %if.else 409; RV64IFD-NEXT: ret 410; RV64IFD-NEXT: .LBB7_2: # %if.then 411; RV64IFD-NEXT: addi sp, sp, -16 412; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 413; RV64IFD-NEXT: call abort 414; 415; RV32IZFINXZDINX-LABEL: br_fcmp_one: 416; RV32IZFINXZDINX: # %bb.0: 417; RV32IZFINXZDINX-NEXT: flt.d a4, a0, a2 418; RV32IZFINXZDINX-NEXT: flt.d a0, a2, a0 419; RV32IZFINXZDINX-NEXT: or a0, a0, a4 420; RV32IZFINXZDINX-NEXT: bnez a0, .LBB7_2 421; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 422; RV32IZFINXZDINX-NEXT: ret 423; RV32IZFINXZDINX-NEXT: .LBB7_2: # %if.then 424; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 425; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 426; RV32IZFINXZDINX-NEXT: call abort 427; 428; RV64IZFINXZDINX-LABEL: br_fcmp_one: 429; RV64IZFINXZDINX: # %bb.0: 430; RV64IZFINXZDINX-NEXT: flt.d a2, a0, a1 431; RV64IZFINXZDINX-NEXT: flt.d a0, a1, a0 432; RV64IZFINXZDINX-NEXT: or a0, a0, a2 433; RV64IZFINXZDINX-NEXT: bnez a0, .LBB7_2 434; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 435; RV64IZFINXZDINX-NEXT: ret 436; RV64IZFINXZDINX-NEXT: .LBB7_2: # %if.then 437; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 438; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 439; RV64IZFINXZDINX-NEXT: call abort 440 %1 = fcmp one double %a, %b 441 br i1 %1, label %if.then, label %if.else 442if.else: 443 ret void 444if.then: 445 tail call void @abort() 446 unreachable 447} 448 449define void @br_fcmp_ord(double %a, double %b) nounwind { 450; RV32IFD-LABEL: br_fcmp_ord: 451; RV32IFD: # %bb.0: 452; RV32IFD-NEXT: feq.d a0, fa1, fa1 453; RV32IFD-NEXT: feq.d a1, fa0, fa0 454; RV32IFD-NEXT: and a0, a1, a0 455; RV32IFD-NEXT: bnez a0, .LBB8_2 456; RV32IFD-NEXT: # %bb.1: # %if.else 457; RV32IFD-NEXT: ret 458; RV32IFD-NEXT: .LBB8_2: # %if.then 459; RV32IFD-NEXT: addi sp, sp, -16 460; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 461; RV32IFD-NEXT: call abort 462; 463; RV64IFD-LABEL: br_fcmp_ord: 464; RV64IFD: # %bb.0: 465; RV64IFD-NEXT: feq.d a0, fa1, fa1 466; RV64IFD-NEXT: feq.d a1, fa0, fa0 467; RV64IFD-NEXT: and a0, a1, a0 468; RV64IFD-NEXT: bnez a0, .LBB8_2 469; RV64IFD-NEXT: # %bb.1: # %if.else 470; RV64IFD-NEXT: ret 471; RV64IFD-NEXT: .LBB8_2: # %if.then 472; RV64IFD-NEXT: addi sp, sp, -16 473; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 474; RV64IFD-NEXT: call abort 475; 476; RV32IZFINXZDINX-LABEL: br_fcmp_ord: 477; RV32IZFINXZDINX: # %bb.0: 478; RV32IZFINXZDINX-NEXT: feq.d a2, a2, a2 479; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a0 480; RV32IZFINXZDINX-NEXT: and a0, a0, a2 481; RV32IZFINXZDINX-NEXT: bnez a0, .LBB8_2 482; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 483; RV32IZFINXZDINX-NEXT: ret 484; RV32IZFINXZDINX-NEXT: .LBB8_2: # %if.then 485; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 486; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 487; RV32IZFINXZDINX-NEXT: call abort 488; 489; RV64IZFINXZDINX-LABEL: br_fcmp_ord: 490; RV64IZFINXZDINX: # %bb.0: 491; RV64IZFINXZDINX-NEXT: feq.d a1, a1, a1 492; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a0 493; RV64IZFINXZDINX-NEXT: and a0, a0, a1 494; RV64IZFINXZDINX-NEXT: bnez a0, .LBB8_2 495; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 496; RV64IZFINXZDINX-NEXT: ret 497; RV64IZFINXZDINX-NEXT: .LBB8_2: # %if.then 498; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 499; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 500; RV64IZFINXZDINX-NEXT: call abort 501 %1 = fcmp ord double %a, %b 502 br i1 %1, label %if.then, label %if.else 503if.else: 504 ret void 505if.then: 506 tail call void @abort() 507 unreachable 508} 509 510define void @br_fcmp_ueq(double %a, double %b) nounwind { 511; RV32IFD-LABEL: br_fcmp_ueq: 512; RV32IFD: # %bb.0: 513; RV32IFD-NEXT: flt.d a0, fa0, fa1 514; RV32IFD-NEXT: flt.d a1, fa1, fa0 515; RV32IFD-NEXT: or a0, a1, a0 516; RV32IFD-NEXT: beqz a0, .LBB9_2 517; RV32IFD-NEXT: # %bb.1: # %if.else 518; RV32IFD-NEXT: ret 519; RV32IFD-NEXT: .LBB9_2: # %if.then 520; RV32IFD-NEXT: addi sp, sp, -16 521; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 522; RV32IFD-NEXT: call abort 523; 524; RV64IFD-LABEL: br_fcmp_ueq: 525; RV64IFD: # %bb.0: 526; RV64IFD-NEXT: flt.d a0, fa0, fa1 527; RV64IFD-NEXT: flt.d a1, fa1, fa0 528; RV64IFD-NEXT: or a0, a1, a0 529; RV64IFD-NEXT: beqz a0, .LBB9_2 530; RV64IFD-NEXT: # %bb.1: # %if.else 531; RV64IFD-NEXT: ret 532; RV64IFD-NEXT: .LBB9_2: # %if.then 533; RV64IFD-NEXT: addi sp, sp, -16 534; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 535; RV64IFD-NEXT: call abort 536; 537; RV32IZFINXZDINX-LABEL: br_fcmp_ueq: 538; RV32IZFINXZDINX: # %bb.0: 539; RV32IZFINXZDINX-NEXT: flt.d a4, a0, a2 540; RV32IZFINXZDINX-NEXT: flt.d a0, a2, a0 541; RV32IZFINXZDINX-NEXT: or a0, a0, a4 542; RV32IZFINXZDINX-NEXT: beqz a0, .LBB9_2 543; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 544; RV32IZFINXZDINX-NEXT: ret 545; RV32IZFINXZDINX-NEXT: .LBB9_2: # %if.then 546; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 547; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 548; RV32IZFINXZDINX-NEXT: call abort 549; 550; RV64IZFINXZDINX-LABEL: br_fcmp_ueq: 551; RV64IZFINXZDINX: # %bb.0: 552; RV64IZFINXZDINX-NEXT: flt.d a2, a0, a1 553; RV64IZFINXZDINX-NEXT: flt.d a0, a1, a0 554; RV64IZFINXZDINX-NEXT: or a0, a0, a2 555; RV64IZFINXZDINX-NEXT: beqz a0, .LBB9_2 556; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 557; RV64IZFINXZDINX-NEXT: ret 558; RV64IZFINXZDINX-NEXT: .LBB9_2: # %if.then 559; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 560; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 561; RV64IZFINXZDINX-NEXT: call abort 562 %1 = fcmp ueq double %a, %b 563 br i1 %1, label %if.then, label %if.else 564if.else: 565 ret void 566if.then: 567 tail call void @abort() 568 unreachable 569} 570 571define void @br_fcmp_ugt(double %a, double %b) nounwind { 572; RV32IFD-LABEL: br_fcmp_ugt: 573; RV32IFD: # %bb.0: 574; RV32IFD-NEXT: fle.d a0, fa0, fa1 575; RV32IFD-NEXT: beqz a0, .LBB10_2 576; RV32IFD-NEXT: # %bb.1: # %if.else 577; RV32IFD-NEXT: ret 578; RV32IFD-NEXT: .LBB10_2: # %if.then 579; RV32IFD-NEXT: addi sp, sp, -16 580; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 581; RV32IFD-NEXT: call abort 582; 583; RV64IFD-LABEL: br_fcmp_ugt: 584; RV64IFD: # %bb.0: 585; RV64IFD-NEXT: fle.d a0, fa0, fa1 586; RV64IFD-NEXT: beqz a0, .LBB10_2 587; RV64IFD-NEXT: # %bb.1: # %if.else 588; RV64IFD-NEXT: ret 589; RV64IFD-NEXT: .LBB10_2: # %if.then 590; RV64IFD-NEXT: addi sp, sp, -16 591; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 592; RV64IFD-NEXT: call abort 593; 594; RV32IZFINXZDINX-LABEL: br_fcmp_ugt: 595; RV32IZFINXZDINX: # %bb.0: 596; RV32IZFINXZDINX-NEXT: fle.d a0, a0, a2 597; RV32IZFINXZDINX-NEXT: beqz a0, .LBB10_2 598; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 599; RV32IZFINXZDINX-NEXT: ret 600; RV32IZFINXZDINX-NEXT: .LBB10_2: # %if.then 601; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 602; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 603; RV32IZFINXZDINX-NEXT: call abort 604; 605; RV64IZFINXZDINX-LABEL: br_fcmp_ugt: 606; RV64IZFINXZDINX: # %bb.0: 607; RV64IZFINXZDINX-NEXT: fle.d a0, a0, a1 608; RV64IZFINXZDINX-NEXT: beqz a0, .LBB10_2 609; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 610; RV64IZFINXZDINX-NEXT: ret 611; RV64IZFINXZDINX-NEXT: .LBB10_2: # %if.then 612; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 613; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 614; RV64IZFINXZDINX-NEXT: call abort 615 %1 = fcmp ugt double %a, %b 616 br i1 %1, label %if.then, label %if.else 617if.else: 618 ret void 619if.then: 620 tail call void @abort() 621 unreachable 622} 623 624define void @br_fcmp_uge(double %a, double %b) nounwind { 625; RV32IFD-LABEL: br_fcmp_uge: 626; RV32IFD: # %bb.0: 627; RV32IFD-NEXT: flt.d a0, fa0, fa1 628; RV32IFD-NEXT: beqz a0, .LBB11_2 629; RV32IFD-NEXT: # %bb.1: # %if.else 630; RV32IFD-NEXT: ret 631; RV32IFD-NEXT: .LBB11_2: # %if.then 632; RV32IFD-NEXT: addi sp, sp, -16 633; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 634; RV32IFD-NEXT: call abort 635; 636; RV64IFD-LABEL: br_fcmp_uge: 637; RV64IFD: # %bb.0: 638; RV64IFD-NEXT: flt.d a0, fa0, fa1 639; RV64IFD-NEXT: beqz a0, .LBB11_2 640; RV64IFD-NEXT: # %bb.1: # %if.else 641; RV64IFD-NEXT: ret 642; RV64IFD-NEXT: .LBB11_2: # %if.then 643; RV64IFD-NEXT: addi sp, sp, -16 644; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 645; RV64IFD-NEXT: call abort 646; 647; RV32IZFINXZDINX-LABEL: br_fcmp_uge: 648; RV32IZFINXZDINX: # %bb.0: 649; RV32IZFINXZDINX-NEXT: flt.d a0, a0, a2 650; RV32IZFINXZDINX-NEXT: beqz a0, .LBB11_2 651; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 652; RV32IZFINXZDINX-NEXT: ret 653; RV32IZFINXZDINX-NEXT: .LBB11_2: # %if.then 654; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 655; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 656; RV32IZFINXZDINX-NEXT: call abort 657; 658; RV64IZFINXZDINX-LABEL: br_fcmp_uge: 659; RV64IZFINXZDINX: # %bb.0: 660; RV64IZFINXZDINX-NEXT: flt.d a0, a0, a1 661; RV64IZFINXZDINX-NEXT: beqz a0, .LBB11_2 662; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 663; RV64IZFINXZDINX-NEXT: ret 664; RV64IZFINXZDINX-NEXT: .LBB11_2: # %if.then 665; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 666; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 667; RV64IZFINXZDINX-NEXT: call abort 668 %1 = fcmp uge double %a, %b 669 br i1 %1, label %if.then, label %if.else 670if.else: 671 ret void 672if.then: 673 tail call void @abort() 674 unreachable 675} 676 677define void @br_fcmp_ult(double %a, double %b) nounwind { 678; RV32IFD-LABEL: br_fcmp_ult: 679; RV32IFD: # %bb.0: 680; RV32IFD-NEXT: fle.d a0, fa1, fa0 681; RV32IFD-NEXT: beqz a0, .LBB12_2 682; RV32IFD-NEXT: # %bb.1: # %if.else 683; RV32IFD-NEXT: ret 684; RV32IFD-NEXT: .LBB12_2: # %if.then 685; RV32IFD-NEXT: addi sp, sp, -16 686; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 687; RV32IFD-NEXT: call abort 688; 689; RV64IFD-LABEL: br_fcmp_ult: 690; RV64IFD: # %bb.0: 691; RV64IFD-NEXT: fle.d a0, fa1, fa0 692; RV64IFD-NEXT: beqz a0, .LBB12_2 693; RV64IFD-NEXT: # %bb.1: # %if.else 694; RV64IFD-NEXT: ret 695; RV64IFD-NEXT: .LBB12_2: # %if.then 696; RV64IFD-NEXT: addi sp, sp, -16 697; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 698; RV64IFD-NEXT: call abort 699; 700; RV32IZFINXZDINX-LABEL: br_fcmp_ult: 701; RV32IZFINXZDINX: # %bb.0: 702; RV32IZFINXZDINX-NEXT: fle.d a0, a2, a0 703; RV32IZFINXZDINX-NEXT: beqz a0, .LBB12_2 704; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 705; RV32IZFINXZDINX-NEXT: ret 706; RV32IZFINXZDINX-NEXT: .LBB12_2: # %if.then 707; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 708; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 709; RV32IZFINXZDINX-NEXT: call abort 710; 711; RV64IZFINXZDINX-LABEL: br_fcmp_ult: 712; RV64IZFINXZDINX: # %bb.0: 713; RV64IZFINXZDINX-NEXT: fle.d a0, a1, a0 714; RV64IZFINXZDINX-NEXT: beqz a0, .LBB12_2 715; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 716; RV64IZFINXZDINX-NEXT: ret 717; RV64IZFINXZDINX-NEXT: .LBB12_2: # %if.then 718; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 719; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 720; RV64IZFINXZDINX-NEXT: call abort 721 %1 = fcmp ult double %a, %b 722 br i1 %1, label %if.then, label %if.else 723if.else: 724 ret void 725if.then: 726 tail call void @abort() 727 unreachable 728} 729 730define void @br_fcmp_ule(double %a, double %b) nounwind { 731; RV32IFD-LABEL: br_fcmp_ule: 732; RV32IFD: # %bb.0: 733; RV32IFD-NEXT: flt.d a0, fa1, fa0 734; RV32IFD-NEXT: beqz a0, .LBB13_2 735; RV32IFD-NEXT: # %bb.1: # %if.else 736; RV32IFD-NEXT: ret 737; RV32IFD-NEXT: .LBB13_2: # %if.then 738; RV32IFD-NEXT: addi sp, sp, -16 739; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 740; RV32IFD-NEXT: call abort 741; 742; RV64IFD-LABEL: br_fcmp_ule: 743; RV64IFD: # %bb.0: 744; RV64IFD-NEXT: flt.d a0, fa1, fa0 745; RV64IFD-NEXT: beqz a0, .LBB13_2 746; RV64IFD-NEXT: # %bb.1: # %if.else 747; RV64IFD-NEXT: ret 748; RV64IFD-NEXT: .LBB13_2: # %if.then 749; RV64IFD-NEXT: addi sp, sp, -16 750; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 751; RV64IFD-NEXT: call abort 752; 753; RV32IZFINXZDINX-LABEL: br_fcmp_ule: 754; RV32IZFINXZDINX: # %bb.0: 755; RV32IZFINXZDINX-NEXT: flt.d a0, a2, a0 756; RV32IZFINXZDINX-NEXT: beqz a0, .LBB13_2 757; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 758; RV32IZFINXZDINX-NEXT: ret 759; RV32IZFINXZDINX-NEXT: .LBB13_2: # %if.then 760; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 761; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 762; RV32IZFINXZDINX-NEXT: call abort 763; 764; RV64IZFINXZDINX-LABEL: br_fcmp_ule: 765; RV64IZFINXZDINX: # %bb.0: 766; RV64IZFINXZDINX-NEXT: flt.d a0, a1, a0 767; RV64IZFINXZDINX-NEXT: beqz a0, .LBB13_2 768; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 769; RV64IZFINXZDINX-NEXT: ret 770; RV64IZFINXZDINX-NEXT: .LBB13_2: # %if.then 771; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 772; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 773; RV64IZFINXZDINX-NEXT: call abort 774 %1 = fcmp ule double %a, %b 775 br i1 %1, label %if.then, label %if.else 776if.else: 777 ret void 778if.then: 779 tail call void @abort() 780 unreachable 781} 782 783define void @br_fcmp_une(double %a, double %b) nounwind { 784; RV32IFD-LABEL: br_fcmp_une: 785; RV32IFD: # %bb.0: 786; RV32IFD-NEXT: feq.d a0, fa0, fa1 787; RV32IFD-NEXT: beqz a0, .LBB14_2 788; RV32IFD-NEXT: # %bb.1: # %if.else 789; RV32IFD-NEXT: ret 790; RV32IFD-NEXT: .LBB14_2: # %if.then 791; RV32IFD-NEXT: addi sp, sp, -16 792; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 793; RV32IFD-NEXT: call abort 794; 795; RV64IFD-LABEL: br_fcmp_une: 796; RV64IFD: # %bb.0: 797; RV64IFD-NEXT: feq.d a0, fa0, fa1 798; RV64IFD-NEXT: beqz a0, .LBB14_2 799; RV64IFD-NEXT: # %bb.1: # %if.else 800; RV64IFD-NEXT: ret 801; RV64IFD-NEXT: .LBB14_2: # %if.then 802; RV64IFD-NEXT: addi sp, sp, -16 803; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 804; RV64IFD-NEXT: call abort 805; 806; RV32IZFINXZDINX-LABEL: br_fcmp_une: 807; RV32IZFINXZDINX: # %bb.0: 808; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a2 809; RV32IZFINXZDINX-NEXT: beqz a0, .LBB14_2 810; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 811; RV32IZFINXZDINX-NEXT: ret 812; RV32IZFINXZDINX-NEXT: .LBB14_2: # %if.then 813; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 814; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 815; RV32IZFINXZDINX-NEXT: call abort 816; 817; RV64IZFINXZDINX-LABEL: br_fcmp_une: 818; RV64IZFINXZDINX: # %bb.0: 819; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a1 820; RV64IZFINXZDINX-NEXT: beqz a0, .LBB14_2 821; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 822; RV64IZFINXZDINX-NEXT: ret 823; RV64IZFINXZDINX-NEXT: .LBB14_2: # %if.then 824; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 825; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 826; RV64IZFINXZDINX-NEXT: call abort 827 %1 = fcmp une double %a, %b 828 br i1 %1, label %if.then, label %if.else 829if.else: 830 ret void 831if.then: 832 tail call void @abort() 833 unreachable 834} 835 836define void @br_fcmp_uno(double %a, double %b) nounwind { 837; RV32IFD-LABEL: br_fcmp_uno: 838; RV32IFD: # %bb.0: 839; RV32IFD-NEXT: feq.d a0, fa1, fa1 840; RV32IFD-NEXT: feq.d a1, fa0, fa0 841; RV32IFD-NEXT: and a0, a1, a0 842; RV32IFD-NEXT: beqz a0, .LBB15_2 843; RV32IFD-NEXT: # %bb.1: # %if.else 844; RV32IFD-NEXT: ret 845; RV32IFD-NEXT: .LBB15_2: # %if.then 846; RV32IFD-NEXT: addi sp, sp, -16 847; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 848; RV32IFD-NEXT: call abort 849; 850; RV64IFD-LABEL: br_fcmp_uno: 851; RV64IFD: # %bb.0: 852; RV64IFD-NEXT: feq.d a0, fa1, fa1 853; RV64IFD-NEXT: feq.d a1, fa0, fa0 854; RV64IFD-NEXT: and a0, a1, a0 855; RV64IFD-NEXT: beqz a0, .LBB15_2 856; RV64IFD-NEXT: # %bb.1: # %if.else 857; RV64IFD-NEXT: ret 858; RV64IFD-NEXT: .LBB15_2: # %if.then 859; RV64IFD-NEXT: addi sp, sp, -16 860; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 861; RV64IFD-NEXT: call abort 862; 863; RV32IZFINXZDINX-LABEL: br_fcmp_uno: 864; RV32IZFINXZDINX: # %bb.0: 865; RV32IZFINXZDINX-NEXT: feq.d a2, a2, a2 866; RV32IZFINXZDINX-NEXT: feq.d a0, a0, a0 867; RV32IZFINXZDINX-NEXT: and a0, a0, a2 868; RV32IZFINXZDINX-NEXT: beqz a0, .LBB15_2 869; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 870; RV32IZFINXZDINX-NEXT: ret 871; RV32IZFINXZDINX-NEXT: .LBB15_2: # %if.then 872; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 873; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 874; RV32IZFINXZDINX-NEXT: call abort 875; 876; RV64IZFINXZDINX-LABEL: br_fcmp_uno: 877; RV64IZFINXZDINX: # %bb.0: 878; RV64IZFINXZDINX-NEXT: feq.d a1, a1, a1 879; RV64IZFINXZDINX-NEXT: feq.d a0, a0, a0 880; RV64IZFINXZDINX-NEXT: and a0, a0, a1 881; RV64IZFINXZDINX-NEXT: beqz a0, .LBB15_2 882; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 883; RV64IZFINXZDINX-NEXT: ret 884; RV64IZFINXZDINX-NEXT: .LBB15_2: # %if.then 885; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 886; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 887; RV64IZFINXZDINX-NEXT: call abort 888 %1 = fcmp uno double %a, %b 889 br i1 %1, label %if.then, label %if.else 890if.else: 891 ret void 892if.then: 893 tail call void @abort() 894 unreachable 895} 896 897define void @br_fcmp_true(double %a, double %b) nounwind { 898; RV32IFD-LABEL: br_fcmp_true: 899; RV32IFD: # %bb.0: 900; RV32IFD-NEXT: li a0, 1 901; RV32IFD-NEXT: bnez a0, .LBB16_2 902; RV32IFD-NEXT: # %bb.1: # %if.else 903; RV32IFD-NEXT: ret 904; RV32IFD-NEXT: .LBB16_2: # %if.then 905; RV32IFD-NEXT: addi sp, sp, -16 906; RV32IFD-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 907; RV32IFD-NEXT: call abort 908; 909; RV64IFD-LABEL: br_fcmp_true: 910; RV64IFD: # %bb.0: 911; RV64IFD-NEXT: li a0, 1 912; RV64IFD-NEXT: bnez a0, .LBB16_2 913; RV64IFD-NEXT: # %bb.1: # %if.else 914; RV64IFD-NEXT: ret 915; RV64IFD-NEXT: .LBB16_2: # %if.then 916; RV64IFD-NEXT: addi sp, sp, -16 917; RV64IFD-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 918; RV64IFD-NEXT: call abort 919; 920; RV32IZFINXZDINX-LABEL: br_fcmp_true: 921; RV32IZFINXZDINX: # %bb.0: 922; RV32IZFINXZDINX-NEXT: li a0, 1 923; RV32IZFINXZDINX-NEXT: bnez a0, .LBB16_2 924; RV32IZFINXZDINX-NEXT: # %bb.1: # %if.else 925; RV32IZFINXZDINX-NEXT: ret 926; RV32IZFINXZDINX-NEXT: .LBB16_2: # %if.then 927; RV32IZFINXZDINX-NEXT: addi sp, sp, -16 928; RV32IZFINXZDINX-NEXT: sw ra, 12(sp) # 4-byte Folded Spill 929; RV32IZFINXZDINX-NEXT: call abort 930; 931; RV64IZFINXZDINX-LABEL: br_fcmp_true: 932; RV64IZFINXZDINX: # %bb.0: 933; RV64IZFINXZDINX-NEXT: li a0, 1 934; RV64IZFINXZDINX-NEXT: bnez a0, .LBB16_2 935; RV64IZFINXZDINX-NEXT: # %bb.1: # %if.else 936; RV64IZFINXZDINX-NEXT: ret 937; RV64IZFINXZDINX-NEXT: .LBB16_2: # %if.then 938; RV64IZFINXZDINX-NEXT: addi sp, sp, -16 939; RV64IZFINXZDINX-NEXT: sd ra, 8(sp) # 8-byte Folded Spill 940; RV64IZFINXZDINX-NEXT: call abort 941 %1 = fcmp true double %a, %b 942 br i1 %1, label %if.then, label %if.else 943if.else: 944 ret void 945if.then: 946 tail call void @abort() 947 unreachable 948} 949