brintos

brintos / llvm-project-archived public Read only

0
0
Text · 73.0 KiB · daeb75c Raw
2075 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \3; RUN:   -target-abi ilp32f -disable-strictnode-mutation < %s \4; RUN:   | FileCheck -check-prefixes=CHECKIZFH,CHECK32-IZFH,RV32IZFH %s5; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \6; RUN:   -target-abi lp64f -disable-strictnode-mutation < %s \7; RUN:   | FileCheck -check-prefixes=CHECKIZFH,CHECK64-IZFH,RV64IZFH %s8; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \9; RUN:   -target-abi ilp32 -disable-strictnode-mutation < %s \10; RUN:   | FileCheck -check-prefixes=CHECKIZHINX,CHECK32-IZHINX,RV32IZHINX %s11; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \12; RUN:   -target-abi lp64 -disable-strictnode-mutation < %s \13; RUN:   | FileCheck -check-prefixes=CHECKIZHINX,CHECK64-IZHINX,RV64IZHINX %s14 15; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh -verify-machineinstrs \16; RUN:   -target-abi ilp32d -disable-strictnode-mutation < %s \17; RUN:   | FileCheck -check-prefixes=CHECKIDZFH,CHECK32-IZFH %s18; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh -verify-machineinstrs \19; RUN:   -target-abi lp64d -disable-strictnode-mutation < %s \20; RUN:   | FileCheck -check-prefixes=CHECKIDZFH,CHECK64-IZFH %s21; RUN: llc -mtriple=riscv32 -mattr=+zdinx,+zhinx -verify-machineinstrs \22; RUN:   -target-abi ilp32 -disable-strictnode-mutation < %s \23; RUN:   | FileCheck -check-prefixes=CHECKIZDINXZHINX,CHECK32-IZHINX %s24; RUN: llc -mtriple=riscv64 -mattr=+zdinx,+zhinx -verify-machineinstrs \25; RUN:   -target-abi lp64 -disable-strictnode-mutation < %s \26; RUN:   | FileCheck -check-prefixes=CHECKIZDINXZHINX,CHECK64-IZHINX %s27 28; RUN: llc -mtriple=riscv32 -mattr=+zfhmin -verify-machineinstrs \29; RUN:   -target-abi ilp32f -disable-strictnode-mutation < %s \30; RUN:   | FileCheck -check-prefixes=CHECKIZFHMIN,CHECK32-IZFHMIN,RV32IFZFHMIN %s31; RUN: llc -mtriple=riscv64 -mattr=+zfhmin -verify-machineinstrs \32; RUN:   -target-abi lp64f -disable-strictnode-mutation < %s \33; RUN:   | FileCheck -check-prefixes=CHECKIZFHMIN,CHECK64-IZFHMIN,RV64IFZFHMIN %s34; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs \35; RUN:   -target-abi ilp32 -disable-strictnode-mutation < %s \36; RUN:   | FileCheck -check-prefixes=CHECKIZHINXMIN,CHECK32-IZHINXMIN,RV32IZHINXMIN %s37; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs \38; RUN:   -target-abi lp64 -disable-strictnode-mutation < %s \39; RUN:   | FileCheck -check-prefixes=CHECKIZHINXMIN,CHECK64-IZHINXMIN,RV64IZHINXMIN %s40 41; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin -verify-machineinstrs \42; RUN:   -target-abi ilp32d -disable-strictnode-mutation < %s \43; RUN:   | FileCheck -check-prefixes=CHECKIDZFHMIN,CHECK32-IZFHMIN %s44; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin -verify-machineinstrs \45; RUN:   -target-abi lp64d -disable-strictnode-mutation < %s \46; RUN:   | FileCheck -check-prefixes=CHECKIDZFHMIN,CHECK64-IZFHMIN %s47; RUN: llc -mtriple=riscv32 -mattr=+zdinx,+zhinxmin -verify-machineinstrs \48; RUN:   -target-abi ilp32 -disable-strictnode-mutation < %s \49; RUN:   | FileCheck -check-prefixes=CHECKIZDINXZHINXMIN,CHECK32-IZHINXMIN %s50; RUN: llc -mtriple=riscv64 -mattr=+zdinx,+zhinxmin -verify-machineinstrs \51; RUN:   -target-abi lp64 -disable-strictnode-mutation < %s \52; RUN:   | FileCheck -check-prefixes=CHECKIZDINXZHINXMIN,CHECK64-IZHINXMIN %s53 54; RUN: llc -mtriple=riscv32 -mattr=+d -verify-machineinstrs \55; RUN:   -target-abi ilp32d -disable-strictnode-mutation < %s \56; RUN:   | FileCheck -check-prefixes=CHECK32-D %s57 58; NOTE: The rounding mode metadata does not effect which instruction is59; selected. Dynamic rounding mode is always used for operations that60; support rounding mode.61 62define i16 @fcvt_si_h(half %a) nounwind strictfp {63; CHECK32-IZFH-LABEL: fcvt_si_h:64; CHECK32-IZFH:       # %bb.0:65; CHECK32-IZFH-NEXT:    fcvt.w.h a0, fa0, rtz66; CHECK32-IZFH-NEXT:    ret67;68; CHECK64-IZFH-LABEL: fcvt_si_h:69; CHECK64-IZFH:       # %bb.0:70; CHECK64-IZFH-NEXT:    fcvt.l.h a0, fa0, rtz71; CHECK64-IZFH-NEXT:    ret72;73; CHECK32-IZHINX-LABEL: fcvt_si_h:74; CHECK32-IZHINX:       # %bb.0:75; CHECK32-IZHINX-NEXT:    fcvt.w.h a0, a0, rtz76; CHECK32-IZHINX-NEXT:    ret77;78; CHECK64-IZHINX-LABEL: fcvt_si_h:79; CHECK64-IZHINX:       # %bb.0:80; CHECK64-IZHINX-NEXT:    fcvt.l.h a0, a0, rtz81; CHECK64-IZHINX-NEXT:    ret82;83; CHECK32-IZFHMIN-LABEL: fcvt_si_h:84; CHECK32-IZFHMIN:       # %bb.0:85; CHECK32-IZFHMIN-NEXT:    fcvt.s.h fa5, fa086; CHECK32-IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz87; CHECK32-IZFHMIN-NEXT:    ret88;89; CHECK64-IZFHMIN-LABEL: fcvt_si_h:90; CHECK64-IZFHMIN:       # %bb.0:91; CHECK64-IZFHMIN-NEXT:    fcvt.s.h fa5, fa092; CHECK64-IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz93; CHECK64-IZFHMIN-NEXT:    ret94;95; CHECK32-IZHINXMIN-LABEL: fcvt_si_h:96; CHECK32-IZHINXMIN:       # %bb.0:97; CHECK32-IZHINXMIN-NEXT:    fcvt.s.h a0, a098; CHECK32-IZHINXMIN-NEXT:    fcvt.w.s a0, a0, rtz99; CHECK32-IZHINXMIN-NEXT:    ret100;101; CHECK64-IZHINXMIN-LABEL: fcvt_si_h:102; CHECK64-IZHINXMIN:       # %bb.0:103; CHECK64-IZHINXMIN-NEXT:    fcvt.s.h a0, a0104; CHECK64-IZHINXMIN-NEXT:    fcvt.l.s a0, a0, rtz105; CHECK64-IZHINXMIN-NEXT:    ret106;107; CHECK32-D-LABEL: fcvt_si_h:108; CHECK32-D:       # %bb.0:109; CHECK32-D-NEXT:    addi sp, sp, -16110; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill111; CHECK32-D-NEXT:    fmv.x.w a0, fa0112; CHECK32-D-NEXT:    slli a0, a0, 16113; CHECK32-D-NEXT:    srli a0, a0, 16114; CHECK32-D-NEXT:    fmv.w.x fa0, a0115; CHECK32-D-NEXT:    call __extendhfsf2116; CHECK32-D-NEXT:    fcvt.w.s a0, fa0, rtz117; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload118; CHECK32-D-NEXT:    addi sp, sp, 16119; CHECK32-D-NEXT:    ret120  %1 = call i16 @llvm.experimental.constrained.fptosi.i16.f16(half %a, metadata !"fpexcept.strict")121  ret i16 %1122}123 124define i16 @fcvt_ui_h(half %a) nounwind strictfp {125; CHECK32-IZFH-LABEL: fcvt_ui_h:126; CHECK32-IZFH:       # %bb.0:127; CHECK32-IZFH-NEXT:    fcvt.w.h a0, fa0, rtz128; CHECK32-IZFH-NEXT:    ret129;130; CHECK64-IZFH-LABEL: fcvt_ui_h:131; CHECK64-IZFH:       # %bb.0:132; CHECK64-IZFH-NEXT:    fcvt.l.h a0, fa0, rtz133; CHECK64-IZFH-NEXT:    ret134;135; CHECK32-IZHINX-LABEL: fcvt_ui_h:136; CHECK32-IZHINX:       # %bb.0:137; CHECK32-IZHINX-NEXT:    fcvt.w.h a0, a0, rtz138; CHECK32-IZHINX-NEXT:    ret139;140; CHECK64-IZHINX-LABEL: fcvt_ui_h:141; CHECK64-IZHINX:       # %bb.0:142; CHECK64-IZHINX-NEXT:    fcvt.l.h a0, a0, rtz143; CHECK64-IZHINX-NEXT:    ret144;145; CHECK32-IZFHMIN-LABEL: fcvt_ui_h:146; CHECK32-IZFHMIN:       # %bb.0:147; CHECK32-IZFHMIN-NEXT:    fcvt.s.h fa5, fa0148; CHECK32-IZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz149; CHECK32-IZFHMIN-NEXT:    ret150;151; CHECK64-IZFHMIN-LABEL: fcvt_ui_h:152; CHECK64-IZFHMIN:       # %bb.0:153; CHECK64-IZFHMIN-NEXT:    fcvt.s.h fa5, fa0154; CHECK64-IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz155; CHECK64-IZFHMIN-NEXT:    ret156;157; CHECK32-IZHINXMIN-LABEL: fcvt_ui_h:158; CHECK32-IZHINXMIN:       # %bb.0:159; CHECK32-IZHINXMIN-NEXT:    fcvt.s.h a0, a0160; CHECK32-IZHINXMIN-NEXT:    fcvt.w.s a0, a0, rtz161; CHECK32-IZHINXMIN-NEXT:    ret162;163; CHECK64-IZHINXMIN-LABEL: fcvt_ui_h:164; CHECK64-IZHINXMIN:       # %bb.0:165; CHECK64-IZHINXMIN-NEXT:    fcvt.s.h a0, a0166; CHECK64-IZHINXMIN-NEXT:    fcvt.l.s a0, a0, rtz167; CHECK64-IZHINXMIN-NEXT:    ret168;169; CHECK32-D-LABEL: fcvt_ui_h:170; CHECK32-D:       # %bb.0:171; CHECK32-D-NEXT:    addi sp, sp, -16172; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill173; CHECK32-D-NEXT:    fmv.x.w a0, fa0174; CHECK32-D-NEXT:    slli a0, a0, 16175; CHECK32-D-NEXT:    srli a0, a0, 16176; CHECK32-D-NEXT:    fmv.w.x fa0, a0177; CHECK32-D-NEXT:    call __extendhfsf2178; CHECK32-D-NEXT:    fcvt.w.s a0, fa0, rtz179; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload180; CHECK32-D-NEXT:    addi sp, sp, 16181; CHECK32-D-NEXT:    ret182  %1 = call i16 @llvm.experimental.constrained.fptoui.i16.f16(half %a, metadata !"fpexcept.strict")183  ret i16 %1184}185 186define i32 @fcvt_w_h(half %a) nounwind strictfp {187; CHECKIZFH-LABEL: fcvt_w_h:188; CHECKIZFH:       # %bb.0:189; CHECKIZFH-NEXT:    fcvt.w.h a0, fa0, rtz190; CHECKIZFH-NEXT:    ret191;192; CHECKIZHINX-LABEL: fcvt_w_h:193; CHECKIZHINX:       # %bb.0:194; CHECKIZHINX-NEXT:    fcvt.w.h a0, a0, rtz195; CHECKIZHINX-NEXT:    ret196;197; CHECKIDZFH-LABEL: fcvt_w_h:198; CHECKIDZFH:       # %bb.0:199; CHECKIDZFH-NEXT:    fcvt.w.h a0, fa0, rtz200; CHECKIDZFH-NEXT:    ret201;202; CHECKIZDINXZHINX-LABEL: fcvt_w_h:203; CHECKIZDINXZHINX:       # %bb.0:204; CHECKIZDINXZHINX-NEXT:    fcvt.w.h a0, a0, rtz205; CHECKIZDINXZHINX-NEXT:    ret206;207; CHECKIZFHMIN-LABEL: fcvt_w_h:208; CHECKIZFHMIN:       # %bb.0:209; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0210; CHECKIZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz211; CHECKIZFHMIN-NEXT:    ret212;213; CHECKIZHINXMIN-LABEL: fcvt_w_h:214; CHECKIZHINXMIN:       # %bb.0:215; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0216; CHECKIZHINXMIN-NEXT:    fcvt.w.s a0, a0, rtz217; CHECKIZHINXMIN-NEXT:    ret218;219; CHECKIDZFHMIN-LABEL: fcvt_w_h:220; CHECKIDZFHMIN:       # %bb.0:221; CHECKIDZFHMIN-NEXT:    fcvt.s.h fa5, fa0222; CHECKIDZFHMIN-NEXT:    fcvt.w.s a0, fa5, rtz223; CHECKIDZFHMIN-NEXT:    ret224;225; CHECKIZDINXZHINXMIN-LABEL: fcvt_w_h:226; CHECKIZDINXZHINXMIN:       # %bb.0:227; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0228; CHECKIZDINXZHINXMIN-NEXT:    fcvt.w.s a0, a0, rtz229; CHECKIZDINXZHINXMIN-NEXT:    ret230;231; CHECK32-D-LABEL: fcvt_w_h:232; CHECK32-D:       # %bb.0:233; CHECK32-D-NEXT:    addi sp, sp, -16234; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill235; CHECK32-D-NEXT:    fmv.x.w a0, fa0236; CHECK32-D-NEXT:    slli a0, a0, 16237; CHECK32-D-NEXT:    srli a0, a0, 16238; CHECK32-D-NEXT:    fmv.w.x fa0, a0239; CHECK32-D-NEXT:    call __extendhfsf2240; CHECK32-D-NEXT:    fcvt.w.s a0, fa0, rtz241; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload242; CHECK32-D-NEXT:    addi sp, sp, 16243; CHECK32-D-NEXT:    ret244  %1 = call i32 @llvm.experimental.constrained.fptosi.i32.f16(half %a, metadata !"fpexcept.strict")245  ret i32 %1246}247 248define i32 @fcvt_wu_h(half %a) nounwind strictfp {249; CHECKIZFH-LABEL: fcvt_wu_h:250; CHECKIZFH:       # %bb.0:251; CHECKIZFH-NEXT:    fcvt.wu.h a0, fa0, rtz252; CHECKIZFH-NEXT:    ret253;254; CHECKIZHINX-LABEL: fcvt_wu_h:255; CHECKIZHINX:       # %bb.0:256; CHECKIZHINX-NEXT:    fcvt.wu.h a0, a0, rtz257; CHECKIZHINX-NEXT:    ret258;259; CHECKIDZFH-LABEL: fcvt_wu_h:260; CHECKIDZFH:       # %bb.0:261; CHECKIDZFH-NEXT:    fcvt.wu.h a0, fa0, rtz262; CHECKIDZFH-NEXT:    ret263;264; CHECKIZDINXZHINX-LABEL: fcvt_wu_h:265; CHECKIZDINXZHINX:       # %bb.0:266; CHECKIZDINXZHINX-NEXT:    fcvt.wu.h a0, a0, rtz267; CHECKIZDINXZHINX-NEXT:    ret268;269; CHECKIZFHMIN-LABEL: fcvt_wu_h:270; CHECKIZFHMIN:       # %bb.0:271; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0272; CHECKIZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz273; CHECKIZFHMIN-NEXT:    ret274;275; CHECKIZHINXMIN-LABEL: fcvt_wu_h:276; CHECKIZHINXMIN:       # %bb.0:277; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0278; CHECKIZHINXMIN-NEXT:    fcvt.wu.s a0, a0, rtz279; CHECKIZHINXMIN-NEXT:    ret280;281; CHECKIDZFHMIN-LABEL: fcvt_wu_h:282; CHECKIDZFHMIN:       # %bb.0:283; CHECKIDZFHMIN-NEXT:    fcvt.s.h fa5, fa0284; CHECKIDZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz285; CHECKIDZFHMIN-NEXT:    ret286;287; CHECKIZDINXZHINXMIN-LABEL: fcvt_wu_h:288; CHECKIZDINXZHINXMIN:       # %bb.0:289; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0290; CHECKIZDINXZHINXMIN-NEXT:    fcvt.wu.s a0, a0, rtz291; CHECKIZDINXZHINXMIN-NEXT:    ret292;293; CHECK32-D-LABEL: fcvt_wu_h:294; CHECK32-D:       # %bb.0:295; CHECK32-D-NEXT:    addi sp, sp, -16296; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill297; CHECK32-D-NEXT:    fmv.x.w a0, fa0298; CHECK32-D-NEXT:    slli a0, a0, 16299; CHECK32-D-NEXT:    srli a0, a0, 16300; CHECK32-D-NEXT:    fmv.w.x fa0, a0301; CHECK32-D-NEXT:    call __extendhfsf2302; CHECK32-D-NEXT:    fcvt.wu.s a0, fa0, rtz303; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload304; CHECK32-D-NEXT:    addi sp, sp, 16305; CHECK32-D-NEXT:    ret306  %1 = call i32 @llvm.experimental.constrained.fptoui.i32.f16(half %a, metadata !"fpexcept.strict")307  ret i32 %1308}309 310; Test where the fptoui has multiple uses, one of which causes a sext to be311; inserted on RV64.312; FIXME: We should not have an fcvt.wu.h and an fcvt.lu.h.313define i32 @fcvt_wu_h_multiple_use(half %x, ptr %y) strictfp {314; CHECKIZFH-LABEL: fcvt_wu_h_multiple_use:315; CHECKIZFH:       # %bb.0:316; CHECKIZFH-NEXT:    fcvt.wu.h a0, fa0, rtz317; CHECKIZFH-NEXT:    seqz a1, a0318; CHECKIZFH-NEXT:    add a0, a0, a1319; CHECKIZFH-NEXT:    ret320;321; CHECKIZHINX-LABEL: fcvt_wu_h_multiple_use:322; CHECKIZHINX:       # %bb.0:323; CHECKIZHINX-NEXT:    fcvt.wu.h a0, a0, rtz324; CHECKIZHINX-NEXT:    seqz a1, a0325; CHECKIZHINX-NEXT:    add a0, a0, a1326; CHECKIZHINX-NEXT:    ret327;328; CHECKIDZFH-LABEL: fcvt_wu_h_multiple_use:329; CHECKIDZFH:       # %bb.0:330; CHECKIDZFH-NEXT:    fcvt.wu.h a0, fa0, rtz331; CHECKIDZFH-NEXT:    seqz a1, a0332; CHECKIDZFH-NEXT:    add a0, a0, a1333; CHECKIDZFH-NEXT:    ret334;335; CHECKIZDINXZHINX-LABEL: fcvt_wu_h_multiple_use:336; CHECKIZDINXZHINX:       # %bb.0:337; CHECKIZDINXZHINX-NEXT:    fcvt.wu.h a0, a0, rtz338; CHECKIZDINXZHINX-NEXT:    seqz a1, a0339; CHECKIZDINXZHINX-NEXT:    add a0, a0, a1340; CHECKIZDINXZHINX-NEXT:    ret341;342; CHECKIZFHMIN-LABEL: fcvt_wu_h_multiple_use:343; CHECKIZFHMIN:       # %bb.0:344; CHECKIZFHMIN-NEXT:    fcvt.s.h fa5, fa0345; CHECKIZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz346; CHECKIZFHMIN-NEXT:    seqz a1, a0347; CHECKIZFHMIN-NEXT:    add a0, a0, a1348; CHECKIZFHMIN-NEXT:    ret349;350; CHECKIZHINXMIN-LABEL: fcvt_wu_h_multiple_use:351; CHECKIZHINXMIN:       # %bb.0:352; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a0353; CHECKIZHINXMIN-NEXT:    fcvt.wu.s a0, a0, rtz354; CHECKIZHINXMIN-NEXT:    seqz a1, a0355; CHECKIZHINXMIN-NEXT:    add a0, a0, a1356; CHECKIZHINXMIN-NEXT:    ret357;358; CHECKIDZFHMIN-LABEL: fcvt_wu_h_multiple_use:359; CHECKIDZFHMIN:       # %bb.0:360; CHECKIDZFHMIN-NEXT:    fcvt.s.h fa5, fa0361; CHECKIDZFHMIN-NEXT:    fcvt.wu.s a0, fa5, rtz362; CHECKIDZFHMIN-NEXT:    seqz a1, a0363; CHECKIDZFHMIN-NEXT:    add a0, a0, a1364; CHECKIDZFHMIN-NEXT:    ret365;366; CHECKIZDINXZHINXMIN-LABEL: fcvt_wu_h_multiple_use:367; CHECKIZDINXZHINXMIN:       # %bb.0:368; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a0369; CHECKIZDINXZHINXMIN-NEXT:    fcvt.wu.s a0, a0, rtz370; CHECKIZDINXZHINXMIN-NEXT:    seqz a1, a0371; CHECKIZDINXZHINXMIN-NEXT:    add a0, a0, a1372; CHECKIZDINXZHINXMIN-NEXT:    ret373;374; CHECK32-D-LABEL: fcvt_wu_h_multiple_use:375; CHECK32-D:       # %bb.0:376; CHECK32-D-NEXT:    addi sp, sp, -16377; CHECK32-D-NEXT:    .cfi_def_cfa_offset 16378; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill379; CHECK32-D-NEXT:    .cfi_offset ra, -4380; CHECK32-D-NEXT:    fmv.x.w a0, fa0381; CHECK32-D-NEXT:    slli a0, a0, 16382; CHECK32-D-NEXT:    srli a0, a0, 16383; CHECK32-D-NEXT:    fmv.w.x fa0, a0384; CHECK32-D-NEXT:    call __extendhfsf2385; CHECK32-D-NEXT:    fcvt.wu.s a0, fa0, rtz386; CHECK32-D-NEXT:    seqz a1, a0387; CHECK32-D-NEXT:    add a0, a0, a1388; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload389; CHECK32-D-NEXT:    .cfi_restore ra390; CHECK32-D-NEXT:    addi sp, sp, 16391; CHECK32-D-NEXT:    .cfi_def_cfa_offset 0392; CHECK32-D-NEXT:    ret393  %a = call i32 @llvm.experimental.constrained.fptoui.i32.f16(half %x, metadata !"fpexcept.strict")394  %b = icmp eq i32 %a, 0395  %c = select i1 %b, i32 1, i32 %a396  ret i32 %c397}398 399define i64 @fcvt_l_h(half %a) nounwind strictfp {400; CHECK32-IZFH-LABEL: fcvt_l_h:401; CHECK32-IZFH:       # %bb.0:402; CHECK32-IZFH-NEXT:    addi sp, sp, -16403; CHECK32-IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill404; CHECK32-IZFH-NEXT:    call __fixhfdi405; CHECK32-IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload406; CHECK32-IZFH-NEXT:    addi sp, sp, 16407; CHECK32-IZFH-NEXT:    ret408;409; CHECK64-IZFH-LABEL: fcvt_l_h:410; CHECK64-IZFH:       # %bb.0:411; CHECK64-IZFH-NEXT:    fcvt.l.h a0, fa0, rtz412; CHECK64-IZFH-NEXT:    ret413;414; CHECK32-IZHINX-LABEL: fcvt_l_h:415; CHECK32-IZHINX:       # %bb.0:416; CHECK32-IZHINX-NEXT:    addi sp, sp, -16417; CHECK32-IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill418; CHECK32-IZHINX-NEXT:    call __fixhfdi419; CHECK32-IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload420; CHECK32-IZHINX-NEXT:    addi sp, sp, 16421; CHECK32-IZHINX-NEXT:    ret422;423; CHECK64-IZHINX-LABEL: fcvt_l_h:424; CHECK64-IZHINX:       # %bb.0:425; CHECK64-IZHINX-NEXT:    fcvt.l.h a0, a0, rtz426; CHECK64-IZHINX-NEXT:    ret427;428; CHECK32-IZFHMIN-LABEL: fcvt_l_h:429; CHECK32-IZFHMIN:       # %bb.0:430; CHECK32-IZFHMIN-NEXT:    addi sp, sp, -16431; CHECK32-IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill432; CHECK32-IZFHMIN-NEXT:    call __fixhfdi433; CHECK32-IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload434; CHECK32-IZFHMIN-NEXT:    addi sp, sp, 16435; CHECK32-IZFHMIN-NEXT:    ret436;437; CHECK64-IZFHMIN-LABEL: fcvt_l_h:438; CHECK64-IZFHMIN:       # %bb.0:439; CHECK64-IZFHMIN-NEXT:    fcvt.s.h fa5, fa0440; CHECK64-IZFHMIN-NEXT:    fcvt.l.s a0, fa5, rtz441; CHECK64-IZFHMIN-NEXT:    ret442;443; CHECK32-IZHINXMIN-LABEL: fcvt_l_h:444; CHECK32-IZHINXMIN:       # %bb.0:445; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, -16446; CHECK32-IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill447; CHECK32-IZHINXMIN-NEXT:    call __fixhfdi448; CHECK32-IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload449; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, 16450; CHECK32-IZHINXMIN-NEXT:    ret451;452; CHECK64-IZHINXMIN-LABEL: fcvt_l_h:453; CHECK64-IZHINXMIN:       # %bb.0:454; CHECK64-IZHINXMIN-NEXT:    fcvt.s.h a0, a0455; CHECK64-IZHINXMIN-NEXT:    fcvt.l.s a0, a0, rtz456; CHECK64-IZHINXMIN-NEXT:    ret457;458; CHECK32-D-LABEL: fcvt_l_h:459; CHECK32-D:       # %bb.0:460; CHECK32-D-NEXT:    addi sp, sp, -16461; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill462; CHECK32-D-NEXT:    fmv.x.w a0, fa0463; CHECK32-D-NEXT:    slli a0, a0, 16464; CHECK32-D-NEXT:    srli a0, a0, 16465; CHECK32-D-NEXT:    fmv.w.x fa0, a0466; CHECK32-D-NEXT:    call __extendhfsf2467; CHECK32-D-NEXT:    call __fixsfdi468; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload469; CHECK32-D-NEXT:    addi sp, sp, 16470; CHECK32-D-NEXT:    ret471  %1 = call i64 @llvm.experimental.constrained.fptosi.i64.f16(half %a, metadata !"fpexcept.strict")472  ret i64 %1473}474 475define i64 @fcvt_lu_h(half %a) nounwind strictfp {476; CHECK32-IZFH-LABEL: fcvt_lu_h:477; CHECK32-IZFH:       # %bb.0:478; CHECK32-IZFH-NEXT:    addi sp, sp, -16479; CHECK32-IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill480; CHECK32-IZFH-NEXT:    call __fixunshfdi481; CHECK32-IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload482; CHECK32-IZFH-NEXT:    addi sp, sp, 16483; CHECK32-IZFH-NEXT:    ret484;485; CHECK64-IZFH-LABEL: fcvt_lu_h:486; CHECK64-IZFH:       # %bb.0:487; CHECK64-IZFH-NEXT:    fcvt.lu.h a0, fa0, rtz488; CHECK64-IZFH-NEXT:    ret489;490; CHECK32-IZHINX-LABEL: fcvt_lu_h:491; CHECK32-IZHINX:       # %bb.0:492; CHECK32-IZHINX-NEXT:    addi sp, sp, -16493; CHECK32-IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill494; CHECK32-IZHINX-NEXT:    call __fixunshfdi495; CHECK32-IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload496; CHECK32-IZHINX-NEXT:    addi sp, sp, 16497; CHECK32-IZHINX-NEXT:    ret498;499; CHECK64-IZHINX-LABEL: fcvt_lu_h:500; CHECK64-IZHINX:       # %bb.0:501; CHECK64-IZHINX-NEXT:    fcvt.lu.h a0, a0, rtz502; CHECK64-IZHINX-NEXT:    ret503;504; CHECK32-IZFHMIN-LABEL: fcvt_lu_h:505; CHECK32-IZFHMIN:       # %bb.0:506; CHECK32-IZFHMIN-NEXT:    addi sp, sp, -16507; CHECK32-IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill508; CHECK32-IZFHMIN-NEXT:    call __fixunshfdi509; CHECK32-IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload510; CHECK32-IZFHMIN-NEXT:    addi sp, sp, 16511; CHECK32-IZFHMIN-NEXT:    ret512;513; CHECK64-IZFHMIN-LABEL: fcvt_lu_h:514; CHECK64-IZFHMIN:       # %bb.0:515; CHECK64-IZFHMIN-NEXT:    fcvt.s.h fa5, fa0516; CHECK64-IZFHMIN-NEXT:    fcvt.lu.s a0, fa5, rtz517; CHECK64-IZFHMIN-NEXT:    ret518;519; CHECK32-IZHINXMIN-LABEL: fcvt_lu_h:520; CHECK32-IZHINXMIN:       # %bb.0:521; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, -16522; CHECK32-IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill523; CHECK32-IZHINXMIN-NEXT:    call __fixunshfdi524; CHECK32-IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload525; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, 16526; CHECK32-IZHINXMIN-NEXT:    ret527;528; CHECK64-IZHINXMIN-LABEL: fcvt_lu_h:529; CHECK64-IZHINXMIN:       # %bb.0:530; CHECK64-IZHINXMIN-NEXT:    fcvt.s.h a0, a0531; CHECK64-IZHINXMIN-NEXT:    fcvt.lu.s a0, a0, rtz532; CHECK64-IZHINXMIN-NEXT:    ret533;534; CHECK32-D-LABEL: fcvt_lu_h:535; CHECK32-D:       # %bb.0:536; CHECK32-D-NEXT:    addi sp, sp, -16537; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill538; CHECK32-D-NEXT:    fmv.x.w a0, fa0539; CHECK32-D-NEXT:    slli a0, a0, 16540; CHECK32-D-NEXT:    srli a0, a0, 16541; CHECK32-D-NEXT:    fmv.w.x fa0, a0542; CHECK32-D-NEXT:    call __extendhfsf2543; CHECK32-D-NEXT:    call __fixunssfdi544; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload545; CHECK32-D-NEXT:    addi sp, sp, 16546; CHECK32-D-NEXT:    ret547  %1 = call i64 @llvm.experimental.constrained.fptoui.i64.f16(half %a, metadata !"fpexcept.strict")548  ret i64 %1549}550 551define half @fcvt_h_si(i16 %a) nounwind strictfp {552; CHECK32-IZFH-LABEL: fcvt_h_si:553; CHECK32-IZFH:       # %bb.0:554; CHECK32-IZFH-NEXT:    slli a0, a0, 16555; CHECK32-IZFH-NEXT:    srai a0, a0, 16556; CHECK32-IZFH-NEXT:    fcvt.h.w fa0, a0557; CHECK32-IZFH-NEXT:    ret558;559; CHECK64-IZFH-LABEL: fcvt_h_si:560; CHECK64-IZFH:       # %bb.0:561; CHECK64-IZFH-NEXT:    slli a0, a0, 48562; CHECK64-IZFH-NEXT:    srai a0, a0, 48563; CHECK64-IZFH-NEXT:    fcvt.h.w fa0, a0564; CHECK64-IZFH-NEXT:    ret565;566; CHECK32-IZHINX-LABEL: fcvt_h_si:567; CHECK32-IZHINX:       # %bb.0:568; CHECK32-IZHINX-NEXT:    slli a0, a0, 16569; CHECK32-IZHINX-NEXT:    srai a0, a0, 16570; CHECK32-IZHINX-NEXT:    fcvt.h.w a0, a0571; CHECK32-IZHINX-NEXT:    ret572;573; CHECK64-IZHINX-LABEL: fcvt_h_si:574; CHECK64-IZHINX:       # %bb.0:575; CHECK64-IZHINX-NEXT:    slli a0, a0, 48576; CHECK64-IZHINX-NEXT:    srai a0, a0, 48577; CHECK64-IZHINX-NEXT:    fcvt.h.w a0, a0578; CHECK64-IZHINX-NEXT:    ret579;580; CHECK32-IZFHMIN-LABEL: fcvt_h_si:581; CHECK32-IZFHMIN:       # %bb.0:582; CHECK32-IZFHMIN-NEXT:    slli a0, a0, 16583; CHECK32-IZFHMIN-NEXT:    srai a0, a0, 16584; CHECK32-IZFHMIN-NEXT:    fcvt.s.w fa5, a0585; CHECK32-IZFHMIN-NEXT:    fcvt.h.s fa0, fa5586; CHECK32-IZFHMIN-NEXT:    ret587;588; CHECK64-IZFHMIN-LABEL: fcvt_h_si:589; CHECK64-IZFHMIN:       # %bb.0:590; CHECK64-IZFHMIN-NEXT:    slli a0, a0, 48591; CHECK64-IZFHMIN-NEXT:    srai a0, a0, 48592; CHECK64-IZFHMIN-NEXT:    fcvt.s.w fa5, a0593; CHECK64-IZFHMIN-NEXT:    fcvt.h.s fa0, fa5594; CHECK64-IZFHMIN-NEXT:    ret595;596; CHECK32-IZHINXMIN-LABEL: fcvt_h_si:597; CHECK32-IZHINXMIN:       # %bb.0:598; CHECK32-IZHINXMIN-NEXT:    slli a0, a0, 16599; CHECK32-IZHINXMIN-NEXT:    srai a0, a0, 16600; CHECK32-IZHINXMIN-NEXT:    fcvt.s.w a0, a0601; CHECK32-IZHINXMIN-NEXT:    fcvt.h.s a0, a0602; CHECK32-IZHINXMIN-NEXT:    ret603;604; CHECK64-IZHINXMIN-LABEL: fcvt_h_si:605; CHECK64-IZHINXMIN:       # %bb.0:606; CHECK64-IZHINXMIN-NEXT:    slli a0, a0, 48607; CHECK64-IZHINXMIN-NEXT:    srai a0, a0, 48608; CHECK64-IZHINXMIN-NEXT:    fcvt.s.w a0, a0609; CHECK64-IZHINXMIN-NEXT:    fcvt.h.s a0, a0610; CHECK64-IZHINXMIN-NEXT:    ret611;612; CHECK32-D-LABEL: fcvt_h_si:613; CHECK32-D:       # %bb.0:614; CHECK32-D-NEXT:    addi sp, sp, -16615; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill616; CHECK32-D-NEXT:    slli a0, a0, 16617; CHECK32-D-NEXT:    srai a0, a0, 16618; CHECK32-D-NEXT:    fcvt.s.w fa0, a0619; CHECK32-D-NEXT:    call __truncsfhf2620; CHECK32-D-NEXT:    fmv.x.w a0, fa0621; CHECK32-D-NEXT:    lui a1, 1048560622; CHECK32-D-NEXT:    or a0, a0, a1623; CHECK32-D-NEXT:    fmv.w.x fa0, a0624; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload625; CHECK32-D-NEXT:    addi sp, sp, 16626; CHECK32-D-NEXT:    ret627  %1 = call half @llvm.experimental.constrained.sitofp.f16.i16(i16 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")628  ret half %1629}630 631define half @fcvt_h_si_signext(i16 signext %a) nounwind strictfp {632; CHECKIZFH-LABEL: fcvt_h_si_signext:633; CHECKIZFH:       # %bb.0:634; CHECKIZFH-NEXT:    fcvt.h.w fa0, a0635; CHECKIZFH-NEXT:    ret636;637; CHECKIZHINX-LABEL: fcvt_h_si_signext:638; CHECKIZHINX:       # %bb.0:639; CHECKIZHINX-NEXT:    fcvt.h.w a0, a0640; CHECKIZHINX-NEXT:    ret641;642; CHECKIDZFH-LABEL: fcvt_h_si_signext:643; CHECKIDZFH:       # %bb.0:644; CHECKIDZFH-NEXT:    fcvt.h.w fa0, a0645; CHECKIDZFH-NEXT:    ret646;647; CHECKIZDINXZHINX-LABEL: fcvt_h_si_signext:648; CHECKIZDINXZHINX:       # %bb.0:649; CHECKIZDINXZHINX-NEXT:    fcvt.h.w a0, a0650; CHECKIZDINXZHINX-NEXT:    ret651;652; CHECKIZFHMIN-LABEL: fcvt_h_si_signext:653; CHECKIZFHMIN:       # %bb.0:654; CHECKIZFHMIN-NEXT:    fcvt.s.w fa5, a0655; CHECKIZFHMIN-NEXT:    fcvt.h.s fa0, fa5656; CHECKIZFHMIN-NEXT:    ret657;658; CHECKIZHINXMIN-LABEL: fcvt_h_si_signext:659; CHECKIZHINXMIN:       # %bb.0:660; CHECKIZHINXMIN-NEXT:    fcvt.s.w a0, a0661; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a0662; CHECKIZHINXMIN-NEXT:    ret663;664; CHECKIDZFHMIN-LABEL: fcvt_h_si_signext:665; CHECKIDZFHMIN:       # %bb.0:666; CHECKIDZFHMIN-NEXT:    fcvt.s.w fa5, a0667; CHECKIDZFHMIN-NEXT:    fcvt.h.s fa0, fa5668; CHECKIDZFHMIN-NEXT:    ret669;670; CHECKIZDINXZHINXMIN-LABEL: fcvt_h_si_signext:671; CHECKIZDINXZHINXMIN:       # %bb.0:672; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.w a0, a0673; CHECKIZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0674; CHECKIZDINXZHINXMIN-NEXT:    ret675;676; CHECK32-D-LABEL: fcvt_h_si_signext:677; CHECK32-D:       # %bb.0:678; CHECK32-D-NEXT:    addi sp, sp, -16679; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill680; CHECK32-D-NEXT:    fcvt.s.w fa0, a0681; CHECK32-D-NEXT:    call __truncsfhf2682; CHECK32-D-NEXT:    fmv.x.w a0, fa0683; CHECK32-D-NEXT:    lui a1, 1048560684; CHECK32-D-NEXT:    or a0, a0, a1685; CHECK32-D-NEXT:    fmv.w.x fa0, a0686; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload687; CHECK32-D-NEXT:    addi sp, sp, 16688; CHECK32-D-NEXT:    ret689  %1 = call half @llvm.experimental.constrained.sitofp.f16.i16(i16 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")690  ret half %1691}692 693define half @fcvt_h_ui(i16 %a) nounwind strictfp {694; CHECK32-IZFH-LABEL: fcvt_h_ui:695; CHECK32-IZFH:       # %bb.0:696; CHECK32-IZFH-NEXT:    slli a0, a0, 16697; CHECK32-IZFH-NEXT:    srli a0, a0, 16698; CHECK32-IZFH-NEXT:    fcvt.h.wu fa0, a0699; CHECK32-IZFH-NEXT:    ret700;701; CHECK64-IZFH-LABEL: fcvt_h_ui:702; CHECK64-IZFH:       # %bb.0:703; CHECK64-IZFH-NEXT:    slli a0, a0, 48704; CHECK64-IZFH-NEXT:    srli a0, a0, 48705; CHECK64-IZFH-NEXT:    fcvt.h.wu fa0, a0706; CHECK64-IZFH-NEXT:    ret707;708; CHECK32-IZHINX-LABEL: fcvt_h_ui:709; CHECK32-IZHINX:       # %bb.0:710; CHECK32-IZHINX-NEXT:    slli a0, a0, 16711; CHECK32-IZHINX-NEXT:    srli a0, a0, 16712; CHECK32-IZHINX-NEXT:    fcvt.h.wu a0, a0713; CHECK32-IZHINX-NEXT:    ret714;715; CHECK64-IZHINX-LABEL: fcvt_h_ui:716; CHECK64-IZHINX:       # %bb.0:717; CHECK64-IZHINX-NEXT:    slli a0, a0, 48718; CHECK64-IZHINX-NEXT:    srli a0, a0, 48719; CHECK64-IZHINX-NEXT:    fcvt.h.wu a0, a0720; CHECK64-IZHINX-NEXT:    ret721;722; CHECK32-IZFHMIN-LABEL: fcvt_h_ui:723; CHECK32-IZFHMIN:       # %bb.0:724; CHECK32-IZFHMIN-NEXT:    slli a0, a0, 16725; CHECK32-IZFHMIN-NEXT:    srli a0, a0, 16726; CHECK32-IZFHMIN-NEXT:    fcvt.s.wu fa5, a0727; CHECK32-IZFHMIN-NEXT:    fcvt.h.s fa0, fa5728; CHECK32-IZFHMIN-NEXT:    ret729;730; CHECK64-IZFHMIN-LABEL: fcvt_h_ui:731; CHECK64-IZFHMIN:       # %bb.0:732; CHECK64-IZFHMIN-NEXT:    slli a0, a0, 48733; CHECK64-IZFHMIN-NEXT:    srli a0, a0, 48734; CHECK64-IZFHMIN-NEXT:    fcvt.s.wu fa5, a0735; CHECK64-IZFHMIN-NEXT:    fcvt.h.s fa0, fa5736; CHECK64-IZFHMIN-NEXT:    ret737;738; CHECK32-IZHINXMIN-LABEL: fcvt_h_ui:739; CHECK32-IZHINXMIN:       # %bb.0:740; CHECK32-IZHINXMIN-NEXT:    slli a0, a0, 16741; CHECK32-IZHINXMIN-NEXT:    srli a0, a0, 16742; CHECK32-IZHINXMIN-NEXT:    fcvt.s.wu a0, a0743; CHECK32-IZHINXMIN-NEXT:    fcvt.h.s a0, a0744; CHECK32-IZHINXMIN-NEXT:    ret745;746; CHECK64-IZHINXMIN-LABEL: fcvt_h_ui:747; CHECK64-IZHINXMIN:       # %bb.0:748; CHECK64-IZHINXMIN-NEXT:    slli a0, a0, 48749; CHECK64-IZHINXMIN-NEXT:    srli a0, a0, 48750; CHECK64-IZHINXMIN-NEXT:    fcvt.s.wu a0, a0751; CHECK64-IZHINXMIN-NEXT:    fcvt.h.s a0, a0752; CHECK64-IZHINXMIN-NEXT:    ret753;754; CHECK32-D-LABEL: fcvt_h_ui:755; CHECK32-D:       # %bb.0:756; CHECK32-D-NEXT:    addi sp, sp, -16757; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill758; CHECK32-D-NEXT:    slli a0, a0, 16759; CHECK32-D-NEXT:    srli a0, a0, 16760; CHECK32-D-NEXT:    fcvt.s.wu fa0, a0761; CHECK32-D-NEXT:    call __truncsfhf2762; CHECK32-D-NEXT:    fmv.x.w a0, fa0763; CHECK32-D-NEXT:    lui a1, 1048560764; CHECK32-D-NEXT:    or a0, a0, a1765; CHECK32-D-NEXT:    fmv.w.x fa0, a0766; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload767; CHECK32-D-NEXT:    addi sp, sp, 16768; CHECK32-D-NEXT:    ret769  %1 = call half @llvm.experimental.constrained.uitofp.f16.i16(i16 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")770  ret half %1771}772 773define half @fcvt_h_ui_zeroext(i16 zeroext %a) nounwind strictfp {774; CHECKIZFH-LABEL: fcvt_h_ui_zeroext:775; CHECKIZFH:       # %bb.0:776; CHECKIZFH-NEXT:    fcvt.h.wu fa0, a0777; CHECKIZFH-NEXT:    ret778;779; CHECKIZHINX-LABEL: fcvt_h_ui_zeroext:780; CHECKIZHINX:       # %bb.0:781; CHECKIZHINX-NEXT:    fcvt.h.wu a0, a0782; CHECKIZHINX-NEXT:    ret783;784; CHECKIDZFH-LABEL: fcvt_h_ui_zeroext:785; CHECKIDZFH:       # %bb.0:786; CHECKIDZFH-NEXT:    fcvt.h.wu fa0, a0787; CHECKIDZFH-NEXT:    ret788;789; CHECKIZDINXZHINX-LABEL: fcvt_h_ui_zeroext:790; CHECKIZDINXZHINX:       # %bb.0:791; CHECKIZDINXZHINX-NEXT:    fcvt.h.wu a0, a0792; CHECKIZDINXZHINX-NEXT:    ret793;794; CHECKIZFHMIN-LABEL: fcvt_h_ui_zeroext:795; CHECKIZFHMIN:       # %bb.0:796; CHECKIZFHMIN-NEXT:    fcvt.s.wu fa5, a0797; CHECKIZFHMIN-NEXT:    fcvt.h.s fa0, fa5798; CHECKIZFHMIN-NEXT:    ret799;800; CHECKIZHINXMIN-LABEL: fcvt_h_ui_zeroext:801; CHECKIZHINXMIN:       # %bb.0:802; CHECKIZHINXMIN-NEXT:    fcvt.s.wu a0, a0803; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a0804; CHECKIZHINXMIN-NEXT:    ret805;806; CHECKIDZFHMIN-LABEL: fcvt_h_ui_zeroext:807; CHECKIDZFHMIN:       # %bb.0:808; CHECKIDZFHMIN-NEXT:    fcvt.s.wu fa5, a0809; CHECKIDZFHMIN-NEXT:    fcvt.h.s fa0, fa5810; CHECKIDZFHMIN-NEXT:    ret811;812; CHECKIZDINXZHINXMIN-LABEL: fcvt_h_ui_zeroext:813; CHECKIZDINXZHINXMIN:       # %bb.0:814; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.wu a0, a0815; CHECKIZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0816; CHECKIZDINXZHINXMIN-NEXT:    ret817;818; CHECK32-D-LABEL: fcvt_h_ui_zeroext:819; CHECK32-D:       # %bb.0:820; CHECK32-D-NEXT:    addi sp, sp, -16821; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill822; CHECK32-D-NEXT:    fcvt.s.wu fa0, a0823; CHECK32-D-NEXT:    call __truncsfhf2824; CHECK32-D-NEXT:    fmv.x.w a0, fa0825; CHECK32-D-NEXT:    lui a1, 1048560826; CHECK32-D-NEXT:    or a0, a0, a1827; CHECK32-D-NEXT:    fmv.w.x fa0, a0828; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload829; CHECK32-D-NEXT:    addi sp, sp, 16830; CHECK32-D-NEXT:    ret831  %1 = call half @llvm.experimental.constrained.uitofp.f16.i16(i16 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")832  ret half %1833}834 835define half @fcvt_h_w(i32 %a) nounwind strictfp {836; CHECKIZFH-LABEL: fcvt_h_w:837; CHECKIZFH:       # %bb.0:838; CHECKIZFH-NEXT:    fcvt.h.w fa0, a0839; CHECKIZFH-NEXT:    ret840;841; CHECKIZHINX-LABEL: fcvt_h_w:842; CHECKIZHINX:       # %bb.0:843; CHECKIZHINX-NEXT:    fcvt.h.w a0, a0844; CHECKIZHINX-NEXT:    ret845;846; CHECKIDZFH-LABEL: fcvt_h_w:847; CHECKIDZFH:       # %bb.0:848; CHECKIDZFH-NEXT:    fcvt.h.w fa0, a0849; CHECKIDZFH-NEXT:    ret850;851; CHECKIZDINXZHINX-LABEL: fcvt_h_w:852; CHECKIZDINXZHINX:       # %bb.0:853; CHECKIZDINXZHINX-NEXT:    fcvt.h.w a0, a0854; CHECKIZDINXZHINX-NEXT:    ret855;856; CHECKIZFHMIN-LABEL: fcvt_h_w:857; CHECKIZFHMIN:       # %bb.0:858; CHECKIZFHMIN-NEXT:    fcvt.s.w fa5, a0859; CHECKIZFHMIN-NEXT:    fcvt.h.s fa0, fa5860; CHECKIZFHMIN-NEXT:    ret861;862; CHECKIZHINXMIN-LABEL: fcvt_h_w:863; CHECKIZHINXMIN:       # %bb.0:864; CHECKIZHINXMIN-NEXT:    fcvt.s.w a0, a0865; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a0866; CHECKIZHINXMIN-NEXT:    ret867;868; CHECKIDZFHMIN-LABEL: fcvt_h_w:869; CHECKIDZFHMIN:       # %bb.0:870; CHECKIDZFHMIN-NEXT:    fcvt.s.w fa5, a0871; CHECKIDZFHMIN-NEXT:    fcvt.h.s fa0, fa5872; CHECKIDZFHMIN-NEXT:    ret873;874; CHECKIZDINXZHINXMIN-LABEL: fcvt_h_w:875; CHECKIZDINXZHINXMIN:       # %bb.0:876; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.w a0, a0877; CHECKIZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0878; CHECKIZDINXZHINXMIN-NEXT:    ret879;880; CHECK32-D-LABEL: fcvt_h_w:881; CHECK32-D:       # %bb.0:882; CHECK32-D-NEXT:    addi sp, sp, -16883; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill884; CHECK32-D-NEXT:    fcvt.s.w fa0, a0885; CHECK32-D-NEXT:    call __truncsfhf2886; CHECK32-D-NEXT:    fmv.x.w a0, fa0887; CHECK32-D-NEXT:    lui a1, 1048560888; CHECK32-D-NEXT:    or a0, a0, a1889; CHECK32-D-NEXT:    fmv.w.x fa0, a0890; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload891; CHECK32-D-NEXT:    addi sp, sp, 16892; CHECK32-D-NEXT:    ret893  %1 = call half @llvm.experimental.constrained.sitofp.f16.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")894  ret half %1895}896 897define half @fcvt_h_w_load(ptr %p) nounwind strictfp {898; CHECKIZFH-LABEL: fcvt_h_w_load:899; CHECKIZFH:       # %bb.0:900; CHECKIZFH-NEXT:    lw a0, 0(a0)901; CHECKIZFH-NEXT:    fcvt.h.w fa0, a0902; CHECKIZFH-NEXT:    ret903;904; CHECKIZHINX-LABEL: fcvt_h_w_load:905; CHECKIZHINX:       # %bb.0:906; CHECKIZHINX-NEXT:    lw a0, 0(a0)907; CHECKIZHINX-NEXT:    fcvt.h.w a0, a0908; CHECKIZHINX-NEXT:    ret909;910; CHECKIDZFH-LABEL: fcvt_h_w_load:911; CHECKIDZFH:       # %bb.0:912; CHECKIDZFH-NEXT:    lw a0, 0(a0)913; CHECKIDZFH-NEXT:    fcvt.h.w fa0, a0914; CHECKIDZFH-NEXT:    ret915;916; CHECKIZDINXZHINX-LABEL: fcvt_h_w_load:917; CHECKIZDINXZHINX:       # %bb.0:918; CHECKIZDINXZHINX-NEXT:    lw a0, 0(a0)919; CHECKIZDINXZHINX-NEXT:    fcvt.h.w a0, a0920; CHECKIZDINXZHINX-NEXT:    ret921;922; CHECKIZFHMIN-LABEL: fcvt_h_w_load:923; CHECKIZFHMIN:       # %bb.0:924; CHECKIZFHMIN-NEXT:    lw a0, 0(a0)925; CHECKIZFHMIN-NEXT:    fcvt.s.w fa5, a0926; CHECKIZFHMIN-NEXT:    fcvt.h.s fa0, fa5927; CHECKIZFHMIN-NEXT:    ret928;929; CHECKIZHINXMIN-LABEL: fcvt_h_w_load:930; CHECKIZHINXMIN:       # %bb.0:931; CHECKIZHINXMIN-NEXT:    lw a0, 0(a0)932; CHECKIZHINXMIN-NEXT:    fcvt.s.w a0, a0933; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a0934; CHECKIZHINXMIN-NEXT:    ret935;936; CHECKIDZFHMIN-LABEL: fcvt_h_w_load:937; CHECKIDZFHMIN:       # %bb.0:938; CHECKIDZFHMIN-NEXT:    lw a0, 0(a0)939; CHECKIDZFHMIN-NEXT:    fcvt.s.w fa5, a0940; CHECKIDZFHMIN-NEXT:    fcvt.h.s fa0, fa5941; CHECKIDZFHMIN-NEXT:    ret942;943; CHECKIZDINXZHINXMIN-LABEL: fcvt_h_w_load:944; CHECKIZDINXZHINXMIN:       # %bb.0:945; CHECKIZDINXZHINXMIN-NEXT:    lw a0, 0(a0)946; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.w a0, a0947; CHECKIZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a0948; CHECKIZDINXZHINXMIN-NEXT:    ret949;950; CHECK32-D-LABEL: fcvt_h_w_load:951; CHECK32-D:       # %bb.0:952; CHECK32-D-NEXT:    addi sp, sp, -16953; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill954; CHECK32-D-NEXT:    lw a0, 0(a0)955; CHECK32-D-NEXT:    fcvt.s.w fa0, a0956; CHECK32-D-NEXT:    call __truncsfhf2957; CHECK32-D-NEXT:    fmv.x.w a0, fa0958; CHECK32-D-NEXT:    lui a1, 1048560959; CHECK32-D-NEXT:    or a0, a0, a1960; CHECK32-D-NEXT:    fmv.w.x fa0, a0961; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload962; CHECK32-D-NEXT:    addi sp, sp, 16963; CHECK32-D-NEXT:    ret964  %a = load i32, ptr %p965  %1 = call half @llvm.experimental.constrained.sitofp.f16.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")966  ret half %1967}968 969define half @fcvt_h_wu(i32 %a) nounwind strictfp {970; CHECKIZFH-LABEL: fcvt_h_wu:971; CHECKIZFH:       # %bb.0:972; CHECKIZFH-NEXT:    fcvt.h.wu fa0, a0973; CHECKIZFH-NEXT:    ret974;975; CHECKIZHINX-LABEL: fcvt_h_wu:976; CHECKIZHINX:       # %bb.0:977; CHECKIZHINX-NEXT:    fcvt.h.wu a0, a0978; CHECKIZHINX-NEXT:    ret979;980; CHECKIDZFH-LABEL: fcvt_h_wu:981; CHECKIDZFH:       # %bb.0:982; CHECKIDZFH-NEXT:    fcvt.h.wu fa0, a0983; CHECKIDZFH-NEXT:    ret984;985; CHECKIZDINXZHINX-LABEL: fcvt_h_wu:986; CHECKIZDINXZHINX:       # %bb.0:987; CHECKIZDINXZHINX-NEXT:    fcvt.h.wu a0, a0988; CHECKIZDINXZHINX-NEXT:    ret989;990; CHECKIZFHMIN-LABEL: fcvt_h_wu:991; CHECKIZFHMIN:       # %bb.0:992; CHECKIZFHMIN-NEXT:    fcvt.s.wu fa5, a0993; CHECKIZFHMIN-NEXT:    fcvt.h.s fa0, fa5994; CHECKIZFHMIN-NEXT:    ret995;996; CHECKIZHINXMIN-LABEL: fcvt_h_wu:997; CHECKIZHINXMIN:       # %bb.0:998; CHECKIZHINXMIN-NEXT:    fcvt.s.wu a0, a0999; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a01000; CHECKIZHINXMIN-NEXT:    ret1001;1002; CHECKIDZFHMIN-LABEL: fcvt_h_wu:1003; CHECKIDZFHMIN:       # %bb.0:1004; CHECKIDZFHMIN-NEXT:    fcvt.s.wu fa5, a01005; CHECKIDZFHMIN-NEXT:    fcvt.h.s fa0, fa51006; CHECKIDZFHMIN-NEXT:    ret1007;1008; CHECKIZDINXZHINXMIN-LABEL: fcvt_h_wu:1009; CHECKIZDINXZHINXMIN:       # %bb.0:1010; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.wu a0, a01011; CHECKIZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a01012; CHECKIZDINXZHINXMIN-NEXT:    ret1013;1014; CHECK32-D-LABEL: fcvt_h_wu:1015; CHECK32-D:       # %bb.0:1016; CHECK32-D-NEXT:    addi sp, sp, -161017; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1018; CHECK32-D-NEXT:    fcvt.s.wu fa0, a01019; CHECK32-D-NEXT:    call __truncsfhf21020; CHECK32-D-NEXT:    fmv.x.w a0, fa01021; CHECK32-D-NEXT:    lui a1, 10485601022; CHECK32-D-NEXT:    or a0, a0, a11023; CHECK32-D-NEXT:    fmv.w.x fa0, a01024; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1025; CHECK32-D-NEXT:    addi sp, sp, 161026; CHECK32-D-NEXT:    ret1027  %1 = call half @llvm.experimental.constrained.uitofp.f16.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")1028  ret half %11029}1030 1031define half @fcvt_h_wu_load(ptr %p) nounwind strictfp {1032; CHECKIZFH-LABEL: fcvt_h_wu_load:1033; CHECKIZFH:       # %bb.0:1034; CHECKIZFH-NEXT:    lw a0, 0(a0)1035; CHECKIZFH-NEXT:    fcvt.h.wu fa0, a01036; CHECKIZFH-NEXT:    ret1037;1038; CHECKIZHINX-LABEL: fcvt_h_wu_load:1039; CHECKIZHINX:       # %bb.0:1040; CHECKIZHINX-NEXT:    lw a0, 0(a0)1041; CHECKIZHINX-NEXT:    fcvt.h.wu a0, a01042; CHECKIZHINX-NEXT:    ret1043;1044; CHECKIDZFH-LABEL: fcvt_h_wu_load:1045; CHECKIDZFH:       # %bb.0:1046; CHECKIDZFH-NEXT:    lw a0, 0(a0)1047; CHECKIDZFH-NEXT:    fcvt.h.wu fa0, a01048; CHECKIDZFH-NEXT:    ret1049;1050; CHECKIZDINXZHINX-LABEL: fcvt_h_wu_load:1051; CHECKIZDINXZHINX:       # %bb.0:1052; CHECKIZDINXZHINX-NEXT:    lw a0, 0(a0)1053; CHECKIZDINXZHINX-NEXT:    fcvt.h.wu a0, a01054; CHECKIZDINXZHINX-NEXT:    ret1055;1056; CHECKIZFHMIN-LABEL: fcvt_h_wu_load:1057; CHECKIZFHMIN:       # %bb.0:1058; CHECKIZFHMIN-NEXT:    lw a0, 0(a0)1059; CHECKIZFHMIN-NEXT:    fcvt.s.wu fa5, a01060; CHECKIZFHMIN-NEXT:    fcvt.h.s fa0, fa51061; CHECKIZFHMIN-NEXT:    ret1062;1063; CHECKIZHINXMIN-LABEL: fcvt_h_wu_load:1064; CHECKIZHINXMIN:       # %bb.0:1065; CHECKIZHINXMIN-NEXT:    lw a0, 0(a0)1066; CHECKIZHINXMIN-NEXT:    fcvt.s.wu a0, a01067; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a01068; CHECKIZHINXMIN-NEXT:    ret1069;1070; CHECKIDZFHMIN-LABEL: fcvt_h_wu_load:1071; CHECKIDZFHMIN:       # %bb.0:1072; CHECKIDZFHMIN-NEXT:    lw a0, 0(a0)1073; CHECKIDZFHMIN-NEXT:    fcvt.s.wu fa5, a01074; CHECKIDZFHMIN-NEXT:    fcvt.h.s fa0, fa51075; CHECKIDZFHMIN-NEXT:    ret1076;1077; CHECKIZDINXZHINXMIN-LABEL: fcvt_h_wu_load:1078; CHECKIZDINXZHINXMIN:       # %bb.0:1079; CHECKIZDINXZHINXMIN-NEXT:    lw a0, 0(a0)1080; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.wu a0, a01081; CHECKIZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a01082; CHECKIZDINXZHINXMIN-NEXT:    ret1083;1084; CHECK32-D-LABEL: fcvt_h_wu_load:1085; CHECK32-D:       # %bb.0:1086; CHECK32-D-NEXT:    addi sp, sp, -161087; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1088; CHECK32-D-NEXT:    lw a0, 0(a0)1089; CHECK32-D-NEXT:    fcvt.s.wu fa0, a01090; CHECK32-D-NEXT:    call __truncsfhf21091; CHECK32-D-NEXT:    fmv.x.w a0, fa01092; CHECK32-D-NEXT:    lui a1, 10485601093; CHECK32-D-NEXT:    or a0, a0, a11094; CHECK32-D-NEXT:    fmv.w.x fa0, a01095; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1096; CHECK32-D-NEXT:    addi sp, sp, 161097; CHECK32-D-NEXT:    ret1098  %a = load i32, ptr %p1099  %1 = call half @llvm.experimental.constrained.uitofp.f16.i32(i32 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")1100  ret half %11101}1102 1103define half @fcvt_h_l(i64 %a) nounwind strictfp {1104; CHECK32-IZFH-LABEL: fcvt_h_l:1105; CHECK32-IZFH:       # %bb.0:1106; CHECK32-IZFH-NEXT:    addi sp, sp, -161107; CHECK32-IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1108; CHECK32-IZFH-NEXT:    call __floatdihf1109; CHECK32-IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1110; CHECK32-IZFH-NEXT:    addi sp, sp, 161111; CHECK32-IZFH-NEXT:    ret1112;1113; CHECK64-IZFH-LABEL: fcvt_h_l:1114; CHECK64-IZFH:       # %bb.0:1115; CHECK64-IZFH-NEXT:    fcvt.h.l fa0, a01116; CHECK64-IZFH-NEXT:    ret1117;1118; CHECK32-IZHINX-LABEL: fcvt_h_l:1119; CHECK32-IZHINX:       # %bb.0:1120; CHECK32-IZHINX-NEXT:    addi sp, sp, -161121; CHECK32-IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1122; CHECK32-IZHINX-NEXT:    call __floatdihf1123; CHECK32-IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1124; CHECK32-IZHINX-NEXT:    addi sp, sp, 161125; CHECK32-IZHINX-NEXT:    ret1126;1127; CHECK64-IZHINX-LABEL: fcvt_h_l:1128; CHECK64-IZHINX:       # %bb.0:1129; CHECK64-IZHINX-NEXT:    fcvt.h.l a0, a01130; CHECK64-IZHINX-NEXT:    ret1131;1132; CHECK32-IZFHMIN-LABEL: fcvt_h_l:1133; CHECK32-IZFHMIN:       # %bb.0:1134; CHECK32-IZFHMIN-NEXT:    addi sp, sp, -161135; CHECK32-IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1136; CHECK32-IZFHMIN-NEXT:    call __floatdihf1137; CHECK32-IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1138; CHECK32-IZFHMIN-NEXT:    addi sp, sp, 161139; CHECK32-IZFHMIN-NEXT:    ret1140;1141; CHECK64-IZFHMIN-LABEL: fcvt_h_l:1142; CHECK64-IZFHMIN:       # %bb.0:1143; CHECK64-IZFHMIN-NEXT:    fcvt.s.l fa5, a01144; CHECK64-IZFHMIN-NEXT:    fcvt.h.s fa0, fa51145; CHECK64-IZFHMIN-NEXT:    ret1146;1147; CHECK32-IZHINXMIN-LABEL: fcvt_h_l:1148; CHECK32-IZHINXMIN:       # %bb.0:1149; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, -161150; CHECK32-IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1151; CHECK32-IZHINXMIN-NEXT:    call __floatdihf1152; CHECK32-IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1153; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, 161154; CHECK32-IZHINXMIN-NEXT:    ret1155;1156; CHECK64-IZHINXMIN-LABEL: fcvt_h_l:1157; CHECK64-IZHINXMIN:       # %bb.0:1158; CHECK64-IZHINXMIN-NEXT:    fcvt.s.l a0, a01159; CHECK64-IZHINXMIN-NEXT:    fcvt.h.s a0, a01160; CHECK64-IZHINXMIN-NEXT:    ret1161;1162; CHECK32-D-LABEL: fcvt_h_l:1163; CHECK32-D:       # %bb.0:1164; CHECK32-D-NEXT:    addi sp, sp, -161165; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1166; CHECK32-D-NEXT:    call __floatdisf1167; CHECK32-D-NEXT:    call __truncsfhf21168; CHECK32-D-NEXT:    fmv.x.w a0, fa01169; CHECK32-D-NEXT:    lui a1, 10485601170; CHECK32-D-NEXT:    or a0, a0, a11171; CHECK32-D-NEXT:    fmv.w.x fa0, a01172; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1173; CHECK32-D-NEXT:    addi sp, sp, 161174; CHECK32-D-NEXT:    ret1175  %1 = call half @llvm.experimental.constrained.sitofp.f16.i64(i64 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")1176  ret half %11177}1178 1179define half @fcvt_h_lu(i64 %a) nounwind strictfp {1180; CHECK32-IZFH-LABEL: fcvt_h_lu:1181; CHECK32-IZFH:       # %bb.0:1182; CHECK32-IZFH-NEXT:    addi sp, sp, -161183; CHECK32-IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1184; CHECK32-IZFH-NEXT:    call __floatundihf1185; CHECK32-IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1186; CHECK32-IZFH-NEXT:    addi sp, sp, 161187; CHECK32-IZFH-NEXT:    ret1188;1189; CHECK64-IZFH-LABEL: fcvt_h_lu:1190; CHECK64-IZFH:       # %bb.0:1191; CHECK64-IZFH-NEXT:    fcvt.h.lu fa0, a01192; CHECK64-IZFH-NEXT:    ret1193;1194; CHECK32-IZHINX-LABEL: fcvt_h_lu:1195; CHECK32-IZHINX:       # %bb.0:1196; CHECK32-IZHINX-NEXT:    addi sp, sp, -161197; CHECK32-IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1198; CHECK32-IZHINX-NEXT:    call __floatundihf1199; CHECK32-IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1200; CHECK32-IZHINX-NEXT:    addi sp, sp, 161201; CHECK32-IZHINX-NEXT:    ret1202;1203; CHECK64-IZHINX-LABEL: fcvt_h_lu:1204; CHECK64-IZHINX:       # %bb.0:1205; CHECK64-IZHINX-NEXT:    fcvt.h.lu a0, a01206; CHECK64-IZHINX-NEXT:    ret1207;1208; CHECK32-IZFHMIN-LABEL: fcvt_h_lu:1209; CHECK32-IZFHMIN:       # %bb.0:1210; CHECK32-IZFHMIN-NEXT:    addi sp, sp, -161211; CHECK32-IZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1212; CHECK32-IZFHMIN-NEXT:    call __floatundihf1213; CHECK32-IZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1214; CHECK32-IZFHMIN-NEXT:    addi sp, sp, 161215; CHECK32-IZFHMIN-NEXT:    ret1216;1217; CHECK64-IZFHMIN-LABEL: fcvt_h_lu:1218; CHECK64-IZFHMIN:       # %bb.0:1219; CHECK64-IZFHMIN-NEXT:    fcvt.s.lu fa5, a01220; CHECK64-IZFHMIN-NEXT:    fcvt.h.s fa0, fa51221; CHECK64-IZFHMIN-NEXT:    ret1222;1223; CHECK32-IZHINXMIN-LABEL: fcvt_h_lu:1224; CHECK32-IZHINXMIN:       # %bb.0:1225; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, -161226; CHECK32-IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1227; CHECK32-IZHINXMIN-NEXT:    call __floatundihf1228; CHECK32-IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1229; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, 161230; CHECK32-IZHINXMIN-NEXT:    ret1231;1232; CHECK64-IZHINXMIN-LABEL: fcvt_h_lu:1233; CHECK64-IZHINXMIN:       # %bb.0:1234; CHECK64-IZHINXMIN-NEXT:    fcvt.s.lu a0, a01235; CHECK64-IZHINXMIN-NEXT:    fcvt.h.s a0, a01236; CHECK64-IZHINXMIN-NEXT:    ret1237;1238; CHECK32-D-LABEL: fcvt_h_lu:1239; CHECK32-D:       # %bb.0:1240; CHECK32-D-NEXT:    addi sp, sp, -161241; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1242; CHECK32-D-NEXT:    call __floatundisf1243; CHECK32-D-NEXT:    call __truncsfhf21244; CHECK32-D-NEXT:    fmv.x.w a0, fa01245; CHECK32-D-NEXT:    lui a1, 10485601246; CHECK32-D-NEXT:    or a0, a0, a11247; CHECK32-D-NEXT:    fmv.w.x fa0, a01248; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1249; CHECK32-D-NEXT:    addi sp, sp, 161250; CHECK32-D-NEXT:    ret1251  %1 = call half @llvm.experimental.constrained.uitofp.f16.i64(i64 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")1252  ret half %11253}1254 1255define half @fcvt_h_s(float %a) nounwind strictfp {1256; CHECKIZFH-LABEL: fcvt_h_s:1257; CHECKIZFH:       # %bb.0:1258; CHECKIZFH-NEXT:    fcvt.h.s fa0, fa01259; CHECKIZFH-NEXT:    ret1260;1261; CHECKIZHINX-LABEL: fcvt_h_s:1262; CHECKIZHINX:       # %bb.0:1263; CHECKIZHINX-NEXT:    fcvt.h.s a0, a01264; CHECKIZHINX-NEXT:    ret1265;1266; CHECKIDZFH-LABEL: fcvt_h_s:1267; CHECKIDZFH:       # %bb.0:1268; CHECKIDZFH-NEXT:    fcvt.h.s fa0, fa01269; CHECKIDZFH-NEXT:    ret1270;1271; CHECKIZDINXZHINX-LABEL: fcvt_h_s:1272; CHECKIZDINXZHINX:       # %bb.0:1273; CHECKIZDINXZHINX-NEXT:    fcvt.h.s a0, a01274; CHECKIZDINXZHINX-NEXT:    ret1275;1276; CHECKIZFHMIN-LABEL: fcvt_h_s:1277; CHECKIZFHMIN:       # %bb.0:1278; CHECKIZFHMIN-NEXT:    fcvt.h.s fa0, fa01279; CHECKIZFHMIN-NEXT:    ret1280;1281; CHECKIZHINXMIN-LABEL: fcvt_h_s:1282; CHECKIZHINXMIN:       # %bb.0:1283; CHECKIZHINXMIN-NEXT:    fcvt.h.s a0, a01284; CHECKIZHINXMIN-NEXT:    ret1285;1286; CHECKIDZFHMIN-LABEL: fcvt_h_s:1287; CHECKIDZFHMIN:       # %bb.0:1288; CHECKIDZFHMIN-NEXT:    fcvt.h.s fa0, fa01289; CHECKIDZFHMIN-NEXT:    ret1290;1291; CHECKIZDINXZHINXMIN-LABEL: fcvt_h_s:1292; CHECKIZDINXZHINXMIN:       # %bb.0:1293; CHECKIZDINXZHINXMIN-NEXT:    fcvt.h.s a0, a01294; CHECKIZDINXZHINXMIN-NEXT:    ret1295;1296; CHECK32-D-LABEL: fcvt_h_s:1297; CHECK32-D:       # %bb.0:1298; CHECK32-D-NEXT:    addi sp, sp, -161299; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1300; CHECK32-D-NEXT:    call __truncsfhf21301; CHECK32-D-NEXT:    fmv.x.w a0, fa01302; CHECK32-D-NEXT:    lui a1, 10485601303; CHECK32-D-NEXT:    or a0, a0, a11304; CHECK32-D-NEXT:    fmv.w.x fa0, a01305; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1306; CHECK32-D-NEXT:    addi sp, sp, 161307; CHECK32-D-NEXT:    ret1308  %1 = call half @llvm.experimental.constrained.fptrunc.f16.f32(float %a, metadata !"round.dynamic", metadata !"fpexcept.strict")1309  ret half %11310}1311 1312define float @fcvt_s_h(half %a) nounwind strictfp {1313; CHECKIZFH-LABEL: fcvt_s_h:1314; CHECKIZFH:       # %bb.0:1315; CHECKIZFH-NEXT:    fcvt.s.h fa0, fa01316; CHECKIZFH-NEXT:    ret1317;1318; CHECKIZHINX-LABEL: fcvt_s_h:1319; CHECKIZHINX:       # %bb.0:1320; CHECKIZHINX-NEXT:    fcvt.s.h a0, a01321; CHECKIZHINX-NEXT:    ret1322;1323; CHECKIDZFH-LABEL: fcvt_s_h:1324; CHECKIDZFH:       # %bb.0:1325; CHECKIDZFH-NEXT:    fcvt.s.h fa0, fa01326; CHECKIDZFH-NEXT:    ret1327;1328; CHECKIZDINXZHINX-LABEL: fcvt_s_h:1329; CHECKIZDINXZHINX:       # %bb.0:1330; CHECKIZDINXZHINX-NEXT:    fcvt.s.h a0, a01331; CHECKIZDINXZHINX-NEXT:    ret1332;1333; CHECKIZFHMIN-LABEL: fcvt_s_h:1334; CHECKIZFHMIN:       # %bb.0:1335; CHECKIZFHMIN-NEXT:    fcvt.s.h fa0, fa01336; CHECKIZFHMIN-NEXT:    ret1337;1338; CHECKIZHINXMIN-LABEL: fcvt_s_h:1339; CHECKIZHINXMIN:       # %bb.0:1340; CHECKIZHINXMIN-NEXT:    fcvt.s.h a0, a01341; CHECKIZHINXMIN-NEXT:    ret1342;1343; CHECKIDZFHMIN-LABEL: fcvt_s_h:1344; CHECKIDZFHMIN:       # %bb.0:1345; CHECKIDZFHMIN-NEXT:    fcvt.s.h fa0, fa01346; CHECKIDZFHMIN-NEXT:    ret1347;1348; CHECKIZDINXZHINXMIN-LABEL: fcvt_s_h:1349; CHECKIZDINXZHINXMIN:       # %bb.0:1350; CHECKIZDINXZHINXMIN-NEXT:    fcvt.s.h a0, a01351; CHECKIZDINXZHINXMIN-NEXT:    ret1352;1353; CHECK32-D-LABEL: fcvt_s_h:1354; CHECK32-D:       # %bb.0:1355; CHECK32-D-NEXT:    addi sp, sp, -161356; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1357; CHECK32-D-NEXT:    fmv.x.w a0, fa01358; CHECK32-D-NEXT:    slli a0, a0, 161359; CHECK32-D-NEXT:    srli a0, a0, 161360; CHECK32-D-NEXT:    fmv.w.x fa0, a01361; CHECK32-D-NEXT:    call __extendhfsf21362; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1363; CHECK32-D-NEXT:    addi sp, sp, 161364; CHECK32-D-NEXT:    ret1365  %1 = call float @llvm.experimental.constrained.fpext.f32.f16(half %a, metadata !"fpexcept.strict")1366  ret float %11367}1368 1369define half @fcvt_h_d(double %a) nounwind strictfp {1370; RV32IZFH-LABEL: fcvt_h_d:1371; RV32IZFH:       # %bb.0:1372; RV32IZFH-NEXT:    addi sp, sp, -161373; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1374; RV32IZFH-NEXT:    call __truncdfhf21375; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1376; RV32IZFH-NEXT:    addi sp, sp, 161377; RV32IZFH-NEXT:    ret1378;1379; RV64IZFH-LABEL: fcvt_h_d:1380; RV64IZFH:       # %bb.0:1381; RV64IZFH-NEXT:    addi sp, sp, -161382; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1383; RV64IZFH-NEXT:    call __truncdfhf21384; RV64IZFH-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1385; RV64IZFH-NEXT:    addi sp, sp, 161386; RV64IZFH-NEXT:    ret1387;1388; RV32IZHINX-LABEL: fcvt_h_d:1389; RV32IZHINX:       # %bb.0:1390; RV32IZHINX-NEXT:    addi sp, sp, -161391; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1392; RV32IZHINX-NEXT:    call __truncdfhf21393; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1394; RV32IZHINX-NEXT:    addi sp, sp, 161395; RV32IZHINX-NEXT:    ret1396;1397; RV64IZHINX-LABEL: fcvt_h_d:1398; RV64IZHINX:       # %bb.0:1399; RV64IZHINX-NEXT:    addi sp, sp, -161400; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1401; RV64IZHINX-NEXT:    call __truncdfhf21402; RV64IZHINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1403; RV64IZHINX-NEXT:    addi sp, sp, 161404; RV64IZHINX-NEXT:    ret1405;1406; CHECKIDZFH-LABEL: fcvt_h_d:1407; CHECKIDZFH:       # %bb.0:1408; CHECKIDZFH-NEXT:    fcvt.h.d fa0, fa01409; CHECKIDZFH-NEXT:    ret1410;1411; CHECKIZDINXZHINX-LABEL: fcvt_h_d:1412; CHECKIZDINXZHINX:       # %bb.0:1413; CHECKIZDINXZHINX-NEXT:    fcvt.h.d a0, a01414; CHECKIZDINXZHINX-NEXT:    ret1415;1416; RV32IFZFHMIN-LABEL: fcvt_h_d:1417; RV32IFZFHMIN:       # %bb.0:1418; RV32IFZFHMIN-NEXT:    addi sp, sp, -161419; RV32IFZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1420; RV32IFZFHMIN-NEXT:    call __truncdfhf21421; RV32IFZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1422; RV32IFZFHMIN-NEXT:    addi sp, sp, 161423; RV32IFZFHMIN-NEXT:    ret1424;1425; RV64IFZFHMIN-LABEL: fcvt_h_d:1426; RV64IFZFHMIN:       # %bb.0:1427; RV64IFZFHMIN-NEXT:    addi sp, sp, -161428; RV64IFZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1429; RV64IFZFHMIN-NEXT:    call __truncdfhf21430; RV64IFZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1431; RV64IFZFHMIN-NEXT:    addi sp, sp, 161432; RV64IFZFHMIN-NEXT:    ret1433;1434; RV32IZHINXMIN-LABEL: fcvt_h_d:1435; RV32IZHINXMIN:       # %bb.0:1436; RV32IZHINXMIN-NEXT:    addi sp, sp, -161437; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1438; RV32IZHINXMIN-NEXT:    call __truncdfhf21439; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1440; RV32IZHINXMIN-NEXT:    addi sp, sp, 161441; RV32IZHINXMIN-NEXT:    ret1442;1443; RV64IZHINXMIN-LABEL: fcvt_h_d:1444; RV64IZHINXMIN:       # %bb.0:1445; RV64IZHINXMIN-NEXT:    addi sp, sp, -161446; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1447; RV64IZHINXMIN-NEXT:    call __truncdfhf21448; RV64IZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1449; RV64IZHINXMIN-NEXT:    addi sp, sp, 161450; RV64IZHINXMIN-NEXT:    ret1451;1452; CHECKIDZFHMIN-LABEL: fcvt_h_d:1453; CHECKIDZFHMIN:       # %bb.0:1454; CHECKIDZFHMIN-NEXT:    fcvt.h.d fa0, fa01455; CHECKIDZFHMIN-NEXT:    ret1456;1457; CHECKIZDINXZHINXMIN-LABEL: fcvt_h_d:1458; CHECKIZDINXZHINXMIN:       # %bb.0:1459; CHECKIZDINXZHINXMIN-NEXT:    fcvt.h.d a0, a01460; CHECKIZDINXZHINXMIN-NEXT:    ret1461;1462; CHECK32-D-LABEL: fcvt_h_d:1463; CHECK32-D:       # %bb.0:1464; CHECK32-D-NEXT:    addi sp, sp, -161465; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1466; CHECK32-D-NEXT:    call __truncdfhf21467; CHECK32-D-NEXT:    fmv.x.w a0, fa01468; CHECK32-D-NEXT:    lui a1, 10485601469; CHECK32-D-NEXT:    or a0, a0, a11470; CHECK32-D-NEXT:    fmv.w.x fa0, a01471; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1472; CHECK32-D-NEXT:    addi sp, sp, 161473; CHECK32-D-NEXT:    ret1474  %1 = call half @llvm.experimental.constrained.fptrunc.f16.f64(double %a, metadata !"round.dynamic", metadata !"fpexcept.strict")1475  ret half %11476}1477 1478define double @fcvt_d_h(half %a) nounwind strictfp {1479; RV32IZFH-LABEL: fcvt_d_h:1480; RV32IZFH:       # %bb.0:1481; RV32IZFH-NEXT:    addi sp, sp, -161482; RV32IZFH-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1483; RV32IZFH-NEXT:    fcvt.s.h fa0, fa01484; RV32IZFH-NEXT:    call __extendsfdf21485; RV32IZFH-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1486; RV32IZFH-NEXT:    addi sp, sp, 161487; RV32IZFH-NEXT:    ret1488;1489; RV64IZFH-LABEL: fcvt_d_h:1490; RV64IZFH:       # %bb.0:1491; RV64IZFH-NEXT:    addi sp, sp, -161492; RV64IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1493; RV64IZFH-NEXT:    fcvt.s.h fa0, fa01494; RV64IZFH-NEXT:    call __extendsfdf21495; RV64IZFH-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1496; RV64IZFH-NEXT:    addi sp, sp, 161497; RV64IZFH-NEXT:    ret1498;1499; RV32IZHINX-LABEL: fcvt_d_h:1500; RV32IZHINX:       # %bb.0:1501; RV32IZHINX-NEXT:    addi sp, sp, -161502; RV32IZHINX-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1503; RV32IZHINX-NEXT:    fcvt.s.h a0, a01504; RV32IZHINX-NEXT:    call __extendsfdf21505; RV32IZHINX-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1506; RV32IZHINX-NEXT:    addi sp, sp, 161507; RV32IZHINX-NEXT:    ret1508;1509; RV64IZHINX-LABEL: fcvt_d_h:1510; RV64IZHINX:       # %bb.0:1511; RV64IZHINX-NEXT:    addi sp, sp, -161512; RV64IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1513; RV64IZHINX-NEXT:    fcvt.s.h a0, a01514; RV64IZHINX-NEXT:    call __extendsfdf21515; RV64IZHINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1516; RV64IZHINX-NEXT:    addi sp, sp, 161517; RV64IZHINX-NEXT:    ret1518;1519; CHECKIDZFH-LABEL: fcvt_d_h:1520; CHECKIDZFH:       # %bb.0:1521; CHECKIDZFH-NEXT:    fcvt.d.h fa0, fa01522; CHECKIDZFH-NEXT:    ret1523;1524; CHECKIZDINXZHINX-LABEL: fcvt_d_h:1525; CHECKIZDINXZHINX:       # %bb.0:1526; CHECKIZDINXZHINX-NEXT:    fcvt.d.h a0, a01527; CHECKIZDINXZHINX-NEXT:    ret1528;1529; RV32IFZFHMIN-LABEL: fcvt_d_h:1530; RV32IFZFHMIN:       # %bb.0:1531; RV32IFZFHMIN-NEXT:    addi sp, sp, -161532; RV32IFZFHMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1533; RV32IFZFHMIN-NEXT:    fcvt.s.h fa0, fa01534; RV32IFZFHMIN-NEXT:    call __extendsfdf21535; RV32IFZFHMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1536; RV32IFZFHMIN-NEXT:    addi sp, sp, 161537; RV32IFZFHMIN-NEXT:    ret1538;1539; RV64IFZFHMIN-LABEL: fcvt_d_h:1540; RV64IFZFHMIN:       # %bb.0:1541; RV64IFZFHMIN-NEXT:    addi sp, sp, -161542; RV64IFZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1543; RV64IFZFHMIN-NEXT:    fcvt.s.h fa0, fa01544; RV64IFZFHMIN-NEXT:    call __extendsfdf21545; RV64IFZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1546; RV64IFZFHMIN-NEXT:    addi sp, sp, 161547; RV64IFZFHMIN-NEXT:    ret1548;1549; RV32IZHINXMIN-LABEL: fcvt_d_h:1550; RV32IZHINXMIN:       # %bb.0:1551; RV32IZHINXMIN-NEXT:    addi sp, sp, -161552; RV32IZHINXMIN-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1553; RV32IZHINXMIN-NEXT:    fcvt.s.h a0, a01554; RV32IZHINXMIN-NEXT:    call __extendsfdf21555; RV32IZHINXMIN-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1556; RV32IZHINXMIN-NEXT:    addi sp, sp, 161557; RV32IZHINXMIN-NEXT:    ret1558;1559; RV64IZHINXMIN-LABEL: fcvt_d_h:1560; RV64IZHINXMIN:       # %bb.0:1561; RV64IZHINXMIN-NEXT:    addi sp, sp, -161562; RV64IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1563; RV64IZHINXMIN-NEXT:    fcvt.s.h a0, a01564; RV64IZHINXMIN-NEXT:    call __extendsfdf21565; RV64IZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1566; RV64IZHINXMIN-NEXT:    addi sp, sp, 161567; RV64IZHINXMIN-NEXT:    ret1568;1569; CHECKIDZFHMIN-LABEL: fcvt_d_h:1570; CHECKIDZFHMIN:       # %bb.0:1571; CHECKIDZFHMIN-NEXT:    fcvt.d.h fa0, fa01572; CHECKIDZFHMIN-NEXT:    ret1573;1574; CHECKIZDINXZHINXMIN-LABEL: fcvt_d_h:1575; CHECKIZDINXZHINXMIN:       # %bb.0:1576; CHECKIZDINXZHINXMIN-NEXT:    fcvt.d.h a0, a01577; CHECKIZDINXZHINXMIN-NEXT:    ret1578;1579; CHECK32-D-LABEL: fcvt_d_h:1580; CHECK32-D:       # %bb.0:1581; CHECK32-D-NEXT:    addi sp, sp, -161582; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1583; CHECK32-D-NEXT:    fmv.x.w a0, fa01584; CHECK32-D-NEXT:    slli a0, a0, 161585; CHECK32-D-NEXT:    srli a0, a0, 161586; CHECK32-D-NEXT:    fmv.w.x fa0, a01587; CHECK32-D-NEXT:    call __extendhfsf21588; CHECK32-D-NEXT:    fcvt.d.s fa0, fa01589; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1590; CHECK32-D-NEXT:    addi sp, sp, 161591; CHECK32-D-NEXT:    ret1592  %1 = call double @llvm.experimental.constrained.fpext.f64.f16(half %a, metadata !"fpexcept.strict")1593  ret double %11594}1595 1596; Make sure we select W version of addi on RV64.1597define signext i32 @fcvt_h_w_demanded_bits(i32 signext %0, ptr %1) strictfp {1598; CHECK32-IZFH-LABEL: fcvt_h_w_demanded_bits:1599; CHECK32-IZFH:       # %bb.0:1600; CHECK32-IZFH-NEXT:    addi a0, a0, 11601; CHECK32-IZFH-NEXT:    fcvt.h.w fa5, a01602; CHECK32-IZFH-NEXT:    fsh fa5, 0(a1)1603; CHECK32-IZFH-NEXT:    ret1604;1605; CHECK64-IZFH-LABEL: fcvt_h_w_demanded_bits:1606; CHECK64-IZFH:       # %bb.0:1607; CHECK64-IZFH-NEXT:    addiw a0, a0, 11608; CHECK64-IZFH-NEXT:    fcvt.h.w fa5, a01609; CHECK64-IZFH-NEXT:    fsh fa5, 0(a1)1610; CHECK64-IZFH-NEXT:    ret1611;1612; CHECK32-IZHINX-LABEL: fcvt_h_w_demanded_bits:1613; CHECK32-IZHINX:       # %bb.0:1614; CHECK32-IZHINX-NEXT:    addi a0, a0, 11615; CHECK32-IZHINX-NEXT:    fcvt.h.w a2, a01616; CHECK32-IZHINX-NEXT:    sh a2, 0(a1)1617; CHECK32-IZHINX-NEXT:    ret1618;1619; CHECK64-IZHINX-LABEL: fcvt_h_w_demanded_bits:1620; CHECK64-IZHINX:       # %bb.0:1621; CHECK64-IZHINX-NEXT:    addiw a0, a0, 11622; CHECK64-IZHINX-NEXT:    fcvt.h.w a2, a01623; CHECK64-IZHINX-NEXT:    sh a2, 0(a1)1624; CHECK64-IZHINX-NEXT:    ret1625;1626; CHECK32-IZFHMIN-LABEL: fcvt_h_w_demanded_bits:1627; CHECK32-IZFHMIN:       # %bb.0:1628; CHECK32-IZFHMIN-NEXT:    addi a0, a0, 11629; CHECK32-IZFHMIN-NEXT:    fcvt.s.w fa5, a01630; CHECK32-IZFHMIN-NEXT:    fcvt.h.s fa5, fa51631; CHECK32-IZFHMIN-NEXT:    fsh fa5, 0(a1)1632; CHECK32-IZFHMIN-NEXT:    ret1633;1634; CHECK64-IZFHMIN-LABEL: fcvt_h_w_demanded_bits:1635; CHECK64-IZFHMIN:       # %bb.0:1636; CHECK64-IZFHMIN-NEXT:    addiw a0, a0, 11637; CHECK64-IZFHMIN-NEXT:    fcvt.s.w fa5, a01638; CHECK64-IZFHMIN-NEXT:    fcvt.h.s fa5, fa51639; CHECK64-IZFHMIN-NEXT:    fsh fa5, 0(a1)1640; CHECK64-IZFHMIN-NEXT:    ret1641;1642; CHECK32-IZHINXMIN-LABEL: fcvt_h_w_demanded_bits:1643; CHECK32-IZHINXMIN:       # %bb.0:1644; CHECK32-IZHINXMIN-NEXT:    addi a0, a0, 11645; CHECK32-IZHINXMIN-NEXT:    fcvt.s.w a2, a01646; CHECK32-IZHINXMIN-NEXT:    fcvt.h.s a2, a21647; CHECK32-IZHINXMIN-NEXT:    sh a2, 0(a1)1648; CHECK32-IZHINXMIN-NEXT:    ret1649;1650; CHECK64-IZHINXMIN-LABEL: fcvt_h_w_demanded_bits:1651; CHECK64-IZHINXMIN:       # %bb.0:1652; CHECK64-IZHINXMIN-NEXT:    addiw a0, a0, 11653; CHECK64-IZHINXMIN-NEXT:    fcvt.s.w a2, a01654; CHECK64-IZHINXMIN-NEXT:    fcvt.h.s a2, a21655; CHECK64-IZHINXMIN-NEXT:    sh a2, 0(a1)1656; CHECK64-IZHINXMIN-NEXT:    ret1657;1658; CHECK32-D-LABEL: fcvt_h_w_demanded_bits:1659; CHECK32-D:       # %bb.0:1660; CHECK32-D-NEXT:    addi sp, sp, -161661; CHECK32-D-NEXT:    .cfi_def_cfa_offset 161662; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1663; CHECK32-D-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1664; CHECK32-D-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1665; CHECK32-D-NEXT:    .cfi_offset ra, -41666; CHECK32-D-NEXT:    .cfi_offset s0, -81667; CHECK32-D-NEXT:    .cfi_offset s1, -121668; CHECK32-D-NEXT:    mv s0, a11669; CHECK32-D-NEXT:    addi s1, a0, 11670; CHECK32-D-NEXT:    fcvt.s.w fa0, s11671; CHECK32-D-NEXT:    call __truncsfhf21672; CHECK32-D-NEXT:    fmv.x.w a0, fa01673; CHECK32-D-NEXT:    sh a0, 0(s0)1674; CHECK32-D-NEXT:    mv a0, s11675; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1676; CHECK32-D-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1677; CHECK32-D-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1678; CHECK32-D-NEXT:    .cfi_restore ra1679; CHECK32-D-NEXT:    .cfi_restore s01680; CHECK32-D-NEXT:    .cfi_restore s11681; CHECK32-D-NEXT:    addi sp, sp, 161682; CHECK32-D-NEXT:    .cfi_def_cfa_offset 01683; CHECK32-D-NEXT:    ret1684  %3 = add i32 %0, 11685  %4 = call half @llvm.experimental.constrained.sitofp.f16.i32(i32 %3, metadata !"round.dynamic", metadata !"fpexcept.strict")1686  store half %4, ptr %1, align 21687  ret i32 %31688}1689 1690; Make sure we select W version of addi on RV64.1691define signext i32 @fcvt_h_wu_demanded_bits(i32 signext %0, ptr %1) strictfp {1692; CHECK32-IZFH-LABEL: fcvt_h_wu_demanded_bits:1693; CHECK32-IZFH:       # %bb.0:1694; CHECK32-IZFH-NEXT:    addi a0, a0, 11695; CHECK32-IZFH-NEXT:    fcvt.h.wu fa5, a01696; CHECK32-IZFH-NEXT:    fsh fa5, 0(a1)1697; CHECK32-IZFH-NEXT:    ret1698;1699; CHECK64-IZFH-LABEL: fcvt_h_wu_demanded_bits:1700; CHECK64-IZFH:       # %bb.0:1701; CHECK64-IZFH-NEXT:    addiw a0, a0, 11702; CHECK64-IZFH-NEXT:    fcvt.h.wu fa5, a01703; CHECK64-IZFH-NEXT:    fsh fa5, 0(a1)1704; CHECK64-IZFH-NEXT:    ret1705;1706; CHECK32-IZHINX-LABEL: fcvt_h_wu_demanded_bits:1707; CHECK32-IZHINX:       # %bb.0:1708; CHECK32-IZHINX-NEXT:    addi a0, a0, 11709; CHECK32-IZHINX-NEXT:    fcvt.h.wu a2, a01710; CHECK32-IZHINX-NEXT:    sh a2, 0(a1)1711; CHECK32-IZHINX-NEXT:    ret1712;1713; CHECK64-IZHINX-LABEL: fcvt_h_wu_demanded_bits:1714; CHECK64-IZHINX:       # %bb.0:1715; CHECK64-IZHINX-NEXT:    addiw a0, a0, 11716; CHECK64-IZHINX-NEXT:    fcvt.h.wu a2, a01717; CHECK64-IZHINX-NEXT:    sh a2, 0(a1)1718; CHECK64-IZHINX-NEXT:    ret1719;1720; CHECK32-IZFHMIN-LABEL: fcvt_h_wu_demanded_bits:1721; CHECK32-IZFHMIN:       # %bb.0:1722; CHECK32-IZFHMIN-NEXT:    addi a0, a0, 11723; CHECK32-IZFHMIN-NEXT:    fcvt.s.wu fa5, a01724; CHECK32-IZFHMIN-NEXT:    fcvt.h.s fa5, fa51725; CHECK32-IZFHMIN-NEXT:    fsh fa5, 0(a1)1726; CHECK32-IZFHMIN-NEXT:    ret1727;1728; CHECK64-IZFHMIN-LABEL: fcvt_h_wu_demanded_bits:1729; CHECK64-IZFHMIN:       # %bb.0:1730; CHECK64-IZFHMIN-NEXT:    addiw a0, a0, 11731; CHECK64-IZFHMIN-NEXT:    fcvt.s.wu fa5, a01732; CHECK64-IZFHMIN-NEXT:    fcvt.h.s fa5, fa51733; CHECK64-IZFHMIN-NEXT:    fsh fa5, 0(a1)1734; CHECK64-IZFHMIN-NEXT:    ret1735;1736; CHECK32-IZHINXMIN-LABEL: fcvt_h_wu_demanded_bits:1737; CHECK32-IZHINXMIN:       # %bb.0:1738; CHECK32-IZHINXMIN-NEXT:    addi a0, a0, 11739; CHECK32-IZHINXMIN-NEXT:    fcvt.s.wu a2, a01740; CHECK32-IZHINXMIN-NEXT:    fcvt.h.s a2, a21741; CHECK32-IZHINXMIN-NEXT:    sh a2, 0(a1)1742; CHECK32-IZHINXMIN-NEXT:    ret1743;1744; CHECK64-IZHINXMIN-LABEL: fcvt_h_wu_demanded_bits:1745; CHECK64-IZHINXMIN:       # %bb.0:1746; CHECK64-IZHINXMIN-NEXT:    addiw a0, a0, 11747; CHECK64-IZHINXMIN-NEXT:    fcvt.s.wu a2, a01748; CHECK64-IZHINXMIN-NEXT:    fcvt.h.s a2, a21749; CHECK64-IZHINXMIN-NEXT:    sh a2, 0(a1)1750; CHECK64-IZHINXMIN-NEXT:    ret1751;1752; CHECK32-D-LABEL: fcvt_h_wu_demanded_bits:1753; CHECK32-D:       # %bb.0:1754; CHECK32-D-NEXT:    addi sp, sp, -161755; CHECK32-D-NEXT:    .cfi_def_cfa_offset 161756; CHECK32-D-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill1757; CHECK32-D-NEXT:    sw s0, 8(sp) # 4-byte Folded Spill1758; CHECK32-D-NEXT:    sw s1, 4(sp) # 4-byte Folded Spill1759; CHECK32-D-NEXT:    .cfi_offset ra, -41760; CHECK32-D-NEXT:    .cfi_offset s0, -81761; CHECK32-D-NEXT:    .cfi_offset s1, -121762; CHECK32-D-NEXT:    mv s0, a11763; CHECK32-D-NEXT:    addi s1, a0, 11764; CHECK32-D-NEXT:    fcvt.s.wu fa0, s11765; CHECK32-D-NEXT:    call __truncsfhf21766; CHECK32-D-NEXT:    fmv.x.w a0, fa01767; CHECK32-D-NEXT:    sh a0, 0(s0)1768; CHECK32-D-NEXT:    mv a0, s11769; CHECK32-D-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload1770; CHECK32-D-NEXT:    lw s0, 8(sp) # 4-byte Folded Reload1771; CHECK32-D-NEXT:    lw s1, 4(sp) # 4-byte Folded Reload1772; CHECK32-D-NEXT:    .cfi_restore ra1773; CHECK32-D-NEXT:    .cfi_restore s01774; CHECK32-D-NEXT:    .cfi_restore s11775; CHECK32-D-NEXT:    addi sp, sp, 161776; CHECK32-D-NEXT:    .cfi_def_cfa_offset 01777; CHECK32-D-NEXT:    ret1778  %3 = add i32 %0, 11779  %4 = call half @llvm.experimental.constrained.uitofp.f16.i32(i32 %3, metadata !"round.dynamic", metadata !"fpexcept.strict")1780  store half %4, ptr %1, align 21781  ret i32 %31782}1783 1784define half @fcvt_h_q(fp128 %a) nounwind strictfp {1785; CHECK32-IZFH-LABEL: fcvt_h_q:1786; CHECK32-IZFH:       # %bb.0:1787; CHECK32-IZFH-NEXT:    addi sp, sp, -321788; CHECK32-IZFH-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1789; CHECK32-IZFH-NEXT:    lw a1, 0(a0)1790; CHECK32-IZFH-NEXT:    lw a2, 4(a0)1791; CHECK32-IZFH-NEXT:    lw a3, 8(a0)1792; CHECK32-IZFH-NEXT:    lw a4, 12(a0)1793; CHECK32-IZFH-NEXT:    addi a0, sp, 81794; CHECK32-IZFH-NEXT:    sw a1, 8(sp)1795; CHECK32-IZFH-NEXT:    sw a2, 12(sp)1796; CHECK32-IZFH-NEXT:    sw a3, 16(sp)1797; CHECK32-IZFH-NEXT:    sw a4, 20(sp)1798; CHECK32-IZFH-NEXT:    call __trunctfhf21799; CHECK32-IZFH-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1800; CHECK32-IZFH-NEXT:    addi sp, sp, 321801; CHECK32-IZFH-NEXT:    ret1802;1803; CHECK64-IZFH-LABEL: fcvt_h_q:1804; CHECK64-IZFH:       # %bb.0:1805; CHECK64-IZFH-NEXT:    addi sp, sp, -161806; CHECK64-IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1807; CHECK64-IZFH-NEXT:    call __trunctfhf21808; CHECK64-IZFH-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1809; CHECK64-IZFH-NEXT:    addi sp, sp, 161810; CHECK64-IZFH-NEXT:    ret1811;1812; CHECK32-IZHINX-LABEL: fcvt_h_q:1813; CHECK32-IZHINX:       # %bb.0:1814; CHECK32-IZHINX-NEXT:    addi sp, sp, -321815; CHECK32-IZHINX-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1816; CHECK32-IZHINX-NEXT:    lw a1, 0(a0)1817; CHECK32-IZHINX-NEXT:    lw a2, 4(a0)1818; CHECK32-IZHINX-NEXT:    lw a3, 8(a0)1819; CHECK32-IZHINX-NEXT:    lw a4, 12(a0)1820; CHECK32-IZHINX-NEXT:    addi a0, sp, 81821; CHECK32-IZHINX-NEXT:    sw a1, 8(sp)1822; CHECK32-IZHINX-NEXT:    sw a2, 12(sp)1823; CHECK32-IZHINX-NEXT:    sw a3, 16(sp)1824; CHECK32-IZHINX-NEXT:    sw a4, 20(sp)1825; CHECK32-IZHINX-NEXT:    call __trunctfhf21826; CHECK32-IZHINX-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1827; CHECK32-IZHINX-NEXT:    addi sp, sp, 321828; CHECK32-IZHINX-NEXT:    ret1829;1830; CHECK64-IZHINX-LABEL: fcvt_h_q:1831; CHECK64-IZHINX:       # %bb.0:1832; CHECK64-IZHINX-NEXT:    addi sp, sp, -161833; CHECK64-IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1834; CHECK64-IZHINX-NEXT:    call __trunctfhf21835; CHECK64-IZHINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1836; CHECK64-IZHINX-NEXT:    addi sp, sp, 161837; CHECK64-IZHINX-NEXT:    ret1838;1839; CHECK32-IZFHMIN-LABEL: fcvt_h_q:1840; CHECK32-IZFHMIN:       # %bb.0:1841; CHECK32-IZFHMIN-NEXT:    addi sp, sp, -321842; CHECK32-IZFHMIN-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1843; CHECK32-IZFHMIN-NEXT:    lw a1, 0(a0)1844; CHECK32-IZFHMIN-NEXT:    lw a2, 4(a0)1845; CHECK32-IZFHMIN-NEXT:    lw a3, 8(a0)1846; CHECK32-IZFHMIN-NEXT:    lw a4, 12(a0)1847; CHECK32-IZFHMIN-NEXT:    addi a0, sp, 81848; CHECK32-IZFHMIN-NEXT:    sw a1, 8(sp)1849; CHECK32-IZFHMIN-NEXT:    sw a2, 12(sp)1850; CHECK32-IZFHMIN-NEXT:    sw a3, 16(sp)1851; CHECK32-IZFHMIN-NEXT:    sw a4, 20(sp)1852; CHECK32-IZFHMIN-NEXT:    call __trunctfhf21853; CHECK32-IZFHMIN-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1854; CHECK32-IZFHMIN-NEXT:    addi sp, sp, 321855; CHECK32-IZFHMIN-NEXT:    ret1856;1857; CHECK64-IZFHMIN-LABEL: fcvt_h_q:1858; CHECK64-IZFHMIN:       # %bb.0:1859; CHECK64-IZFHMIN-NEXT:    addi sp, sp, -161860; CHECK64-IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1861; CHECK64-IZFHMIN-NEXT:    call __trunctfhf21862; CHECK64-IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1863; CHECK64-IZFHMIN-NEXT:    addi sp, sp, 161864; CHECK64-IZFHMIN-NEXT:    ret1865;1866; CHECK32-IZHINXMIN-LABEL: fcvt_h_q:1867; CHECK32-IZHINXMIN:       # %bb.0:1868; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, -321869; CHECK32-IZHINXMIN-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1870; CHECK32-IZHINXMIN-NEXT:    lw a1, 0(a0)1871; CHECK32-IZHINXMIN-NEXT:    lw a2, 4(a0)1872; CHECK32-IZHINXMIN-NEXT:    lw a3, 8(a0)1873; CHECK32-IZHINXMIN-NEXT:    lw a4, 12(a0)1874; CHECK32-IZHINXMIN-NEXT:    addi a0, sp, 81875; CHECK32-IZHINXMIN-NEXT:    sw a1, 8(sp)1876; CHECK32-IZHINXMIN-NEXT:    sw a2, 12(sp)1877; CHECK32-IZHINXMIN-NEXT:    sw a3, 16(sp)1878; CHECK32-IZHINXMIN-NEXT:    sw a4, 20(sp)1879; CHECK32-IZHINXMIN-NEXT:    call __trunctfhf21880; CHECK32-IZHINXMIN-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1881; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, 321882; CHECK32-IZHINXMIN-NEXT:    ret1883;1884; CHECK64-IZHINXMIN-LABEL: fcvt_h_q:1885; CHECK64-IZHINXMIN:       # %bb.0:1886; CHECK64-IZHINXMIN-NEXT:    addi sp, sp, -161887; CHECK64-IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1888; CHECK64-IZHINXMIN-NEXT:    call __trunctfhf21889; CHECK64-IZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1890; CHECK64-IZHINXMIN-NEXT:    addi sp, sp, 161891; CHECK64-IZHINXMIN-NEXT:    ret1892;1893; CHECK32-D-LABEL: fcvt_h_q:1894; CHECK32-D:       # %bb.0:1895; CHECK32-D-NEXT:    addi sp, sp, -321896; CHECK32-D-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1897; CHECK32-D-NEXT:    lw a1, 0(a0)1898; CHECK32-D-NEXT:    lw a2, 4(a0)1899; CHECK32-D-NEXT:    lw a3, 8(a0)1900; CHECK32-D-NEXT:    lw a4, 12(a0)1901; CHECK32-D-NEXT:    addi a0, sp, 81902; CHECK32-D-NEXT:    sw a1, 8(sp)1903; CHECK32-D-NEXT:    sw a2, 12(sp)1904; CHECK32-D-NEXT:    sw a3, 16(sp)1905; CHECK32-D-NEXT:    sw a4, 20(sp)1906; CHECK32-D-NEXT:    call __trunctfhf21907; CHECK32-D-NEXT:    fmv.x.w a0, fa01908; CHECK32-D-NEXT:    lui a1, 10485601909; CHECK32-D-NEXT:    or a0, a0, a11910; CHECK32-D-NEXT:    fmv.w.x fa0, a01911; CHECK32-D-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1912; CHECK32-D-NEXT:    addi sp, sp, 321913; CHECK32-D-NEXT:    ret1914  %1 = call half @llvm.experimental.constrained.fptrunc.f16.f128(fp128 %a, metadata !"round.dynamic", metadata !"fpexcept.strict")1915  ret half %11916}1917 1918define fp128 @fcvt_q_h(half %a) nounwind strictfp {1919; CHECK32-IZFH-LABEL: fcvt_q_h:1920; CHECK32-IZFH:       # %bb.0:1921; CHECK32-IZFH-NEXT:    addi sp, sp, -321922; CHECK32-IZFH-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1923; CHECK32-IZFH-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill1924; CHECK32-IZFH-NEXT:    mv s0, a01925; CHECK32-IZFH-NEXT:    fcvt.s.h fa0, fa01926; CHECK32-IZFH-NEXT:    addi a0, sp, 81927; CHECK32-IZFH-NEXT:    call __extendsftf21928; CHECK32-IZFH-NEXT:    lw a0, 8(sp)1929; CHECK32-IZFH-NEXT:    lw a1, 12(sp)1930; CHECK32-IZFH-NEXT:    lw a2, 16(sp)1931; CHECK32-IZFH-NEXT:    lw a3, 20(sp)1932; CHECK32-IZFH-NEXT:    sw a0, 0(s0)1933; CHECK32-IZFH-NEXT:    sw a1, 4(s0)1934; CHECK32-IZFH-NEXT:    sw a2, 8(s0)1935; CHECK32-IZFH-NEXT:    sw a3, 12(s0)1936; CHECK32-IZFH-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1937; CHECK32-IZFH-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload1938; CHECK32-IZFH-NEXT:    addi sp, sp, 321939; CHECK32-IZFH-NEXT:    ret1940;1941; CHECK64-IZFH-LABEL: fcvt_q_h:1942; CHECK64-IZFH:       # %bb.0:1943; CHECK64-IZFH-NEXT:    addi sp, sp, -161944; CHECK64-IZFH-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1945; CHECK64-IZFH-NEXT:    fcvt.s.h fa0, fa01946; CHECK64-IZFH-NEXT:    call __extendsftf21947; CHECK64-IZFH-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1948; CHECK64-IZFH-NEXT:    addi sp, sp, 161949; CHECK64-IZFH-NEXT:    ret1950;1951; CHECK32-IZHINX-LABEL: fcvt_q_h:1952; CHECK32-IZHINX:       # %bb.0:1953; CHECK32-IZHINX-NEXT:    addi sp, sp, -321954; CHECK32-IZHINX-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1955; CHECK32-IZHINX-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill1956; CHECK32-IZHINX-NEXT:    mv s0, a01957; CHECK32-IZHINX-NEXT:    fcvt.s.h a1, a11958; CHECK32-IZHINX-NEXT:    addi a0, sp, 81959; CHECK32-IZHINX-NEXT:    call __extendsftf21960; CHECK32-IZHINX-NEXT:    lw a0, 8(sp)1961; CHECK32-IZHINX-NEXT:    lw a1, 12(sp)1962; CHECK32-IZHINX-NEXT:    lw a2, 16(sp)1963; CHECK32-IZHINX-NEXT:    lw a3, 20(sp)1964; CHECK32-IZHINX-NEXT:    sw a0, 0(s0)1965; CHECK32-IZHINX-NEXT:    sw a1, 4(s0)1966; CHECK32-IZHINX-NEXT:    sw a2, 8(s0)1967; CHECK32-IZHINX-NEXT:    sw a3, 12(s0)1968; CHECK32-IZHINX-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload1969; CHECK32-IZHINX-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload1970; CHECK32-IZHINX-NEXT:    addi sp, sp, 321971; CHECK32-IZHINX-NEXT:    ret1972;1973; CHECK64-IZHINX-LABEL: fcvt_q_h:1974; CHECK64-IZHINX:       # %bb.0:1975; CHECK64-IZHINX-NEXT:    addi sp, sp, -161976; CHECK64-IZHINX-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill1977; CHECK64-IZHINX-NEXT:    fcvt.s.h a0, a01978; CHECK64-IZHINX-NEXT:    call __extendsftf21979; CHECK64-IZHINX-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload1980; CHECK64-IZHINX-NEXT:    addi sp, sp, 161981; CHECK64-IZHINX-NEXT:    ret1982;1983; CHECK32-IZFHMIN-LABEL: fcvt_q_h:1984; CHECK32-IZFHMIN:       # %bb.0:1985; CHECK32-IZFHMIN-NEXT:    addi sp, sp, -321986; CHECK32-IZFHMIN-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill1987; CHECK32-IZFHMIN-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill1988; CHECK32-IZFHMIN-NEXT:    mv s0, a01989; CHECK32-IZFHMIN-NEXT:    fcvt.s.h fa0, fa01990; CHECK32-IZFHMIN-NEXT:    addi a0, sp, 81991; CHECK32-IZFHMIN-NEXT:    call __extendsftf21992; CHECK32-IZFHMIN-NEXT:    lw a0, 8(sp)1993; CHECK32-IZFHMIN-NEXT:    lw a1, 12(sp)1994; CHECK32-IZFHMIN-NEXT:    lw a2, 16(sp)1995; CHECK32-IZFHMIN-NEXT:    lw a3, 20(sp)1996; CHECK32-IZFHMIN-NEXT:    sw a0, 0(s0)1997; CHECK32-IZFHMIN-NEXT:    sw a1, 4(s0)1998; CHECK32-IZFHMIN-NEXT:    sw a2, 8(s0)1999; CHECK32-IZFHMIN-NEXT:    sw a3, 12(s0)2000; CHECK32-IZFHMIN-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload2001; CHECK32-IZFHMIN-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload2002; CHECK32-IZFHMIN-NEXT:    addi sp, sp, 322003; CHECK32-IZFHMIN-NEXT:    ret2004;2005; CHECK64-IZFHMIN-LABEL: fcvt_q_h:2006; CHECK64-IZFHMIN:       # %bb.0:2007; CHECK64-IZFHMIN-NEXT:    addi sp, sp, -162008; CHECK64-IZFHMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2009; CHECK64-IZFHMIN-NEXT:    fcvt.s.h fa0, fa02010; CHECK64-IZFHMIN-NEXT:    call __extendsftf22011; CHECK64-IZFHMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2012; CHECK64-IZFHMIN-NEXT:    addi sp, sp, 162013; CHECK64-IZFHMIN-NEXT:    ret2014;2015; CHECK32-IZHINXMIN-LABEL: fcvt_q_h:2016; CHECK32-IZHINXMIN:       # %bb.0:2017; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, -322018; CHECK32-IZHINXMIN-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill2019; CHECK32-IZHINXMIN-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill2020; CHECK32-IZHINXMIN-NEXT:    mv s0, a02021; CHECK32-IZHINXMIN-NEXT:    fcvt.s.h a1, a12022; CHECK32-IZHINXMIN-NEXT:    addi a0, sp, 82023; CHECK32-IZHINXMIN-NEXT:    call __extendsftf22024; CHECK32-IZHINXMIN-NEXT:    lw a0, 8(sp)2025; CHECK32-IZHINXMIN-NEXT:    lw a1, 12(sp)2026; CHECK32-IZHINXMIN-NEXT:    lw a2, 16(sp)2027; CHECK32-IZHINXMIN-NEXT:    lw a3, 20(sp)2028; CHECK32-IZHINXMIN-NEXT:    sw a0, 0(s0)2029; CHECK32-IZHINXMIN-NEXT:    sw a1, 4(s0)2030; CHECK32-IZHINXMIN-NEXT:    sw a2, 8(s0)2031; CHECK32-IZHINXMIN-NEXT:    sw a3, 12(s0)2032; CHECK32-IZHINXMIN-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload2033; CHECK32-IZHINXMIN-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload2034; CHECK32-IZHINXMIN-NEXT:    addi sp, sp, 322035; CHECK32-IZHINXMIN-NEXT:    ret2036;2037; CHECK64-IZHINXMIN-LABEL: fcvt_q_h:2038; CHECK64-IZHINXMIN:       # %bb.0:2039; CHECK64-IZHINXMIN-NEXT:    addi sp, sp, -162040; CHECK64-IZHINXMIN-NEXT:    sd ra, 8(sp) # 8-byte Folded Spill2041; CHECK64-IZHINXMIN-NEXT:    fcvt.s.h a0, a02042; CHECK64-IZHINXMIN-NEXT:    call __extendsftf22043; CHECK64-IZHINXMIN-NEXT:    ld ra, 8(sp) # 8-byte Folded Reload2044; CHECK64-IZHINXMIN-NEXT:    addi sp, sp, 162045; CHECK64-IZHINXMIN-NEXT:    ret2046;2047; CHECK32-D-LABEL: fcvt_q_h:2048; CHECK32-D:       # %bb.0:2049; CHECK32-D-NEXT:    addi sp, sp, -322050; CHECK32-D-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill2051; CHECK32-D-NEXT:    sw s0, 24(sp) # 4-byte Folded Spill2052; CHECK32-D-NEXT:    mv s0, a02053; CHECK32-D-NEXT:    fmv.x.w a0, fa02054; CHECK32-D-NEXT:    slli a0, a0, 162055; CHECK32-D-NEXT:    srli a0, a0, 162056; CHECK32-D-NEXT:    fmv.w.x fa0, a02057; CHECK32-D-NEXT:    call __extendhfsf22058; CHECK32-D-NEXT:    addi a0, sp, 82059; CHECK32-D-NEXT:    call __extendsftf22060; CHECK32-D-NEXT:    lw a0, 8(sp)2061; CHECK32-D-NEXT:    lw a1, 12(sp)2062; CHECK32-D-NEXT:    lw a2, 16(sp)2063; CHECK32-D-NEXT:    lw a3, 20(sp)2064; CHECK32-D-NEXT:    sw a0, 0(s0)2065; CHECK32-D-NEXT:    sw a1, 4(s0)2066; CHECK32-D-NEXT:    sw a2, 8(s0)2067; CHECK32-D-NEXT:    sw a3, 12(s0)2068; CHECK32-D-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload2069; CHECK32-D-NEXT:    lw s0, 24(sp) # 4-byte Folded Reload2070; CHECK32-D-NEXT:    addi sp, sp, 322071; CHECK32-D-NEXT:    ret2072  %1 = call fp128 @llvm.experimental.constrained.fpext.f128.f16(half %a, metadata !"fpexcept.strict")2073  ret fp128 %12074}2075