brintos

brintos / llvm-project-archived public Read only

0
0
Text · 32.8 KiB · 0529819 Raw
816 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 -mattr=+zfhmin \3; RUN:   -verify-machineinstrs -target-abi ilp32f -disable-strictnode-mutation \4; RUN:   | FileCheck -check-prefix=RV32IZFHMIN %s5; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zfhmin \6; RUN:   -verify-machineinstrs -target-abi lp64f -disable-strictnode-mutation \7; RUN:   | FileCheck -check-prefix=RV64IZFHMIN %s8; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+d \9; RUN:   -mattr=+zfhmin -verify-machineinstrs -target-abi ilp32d \10; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV32IZFHMIN %s11; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+d \12; RUN:   -mattr=+zfhmin -verify-machineinstrs -target-abi lp64d \13; RUN:   -disable-strictnode-mutation | FileCheck -check-prefix=RV64IZFHMIN %s14; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zhinxmin \15; RUN:   -verify-machineinstrs -target-abi ilp32 -disable-strictnode-mutation \16; RUN:   | FileCheck -check-prefix=RV32IZHINXMIN-STRICT %s17; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zhinxmin \18; RUN:   -verify-machineinstrs -target-abi lp64 -disable-strictnode-mutation \19; RUN:   | FileCheck -check-prefix=RV64IZHINXMIN-STRICT %s20; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zdinx \21; RUN:   -mattr=+zhinxmin -verify-machineinstrs -target-abi ilp32 | \22; RUN:   FileCheck -check-prefix=RV32IZDINXZHINXMIN %s23; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zdinx \24; RUN:   -mattr=+zhinxmin -verify-machineinstrs -target-abi lp64 | \25; RUN:   FileCheck -check-prefix=RV64IZDINXZHINXMIN %s26 27define half @sqrt_f16(half %a) nounwind strictfp {28; RV32IZFHMIN-LABEL: sqrt_f16:29; RV32IZFHMIN:       # %bb.0:30; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa031; RV32IZFHMIN-NEXT:    fsqrt.s fa5, fa532; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa533; RV32IZFHMIN-NEXT:    ret34;35; RV64IZFHMIN-LABEL: sqrt_f16:36; RV64IZFHMIN:       # %bb.0:37; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa038; RV64IZFHMIN-NEXT:    fsqrt.s fa5, fa539; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa540; RV64IZFHMIN-NEXT:    ret41;42; RV32IZHINXMIN-STRICT-LABEL: sqrt_f16:43; RV32IZHINXMIN-STRICT:       # %bb.0:44; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a045; RV32IZHINXMIN-STRICT-NEXT:    fsqrt.s a0, a046; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a047; RV32IZHINXMIN-STRICT-NEXT:    ret48;49; RV64IZHINXMIN-STRICT-LABEL: sqrt_f16:50; RV64IZHINXMIN-STRICT:       # %bb.0:51; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a052; RV64IZHINXMIN-STRICT-NEXT:    fsqrt.s a0, a053; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a054; RV64IZHINXMIN-STRICT-NEXT:    ret55;56; RV32IZDINXZHINXMIN-LABEL: sqrt_f16:57; RV32IZDINXZHINXMIN:       # %bb.0:58; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a059; RV32IZDINXZHINXMIN-NEXT:    fsqrt.s a0, a060; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a061; RV32IZDINXZHINXMIN-NEXT:    ret62;63; RV64IZDINXZHINXMIN-LABEL: sqrt_f16:64; RV64IZDINXZHINXMIN:       # %bb.0:65; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a066; RV64IZDINXZHINXMIN-NEXT:    fsqrt.s a0, a067; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a068; RV64IZDINXZHINXMIN-NEXT:    ret69  %1 = call half @llvm.experimental.constrained.sqrt.f16(half %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp70  ret half %171}72 73define half @floor_f16(half %a) nounwind strictfp {74; RV32IZFHMIN-LABEL: floor_f16:75; RV32IZFHMIN:       # %bb.0:76; RV32IZFHMIN-NEXT:    addi sp, sp, -1677; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill78; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa079; RV32IZFHMIN-NEXT:    call floorf80; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa081; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload82; RV32IZFHMIN-NEXT:    addi sp, sp, 1683; RV32IZFHMIN-NEXT:    ret84;85; RV64IZFHMIN-LABEL: floor_f16:86; RV64IZFHMIN:       # %bb.0:87; RV64IZFHMIN-NEXT:    addi sp, sp, -1688; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill89; RV64IZFHMIN-NEXT:    fcvt.s.h fa0, fa090; RV64IZFHMIN-NEXT:    call floorf91; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa092; RV64IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload93; RV64IZFHMIN-NEXT:    addi sp, sp, 1694; RV64IZFHMIN-NEXT:    ret95;96; RV32IZHINXMIN-STRICT-LABEL: floor_f16:97; RV32IZHINXMIN-STRICT:       # %bb.0:98; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -1699; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill100; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0101; RV32IZHINXMIN-STRICT-NEXT:    call floorf102; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0103; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload104; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16105; RV32IZHINXMIN-STRICT-NEXT:    ret106;107; RV64IZHINXMIN-STRICT-LABEL: floor_f16:108; RV64IZHINXMIN-STRICT:       # %bb.0:109; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16110; RV64IZHINXMIN-STRICT-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill111; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0112; RV64IZHINXMIN-STRICT-NEXT:    call floorf113; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0114; RV64IZHINXMIN-STRICT-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload115; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16116; RV64IZHINXMIN-STRICT-NEXT:    ret117;118; RV32IZDINXZHINXMIN-LABEL: floor_f16:119; RV32IZDINXZHINXMIN:       # %bb.0:120; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16121; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill122; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0123; RV32IZDINXZHINXMIN-NEXT:    call floorf124; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0125; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload126; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16127; RV32IZDINXZHINXMIN-NEXT:    ret128;129; RV64IZDINXZHINXMIN-LABEL: floor_f16:130; RV64IZDINXZHINXMIN:       # %bb.0:131; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, -16132; RV64IZDINXZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill133; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0134; RV64IZDINXZHINXMIN-NEXT:    call floorf135; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0136; RV64IZDINXZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload137; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, 16138; RV64IZDINXZHINXMIN-NEXT:    ret139  %1 = call half @llvm.experimental.constrained.floor.f16(half %a, metadata !"fpexcept.strict") strictfp140  ret half %1141}142 143define half @ceil_f16(half %a) nounwind strictfp {144; RV32IZFHMIN-LABEL: ceil_f16:145; RV32IZFHMIN:       # %bb.0:146; RV32IZFHMIN-NEXT:    addi sp, sp, -16147; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill148; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0149; RV32IZFHMIN-NEXT:    call ceilf150; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa0151; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload152; RV32IZFHMIN-NEXT:    addi sp, sp, 16153; RV32IZFHMIN-NEXT:    ret154;155; RV64IZFHMIN-LABEL: ceil_f16:156; RV64IZFHMIN:       # %bb.0:157; RV64IZFHMIN-NEXT:    addi sp, sp, -16158; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill159; RV64IZFHMIN-NEXT:    fcvt.s.h fa0, fa0160; RV64IZFHMIN-NEXT:    call ceilf161; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa0162; RV64IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload163; RV64IZFHMIN-NEXT:    addi sp, sp, 16164; RV64IZFHMIN-NEXT:    ret165;166; RV32IZHINXMIN-STRICT-LABEL: ceil_f16:167; RV32IZHINXMIN-STRICT:       # %bb.0:168; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16169; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill170; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0171; RV32IZHINXMIN-STRICT-NEXT:    call ceilf172; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0173; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload174; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16175; RV32IZHINXMIN-STRICT-NEXT:    ret176;177; RV64IZHINXMIN-STRICT-LABEL: ceil_f16:178; RV64IZHINXMIN-STRICT:       # %bb.0:179; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16180; RV64IZHINXMIN-STRICT-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill181; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0182; RV64IZHINXMIN-STRICT-NEXT:    call ceilf183; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0184; RV64IZHINXMIN-STRICT-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload185; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16186; RV64IZHINXMIN-STRICT-NEXT:    ret187;188; RV32IZDINXZHINXMIN-LABEL: ceil_f16:189; RV32IZDINXZHINXMIN:       # %bb.0:190; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16191; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill192; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0193; RV32IZDINXZHINXMIN-NEXT:    call ceilf194; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0195; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload196; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16197; RV32IZDINXZHINXMIN-NEXT:    ret198;199; RV64IZDINXZHINXMIN-LABEL: ceil_f16:200; RV64IZDINXZHINXMIN:       # %bb.0:201; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, -16202; RV64IZDINXZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill203; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0204; RV64IZDINXZHINXMIN-NEXT:    call ceilf205; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0206; RV64IZDINXZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload207; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, 16208; RV64IZDINXZHINXMIN-NEXT:    ret209  %1 = call half @llvm.experimental.constrained.ceil.f16(half %a, metadata !"fpexcept.strict") strictfp210  ret half %1211}212 213define half @trunc_f16(half %a) nounwind strictfp {214; RV32IZFHMIN-LABEL: trunc_f16:215; RV32IZFHMIN:       # %bb.0:216; RV32IZFHMIN-NEXT:    addi sp, sp, -16217; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill218; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0219; RV32IZFHMIN-NEXT:    call truncf220; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa0221; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload222; RV32IZFHMIN-NEXT:    addi sp, sp, 16223; RV32IZFHMIN-NEXT:    ret224;225; RV64IZFHMIN-LABEL: trunc_f16:226; RV64IZFHMIN:       # %bb.0:227; RV64IZFHMIN-NEXT:    addi sp, sp, -16228; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill229; RV64IZFHMIN-NEXT:    fcvt.s.h fa0, fa0230; RV64IZFHMIN-NEXT:    call truncf231; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa0232; RV64IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload233; RV64IZFHMIN-NEXT:    addi sp, sp, 16234; RV64IZFHMIN-NEXT:    ret235;236; RV32IZHINXMIN-STRICT-LABEL: trunc_f16:237; RV32IZHINXMIN-STRICT:       # %bb.0:238; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16239; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill240; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0241; RV32IZHINXMIN-STRICT-NEXT:    call truncf242; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0243; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload244; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16245; RV32IZHINXMIN-STRICT-NEXT:    ret246;247; RV64IZHINXMIN-STRICT-LABEL: trunc_f16:248; RV64IZHINXMIN-STRICT:       # %bb.0:249; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16250; RV64IZHINXMIN-STRICT-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill251; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0252; RV64IZHINXMIN-STRICT-NEXT:    call truncf253; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0254; RV64IZHINXMIN-STRICT-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload255; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16256; RV64IZHINXMIN-STRICT-NEXT:    ret257;258; RV32IZDINXZHINXMIN-LABEL: trunc_f16:259; RV32IZDINXZHINXMIN:       # %bb.0:260; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16261; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill262; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0263; RV32IZDINXZHINXMIN-NEXT:    call truncf264; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0265; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload266; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16267; RV32IZDINXZHINXMIN-NEXT:    ret268;269; RV64IZDINXZHINXMIN-LABEL: trunc_f16:270; RV64IZDINXZHINXMIN:       # %bb.0:271; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, -16272; RV64IZDINXZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill273; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0274; RV64IZDINXZHINXMIN-NEXT:    call truncf275; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0276; RV64IZDINXZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload277; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, 16278; RV64IZDINXZHINXMIN-NEXT:    ret279  %1 = call half @llvm.experimental.constrained.trunc.f16(half %a, metadata !"fpexcept.strict") strictfp280  ret half %1281}282 283define half @rint_f16(half %a) nounwind strictfp {284; RV32IZFHMIN-LABEL: rint_f16:285; RV32IZFHMIN:       # %bb.0:286; RV32IZFHMIN-NEXT:    addi sp, sp, -16287; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill288; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0289; RV32IZFHMIN-NEXT:    call rintf290; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa0291; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload292; RV32IZFHMIN-NEXT:    addi sp, sp, 16293; RV32IZFHMIN-NEXT:    ret294;295; RV64IZFHMIN-LABEL: rint_f16:296; RV64IZFHMIN:       # %bb.0:297; RV64IZFHMIN-NEXT:    addi sp, sp, -16298; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill299; RV64IZFHMIN-NEXT:    fcvt.s.h fa0, fa0300; RV64IZFHMIN-NEXT:    call rintf301; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa0302; RV64IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload303; RV64IZFHMIN-NEXT:    addi sp, sp, 16304; RV64IZFHMIN-NEXT:    ret305;306; RV32IZHINXMIN-STRICT-LABEL: rint_f16:307; RV32IZHINXMIN-STRICT:       # %bb.0:308; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16309; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill310; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0311; RV32IZHINXMIN-STRICT-NEXT:    call rintf312; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0313; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload314; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16315; RV32IZHINXMIN-STRICT-NEXT:    ret316;317; RV64IZHINXMIN-STRICT-LABEL: rint_f16:318; RV64IZHINXMIN-STRICT:       # %bb.0:319; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16320; RV64IZHINXMIN-STRICT-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill321; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0322; RV64IZHINXMIN-STRICT-NEXT:    call rintf323; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0324; RV64IZHINXMIN-STRICT-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload325; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16326; RV64IZHINXMIN-STRICT-NEXT:    ret327;328; RV32IZDINXZHINXMIN-LABEL: rint_f16:329; RV32IZDINXZHINXMIN:       # %bb.0:330; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16331; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill332; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0333; RV32IZDINXZHINXMIN-NEXT:    call rintf334; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0335; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload336; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16337; RV32IZDINXZHINXMIN-NEXT:    ret338;339; RV64IZDINXZHINXMIN-LABEL: rint_f16:340; RV64IZDINXZHINXMIN:       # %bb.0:341; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, -16342; RV64IZDINXZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill343; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0344; RV64IZDINXZHINXMIN-NEXT:    call rintf345; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0346; RV64IZDINXZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload347; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, 16348; RV64IZDINXZHINXMIN-NEXT:    ret349  %1 = call half @llvm.experimental.constrained.rint.f16(half %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp350  ret half %1351}352 353define half @nearbyint_f16(half %a) nounwind strictfp {354; RV32IZFHMIN-LABEL: nearbyint_f16:355; RV32IZFHMIN:       # %bb.0:356; RV32IZFHMIN-NEXT:    addi sp, sp, -16357; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill358; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0359; RV32IZFHMIN-NEXT:    call nearbyintf360; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa0361; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload362; RV32IZFHMIN-NEXT:    addi sp, sp, 16363; RV32IZFHMIN-NEXT:    ret364;365; RV64IZFHMIN-LABEL: nearbyint_f16:366; RV64IZFHMIN:       # %bb.0:367; RV64IZFHMIN-NEXT:    addi sp, sp, -16368; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill369; RV64IZFHMIN-NEXT:    fcvt.s.h fa0, fa0370; RV64IZFHMIN-NEXT:    call nearbyintf371; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa0372; RV64IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload373; RV64IZFHMIN-NEXT:    addi sp, sp, 16374; RV64IZFHMIN-NEXT:    ret375;376; RV32IZHINXMIN-STRICT-LABEL: nearbyint_f16:377; RV32IZHINXMIN-STRICT:       # %bb.0:378; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16379; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill380; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0381; RV32IZHINXMIN-STRICT-NEXT:    call nearbyintf382; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0383; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload384; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16385; RV32IZHINXMIN-STRICT-NEXT:    ret386;387; RV64IZHINXMIN-STRICT-LABEL: nearbyint_f16:388; RV64IZHINXMIN-STRICT:       # %bb.0:389; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16390; RV64IZHINXMIN-STRICT-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill391; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0392; RV64IZHINXMIN-STRICT-NEXT:    call nearbyintf393; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0394; RV64IZHINXMIN-STRICT-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload395; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16396; RV64IZHINXMIN-STRICT-NEXT:    ret397;398; RV32IZDINXZHINXMIN-LABEL: nearbyint_f16:399; RV32IZDINXZHINXMIN:       # %bb.0:400; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16401; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill402; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0403; RV32IZDINXZHINXMIN-NEXT:    call nearbyintf404; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0405; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload406; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16407; RV32IZDINXZHINXMIN-NEXT:    ret408;409; RV64IZDINXZHINXMIN-LABEL: nearbyint_f16:410; RV64IZDINXZHINXMIN:       # %bb.0:411; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, -16412; RV64IZDINXZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill413; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0414; RV64IZDINXZHINXMIN-NEXT:    call nearbyintf415; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0416; RV64IZDINXZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload417; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, 16418; RV64IZDINXZHINXMIN-NEXT:    ret419  %1 = call half @llvm.experimental.constrained.nearbyint.f16(half %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp420  ret half %1421}422 423define half @round_f16(half %a) nounwind strictfp {424; RV32IZFHMIN-LABEL: round_f16:425; RV32IZFHMIN:       # %bb.0:426; RV32IZFHMIN-NEXT:    addi sp, sp, -16427; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill428; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0429; RV32IZFHMIN-NEXT:    call roundf430; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa0431; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload432; RV32IZFHMIN-NEXT:    addi sp, sp, 16433; RV32IZFHMIN-NEXT:    ret434;435; RV64IZFHMIN-LABEL: round_f16:436; RV64IZFHMIN:       # %bb.0:437; RV64IZFHMIN-NEXT:    addi sp, sp, -16438; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill439; RV64IZFHMIN-NEXT:    fcvt.s.h fa0, fa0440; RV64IZFHMIN-NEXT:    call roundf441; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa0442; RV64IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload443; RV64IZFHMIN-NEXT:    addi sp, sp, 16444; RV64IZFHMIN-NEXT:    ret445;446; RV32IZHINXMIN-STRICT-LABEL: round_f16:447; RV32IZHINXMIN-STRICT:       # %bb.0:448; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16449; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill450; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0451; RV32IZHINXMIN-STRICT-NEXT:    call roundf452; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0453; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload454; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16455; RV32IZHINXMIN-STRICT-NEXT:    ret456;457; RV64IZHINXMIN-STRICT-LABEL: round_f16:458; RV64IZHINXMIN-STRICT:       # %bb.0:459; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16460; RV64IZHINXMIN-STRICT-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill461; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0462; RV64IZHINXMIN-STRICT-NEXT:    call roundf463; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0464; RV64IZHINXMIN-STRICT-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload465; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16466; RV64IZHINXMIN-STRICT-NEXT:    ret467;468; RV32IZDINXZHINXMIN-LABEL: round_f16:469; RV32IZDINXZHINXMIN:       # %bb.0:470; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16471; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill472; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0473; RV32IZDINXZHINXMIN-NEXT:    call roundf474; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0475; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload476; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16477; RV32IZDINXZHINXMIN-NEXT:    ret478;479; RV64IZDINXZHINXMIN-LABEL: round_f16:480; RV64IZDINXZHINXMIN:       # %bb.0:481; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, -16482; RV64IZDINXZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill483; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0484; RV64IZDINXZHINXMIN-NEXT:    call roundf485; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0486; RV64IZDINXZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload487; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, 16488; RV64IZDINXZHINXMIN-NEXT:    ret489  %1 = call half @llvm.experimental.constrained.round.f16(half %a, metadata !"fpexcept.strict") strictfp490  ret half %1491}492 493define half @roundeven_f16(half %a) nounwind strictfp {494; RV32IZFHMIN-LABEL: roundeven_f16:495; RV32IZFHMIN:       # %bb.0:496; RV32IZFHMIN-NEXT:    addi sp, sp, -16497; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill498; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0499; RV32IZFHMIN-NEXT:    call roundevenf500; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa0501; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload502; RV32IZFHMIN-NEXT:    addi sp, sp, 16503; RV32IZFHMIN-NEXT:    ret504;505; RV64IZFHMIN-LABEL: roundeven_f16:506; RV64IZFHMIN:       # %bb.0:507; RV64IZFHMIN-NEXT:    addi sp, sp, -16508; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill509; RV64IZFHMIN-NEXT:    fcvt.s.h fa0, fa0510; RV64IZFHMIN-NEXT:    call roundevenf511; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa0512; RV64IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload513; RV64IZFHMIN-NEXT:    addi sp, sp, 16514; RV64IZFHMIN-NEXT:    ret515;516; RV32IZHINXMIN-STRICT-LABEL: roundeven_f16:517; RV32IZHINXMIN-STRICT:       # %bb.0:518; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16519; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill520; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0521; RV32IZHINXMIN-STRICT-NEXT:    call roundevenf522; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0523; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload524; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16525; RV32IZHINXMIN-STRICT-NEXT:    ret526;527; RV64IZHINXMIN-STRICT-LABEL: roundeven_f16:528; RV64IZHINXMIN-STRICT:       # %bb.0:529; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16530; RV64IZHINXMIN-STRICT-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill531; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0532; RV64IZHINXMIN-STRICT-NEXT:    call roundevenf533; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0534; RV64IZHINXMIN-STRICT-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload535; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16536; RV64IZHINXMIN-STRICT-NEXT:    ret537;538; RV32IZDINXZHINXMIN-LABEL: roundeven_f16:539; RV32IZDINXZHINXMIN:       # %bb.0:540; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16541; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill542; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0543; RV32IZDINXZHINXMIN-NEXT:    call roundevenf544; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0545; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload546; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16547; RV32IZDINXZHINXMIN-NEXT:    ret548;549; RV64IZDINXZHINXMIN-LABEL: roundeven_f16:550; RV64IZDINXZHINXMIN:       # %bb.0:551; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, -16552; RV64IZDINXZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill553; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0554; RV64IZDINXZHINXMIN-NEXT:    call roundevenf555; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0556; RV64IZDINXZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload557; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, 16558; RV64IZDINXZHINXMIN-NEXT:    ret559  %1 = call half @llvm.experimental.constrained.roundeven.f16(half %a, metadata !"fpexcept.strict") strictfp560  ret half %1561}562 563define iXLen @lrint_f16(half %a) nounwind strictfp {564; RV32IZFHMIN-LABEL: lrint_f16:565; RV32IZFHMIN:       # %bb.0:566; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0567; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5568; RV32IZFHMIN-NEXT:    ret569;570; RV64IZFHMIN-LABEL: lrint_f16:571; RV64IZFHMIN:       # %bb.0:572; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0573; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5574; RV64IZFHMIN-NEXT:    ret575;576; RV32IZHINXMIN-STRICT-LABEL: lrint_f16:577; RV32IZHINXMIN-STRICT:       # %bb.0:578; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0579; RV32IZHINXMIN-STRICT-NEXT:    fcvt.w.s a0, a0580; RV32IZHINXMIN-STRICT-NEXT:    ret581;582; RV64IZHINXMIN-STRICT-LABEL: lrint_f16:583; RV64IZHINXMIN-STRICT:       # %bb.0:584; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0585; RV64IZHINXMIN-STRICT-NEXT:    fcvt.l.s a0, a0586; RV64IZHINXMIN-STRICT-NEXT:    ret587;588; RV32IZDINXZHINXMIN-LABEL: lrint_f16:589; RV32IZDINXZHINXMIN:       # %bb.0:590; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0591; RV32IZDINXZHINXMIN-NEXT:    fcvt.w.s a0, a0592; RV32IZDINXZHINXMIN-NEXT:    ret593;594; RV64IZDINXZHINXMIN-LABEL: lrint_f16:595; RV64IZDINXZHINXMIN:       # %bb.0:596; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0597; RV64IZDINXZHINXMIN-NEXT:    fcvt.l.s a0, a0598; RV64IZDINXZHINXMIN-NEXT:    ret599  %1 = call iXLen @llvm.experimental.constrained.lrint.iXLen.f16(half %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp600  ret iXLen %1601}602 603define iXLen @lround_f16(half %a) nounwind strictfp {604; RV32IZFHMIN-LABEL: lround_f16:605; RV32IZFHMIN:       # %bb.0:606; RV32IZFHMIN-NEXT:    fcvt.s.h fa5, fa0607; RV32IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rmm608; RV32IZFHMIN-NEXT:    ret609;610; RV64IZFHMIN-LABEL: lround_f16:611; RV64IZFHMIN:       # %bb.0:612; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0613; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rmm614; RV64IZFHMIN-NEXT:    ret615;616; RV32IZHINXMIN-STRICT-LABEL: lround_f16:617; RV32IZHINXMIN-STRICT:       # %bb.0:618; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0619; RV32IZHINXMIN-STRICT-NEXT:    fcvt.w.s a0, a0, rmm620; RV32IZHINXMIN-STRICT-NEXT:    ret621;622; RV64IZHINXMIN-STRICT-LABEL: lround_f16:623; RV64IZHINXMIN-STRICT:       # %bb.0:624; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0625; RV64IZHINXMIN-STRICT-NEXT:    fcvt.l.s a0, a0, rmm626; RV64IZHINXMIN-STRICT-NEXT:    ret627;628; RV32IZDINXZHINXMIN-LABEL: lround_f16:629; RV32IZDINXZHINXMIN:       # %bb.0:630; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0631; RV32IZDINXZHINXMIN-NEXT:    fcvt.w.s a0, a0, rmm632; RV32IZDINXZHINXMIN-NEXT:    ret633;634; RV64IZDINXZHINXMIN-LABEL: lround_f16:635; RV64IZDINXZHINXMIN:       # %bb.0:636; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0637; RV64IZDINXZHINXMIN-NEXT:    fcvt.l.s a0, a0, rmm638; RV64IZDINXZHINXMIN-NEXT:    ret639  %1 = call iXLen @llvm.experimental.constrained.lround.iXLen.f16(half %a, metadata !"fpexcept.strict") strictfp640  ret iXLen %1641}642 643define i64 @llrint_f16(half %a) nounwind strictfp {644; RV32IZFHMIN-LABEL: llrint_f16:645; RV32IZFHMIN:       # %bb.0:646; RV32IZFHMIN-NEXT:    addi sp, sp, -16647; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill648; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0649; RV32IZFHMIN-NEXT:    call llrintf650; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload651; RV32IZFHMIN-NEXT:    addi sp, sp, 16652; RV32IZFHMIN-NEXT:    ret653;654; RV64IZFHMIN-LABEL: llrint_f16:655; RV64IZFHMIN:       # %bb.0:656; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0657; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5658; RV64IZFHMIN-NEXT:    ret659;660; RV32IZHINXMIN-STRICT-LABEL: llrint_f16:661; RV32IZHINXMIN-STRICT:       # %bb.0:662; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16663; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill664; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0665; RV32IZHINXMIN-STRICT-NEXT:    call llrintf666; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload667; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16668; RV32IZHINXMIN-STRICT-NEXT:    ret669;670; RV64IZHINXMIN-STRICT-LABEL: llrint_f16:671; RV64IZHINXMIN-STRICT:       # %bb.0:672; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0673; RV64IZHINXMIN-STRICT-NEXT:    fcvt.l.s a0, a0674; RV64IZHINXMIN-STRICT-NEXT:    ret675;676; RV32IZDINXZHINXMIN-LABEL: llrint_f16:677; RV32IZDINXZHINXMIN:       # %bb.0:678; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16679; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill680; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0681; RV32IZDINXZHINXMIN-NEXT:    call llrintf682; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload683; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16684; RV32IZDINXZHINXMIN-NEXT:    ret685;686; RV64IZDINXZHINXMIN-LABEL: llrint_f16:687; RV64IZDINXZHINXMIN:       # %bb.0:688; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0689; RV64IZDINXZHINXMIN-NEXT:    fcvt.l.s a0, a0690; RV64IZDINXZHINXMIN-NEXT:    ret691  %1 = call i64 @llvm.experimental.constrained.llrint.i64.f16(half %a, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp692  ret i64 %1693}694 695define i64 @llround_f16(half %a) nounwind strictfp {696; RV32IZFHMIN-LABEL: llround_f16:697; RV32IZFHMIN:       # %bb.0:698; RV32IZFHMIN-NEXT:    addi sp, sp, -16699; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill700; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0701; RV32IZFHMIN-NEXT:    call llroundf702; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload703; RV32IZFHMIN-NEXT:    addi sp, sp, 16704; RV32IZFHMIN-NEXT:    ret705;706; RV64IZFHMIN-LABEL: llround_f16:707; RV64IZFHMIN:       # %bb.0:708; RV64IZFHMIN-NEXT:    fcvt.s.h fa5, fa0709; RV64IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rmm710; RV64IZFHMIN-NEXT:    ret711;712; RV32IZHINXMIN-STRICT-LABEL: llround_f16:713; RV32IZHINXMIN-STRICT:       # %bb.0:714; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16715; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill716; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0717; RV32IZHINXMIN-STRICT-NEXT:    call llroundf718; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload719; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16720; RV32IZHINXMIN-STRICT-NEXT:    ret721;722; RV64IZHINXMIN-STRICT-LABEL: llround_f16:723; RV64IZHINXMIN-STRICT:       # %bb.0:724; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0725; RV64IZHINXMIN-STRICT-NEXT:    fcvt.l.s a0, a0, rmm726; RV64IZHINXMIN-STRICT-NEXT:    ret727;728; RV32IZDINXZHINXMIN-LABEL: llround_f16:729; RV32IZDINXZHINXMIN:       # %bb.0:730; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16731; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill732; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0733; RV32IZDINXZHINXMIN-NEXT:    call llroundf734; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload735; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16736; RV32IZDINXZHINXMIN-NEXT:    ret737;738; RV64IZDINXZHINXMIN-LABEL: llround_f16:739; RV64IZDINXZHINXMIN:       # %bb.0:740; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0741; RV64IZDINXZHINXMIN-NEXT:    fcvt.l.s a0, a0, rmm742; RV64IZDINXZHINXMIN-NEXT:    ret743  %1 = call i64 @llvm.experimental.constrained.llround.i64.f16(half %a, metadata !"fpexcept.strict") strictfp744  ret i64 %1745}746 747define half @ldexp_f16(half %x, i32 signext %y) nounwind {748; RV32IZFHMIN-LABEL: ldexp_f16:749; RV32IZFHMIN:       # %bb.0:750; RV32IZFHMIN-NEXT:    addi sp, sp, -16751; RV32IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill752; RV32IZFHMIN-NEXT:    fcvt.s.h fa0, fa0753; RV32IZFHMIN-NEXT:    call ldexpf754; RV32IZFHMIN-NEXT:    fcvt.h.s fa0, fa0755; RV32IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload756; RV32IZFHMIN-NEXT:    addi sp, sp, 16757; RV32IZFHMIN-NEXT:    ret758;759; RV64IZFHMIN-LABEL: ldexp_f16:760; RV64IZFHMIN:       # %bb.0:761; RV64IZFHMIN-NEXT:    addi sp, sp, -16762; RV64IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill763; RV64IZFHMIN-NEXT:    fcvt.s.h fa0, fa0764; RV64IZFHMIN-NEXT:    call ldexpf765; RV64IZFHMIN-NEXT:    fcvt.h.s fa0, fa0766; RV64IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload767; RV64IZFHMIN-NEXT:    addi sp, sp, 16768; RV64IZFHMIN-NEXT:    ret769;770; RV32IZHINXMIN-STRICT-LABEL: ldexp_f16:771; RV32IZHINXMIN-STRICT:       # %bb.0:772; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16773; RV32IZHINXMIN-STRICT-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill774; RV32IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0775; RV32IZHINXMIN-STRICT-NEXT:    call ldexpf776; RV32IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0777; RV32IZHINXMIN-STRICT-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload778; RV32IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16779; RV32IZHINXMIN-STRICT-NEXT:    ret780;781; RV64IZHINXMIN-STRICT-LABEL: ldexp_f16:782; RV64IZHINXMIN-STRICT:       # %bb.0:783; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, -16784; RV64IZHINXMIN-STRICT-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill785; RV64IZHINXMIN-STRICT-NEXT:    fcvt.s.h a0, a0786; RV64IZHINXMIN-STRICT-NEXT:    call ldexpf787; RV64IZHINXMIN-STRICT-NEXT:    fcvt.h.s a0, a0788; RV64IZHINXMIN-STRICT-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload789; RV64IZHINXMIN-STRICT-NEXT:    addi sp, sp, 16790; RV64IZHINXMIN-STRICT-NEXT:    ret791;792; RV32IZDINXZHINXMIN-LABEL: ldexp_f16:793; RV32IZDINXZHINXMIN:       # %bb.0:794; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, -16795; RV32IZDINXZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill796; RV32IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0797; RV32IZDINXZHINXMIN-NEXT:    call ldexpf798; RV32IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0799; RV32IZDINXZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload800; RV32IZDINXZHINXMIN-NEXT:    addi sp, sp, 16801; RV32IZDINXZHINXMIN-NEXT:    ret802;803; RV64IZDINXZHINXMIN-LABEL: ldexp_f16:804; RV64IZDINXZHINXMIN:       # %bb.0:805; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, -16806; RV64IZDINXZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill807; RV64IZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0808; RV64IZDINXZHINXMIN-NEXT:    call ldexpf809; RV64IZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0810; RV64IZDINXZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload811; RV64IZDINXZHINXMIN-NEXT:    addi sp, sp, 16812; RV64IZDINXZHINXMIN-NEXT:    ret813  %z = call half @llvm.experimental.constrained.ldexp.f16.i32(half %x, i32 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") strictfp814  ret half %z815}816