brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.9 KiB · 31c8589 Raw
741 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:   -target-abi=ilp32d | FileCheck -check-prefix=CHECKIFD %s4; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \5; RUN:   -target-abi=lp64d | FileCheck -check-prefix=CHECKIFD %s6; RUN: llc -mtriple=riscv32 -mattr=+zdinx -verify-machineinstrs < %s \7; RUN:   -target-abi=ilp32 | FileCheck -check-prefixes=CHECKIZFINXZDINX,CHECKRV32IZFINXZDINX %s8; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \9; RUN:   -target-abi=lp64 | FileCheck -check-prefixes=CHECKIZFINXZDINX,CHECKRV64IZFINXZDINX %s10; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \11; RUN:   | FileCheck -check-prefix=RV32I %s12; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \13; RUN:   | FileCheck -check-prefix=RV64I %s14 15define i32 @fcmp_false(double %a, double %b) nounwind {16; CHECKIFD-LABEL: fcmp_false:17; CHECKIFD:       # %bb.0:18; CHECKIFD-NEXT:    li a0, 019; CHECKIFD-NEXT:    ret20;21; CHECKIZFINXZDINX-LABEL: fcmp_false:22; CHECKIZFINXZDINX:       # %bb.0:23; CHECKIZFINXZDINX-NEXT:    li a0, 024; CHECKIZFINXZDINX-NEXT:    ret25;26; RV32I-LABEL: fcmp_false:27; RV32I:       # %bb.0:28; RV32I-NEXT:    li a0, 029; RV32I-NEXT:    ret30;31; RV64I-LABEL: fcmp_false:32; RV64I:       # %bb.0:33; RV64I-NEXT:    li a0, 034; RV64I-NEXT:    ret35  %1 = fcmp false double %a, %b36  %2 = zext i1 %1 to i3237  ret i32 %238}39 40define i32 @fcmp_oeq(double %a, double %b) nounwind {41; CHECKIFD-LABEL: fcmp_oeq:42; CHECKIFD:       # %bb.0:43; CHECKIFD-NEXT:    feq.d a0, fa0, fa144; CHECKIFD-NEXT:    ret45;46; CHECKRV32IZFINXZDINX-LABEL: fcmp_oeq:47; CHECKRV32IZFINXZDINX:       # %bb.0:48; CHECKRV32IZFINXZDINX-NEXT:    feq.d a0, a0, a249; CHECKRV32IZFINXZDINX-NEXT:    ret50;51; CHECKRV64IZFINXZDINX-LABEL: fcmp_oeq:52; CHECKRV64IZFINXZDINX:       # %bb.0:53; CHECKRV64IZFINXZDINX-NEXT:    feq.d a0, a0, a154; CHECKRV64IZFINXZDINX-NEXT:    ret55;56; RV32I-LABEL: fcmp_oeq:57; RV32I:       # %bb.0:58; RV32I-NEXT:    addi sp, sp, -1659; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill60; RV32I-NEXT:    call __eqdf261; RV32I-NEXT:    seqz a0, a062; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload63; RV32I-NEXT:    addi sp, sp, 1664; RV32I-NEXT:    ret65;66; RV64I-LABEL: fcmp_oeq:67; RV64I:       # %bb.0:68; RV64I-NEXT:    addi sp, sp, -1669; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill70; RV64I-NEXT:    call __eqdf271; RV64I-NEXT:    seqz a0, a072; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload73; RV64I-NEXT:    addi sp, sp, 1674; RV64I-NEXT:    ret75  %1 = fcmp oeq double %a, %b76  %2 = zext i1 %1 to i3277  ret i32 %278}79 80define i32 @fcmp_ogt(double %a, double %b) nounwind {81; CHECKIFD-LABEL: fcmp_ogt:82; CHECKIFD:       # %bb.0:83; CHECKIFD-NEXT:    flt.d a0, fa1, fa084; CHECKIFD-NEXT:    ret85;86; CHECKRV32IZFINXZDINX-LABEL: fcmp_ogt:87; CHECKRV32IZFINXZDINX:       # %bb.0:88; CHECKRV32IZFINXZDINX-NEXT:    flt.d a0, a2, a089; CHECKRV32IZFINXZDINX-NEXT:    ret90;91; CHECKRV64IZFINXZDINX-LABEL: fcmp_ogt:92; CHECKRV64IZFINXZDINX:       # %bb.0:93; CHECKRV64IZFINXZDINX-NEXT:    flt.d a0, a1, a094; CHECKRV64IZFINXZDINX-NEXT:    ret95;96; RV32I-LABEL: fcmp_ogt:97; RV32I:       # %bb.0:98; RV32I-NEXT:    addi sp, sp, -1699; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill100; RV32I-NEXT:    call __gtdf2101; RV32I-NEXT:    sgtz a0, a0102; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload103; RV32I-NEXT:    addi sp, sp, 16104; RV32I-NEXT:    ret105;106; RV64I-LABEL: fcmp_ogt:107; RV64I:       # %bb.0:108; RV64I-NEXT:    addi sp, sp, -16109; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill110; RV64I-NEXT:    call __gtdf2111; RV64I-NEXT:    sgtz a0, a0112; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload113; RV64I-NEXT:    addi sp, sp, 16114; RV64I-NEXT:    ret115  %1 = fcmp ogt double %a, %b116  %2 = zext i1 %1 to i32117  ret i32 %2118}119 120define i32 @fcmp_oge(double %a, double %b) nounwind {121; CHECKIFD-LABEL: fcmp_oge:122; CHECKIFD:       # %bb.0:123; CHECKIFD-NEXT:    fle.d a0, fa1, fa0124; CHECKIFD-NEXT:    ret125;126; CHECKRV32IZFINXZDINX-LABEL: fcmp_oge:127; CHECKRV32IZFINXZDINX:       # %bb.0:128; CHECKRV32IZFINXZDINX-NEXT:    fle.d a0, a2, a0129; CHECKRV32IZFINXZDINX-NEXT:    ret130;131; CHECKRV64IZFINXZDINX-LABEL: fcmp_oge:132; CHECKRV64IZFINXZDINX:       # %bb.0:133; CHECKRV64IZFINXZDINX-NEXT:    fle.d a0, a1, a0134; CHECKRV64IZFINXZDINX-NEXT:    ret135;136; RV32I-LABEL: fcmp_oge:137; RV32I:       # %bb.0:138; RV32I-NEXT:    addi sp, sp, -16139; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill140; RV32I-NEXT:    call __gedf2141; RV32I-NEXT:    srli a0, a0, 31142; RV32I-NEXT:    xori a0, a0, 1143; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload144; RV32I-NEXT:    addi sp, sp, 16145; RV32I-NEXT:    ret146;147; RV64I-LABEL: fcmp_oge:148; RV64I:       # %bb.0:149; RV64I-NEXT:    addi sp, sp, -16150; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill151; RV64I-NEXT:    call __gedf2152; RV64I-NEXT:    srli a0, a0, 63153; RV64I-NEXT:    xori a0, a0, 1154; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload155; RV64I-NEXT:    addi sp, sp, 16156; RV64I-NEXT:    ret157  %1 = fcmp oge double %a, %b158  %2 = zext i1 %1 to i32159  ret i32 %2160}161 162define i32 @fcmp_olt(double %a, double %b) nounwind {163; CHECKIFD-LABEL: fcmp_olt:164; CHECKIFD:       # %bb.0:165; CHECKIFD-NEXT:    flt.d a0, fa0, fa1166; CHECKIFD-NEXT:    ret167;168; CHECKRV32IZFINXZDINX-LABEL: fcmp_olt:169; CHECKRV32IZFINXZDINX:       # %bb.0:170; CHECKRV32IZFINXZDINX-NEXT:    flt.d a0, a0, a2171; CHECKRV32IZFINXZDINX-NEXT:    ret172;173; CHECKRV64IZFINXZDINX-LABEL: fcmp_olt:174; CHECKRV64IZFINXZDINX:       # %bb.0:175; CHECKRV64IZFINXZDINX-NEXT:    flt.d a0, a0, a1176; CHECKRV64IZFINXZDINX-NEXT:    ret177;178; RV32I-LABEL: fcmp_olt:179; RV32I:       # %bb.0:180; RV32I-NEXT:    addi sp, sp, -16181; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill182; RV32I-NEXT:    call __ltdf2183; RV32I-NEXT:    srli a0, a0, 31184; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload185; RV32I-NEXT:    addi sp, sp, 16186; RV32I-NEXT:    ret187;188; RV64I-LABEL: fcmp_olt:189; RV64I:       # %bb.0:190; RV64I-NEXT:    addi sp, sp, -16191; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill192; RV64I-NEXT:    call __ltdf2193; RV64I-NEXT:    srli a0, a0, 63194; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload195; RV64I-NEXT:    addi sp, sp, 16196; RV64I-NEXT:    ret197  %1 = fcmp olt double %a, %b198  %2 = zext i1 %1 to i32199  ret i32 %2200}201 202define i32 @fcmp_ole(double %a, double %b) nounwind {203; CHECKIFD-LABEL: fcmp_ole:204; CHECKIFD:       # %bb.0:205; CHECKIFD-NEXT:    fle.d a0, fa0, fa1206; CHECKIFD-NEXT:    ret207;208; CHECKRV32IZFINXZDINX-LABEL: fcmp_ole:209; CHECKRV32IZFINXZDINX:       # %bb.0:210; CHECKRV32IZFINXZDINX-NEXT:    fle.d a0, a0, a2211; CHECKRV32IZFINXZDINX-NEXT:    ret212;213; CHECKRV64IZFINXZDINX-LABEL: fcmp_ole:214; CHECKRV64IZFINXZDINX:       # %bb.0:215; CHECKRV64IZFINXZDINX-NEXT:    fle.d a0, a0, a1216; CHECKRV64IZFINXZDINX-NEXT:    ret217;218; RV32I-LABEL: fcmp_ole:219; RV32I:       # %bb.0:220; RV32I-NEXT:    addi sp, sp, -16221; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill222; RV32I-NEXT:    call __ledf2223; RV32I-NEXT:    slti a0, a0, 1224; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload225; RV32I-NEXT:    addi sp, sp, 16226; RV32I-NEXT:    ret227;228; RV64I-LABEL: fcmp_ole:229; RV64I:       # %bb.0:230; RV64I-NEXT:    addi sp, sp, -16231; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill232; RV64I-NEXT:    call __ledf2233; RV64I-NEXT:    slti a0, a0, 1234; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload235; RV64I-NEXT:    addi sp, sp, 16236; RV64I-NEXT:    ret237  %1 = fcmp ole double %a, %b238  %2 = zext i1 %1 to i32239  ret i32 %2240}241 242define i32 @fcmp_one(double %a, double %b) nounwind {243; CHECKIFD-LABEL: fcmp_one:244; CHECKIFD:       # %bb.0:245; CHECKIFD-NEXT:    flt.d a0, fa0, fa1246; CHECKIFD-NEXT:    flt.d a1, fa1, fa0247; CHECKIFD-NEXT:    or a0, a1, a0248; CHECKIFD-NEXT:    ret249;250; CHECKRV32IZFINXZDINX-LABEL: fcmp_one:251; CHECKRV32IZFINXZDINX:       # %bb.0:252; CHECKRV32IZFINXZDINX-NEXT:    flt.d a4, a0, a2253; CHECKRV32IZFINXZDINX-NEXT:    flt.d a0, a2, a0254; CHECKRV32IZFINXZDINX-NEXT:    or a0, a0, a4255; CHECKRV32IZFINXZDINX-NEXT:    ret256;257; CHECKRV64IZFINXZDINX-LABEL: fcmp_one:258; CHECKRV64IZFINXZDINX:       # %bb.0:259; CHECKRV64IZFINXZDINX-NEXT:    flt.d a2, a0, a1260; CHECKRV64IZFINXZDINX-NEXT:    flt.d a0, a1, a0261; CHECKRV64IZFINXZDINX-NEXT:    or a0, a0, a2262; CHECKRV64IZFINXZDINX-NEXT:    ret263;264; RV32I-LABEL: fcmp_one:265; RV32I:       # %bb.0:266; RV32I-NEXT:    addi sp, sp, -32267; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill268; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill269; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill270; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill271; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill272; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill273; RV32I-NEXT:    mv s0, a3274; RV32I-NEXT:    mv s1, a2275; RV32I-NEXT:    mv s2, a1276; RV32I-NEXT:    mv s3, a0277; RV32I-NEXT:    call __eqdf2278; RV32I-NEXT:    snez s4, a0279; RV32I-NEXT:    mv a0, s3280; RV32I-NEXT:    mv a1, s2281; RV32I-NEXT:    mv a2, s1282; RV32I-NEXT:    mv a3, s0283; RV32I-NEXT:    call __unorddf2284; RV32I-NEXT:    seqz a0, a0285; RV32I-NEXT:    and a0, a0, s4286; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload287; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload288; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload289; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload290; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload291; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload292; RV32I-NEXT:    addi sp, sp, 32293; RV32I-NEXT:    ret294;295; RV64I-LABEL: fcmp_one:296; RV64I:       # %bb.0:297; RV64I-NEXT:    addi sp, sp, -32298; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill299; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill300; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill301; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill302; RV64I-NEXT:    mv s0, a1303; RV64I-NEXT:    mv s1, a0304; RV64I-NEXT:    call __eqdf2305; RV64I-NEXT:    snez s2, a0306; RV64I-NEXT:    mv a0, s1307; RV64I-NEXT:    mv a1, s0308; RV64I-NEXT:    call __unorddf2309; RV64I-NEXT:    seqz a0, a0310; RV64I-NEXT:    and a0, a0, s2311; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload312; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload313; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload314; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload315; RV64I-NEXT:    addi sp, sp, 32316; RV64I-NEXT:    ret317  %1 = fcmp one double %a, %b318  %2 = zext i1 %1 to i32319  ret i32 %2320}321 322define i32 @fcmp_ord(double %a, double %b) nounwind {323; CHECKIFD-LABEL: fcmp_ord:324; CHECKIFD:       # %bb.0:325; CHECKIFD-NEXT:    feq.d a0, fa1, fa1326; CHECKIFD-NEXT:    feq.d a1, fa0, fa0327; CHECKIFD-NEXT:    and a0, a1, a0328; CHECKIFD-NEXT:    ret329;330; CHECKRV32IZFINXZDINX-LABEL: fcmp_ord:331; CHECKRV32IZFINXZDINX:       # %bb.0:332; CHECKRV32IZFINXZDINX-NEXT:    feq.d a2, a2, a2333; CHECKRV32IZFINXZDINX-NEXT:    feq.d a0, a0, a0334; CHECKRV32IZFINXZDINX-NEXT:    and a0, a0, a2335; CHECKRV32IZFINXZDINX-NEXT:    ret336;337; CHECKRV64IZFINXZDINX-LABEL: fcmp_ord:338; CHECKRV64IZFINXZDINX:       # %bb.0:339; CHECKRV64IZFINXZDINX-NEXT:    feq.d a1, a1, a1340; CHECKRV64IZFINXZDINX-NEXT:    feq.d a0, a0, a0341; CHECKRV64IZFINXZDINX-NEXT:    and a0, a0, a1342; CHECKRV64IZFINXZDINX-NEXT:    ret343;344; RV32I-LABEL: fcmp_ord:345; RV32I:       # %bb.0:346; RV32I-NEXT:    addi sp, sp, -16347; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill348; RV32I-NEXT:    call __unorddf2349; RV32I-NEXT:    seqz a0, a0350; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload351; RV32I-NEXT:    addi sp, sp, 16352; RV32I-NEXT:    ret353;354; RV64I-LABEL: fcmp_ord:355; RV64I:       # %bb.0:356; RV64I-NEXT:    addi sp, sp, -16357; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill358; RV64I-NEXT:    call __unorddf2359; RV64I-NEXT:    seqz a0, a0360; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload361; RV64I-NEXT:    addi sp, sp, 16362; RV64I-NEXT:    ret363  %1 = fcmp ord double %a, %b364  %2 = zext i1 %1 to i32365  ret i32 %2366}367 368define i32 @fcmp_ueq(double %a, double %b) nounwind {369; CHECKIFD-LABEL: fcmp_ueq:370; CHECKIFD:       # %bb.0:371; CHECKIFD-NEXT:    flt.d a0, fa0, fa1372; CHECKIFD-NEXT:    flt.d a1, fa1, fa0373; CHECKIFD-NEXT:    or a0, a1, a0374; CHECKIFD-NEXT:    xori a0, a0, 1375; CHECKIFD-NEXT:    ret376;377; CHECKRV32IZFINXZDINX-LABEL: fcmp_ueq:378; CHECKRV32IZFINXZDINX:       # %bb.0:379; CHECKRV32IZFINXZDINX-NEXT:    flt.d a4, a0, a2380; CHECKRV32IZFINXZDINX-NEXT:    flt.d a0, a2, a0381; CHECKRV32IZFINXZDINX-NEXT:    or a0, a0, a4382; CHECKRV32IZFINXZDINX-NEXT:    xori a0, a0, 1383; CHECKRV32IZFINXZDINX-NEXT:    ret384;385; CHECKRV64IZFINXZDINX-LABEL: fcmp_ueq:386; CHECKRV64IZFINXZDINX:       # %bb.0:387; CHECKRV64IZFINXZDINX-NEXT:    flt.d a2, a0, a1388; CHECKRV64IZFINXZDINX-NEXT:    flt.d a0, a1, a0389; CHECKRV64IZFINXZDINX-NEXT:    or a0, a0, a2390; CHECKRV64IZFINXZDINX-NEXT:    xori a0, a0, 1391; CHECKRV64IZFINXZDINX-NEXT:    ret392;393; RV32I-LABEL: fcmp_ueq:394; RV32I:       # %bb.0:395; RV32I-NEXT:    addi sp, sp, -32396; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill397; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill398; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill399; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill400; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill401; RV32I-NEXT:    sw s4, 8(sp) # 4-byte Folded Spill402; RV32I-NEXT:    mv s0, a3403; RV32I-NEXT:    mv s1, a2404; RV32I-NEXT:    mv s2, a1405; RV32I-NEXT:    mv s3, a0406; RV32I-NEXT:    call __unorddf2407; RV32I-NEXT:    mv s4, a0408; RV32I-NEXT:    mv a0, s3409; RV32I-NEXT:    mv a1, s2410; RV32I-NEXT:    mv a2, s1411; RV32I-NEXT:    mv a3, s0412; RV32I-NEXT:    call __eqdf2413; RV32I-NEXT:    seqz a0, a0414; RV32I-NEXT:    or a0, s4, a0415; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload416; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload417; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload418; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload419; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload420; RV32I-NEXT:    lw s4, 8(sp) # 4-byte Folded Reload421; RV32I-NEXT:    addi sp, sp, 32422; RV32I-NEXT:    ret423;424; RV64I-LABEL: fcmp_ueq:425; RV64I:       # %bb.0:426; RV64I-NEXT:    addi sp, sp, -32427; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill428; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill429; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill430; RV64I-NEXT:    sd s2, 0(sp) # 8-byte Folded Spill431; RV64I-NEXT:    mv s0, a1432; RV64I-NEXT:    mv s1, a0433; RV64I-NEXT:    call __unorddf2434; RV64I-NEXT:    mv s2, a0435; RV64I-NEXT:    mv a0, s1436; RV64I-NEXT:    mv a1, s0437; RV64I-NEXT:    call __eqdf2438; RV64I-NEXT:    seqz a0, a0439; RV64I-NEXT:    or a0, s2, a0440; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload441; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload442; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload443; RV64I-NEXT:    ld s2, 0(sp) # 8-byte Folded Reload444; RV64I-NEXT:    addi sp, sp, 32445; RV64I-NEXT:    ret446  %1 = fcmp ueq double %a, %b447  %2 = zext i1 %1 to i32448  ret i32 %2449}450 451define i32 @fcmp_ugt(double %a, double %b) nounwind {452; CHECKIFD-LABEL: fcmp_ugt:453; CHECKIFD:       # %bb.0:454; CHECKIFD-NEXT:    fle.d a0, fa0, fa1455; CHECKIFD-NEXT:    xori a0, a0, 1456; CHECKIFD-NEXT:    ret457;458; CHECKRV32IZFINXZDINX-LABEL: fcmp_ugt:459; CHECKRV32IZFINXZDINX:       # %bb.0:460; CHECKRV32IZFINXZDINX-NEXT:    fle.d a0, a0, a2461; CHECKRV32IZFINXZDINX-NEXT:    xori a0, a0, 1462; CHECKRV32IZFINXZDINX-NEXT:    ret463;464; CHECKRV64IZFINXZDINX-LABEL: fcmp_ugt:465; CHECKRV64IZFINXZDINX:       # %bb.0:466; CHECKRV64IZFINXZDINX-NEXT:    fle.d a0, a0, a1467; CHECKRV64IZFINXZDINX-NEXT:    xori a0, a0, 1468; CHECKRV64IZFINXZDINX-NEXT:    ret469;470; RV32I-LABEL: fcmp_ugt:471; RV32I:       # %bb.0:472; RV32I-NEXT:    addi sp, sp, -16473; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill474; RV32I-NEXT:    call __ledf2475; RV32I-NEXT:    sgtz a0, a0476; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload477; RV32I-NEXT:    addi sp, sp, 16478; RV32I-NEXT:    ret479;480; RV64I-LABEL: fcmp_ugt:481; RV64I:       # %bb.0:482; RV64I-NEXT:    addi sp, sp, -16483; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill484; RV64I-NEXT:    call __ledf2485; RV64I-NEXT:    sgtz a0, a0486; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload487; RV64I-NEXT:    addi sp, sp, 16488; RV64I-NEXT:    ret489  %1 = fcmp ugt double %a, %b490  %2 = zext i1 %1 to i32491  ret i32 %2492}493 494define i32 @fcmp_uge(double %a, double %b) nounwind {495; CHECKIFD-LABEL: fcmp_uge:496; CHECKIFD:       # %bb.0:497; CHECKIFD-NEXT:    flt.d a0, fa0, fa1498; CHECKIFD-NEXT:    xori a0, a0, 1499; CHECKIFD-NEXT:    ret500;501; CHECKRV32IZFINXZDINX-LABEL: fcmp_uge:502; CHECKRV32IZFINXZDINX:       # %bb.0:503; CHECKRV32IZFINXZDINX-NEXT:    flt.d a0, a0, a2504; CHECKRV32IZFINXZDINX-NEXT:    xori a0, a0, 1505; CHECKRV32IZFINXZDINX-NEXT:    ret506;507; CHECKRV64IZFINXZDINX-LABEL: fcmp_uge:508; CHECKRV64IZFINXZDINX:       # %bb.0:509; CHECKRV64IZFINXZDINX-NEXT:    flt.d a0, a0, a1510; CHECKRV64IZFINXZDINX-NEXT:    xori a0, a0, 1511; CHECKRV64IZFINXZDINX-NEXT:    ret512;513; RV32I-LABEL: fcmp_uge:514; RV32I:       # %bb.0:515; RV32I-NEXT:    addi sp, sp, -16516; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill517; RV32I-NEXT:    call __ltdf2518; RV32I-NEXT:    srli a0, a0, 31519; RV32I-NEXT:    xori a0, a0, 1520; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload521; RV32I-NEXT:    addi sp, sp, 16522; RV32I-NEXT:    ret523;524; RV64I-LABEL: fcmp_uge:525; RV64I:       # %bb.0:526; RV64I-NEXT:    addi sp, sp, -16527; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill528; RV64I-NEXT:    call __ltdf2529; RV64I-NEXT:    srli a0, a0, 63530; RV64I-NEXT:    xori a0, a0, 1531; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload532; RV64I-NEXT:    addi sp, sp, 16533; RV64I-NEXT:    ret534  %1 = fcmp uge double %a, %b535  %2 = zext i1 %1 to i32536  ret i32 %2537}538 539define i32 @fcmp_ult(double %a, double %b) nounwind {540; CHECKIFD-LABEL: fcmp_ult:541; CHECKIFD:       # %bb.0:542; CHECKIFD-NEXT:    fle.d a0, fa1, fa0543; CHECKIFD-NEXT:    xori a0, a0, 1544; CHECKIFD-NEXT:    ret545;546; CHECKRV32IZFINXZDINX-LABEL: fcmp_ult:547; CHECKRV32IZFINXZDINX:       # %bb.0:548; CHECKRV32IZFINXZDINX-NEXT:    fle.d a0, a2, a0549; CHECKRV32IZFINXZDINX-NEXT:    xori a0, a0, 1550; CHECKRV32IZFINXZDINX-NEXT:    ret551;552; CHECKRV64IZFINXZDINX-LABEL: fcmp_ult:553; CHECKRV64IZFINXZDINX:       # %bb.0:554; CHECKRV64IZFINXZDINX-NEXT:    fle.d a0, a1, a0555; CHECKRV64IZFINXZDINX-NEXT:    xori a0, a0, 1556; CHECKRV64IZFINXZDINX-NEXT:    ret557;558; RV32I-LABEL: fcmp_ult:559; RV32I:       # %bb.0:560; RV32I-NEXT:    addi sp, sp, -16561; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill562; RV32I-NEXT:    call __gedf2563; RV32I-NEXT:    srli a0, a0, 31564; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload565; RV32I-NEXT:    addi sp, sp, 16566; RV32I-NEXT:    ret567;568; RV64I-LABEL: fcmp_ult:569; RV64I:       # %bb.0:570; RV64I-NEXT:    addi sp, sp, -16571; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill572; RV64I-NEXT:    call __gedf2573; RV64I-NEXT:    srli a0, a0, 63574; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload575; RV64I-NEXT:    addi sp, sp, 16576; RV64I-NEXT:    ret577  %1 = fcmp ult double %a, %b578  %2 = zext i1 %1 to i32579  ret i32 %2580}581 582define i32 @fcmp_ule(double %a, double %b) nounwind {583; CHECKIFD-LABEL: fcmp_ule:584; CHECKIFD:       # %bb.0:585; CHECKIFD-NEXT:    flt.d a0, fa1, fa0586; CHECKIFD-NEXT:    xori a0, a0, 1587; CHECKIFD-NEXT:    ret588;589; CHECKRV32IZFINXZDINX-LABEL: fcmp_ule:590; CHECKRV32IZFINXZDINX:       # %bb.0:591; CHECKRV32IZFINXZDINX-NEXT:    flt.d a0, a2, a0592; CHECKRV32IZFINXZDINX-NEXT:    xori a0, a0, 1593; CHECKRV32IZFINXZDINX-NEXT:    ret594;595; CHECKRV64IZFINXZDINX-LABEL: fcmp_ule:596; CHECKRV64IZFINXZDINX:       # %bb.0:597; CHECKRV64IZFINXZDINX-NEXT:    flt.d a0, a1, a0598; CHECKRV64IZFINXZDINX-NEXT:    xori a0, a0, 1599; CHECKRV64IZFINXZDINX-NEXT:    ret600;601; RV32I-LABEL: fcmp_ule:602; RV32I:       # %bb.0:603; RV32I-NEXT:    addi sp, sp, -16604; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill605; RV32I-NEXT:    call __gtdf2606; RV32I-NEXT:    slti a0, a0, 1607; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload608; RV32I-NEXT:    addi sp, sp, 16609; RV32I-NEXT:    ret610;611; RV64I-LABEL: fcmp_ule:612; RV64I:       # %bb.0:613; RV64I-NEXT:    addi sp, sp, -16614; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill615; RV64I-NEXT:    call __gtdf2616; RV64I-NEXT:    slti a0, a0, 1617; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload618; RV64I-NEXT:    addi sp, sp, 16619; RV64I-NEXT:    ret620  %1 = fcmp ule double %a, %b621  %2 = zext i1 %1 to i32622  ret i32 %2623}624 625define i32 @fcmp_une(double %a, double %b) nounwind {626; CHECKIFD-LABEL: fcmp_une:627; CHECKIFD:       # %bb.0:628; CHECKIFD-NEXT:    feq.d a0, fa0, fa1629; CHECKIFD-NEXT:    xori a0, a0, 1630; CHECKIFD-NEXT:    ret631;632; CHECKRV32IZFINXZDINX-LABEL: fcmp_une:633; CHECKRV32IZFINXZDINX:       # %bb.0:634; CHECKRV32IZFINXZDINX-NEXT:    feq.d a0, a0, a2635; CHECKRV32IZFINXZDINX-NEXT:    xori a0, a0, 1636; CHECKRV32IZFINXZDINX-NEXT:    ret637;638; CHECKRV64IZFINXZDINX-LABEL: fcmp_une:639; CHECKRV64IZFINXZDINX:       # %bb.0:640; CHECKRV64IZFINXZDINX-NEXT:    feq.d a0, a0, a1641; CHECKRV64IZFINXZDINX-NEXT:    xori a0, a0, 1642; CHECKRV64IZFINXZDINX-NEXT:    ret643;644; RV32I-LABEL: fcmp_une:645; RV32I:       # %bb.0:646; RV32I-NEXT:    addi sp, sp, -16647; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill648; RV32I-NEXT:    call __nedf2649; RV32I-NEXT:    snez a0, a0650; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload651; RV32I-NEXT:    addi sp, sp, 16652; RV32I-NEXT:    ret653;654; RV64I-LABEL: fcmp_une:655; RV64I:       # %bb.0:656; RV64I-NEXT:    addi sp, sp, -16657; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill658; RV64I-NEXT:    call __nedf2659; RV64I-NEXT:    snez a0, a0660; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload661; RV64I-NEXT:    addi sp, sp, 16662; RV64I-NEXT:    ret663  %1 = fcmp une double %a, %b664  %2 = zext i1 %1 to i32665  ret i32 %2666}667 668define i32 @fcmp_uno(double %a, double %b) nounwind {669; CHECKIFD-LABEL: fcmp_uno:670; CHECKIFD:       # %bb.0:671; CHECKIFD-NEXT:    feq.d a0, fa1, fa1672; CHECKIFD-NEXT:    feq.d a1, fa0, fa0673; CHECKIFD-NEXT:    and a0, a1, a0674; CHECKIFD-NEXT:    xori a0, a0, 1675; CHECKIFD-NEXT:    ret676;677; CHECKRV32IZFINXZDINX-LABEL: fcmp_uno:678; CHECKRV32IZFINXZDINX:       # %bb.0:679; CHECKRV32IZFINXZDINX-NEXT:    feq.d a2, a2, a2680; CHECKRV32IZFINXZDINX-NEXT:    feq.d a0, a0, a0681; CHECKRV32IZFINXZDINX-NEXT:    and a0, a0, a2682; CHECKRV32IZFINXZDINX-NEXT:    xori a0, a0, 1683; CHECKRV32IZFINXZDINX-NEXT:    ret684;685; CHECKRV64IZFINXZDINX-LABEL: fcmp_uno:686; CHECKRV64IZFINXZDINX:       # %bb.0:687; CHECKRV64IZFINXZDINX-NEXT:    feq.d a1, a1, a1688; CHECKRV64IZFINXZDINX-NEXT:    feq.d a0, a0, a0689; CHECKRV64IZFINXZDINX-NEXT:    and a0, a0, a1690; CHECKRV64IZFINXZDINX-NEXT:    xori a0, a0, 1691; CHECKRV64IZFINXZDINX-NEXT:    ret692;693; RV32I-LABEL: fcmp_uno:694; RV32I:       # %bb.0:695; RV32I-NEXT:    addi sp, sp, -16696; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill697; RV32I-NEXT:    call __unorddf2698; RV32I-NEXT:    snez a0, a0699; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload700; RV32I-NEXT:    addi sp, sp, 16701; RV32I-NEXT:    ret702;703; RV64I-LABEL: fcmp_uno:704; RV64I:       # %bb.0:705; RV64I-NEXT:    addi sp, sp, -16706; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill707; RV64I-NEXT:    call __unorddf2708; RV64I-NEXT:    snez a0, a0709; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload710; RV64I-NEXT:    addi sp, sp, 16711; RV64I-NEXT:    ret712  %1 = fcmp uno double %a, %b713  %2 = zext i1 %1 to i32714  ret i32 %2715}716 717define i32 @fcmp_true(double %a, double %b) nounwind {718; CHECKIFD-LABEL: fcmp_true:719; CHECKIFD:       # %bb.0:720; CHECKIFD-NEXT:    li a0, 1721; CHECKIFD-NEXT:    ret722;723; CHECKIZFINXZDINX-LABEL: fcmp_true:724; CHECKIZFINXZDINX:       # %bb.0:725; CHECKIZFINXZDINX-NEXT:    li a0, 1726; CHECKIZFINXZDINX-NEXT:    ret727;728; RV32I-LABEL: fcmp_true:729; RV32I:       # %bb.0:730; RV32I-NEXT:    li a0, 1731; RV32I-NEXT:    ret732;733; RV64I-LABEL: fcmp_true:734; RV64I:       # %bb.0:735; RV64I-NEXT:    li a0, 1736; RV64I-NEXT:    ret737  %1 = fcmp true double %a, %b738  %2 = zext i1 %1 to i32739  ret i32 %2740}741