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