939 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -global-isel < %s \3; RUN: | FileCheck -check-prefixes=CHECK,RV64I %s4; RUN: llc -mtriple=riscv64 -global-isel -mattr=+d < %s \5; RUN: | FileCheck -check-prefixes=CHECK,RV64D %s6 7; FIXME: Support RV32.8 9define fp128 @fadd(fp128 %x, fp128 %y) nounwind {10; CHECK-LABEL: fadd:11; CHECK: # %bb.0:12; CHECK-NEXT: addi sp, sp, -1613; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill14; CHECK-NEXT: call __addtf315; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload16; CHECK-NEXT: addi sp, sp, 1617; CHECK-NEXT: ret18 %a = fadd fp128 %x, %y19 ret fp128 %a20}21 22define fp128 @fsub(fp128 %x, fp128 %y) nounwind {23; CHECK-LABEL: fsub:24; CHECK: # %bb.0:25; CHECK-NEXT: addi sp, sp, -1626; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill27; CHECK-NEXT: call __subtf328; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload29; CHECK-NEXT: addi sp, sp, 1630; CHECK-NEXT: ret31 %a = fsub fp128 %x, %y32 ret fp128 %a33}34 35define fp128 @fmul(fp128 %x, fp128 %y) nounwind {36; CHECK-LABEL: fmul:37; CHECK: # %bb.0:38; CHECK-NEXT: addi sp, sp, -1639; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill40; CHECK-NEXT: call __multf341; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload42; CHECK-NEXT: addi sp, sp, 1643; CHECK-NEXT: ret44 %a = fmul fp128 %x, %y45 ret fp128 %a46}47 48define fp128 @fdiv(fp128 %x, fp128 %y) nounwind {49; CHECK-LABEL: fdiv:50; CHECK: # %bb.0:51; CHECK-NEXT: addi sp, sp, -1652; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill53; CHECK-NEXT: call __divtf354; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload55; CHECK-NEXT: addi sp, sp, 1656; CHECK-NEXT: ret57 %a = fdiv fp128 %x, %y58 ret fp128 %a59}60 61define fp128 @frem(fp128 %x, fp128 %y) nounwind {62; CHECK-LABEL: frem:63; CHECK: # %bb.0:64; CHECK-NEXT: addi sp, sp, -1665; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill66; CHECK-NEXT: call fmodl67; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload68; CHECK-NEXT: addi sp, sp, 1669; CHECK-NEXT: ret70 %a = frem fp128 %x, %y71 ret fp128 %a72}73 74define fp128 @fma(fp128 %x, fp128 %y, fp128 %z) nounwind {75; CHECK-LABEL: fma:76; CHECK: # %bb.0:77; CHECK-NEXT: addi sp, sp, -1678; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill79; CHECK-NEXT: call fmal80; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload81; CHECK-NEXT: addi sp, sp, 1682; CHECK-NEXT: ret83 %a = call fp128 @llvm.fma.f128(fp128 %x, fp128 %y, fp128 %z)84 ret fp128 %a85}86 87define fp128 @fneg(fp128 %x) {88; CHECK-LABEL: fneg:89; CHECK: # %bb.0:90; CHECK-NEXT: li a2, -191; CHECK-NEXT: slli a2, a2, 6392; CHECK-NEXT: xor a1, a1, a293; CHECK-NEXT: ret94 %a = fneg fp128 %x95 ret fp128 %a96}97 98define fp128 @fabs(fp128 %x) {99; CHECK-LABEL: fabs:100; CHECK: # %bb.0:101; CHECK-NEXT: slli a1, a1, 1102; CHECK-NEXT: srli a1, a1, 1103; CHECK-NEXT: ret104 %a = call fp128 @llvm.fabs.f128(fp128 %x)105 ret fp128 %a106}107 108define fp128 @fcopysign(fp128 %x, fp128 %y) {109; CHECK-LABEL: fcopysign:110; CHECK: # %bb.0:111; CHECK-NEXT: slli a1, a1, 1112; CHECK-NEXT: srli a3, a3, 63113; CHECK-NEXT: srli a1, a1, 1114; CHECK-NEXT: slli a3, a3, 63115; CHECK-NEXT: or a1, a1, a3116; CHECK-NEXT: ret117 %a = call fp128 @llvm.copysign.f128(fp128 %x, fp128 %y)118 ret fp128 %a119}120 121define i1 @fcmp(fp128 %x, fp128 %y) nounwind {122; CHECK-LABEL: fcmp:123; CHECK: # %bb.0:124; CHECK-NEXT: addi sp, sp, -16125; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill126; CHECK-NEXT: call __eqtf2127; CHECK-NEXT: sext.w a0, a0128; CHECK-NEXT: seqz a0, a0129; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload130; CHECK-NEXT: addi sp, sp, 16131; CHECK-NEXT: ret132 %a = fcmp oeq fp128 %x, %y133 ret i1 %a134}135 136define fp128 @constant(fp128 %x) nounwind {137; CHECK-LABEL: constant:138; CHECK: # %bb.0:139; CHECK-NEXT: addi sp, sp, -16140; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill141; CHECK-NEXT: lui a2, %hi(.LCPI10_0)142; CHECK-NEXT: addi a3, a2, %lo(.LCPI10_0)143; CHECK-NEXT: ld a2, 0(a3)144; CHECK-NEXT: ld a3, 8(a3)145; CHECK-NEXT: call __addtf3146; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload147; CHECK-NEXT: addi sp, sp, 16148; CHECK-NEXT: ret149 %a = fadd fp128 %x, 0xL00000000000000007FFF000000000000150 ret fp128 %a151}152 153define fp128 @fpext_f32(float %x, float %y) nounwind {154; RV64I-LABEL: fpext_f32:155; RV64I: # %bb.0:156; RV64I-NEXT: addi sp, sp, -16157; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill158; RV64I-NEXT: call __addsf3159; RV64I-NEXT: call __extendsftf2160; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload161; RV64I-NEXT: addi sp, sp, 16162; RV64I-NEXT: ret163;164; RV64D-LABEL: fpext_f32:165; RV64D: # %bb.0:166; RV64D-NEXT: addi sp, sp, -16167; RV64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill168; RV64D-NEXT: fadd.s fa0, fa0, fa1169; RV64D-NEXT: call __extendsftf2170; RV64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload171; RV64D-NEXT: addi sp, sp, 16172; RV64D-NEXT: ret173 %a = fadd float %x, %y174 %b = fpext float %a to fp128175 ret fp128 %b176}177 178define fp128 @fpext_f64(double %x, double %y) nounwind {179; RV64I-LABEL: fpext_f64:180; RV64I: # %bb.0:181; RV64I-NEXT: addi sp, sp, -16182; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill183; RV64I-NEXT: call __adddf3184; RV64I-NEXT: call __extenddftf2185; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload186; RV64I-NEXT: addi sp, sp, 16187; RV64I-NEXT: ret188;189; RV64D-LABEL: fpext_f64:190; RV64D: # %bb.0:191; RV64D-NEXT: addi sp, sp, -16192; RV64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill193; RV64D-NEXT: fadd.d fa0, fa0, fa1194; RV64D-NEXT: call __extenddftf2195; RV64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload196; RV64D-NEXT: addi sp, sp, 16197; RV64D-NEXT: ret198 %a = fadd double %x, %y199 %b = fpext double %a to fp128200 ret fp128 %b201}202 203define float @fptrunc_f32(fp128 %x, float %y) nounwind {204; RV64I-LABEL: fptrunc_f32:205; RV64I: # %bb.0:206; RV64I-NEXT: addi sp, sp, -16207; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill208; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill209; RV64I-NEXT: mv s0, a2210; RV64I-NEXT: call __trunctfsf2211; RV64I-NEXT: mv a1, s0212; RV64I-NEXT: call __addsf3213; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload214; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload215; RV64I-NEXT: addi sp, sp, 16216; RV64I-NEXT: ret217;218; RV64D-LABEL: fptrunc_f32:219; RV64D: # %bb.0:220; RV64D-NEXT: addi sp, sp, -16221; RV64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill222; RV64D-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill223; RV64D-NEXT: fmv.s fs0, fa0224; RV64D-NEXT: call __trunctfsf2225; RV64D-NEXT: fadd.s fa0, fa0, fs0226; RV64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload227; RV64D-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload228; RV64D-NEXT: addi sp, sp, 16229; RV64D-NEXT: ret230 %a = fptrunc fp128 %x to float231 %b = fadd float %a, %y232 ret float %b233}234 235define double @fptrunc_f64(fp128 %x, double %y) nounwind {236; RV64I-LABEL: fptrunc_f64:237; RV64I: # %bb.0:238; RV64I-NEXT: addi sp, sp, -16239; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill240; RV64I-NEXT: sd s0, 0(sp) # 8-byte Folded Spill241; RV64I-NEXT: mv s0, a2242; RV64I-NEXT: call __trunctfdf2243; RV64I-NEXT: mv a1, s0244; RV64I-NEXT: call __adddf3245; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload246; RV64I-NEXT: ld s0, 0(sp) # 8-byte Folded Reload247; RV64I-NEXT: addi sp, sp, 16248; RV64I-NEXT: ret249;250; RV64D-LABEL: fptrunc_f64:251; RV64D: # %bb.0:252; RV64D-NEXT: addi sp, sp, -16253; RV64D-NEXT: sd ra, 8(sp) # 8-byte Folded Spill254; RV64D-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill255; RV64D-NEXT: fmv.d fs0, fa0256; RV64D-NEXT: call __trunctfdf2257; RV64D-NEXT: fadd.d fa0, fa0, fs0258; RV64D-NEXT: ld ra, 8(sp) # 8-byte Folded Reload259; RV64D-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload260; RV64D-NEXT: addi sp, sp, 16261; RV64D-NEXT: ret262 %a = fptrunc fp128 %x to double263 %b = fadd double %a, %y264 ret double %b265}266 267define i8 @fptosi_i8(fp128 %x) nounwind {268; CHECK-LABEL: fptosi_i8:269; CHECK: # %bb.0:270; CHECK-NEXT: addi sp, sp, -16271; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill272; CHECK-NEXT: call __fixtfsi273; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload274; CHECK-NEXT: addi sp, sp, 16275; CHECK-NEXT: ret276 %a = fptosi fp128 %x to i8277 ret i8 %a278}279 280define i16 @fptosi_i16(fp128 %x) nounwind {281; CHECK-LABEL: fptosi_i16:282; CHECK: # %bb.0:283; CHECK-NEXT: addi sp, sp, -16284; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill285; CHECK-NEXT: call __fixtfsi286; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload287; CHECK-NEXT: addi sp, sp, 16288; CHECK-NEXT: ret289 %a = fptosi fp128 %x to i16290 ret i16 %a291}292 293define i32 @fptosi_i32(fp128 %x) nounwind {294; CHECK-LABEL: fptosi_i32:295; CHECK: # %bb.0:296; CHECK-NEXT: addi sp, sp, -16297; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill298; CHECK-NEXT: call __fixtfsi299; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload300; CHECK-NEXT: addi sp, sp, 16301; CHECK-NEXT: ret302 %a = fptosi fp128 %x to i32303 ret i32 %a304}305 306define i64 @fptosi_i64(fp128 %x) nounwind {307; CHECK-LABEL: fptosi_i64:308; CHECK: # %bb.0:309; CHECK-NEXT: addi sp, sp, -16310; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill311; CHECK-NEXT: call __fixtfdi312; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload313; CHECK-NEXT: addi sp, sp, 16314; CHECK-NEXT: ret315 %a = fptosi fp128 %x to i64316 ret i64 %a317}318 319define i128 @fptosi_i128(fp128 %x) nounwind {320; CHECK-LABEL: fptosi_i128:321; CHECK: # %bb.0:322; CHECK-NEXT: addi sp, sp, -16323; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill324; CHECK-NEXT: call __fixtfti325; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload326; CHECK-NEXT: addi sp, sp, 16327; CHECK-NEXT: ret328 %a = fptosi fp128 %x to i128329 ret i128 %a330}331 332define i8 @fptoui_i8(fp128 %x) nounwind {333; CHECK-LABEL: fptoui_i8:334; CHECK: # %bb.0:335; CHECK-NEXT: addi sp, sp, -16336; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill337; CHECK-NEXT: call __fixunstfsi338; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload339; CHECK-NEXT: addi sp, sp, 16340; CHECK-NEXT: ret341 %a = fptoui fp128 %x to i8342 ret i8 %a343}344 345define i16 @fptoui_i16(fp128 %x) nounwind {346; CHECK-LABEL: fptoui_i16:347; CHECK: # %bb.0:348; CHECK-NEXT: addi sp, sp, -16349; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill350; CHECK-NEXT: call __fixunstfsi351; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload352; CHECK-NEXT: addi sp, sp, 16353; CHECK-NEXT: ret354 %a = fptoui fp128 %x to i16355 ret i16 %a356}357 358define i32 @fptoui_i32(fp128 %x) nounwind {359; CHECK-LABEL: fptoui_i32:360; CHECK: # %bb.0:361; CHECK-NEXT: addi sp, sp, -16362; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill363; CHECK-NEXT: call __fixunstfsi364; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload365; CHECK-NEXT: addi sp, sp, 16366; CHECK-NEXT: ret367 %a = fptoui fp128 %x to i32368 ret i32 %a369}370 371define i64 @fptoui_i64(fp128 %x) nounwind {372; CHECK-LABEL: fptoui_i64:373; CHECK: # %bb.0:374; CHECK-NEXT: addi sp, sp, -16375; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill376; CHECK-NEXT: call __fixunstfdi377; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload378; CHECK-NEXT: addi sp, sp, 16379; CHECK-NEXT: ret380 %a = fptoui fp128 %x to i64381 ret i64 %a382}383 384define i128 @fptoui_i128(fp128 %x) nounwind {385; CHECK-LABEL: fptoui_i128:386; CHECK: # %bb.0:387; CHECK-NEXT: addi sp, sp, -16388; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill389; CHECK-NEXT: call __fixunstfti390; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload391; CHECK-NEXT: addi sp, sp, 16392; CHECK-NEXT: ret393 %a = fptoui fp128 %x to i128394 ret i128 %a395}396 397define fp128 @sitofp_i8(i8 %x) nounwind {398; CHECK-LABEL: sitofp_i8:399; CHECK: # %bb.0:400; CHECK-NEXT: addi sp, sp, -16401; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill402; CHECK-NEXT: slli a0, a0, 56403; CHECK-NEXT: srai a0, a0, 56404; CHECK-NEXT: call __floatsitf405; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload406; CHECK-NEXT: addi sp, sp, 16407; CHECK-NEXT: ret408 %a = sitofp i8 %x to fp128409 ret fp128 %a410}411 412define fp128 @sitofp_i16(i16 %x) nounwind {413; CHECK-LABEL: sitofp_i16:414; CHECK: # %bb.0:415; CHECK-NEXT: addi sp, sp, -16416; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill417; CHECK-NEXT: slli a0, a0, 48418; CHECK-NEXT: srai a0, a0, 48419; CHECK-NEXT: call __floatsitf420; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload421; CHECK-NEXT: addi sp, sp, 16422; CHECK-NEXT: ret423 %a = sitofp i16 %x to fp128424 ret fp128 %a425}426 427define fp128 @sitofp_i32(i32 %x) nounwind {428; CHECK-LABEL: sitofp_i32:429; CHECK: # %bb.0:430; CHECK-NEXT: addi sp, sp, -16431; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill432; CHECK-NEXT: sext.w a0, a0433; CHECK-NEXT: call __floatsitf434; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload435; CHECK-NEXT: addi sp, sp, 16436; CHECK-NEXT: ret437 %a = sitofp i32 %x to fp128438 ret fp128 %a439}440 441define fp128 @sitofp_i64(i64 %x) nounwind {442; CHECK-LABEL: sitofp_i64:443; CHECK: # %bb.0:444; CHECK-NEXT: addi sp, sp, -16445; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill446; CHECK-NEXT: call __floatditf447; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload448; CHECK-NEXT: addi sp, sp, 16449; CHECK-NEXT: ret450 %a = sitofp i64 %x to fp128451 ret fp128 %a452}453 454define fp128 @sitofp_i128(i128 %x) nounwind {455; CHECK-LABEL: sitofp_i128:456; CHECK: # %bb.0:457; CHECK-NEXT: addi sp, sp, -16458; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill459; CHECK-NEXT: call __floattitf460; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload461; CHECK-NEXT: addi sp, sp, 16462; CHECK-NEXT: ret463 %a = sitofp i128 %x to fp128464 ret fp128 %a465}466 467define fp128 @uitofp_i8(i8 %x) nounwind {468; CHECK-LABEL: uitofp_i8:469; CHECK: # %bb.0:470; CHECK-NEXT: addi sp, sp, -16471; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill472; CHECK-NEXT: zext.b a0, a0473; CHECK-NEXT: call __floatunsitf474; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload475; CHECK-NEXT: addi sp, sp, 16476; CHECK-NEXT: ret477 %a = uitofp i8 %x to fp128478 ret fp128 %a479}480 481define fp128 @uitofp_i16(i16 %x) nounwind {482; CHECK-LABEL: uitofp_i16:483; CHECK: # %bb.0:484; CHECK-NEXT: addi sp, sp, -16485; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill486; CHECK-NEXT: slli a0, a0, 48487; CHECK-NEXT: srli a0, a0, 48488; CHECK-NEXT: call __floatunsitf489; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload490; CHECK-NEXT: addi sp, sp, 16491; CHECK-NEXT: ret492 %a = uitofp i16 %x to fp128493 ret fp128 %a494}495 496define fp128 @uitofp_i32(i32 %x) nounwind {497; CHECK-LABEL: uitofp_i32:498; CHECK: # %bb.0:499; CHECK-NEXT: addi sp, sp, -16500; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill501; CHECK-NEXT: sext.w a0, a0502; CHECK-NEXT: call __floatunsitf503; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload504; CHECK-NEXT: addi sp, sp, 16505; CHECK-NEXT: ret506 %a = uitofp i32 %x to fp128507 ret fp128 %a508}509 510define fp128 @uitofp_i64(i64 %x) nounwind {511; CHECK-LABEL: uitofp_i64:512; CHECK: # %bb.0:513; CHECK-NEXT: addi sp, sp, -16514; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill515; CHECK-NEXT: call __floatunditf516; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload517; CHECK-NEXT: addi sp, sp, 16518; CHECK-NEXT: ret519 %a = uitofp i64 %x to fp128520 ret fp128 %a521}522 523define fp128 @uitofp_i128(i128 %x) nounwind {524; CHECK-LABEL: uitofp_i128:525; CHECK: # %bb.0:526; CHECK-NEXT: addi sp, sp, -16527; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill528; CHECK-NEXT: call __floatuntitf529; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload530; CHECK-NEXT: addi sp, sp, 16531; CHECK-NEXT: ret532 %a = uitofp i128 %x to fp128533 ret fp128 %a534}535 536define fp128 @sqrt(fp128 %a) nounwind {537; CHECK-LABEL: sqrt:538; CHECK: # %bb.0:539; CHECK-NEXT: addi sp, sp, -16540; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill541; CHECK-NEXT: call sqrtl542; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload543; CHECK-NEXT: addi sp, sp, 16544; CHECK-NEXT: ret545 %1 = call fp128 @llvm.sqrt.f128(fp128 %a)546 ret fp128 %1547}548 549define fp128 @powi(fp128 %a, i32 %b) nounwind {550; CHECK-LABEL: powi:551; CHECK: # %bb.0:552; CHECK-NEXT: addi sp, sp, -16553; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill554; CHECK-NEXT: sext.w a2, a2555; CHECK-NEXT: call __powitf2556; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload557; CHECK-NEXT: addi sp, sp, 16558; CHECK-NEXT: ret559 %1 = call fp128 @llvm.powi.f128.i32(fp128 %a, i32 %b)560 ret fp128 %1561}562 563define fp128 @sin(fp128 %a) nounwind {564; CHECK-LABEL: sin:565; CHECK: # %bb.0:566; CHECK-NEXT: addi sp, sp, -16567; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill568; CHECK-NEXT: call sinl569; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload570; CHECK-NEXT: addi sp, sp, 16571; CHECK-NEXT: ret572 %1 = call fp128 @llvm.sin.f128(fp128 %a)573 ret fp128 %1574}575 576define fp128 @cos(fp128 %a) nounwind {577; CHECK-LABEL: cos:578; CHECK: # %bb.0:579; CHECK-NEXT: addi sp, sp, -16580; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill581; CHECK-NEXT: call cosl582; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload583; CHECK-NEXT: addi sp, sp, 16584; CHECK-NEXT: ret585 %1 = call fp128 @llvm.cos.f128(fp128 %a)586 ret fp128 %1587}588 589define fp128 @pow(fp128 %a, fp128 %b) nounwind {590; CHECK-LABEL: pow:591; CHECK: # %bb.0:592; CHECK-NEXT: addi sp, sp, -16593; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill594; CHECK-NEXT: call powl595; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload596; CHECK-NEXT: addi sp, sp, 16597; CHECK-NEXT: ret598 %1 = call fp128 @llvm.pow.f128(fp128 %a, fp128 %b)599 ret fp128 %1600}601 602define fp128 @exp(fp128 %a) nounwind {603; CHECK-LABEL: exp:604; CHECK: # %bb.0:605; CHECK-NEXT: addi sp, sp, -16606; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill607; CHECK-NEXT: call expl608; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload609; CHECK-NEXT: addi sp, sp, 16610; CHECK-NEXT: ret611 %1 = call fp128 @llvm.exp.f128(fp128 %a)612 ret fp128 %1613}614 615define fp128 @exp2(fp128 %a) nounwind {616; CHECK-LABEL: exp2:617; CHECK: # %bb.0:618; CHECK-NEXT: addi sp, sp, -16619; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill620; CHECK-NEXT: call exp2l621; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload622; CHECK-NEXT: addi sp, sp, 16623; CHECK-NEXT: ret624 %1 = call fp128 @llvm.exp2.f128(fp128 %a)625 ret fp128 %1626}627 628define fp128 @exp10(fp128 %a) nounwind {629; CHECK-LABEL: exp10:630; CHECK: # %bb.0:631; CHECK-NEXT: addi sp, sp, -16632; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill633; CHECK-NEXT: call exp10l634; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload635; CHECK-NEXT: addi sp, sp, 16636; CHECK-NEXT: ret637 %1 = call fp128 @llvm.exp10.f128(fp128 %a)638 ret fp128 %1639}640 641define fp128 @log(fp128 %a) nounwind {642; CHECK-LABEL: log:643; CHECK: # %bb.0:644; CHECK-NEXT: addi sp, sp, -16645; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill646; CHECK-NEXT: call logl647; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload648; CHECK-NEXT: addi sp, sp, 16649; CHECK-NEXT: ret650 %1 = call fp128 @llvm.log.f128(fp128 %a)651 ret fp128 %1652}653 654define fp128 @log10(fp128 %a) nounwind {655; CHECK-LABEL: log10:656; CHECK: # %bb.0:657; CHECK-NEXT: addi sp, sp, -16658; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill659; CHECK-NEXT: call log10l660; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload661; CHECK-NEXT: addi sp, sp, 16662; CHECK-NEXT: ret663 %1 = call fp128 @llvm.log10.f128(fp128 %a)664 ret fp128 %1665}666 667define fp128 @log2(fp128 %a) nounwind {668; CHECK-LABEL: log2:669; CHECK: # %bb.0:670; CHECK-NEXT: addi sp, sp, -16671; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill672; CHECK-NEXT: call log2l673; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload674; CHECK-NEXT: addi sp, sp, 16675; CHECK-NEXT: ret676 %1 = call fp128 @llvm.log2.f128(fp128 %a)677 ret fp128 %1678}679 680define fp128 @minnum(fp128 %a, fp128 %b) nounwind {681; CHECK-LABEL: minnum:682; CHECK: # %bb.0:683; CHECK-NEXT: addi sp, sp, -16684; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill685; CHECK-NEXT: call fminl686; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload687; CHECK-NEXT: addi sp, sp, 16688; CHECK-NEXT: ret689 %1 = call fp128 @llvm.minnum.f128(fp128 %a, fp128 %b)690 ret fp128 %1691}692 693define fp128 @maxnum(fp128 %a, fp128 %b) nounwind {694; CHECK-LABEL: maxnum:695; CHECK: # %bb.0:696; CHECK-NEXT: addi sp, sp, -16697; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill698; CHECK-NEXT: call fmaxl699; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload700; CHECK-NEXT: addi sp, sp, 16701; CHECK-NEXT: ret702 %1 = call fp128 @llvm.maxnum.f128(fp128 %a, fp128 %b)703 ret fp128 %1704}705 706define fp128 @floor(fp128 %a) nounwind {707; CHECK-LABEL: floor:708; CHECK: # %bb.0:709; CHECK-NEXT: addi sp, sp, -16710; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill711; CHECK-NEXT: call floorl712; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload713; CHECK-NEXT: addi sp, sp, 16714; CHECK-NEXT: ret715 %1 = call fp128 @llvm.floor.f128(fp128 %a)716 ret fp128 %1717}718 719define fp128 @ceil(fp128 %a) nounwind {720; CHECK-LABEL: ceil:721; CHECK: # %bb.0:722; CHECK-NEXT: addi sp, sp, -16723; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill724; CHECK-NEXT: call ceill725; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload726; CHECK-NEXT: addi sp, sp, 16727; CHECK-NEXT: ret728 %1 = call fp128 @llvm.ceil.f128(fp128 %a)729 ret fp128 %1730}731 732define fp128 @trunc(fp128 %a) nounwind {733; CHECK-LABEL: trunc:734; CHECK: # %bb.0:735; CHECK-NEXT: addi sp, sp, -16736; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill737; CHECK-NEXT: call truncl738; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload739; CHECK-NEXT: addi sp, sp, 16740; CHECK-NEXT: ret741 %1 = call fp128 @llvm.trunc.f128(fp128 %a)742 ret fp128 %1743}744 745define fp128 @rint(fp128 %a) nounwind {746; CHECK-LABEL: rint:747; CHECK: # %bb.0:748; CHECK-NEXT: addi sp, sp, -16749; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill750; CHECK-NEXT: call rintl751; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload752; CHECK-NEXT: addi sp, sp, 16753; CHECK-NEXT: ret754 %1 = call fp128 @llvm.rint.f128(fp128 %a)755 ret fp128 %1756}757 758define fp128 @nearbyint(fp128 %a) nounwind {759; CHECK-LABEL: nearbyint:760; CHECK: # %bb.0:761; CHECK-NEXT: addi sp, sp, -16762; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill763; CHECK-NEXT: call nearbyintl764; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload765; CHECK-NEXT: addi sp, sp, 16766; CHECK-NEXT: ret767 %1 = call fp128 @llvm.nearbyint.f128(fp128 %a)768 ret fp128 %1769}770 771define fp128 @round(fp128 %a) nounwind {772; CHECK-LABEL: round:773; CHECK: # %bb.0:774; CHECK-NEXT: addi sp, sp, -16775; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill776; CHECK-NEXT: call roundl777; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload778; CHECK-NEXT: addi sp, sp, 16779; CHECK-NEXT: ret780 %1 = call fp128 @llvm.round.f128(fp128 %a)781 ret fp128 %1782}783 784define fp128 @roundeven(fp128 %a) nounwind {785; CHECK-LABEL: roundeven:786; CHECK: # %bb.0:787; CHECK-NEXT: addi sp, sp, -16788; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill789; CHECK-NEXT: call roundevenl790; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload791; CHECK-NEXT: addi sp, sp, 16792; CHECK-NEXT: ret793 %1 = call fp128 @llvm.roundeven.f128(fp128 %a)794 ret fp128 %1795}796 797define fp128 @tan(fp128 %a) nounwind {798; CHECK-LABEL: tan:799; CHECK: # %bb.0:800; CHECK-NEXT: addi sp, sp, -16801; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill802; CHECK-NEXT: call tanl803; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload804; CHECK-NEXT: addi sp, sp, 16805; CHECK-NEXT: ret806 %1 = call fp128 @llvm.tan.f128(fp128 %a)807 ret fp128 %1808}809 810define fp128 @ldexp_fp128(fp128 %x, i32 %y) nounwind {811; CHECK-LABEL: ldexp_fp128:812; CHECK: # %bb.0:813; CHECK-NEXT: addi sp, sp, -16814; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill815; CHECK-NEXT: sext.w a2, a2816; CHECK-NEXT: call ldexpl817; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload818; CHECK-NEXT: addi sp, sp, 16819; CHECK-NEXT: ret820 %z = call fp128 @llvm.ldexp.f128.i32(fp128 %x, i32 %y)821 ret fp128 %z822}823 824define fp128 @asin(fp128 %a) nounwind {825; CHECK-LABEL: asin:826; CHECK: # %bb.0:827; CHECK-NEXT: addi sp, sp, -16828; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill829; CHECK-NEXT: call asinl830; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload831; CHECK-NEXT: addi sp, sp, 16832; CHECK-NEXT: ret833 %1 = call fp128 @llvm.asin.f128(fp128 %a)834 ret fp128 %1835}836 837define fp128 @acos(fp128 %a) nounwind {838; CHECK-LABEL: acos:839; CHECK: # %bb.0:840; CHECK-NEXT: addi sp, sp, -16841; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill842; CHECK-NEXT: call acosl843; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload844; CHECK-NEXT: addi sp, sp, 16845; CHECK-NEXT: ret846 %1 = call fp128 @llvm.acos.f128(fp128 %a)847 ret fp128 %1848}849 850define fp128 @atan(fp128 %a) nounwind {851; CHECK-LABEL: atan:852; CHECK: # %bb.0:853; CHECK-NEXT: addi sp, sp, -16854; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill855; CHECK-NEXT: call atanl856; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload857; CHECK-NEXT: addi sp, sp, 16858; CHECK-NEXT: ret859 %1 = call fp128 @llvm.atan.f128(fp128 %a)860 ret fp128 %1861}862 863define fp128 @atan2(fp128 %a, fp128 %b) nounwind {864; CHECK-LABEL: atan2:865; CHECK: # %bb.0:866; CHECK-NEXT: addi sp, sp, -16867; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill868; CHECK-NEXT: call atan2l869; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload870; CHECK-NEXT: addi sp, sp, 16871; CHECK-NEXT: ret872 %1 = call fp128 @llvm.atan2.f128(fp128 %a, fp128 %b)873 ret fp128 %1874}875 876define fp128 @sinh(fp128 %a) nounwind {877; CHECK-LABEL: sinh:878; CHECK: # %bb.0:879; CHECK-NEXT: addi sp, sp, -16880; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill881; CHECK-NEXT: call sinhl882; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload883; CHECK-NEXT: addi sp, sp, 16884; CHECK-NEXT: ret885 %1 = call fp128 @llvm.sinh.f128(fp128 %a)886 ret fp128 %1887}888 889define fp128 @cosh(fp128 %a) nounwind {890; CHECK-LABEL: cosh:891; CHECK: # %bb.0:892; CHECK-NEXT: addi sp, sp, -16893; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill894; CHECK-NEXT: call coshl895; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload896; CHECK-NEXT: addi sp, sp, 16897; CHECK-NEXT: ret898 %1 = call fp128 @llvm.cosh.f128(fp128 %a)899 ret fp128 %1900}901 902define fp128 @tanh(fp128 %a) nounwind {903; CHECK-LABEL: tanh:904; CHECK: # %bb.0:905; CHECK-NEXT: addi sp, sp, -16906; CHECK-NEXT: sd ra, 8(sp) # 8-byte Folded Spill907; CHECK-NEXT: call tanhl908; CHECK-NEXT: ld ra, 8(sp) # 8-byte Folded Reload909; CHECK-NEXT: addi sp, sp, 16910; CHECK-NEXT: ret911 %1 = call fp128 @llvm.tanh.f128(fp128 %a)912 ret fp128 %1913}914 915define { fp128, fp128 } @modf(fp128 %a) nounwind {916; CHECK-LABEL: modf:917; CHECK: # %bb.0:918; CHECK-NEXT: addi sp, sp, -32919; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill920; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill921; CHECK-NEXT: mv s0, a0922; CHECK-NEXT: mv a0, a1923; CHECK-NEXT: mv a1, a2924; CHECK-NEXT: mv a2, sp925; CHECK-NEXT: call modfl926; CHECK-NEXT: ld a2, 0(sp)927; CHECK-NEXT: ld a3, 8(sp)928; CHECK-NEXT: sd a0, 0(s0)929; CHECK-NEXT: sd a1, 8(s0)930; CHECK-NEXT: sd a2, 16(s0)931; CHECK-NEXT: sd a3, 24(s0)932; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload933; CHECK-NEXT: ld s0, 16(sp) # 8-byte Folded Reload934; CHECK-NEXT: addi sp, sp, 32935; CHECK-NEXT: ret936 %result = call { fp128, fp128 } @llvm.modf.f128(fp128 %a)937 ret { fp128, fp128 } %result938}939