brintos

brintos / llvm-project-archived public Read only

0
0
Text · 50.1 KiB · 610f34d Raw
1516 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs < %s \3; RUN:   -disable-strictnode-mutation -target-abi=ilp32d \4; RUN:   | FileCheck -check-prefix=CHECKIFD %s5; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \6; RUN:   -disable-strictnode-mutation -target-abi=lp64d \7; RUN:   | FileCheck -check-prefix=CHECKIFD %s8; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \9; RUN:   -disable-strictnode-mutation -target-abi=ilp32 \10; RUN:   | FileCheck -check-prefix=RV32IZFINXZDINX %s11; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \12; RUN:   -disable-strictnode-mutation -target-abi=lp64 \13; RUN:   | FileCheck -check-prefix=RV64IZFINXZDINX %s14; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \15; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV32I %s16; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \17; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV64I %s18 19define i32 @fcmp_oeq(double %a, double %b) nounwind strictfp {20; CHECKIFD-LABEL: fcmp_oeq:21; CHECKIFD:       # %bb.0:22; CHECKIFD-NEXT:    feq.d a0, fa0, fa123; CHECKIFD-NEXT:    ret24;25; RV32IZFINXZDINX-LABEL: fcmp_oeq:26; RV32IZFINXZDINX:       # %bb.0:27; RV32IZFINXZDINX-NEXT:    feq.d a0, a0, a228; RV32IZFINXZDINX-NEXT:    ret29;30; RV64IZFINXZDINX-LABEL: fcmp_oeq:31; RV64IZFINXZDINX:       # %bb.0:32; RV64IZFINXZDINX-NEXT:    feq.d a0, a0, a133; RV64IZFINXZDINX-NEXT:    ret34;35; RV32I-LABEL: fcmp_oeq:36; RV32I:       # %bb.0:37; RV32I-NEXT:    addi sp, sp, -1638; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill39; RV32I-NEXT:    call __eqdf240; RV32I-NEXT:    seqz a0, a041; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload42; RV32I-NEXT:    addi sp, sp, 1643; RV32I-NEXT:    ret44;45; RV64I-LABEL: fcmp_oeq:46; RV64I:       # %bb.0:47; RV64I-NEXT:    addi sp, sp, -1648; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill49; RV64I-NEXT:    call __eqdf250; RV64I-NEXT:    seqz a0, a051; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload52; RV64I-NEXT:    addi sp, sp, 1653; RV64I-NEXT:    ret54  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp55  %2 = zext i1 %1 to i3256  ret i32 %257}58 59define i32 @fcmp_ogt(double %a, double %b) nounwind strictfp {60; CHECKIFD-LABEL: fcmp_ogt:61; CHECKIFD:       # %bb.0:62; CHECKIFD-NEXT:    frflags a163; CHECKIFD-NEXT:    flt.d a0, fa1, fa064; CHECKIFD-NEXT:    fsflags a165; CHECKIFD-NEXT:    feq.d zero, fa1, fa066; CHECKIFD-NEXT:    ret67;68; RV32IZFINXZDINX-LABEL: fcmp_ogt:69; RV32IZFINXZDINX:       # %bb.0:70; RV32IZFINXZDINX-NEXT:    frflags a571; RV32IZFINXZDINX-NEXT:    flt.d a4, a2, a072; RV32IZFINXZDINX-NEXT:    fsflags a573; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a074; RV32IZFINXZDINX-NEXT:    mv a0, a475; RV32IZFINXZDINX-NEXT:    ret76;77; RV64IZFINXZDINX-LABEL: fcmp_ogt:78; RV64IZFINXZDINX:       # %bb.0:79; RV64IZFINXZDINX-NEXT:    frflags a380; RV64IZFINXZDINX-NEXT:    flt.d a2, a1, a081; RV64IZFINXZDINX-NEXT:    fsflags a382; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a083; RV64IZFINXZDINX-NEXT:    mv a0, a284; RV64IZFINXZDINX-NEXT:    ret85;86; RV32I-LABEL: fcmp_ogt:87; RV32I:       # %bb.0:88; RV32I-NEXT:    addi sp, sp, -1689; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill90; RV32I-NEXT:    call __gtdf291; RV32I-NEXT:    sgtz a0, a092; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload93; RV32I-NEXT:    addi sp, sp, 1694; RV32I-NEXT:    ret95;96; RV64I-LABEL: fcmp_ogt:97; RV64I:       # %bb.0:98; RV64I-NEXT:    addi sp, sp, -1699; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill100; RV64I-NEXT:    call __gtdf2101; RV64I-NEXT:    sgtz a0, a0102; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload103; RV64I-NEXT:    addi sp, sp, 16104; RV64I-NEXT:    ret105  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp106  %2 = zext i1 %1 to i32107  ret i32 %2108}109 110define i32 @fcmp_oge(double %a, double %b) nounwind strictfp {111; CHECKIFD-LABEL: fcmp_oge:112; CHECKIFD:       # %bb.0:113; CHECKIFD-NEXT:    frflags a1114; CHECKIFD-NEXT:    fle.d a0, fa1, fa0115; CHECKIFD-NEXT:    fsflags a1116; CHECKIFD-NEXT:    feq.d zero, fa1, fa0117; CHECKIFD-NEXT:    ret118;119; RV32IZFINXZDINX-LABEL: fcmp_oge:120; RV32IZFINXZDINX:       # %bb.0:121; RV32IZFINXZDINX-NEXT:    frflags a5122; RV32IZFINXZDINX-NEXT:    fle.d a4, a2, a0123; RV32IZFINXZDINX-NEXT:    fsflags a5124; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0125; RV32IZFINXZDINX-NEXT:    mv a0, a4126; RV32IZFINXZDINX-NEXT:    ret127;128; RV64IZFINXZDINX-LABEL: fcmp_oge:129; RV64IZFINXZDINX:       # %bb.0:130; RV64IZFINXZDINX-NEXT:    frflags a3131; RV64IZFINXZDINX-NEXT:    fle.d a2, a1, a0132; RV64IZFINXZDINX-NEXT:    fsflags a3133; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0134; RV64IZFINXZDINX-NEXT:    mv a0, a2135; RV64IZFINXZDINX-NEXT:    ret136;137; RV32I-LABEL: fcmp_oge:138; RV32I:       # %bb.0:139; RV32I-NEXT:    addi sp, sp, -16140; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill141; RV32I-NEXT:    call __gedf2142; RV32I-NEXT:    srli a0, a0, 31143; RV32I-NEXT:    xori a0, a0, 1144; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload145; RV32I-NEXT:    addi sp, sp, 16146; RV32I-NEXT:    ret147;148; RV64I-LABEL: fcmp_oge:149; RV64I:       # %bb.0:150; RV64I-NEXT:    addi sp, sp, -16151; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill152; RV64I-NEXT:    call __gedf2153; RV64I-NEXT:    srli a0, a0, 63154; RV64I-NEXT:    xori a0, a0, 1155; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload156; RV64I-NEXT:    addi sp, sp, 16157; RV64I-NEXT:    ret158  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") strictfp159  %2 = zext i1 %1 to i32160  ret i32 %2161}162 163define i32 @fcmp_olt(double %a, double %b) nounwind strictfp {164; CHECKIFD-LABEL: fcmp_olt:165; CHECKIFD:       # %bb.0:166; CHECKIFD-NEXT:    frflags a1167; CHECKIFD-NEXT:    flt.d a0, fa0, fa1168; CHECKIFD-NEXT:    fsflags a1169; CHECKIFD-NEXT:    feq.d zero, fa0, fa1170; CHECKIFD-NEXT:    ret171;172; RV32IZFINXZDINX-LABEL: fcmp_olt:173; RV32IZFINXZDINX:       # %bb.0:174; RV32IZFINXZDINX-NEXT:    frflags a5175; RV32IZFINXZDINX-NEXT:    flt.d a4, a0, a2176; RV32IZFINXZDINX-NEXT:    fsflags a5177; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2178; RV32IZFINXZDINX-NEXT:    mv a0, a4179; RV32IZFINXZDINX-NEXT:    ret180;181; RV64IZFINXZDINX-LABEL: fcmp_olt:182; RV64IZFINXZDINX:       # %bb.0:183; RV64IZFINXZDINX-NEXT:    frflags a3184; RV64IZFINXZDINX-NEXT:    flt.d a2, a0, a1185; RV64IZFINXZDINX-NEXT:    fsflags a3186; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1187; RV64IZFINXZDINX-NEXT:    mv a0, a2188; RV64IZFINXZDINX-NEXT:    ret189;190; RV32I-LABEL: fcmp_olt:191; RV32I:       # %bb.0:192; RV32I-NEXT:    addi sp, sp, -16193; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill194; RV32I-NEXT:    call __ltdf2195; RV32I-NEXT:    srli a0, a0, 31196; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload197; RV32I-NEXT:    addi sp, sp, 16198; RV32I-NEXT:    ret199;200; RV64I-LABEL: fcmp_olt:201; RV64I:       # %bb.0:202; RV64I-NEXT:    addi sp, sp, -16203; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill204; RV64I-NEXT:    call __ltdf2205; RV64I-NEXT:    srli a0, a0, 63206; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload207; RV64I-NEXT:    addi sp, sp, 16208; RV64I-NEXT:    ret209  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") strictfp210  %2 = zext i1 %1 to i32211  ret i32 %2212}213 214define i32 @fcmp_ole(double %a, double %b) nounwind strictfp {215; CHECKIFD-LABEL: fcmp_ole:216; CHECKIFD:       # %bb.0:217; CHECKIFD-NEXT:    frflags a1218; CHECKIFD-NEXT:    fle.d a0, fa0, fa1219; CHECKIFD-NEXT:    fsflags a1220; CHECKIFD-NEXT:    feq.d zero, fa0, fa1221; CHECKIFD-NEXT:    ret222;223; RV32IZFINXZDINX-LABEL: fcmp_ole:224; RV32IZFINXZDINX:       # %bb.0:225; RV32IZFINXZDINX-NEXT:    frflags a5226; RV32IZFINXZDINX-NEXT:    fle.d a4, a0, a2227; RV32IZFINXZDINX-NEXT:    fsflags a5228; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2229; RV32IZFINXZDINX-NEXT:    mv a0, a4230; RV32IZFINXZDINX-NEXT:    ret231;232; RV64IZFINXZDINX-LABEL: fcmp_ole:233; RV64IZFINXZDINX:       # %bb.0:234; RV64IZFINXZDINX-NEXT:    frflags a3235; RV64IZFINXZDINX-NEXT:    fle.d a2, a0, a1236; RV64IZFINXZDINX-NEXT:    fsflags a3237; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1238; RV64IZFINXZDINX-NEXT:    mv a0, a2239; RV64IZFINXZDINX-NEXT:    ret240;241; RV32I-LABEL: fcmp_ole:242; RV32I:       # %bb.0:243; RV32I-NEXT:    addi sp, sp, -16244; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill245; RV32I-NEXT:    call __ledf2246; RV32I-NEXT:    slti a0, a0, 1247; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload248; RV32I-NEXT:    addi sp, sp, 16249; RV32I-NEXT:    ret250;251; RV64I-LABEL: fcmp_ole:252; RV64I:       # %bb.0:253; RV64I-NEXT:    addi sp, sp, -16254; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill255; RV64I-NEXT:    call __ledf2256; RV64I-NEXT:    slti a0, a0, 1257; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload258; RV64I-NEXT:    addi sp, sp, 16259; RV64I-NEXT:    ret260  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") strictfp261  %2 = zext i1 %1 to i32262  ret i32 %2263}264 265; FIXME: We only need one frflags before the two flts and one fsflags after the266; two flts.267define i32 @fcmp_one(double %a, double %b) nounwind strictfp {268; CHECKIFD-LABEL: fcmp_one:269; CHECKIFD:       # %bb.0:270; CHECKIFD-NEXT:    frflags a0271; CHECKIFD-NEXT:    flt.d a1, fa0, fa1272; CHECKIFD-NEXT:    fsflags a0273; CHECKIFD-NEXT:    feq.d zero, fa0, fa1274; CHECKIFD-NEXT:    frflags a0275; CHECKIFD-NEXT:    flt.d a2, fa1, fa0276; CHECKIFD-NEXT:    fsflags a0277; CHECKIFD-NEXT:    or a0, a2, a1278; CHECKIFD-NEXT:    feq.d zero, fa1, fa0279; CHECKIFD-NEXT:    ret280;281; RV32IZFINXZDINX-LABEL: fcmp_one:282; RV32IZFINXZDINX:       # %bb.0:283; RV32IZFINXZDINX-NEXT:    frflags a4284; RV32IZFINXZDINX-NEXT:    flt.d a5, a0, a2285; RV32IZFINXZDINX-NEXT:    fsflags a4286; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2287; RV32IZFINXZDINX-NEXT:    frflags a4288; RV32IZFINXZDINX-NEXT:    flt.d a6, a2, a0289; RV32IZFINXZDINX-NEXT:    fsflags a4290; RV32IZFINXZDINX-NEXT:    or a4, a6, a5291; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0292; RV32IZFINXZDINX-NEXT:    mv a0, a4293; RV32IZFINXZDINX-NEXT:    ret294;295; RV64IZFINXZDINX-LABEL: fcmp_one:296; RV64IZFINXZDINX:       # %bb.0:297; RV64IZFINXZDINX-NEXT:    frflags a2298; RV64IZFINXZDINX-NEXT:    flt.d a3, a0, a1299; RV64IZFINXZDINX-NEXT:    fsflags a2300; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1301; RV64IZFINXZDINX-NEXT:    frflags a2302; RV64IZFINXZDINX-NEXT:    flt.d a4, a1, a0303; RV64IZFINXZDINX-NEXT:    fsflags a2304; RV64IZFINXZDINX-NEXT:    or a2, a4, a3305; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0306; RV64IZFINXZDINX-NEXT:    mv a0, a2307; RV64IZFINXZDINX-NEXT:    ret308;309; RV32I-LABEL: fcmp_one:310; RV32I:       # %bb.0:311; RV32I-NEXT:    addi sp, sp, -32312; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill313; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill314; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill315; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill316; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill317; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill318; RV32I-NEXT:    mv s0, a3319; RV32I-NEXT:    mv s1, a2320; RV32I-NEXT:    mv s2, a1321; RV32I-NEXT:    mv s3, a0322; RV32I-NEXT:    call __eqdf2323; RV32I-NEXT:    snez s4, a0324; RV32I-NEXT:    mv a0, s3325; RV32I-NEXT:    mv a1, s2326; RV32I-NEXT:    mv a2, s1327; RV32I-NEXT:    mv a3, s0328; RV32I-NEXT:    call __unorddf2329; RV32I-NEXT:    seqz a0, a0330; RV32I-NEXT:    and a0, a0, s4331; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload332; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload333; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload334; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload335; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload336; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload337; RV32I-NEXT:    addi sp, sp, 32338; RV32I-NEXT:    ret339;340; RV64I-LABEL: fcmp_one:341; RV64I:       # %bb.0:342; RV64I-NEXT:    addi sp, sp, -32343; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill344; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill345; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill346; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill347; RV64I-NEXT:    mv s0, a1348; RV64I-NEXT:    mv s1, a0349; RV64I-NEXT:    call __eqdf2350; RV64I-NEXT:    snez s2, a0351; RV64I-NEXT:    mv a0, s1352; RV64I-NEXT:    mv a1, s0353; RV64I-NEXT:    call __unorddf2354; RV64I-NEXT:    seqz a0, a0355; RV64I-NEXT:    and a0, a0, s2356; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload357; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload358; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload359; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload360; RV64I-NEXT:    addi sp, sp, 32361; RV64I-NEXT:    ret362  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") strictfp363  %2 = zext i1 %1 to i32364  ret i32 %2365}366 367define i32 @fcmp_ord(double %a, double %b) nounwind strictfp {368; CHECKIFD-LABEL: fcmp_ord:369; CHECKIFD:       # %bb.0:370; CHECKIFD-NEXT:    feq.d a0, fa1, fa1371; CHECKIFD-NEXT:    feq.d a1, fa0, fa0372; CHECKIFD-NEXT:    and a0, a1, a0373; CHECKIFD-NEXT:    ret374;375; RV32IZFINXZDINX-LABEL: fcmp_ord:376; RV32IZFINXZDINX:       # %bb.0:377; RV32IZFINXZDINX-NEXT:    feq.d a2, a2, a2378; RV32IZFINXZDINX-NEXT:    feq.d a0, a0, a0379; RV32IZFINXZDINX-NEXT:    and a0, a0, a2380; RV32IZFINXZDINX-NEXT:    ret381;382; RV64IZFINXZDINX-LABEL: fcmp_ord:383; RV64IZFINXZDINX:       # %bb.0:384; RV64IZFINXZDINX-NEXT:    feq.d a1, a1, a1385; RV64IZFINXZDINX-NEXT:    feq.d a0, a0, a0386; RV64IZFINXZDINX-NEXT:    and a0, a0, a1387; RV64IZFINXZDINX-NEXT:    ret388;389; RV32I-LABEL: fcmp_ord:390; RV32I:       # %bb.0:391; RV32I-NEXT:    addi sp, sp, -16392; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill393; RV32I-NEXT:    call __unorddf2394; RV32I-NEXT:    seqz a0, a0395; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload396; RV32I-NEXT:    addi sp, sp, 16397; RV32I-NEXT:    ret398;399; RV64I-LABEL: fcmp_ord:400; RV64I:       # %bb.0:401; RV64I-NEXT:    addi sp, sp, -16402; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill403; RV64I-NEXT:    call __unorddf2404; RV64I-NEXT:    seqz a0, a0405; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload406; RV64I-NEXT:    addi sp, sp, 16407; RV64I-NEXT:    ret408  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ord", metadata !"fpexcept.strict") strictfp409  %2 = zext i1 %1 to i32410  ret i32 %2411}412 413; FIXME: We only need one frflags before the two flts and one fsflags after the414; two flts.415define i32 @fcmp_ueq(double %a, double %b) nounwind strictfp {416; CHECKIFD-LABEL: fcmp_ueq:417; CHECKIFD:       # %bb.0:418; CHECKIFD-NEXT:    frflags a0419; CHECKIFD-NEXT:    flt.d a1, fa0, fa1420; CHECKIFD-NEXT:    fsflags a0421; CHECKIFD-NEXT:    feq.d zero, fa0, fa1422; CHECKIFD-NEXT:    frflags a0423; CHECKIFD-NEXT:    flt.d a2, fa1, fa0424; CHECKIFD-NEXT:    fsflags a0425; CHECKIFD-NEXT:    or a1, a2, a1426; CHECKIFD-NEXT:    xori a0, a1, 1427; CHECKIFD-NEXT:    feq.d zero, fa1, fa0428; CHECKIFD-NEXT:    ret429;430; RV32IZFINXZDINX-LABEL: fcmp_ueq:431; RV32IZFINXZDINX:       # %bb.0:432; RV32IZFINXZDINX-NEXT:    frflags a4433; RV32IZFINXZDINX-NEXT:    flt.d a5, a0, a2434; RV32IZFINXZDINX-NEXT:    fsflags a4435; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2436; RV32IZFINXZDINX-NEXT:    frflags a4437; RV32IZFINXZDINX-NEXT:    flt.d a6, a2, a0438; RV32IZFINXZDINX-NEXT:    fsflags a4439; RV32IZFINXZDINX-NEXT:    or a4, a6, a5440; RV32IZFINXZDINX-NEXT:    xori a4, a4, 1441; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0442; RV32IZFINXZDINX-NEXT:    mv a0, a4443; RV32IZFINXZDINX-NEXT:    ret444;445; RV64IZFINXZDINX-LABEL: fcmp_ueq:446; RV64IZFINXZDINX:       # %bb.0:447; RV64IZFINXZDINX-NEXT:    frflags a2448; RV64IZFINXZDINX-NEXT:    flt.d a3, a0, a1449; RV64IZFINXZDINX-NEXT:    fsflags a2450; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1451; RV64IZFINXZDINX-NEXT:    frflags a2452; RV64IZFINXZDINX-NEXT:    flt.d a4, a1, a0453; RV64IZFINXZDINX-NEXT:    fsflags a2454; RV64IZFINXZDINX-NEXT:    or a3, a4, a3455; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1456; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0457; RV64IZFINXZDINX-NEXT:    mv a0, a2458; RV64IZFINXZDINX-NEXT:    ret459;460; RV32I-LABEL: fcmp_ueq:461; RV32I:       # %bb.0:462; RV32I-NEXT:    addi sp, sp, -32463; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill464; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill465; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill466; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill467; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill468; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill469; RV32I-NEXT:    mv s0, a3470; RV32I-NEXT:    mv s1, a2471; RV32I-NEXT:    mv s2, a1472; RV32I-NEXT:    mv s3, a0473; RV32I-NEXT:    call __unorddf2474; RV32I-NEXT:    mv s4, a0475; RV32I-NEXT:    mv a0, s3476; RV32I-NEXT:    mv a1, s2477; RV32I-NEXT:    mv a2, s1478; RV32I-NEXT:    mv a3, s0479; RV32I-NEXT:    call __eqdf2480; RV32I-NEXT:    seqz a0, a0481; RV32I-NEXT:    or a0, s4, a0482; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload483; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload484; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload485; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload486; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload487; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload488; RV32I-NEXT:    addi sp, sp, 32489; RV32I-NEXT:    ret490;491; RV64I-LABEL: fcmp_ueq:492; RV64I:       # %bb.0:493; RV64I-NEXT:    addi sp, sp, -32494; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill495; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill496; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill497; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill498; RV64I-NEXT:    mv s0, a1499; RV64I-NEXT:    mv s1, a0500; RV64I-NEXT:    call __unorddf2501; RV64I-NEXT:    mv s2, a0502; RV64I-NEXT:    mv a0, s1503; RV64I-NEXT:    mv a1, s0504; RV64I-NEXT:    call __eqdf2505; RV64I-NEXT:    seqz a0, a0506; RV64I-NEXT:    or a0, s2, a0507; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload508; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload509; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload510; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload511; RV64I-NEXT:    addi sp, sp, 32512; RV64I-NEXT:    ret513  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp514  %2 = zext i1 %1 to i32515  ret i32 %2516}517 518define i32 @fcmp_ugt(double %a, double %b) nounwind strictfp {519; CHECKIFD-LABEL: fcmp_ugt:520; CHECKIFD:       # %bb.0:521; CHECKIFD-NEXT:    frflags a0522; CHECKIFD-NEXT:    fle.d a1, fa0, fa1523; CHECKIFD-NEXT:    fsflags a0524; CHECKIFD-NEXT:    xori a0, a1, 1525; CHECKIFD-NEXT:    feq.d zero, fa0, fa1526; CHECKIFD-NEXT:    ret527;528; RV32IZFINXZDINX-LABEL: fcmp_ugt:529; RV32IZFINXZDINX:       # %bb.0:530; RV32IZFINXZDINX-NEXT:    frflags a4531; RV32IZFINXZDINX-NEXT:    fle.d a5, a0, a2532; RV32IZFINXZDINX-NEXT:    fsflags a4533; RV32IZFINXZDINX-NEXT:    xori a4, a5, 1534; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2535; RV32IZFINXZDINX-NEXT:    mv a0, a4536; RV32IZFINXZDINX-NEXT:    ret537;538; RV64IZFINXZDINX-LABEL: fcmp_ugt:539; RV64IZFINXZDINX:       # %bb.0:540; RV64IZFINXZDINX-NEXT:    frflags a2541; RV64IZFINXZDINX-NEXT:    fle.d a3, a0, a1542; RV64IZFINXZDINX-NEXT:    fsflags a2543; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1544; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1545; RV64IZFINXZDINX-NEXT:    mv a0, a2546; RV64IZFINXZDINX-NEXT:    ret547;548; RV32I-LABEL: fcmp_ugt:549; RV32I:       # %bb.0:550; RV32I-NEXT:    addi sp, sp, -16551; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill552; RV32I-NEXT:    call __ledf2553; RV32I-NEXT:    sgtz a0, a0554; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload555; RV32I-NEXT:    addi sp, sp, 16556; RV32I-NEXT:    ret557;558; RV64I-LABEL: fcmp_ugt:559; RV64I:       # %bb.0:560; RV64I-NEXT:    addi sp, sp, -16561; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill562; RV64I-NEXT:    call __ledf2563; RV64I-NEXT:    sgtz a0, a0564; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload565; RV64I-NEXT:    addi sp, sp, 16566; RV64I-NEXT:    ret567  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp568  %2 = zext i1 %1 to i32569  ret i32 %2570}571 572define i32 @fcmp_uge(double %a, double %b) nounwind strictfp {573; CHECKIFD-LABEL: fcmp_uge:574; CHECKIFD:       # %bb.0:575; CHECKIFD-NEXT:    frflags a0576; CHECKIFD-NEXT:    flt.d a1, fa0, fa1577; CHECKIFD-NEXT:    fsflags a0578; CHECKIFD-NEXT:    xori a0, a1, 1579; CHECKIFD-NEXT:    feq.d zero, fa0, fa1580; CHECKIFD-NEXT:    ret581;582; RV32IZFINXZDINX-LABEL: fcmp_uge:583; RV32IZFINXZDINX:       # %bb.0:584; RV32IZFINXZDINX-NEXT:    frflags a4585; RV32IZFINXZDINX-NEXT:    flt.d a5, a0, a2586; RV32IZFINXZDINX-NEXT:    fsflags a4587; RV32IZFINXZDINX-NEXT:    xori a4, a5, 1588; RV32IZFINXZDINX-NEXT:    feq.d zero, a0, a2589; RV32IZFINXZDINX-NEXT:    mv a0, a4590; RV32IZFINXZDINX-NEXT:    ret591;592; RV64IZFINXZDINX-LABEL: fcmp_uge:593; RV64IZFINXZDINX:       # %bb.0:594; RV64IZFINXZDINX-NEXT:    frflags a2595; RV64IZFINXZDINX-NEXT:    flt.d a3, a0, a1596; RV64IZFINXZDINX-NEXT:    fsflags a2597; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1598; RV64IZFINXZDINX-NEXT:    feq.d zero, a0, a1599; RV64IZFINXZDINX-NEXT:    mv a0, a2600; RV64IZFINXZDINX-NEXT:    ret601;602; RV32I-LABEL: fcmp_uge:603; RV32I:       # %bb.0:604; RV32I-NEXT:    addi sp, sp, -16605; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill606; RV32I-NEXT:    call __ltdf2607; RV32I-NEXT:    srli a0, a0, 31608; RV32I-NEXT:    xori a0, a0, 1609; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload610; RV32I-NEXT:    addi sp, sp, 16611; RV32I-NEXT:    ret612;613; RV64I-LABEL: fcmp_uge:614; RV64I:       # %bb.0:615; RV64I-NEXT:    addi sp, sp, -16616; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill617; RV64I-NEXT:    call __ltdf2618; RV64I-NEXT:    srli a0, a0, 63619; RV64I-NEXT:    xori a0, a0, 1620; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload621; RV64I-NEXT:    addi sp, sp, 16622; RV64I-NEXT:    ret623  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") strictfp624  %2 = zext i1 %1 to i32625  ret i32 %2626}627 628define i32 @fcmp_ult(double %a, double %b) nounwind strictfp {629; CHECKIFD-LABEL: fcmp_ult:630; CHECKIFD:       # %bb.0:631; CHECKIFD-NEXT:    frflags a0632; CHECKIFD-NEXT:    fle.d a1, fa1, fa0633; CHECKIFD-NEXT:    fsflags a0634; CHECKIFD-NEXT:    xori a0, a1, 1635; CHECKIFD-NEXT:    feq.d zero, fa1, fa0636; CHECKIFD-NEXT:    ret637;638; RV32IZFINXZDINX-LABEL: fcmp_ult:639; RV32IZFINXZDINX:       # %bb.0:640; RV32IZFINXZDINX-NEXT:    frflags a4641; RV32IZFINXZDINX-NEXT:    fle.d a5, a2, a0642; RV32IZFINXZDINX-NEXT:    fsflags a4643; RV32IZFINXZDINX-NEXT:    xori a4, a5, 1644; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0645; RV32IZFINXZDINX-NEXT:    mv a0, a4646; RV32IZFINXZDINX-NEXT:    ret647;648; RV64IZFINXZDINX-LABEL: fcmp_ult:649; RV64IZFINXZDINX:       # %bb.0:650; RV64IZFINXZDINX-NEXT:    frflags a2651; RV64IZFINXZDINX-NEXT:    fle.d a3, a1, a0652; RV64IZFINXZDINX-NEXT:    fsflags a2653; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1654; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0655; RV64IZFINXZDINX-NEXT:    mv a0, a2656; RV64IZFINXZDINX-NEXT:    ret657;658; RV32I-LABEL: fcmp_ult:659; RV32I:       # %bb.0:660; RV32I-NEXT:    addi sp, sp, -16661; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill662; RV32I-NEXT:    call __gedf2663; RV32I-NEXT:    srli a0, a0, 31664; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload665; RV32I-NEXT:    addi sp, sp, 16666; RV32I-NEXT:    ret667;668; RV64I-LABEL: fcmp_ult:669; RV64I:       # %bb.0:670; RV64I-NEXT:    addi sp, sp, -16671; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill672; RV64I-NEXT:    call __gedf2673; RV64I-NEXT:    srli a0, a0, 63674; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload675; RV64I-NEXT:    addi sp, sp, 16676; RV64I-NEXT:    ret677  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") strictfp678  %2 = zext i1 %1 to i32679  ret i32 %2680}681 682define i32 @fcmp_ule(double %a, double %b) nounwind strictfp {683; CHECKIFD-LABEL: fcmp_ule:684; CHECKIFD:       # %bb.0:685; CHECKIFD-NEXT:    frflags a0686; CHECKIFD-NEXT:    flt.d a1, fa1, fa0687; CHECKIFD-NEXT:    fsflags a0688; CHECKIFD-NEXT:    xori a0, a1, 1689; CHECKIFD-NEXT:    feq.d zero, fa1, fa0690; CHECKIFD-NEXT:    ret691;692; RV32IZFINXZDINX-LABEL: fcmp_ule:693; RV32IZFINXZDINX:       # %bb.0:694; RV32IZFINXZDINX-NEXT:    frflags a4695; RV32IZFINXZDINX-NEXT:    flt.d a5, a2, a0696; RV32IZFINXZDINX-NEXT:    fsflags a4697; RV32IZFINXZDINX-NEXT:    xori a4, a5, 1698; RV32IZFINXZDINX-NEXT:    feq.d zero, a2, a0699; RV32IZFINXZDINX-NEXT:    mv a0, a4700; RV32IZFINXZDINX-NEXT:    ret701;702; RV64IZFINXZDINX-LABEL: fcmp_ule:703; RV64IZFINXZDINX:       # %bb.0:704; RV64IZFINXZDINX-NEXT:    frflags a2705; RV64IZFINXZDINX-NEXT:    flt.d a3, a1, a0706; RV64IZFINXZDINX-NEXT:    fsflags a2707; RV64IZFINXZDINX-NEXT:    xori a2, a3, 1708; RV64IZFINXZDINX-NEXT:    feq.d zero, a1, a0709; RV64IZFINXZDINX-NEXT:    mv a0, a2710; RV64IZFINXZDINX-NEXT:    ret711;712; RV32I-LABEL: fcmp_ule:713; RV32I:       # %bb.0:714; RV32I-NEXT:    addi sp, sp, -16715; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill716; RV32I-NEXT:    call __gtdf2717; RV32I-NEXT:    slti a0, a0, 1718; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload719; RV32I-NEXT:    addi sp, sp, 16720; RV32I-NEXT:    ret721;722; RV64I-LABEL: fcmp_ule:723; RV64I:       # %bb.0:724; RV64I-NEXT:    addi sp, sp, -16725; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill726; RV64I-NEXT:    call __gtdf2727; RV64I-NEXT:    slti a0, a0, 1728; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload729; RV64I-NEXT:    addi sp, sp, 16730; RV64I-NEXT:    ret731  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") strictfp732  %2 = zext i1 %1 to i32733  ret i32 %2734}735 736define i32 @fcmp_une(double %a, double %b) nounwind strictfp {737; CHECKIFD-LABEL: fcmp_une:738; CHECKIFD:       # %bb.0:739; CHECKIFD-NEXT:    feq.d a0, fa0, fa1740; CHECKIFD-NEXT:    xori a0, a0, 1741; CHECKIFD-NEXT:    ret742;743; RV32IZFINXZDINX-LABEL: fcmp_une:744; RV32IZFINXZDINX:       # %bb.0:745; RV32IZFINXZDINX-NEXT:    feq.d a0, a0, a2746; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1747; RV32IZFINXZDINX-NEXT:    ret748;749; RV64IZFINXZDINX-LABEL: fcmp_une:750; RV64IZFINXZDINX:       # %bb.0:751; RV64IZFINXZDINX-NEXT:    feq.d a0, a0, a1752; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1753; RV64IZFINXZDINX-NEXT:    ret754;755; RV32I-LABEL: fcmp_une:756; RV32I:       # %bb.0:757; RV32I-NEXT:    addi sp, sp, -16758; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill759; RV32I-NEXT:    call __nedf2760; RV32I-NEXT:    snez a0, a0761; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload762; RV32I-NEXT:    addi sp, sp, 16763; RV32I-NEXT:    ret764;765; RV64I-LABEL: fcmp_une:766; RV64I:       # %bb.0:767; RV64I-NEXT:    addi sp, sp, -16768; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill769; RV64I-NEXT:    call __nedf2770; RV64I-NEXT:    snez a0, a0771; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload772; RV64I-NEXT:    addi sp, sp, 16773; RV64I-NEXT:    ret774  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") strictfp775  %2 = zext i1 %1 to i32776  ret i32 %2777}778 779define i32 @fcmp_uno(double %a, double %b) nounwind strictfp {780; CHECKIFD-LABEL: fcmp_uno:781; CHECKIFD:       # %bb.0:782; CHECKIFD-NEXT:    feq.d a0, fa1, fa1783; CHECKIFD-NEXT:    feq.d a1, fa0, fa0784; CHECKIFD-NEXT:    and a0, a1, a0785; CHECKIFD-NEXT:    xori a0, a0, 1786; CHECKIFD-NEXT:    ret787;788; RV32IZFINXZDINX-LABEL: fcmp_uno:789; RV32IZFINXZDINX:       # %bb.0:790; RV32IZFINXZDINX-NEXT:    feq.d a2, a2, a2791; RV32IZFINXZDINX-NEXT:    feq.d a0, a0, a0792; RV32IZFINXZDINX-NEXT:    and a0, a0, a2793; RV32IZFINXZDINX-NEXT:    xori a0, a0, 1794; RV32IZFINXZDINX-NEXT:    ret795;796; RV64IZFINXZDINX-LABEL: fcmp_uno:797; RV64IZFINXZDINX:       # %bb.0:798; RV64IZFINXZDINX-NEXT:    feq.d a1, a1, a1799; RV64IZFINXZDINX-NEXT:    feq.d a0, a0, a0800; RV64IZFINXZDINX-NEXT:    and a0, a0, a1801; RV64IZFINXZDINX-NEXT:    xori a0, a0, 1802; RV64IZFINXZDINX-NEXT:    ret803;804; RV32I-LABEL: fcmp_uno:805; RV32I:       # %bb.0:806; RV32I-NEXT:    addi sp, sp, -16807; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill808; RV32I-NEXT:    call __unorddf2809; RV32I-NEXT:    snez a0, a0810; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload811; RV32I-NEXT:    addi sp, sp, 16812; RV32I-NEXT:    ret813;814; RV64I-LABEL: fcmp_uno:815; RV64I:       # %bb.0:816; RV64I-NEXT:    addi sp, sp, -16817; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill818; RV64I-NEXT:    call __unorddf2819; RV64I-NEXT:    snez a0, a0820; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload821; RV64I-NEXT:    addi sp, sp, 16822; RV64I-NEXT:    ret823  %1 = call i1 @llvm.experimental.constrained.fcmp.f64(double %a, double %b, metadata !"uno", metadata !"fpexcept.strict") strictfp824  %2 = zext i1 %1 to i32825  ret i32 %2826}827 828define i32 @fcmps_oeq(double %a, double %b) nounwind strictfp {829; CHECKIFD-LABEL: fcmps_oeq:830; CHECKIFD:       # %bb.0:831; CHECKIFD-NEXT:    fle.d a0, fa1, fa0832; CHECKIFD-NEXT:    fle.d a1, fa0, fa1833; CHECKIFD-NEXT:    and a0, a1, a0834; CHECKIFD-NEXT:    ret835;836; RV32IZFINXZDINX-LABEL: fcmps_oeq:837; RV32IZFINXZDINX:       # %bb.0:838; RV32IZFINXZDINX-NEXT:    fle.d a4, a2, a0839; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a2840; RV32IZFINXZDINX-NEXT:    and a0, a0, a4841; RV32IZFINXZDINX-NEXT:    ret842;843; RV64IZFINXZDINX-LABEL: fcmps_oeq:844; RV64IZFINXZDINX:       # %bb.0:845; RV64IZFINXZDINX-NEXT:    fle.d a2, a1, a0846; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a1847; RV64IZFINXZDINX-NEXT:    and a0, a0, a2848; RV64IZFINXZDINX-NEXT:    ret849;850; RV32I-LABEL: fcmps_oeq:851; RV32I:       # %bb.0:852; RV32I-NEXT:    addi sp, sp, -16853; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill854; RV32I-NEXT:    call __eqdf2855; RV32I-NEXT:    seqz a0, a0856; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload857; RV32I-NEXT:    addi sp, sp, 16858; RV32I-NEXT:    ret859;860; RV64I-LABEL: fcmps_oeq:861; RV64I:       # %bb.0:862; RV64I-NEXT:    addi sp, sp, -16863; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill864; RV64I-NEXT:    call __eqdf2865; RV64I-NEXT:    seqz a0, a0866; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload867; RV64I-NEXT:    addi sp, sp, 16868; RV64I-NEXT:    ret869  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp870  %2 = zext i1 %1 to i32871  ret i32 %2872}873 874define i32 @fcmps_ogt(double %a, double %b) nounwind strictfp {875; CHECKIFD-LABEL: fcmps_ogt:876; CHECKIFD:       # %bb.0:877; CHECKIFD-NEXT:    flt.d a0, fa1, fa0878; CHECKIFD-NEXT:    ret879;880; RV32IZFINXZDINX-LABEL: fcmps_ogt:881; RV32IZFINXZDINX:       # %bb.0:882; RV32IZFINXZDINX-NEXT:    flt.d a0, a2, a0883; RV32IZFINXZDINX-NEXT:    ret884;885; RV64IZFINXZDINX-LABEL: fcmps_ogt:886; RV64IZFINXZDINX:       # %bb.0:887; RV64IZFINXZDINX-NEXT:    flt.d a0, a1, a0888; RV64IZFINXZDINX-NEXT:    ret889;890; RV32I-LABEL: fcmps_ogt:891; RV32I:       # %bb.0:892; RV32I-NEXT:    addi sp, sp, -16893; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill894; RV32I-NEXT:    call __gtdf2895; RV32I-NEXT:    sgtz a0, a0896; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload897; RV32I-NEXT:    addi sp, sp, 16898; RV32I-NEXT:    ret899;900; RV64I-LABEL: fcmps_ogt:901; RV64I:       # %bb.0:902; RV64I-NEXT:    addi sp, sp, -16903; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill904; RV64I-NEXT:    call __gtdf2905; RV64I-NEXT:    sgtz a0, a0906; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload907; RV64I-NEXT:    addi sp, sp, 16908; RV64I-NEXT:    ret909  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp910  %2 = zext i1 %1 to i32911  ret i32 %2912}913 914define i32 @fcmps_oge(double %a, double %b) nounwind strictfp {915; CHECKIFD-LABEL: fcmps_oge:916; CHECKIFD:       # %bb.0:917; CHECKIFD-NEXT:    fle.d a0, fa1, fa0918; CHECKIFD-NEXT:    ret919;920; RV32IZFINXZDINX-LABEL: fcmps_oge:921; RV32IZFINXZDINX:       # %bb.0:922; RV32IZFINXZDINX-NEXT:    fle.d a0, a2, a0923; RV32IZFINXZDINX-NEXT:    ret924;925; RV64IZFINXZDINX-LABEL: fcmps_oge:926; RV64IZFINXZDINX:       # %bb.0:927; RV64IZFINXZDINX-NEXT:    fle.d a0, a1, a0928; RV64IZFINXZDINX-NEXT:    ret929;930; RV32I-LABEL: fcmps_oge:931; RV32I:       # %bb.0:932; RV32I-NEXT:    addi sp, sp, -16933; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill934; RV32I-NEXT:    call __gedf2935; RV32I-NEXT:    srli a0, a0, 31936; RV32I-NEXT:    xori a0, a0, 1937; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload938; RV32I-NEXT:    addi sp, sp, 16939; RV32I-NEXT:    ret940;941; RV64I-LABEL: fcmps_oge:942; RV64I:       # %bb.0:943; RV64I-NEXT:    addi sp, sp, -16944; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill945; RV64I-NEXT:    call __gedf2946; RV64I-NEXT:    srli a0, a0, 63947; RV64I-NEXT:    xori a0, a0, 1948; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload949; RV64I-NEXT:    addi sp, sp, 16950; RV64I-NEXT:    ret951  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"oge", metadata !"fpexcept.strict") strictfp952  %2 = zext i1 %1 to i32953  ret i32 %2954}955 956define i32 @fcmps_olt(double %a, double %b) nounwind strictfp {957; CHECKIFD-LABEL: fcmps_olt:958; CHECKIFD:       # %bb.0:959; CHECKIFD-NEXT:    flt.d a0, fa0, fa1960; CHECKIFD-NEXT:    ret961;962; RV32IZFINXZDINX-LABEL: fcmps_olt:963; RV32IZFINXZDINX:       # %bb.0:964; RV32IZFINXZDINX-NEXT:    flt.d a0, a0, a2965; RV32IZFINXZDINX-NEXT:    ret966;967; RV64IZFINXZDINX-LABEL: fcmps_olt:968; RV64IZFINXZDINX:       # %bb.0:969; RV64IZFINXZDINX-NEXT:    flt.d a0, a0, a1970; RV64IZFINXZDINX-NEXT:    ret971;972; RV32I-LABEL: fcmps_olt:973; RV32I:       # %bb.0:974; RV32I-NEXT:    addi sp, sp, -16975; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill976; RV32I-NEXT:    call __ltdf2977; RV32I-NEXT:    srli a0, a0, 31978; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload979; RV32I-NEXT:    addi sp, sp, 16980; RV32I-NEXT:    ret981;982; RV64I-LABEL: fcmps_olt:983; RV64I:       # %bb.0:984; RV64I-NEXT:    addi sp, sp, -16985; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill986; RV64I-NEXT:    call __ltdf2987; RV64I-NEXT:    srli a0, a0, 63988; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload989; RV64I-NEXT:    addi sp, sp, 16990; RV64I-NEXT:    ret991  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"olt", metadata !"fpexcept.strict") strictfp992  %2 = zext i1 %1 to i32993  ret i32 %2994}995 996define i32 @fcmps_ole(double %a, double %b) nounwind strictfp {997; CHECKIFD-LABEL: fcmps_ole:998; CHECKIFD:       # %bb.0:999; CHECKIFD-NEXT:    fle.d a0, fa0, fa11000; CHECKIFD-NEXT:    ret1001;1002; RV32IZFINXZDINX-LABEL: fcmps_ole:1003; RV32IZFINXZDINX:       # %bb.0:1004; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a21005; RV32IZFINXZDINX-NEXT:    ret1006;1007; RV64IZFINXZDINX-LABEL: fcmps_ole:1008; RV64IZFINXZDINX:       # %bb.0:1009; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a11010; RV64IZFINXZDINX-NEXT:    ret1011;1012; RV32I-LABEL: fcmps_ole:1013; RV32I:       # %bb.0:1014; RV32I-NEXT:    addi sp, sp, -161015; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1016; RV32I-NEXT:    call __ledf21017; RV32I-NEXT:    slti a0, a0, 11018; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1019; RV32I-NEXT:    addi sp, sp, 161020; RV32I-NEXT:    ret1021;1022; RV64I-LABEL: fcmps_ole:1023; RV64I:       # %bb.0:1024; RV64I-NEXT:    addi sp, sp, -161025; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1026; RV64I-NEXT:    call __ledf21027; RV64I-NEXT:    slti a0, a0, 11028; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1029; RV64I-NEXT:    addi sp, sp, 161030; RV64I-NEXT:    ret1031  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ole", metadata !"fpexcept.strict") strictfp1032  %2 = zext i1 %1 to i321033  ret i32 %21034}1035 1036define i32 @fcmps_one(double %a, double %b) nounwind strictfp {1037; CHECKIFD-LABEL: fcmps_one:1038; CHECKIFD:       # %bb.0:1039; CHECKIFD-NEXT:    flt.d a0, fa0, fa11040; CHECKIFD-NEXT:    flt.d a1, fa1, fa01041; CHECKIFD-NEXT:    or a0, a1, a01042; CHECKIFD-NEXT:    ret1043;1044; RV32IZFINXZDINX-LABEL: fcmps_one:1045; RV32IZFINXZDINX:       # %bb.0:1046; RV32IZFINXZDINX-NEXT:    flt.d a4, a0, a21047; RV32IZFINXZDINX-NEXT:    flt.d a0, a2, a01048; RV32IZFINXZDINX-NEXT:    or a0, a0, a41049; RV32IZFINXZDINX-NEXT:    ret1050;1051; RV64IZFINXZDINX-LABEL: fcmps_one:1052; RV64IZFINXZDINX:       # %bb.0:1053; RV64IZFINXZDINX-NEXT:    flt.d a2, a0, a11054; RV64IZFINXZDINX-NEXT:    flt.d a0, a1, a01055; RV64IZFINXZDINX-NEXT:    or a0, a0, a21056; RV64IZFINXZDINX-NEXT:    ret1057;1058; RV32I-LABEL: fcmps_one:1059; RV32I:       # %bb.0:1060; RV32I-NEXT:    addi sp, sp, -321061; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1062; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill1063; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill1064; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill1065; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill1066; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill1067; RV32I-NEXT:    mv s0, a31068; RV32I-NEXT:    mv s1, a21069; RV32I-NEXT:    mv s2, a11070; RV32I-NEXT:    mv s3, a01071; RV32I-NEXT:    call __eqdf21072; RV32I-NEXT:    snez s4, a01073; RV32I-NEXT:    mv a0, s31074; RV32I-NEXT:    mv a1, s21075; RV32I-NEXT:    mv a2, s11076; RV32I-NEXT:    mv a3, s01077; RV32I-NEXT:    call __unorddf21078; RV32I-NEXT:    seqz a0, a01079; RV32I-NEXT:    and a0, a0, s41080; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1081; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload1082; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload1083; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload1084; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload1085; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload1086; RV32I-NEXT:    addi sp, sp, 321087; RV32I-NEXT:    ret1088;1089; RV64I-LABEL: fcmps_one:1090; RV64I:       # %bb.0:1091; RV64I-NEXT:    addi sp, sp, -321092; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1093; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill1094; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill1095; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill1096; RV64I-NEXT:    mv s0, a11097; RV64I-NEXT:    mv s1, a01098; RV64I-NEXT:    call __eqdf21099; RV64I-NEXT:    snez s2, a01100; RV64I-NEXT:    mv a0, s11101; RV64I-NEXT:    mv a1, s01102; RV64I-NEXT:    call __unorddf21103; RV64I-NEXT:    seqz a0, a01104; RV64I-NEXT:    and a0, a0, s21105; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1106; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload1107; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload1108; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload1109; RV64I-NEXT:    addi sp, sp, 321110; RV64I-NEXT:    ret1111  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"one", metadata !"fpexcept.strict") strictfp1112  %2 = zext i1 %1 to i321113  ret i32 %21114}1115 1116define i32 @fcmps_ord(double %a, double %b) nounwind strictfp {1117; CHECKIFD-LABEL: fcmps_ord:1118; CHECKIFD:       # %bb.0:1119; CHECKIFD-NEXT:    fle.d a0, fa1, fa11120; CHECKIFD-NEXT:    fle.d a1, fa0, fa01121; CHECKIFD-NEXT:    and a0, a1, a01122; CHECKIFD-NEXT:    ret1123;1124; RV32IZFINXZDINX-LABEL: fcmps_ord:1125; RV32IZFINXZDINX:       # %bb.0:1126; RV32IZFINXZDINX-NEXT:    fle.d a2, a2, a21127; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a01128; RV32IZFINXZDINX-NEXT:    and a0, a0, a21129; RV32IZFINXZDINX-NEXT:    ret1130;1131; RV64IZFINXZDINX-LABEL: fcmps_ord:1132; RV64IZFINXZDINX:       # %bb.0:1133; RV64IZFINXZDINX-NEXT:    fle.d a1, a1, a11134; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a01135; RV64IZFINXZDINX-NEXT:    and a0, a0, a11136; RV64IZFINXZDINX-NEXT:    ret1137;1138; RV32I-LABEL: fcmps_ord:1139; RV32I:       # %bb.0:1140; RV32I-NEXT:    addi sp, sp, -161141; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1142; RV32I-NEXT:    call __unorddf21143; RV32I-NEXT:    seqz a0, a01144; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1145; RV32I-NEXT:    addi sp, sp, 161146; RV32I-NEXT:    ret1147;1148; RV64I-LABEL: fcmps_ord:1149; RV64I:       # %bb.0:1150; RV64I-NEXT:    addi sp, sp, -161151; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1152; RV64I-NEXT:    call __unorddf21153; RV64I-NEXT:    seqz a0, a01154; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1155; RV64I-NEXT:    addi sp, sp, 161156; RV64I-NEXT:    ret1157  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ord", metadata !"fpexcept.strict") strictfp1158  %2 = zext i1 %1 to i321159  ret i32 %21160}1161 1162define i32 @fcmps_ueq(double %a, double %b) nounwind strictfp {1163; CHECKIFD-LABEL: fcmps_ueq:1164; CHECKIFD:       # %bb.0:1165; CHECKIFD-NEXT:    flt.d a0, fa0, fa11166; CHECKIFD-NEXT:    flt.d a1, fa1, fa01167; CHECKIFD-NEXT:    or a0, a1, a01168; CHECKIFD-NEXT:    xori a0, a0, 11169; CHECKIFD-NEXT:    ret1170;1171; RV32IZFINXZDINX-LABEL: fcmps_ueq:1172; RV32IZFINXZDINX:       # %bb.0:1173; RV32IZFINXZDINX-NEXT:    flt.d a4, a0, a21174; RV32IZFINXZDINX-NEXT:    flt.d a0, a2, a01175; RV32IZFINXZDINX-NEXT:    or a0, a0, a41176; RV32IZFINXZDINX-NEXT:    xori a0, a0, 11177; RV32IZFINXZDINX-NEXT:    ret1178;1179; RV64IZFINXZDINX-LABEL: fcmps_ueq:1180; RV64IZFINXZDINX:       # %bb.0:1181; RV64IZFINXZDINX-NEXT:    flt.d a2, a0, a11182; RV64IZFINXZDINX-NEXT:    flt.d a0, a1, a01183; RV64IZFINXZDINX-NEXT:    or a0, a0, a21184; RV64IZFINXZDINX-NEXT:    xori a0, a0, 11185; RV64IZFINXZDINX-NEXT:    ret1186;1187; RV32I-LABEL: fcmps_ueq:1188; RV32I:       # %bb.0:1189; RV32I-NEXT:    addi sp, sp, -321190; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1191; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill1192; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill1193; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill1194; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill1195; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill1196; RV32I-NEXT:    mv s0, a31197; RV32I-NEXT:    mv s1, a21198; RV32I-NEXT:    mv s2, a11199; RV32I-NEXT:    mv s3, a01200; RV32I-NEXT:    call __unorddf21201; RV32I-NEXT:    mv s4, a01202; RV32I-NEXT:    mv a0, s31203; RV32I-NEXT:    mv a1, s21204; RV32I-NEXT:    mv a2, s11205; RV32I-NEXT:    mv a3, s01206; RV32I-NEXT:    call __eqdf21207; RV32I-NEXT:    seqz a0, a01208; RV32I-NEXT:    or a0, s4, a01209; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1210; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload1211; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload1212; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload1213; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload1214; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload1215; RV32I-NEXT:    addi sp, sp, 321216; RV32I-NEXT:    ret1217;1218; RV64I-LABEL: fcmps_ueq:1219; RV64I:       # %bb.0:1220; RV64I-NEXT:    addi sp, sp, -321221; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill1222; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill1223; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill1224; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill1225; RV64I-NEXT:    mv s0, a11226; RV64I-NEXT:    mv s1, a01227; RV64I-NEXT:    call __unorddf21228; RV64I-NEXT:    mv s2, a01229; RV64I-NEXT:    mv a0, s11230; RV64I-NEXT:    mv a1, s01231; RV64I-NEXT:    call __eqdf21232; RV64I-NEXT:    seqz a0, a01233; RV64I-NEXT:    or a0, s2, a01234; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload1235; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload1236; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload1237; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload1238; RV64I-NEXT:    addi sp, sp, 321239; RV64I-NEXT:    ret1240  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp1241  %2 = zext i1 %1 to i321242  ret i32 %21243}1244 1245define i32 @fcmps_ugt(double %a, double %b) nounwind strictfp {1246; CHECKIFD-LABEL: fcmps_ugt:1247; CHECKIFD:       # %bb.0:1248; CHECKIFD-NEXT:    fle.d a0, fa0, fa11249; CHECKIFD-NEXT:    xori a0, a0, 11250; CHECKIFD-NEXT:    ret1251;1252; RV32IZFINXZDINX-LABEL: fcmps_ugt:1253; RV32IZFINXZDINX:       # %bb.0:1254; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a21255; RV32IZFINXZDINX-NEXT:    xori a0, a0, 11256; RV32IZFINXZDINX-NEXT:    ret1257;1258; RV64IZFINXZDINX-LABEL: fcmps_ugt:1259; RV64IZFINXZDINX:       # %bb.0:1260; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a11261; RV64IZFINXZDINX-NEXT:    xori a0, a0, 11262; RV64IZFINXZDINX-NEXT:    ret1263;1264; RV32I-LABEL: fcmps_ugt:1265; RV32I:       # %bb.0:1266; RV32I-NEXT:    addi sp, sp, -161267; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1268; RV32I-NEXT:    call __ledf21269; RV32I-NEXT:    sgtz a0, a01270; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1271; RV32I-NEXT:    addi sp, sp, 161272; RV32I-NEXT:    ret1273;1274; RV64I-LABEL: fcmps_ugt:1275; RV64I:       # %bb.0:1276; RV64I-NEXT:    addi sp, sp, -161277; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1278; RV64I-NEXT:    call __ledf21279; RV64I-NEXT:    sgtz a0, a01280; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1281; RV64I-NEXT:    addi sp, sp, 161282; RV64I-NEXT:    ret1283  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp1284  %2 = zext i1 %1 to i321285  ret i32 %21286}1287 1288define i32 @fcmps_uge(double %a, double %b) nounwind strictfp {1289; CHECKIFD-LABEL: fcmps_uge:1290; CHECKIFD:       # %bb.0:1291; CHECKIFD-NEXT:    flt.d a0, fa0, fa11292; CHECKIFD-NEXT:    xori a0, a0, 11293; CHECKIFD-NEXT:    ret1294;1295; RV32IZFINXZDINX-LABEL: fcmps_uge:1296; RV32IZFINXZDINX:       # %bb.0:1297; RV32IZFINXZDINX-NEXT:    flt.d a0, a0, a21298; RV32IZFINXZDINX-NEXT:    xori a0, a0, 11299; RV32IZFINXZDINX-NEXT:    ret1300;1301; RV64IZFINXZDINX-LABEL: fcmps_uge:1302; RV64IZFINXZDINX:       # %bb.0:1303; RV64IZFINXZDINX-NEXT:    flt.d a0, a0, a11304; RV64IZFINXZDINX-NEXT:    xori a0, a0, 11305; RV64IZFINXZDINX-NEXT:    ret1306;1307; RV32I-LABEL: fcmps_uge:1308; RV32I:       # %bb.0:1309; RV32I-NEXT:    addi sp, sp, -161310; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1311; RV32I-NEXT:    call __ltdf21312; RV32I-NEXT:    srli a0, a0, 311313; RV32I-NEXT:    xori a0, a0, 11314; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1315; RV32I-NEXT:    addi sp, sp, 161316; RV32I-NEXT:    ret1317;1318; RV64I-LABEL: fcmps_uge:1319; RV64I:       # %bb.0:1320; RV64I-NEXT:    addi sp, sp, -161321; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1322; RV64I-NEXT:    call __ltdf21323; RV64I-NEXT:    srli a0, a0, 631324; RV64I-NEXT:    xori a0, a0, 11325; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1326; RV64I-NEXT:    addi sp, sp, 161327; RV64I-NEXT:    ret1328  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"uge", metadata !"fpexcept.strict") strictfp1329  %2 = zext i1 %1 to i321330  ret i32 %21331}1332 1333define i32 @fcmps_ult(double %a, double %b) nounwind strictfp {1334; CHECKIFD-LABEL: fcmps_ult:1335; CHECKIFD:       # %bb.0:1336; CHECKIFD-NEXT:    fle.d a0, fa1, fa01337; CHECKIFD-NEXT:    xori a0, a0, 11338; CHECKIFD-NEXT:    ret1339;1340; RV32IZFINXZDINX-LABEL: fcmps_ult:1341; RV32IZFINXZDINX:       # %bb.0:1342; RV32IZFINXZDINX-NEXT:    fle.d a0, a2, a01343; RV32IZFINXZDINX-NEXT:    xori a0, a0, 11344; RV32IZFINXZDINX-NEXT:    ret1345;1346; RV64IZFINXZDINX-LABEL: fcmps_ult:1347; RV64IZFINXZDINX:       # %bb.0:1348; RV64IZFINXZDINX-NEXT:    fle.d a0, a1, a01349; RV64IZFINXZDINX-NEXT:    xori a0, a0, 11350; RV64IZFINXZDINX-NEXT:    ret1351;1352; RV32I-LABEL: fcmps_ult:1353; RV32I:       # %bb.0:1354; RV32I-NEXT:    addi sp, sp, -161355; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1356; RV32I-NEXT:    call __gedf21357; RV32I-NEXT:    srli a0, a0, 311358; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1359; RV32I-NEXT:    addi sp, sp, 161360; RV32I-NEXT:    ret1361;1362; RV64I-LABEL: fcmps_ult:1363; RV64I:       # %bb.0:1364; RV64I-NEXT:    addi sp, sp, -161365; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1366; RV64I-NEXT:    call __gedf21367; RV64I-NEXT:    srli a0, a0, 631368; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1369; RV64I-NEXT:    addi sp, sp, 161370; RV64I-NEXT:    ret1371  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ult", metadata !"fpexcept.strict") strictfp1372  %2 = zext i1 %1 to i321373  ret i32 %21374}1375 1376define i32 @fcmps_ule(double %a, double %b) nounwind strictfp {1377; CHECKIFD-LABEL: fcmps_ule:1378; CHECKIFD:       # %bb.0:1379; CHECKIFD-NEXT:    flt.d a0, fa1, fa01380; CHECKIFD-NEXT:    xori a0, a0, 11381; CHECKIFD-NEXT:    ret1382;1383; RV32IZFINXZDINX-LABEL: fcmps_ule:1384; RV32IZFINXZDINX:       # %bb.0:1385; RV32IZFINXZDINX-NEXT:    flt.d a0, a2, a01386; RV32IZFINXZDINX-NEXT:    xori a0, a0, 11387; RV32IZFINXZDINX-NEXT:    ret1388;1389; RV64IZFINXZDINX-LABEL: fcmps_ule:1390; RV64IZFINXZDINX:       # %bb.0:1391; RV64IZFINXZDINX-NEXT:    flt.d a0, a1, a01392; RV64IZFINXZDINX-NEXT:    xori a0, a0, 11393; RV64IZFINXZDINX-NEXT:    ret1394;1395; RV32I-LABEL: fcmps_ule:1396; RV32I:       # %bb.0:1397; RV32I-NEXT:    addi sp, sp, -161398; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1399; RV32I-NEXT:    call __gtdf21400; RV32I-NEXT:    slti a0, a0, 11401; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1402; RV32I-NEXT:    addi sp, sp, 161403; RV32I-NEXT:    ret1404;1405; RV64I-LABEL: fcmps_ule:1406; RV64I:       # %bb.0:1407; RV64I-NEXT:    addi sp, sp, -161408; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1409; RV64I-NEXT:    call __gtdf21410; RV64I-NEXT:    slti a0, a0, 11411; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1412; RV64I-NEXT:    addi sp, sp, 161413; RV64I-NEXT:    ret1414  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"ule", metadata !"fpexcept.strict") strictfp1415  %2 = zext i1 %1 to i321416  ret i32 %21417}1418 1419define i32 @fcmps_une(double %a, double %b) nounwind strictfp {1420; CHECKIFD-LABEL: fcmps_une:1421; CHECKIFD:       # %bb.0:1422; CHECKIFD-NEXT:    fle.d a0, fa1, fa01423; CHECKIFD-NEXT:    fle.d a1, fa0, fa11424; CHECKIFD-NEXT:    and a0, a1, a01425; CHECKIFD-NEXT:    xori a0, a0, 11426; CHECKIFD-NEXT:    ret1427;1428; RV32IZFINXZDINX-LABEL: fcmps_une:1429; RV32IZFINXZDINX:       # %bb.0:1430; RV32IZFINXZDINX-NEXT:    fle.d a4, a2, a01431; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a21432; RV32IZFINXZDINX-NEXT:    and a0, a0, a41433; RV32IZFINXZDINX-NEXT:    xori a0, a0, 11434; RV32IZFINXZDINX-NEXT:    ret1435;1436; RV64IZFINXZDINX-LABEL: fcmps_une:1437; RV64IZFINXZDINX:       # %bb.0:1438; RV64IZFINXZDINX-NEXT:    fle.d a2, a1, a01439; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a11440; RV64IZFINXZDINX-NEXT:    and a0, a0, a21441; RV64IZFINXZDINX-NEXT:    xori a0, a0, 11442; RV64IZFINXZDINX-NEXT:    ret1443;1444; RV32I-LABEL: fcmps_une:1445; RV32I:       # %bb.0:1446; RV32I-NEXT:    addi sp, sp, -161447; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1448; RV32I-NEXT:    call __nedf21449; RV32I-NEXT:    snez a0, a01450; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1451; RV32I-NEXT:    addi sp, sp, 161452; RV32I-NEXT:    ret1453;1454; RV64I-LABEL: fcmps_une:1455; RV64I:       # %bb.0:1456; RV64I-NEXT:    addi sp, sp, -161457; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1458; RV64I-NEXT:    call __nedf21459; RV64I-NEXT:    snez a0, a01460; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1461; RV64I-NEXT:    addi sp, sp, 161462; RV64I-NEXT:    ret1463  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"une", metadata !"fpexcept.strict") strictfp1464  %2 = zext i1 %1 to i321465  ret i32 %21466}1467 1468define i32 @fcmps_uno(double %a, double %b) nounwind strictfp {1469; CHECKIFD-LABEL: fcmps_uno:1470; CHECKIFD:       # %bb.0:1471; CHECKIFD-NEXT:    fle.d a0, fa1, fa11472; CHECKIFD-NEXT:    fle.d a1, fa0, fa01473; CHECKIFD-NEXT:    and a0, a1, a01474; CHECKIFD-NEXT:    xori a0, a0, 11475; CHECKIFD-NEXT:    ret1476;1477; RV32IZFINXZDINX-LABEL: fcmps_uno:1478; RV32IZFINXZDINX:       # %bb.0:1479; RV32IZFINXZDINX-NEXT:    fle.d a2, a2, a21480; RV32IZFINXZDINX-NEXT:    fle.d a0, a0, a01481; RV32IZFINXZDINX-NEXT:    and a0, a0, a21482; RV32IZFINXZDINX-NEXT:    xori a0, a0, 11483; RV32IZFINXZDINX-NEXT:    ret1484;1485; RV64IZFINXZDINX-LABEL: fcmps_uno:1486; RV64IZFINXZDINX:       # %bb.0:1487; RV64IZFINXZDINX-NEXT:    fle.d a1, a1, a11488; RV64IZFINXZDINX-NEXT:    fle.d a0, a0, a01489; RV64IZFINXZDINX-NEXT:    and a0, a0, a11490; RV64IZFINXZDINX-NEXT:    xori a0, a0, 11491; RV64IZFINXZDINX-NEXT:    ret1492;1493; RV32I-LABEL: fcmps_uno:1494; RV32I:       # %bb.0:1495; RV32I-NEXT:    addi sp, sp, -161496; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1497; RV32I-NEXT:    call __unorddf21498; RV32I-NEXT:    snez a0, a01499; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1500; RV32I-NEXT:    addi sp, sp, 161501; RV32I-NEXT:    ret1502;1503; RV64I-LABEL: fcmps_uno:1504; RV64I:       # %bb.0:1505; RV64I-NEXT:    addi sp, sp, -161506; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1507; RV64I-NEXT:    call __unorddf21508; RV64I-NEXT:    snez a0, a01509; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1510; RV64I-NEXT:    addi sp, sp, 161511; RV64I-NEXT:    ret1512  %1 = call i1 @llvm.experimental.constrained.fcmps.f64(double %a, double %b, metadata !"uno", metadata !"fpexcept.strict") strictfp1513  %2 = zext i1 %1 to i321514  ret i32 %21515}1516