brintos

brintos / llvm-project-archived public Read only

0
0
Text · 43.8 KiB · 906e4bc Raw
1436 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -global-isel -mattr=+d \3; RUN:   -target-abi=ilp32d \4; RUN:   | FileCheck -check-prefixes=CHECKIFD,RV32IFD %s5; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -global-isel -mattr=+d \6; RUN:   -target-abi=lp64d \7; RUN:   | FileCheck -check-prefixes=CHECKIFD,RV64IFD %s8; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -global-isel  \9; RUN:   | FileCheck -check-prefix=RV32I %s10; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -global-isel  \11; RUN:   | FileCheck -check-prefix=RV64I %s12 13define double @sqrt_f64(double %a) nounwind {14; CHECKIFD-LABEL: sqrt_f64:15; CHECKIFD:       # %bb.0:16; CHECKIFD-NEXT:    fsqrt.d fa0, fa017; CHECKIFD-NEXT:    ret18;19; RV32I-LABEL: sqrt_f64:20; RV32I:       # %bb.0:21; RV32I-NEXT:    addi sp, sp, -1622; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill23; RV32I-NEXT:    call sqrt24; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload25; RV32I-NEXT:    addi sp, sp, 1626; RV32I-NEXT:    ret27;28; RV64I-LABEL: sqrt_f64:29; RV64I:       # %bb.0:30; RV64I-NEXT:    addi sp, sp, -1631; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill32; RV64I-NEXT:    call sqrt33; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload34; RV64I-NEXT:    addi sp, sp, 1635; RV64I-NEXT:    ret36  %1 = call double @llvm.sqrt.f64(double %a)37  ret double %138}39 40define double @powi_f64(double %a, i32 %b) nounwind {41; RV32IFD-LABEL: powi_f64:42; RV32IFD:       # %bb.0:43; RV32IFD-NEXT:    addi sp, sp, -1644; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill45; RV32IFD-NEXT:    call __powidf246; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload47; RV32IFD-NEXT:    addi sp, sp, 1648; RV32IFD-NEXT:    ret49;50; RV64IFD-LABEL: powi_f64:51; RV64IFD:       # %bb.0:52; RV64IFD-NEXT:    addi sp, sp, -1653; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill54; RV64IFD-NEXT:    sext.w a0, a055; RV64IFD-NEXT:    call __powidf256; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload57; RV64IFD-NEXT:    addi sp, sp, 1658; RV64IFD-NEXT:    ret59;60; RV32I-LABEL: powi_f64:61; RV32I:       # %bb.0:62; RV32I-NEXT:    addi sp, sp, -1663; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill64; RV32I-NEXT:    call __powidf265; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload66; RV32I-NEXT:    addi sp, sp, 1667; RV32I-NEXT:    ret68;69; RV64I-LABEL: powi_f64:70; RV64I:       # %bb.0:71; RV64I-NEXT:    addi sp, sp, -1672; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill73; RV64I-NEXT:    sext.w a1, a174; RV64I-NEXT:    call __powidf275; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload76; RV64I-NEXT:    addi sp, sp, 1677; RV64I-NEXT:    ret78  %1 = call double @llvm.powi.f64.i32(double %a, i32 %b)79  ret double %180}81 82define double @sin_f64(double %a) nounwind {83; RV32IFD-LABEL: sin_f64:84; RV32IFD:       # %bb.0:85; RV32IFD-NEXT:    addi sp, sp, -1686; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill87; RV32IFD-NEXT:    call sin88; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload89; RV32IFD-NEXT:    addi sp, sp, 1690; RV32IFD-NEXT:    ret91;92; RV64IFD-LABEL: sin_f64:93; RV64IFD:       # %bb.0:94; RV64IFD-NEXT:    addi sp, sp, -1695; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill96; RV64IFD-NEXT:    call sin97; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload98; RV64IFD-NEXT:    addi sp, sp, 1699; RV64IFD-NEXT:    ret100;101; RV32I-LABEL: sin_f64:102; RV32I:       # %bb.0:103; RV32I-NEXT:    addi sp, sp, -16104; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill105; RV32I-NEXT:    call sin106; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload107; RV32I-NEXT:    addi sp, sp, 16108; RV32I-NEXT:    ret109;110; RV64I-LABEL: sin_f64:111; RV64I:       # %bb.0:112; RV64I-NEXT:    addi sp, sp, -16113; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill114; RV64I-NEXT:    call sin115; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload116; RV64I-NEXT:    addi sp, sp, 16117; RV64I-NEXT:    ret118  %1 = call double @llvm.sin.f64(double %a)119  ret double %1120}121 122define double @cos_f64(double %a) nounwind {123; RV32IFD-LABEL: cos_f64:124; RV32IFD:       # %bb.0:125; RV32IFD-NEXT:    addi sp, sp, -16126; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill127; RV32IFD-NEXT:    call cos128; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload129; RV32IFD-NEXT:    addi sp, sp, 16130; RV32IFD-NEXT:    ret131;132; RV64IFD-LABEL: cos_f64:133; RV64IFD:       # %bb.0:134; RV64IFD-NEXT:    addi sp, sp, -16135; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill136; RV64IFD-NEXT:    call cos137; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload138; RV64IFD-NEXT:    addi sp, sp, 16139; RV64IFD-NEXT:    ret140;141; RV32I-LABEL: cos_f64:142; RV32I:       # %bb.0:143; RV32I-NEXT:    addi sp, sp, -16144; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill145; RV32I-NEXT:    call cos146; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload147; RV32I-NEXT:    addi sp, sp, 16148; RV32I-NEXT:    ret149;150; RV64I-LABEL: cos_f64:151; RV64I:       # %bb.0:152; RV64I-NEXT:    addi sp, sp, -16153; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill154; RV64I-NEXT:    call cos155; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload156; RV64I-NEXT:    addi sp, sp, 16157; RV64I-NEXT:    ret158  %1 = call double @llvm.cos.f64(double %a)159  ret double %1160}161 162; The sin+cos combination results in an FSINCOS SelectionDAG node.163define double @sincos_f64(double %a) nounwind {164; RV32IFD-LABEL: sincos_f64:165; RV32IFD:       # %bb.0:166; RV32IFD-NEXT:    addi sp, sp, -32167; RV32IFD-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill168; RV32IFD-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill169; RV32IFD-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill170; RV32IFD-NEXT:    fmv.d fs0, fa0171; RV32IFD-NEXT:    call sin172; RV32IFD-NEXT:    fmv.d fs1, fa0173; RV32IFD-NEXT:    fmv.d fa0, fs0174; RV32IFD-NEXT:    call cos175; RV32IFD-NEXT:    fadd.d fa0, fs1, fa0176; RV32IFD-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload177; RV32IFD-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload178; RV32IFD-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload179; RV32IFD-NEXT:    addi sp, sp, 32180; RV32IFD-NEXT:    ret181;182; RV64IFD-LABEL: sincos_f64:183; RV64IFD:       # %bb.0:184; RV64IFD-NEXT:    addi sp, sp, -32185; RV64IFD-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill186; RV64IFD-NEXT:    fsd fs0, 16(sp) # 8-byte Folded Spill187; RV64IFD-NEXT:    fsd fs1, 8(sp) # 8-byte Folded Spill188; RV64IFD-NEXT:    fmv.d fs0, fa0189; RV64IFD-NEXT:    call sin190; RV64IFD-NEXT:    fmv.d fs1, fa0191; RV64IFD-NEXT:    fmv.d fa0, fs0192; RV64IFD-NEXT:    call cos193; RV64IFD-NEXT:    fadd.d fa0, fs1, fa0194; RV64IFD-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload195; RV64IFD-NEXT:    fld fs0, 16(sp) # 8-byte Folded Reload196; RV64IFD-NEXT:    fld fs1, 8(sp) # 8-byte Folded Reload197; RV64IFD-NEXT:    addi sp, sp, 32198; RV64IFD-NEXT:    ret199;200; RV32I-LABEL: sincos_f64:201; RV32I:       # %bb.0:202; RV32I-NEXT:    addi sp, sp, -32203; RV32I-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill204; RV32I-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill205; RV32I-NEXT:    sw s1, 20(sp) # 4-byte Folded Spill206; RV32I-NEXT:    sw s2, 16(sp) # 4-byte Folded Spill207; RV32I-NEXT:    sw s3, 12(sp) # 4-byte Folded Spill208; RV32I-NEXT:    mv s0, a0209; RV32I-NEXT:    mv s1, a1210; RV32I-NEXT:    call sin211; RV32I-NEXT:    mv s2, a0212; RV32I-NEXT:    mv s3, a1213; RV32I-NEXT:    mv a0, s0214; RV32I-NEXT:    mv a1, s1215; RV32I-NEXT:    call cos216; RV32I-NEXT:    mv a2, a0217; RV32I-NEXT:    mv a3, a1218; RV32I-NEXT:    mv a0, s2219; RV32I-NEXT:    mv a1, s3220; RV32I-NEXT:    call __adddf3221; RV32I-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload222; RV32I-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload223; RV32I-NEXT:    lw s1, 20(sp) # 4-byte Folded Reload224; RV32I-NEXT:    lw s2, 16(sp) # 4-byte Folded Reload225; RV32I-NEXT:    lw s3, 12(sp) # 4-byte Folded Reload226; RV32I-NEXT:    addi sp, sp, 32227; RV32I-NEXT:    ret228;229; RV64I-LABEL: sincos_f64:230; RV64I:       # %bb.0:231; RV64I-NEXT:    addi sp, sp, -32232; RV64I-NEXT:    sd ra, 24(sp) # 8-byte Folded Spill233; RV64I-NEXT:    sd s0, 16(sp) # 8-byte Folded Spill234; RV64I-NEXT:    sd s1, 8(sp) # 8-byte Folded Spill235; RV64I-NEXT:    mv s0, a0236; RV64I-NEXT:    call sin237; RV64I-NEXT:    mv s1, a0238; RV64I-NEXT:    mv a0, s0239; RV64I-NEXT:    call cos240; RV64I-NEXT:    mv a1, a0241; RV64I-NEXT:    mv a0, s1242; RV64I-NEXT:    call __adddf3243; RV64I-NEXT:    ld ra, 24(sp) # 8-byte Folded Reload244; RV64I-NEXT:    ld s0, 16(sp) # 8-byte Folded Reload245; RV64I-NEXT:    ld s1, 8(sp) # 8-byte Folded Reload246; RV64I-NEXT:    addi sp, sp, 32247; RV64I-NEXT:    ret248  %1 = call double @llvm.sin.f64(double %a)249  %2 = call double @llvm.cos.f64(double %a)250  %3 = fadd double %1, %2251  ret double %3252}253 254define double @pow_f64(double %a, double %b) nounwind {255; RV32IFD-LABEL: pow_f64:256; RV32IFD:       # %bb.0:257; RV32IFD-NEXT:    addi sp, sp, -16258; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill259; RV32IFD-NEXT:    call pow260; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload261; RV32IFD-NEXT:    addi sp, sp, 16262; RV32IFD-NEXT:    ret263;264; RV64IFD-LABEL: pow_f64:265; RV64IFD:       # %bb.0:266; RV64IFD-NEXT:    addi sp, sp, -16267; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill268; RV64IFD-NEXT:    call pow269; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload270; RV64IFD-NEXT:    addi sp, sp, 16271; RV64IFD-NEXT:    ret272;273; RV32I-LABEL: pow_f64:274; RV32I:       # %bb.0:275; RV32I-NEXT:    addi sp, sp, -16276; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill277; RV32I-NEXT:    call pow278; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload279; RV32I-NEXT:    addi sp, sp, 16280; RV32I-NEXT:    ret281;282; RV64I-LABEL: pow_f64:283; RV64I:       # %bb.0:284; RV64I-NEXT:    addi sp, sp, -16285; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill286; RV64I-NEXT:    call pow287; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload288; RV64I-NEXT:    addi sp, sp, 16289; RV64I-NEXT:    ret290  %1 = call double @llvm.pow.f64(double %a, double %b)291  ret double %1292}293 294define double @exp_f64(double %a) nounwind {295; RV32IFD-LABEL: exp_f64:296; RV32IFD:       # %bb.0:297; RV32IFD-NEXT:    addi sp, sp, -16298; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill299; RV32IFD-NEXT:    call exp300; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload301; RV32IFD-NEXT:    addi sp, sp, 16302; RV32IFD-NEXT:    ret303;304; RV64IFD-LABEL: exp_f64:305; RV64IFD:       # %bb.0:306; RV64IFD-NEXT:    addi sp, sp, -16307; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill308; RV64IFD-NEXT:    call exp309; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload310; RV64IFD-NEXT:    addi sp, sp, 16311; RV64IFD-NEXT:    ret312;313; RV32I-LABEL: exp_f64:314; RV32I:       # %bb.0:315; RV32I-NEXT:    addi sp, sp, -16316; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill317; RV32I-NEXT:    call exp318; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload319; RV32I-NEXT:    addi sp, sp, 16320; RV32I-NEXT:    ret321;322; RV64I-LABEL: exp_f64:323; RV64I:       # %bb.0:324; RV64I-NEXT:    addi sp, sp, -16325; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill326; RV64I-NEXT:    call exp327; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload328; RV64I-NEXT:    addi sp, sp, 16329; RV64I-NEXT:    ret330  %1 = call double @llvm.exp.f64(double %a)331  ret double %1332}333 334define double @exp2_f64(double %a) nounwind {335; RV32IFD-LABEL: exp2_f64:336; RV32IFD:       # %bb.0:337; RV32IFD-NEXT:    addi sp, sp, -16338; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill339; RV32IFD-NEXT:    call exp2340; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload341; RV32IFD-NEXT:    addi sp, sp, 16342; RV32IFD-NEXT:    ret343;344; RV64IFD-LABEL: exp2_f64:345; RV64IFD:       # %bb.0:346; RV64IFD-NEXT:    addi sp, sp, -16347; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill348; RV64IFD-NEXT:    call exp2349; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload350; RV64IFD-NEXT:    addi sp, sp, 16351; RV64IFD-NEXT:    ret352;353; RV32I-LABEL: exp2_f64:354; RV32I:       # %bb.0:355; RV32I-NEXT:    addi sp, sp, -16356; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill357; RV32I-NEXT:    call exp2358; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload359; RV32I-NEXT:    addi sp, sp, 16360; RV32I-NEXT:    ret361;362; RV64I-LABEL: exp2_f64:363; RV64I:       # %bb.0:364; RV64I-NEXT:    addi sp, sp, -16365; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill366; RV64I-NEXT:    call exp2367; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload368; RV64I-NEXT:    addi sp, sp, 16369; RV64I-NEXT:    ret370  %1 = call double @llvm.exp2.f64(double %a)371  ret double %1372}373 374define double @exp10_f64(double %a) nounwind {375; RV32IFD-LABEL: exp10_f64:376; RV32IFD:       # %bb.0:377; RV32IFD-NEXT:    addi sp, sp, -16378; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill379; RV32IFD-NEXT:    call exp10380; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload381; RV32IFD-NEXT:    addi sp, sp, 16382; RV32IFD-NEXT:    ret383;384; RV64IFD-LABEL: exp10_f64:385; RV64IFD:       # %bb.0:386; RV64IFD-NEXT:    addi sp, sp, -16387; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill388; RV64IFD-NEXT:    call exp10389; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload390; RV64IFD-NEXT:    addi sp, sp, 16391; RV64IFD-NEXT:    ret392;393; RV32I-LABEL: exp10_f64:394; RV32I:       # %bb.0:395; RV32I-NEXT:    addi sp, sp, -16396; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill397; RV32I-NEXT:    call exp10398; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload399; RV32I-NEXT:    addi sp, sp, 16400; RV32I-NEXT:    ret401;402; RV64I-LABEL: exp10_f64:403; RV64I:       # %bb.0:404; RV64I-NEXT:    addi sp, sp, -16405; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill406; RV64I-NEXT:    call exp10407; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload408; RV64I-NEXT:    addi sp, sp, 16409; RV64I-NEXT:    ret410  %1 = call double @llvm.exp10.f64(double %a)411  ret double %1412}413 414define double @log_f64(double %a) nounwind {415; RV32IFD-LABEL: log_f64:416; RV32IFD:       # %bb.0:417; RV32IFD-NEXT:    addi sp, sp, -16418; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill419; RV32IFD-NEXT:    call log420; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload421; RV32IFD-NEXT:    addi sp, sp, 16422; RV32IFD-NEXT:    ret423;424; RV64IFD-LABEL: log_f64:425; RV64IFD:       # %bb.0:426; RV64IFD-NEXT:    addi sp, sp, -16427; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill428; RV64IFD-NEXT:    call log429; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload430; RV64IFD-NEXT:    addi sp, sp, 16431; RV64IFD-NEXT:    ret432;433; RV32I-LABEL: log_f64:434; RV32I:       # %bb.0:435; RV32I-NEXT:    addi sp, sp, -16436; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill437; RV32I-NEXT:    call log438; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload439; RV32I-NEXT:    addi sp, sp, 16440; RV32I-NEXT:    ret441;442; RV64I-LABEL: log_f64:443; RV64I:       # %bb.0:444; RV64I-NEXT:    addi sp, sp, -16445; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill446; RV64I-NEXT:    call log447; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload448; RV64I-NEXT:    addi sp, sp, 16449; RV64I-NEXT:    ret450  %1 = call double @llvm.log.f64(double %a)451  ret double %1452}453 454define double @log10_f64(double %a) nounwind {455; RV32IFD-LABEL: log10_f64:456; RV32IFD:       # %bb.0:457; RV32IFD-NEXT:    addi sp, sp, -16458; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill459; RV32IFD-NEXT:    call log10460; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload461; RV32IFD-NEXT:    addi sp, sp, 16462; RV32IFD-NEXT:    ret463;464; RV64IFD-LABEL: log10_f64:465; RV64IFD:       # %bb.0:466; RV64IFD-NEXT:    addi sp, sp, -16467; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill468; RV64IFD-NEXT:    call log10469; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload470; RV64IFD-NEXT:    addi sp, sp, 16471; RV64IFD-NEXT:    ret472;473; RV32I-LABEL: log10_f64:474; RV32I:       # %bb.0:475; RV32I-NEXT:    addi sp, sp, -16476; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill477; RV32I-NEXT:    call log10478; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload479; RV32I-NEXT:    addi sp, sp, 16480; RV32I-NEXT:    ret481;482; RV64I-LABEL: log10_f64:483; RV64I:       # %bb.0:484; RV64I-NEXT:    addi sp, sp, -16485; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill486; RV64I-NEXT:    call log10487; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload488; RV64I-NEXT:    addi sp, sp, 16489; RV64I-NEXT:    ret490  %1 = call double @llvm.log10.f64(double %a)491  ret double %1492}493 494define double @log2_f64(double %a) nounwind {495; RV32IFD-LABEL: log2_f64:496; RV32IFD:       # %bb.0:497; RV32IFD-NEXT:    addi sp, sp, -16498; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill499; RV32IFD-NEXT:    call log2500; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload501; RV32IFD-NEXT:    addi sp, sp, 16502; RV32IFD-NEXT:    ret503;504; RV64IFD-LABEL: log2_f64:505; RV64IFD:       # %bb.0:506; RV64IFD-NEXT:    addi sp, sp, -16507; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill508; RV64IFD-NEXT:    call log2509; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload510; RV64IFD-NEXT:    addi sp, sp, 16511; RV64IFD-NEXT:    ret512;513; RV32I-LABEL: log2_f64:514; RV32I:       # %bb.0:515; RV32I-NEXT:    addi sp, sp, -16516; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill517; RV32I-NEXT:    call log2518; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload519; RV32I-NEXT:    addi sp, sp, 16520; RV32I-NEXT:    ret521;522; RV64I-LABEL: log2_f64:523; RV64I:       # %bb.0:524; RV64I-NEXT:    addi sp, sp, -16525; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill526; RV64I-NEXT:    call log2527; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload528; RV64I-NEXT:    addi sp, sp, 16529; RV64I-NEXT:    ret530  %1 = call double @llvm.log2.f64(double %a)531  ret double %1532}533 534define double @fma_f64(double %a, double %b, double %c) nounwind {535; CHECKIFD-LABEL: fma_f64:536; CHECKIFD:       # %bb.0:537; CHECKIFD-NEXT:    fmadd.d fa0, fa0, fa1, fa2538; CHECKIFD-NEXT:    ret539;540; RV32I-LABEL: fma_f64:541; RV32I:       # %bb.0:542; RV32I-NEXT:    addi sp, sp, -16543; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill544; RV32I-NEXT:    call fma545; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload546; RV32I-NEXT:    addi sp, sp, 16547; RV32I-NEXT:    ret548;549; RV64I-LABEL: fma_f64:550; RV64I:       # %bb.0:551; RV64I-NEXT:    addi sp, sp, -16552; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill553; RV64I-NEXT:    call fma554; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload555; RV64I-NEXT:    addi sp, sp, 16556; RV64I-NEXT:    ret557  %1 = call double @llvm.fma.f64(double %a, double %b, double %c)558  ret double %1559}560 561define double @fmuladd_f64(double %a, double %b, double %c) nounwind {562; CHECKIFD-LABEL: fmuladd_f64:563; CHECKIFD:       # %bb.0:564; CHECKIFD-NEXT:    fmadd.d fa0, fa0, fa1, fa2565; CHECKIFD-NEXT:    ret566;567; RV32I-LABEL: fmuladd_f64:568; RV32I:       # %bb.0:569; RV32I-NEXT:    addi sp, sp, -16570; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill571; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill572; RV32I-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill573; RV32I-NEXT:    mv s0, a4574; RV32I-NEXT:    mv s1, a5575; RV32I-NEXT:    call __muldf3576; RV32I-NEXT:    mv a2, s0577; RV32I-NEXT:    mv a3, s1578; RV32I-NEXT:    call __adddf3579; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload580; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload581; RV32I-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload582; RV32I-NEXT:    addi sp, sp, 16583; RV32I-NEXT:    ret584;585; RV64I-LABEL: fmuladd_f64:586; RV64I:       # %bb.0:587; RV64I-NEXT:    addi sp, sp, -16588; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill589; RV64I-NEXT:    sd s0, 0(sp) # 8-byte Folded Spill590; RV64I-NEXT:    mv s0, a2591; RV64I-NEXT:    call __muldf3592; RV64I-NEXT:    mv a1, s0593; RV64I-NEXT:    call __adddf3594; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload595; RV64I-NEXT:    ld s0, 0(sp) # 8-byte Folded Reload596; RV64I-NEXT:    addi sp, sp, 16597; RV64I-NEXT:    ret598  %1 = call double @llvm.fmuladd.f64(double %a, double %b, double %c)599  ret double %1600}601 602define double @fabs_f64(double %a) nounwind {603; CHECKIFD-LABEL: fabs_f64:604; CHECKIFD:       # %bb.0:605; CHECKIFD-NEXT:    fabs.d fa0, fa0606; CHECKIFD-NEXT:    ret607;608; RV32I-LABEL: fabs_f64:609; RV32I:       # %bb.0:610; RV32I-NEXT:    slli a1, a1, 1611; RV32I-NEXT:    srli a1, a1, 1612; RV32I-NEXT:    ret613;614; RV64I-LABEL: fabs_f64:615; RV64I:       # %bb.0:616; RV64I-NEXT:    slli a0, a0, 1617; RV64I-NEXT:    srli a0, a0, 1618; RV64I-NEXT:    ret619  %1 = call double @llvm.fabs.f64(double %a)620  ret double %1621}622 623define double @minnum_f64(double %a, double %b) nounwind {624; CHECKIFD-LABEL: minnum_f64:625; CHECKIFD:       # %bb.0:626; CHECKIFD-NEXT:    fmin.d fa0, fa0, fa1627; CHECKIFD-NEXT:    ret628;629; RV32I-LABEL: minnum_f64:630; RV32I:       # %bb.0:631; RV32I-NEXT:    addi sp, sp, -16632; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill633; RV32I-NEXT:    call fmin634; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload635; RV32I-NEXT:    addi sp, sp, 16636; RV32I-NEXT:    ret637;638; RV64I-LABEL: minnum_f64:639; RV64I:       # %bb.0:640; RV64I-NEXT:    addi sp, sp, -16641; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill642; RV64I-NEXT:    call fmin643; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload644; RV64I-NEXT:    addi sp, sp, 16645; RV64I-NEXT:    ret646  %1 = call double @llvm.minnum.f64(double %a, double %b)647  ret double %1648}649 650define double @maxnum_f64(double %a, double %b) nounwind {651; CHECKIFD-LABEL: maxnum_f64:652; CHECKIFD:       # %bb.0:653; CHECKIFD-NEXT:    fmax.d fa0, fa0, fa1654; CHECKIFD-NEXT:    ret655;656; RV32I-LABEL: maxnum_f64:657; RV32I:       # %bb.0:658; RV32I-NEXT:    addi sp, sp, -16659; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill660; RV32I-NEXT:    call fmax661; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload662; RV32I-NEXT:    addi sp, sp, 16663; RV32I-NEXT:    ret664;665; RV64I-LABEL: maxnum_f64:666; RV64I:       # %bb.0:667; RV64I-NEXT:    addi sp, sp, -16668; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill669; RV64I-NEXT:    call fmax670; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload671; RV64I-NEXT:    addi sp, sp, 16672; RV64I-NEXT:    ret673  %1 = call double @llvm.maxnum.f64(double %a, double %b)674  ret double %1675}676 677define double @copysign_f64(double %a, double %b) nounwind {678; CHECKIFD-LABEL: copysign_f64:679; CHECKIFD:       # %bb.0:680; CHECKIFD-NEXT:    fsgnj.d fa0, fa0, fa1681; CHECKIFD-NEXT:    ret682;683; RV32I-LABEL: copysign_f64:684; RV32I:       # %bb.0:685; RV32I-NEXT:    lui a2, 524288686; RV32I-NEXT:    slli a1, a1, 1687; RV32I-NEXT:    srli a1, a1, 1688; RV32I-NEXT:    and a2, a3, a2689; RV32I-NEXT:    or a1, a1, a2690; RV32I-NEXT:    ret691;692; RV64I-LABEL: copysign_f64:693; RV64I:       # %bb.0:694; RV64I-NEXT:    slli a0, a0, 1695; RV64I-NEXT:    srli a1, a1, 63696; RV64I-NEXT:    srli a0, a0, 1697; RV64I-NEXT:    slli a1, a1, 63698; RV64I-NEXT:    or a0, a0, a1699; RV64I-NEXT:    ret700  %1 = call double @llvm.copysign.f64(double %a, double %b)701  ret double %1702}703 704define double @floor_f64(double %a) nounwind {705; RV32IFD-LABEL: floor_f64:706; RV32IFD:       # %bb.0:707; RV32IFD-NEXT:    addi sp, sp, -16708; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill709; RV32IFD-NEXT:    call floor710; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload711; RV32IFD-NEXT:    addi sp, sp, 16712; RV32IFD-NEXT:    ret713;714; RV64IFD-LABEL: floor_f64:715; RV64IFD:       # %bb.0:716; RV64IFD-NEXT:    addi sp, sp, -16717; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill718; RV64IFD-NEXT:    call floor719; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload720; RV64IFD-NEXT:    addi sp, sp, 16721; RV64IFD-NEXT:    ret722;723; RV32I-LABEL: floor_f64:724; RV32I:       # %bb.0:725; RV32I-NEXT:    addi sp, sp, -16726; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill727; RV32I-NEXT:    call floor728; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload729; RV32I-NEXT:    addi sp, sp, 16730; RV32I-NEXT:    ret731;732; RV64I-LABEL: floor_f64:733; RV64I:       # %bb.0:734; RV64I-NEXT:    addi sp, sp, -16735; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill736; RV64I-NEXT:    call floor737; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload738; RV64I-NEXT:    addi sp, sp, 16739; RV64I-NEXT:    ret740  %1 = call double @llvm.floor.f64(double %a)741  ret double %1742}743 744define double @ceil_f64(double %a) nounwind {745; RV32IFD-LABEL: ceil_f64:746; RV32IFD:       # %bb.0:747; RV32IFD-NEXT:    addi sp, sp, -16748; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill749; RV32IFD-NEXT:    call ceil750; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload751; RV32IFD-NEXT:    addi sp, sp, 16752; RV32IFD-NEXT:    ret753;754; RV64IFD-LABEL: ceil_f64:755; RV64IFD:       # %bb.0:756; RV64IFD-NEXT:    addi sp, sp, -16757; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill758; RV64IFD-NEXT:    call ceil759; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload760; RV64IFD-NEXT:    addi sp, sp, 16761; RV64IFD-NEXT:    ret762;763; RV32I-LABEL: ceil_f64:764; RV32I:       # %bb.0:765; RV32I-NEXT:    addi sp, sp, -16766; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill767; RV32I-NEXT:    call ceil768; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload769; RV32I-NEXT:    addi sp, sp, 16770; RV32I-NEXT:    ret771;772; RV64I-LABEL: ceil_f64:773; RV64I:       # %bb.0:774; RV64I-NEXT:    addi sp, sp, -16775; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill776; RV64I-NEXT:    call ceil777; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload778; RV64I-NEXT:    addi sp, sp, 16779; RV64I-NEXT:    ret780  %1 = call double @llvm.ceil.f64(double %a)781  ret double %1782}783 784define double @trunc_f64(double %a) nounwind {785; RV32IFD-LABEL: trunc_f64:786; RV32IFD:       # %bb.0:787; RV32IFD-NEXT:    addi sp, sp, -16788; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill789; RV32IFD-NEXT:    call trunc790; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload791; RV32IFD-NEXT:    addi sp, sp, 16792; RV32IFD-NEXT:    ret793;794; RV64IFD-LABEL: trunc_f64:795; RV64IFD:       # %bb.0:796; RV64IFD-NEXT:    addi sp, sp, -16797; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill798; RV64IFD-NEXT:    call trunc799; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload800; RV64IFD-NEXT:    addi sp, sp, 16801; RV64IFD-NEXT:    ret802;803; RV32I-LABEL: trunc_f64:804; RV32I:       # %bb.0:805; RV32I-NEXT:    addi sp, sp, -16806; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill807; RV32I-NEXT:    call trunc808; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload809; RV32I-NEXT:    addi sp, sp, 16810; RV32I-NEXT:    ret811;812; RV64I-LABEL: trunc_f64:813; RV64I:       # %bb.0:814; RV64I-NEXT:    addi sp, sp, -16815; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill816; RV64I-NEXT:    call trunc817; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload818; RV64I-NEXT:    addi sp, sp, 16819; RV64I-NEXT:    ret820  %1 = call double @llvm.trunc.f64(double %a)821  ret double %1822}823 824define double @rint_f64(double %a) nounwind {825; RV32IFD-LABEL: rint_f64:826; RV32IFD:       # %bb.0:827; RV32IFD-NEXT:    addi sp, sp, -16828; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill829; RV32IFD-NEXT:    call rint830; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload831; RV32IFD-NEXT:    addi sp, sp, 16832; RV32IFD-NEXT:    ret833;834; RV64IFD-LABEL: rint_f64:835; RV64IFD:       # %bb.0:836; RV64IFD-NEXT:    addi sp, sp, -16837; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill838; RV64IFD-NEXT:    call rint839; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload840; RV64IFD-NEXT:    addi sp, sp, 16841; RV64IFD-NEXT:    ret842;843; RV32I-LABEL: rint_f64:844; RV32I:       # %bb.0:845; RV32I-NEXT:    addi sp, sp, -16846; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill847; RV32I-NEXT:    call rint848; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload849; RV32I-NEXT:    addi sp, sp, 16850; RV32I-NEXT:    ret851;852; RV64I-LABEL: rint_f64:853; RV64I:       # %bb.0:854; RV64I-NEXT:    addi sp, sp, -16855; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill856; RV64I-NEXT:    call rint857; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload858; RV64I-NEXT:    addi sp, sp, 16859; RV64I-NEXT:    ret860  %1 = call double @llvm.rint.f64(double %a)861  ret double %1862}863 864define double @nearbyint_f64(double %a) nounwind {865; RV32IFD-LABEL: nearbyint_f64:866; RV32IFD:       # %bb.0:867; RV32IFD-NEXT:    addi sp, sp, -16868; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill869; RV32IFD-NEXT:    call nearbyint870; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload871; RV32IFD-NEXT:    addi sp, sp, 16872; RV32IFD-NEXT:    ret873;874; RV64IFD-LABEL: nearbyint_f64:875; RV64IFD:       # %bb.0:876; RV64IFD-NEXT:    addi sp, sp, -16877; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill878; RV64IFD-NEXT:    call nearbyint879; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload880; RV64IFD-NEXT:    addi sp, sp, 16881; RV64IFD-NEXT:    ret882;883; RV32I-LABEL: nearbyint_f64:884; RV32I:       # %bb.0:885; RV32I-NEXT:    addi sp, sp, -16886; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill887; RV32I-NEXT:    call nearbyint888; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload889; RV32I-NEXT:    addi sp, sp, 16890; RV32I-NEXT:    ret891;892; RV64I-LABEL: nearbyint_f64:893; RV64I:       # %bb.0:894; RV64I-NEXT:    addi sp, sp, -16895; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill896; RV64I-NEXT:    call nearbyint897; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload898; RV64I-NEXT:    addi sp, sp, 16899; RV64I-NEXT:    ret900  %1 = call double @llvm.nearbyint.f64(double %a)901  ret double %1902}903 904define double @round_f64(double %a) nounwind {905; RV32IFD-LABEL: round_f64:906; RV32IFD:       # %bb.0:907; RV32IFD-NEXT:    addi sp, sp, -16908; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill909; RV32IFD-NEXT:    call round910; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload911; RV32IFD-NEXT:    addi sp, sp, 16912; RV32IFD-NEXT:    ret913;914; RV64IFD-LABEL: round_f64:915; RV64IFD:       # %bb.0:916; RV64IFD-NEXT:    addi sp, sp, -16917; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill918; RV64IFD-NEXT:    call round919; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload920; RV64IFD-NEXT:    addi sp, sp, 16921; RV64IFD-NEXT:    ret922;923; RV32I-LABEL: round_f64:924; RV32I:       # %bb.0:925; RV32I-NEXT:    addi sp, sp, -16926; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill927; RV32I-NEXT:    call round928; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload929; RV32I-NEXT:    addi sp, sp, 16930; RV32I-NEXT:    ret931;932; RV64I-LABEL: round_f64:933; RV64I:       # %bb.0:934; RV64I-NEXT:    addi sp, sp, -16935; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill936; RV64I-NEXT:    call round937; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload938; RV64I-NEXT:    addi sp, sp, 16939; RV64I-NEXT:    ret940  %1 = call double @llvm.round.f64(double %a)941  ret double %1942}943 944define double @roundeven_f64(double %a) nounwind {945; RV32IFD-LABEL: roundeven_f64:946; RV32IFD:       # %bb.0:947; RV32IFD-NEXT:    addi sp, sp, -16948; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill949; RV32IFD-NEXT:    call roundeven950; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload951; RV32IFD-NEXT:    addi sp, sp, 16952; RV32IFD-NEXT:    ret953;954; RV64IFD-LABEL: roundeven_f64:955; RV64IFD:       # %bb.0:956; RV64IFD-NEXT:    addi sp, sp, -16957; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill958; RV64IFD-NEXT:    call roundeven959; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload960; RV64IFD-NEXT:    addi sp, sp, 16961; RV64IFD-NEXT:    ret962;963; RV32I-LABEL: roundeven_f64:964; RV32I:       # %bb.0:965; RV32I-NEXT:    addi sp, sp, -16966; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill967; RV32I-NEXT:    call roundeven968; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload969; RV32I-NEXT:    addi sp, sp, 16970; RV32I-NEXT:    ret971;972; RV64I-LABEL: roundeven_f64:973; RV64I:       # %bb.0:974; RV64I-NEXT:    addi sp, sp, -16975; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill976; RV64I-NEXT:    call roundeven977; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload978; RV64I-NEXT:    addi sp, sp, 16979; RV64I-NEXT:    ret980  %1 = call double @llvm.roundeven.f64(double %a)981  ret double %1982}983 984define i1 @isnan_d_fpclass(double %x) {985; CHECKIFD-LABEL: isnan_d_fpclass:986; CHECKIFD:       # %bb.0:987; CHECKIFD-NEXT:    fclass.d a0, fa0988; CHECKIFD-NEXT:    andi a0, a0, 768989; CHECKIFD-NEXT:    snez a0, a0990; CHECKIFD-NEXT:    ret991;992; RV32I-LABEL: isnan_d_fpclass:993; RV32I:       # %bb.0:994; RV32I-NEXT:    lui a2, 524032995; RV32I-NEXT:    slli a1, a1, 1996; RV32I-NEXT:    srli a1, a1, 1997; RV32I-NEXT:    beq a1, a2, .LBB25_2998; RV32I-NEXT:  # %bb.1:999; RV32I-NEXT:    sltu a0, a2, a11000; RV32I-NEXT:    ret1001; RV32I-NEXT:  .LBB25_2:1002; RV32I-NEXT:    snez a0, a01003; RV32I-NEXT:    ret1004;1005; RV64I-LABEL: isnan_d_fpclass:1006; RV64I:       # %bb.0:1007; RV64I-NEXT:    li a1, 20471008; RV64I-NEXT:    slli a0, a0, 11009; RV64I-NEXT:    slli a1, a1, 521010; RV64I-NEXT:    srli a0, a0, 11011; RV64I-NEXT:    sltu a0, a1, a01012; RV64I-NEXT:    ret1013  %1 = call i1 @llvm.is.fpclass.f64(double %x, i32 3)  ; nan1014  ret i1 %11015}1016 1017define double @tan_f64(double %a) nounwind {1018; RV32IFD-LABEL: tan_f64:1019; RV32IFD:       # %bb.0:1020; RV32IFD-NEXT:    addi sp, sp, -161021; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1022; RV32IFD-NEXT:    call tan1023; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1024; RV32IFD-NEXT:    addi sp, sp, 161025; RV32IFD-NEXT:    ret1026;1027; RV64IFD-LABEL: tan_f64:1028; RV64IFD:       # %bb.0:1029; RV64IFD-NEXT:    addi sp, sp, -161030; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1031; RV64IFD-NEXT:    call tan1032; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1033; RV64IFD-NEXT:    addi sp, sp, 161034; RV64IFD-NEXT:    ret1035;1036; RV32I-LABEL: tan_f64:1037; RV32I:       # %bb.0:1038; RV32I-NEXT:    addi sp, sp, -161039; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1040; RV32I-NEXT:    call tan1041; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1042; RV32I-NEXT:    addi sp, sp, 161043; RV32I-NEXT:    ret1044;1045; RV64I-LABEL: tan_f64:1046; RV64I:       # %bb.0:1047; RV64I-NEXT:    addi sp, sp, -161048; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1049; RV64I-NEXT:    call tan1050; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1051; RV64I-NEXT:    addi sp, sp, 161052; RV64I-NEXT:    ret1053  %1 = call double @llvm.tan.f64(double %a)1054  ret double %11055}1056 1057define double @ldexp_double(double %x, i32 %y) nounwind {1058; RV32IFD-LABEL: ldexp_double:1059; RV32IFD:       # %bb.0:1060; RV32IFD-NEXT:    addi sp, sp, -161061; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1062; RV32IFD-NEXT:    call ldexp1063; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1064; RV32IFD-NEXT:    addi sp, sp, 161065; RV32IFD-NEXT:    ret1066;1067; RV64IFD-LABEL: ldexp_double:1068; RV64IFD:       # %bb.0:1069; RV64IFD-NEXT:    addi sp, sp, -161070; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1071; RV64IFD-NEXT:    sext.w a0, a01072; RV64IFD-NEXT:    call ldexp1073; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1074; RV64IFD-NEXT:    addi sp, sp, 161075; RV64IFD-NEXT:    ret1076;1077; RV32I-LABEL: ldexp_double:1078; RV32I:       # %bb.0:1079; RV32I-NEXT:    addi sp, sp, -161080; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1081; RV32I-NEXT:    call ldexp1082; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1083; RV32I-NEXT:    addi sp, sp, 161084; RV32I-NEXT:    ret1085;1086; RV64I-LABEL: ldexp_double:1087; RV64I:       # %bb.0:1088; RV64I-NEXT:    addi sp, sp, -161089; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1090; RV64I-NEXT:    sext.w a1, a11091; RV64I-NEXT:    call ldexp1092; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1093; RV64I-NEXT:    addi sp, sp, 161094; RV64I-NEXT:    ret1095  %z = call double @llvm.ldexp.f64.i32(double %x, i32 %y)1096  ret double %z1097}1098 1099define double @asin_f64(double %a) nounwind {1100; RV32IFD-LABEL: asin_f64:1101; RV32IFD:       # %bb.0:1102; RV32IFD-NEXT:    addi sp, sp, -161103; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1104; RV32IFD-NEXT:    call asin1105; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1106; RV32IFD-NEXT:    addi sp, sp, 161107; RV32IFD-NEXT:    ret1108;1109; RV64IFD-LABEL: asin_f64:1110; RV64IFD:       # %bb.0:1111; RV64IFD-NEXT:    addi sp, sp, -161112; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1113; RV64IFD-NEXT:    call asin1114; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1115; RV64IFD-NEXT:    addi sp, sp, 161116; RV64IFD-NEXT:    ret1117;1118; RV32I-LABEL: asin_f64:1119; RV32I:       # %bb.0:1120; RV32I-NEXT:    addi sp, sp, -161121; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1122; RV32I-NEXT:    call asin1123; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1124; RV32I-NEXT:    addi sp, sp, 161125; RV32I-NEXT:    ret1126;1127; RV64I-LABEL: asin_f64:1128; RV64I:       # %bb.0:1129; RV64I-NEXT:    addi sp, sp, -161130; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1131; RV64I-NEXT:    call asin1132; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1133; RV64I-NEXT:    addi sp, sp, 161134; RV64I-NEXT:    ret1135  %1 = call double @llvm.asin.f64(double %a)1136  ret double %11137}1138 1139define double @acos_f64(double %a) nounwind {1140; RV32IFD-LABEL: acos_f64:1141; RV32IFD:       # %bb.0:1142; RV32IFD-NEXT:    addi sp, sp, -161143; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1144; RV32IFD-NEXT:    call acos1145; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1146; RV32IFD-NEXT:    addi sp, sp, 161147; RV32IFD-NEXT:    ret1148;1149; RV64IFD-LABEL: acos_f64:1150; RV64IFD:       # %bb.0:1151; RV64IFD-NEXT:    addi sp, sp, -161152; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1153; RV64IFD-NEXT:    call acos1154; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1155; RV64IFD-NEXT:    addi sp, sp, 161156; RV64IFD-NEXT:    ret1157;1158; RV32I-LABEL: acos_f64:1159; RV32I:       # %bb.0:1160; RV32I-NEXT:    addi sp, sp, -161161; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1162; RV32I-NEXT:    call acos1163; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1164; RV32I-NEXT:    addi sp, sp, 161165; RV32I-NEXT:    ret1166;1167; RV64I-LABEL: acos_f64:1168; RV64I:       # %bb.0:1169; RV64I-NEXT:    addi sp, sp, -161170; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1171; RV64I-NEXT:    call acos1172; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1173; RV64I-NEXT:    addi sp, sp, 161174; RV64I-NEXT:    ret1175  %1 = call double @llvm.acos.f64(double %a)1176  ret double %11177}1178 1179define double @atan_f64(double %a) nounwind {1180; RV32IFD-LABEL: atan_f64:1181; RV32IFD:       # %bb.0:1182; RV32IFD-NEXT:    addi sp, sp, -161183; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1184; RV32IFD-NEXT:    call atan1185; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1186; RV32IFD-NEXT:    addi sp, sp, 161187; RV32IFD-NEXT:    ret1188;1189; RV64IFD-LABEL: atan_f64:1190; RV64IFD:       # %bb.0:1191; RV64IFD-NEXT:    addi sp, sp, -161192; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1193; RV64IFD-NEXT:    call atan1194; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1195; RV64IFD-NEXT:    addi sp, sp, 161196; RV64IFD-NEXT:    ret1197;1198; RV32I-LABEL: atan_f64:1199; RV32I:       # %bb.0:1200; RV32I-NEXT:    addi sp, sp, -161201; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1202; RV32I-NEXT:    call atan1203; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1204; RV32I-NEXT:    addi sp, sp, 161205; RV32I-NEXT:    ret1206;1207; RV64I-LABEL: atan_f64:1208; RV64I:       # %bb.0:1209; RV64I-NEXT:    addi sp, sp, -161210; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1211; RV64I-NEXT:    call atan1212; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1213; RV64I-NEXT:    addi sp, sp, 161214; RV64I-NEXT:    ret1215  %1 = call double @llvm.atan.f64(double %a)1216  ret double %11217}1218 1219define double @atan2_f64(double %a, double %b) nounwind {1220; RV32IFD-LABEL: atan2_f64:1221; RV32IFD:       # %bb.0:1222; RV32IFD-NEXT:    addi sp, sp, -161223; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1224; RV32IFD-NEXT:    call atan21225; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1226; RV32IFD-NEXT:    addi sp, sp, 161227; RV32IFD-NEXT:    ret1228;1229; RV64IFD-LABEL: atan2_f64:1230; RV64IFD:       # %bb.0:1231; RV64IFD-NEXT:    addi sp, sp, -161232; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1233; RV64IFD-NEXT:    call atan21234; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1235; RV64IFD-NEXT:    addi sp, sp, 161236; RV64IFD-NEXT:    ret1237;1238; RV32I-LABEL: atan2_f64:1239; RV32I:       # %bb.0:1240; RV32I-NEXT:    addi sp, sp, -161241; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1242; RV32I-NEXT:    call atan21243; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1244; RV32I-NEXT:    addi sp, sp, 161245; RV32I-NEXT:    ret1246;1247; RV64I-LABEL: atan2_f64:1248; RV64I:       # %bb.0:1249; RV64I-NEXT:    addi sp, sp, -161250; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1251; RV64I-NEXT:    call atan21252; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1253; RV64I-NEXT:    addi sp, sp, 161254; RV64I-NEXT:    ret1255  %1 = call double @llvm.atan2.f64(double %a, double %b)1256  ret double %11257}1258 1259define double @sinh_f64(double %a) nounwind {1260; RV32IFD-LABEL: sinh_f64:1261; RV32IFD:       # %bb.0:1262; RV32IFD-NEXT:    addi sp, sp, -161263; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1264; RV32IFD-NEXT:    call sinh1265; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1266; RV32IFD-NEXT:    addi sp, sp, 161267; RV32IFD-NEXT:    ret1268;1269; RV64IFD-LABEL: sinh_f64:1270; RV64IFD:       # %bb.0:1271; RV64IFD-NEXT:    addi sp, sp, -161272; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1273; RV64IFD-NEXT:    call sinh1274; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1275; RV64IFD-NEXT:    addi sp, sp, 161276; RV64IFD-NEXT:    ret1277;1278; RV32I-LABEL: sinh_f64:1279; RV32I:       # %bb.0:1280; RV32I-NEXT:    addi sp, sp, -161281; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1282; RV32I-NEXT:    call sinh1283; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1284; RV32I-NEXT:    addi sp, sp, 161285; RV32I-NEXT:    ret1286;1287; RV64I-LABEL: sinh_f64:1288; RV64I:       # %bb.0:1289; RV64I-NEXT:    addi sp, sp, -161290; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1291; RV64I-NEXT:    call sinh1292; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1293; RV64I-NEXT:    addi sp, sp, 161294; RV64I-NEXT:    ret1295  %1 = call double @llvm.sinh.f64(double %a)1296  ret double %11297}1298 1299define double @cosh_f64(double %a) nounwind {1300; RV32IFD-LABEL: cosh_f64:1301; RV32IFD:       # %bb.0:1302; RV32IFD-NEXT:    addi sp, sp, -161303; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1304; RV32IFD-NEXT:    call cosh1305; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1306; RV32IFD-NEXT:    addi sp, sp, 161307; RV32IFD-NEXT:    ret1308;1309; RV64IFD-LABEL: cosh_f64:1310; RV64IFD:       # %bb.0:1311; RV64IFD-NEXT:    addi sp, sp, -161312; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1313; RV64IFD-NEXT:    call cosh1314; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1315; RV64IFD-NEXT:    addi sp, sp, 161316; RV64IFD-NEXT:    ret1317;1318; RV32I-LABEL: cosh_f64:1319; RV32I:       # %bb.0:1320; RV32I-NEXT:    addi sp, sp, -161321; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1322; RV32I-NEXT:    call cosh1323; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1324; RV32I-NEXT:    addi sp, sp, 161325; RV32I-NEXT:    ret1326;1327; RV64I-LABEL: cosh_f64:1328; RV64I:       # %bb.0:1329; RV64I-NEXT:    addi sp, sp, -161330; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1331; RV64I-NEXT:    call cosh1332; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1333; RV64I-NEXT:    addi sp, sp, 161334; RV64I-NEXT:    ret1335  %1 = call double @llvm.cosh.f64(double %a)1336  ret double %11337}1338 1339define double @tanh_f64(double %a) nounwind {1340; RV32IFD-LABEL: tanh_f64:1341; RV32IFD:       # %bb.0:1342; RV32IFD-NEXT:    addi sp, sp, -161343; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1344; RV32IFD-NEXT:    call tanh1345; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1346; RV32IFD-NEXT:    addi sp, sp, 161347; RV32IFD-NEXT:    ret1348;1349; RV64IFD-LABEL: tanh_f64:1350; RV64IFD:       # %bb.0:1351; RV64IFD-NEXT:    addi sp, sp, -161352; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1353; RV64IFD-NEXT:    call tanh1354; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1355; RV64IFD-NEXT:    addi sp, sp, 161356; RV64IFD-NEXT:    ret1357;1358; RV32I-LABEL: tanh_f64:1359; RV32I:       # %bb.0:1360; RV32I-NEXT:    addi sp, sp, -161361; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1362; RV32I-NEXT:    call tanh1363; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1364; RV32I-NEXT:    addi sp, sp, 161365; RV32I-NEXT:    ret1366;1367; RV64I-LABEL: tanh_f64:1368; RV64I:       # %bb.0:1369; RV64I-NEXT:    addi sp, sp, -161370; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1371; RV64I-NEXT:    call tanh1372; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1373; RV64I-NEXT:    addi sp, sp, 161374; RV64I-NEXT:    ret1375  %1 = call double @llvm.tanh.f64(double %a)1376  ret double %11377}1378 1379define { double, double } @test_modf_f64(double %a) nounwind {1380; RV32IFD-LABEL: test_modf_f64:1381; RV32IFD:       # %bb.0:1382; RV32IFD-NEXT:    addi sp, sp, -161383; RV32IFD-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1384; RV32IFD-NEXT:    mv a0, sp1385; RV32IFD-NEXT:    call modf1386; RV32IFD-NEXT:    fld fa1, 0(sp)1387; RV32IFD-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1388; RV32IFD-NEXT:    addi sp, sp, 161389; RV32IFD-NEXT:    ret1390;1391; RV64IFD-LABEL: test_modf_f64:1392; RV64IFD:       # %bb.0:1393; RV64IFD-NEXT:    addi sp, sp, -161394; RV64IFD-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1395; RV64IFD-NEXT:    mv a0, sp1396; RV64IFD-NEXT:    call modf1397; RV64IFD-NEXT:    fld fa1, 0(sp)1398; RV64IFD-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1399; RV64IFD-NEXT:    addi sp, sp, 161400; RV64IFD-NEXT:    ret1401;1402; RV32I-LABEL: test_modf_f64:1403; RV32I:       # %bb.0:1404; RV32I-NEXT:    addi sp, sp, -161405; RV32I-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1406; RV32I-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1407; RV32I-NEXT:    mv s0, a01408; RV32I-NEXT:    mv a0, a11409; RV32I-NEXT:    mv a1, a21410; RV32I-NEXT:    mv a2, sp1411; RV32I-NEXT:    call modf1412; RV32I-NEXT:    lw a2, 0(sp)1413; RV32I-NEXT:    lw a3, 4(sp)1414; RV32I-NEXT:    sw a0, 0(s0)1415; RV32I-NEXT:    sw a1, 4(s0)1416; RV32I-NEXT:    sw a2, 8(s0)1417; RV32I-NEXT:    sw a3, 12(s0)1418; RV32I-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1419; RV32I-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1420; RV32I-NEXT:    addi sp, sp, 161421; RV32I-NEXT:    ret1422;1423; RV64I-LABEL: test_modf_f64:1424; RV64I:       # %bb.0:1425; RV64I-NEXT:    addi sp, sp, -161426; RV64I-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1427; RV64I-NEXT:    mv a1, sp1428; RV64I-NEXT:    call modf1429; RV64I-NEXT:    ld a1, 0(sp)1430; RV64I-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1431; RV64I-NEXT:    addi sp, sp, 161432; RV64I-NEXT:    ret1433  %result = call { double, double } @llvm.modf.f64(double %a)1434  ret { double, double } %result1435}1436