brintos

brintos / llvm-project-archived public Read only

0
0
Text · 64.0 KiB · 8b436d0 Raw
1618 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV324; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV646 7define <1 x half> @vsitofp_v1i1_v1f16(<1 x i1> %va) strictfp {8; CHECK-LABEL: vsitofp_v1i1_v1f16:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma11; CHECK-NEXT:    vmv.s.x v8, zero12; CHECK-NEXT:    vmerge.vim v9, v8, -1, v013; CHECK-NEXT:    vfwcvt.f.x.v v8, v914; CHECK-NEXT:    ret15  %evec = call <1 x half> @llvm.experimental.constrained.sitofp.v1f16.v1i1(<1 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")16  ret <1 x half> %evec17}18 19define <1 x half> @vuitofp_v1i1_v1f16(<1 x i1> %va) strictfp {20; CHECK-LABEL: vuitofp_v1i1_v1f16:21; CHECK:       # %bb.0:22; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma23; CHECK-NEXT:    vmv.s.x v8, zero24; CHECK-NEXT:    vmerge.vim v9, v8, 1, v025; CHECK-NEXT:    vfwcvt.f.xu.v v8, v926; CHECK-NEXT:    ret27  %evec = call <1 x half> @llvm.experimental.constrained.uitofp.v1f16.v1i1(<1 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")28  ret <1 x half> %evec29}30 31define <1 x float> @vsitofp_v1i1_v1f32(<1 x i1> %va) strictfp {32; CHECK-LABEL: vsitofp_v1i1_v1f32:33; CHECK:       # %bb.0:34; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma35; CHECK-NEXT:    vmv.s.x v8, zero36; CHECK-NEXT:    vmerge.vim v9, v8, -1, v037; CHECK-NEXT:    vfwcvt.f.x.v v8, v938; CHECK-NEXT:    ret39  %evec = call <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i1(<1 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")40  ret <1 x float> %evec41}42 43define <1 x float> @vuitofp_v1i1_v1f32(<1 x i1> %va) strictfp {44; CHECK-LABEL: vuitofp_v1i1_v1f32:45; CHECK:       # %bb.0:46; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma47; CHECK-NEXT:    vmv.s.x v8, zero48; CHECK-NEXT:    vmerge.vim v9, v8, 1, v049; CHECK-NEXT:    vfwcvt.f.xu.v v8, v950; CHECK-NEXT:    ret51  %evec = call <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i1(<1 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")52  ret <1 x float> %evec53}54 55define <1 x double> @vsitofp_v1i1_v1f64(<1 x i1> %va) strictfp {56; CHECK-LABEL: vsitofp_v1i1_v1f64:57; CHECK:       # %bb.0:58; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma59; CHECK-NEXT:    vmv.s.x v8, zero60; CHECK-NEXT:    vmerge.vim v9, v8, -1, v061; CHECK-NEXT:    vfwcvt.f.x.v v8, v962; CHECK-NEXT:    ret63  %evec = call <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i1(<1 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")64  ret <1 x double> %evec65}66 67define <1 x double> @vuitofp_v1i1_v1f64(<1 x i1> %va) strictfp {68; CHECK-LABEL: vuitofp_v1i1_v1f64:69; CHECK:       # %bb.0:70; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma71; CHECK-NEXT:    vmv.s.x v8, zero72; CHECK-NEXT:    vmerge.vim v9, v8, 1, v073; CHECK-NEXT:    vfwcvt.f.xu.v v8, v974; CHECK-NEXT:    ret75  %evec = call <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i1(<1 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")76  ret <1 x double> %evec77}78 79define <2 x half> @vsitofp_v2i1_v2f16(<2 x i1> %va) strictfp {80; CHECK-LABEL: vsitofp_v2i1_v2f16:81; CHECK:       # %bb.0:82; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma83; CHECK-NEXT:    vmv.v.i v8, 084; CHECK-NEXT:    vmerge.vim v9, v8, -1, v085; CHECK-NEXT:    vfwcvt.f.x.v v8, v986; CHECK-NEXT:    ret87  %evec = call <2 x half> @llvm.experimental.constrained.sitofp.v2f16.v2i1(<2 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")88  ret <2 x half> %evec89}90 91define <2 x half> @vuitofp_v2i1_v2f16(<2 x i1> %va) strictfp {92; CHECK-LABEL: vuitofp_v2i1_v2f16:93; CHECK:       # %bb.0:94; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma95; CHECK-NEXT:    vmv.v.i v8, 096; CHECK-NEXT:    vmerge.vim v9, v8, 1, v097; CHECK-NEXT:    vfwcvt.f.xu.v v8, v998; CHECK-NEXT:    ret99  %evec = call <2 x half> @llvm.experimental.constrained.uitofp.v2f16.v2i1(<2 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")100  ret <2 x half> %evec101}102 103define <2 x float> @vsitofp_v2i1_v2f32(<2 x i1> %va) strictfp {104; CHECK-LABEL: vsitofp_v2i1_v2f32:105; CHECK:       # %bb.0:106; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma107; CHECK-NEXT:    vmv.v.i v8, 0108; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0109; CHECK-NEXT:    vfwcvt.f.x.v v8, v9110; CHECK-NEXT:    ret111  %evec = call <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i1(<2 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")112  ret <2 x float> %evec113}114 115define <2 x float> @vuitofp_v2i1_v2f32(<2 x i1> %va) strictfp {116; CHECK-LABEL: vuitofp_v2i1_v2f32:117; CHECK:       # %bb.0:118; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma119; CHECK-NEXT:    vmv.v.i v8, 0120; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0121; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9122; CHECK-NEXT:    ret123  %evec = call <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i1(<2 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")124  ret <2 x float> %evec125}126 127define <2 x double> @vsitofp_v2i1_v2f64(<2 x i1> %va) strictfp {128; CHECK-LABEL: vsitofp_v2i1_v2f64:129; CHECK:       # %bb.0:130; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma131; CHECK-NEXT:    vmv.v.i v8, 0132; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0133; CHECK-NEXT:    vfwcvt.f.x.v v8, v9134; CHECK-NEXT:    ret135  %evec = call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i1(<2 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")136  ret <2 x double> %evec137}138 139define <2 x double> @vuitofp_v2i1_v2f64(<2 x i1> %va) strictfp {140; CHECK-LABEL: vuitofp_v2i1_v2f64:141; CHECK:       # %bb.0:142; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma143; CHECK-NEXT:    vmv.v.i v8, 0144; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0145; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9146; CHECK-NEXT:    ret147  %evec = call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i1(<2 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")148  ret <2 x double> %evec149}150 151define <4 x half> @vsitofp_v4i1_v4f16(<4 x i1> %va) strictfp {152; CHECK-LABEL: vsitofp_v4i1_v4f16:153; CHECK:       # %bb.0:154; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma155; CHECK-NEXT:    vmv.v.i v8, 0156; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0157; CHECK-NEXT:    vfwcvt.f.x.v v8, v9158; CHECK-NEXT:    ret159  %evec = call <4 x half> @llvm.experimental.constrained.sitofp.v4f16.v4i1(<4 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")160  ret <4 x half> %evec161}162 163define <4 x half> @vuitofp_v4i1_v4f16(<4 x i1> %va) strictfp {164; CHECK-LABEL: vuitofp_v4i1_v4f16:165; CHECK:       # %bb.0:166; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma167; CHECK-NEXT:    vmv.v.i v8, 0168; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0169; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9170; CHECK-NEXT:    ret171  %evec = call <4 x half> @llvm.experimental.constrained.uitofp.v4f16.v4i1(<4 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")172  ret <4 x half> %evec173}174 175define <4 x float> @vsitofp_v4i1_v4f32(<4 x i1> %va) strictfp {176; CHECK-LABEL: vsitofp_v4i1_v4f32:177; CHECK:       # %bb.0:178; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma179; CHECK-NEXT:    vmv.v.i v8, 0180; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0181; CHECK-NEXT:    vfwcvt.f.x.v v8, v9182; CHECK-NEXT:    ret183  %evec = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i1(<4 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")184  ret <4 x float> %evec185}186 187define <4 x float> @vuitofp_v4i1_v4f32(<4 x i1> %va) strictfp {188; CHECK-LABEL: vuitofp_v4i1_v4f32:189; CHECK:       # %bb.0:190; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma191; CHECK-NEXT:    vmv.v.i v8, 0192; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0193; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9194; CHECK-NEXT:    ret195  %evec = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i1(<4 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")196  ret <4 x float> %evec197}198 199define <4 x double> @vsitofp_v4i1_v4f64(<4 x i1> %va) strictfp {200; CHECK-LABEL: vsitofp_v4i1_v4f64:201; CHECK:       # %bb.0:202; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma203; CHECK-NEXT:    vmv.v.i v8, 0204; CHECK-NEXT:    vmerge.vim v10, v8, -1, v0205; CHECK-NEXT:    vfwcvt.f.x.v v8, v10206; CHECK-NEXT:    ret207  %evec = call <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i1(<4 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")208  ret <4 x double> %evec209}210 211define <4 x double> @vuitofp_v4i1_v4f64(<4 x i1> %va) strictfp {212; CHECK-LABEL: vuitofp_v4i1_v4f64:213; CHECK:       # %bb.0:214; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma215; CHECK-NEXT:    vmv.v.i v8, 0216; CHECK-NEXT:    vmerge.vim v10, v8, 1, v0217; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10218; CHECK-NEXT:    ret219  %evec = call <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i1(<4 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")220  ret <4 x double> %evec221}222 223define <8 x half> @vsitofp_v8i1_v8f16(<8 x i1> %va) strictfp {224; CHECK-LABEL: vsitofp_v8i1_v8f16:225; CHECK:       # %bb.0:226; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma227; CHECK-NEXT:    vmv.v.i v8, 0228; CHECK-NEXT:    vmerge.vim v9, v8, -1, v0229; CHECK-NEXT:    vfwcvt.f.x.v v8, v9230; CHECK-NEXT:    ret231  %evec = call <8 x half> @llvm.experimental.constrained.sitofp.v8f16.v8i1(<8 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")232  ret <8 x half> %evec233}234 235define <8 x half> @vuitofp_v8i1_v8f16(<8 x i1> %va) strictfp {236; CHECK-LABEL: vuitofp_v8i1_v8f16:237; CHECK:       # %bb.0:238; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma239; CHECK-NEXT:    vmv.v.i v8, 0240; CHECK-NEXT:    vmerge.vim v9, v8, 1, v0241; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9242; CHECK-NEXT:    ret243  %evec = call <8 x half> @llvm.experimental.constrained.uitofp.v8f16.v8i1(<8 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")244  ret <8 x half> %evec245}246 247define <8 x float> @vsitofp_v8i1_v8f32(<8 x i1> %va) strictfp {248; CHECK-LABEL: vsitofp_v8i1_v8f32:249; CHECK:       # %bb.0:250; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma251; CHECK-NEXT:    vmv.v.i v8, 0252; CHECK-NEXT:    vmerge.vim v10, v8, -1, v0253; CHECK-NEXT:    vfwcvt.f.x.v v8, v10254; CHECK-NEXT:    ret255  %evec = call <8 x float> @llvm.experimental.constrained.sitofp.v8f32.v8i1(<8 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")256  ret <8 x float> %evec257}258 259define <8 x float> @vuitofp_v8i1_v8f32(<8 x i1> %va) strictfp {260; CHECK-LABEL: vuitofp_v8i1_v8f32:261; CHECK:       # %bb.0:262; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma263; CHECK-NEXT:    vmv.v.i v8, 0264; CHECK-NEXT:    vmerge.vim v10, v8, 1, v0265; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10266; CHECK-NEXT:    ret267  %evec = call <8 x float> @llvm.experimental.constrained.uitofp.v8f32.v8i1(<8 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")268  ret <8 x float> %evec269}270 271define <8 x double> @vsitofp_v8i1_v8f64(<8 x i1> %va) strictfp {272; CHECK-LABEL: vsitofp_v8i1_v8f64:273; CHECK:       # %bb.0:274; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma275; CHECK-NEXT:    vmv.v.i v8, 0276; CHECK-NEXT:    vmerge.vim v12, v8, -1, v0277; CHECK-NEXT:    vfwcvt.f.x.v v8, v12278; CHECK-NEXT:    ret279  %evec = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i1(<8 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")280  ret <8 x double> %evec281}282 283define <8 x double> @vuitofp_v8i1_v8f64(<8 x i1> %va) strictfp {284; CHECK-LABEL: vuitofp_v8i1_v8f64:285; CHECK:       # %bb.0:286; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma287; CHECK-NEXT:    vmv.v.i v8, 0288; CHECK-NEXT:    vmerge.vim v12, v8, 1, v0289; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12290; CHECK-NEXT:    ret291  %evec = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i1(<8 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")292  ret <8 x double> %evec293}294 295define <16 x half> @vsitofp_v16i1_v16f16(<16 x i1> %va) strictfp {296; CHECK-LABEL: vsitofp_v16i1_v16f16:297; CHECK:       # %bb.0:298; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma299; CHECK-NEXT:    vmv.v.i v8, 0300; CHECK-NEXT:    vmerge.vim v10, v8, -1, v0301; CHECK-NEXT:    vfwcvt.f.x.v v8, v10302; CHECK-NEXT:    ret303  %evec = call <16 x half> @llvm.experimental.constrained.sitofp.v16f16.v16i1(<16 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")304  ret <16 x half> %evec305}306 307define <16 x half> @vuitofp_v16i1_v16f16(<16 x i1> %va) strictfp {308; CHECK-LABEL: vuitofp_v16i1_v16f16:309; CHECK:       # %bb.0:310; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma311; CHECK-NEXT:    vmv.v.i v8, 0312; CHECK-NEXT:    vmerge.vim v10, v8, 1, v0313; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10314; CHECK-NEXT:    ret315  %evec = call <16 x half> @llvm.experimental.constrained.uitofp.v16f16.v16i1(<16 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")316  ret <16 x half> %evec317}318 319define <16 x float> @vsitofp_v16i1_v16f32(<16 x i1> %va) strictfp {320; CHECK-LABEL: vsitofp_v16i1_v16f32:321; CHECK:       # %bb.0:322; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma323; CHECK-NEXT:    vmv.v.i v8, 0324; CHECK-NEXT:    vmerge.vim v12, v8, -1, v0325; CHECK-NEXT:    vfwcvt.f.x.v v8, v12326; CHECK-NEXT:    ret327  %evec = call <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i1(<16 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")328  ret <16 x float> %evec329}330 331define <16 x float> @vuitofp_v16i1_v16f32(<16 x i1> %va) strictfp {332; CHECK-LABEL: vuitofp_v16i1_v16f32:333; CHECK:       # %bb.0:334; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma335; CHECK-NEXT:    vmv.v.i v8, 0336; CHECK-NEXT:    vmerge.vim v12, v8, 1, v0337; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12338; CHECK-NEXT:    ret339  %evec = call <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i1(<16 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")340  ret <16 x float> %evec341}342 343define <32 x half> @vsitofp_v32i1_v32f16(<32 x i1> %va) strictfp {344; CHECK-LABEL: vsitofp_v32i1_v32f16:345; CHECK:       # %bb.0:346; CHECK-NEXT:    li a0, 32347; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma348; CHECK-NEXT:    vmv.v.i v8, 0349; CHECK-NEXT:    vmerge.vim v12, v8, -1, v0350; CHECK-NEXT:    vfwcvt.f.x.v v8, v12351; CHECK-NEXT:    ret352  %evec = call <32 x half> @llvm.experimental.constrained.sitofp.v32f16.v32i1(<32 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")353  ret <32 x half> %evec354}355 356define <32 x half> @vuitofp_v32i1_v32f16(<32 x i1> %va) strictfp {357; CHECK-LABEL: vuitofp_v32i1_v32f16:358; CHECK:       # %bb.0:359; CHECK-NEXT:    li a0, 32360; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma361; CHECK-NEXT:    vmv.v.i v8, 0362; CHECK-NEXT:    vmerge.vim v12, v8, 1, v0363; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12364; CHECK-NEXT:    ret365  %evec = call <32 x half> @llvm.experimental.constrained.uitofp.v32f16.v32i1(<32 x i1> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")366  ret <32 x half> %evec367}368 369define <1 x half> @vsitofp_v1i8_v1f16(<1 x i8> %va) strictfp {370; CHECK-LABEL: vsitofp_v1i8_v1f16:371; CHECK:       # %bb.0:372; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma373; CHECK-NEXT:    vfwcvt.f.x.v v9, v8374; CHECK-NEXT:    vmv1r.v v8, v9375; CHECK-NEXT:    ret376  %evec = call <1 x half> @llvm.experimental.constrained.sitofp.v1f16.v1i8(<1 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")377  ret <1 x half> %evec378}379 380define <1 x half> @vsitofp_v1i7_v1f16(<1 x i7> %va) strictfp {381; RV32-LABEL: vsitofp_v1i7_v1f16:382; RV32:       # %bb.0:383; RV32-NEXT:    slli a0, a0, 25384; RV32-NEXT:    srai a0, a0, 25385; RV32-NEXT:    fcvt.h.w fa5, a0386; RV32-NEXT:    vsetivli zero, 1, e16, m1, ta, ma387; RV32-NEXT:    vfmv.s.f v8, fa5388; RV32-NEXT:    ret389;390; RV64-LABEL: vsitofp_v1i7_v1f16:391; RV64:       # %bb.0:392; RV64-NEXT:    slli a0, a0, 57393; RV64-NEXT:    srai a0, a0, 57394; RV64-NEXT:    fcvt.h.w fa5, a0395; RV64-NEXT:    vsetivli zero, 1, e16, m1, ta, ma396; RV64-NEXT:    vfmv.s.f v8, fa5397; RV64-NEXT:    ret398  %evec = call <1 x half> @llvm.experimental.constrained.sitofp.v1f16.v1i7(<1 x i7> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")399  ret <1 x half> %evec400}401 402define <1 x half> @vuitofp_v1i7_v1f16(<1 x i7> %va) strictfp {403; CHECK-LABEL: vuitofp_v1i7_v1f16:404; CHECK:       # %bb.0:405; CHECK-NEXT:    andi a0, a0, 127406; CHECK-NEXT:    fcvt.h.wu fa5, a0407; CHECK-NEXT:    vsetivli zero, 1, e16, m1, ta, ma408; CHECK-NEXT:    vfmv.s.f v8, fa5409; CHECK-NEXT:    ret410  %evec = call <1 x half> @llvm.experimental.constrained.uitofp.v1f16.v1i7(<1 x i7> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")411  ret <1 x half> %evec412}413 414define <1 x half> @vuitofp_v1i8_v1f16(<1 x i8> %va) strictfp {415; CHECK-LABEL: vuitofp_v1i8_v1f16:416; CHECK:       # %bb.0:417; CHECK-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma418; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8419; CHECK-NEXT:    vmv1r.v v8, v9420; CHECK-NEXT:    ret421  %evec = call <1 x half> @llvm.experimental.constrained.uitofp.v1f16.v1i8(<1 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")422  ret <1 x half> %evec423}424 425define <1 x float> @vsitofp_v1i8_v1f32(<1 x i8> %va) strictfp {426; CHECK-LABEL: vsitofp_v1i8_v1f32:427; CHECK:       # %bb.0:428; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma429; CHECK-NEXT:    vsext.vf2 v9, v8430; CHECK-NEXT:    vfwcvt.f.x.v v8, v9431; CHECK-NEXT:    ret432  %evec = call <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i8(<1 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")433  ret <1 x float> %evec434}435 436define <1 x float> @vuitofp_v1i8_v1f32(<1 x i8> %va) strictfp {437; CHECK-LABEL: vuitofp_v1i8_v1f32:438; CHECK:       # %bb.0:439; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma440; CHECK-NEXT:    vzext.vf2 v9, v8441; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9442; CHECK-NEXT:    ret443  %evec = call <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i8(<1 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")444  ret <1 x float> %evec445}446 447define <1 x double> @vsitofp_v1i8_v1f64(<1 x i8> %va) strictfp {448; CHECK-LABEL: vsitofp_v1i8_v1f64:449; CHECK:       # %bb.0:450; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma451; CHECK-NEXT:    vsext.vf4 v9, v8452; CHECK-NEXT:    vfwcvt.f.x.v v8, v9453; CHECK-NEXT:    ret454  %evec = call <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i8(<1 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")455  ret <1 x double> %evec456}457 458define <1 x double> @vuitofp_v1i8_v1f64(<1 x i8> %va) strictfp {459; CHECK-LABEL: vuitofp_v1i8_v1f64:460; CHECK:       # %bb.0:461; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma462; CHECK-NEXT:    vzext.vf4 v9, v8463; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9464; CHECK-NEXT:    ret465  %evec = call <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i8(<1 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")466  ret <1 x double> %evec467}468 469define <2 x half> @vsitofp_v2i8_v2f16(<2 x i8> %va) strictfp {470; CHECK-LABEL: vsitofp_v2i8_v2f16:471; CHECK:       # %bb.0:472; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma473; CHECK-NEXT:    vfwcvt.f.x.v v9, v8474; CHECK-NEXT:    vmv1r.v v8, v9475; CHECK-NEXT:    ret476  %evec = call <2 x half> @llvm.experimental.constrained.sitofp.v2f16.v2i8(<2 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")477  ret <2 x half> %evec478}479 480define <2 x half> @vuitofp_v2i8_v2f16(<2 x i8> %va) strictfp {481; CHECK-LABEL: vuitofp_v2i8_v2f16:482; CHECK:       # %bb.0:483; CHECK-NEXT:    vsetivli zero, 2, e8, mf8, ta, ma484; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8485; CHECK-NEXT:    vmv1r.v v8, v9486; CHECK-NEXT:    ret487  %evec = call <2 x half> @llvm.experimental.constrained.uitofp.v2f16.v2i8(<2 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")488  ret <2 x half> %evec489}490 491define <2 x float> @vsitofp_v2i8_v2f32(<2 x i8> %va) strictfp {492; CHECK-LABEL: vsitofp_v2i8_v2f32:493; CHECK:       # %bb.0:494; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma495; CHECK-NEXT:    vsext.vf2 v9, v8496; CHECK-NEXT:    vfwcvt.f.x.v v8, v9497; CHECK-NEXT:    ret498  %evec = call <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i8(<2 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")499  ret <2 x float> %evec500}501 502define <2 x float> @vuitofp_v2i8_v2f32(<2 x i8> %va) strictfp {503; CHECK-LABEL: vuitofp_v2i8_v2f32:504; CHECK:       # %bb.0:505; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma506; CHECK-NEXT:    vzext.vf2 v9, v8507; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9508; CHECK-NEXT:    ret509  %evec = call <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i8(<2 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")510  ret <2 x float> %evec511}512 513define <2 x double> @vsitofp_v2i8_v2f64(<2 x i8> %va) strictfp {514; CHECK-LABEL: vsitofp_v2i8_v2f64:515; CHECK:       # %bb.0:516; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma517; CHECK-NEXT:    vsext.vf4 v9, v8518; CHECK-NEXT:    vfwcvt.f.x.v v8, v9519; CHECK-NEXT:    ret520  %evec = call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i8(<2 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")521  ret <2 x double> %evec522}523 524define <2 x double> @vuitofp_v2i8_v2f64(<2 x i8> %va) strictfp {525; CHECK-LABEL: vuitofp_v2i8_v2f64:526; CHECK:       # %bb.0:527; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma528; CHECK-NEXT:    vzext.vf4 v9, v8529; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9530; CHECK-NEXT:    ret531  %evec = call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i8(<2 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")532  ret <2 x double> %evec533}534 535define <4 x half> @vsitofp_v4i8_v4f16(<4 x i8> %va) strictfp {536; CHECK-LABEL: vsitofp_v4i8_v4f16:537; CHECK:       # %bb.0:538; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma539; CHECK-NEXT:    vfwcvt.f.x.v v9, v8540; CHECK-NEXT:    vmv1r.v v8, v9541; CHECK-NEXT:    ret542  %evec = call <4 x half> @llvm.experimental.constrained.sitofp.v4f16.v4i8(<4 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")543  ret <4 x half> %evec544}545 546define <4 x half> @vuitofp_v4i8_v4f16(<4 x i8> %va) strictfp {547; CHECK-LABEL: vuitofp_v4i8_v4f16:548; CHECK:       # %bb.0:549; CHECK-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma550; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8551; CHECK-NEXT:    vmv1r.v v8, v9552; CHECK-NEXT:    ret553  %evec = call <4 x half> @llvm.experimental.constrained.uitofp.v4f16.v4i8(<4 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")554  ret <4 x half> %evec555}556 557define <4 x float> @vsitofp_v4i8_v4f32(<4 x i8> %va) strictfp {558; CHECK-LABEL: vsitofp_v4i8_v4f32:559; CHECK:       # %bb.0:560; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma561; CHECK-NEXT:    vsext.vf2 v9, v8562; CHECK-NEXT:    vfwcvt.f.x.v v8, v9563; CHECK-NEXT:    ret564  %evec = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i8(<4 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")565  ret <4 x float> %evec566}567 568define <4 x float> @vuitofp_v4i8_v4f32(<4 x i8> %va) strictfp {569; CHECK-LABEL: vuitofp_v4i8_v4f32:570; CHECK:       # %bb.0:571; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma572; CHECK-NEXT:    vzext.vf2 v9, v8573; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9574; CHECK-NEXT:    ret575  %evec = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i8(<4 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")576  ret <4 x float> %evec577}578 579define <4 x double> @vsitofp_v4i8_v4f64(<4 x i8> %va) strictfp {580; CHECK-LABEL: vsitofp_v4i8_v4f64:581; CHECK:       # %bb.0:582; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma583; CHECK-NEXT:    vsext.vf4 v10, v8584; CHECK-NEXT:    vfwcvt.f.x.v v8, v10585; CHECK-NEXT:    ret586  %evec = call <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i8(<4 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")587  ret <4 x double> %evec588}589 590define <4 x double> @vuitofp_v4i8_v4f64(<4 x i8> %va) strictfp {591; CHECK-LABEL: vuitofp_v4i8_v4f64:592; CHECK:       # %bb.0:593; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma594; CHECK-NEXT:    vzext.vf4 v10, v8595; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10596; CHECK-NEXT:    ret597  %evec = call <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i8(<4 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")598  ret <4 x double> %evec599}600 601define <8 x half> @vsitofp_v8i8_v8f16(<8 x i8> %va) strictfp {602; CHECK-LABEL: vsitofp_v8i8_v8f16:603; CHECK:       # %bb.0:604; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma605; CHECK-NEXT:    vfwcvt.f.x.v v9, v8606; CHECK-NEXT:    vmv1r.v v8, v9607; CHECK-NEXT:    ret608  %evec = call <8 x half> @llvm.experimental.constrained.sitofp.v8f16.v8i8(<8 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")609  ret <8 x half> %evec610}611 612define <8 x half> @vuitofp_v8i8_v8f16(<8 x i8> %va) strictfp {613; CHECK-LABEL: vuitofp_v8i8_v8f16:614; CHECK:       # %bb.0:615; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma616; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8617; CHECK-NEXT:    vmv1r.v v8, v9618; CHECK-NEXT:    ret619  %evec = call <8 x half> @llvm.experimental.constrained.uitofp.v8f16.v8i8(<8 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")620  ret <8 x half> %evec621}622 623define <8 x float> @vsitofp_v8i8_v8f32(<8 x i8> %va) strictfp {624; CHECK-LABEL: vsitofp_v8i8_v8f32:625; CHECK:       # %bb.0:626; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma627; CHECK-NEXT:    vsext.vf2 v10, v8628; CHECK-NEXT:    vfwcvt.f.x.v v8, v10629; CHECK-NEXT:    ret630  %evec = call <8 x float> @llvm.experimental.constrained.sitofp.v8f32.v8i8(<8 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")631  ret <8 x float> %evec632}633 634define <8 x float> @vuitofp_v8i8_v8f32(<8 x i8> %va) strictfp {635; CHECK-LABEL: vuitofp_v8i8_v8f32:636; CHECK:       # %bb.0:637; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma638; CHECK-NEXT:    vzext.vf2 v10, v8639; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10640; CHECK-NEXT:    ret641  %evec = call <8 x float> @llvm.experimental.constrained.uitofp.v8f32.v8i8(<8 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")642  ret <8 x float> %evec643}644 645define <8 x double> @vsitofp_v8i8_v8f64(<8 x i8> %va) strictfp {646; CHECK-LABEL: vsitofp_v8i8_v8f64:647; CHECK:       # %bb.0:648; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma649; CHECK-NEXT:    vsext.vf4 v12, v8650; CHECK-NEXT:    vfwcvt.f.x.v v8, v12651; CHECK-NEXT:    ret652  %evec = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i8(<8 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")653  ret <8 x double> %evec654}655 656define <8 x double> @vuitofp_v8i8_v8f64(<8 x i8> %va) strictfp {657; CHECK-LABEL: vuitofp_v8i8_v8f64:658; CHECK:       # %bb.0:659; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma660; CHECK-NEXT:    vzext.vf4 v12, v8661; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12662; CHECK-NEXT:    ret663  %evec = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i8(<8 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")664  ret <8 x double> %evec665}666 667define <16 x half> @vsitofp_v16i8_v16f16(<16 x i8> %va) strictfp {668; CHECK-LABEL: vsitofp_v16i8_v16f16:669; CHECK:       # %bb.0:670; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma671; CHECK-NEXT:    vmv1r.v v10, v8672; CHECK-NEXT:    vfwcvt.f.x.v v8, v10673; CHECK-NEXT:    ret674  %evec = call <16 x half> @llvm.experimental.constrained.sitofp.v16f16.v16i8(<16 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")675  ret <16 x half> %evec676}677 678define <16 x half> @vuitofp_v16i8_v16f16(<16 x i8> %va) strictfp {679; CHECK-LABEL: vuitofp_v16i8_v16f16:680; CHECK:       # %bb.0:681; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma682; CHECK-NEXT:    vmv1r.v v10, v8683; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10684; CHECK-NEXT:    ret685  %evec = call <16 x half> @llvm.experimental.constrained.uitofp.v16f16.v16i8(<16 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")686  ret <16 x half> %evec687}688 689define <16 x float> @vsitofp_v16i8_v16f32(<16 x i8> %va) strictfp {690; CHECK-LABEL: vsitofp_v16i8_v16f32:691; CHECK:       # %bb.0:692; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma693; CHECK-NEXT:    vsext.vf2 v12, v8694; CHECK-NEXT:    vfwcvt.f.x.v v8, v12695; CHECK-NEXT:    ret696  %evec = call <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i8(<16 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")697  ret <16 x float> %evec698}699 700define <16 x float> @vuitofp_v16i8_v16f32(<16 x i8> %va) strictfp {701; CHECK-LABEL: vuitofp_v16i8_v16f32:702; CHECK:       # %bb.0:703; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma704; CHECK-NEXT:    vzext.vf2 v12, v8705; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12706; CHECK-NEXT:    ret707  %evec = call <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i8(<16 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")708  ret <16 x float> %evec709}710 711define <32 x half> @vsitofp_v32i8_v32f16(<32 x i8> %va) strictfp {712; CHECK-LABEL: vsitofp_v32i8_v32f16:713; CHECK:       # %bb.0:714; CHECK-NEXT:    vsetivli zero, 1, e8, m1, ta, ma715; CHECK-NEXT:    vmv2r.v v12, v8716; CHECK-NEXT:    li a0, 32717; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma718; CHECK-NEXT:    vfwcvt.f.x.v v8, v12719; CHECK-NEXT:    ret720  %evec = call <32 x half> @llvm.experimental.constrained.sitofp.v32f16.v32i8(<32 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")721  ret <32 x half> %evec722}723 724define <32 x half> @vuitofp_v32i8_v32f16(<32 x i8> %va) strictfp {725; CHECK-LABEL: vuitofp_v32i8_v32f16:726; CHECK:       # %bb.0:727; CHECK-NEXT:    vsetivli zero, 1, e8, m1, ta, ma728; CHECK-NEXT:    vmv2r.v v12, v8729; CHECK-NEXT:    li a0, 32730; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma731; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12732; CHECK-NEXT:    ret733  %evec = call <32 x half> @llvm.experimental.constrained.uitofp.v32f16.v32i8(<32 x i8> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")734  ret <32 x half> %evec735}736 737define <1 x half> @vsitofp_v1i16_v1f16(<1 x i16> %va) strictfp {738; CHECK-LABEL: vsitofp_v1i16_v1f16:739; CHECK:       # %bb.0:740; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma741; CHECK-NEXT:    vfcvt.f.x.v v8, v8742; CHECK-NEXT:    ret743  %evec = call <1 x half> @llvm.experimental.constrained.sitofp.v1f16.v1i16(<1 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")744  ret <1 x half> %evec745}746 747define <1 x half> @vuitofp_v1i16_v1f16(<1 x i16> %va) strictfp {748; CHECK-LABEL: vuitofp_v1i16_v1f16:749; CHECK:       # %bb.0:750; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma751; CHECK-NEXT:    vfcvt.f.xu.v v8, v8752; CHECK-NEXT:    ret753  %evec = call <1 x half> @llvm.experimental.constrained.uitofp.v1f16.v1i16(<1 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")754  ret <1 x half> %evec755}756 757define <1 x float> @vsitofp_v1i16_v1f32(<1 x i16> %va) strictfp {758; CHECK-LABEL: vsitofp_v1i16_v1f32:759; CHECK:       # %bb.0:760; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma761; CHECK-NEXT:    vfwcvt.f.x.v v9, v8762; CHECK-NEXT:    vmv1r.v v8, v9763; CHECK-NEXT:    ret764  %evec = call <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i16(<1 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")765  ret <1 x float> %evec766}767 768define <1 x float> @vuitofp_v1i16_v1f32(<1 x i16> %va) strictfp {769; CHECK-LABEL: vuitofp_v1i16_v1f32:770; CHECK:       # %bb.0:771; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma772; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8773; CHECK-NEXT:    vmv1r.v v8, v9774; CHECK-NEXT:    ret775  %evec = call <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i16(<1 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")776  ret <1 x float> %evec777}778 779define <1 x double> @vsitofp_v1i16_v1f64(<1 x i16> %va) strictfp {780; CHECK-LABEL: vsitofp_v1i16_v1f64:781; CHECK:       # %bb.0:782; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma783; CHECK-NEXT:    vsext.vf2 v9, v8784; CHECK-NEXT:    vfwcvt.f.x.v v8, v9785; CHECK-NEXT:    ret786  %evec = call <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i16(<1 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")787  ret <1 x double> %evec788}789 790define <1 x double> @vuitofp_v1i16_v1f64(<1 x i16> %va) strictfp {791; CHECK-LABEL: vuitofp_v1i16_v1f64:792; CHECK:       # %bb.0:793; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma794; CHECK-NEXT:    vzext.vf2 v9, v8795; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9796; CHECK-NEXT:    ret797  %evec = call <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i16(<1 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")798  ret <1 x double> %evec799}800 801define <2 x half> @vsitofp_v2i16_v2f16(<2 x i16> %va) strictfp {802; CHECK-LABEL: vsitofp_v2i16_v2f16:803; CHECK:       # %bb.0:804; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma805; CHECK-NEXT:    vfcvt.f.x.v v8, v8806; CHECK-NEXT:    ret807  %evec = call <2 x half> @llvm.experimental.constrained.sitofp.v2f16.v2i16(<2 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")808  ret <2 x half> %evec809}810 811define <2 x half> @vuitofp_v2i16_v2f16(<2 x i16> %va) strictfp {812; CHECK-LABEL: vuitofp_v2i16_v2f16:813; CHECK:       # %bb.0:814; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma815; CHECK-NEXT:    vfcvt.f.xu.v v8, v8816; CHECK-NEXT:    ret817  %evec = call <2 x half> @llvm.experimental.constrained.uitofp.v2f16.v2i16(<2 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")818  ret <2 x half> %evec819}820 821define <2 x float> @vsitofp_v2i16_v2f32(<2 x i16> %va) strictfp {822; CHECK-LABEL: vsitofp_v2i16_v2f32:823; CHECK:       # %bb.0:824; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma825; CHECK-NEXT:    vfwcvt.f.x.v v9, v8826; CHECK-NEXT:    vmv1r.v v8, v9827; CHECK-NEXT:    ret828  %evec = call <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i16(<2 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")829  ret <2 x float> %evec830}831 832define <2 x float> @vuitofp_v2i16_v2f32(<2 x i16> %va) strictfp {833; CHECK-LABEL: vuitofp_v2i16_v2f32:834; CHECK:       # %bb.0:835; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma836; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8837; CHECK-NEXT:    vmv1r.v v8, v9838; CHECK-NEXT:    ret839  %evec = call <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i16(<2 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")840  ret <2 x float> %evec841}842 843define <2 x double> @vsitofp_v2i16_v2f64(<2 x i16> %va) strictfp {844; CHECK-LABEL: vsitofp_v2i16_v2f64:845; CHECK:       # %bb.0:846; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma847; CHECK-NEXT:    vsext.vf2 v9, v8848; CHECK-NEXT:    vfwcvt.f.x.v v8, v9849; CHECK-NEXT:    ret850  %evec = call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i16(<2 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")851  ret <2 x double> %evec852}853 854define <2 x double> @vuitofp_v2i16_v2f64(<2 x i16> %va) strictfp {855; CHECK-LABEL: vuitofp_v2i16_v2f64:856; CHECK:       # %bb.0:857; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma858; CHECK-NEXT:    vzext.vf2 v9, v8859; CHECK-NEXT:    vfwcvt.f.xu.v v8, v9860; CHECK-NEXT:    ret861  %evec = call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i16(<2 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")862  ret <2 x double> %evec863}864 865define <4 x half> @vsitofp_v4i16_v4f16(<4 x i16> %va) strictfp {866; CHECK-LABEL: vsitofp_v4i16_v4f16:867; CHECK:       # %bb.0:868; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma869; CHECK-NEXT:    vfcvt.f.x.v v8, v8870; CHECK-NEXT:    ret871  %evec = call <4 x half> @llvm.experimental.constrained.sitofp.v4f16.v4i16(<4 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")872  ret <4 x half> %evec873}874 875define <4 x half> @vuitofp_v4i16_v4f16(<4 x i16> %va) strictfp {876; CHECK-LABEL: vuitofp_v4i16_v4f16:877; CHECK:       # %bb.0:878; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma879; CHECK-NEXT:    vfcvt.f.xu.v v8, v8880; CHECK-NEXT:    ret881  %evec = call <4 x half> @llvm.experimental.constrained.uitofp.v4f16.v4i16(<4 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")882  ret <4 x half> %evec883}884 885define <4 x float> @vsitofp_v4i16_v4f32(<4 x i16> %va) strictfp {886; CHECK-LABEL: vsitofp_v4i16_v4f32:887; CHECK:       # %bb.0:888; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma889; CHECK-NEXT:    vfwcvt.f.x.v v9, v8890; CHECK-NEXT:    vmv1r.v v8, v9891; CHECK-NEXT:    ret892  %evec = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i16(<4 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")893  ret <4 x float> %evec894}895 896define <4 x float> @vuitofp_v4i16_v4f32(<4 x i16> %va) strictfp {897; CHECK-LABEL: vuitofp_v4i16_v4f32:898; CHECK:       # %bb.0:899; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma900; CHECK-NEXT:    vfwcvt.f.xu.v v9, v8901; CHECK-NEXT:    vmv1r.v v8, v9902; CHECK-NEXT:    ret903  %evec = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i16(<4 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")904  ret <4 x float> %evec905}906 907define <4 x double> @vsitofp_v4i16_v4f64(<4 x i16> %va) strictfp {908; CHECK-LABEL: vsitofp_v4i16_v4f64:909; CHECK:       # %bb.0:910; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma911; CHECK-NEXT:    vsext.vf2 v10, v8912; CHECK-NEXT:    vfwcvt.f.x.v v8, v10913; CHECK-NEXT:    ret914  %evec = call <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i16(<4 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")915  ret <4 x double> %evec916}917 918define <4 x double> @vuitofp_v4i16_v4f64(<4 x i16> %va) strictfp {919; CHECK-LABEL: vuitofp_v4i16_v4f64:920; CHECK:       # %bb.0:921; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma922; CHECK-NEXT:    vzext.vf2 v10, v8923; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10924; CHECK-NEXT:    ret925  %evec = call <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i16(<4 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")926  ret <4 x double> %evec927}928 929define <8 x half> @vsitofp_v8i16_v8f16(<8 x i16> %va) strictfp {930; CHECK-LABEL: vsitofp_v8i16_v8f16:931; CHECK:       # %bb.0:932; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma933; CHECK-NEXT:    vfcvt.f.x.v v8, v8934; CHECK-NEXT:    ret935  %evec = call <8 x half> @llvm.experimental.constrained.sitofp.v8f16.v8i16(<8 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")936  ret <8 x half> %evec937}938 939define <8 x half> @vuitofp_v8i16_v8f16(<8 x i16> %va) strictfp {940; CHECK-LABEL: vuitofp_v8i16_v8f16:941; CHECK:       # %bb.0:942; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma943; CHECK-NEXT:    vfcvt.f.xu.v v8, v8944; CHECK-NEXT:    ret945  %evec = call <8 x half> @llvm.experimental.constrained.uitofp.v8f16.v8i16(<8 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")946  ret <8 x half> %evec947}948 949define <8 x float> @vsitofp_v8i16_v8f32(<8 x i16> %va) strictfp {950; CHECK-LABEL: vsitofp_v8i16_v8f32:951; CHECK:       # %bb.0:952; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma953; CHECK-NEXT:    vmv1r.v v10, v8954; CHECK-NEXT:    vfwcvt.f.x.v v8, v10955; CHECK-NEXT:    ret956  %evec = call <8 x float> @llvm.experimental.constrained.sitofp.v8f32.v8i16(<8 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")957  ret <8 x float> %evec958}959 960define <8 x float> @vuitofp_v8i16_v8f32(<8 x i16> %va) strictfp {961; CHECK-LABEL: vuitofp_v8i16_v8f32:962; CHECK:       # %bb.0:963; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma964; CHECK-NEXT:    vmv1r.v v10, v8965; CHECK-NEXT:    vfwcvt.f.xu.v v8, v10966; CHECK-NEXT:    ret967  %evec = call <8 x float> @llvm.experimental.constrained.uitofp.v8f32.v8i16(<8 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")968  ret <8 x float> %evec969}970 971define <8 x double> @vsitofp_v8i16_v8f64(<8 x i16> %va) strictfp {972; CHECK-LABEL: vsitofp_v8i16_v8f64:973; CHECK:       # %bb.0:974; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma975; CHECK-NEXT:    vsext.vf2 v12, v8976; CHECK-NEXT:    vfwcvt.f.x.v v8, v12977; CHECK-NEXT:    ret978  %evec = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i16(<8 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")979  ret <8 x double> %evec980}981 982define <8 x double> @vuitofp_v8i16_v8f64(<8 x i16> %va) strictfp {983; CHECK-LABEL: vuitofp_v8i16_v8f64:984; CHECK:       # %bb.0:985; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma986; CHECK-NEXT:    vzext.vf2 v12, v8987; CHECK-NEXT:    vfwcvt.f.xu.v v8, v12988; CHECK-NEXT:    ret989  %evec = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i16(<8 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")990  ret <8 x double> %evec991}992 993define <16 x half> @vsitofp_v16i16_v16f16(<16 x i16> %va) strictfp {994; CHECK-LABEL: vsitofp_v16i16_v16f16:995; CHECK:       # %bb.0:996; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma997; CHECK-NEXT:    vfcvt.f.x.v v8, v8998; CHECK-NEXT:    ret999  %evec = call <16 x half> @llvm.experimental.constrained.sitofp.v16f16.v16i16(<16 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1000  ret <16 x half> %evec1001}1002 1003define <16 x half> @vuitofp_v16i16_v16f16(<16 x i16> %va) strictfp {1004; CHECK-LABEL: vuitofp_v16i16_v16f16:1005; CHECK:       # %bb.0:1006; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma1007; CHECK-NEXT:    vfcvt.f.xu.v v8, v81008; CHECK-NEXT:    ret1009  %evec = call <16 x half> @llvm.experimental.constrained.uitofp.v16f16.v16i16(<16 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1010  ret <16 x half> %evec1011}1012 1013define <16 x float> @vsitofp_v16i16_v16f32(<16 x i16> %va) strictfp {1014; CHECK-LABEL: vsitofp_v16i16_v16f32:1015; CHECK:       # %bb.0:1016; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma1017; CHECK-NEXT:    vmv2r.v v12, v81018; CHECK-NEXT:    vfwcvt.f.x.v v8, v121019; CHECK-NEXT:    ret1020  %evec = call <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i16(<16 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1021  ret <16 x float> %evec1022}1023 1024define <16 x float> @vuitofp_v16i16_v16f32(<16 x i16> %va) strictfp {1025; CHECK-LABEL: vuitofp_v16i16_v16f32:1026; CHECK:       # %bb.0:1027; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma1028; CHECK-NEXT:    vmv2r.v v12, v81029; CHECK-NEXT:    vfwcvt.f.xu.v v8, v121030; CHECK-NEXT:    ret1031  %evec = call <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i16(<16 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1032  ret <16 x float> %evec1033}1034 1035define <32 x half> @vsitofp_v32i16_v32f16(<32 x i16> %va) strictfp {1036; CHECK-LABEL: vsitofp_v32i16_v32f16:1037; CHECK:       # %bb.0:1038; CHECK-NEXT:    li a0, 321039; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma1040; CHECK-NEXT:    vfcvt.f.x.v v8, v81041; CHECK-NEXT:    ret1042  %evec = call <32 x half> @llvm.experimental.constrained.sitofp.v32f16.v32i16(<32 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1043  ret <32 x half> %evec1044}1045 1046define <32 x half> @vuitofp_v32i16_v32f16(<32 x i16> %va) strictfp {1047; CHECK-LABEL: vuitofp_v32i16_v32f16:1048; CHECK:       # %bb.0:1049; CHECK-NEXT:    li a0, 321050; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma1051; CHECK-NEXT:    vfcvt.f.xu.v v8, v81052; CHECK-NEXT:    ret1053  %evec = call <32 x half> @llvm.experimental.constrained.uitofp.v32f16.v32i16(<32 x i16> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1054  ret <32 x half> %evec1055}1056 1057define <1 x half> @vsitofp_v1i32_v1f16(<1 x i32> %va) strictfp {1058; CHECK-LABEL: vsitofp_v1i32_v1f16:1059; CHECK:       # %bb.0:1060; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1061; CHECK-NEXT:    vfncvt.f.x.w v9, v81062; CHECK-NEXT:    vmv1r.v v8, v91063; CHECK-NEXT:    ret1064  %evec = call <1 x half> @llvm.experimental.constrained.sitofp.v1f16.v1i32(<1 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1065  ret <1 x half> %evec1066}1067 1068define <1 x half> @vuitofp_v1i32_v1f16(<1 x i32> %va) strictfp {1069; CHECK-LABEL: vuitofp_v1i32_v1f16:1070; CHECK:       # %bb.0:1071; CHECK-NEXT:    vsetivli zero, 1, e16, mf4, ta, ma1072; CHECK-NEXT:    vfncvt.f.xu.w v9, v81073; CHECK-NEXT:    vmv1r.v v8, v91074; CHECK-NEXT:    ret1075  %evec = call <1 x half> @llvm.experimental.constrained.uitofp.v1f16.v1i32(<1 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1076  ret <1 x half> %evec1077}1078 1079define <1 x float> @vsitofp_v1i32_v1f32(<1 x i32> %va) strictfp {1080; CHECK-LABEL: vsitofp_v1i32_v1f32:1081; CHECK:       # %bb.0:1082; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma1083; CHECK-NEXT:    vfcvt.f.x.v v8, v81084; CHECK-NEXT:    ret1085  %evec = call <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i32(<1 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1086  ret <1 x float> %evec1087}1088 1089define <1 x float> @vuitofp_v1i32_v1f32(<1 x i32> %va) strictfp {1090; CHECK-LABEL: vuitofp_v1i32_v1f32:1091; CHECK:       # %bb.0:1092; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma1093; CHECK-NEXT:    vfcvt.f.xu.v v8, v81094; CHECK-NEXT:    ret1095  %evec = call <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i32(<1 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1096  ret <1 x float> %evec1097}1098 1099define <1 x double> @vsitofp_v1i32_v1f64(<1 x i32> %va) strictfp {1100; CHECK-LABEL: vsitofp_v1i32_v1f64:1101; CHECK:       # %bb.0:1102; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma1103; CHECK-NEXT:    vfwcvt.f.x.v v9, v81104; CHECK-NEXT:    vmv1r.v v8, v91105; CHECK-NEXT:    ret1106  %evec = call <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i32(<1 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1107  ret <1 x double> %evec1108}1109 1110define <1 x double> @vuitofp_v1i32_v1f64(<1 x i32> %va) strictfp {1111; CHECK-LABEL: vuitofp_v1i32_v1f64:1112; CHECK:       # %bb.0:1113; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma1114; CHECK-NEXT:    vfwcvt.f.xu.v v9, v81115; CHECK-NEXT:    vmv1r.v v8, v91116; CHECK-NEXT:    ret1117  %evec = call <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i32(<1 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1118  ret <1 x double> %evec1119}1120 1121define <2 x half> @vsitofp_v2i32_v2f16(<2 x i32> %va) strictfp {1122; CHECK-LABEL: vsitofp_v2i32_v2f16:1123; CHECK:       # %bb.0:1124; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1125; CHECK-NEXT:    vfncvt.f.x.w v9, v81126; CHECK-NEXT:    vmv1r.v v8, v91127; CHECK-NEXT:    ret1128  %evec = call <2 x half> @llvm.experimental.constrained.sitofp.v2f16.v2i32(<2 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1129  ret <2 x half> %evec1130}1131 1132define <2 x half> @vuitofp_v2i32_v2f16(<2 x i32> %va) strictfp {1133; CHECK-LABEL: vuitofp_v2i32_v2f16:1134; CHECK:       # %bb.0:1135; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma1136; CHECK-NEXT:    vfncvt.f.xu.w v9, v81137; CHECK-NEXT:    vmv1r.v v8, v91138; CHECK-NEXT:    ret1139  %evec = call <2 x half> @llvm.experimental.constrained.uitofp.v2f16.v2i32(<2 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1140  ret <2 x half> %evec1141}1142 1143define <2 x float> @vsitofp_v2i32_v2f32(<2 x i32> %va) strictfp {1144; CHECK-LABEL: vsitofp_v2i32_v2f32:1145; CHECK:       # %bb.0:1146; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma1147; CHECK-NEXT:    vfcvt.f.x.v v8, v81148; CHECK-NEXT:    ret1149  %evec = call <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i32(<2 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1150  ret <2 x float> %evec1151}1152 1153define <2 x float> @vuitofp_v2i32_v2f32(<2 x i32> %va) strictfp {1154; CHECK-LABEL: vuitofp_v2i32_v2f32:1155; CHECK:       # %bb.0:1156; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma1157; CHECK-NEXT:    vfcvt.f.xu.v v8, v81158; CHECK-NEXT:    ret1159  %evec = call <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i32(<2 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1160  ret <2 x float> %evec1161}1162 1163define <2 x double> @vsitofp_v2i32_v2f64(<2 x i32> %va) strictfp {1164; CHECK-LABEL: vsitofp_v2i32_v2f64:1165; CHECK:       # %bb.0:1166; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma1167; CHECK-NEXT:    vfwcvt.f.x.v v9, v81168; CHECK-NEXT:    vmv1r.v v8, v91169; CHECK-NEXT:    ret1170  %evec = call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i32(<2 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1171  ret <2 x double> %evec1172}1173 1174define <2 x double> @vuitofp_v2i32_v2f64(<2 x i32> %va) strictfp {1175; CHECK-LABEL: vuitofp_v2i32_v2f64:1176; CHECK:       # %bb.0:1177; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma1178; CHECK-NEXT:    vfwcvt.f.xu.v v9, v81179; CHECK-NEXT:    vmv1r.v v8, v91180; CHECK-NEXT:    ret1181  %evec = call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i32(<2 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1182  ret <2 x double> %evec1183}1184 1185define <4 x half> @vsitofp_v4i32_v4f16(<4 x i32> %va) strictfp {1186; CHECK-LABEL: vsitofp_v4i32_v4f16:1187; CHECK:       # %bb.0:1188; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1189; CHECK-NEXT:    vfncvt.f.x.w v9, v81190; CHECK-NEXT:    vmv1r.v v8, v91191; CHECK-NEXT:    ret1192  %evec = call <4 x half> @llvm.experimental.constrained.sitofp.v4f16.v4i32(<4 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1193  ret <4 x half> %evec1194}1195 1196define <4 x half> @vuitofp_v4i32_v4f16(<4 x i32> %va) strictfp {1197; CHECK-LABEL: vuitofp_v4i32_v4f16:1198; CHECK:       # %bb.0:1199; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma1200; CHECK-NEXT:    vfncvt.f.xu.w v9, v81201; CHECK-NEXT:    vmv1r.v v8, v91202; CHECK-NEXT:    ret1203  %evec = call <4 x half> @llvm.experimental.constrained.uitofp.v4f16.v4i32(<4 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1204  ret <4 x half> %evec1205}1206 1207define <4 x float> @vsitofp_v4i32_v4f32(<4 x i32> %va) strictfp {1208; CHECK-LABEL: vsitofp_v4i32_v4f32:1209; CHECK:       # %bb.0:1210; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1211; CHECK-NEXT:    vfcvt.f.x.v v8, v81212; CHECK-NEXT:    ret1213  %evec = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i32(<4 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1214  ret <4 x float> %evec1215}1216 1217define <4 x float> @vuitofp_v4i32_v4f32(<4 x i32> %va) strictfp {1218; CHECK-LABEL: vuitofp_v4i32_v4f32:1219; CHECK:       # %bb.0:1220; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1221; CHECK-NEXT:    vfcvt.f.xu.v v8, v81222; CHECK-NEXT:    ret1223  %evec = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i32(<4 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1224  ret <4 x float> %evec1225}1226 1227define <4 x double> @vsitofp_v4i32_v4f64(<4 x i32> %va) strictfp {1228; CHECK-LABEL: vsitofp_v4i32_v4f64:1229; CHECK:       # %bb.0:1230; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1231; CHECK-NEXT:    vmv1r.v v10, v81232; CHECK-NEXT:    vfwcvt.f.x.v v8, v101233; CHECK-NEXT:    ret1234  %evec = call <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i32(<4 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1235  ret <4 x double> %evec1236}1237 1238define <4 x double> @vuitofp_v4i32_v4f64(<4 x i32> %va) strictfp {1239; CHECK-LABEL: vuitofp_v4i32_v4f64:1240; CHECK:       # %bb.0:1241; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1242; CHECK-NEXT:    vmv1r.v v10, v81243; CHECK-NEXT:    vfwcvt.f.xu.v v8, v101244; CHECK-NEXT:    ret1245  %evec = call <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i32(<4 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1246  ret <4 x double> %evec1247}1248 1249define <8 x half> @vsitofp_v8i32_v8f16(<8 x i32> %va) strictfp {1250; CHECK-LABEL: vsitofp_v8i32_v8f16:1251; CHECK:       # %bb.0:1252; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1253; CHECK-NEXT:    vfncvt.f.x.w v10, v81254; CHECK-NEXT:    vmv.v.v v8, v101255; CHECK-NEXT:    ret1256  %evec = call <8 x half> @llvm.experimental.constrained.sitofp.v8f16.v8i32(<8 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1257  ret <8 x half> %evec1258}1259 1260define <8 x half> @vuitofp_v8i32_v8f16(<8 x i32> %va) strictfp {1261; CHECK-LABEL: vuitofp_v8i32_v8f16:1262; CHECK:       # %bb.0:1263; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma1264; CHECK-NEXT:    vfncvt.f.xu.w v10, v81265; CHECK-NEXT:    vmv.v.v v8, v101266; CHECK-NEXT:    ret1267  %evec = call <8 x half> @llvm.experimental.constrained.uitofp.v8f16.v8i32(<8 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1268  ret <8 x half> %evec1269}1270 1271define <8 x float> @vsitofp_v8i32_v8f32(<8 x i32> %va) strictfp {1272; CHECK-LABEL: vsitofp_v8i32_v8f32:1273; CHECK:       # %bb.0:1274; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1275; CHECK-NEXT:    vfcvt.f.x.v v8, v81276; CHECK-NEXT:    ret1277  %evec = call <8 x float> @llvm.experimental.constrained.sitofp.v8f32.v8i32(<8 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1278  ret <8 x float> %evec1279}1280 1281define <8 x float> @vuitofp_v8i32_v8f32(<8 x i32> %va) strictfp {1282; CHECK-LABEL: vuitofp_v8i32_v8f32:1283; CHECK:       # %bb.0:1284; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1285; CHECK-NEXT:    vfcvt.f.xu.v v8, v81286; CHECK-NEXT:    ret1287  %evec = call <8 x float> @llvm.experimental.constrained.uitofp.v8f32.v8i32(<8 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1288  ret <8 x float> %evec1289}1290 1291define <8 x double> @vsitofp_v8i32_v8f64(<8 x i32> %va) strictfp {1292; CHECK-LABEL: vsitofp_v8i32_v8f64:1293; CHECK:       # %bb.0:1294; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1295; CHECK-NEXT:    vmv2r.v v12, v81296; CHECK-NEXT:    vfwcvt.f.x.v v8, v121297; CHECK-NEXT:    ret1298  %evec = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i32(<8 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1299  ret <8 x double> %evec1300}1301 1302define <8 x double> @vuitofp_v8i32_v8f64(<8 x i32> %va) strictfp {1303; CHECK-LABEL: vuitofp_v8i32_v8f64:1304; CHECK:       # %bb.0:1305; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1306; CHECK-NEXT:    vmv2r.v v12, v81307; CHECK-NEXT:    vfwcvt.f.xu.v v8, v121308; CHECK-NEXT:    ret1309  %evec = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i32(<8 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1310  ret <8 x double> %evec1311}1312 1313define <16 x half> @vsitofp_v16i32_v16f16(<16 x i32> %va) strictfp {1314; CHECK-LABEL: vsitofp_v16i32_v16f16:1315; CHECK:       # %bb.0:1316; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma1317; CHECK-NEXT:    vfncvt.f.x.w v12, v81318; CHECK-NEXT:    vmv.v.v v8, v121319; CHECK-NEXT:    ret1320  %evec = call <16 x half> @llvm.experimental.constrained.sitofp.v16f16.v16i32(<16 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1321  ret <16 x half> %evec1322}1323 1324define <16 x half> @vuitofp_v16i32_v16f16(<16 x i32> %va) strictfp {1325; CHECK-LABEL: vuitofp_v16i32_v16f16:1326; CHECK:       # %bb.0:1327; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma1328; CHECK-NEXT:    vfncvt.f.xu.w v12, v81329; CHECK-NEXT:    vmv.v.v v8, v121330; CHECK-NEXT:    ret1331  %evec = call <16 x half> @llvm.experimental.constrained.uitofp.v16f16.v16i32(<16 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1332  ret <16 x half> %evec1333}1334 1335define <16 x float> @vsitofp_v16i32_v16f32(<16 x i32> %va) strictfp {1336; CHECK-LABEL: vsitofp_v16i32_v16f32:1337; CHECK:       # %bb.0:1338; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma1339; CHECK-NEXT:    vfcvt.f.x.v v8, v81340; CHECK-NEXT:    ret1341  %evec = call <16 x float> @llvm.experimental.constrained.sitofp.v16f32.v16i32(<16 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1342  ret <16 x float> %evec1343}1344 1345define <16 x float> @vuitofp_v16i32_v16f32(<16 x i32> %va) strictfp {1346; CHECK-LABEL: vuitofp_v16i32_v16f32:1347; CHECK:       # %bb.0:1348; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma1349; CHECK-NEXT:    vfcvt.f.xu.v v8, v81350; CHECK-NEXT:    ret1351  %evec = call <16 x float> @llvm.experimental.constrained.uitofp.v16f32.v16i32(<16 x i32> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1352  ret <16 x float> %evec1353}1354 1355define <1 x half> @vsitofp_v1i64_v1f16(<1 x i64> %va) strictfp {1356; CHECK-LABEL: vsitofp_v1i64_v1f16:1357; CHECK:       # %bb.0:1358; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma1359; CHECK-NEXT:    vfncvt.f.x.w v9, v81360; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma1361; CHECK-NEXT:    vfncvt.f.f.w v8, v91362; CHECK-NEXT:    ret1363  %evec = call <1 x half> @llvm.experimental.constrained.sitofp.v1f16.v1i64(<1 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1364  ret <1 x half> %evec1365}1366 1367define <1 x half> @vuitofp_v1i64_v1f16(<1 x i64> %va) strictfp {1368; CHECK-LABEL: vuitofp_v1i64_v1f16:1369; CHECK:       # %bb.0:1370; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma1371; CHECK-NEXT:    vfncvt.f.xu.w v9, v81372; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma1373; CHECK-NEXT:    vfncvt.f.f.w v8, v91374; CHECK-NEXT:    ret1375  %evec = call <1 x half> @llvm.experimental.constrained.uitofp.v1f16.v1i64(<1 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1376  ret <1 x half> %evec1377}1378 1379define <1 x float> @vsitofp_v1i64_v1f32(<1 x i64> %va) strictfp {1380; CHECK-LABEL: vsitofp_v1i64_v1f32:1381; CHECK:       # %bb.0:1382; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma1383; CHECK-NEXT:    vfncvt.f.x.w v9, v81384; CHECK-NEXT:    vmv1r.v v8, v91385; CHECK-NEXT:    ret1386  %evec = call <1 x float> @llvm.experimental.constrained.sitofp.v1f32.v1i64(<1 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1387  ret <1 x float> %evec1388}1389 1390define <1 x float> @vuitofp_v1i64_v1f32(<1 x i64> %va) strictfp {1391; CHECK-LABEL: vuitofp_v1i64_v1f32:1392; CHECK:       # %bb.0:1393; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, ma1394; CHECK-NEXT:    vfncvt.f.xu.w v9, v81395; CHECK-NEXT:    vmv1r.v v8, v91396; CHECK-NEXT:    ret1397  %evec = call <1 x float> @llvm.experimental.constrained.uitofp.v1f32.v1i64(<1 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1398  ret <1 x float> %evec1399}1400 1401define <1 x double> @vsitofp_v1i64_v1f64(<1 x i64> %va) strictfp {1402; CHECK-LABEL: vsitofp_v1i64_v1f64:1403; CHECK:       # %bb.0:1404; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma1405; CHECK-NEXT:    vfcvt.f.x.v v8, v81406; CHECK-NEXT:    ret1407  %evec = call <1 x double> @llvm.experimental.constrained.sitofp.v1f64.v1i64(<1 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1408  ret <1 x double> %evec1409}1410 1411define <1 x double> @vuitofp_v1i64_v1f64(<1 x i64> %va) strictfp {1412; CHECK-LABEL: vuitofp_v1i64_v1f64:1413; CHECK:       # %bb.0:1414; CHECK-NEXT:    vsetivli zero, 1, e64, m1, ta, ma1415; CHECK-NEXT:    vfcvt.f.xu.v v8, v81416; CHECK-NEXT:    ret1417  %evec = call <1 x double> @llvm.experimental.constrained.uitofp.v1f64.v1i64(<1 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1418  ret <1 x double> %evec1419}1420 1421define <2 x half> @vsitofp_v2i64_v2f16(<2 x i64> %va) strictfp {1422; CHECK-LABEL: vsitofp_v2i64_v2f16:1423; CHECK:       # %bb.0:1424; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma1425; CHECK-NEXT:    vfncvt.f.x.w v9, v81426; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma1427; CHECK-NEXT:    vfncvt.f.f.w v8, v91428; CHECK-NEXT:    ret1429  %evec = call <2 x half> @llvm.experimental.constrained.sitofp.v2f16.v2i64(<2 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1430  ret <2 x half> %evec1431}1432 1433define <2 x half> @vuitofp_v2i64_v2f16(<2 x i64> %va) strictfp {1434; CHECK-LABEL: vuitofp_v2i64_v2f16:1435; CHECK:       # %bb.0:1436; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma1437; CHECK-NEXT:    vfncvt.f.xu.w v9, v81438; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma1439; CHECK-NEXT:    vfncvt.f.f.w v8, v91440; CHECK-NEXT:    ret1441  %evec = call <2 x half> @llvm.experimental.constrained.uitofp.v2f16.v2i64(<2 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1442  ret <2 x half> %evec1443}1444 1445define <2 x float> @vsitofp_v2i64_v2f32(<2 x i64> %va) strictfp {1446; CHECK-LABEL: vsitofp_v2i64_v2f32:1447; CHECK:       # %bb.0:1448; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma1449; CHECK-NEXT:    vfncvt.f.x.w v9, v81450; CHECK-NEXT:    vmv1r.v v8, v91451; CHECK-NEXT:    ret1452  %evec = call <2 x float> @llvm.experimental.constrained.sitofp.v2f32.v2i64(<2 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1453  ret <2 x float> %evec1454}1455 1456define <2 x float> @vuitofp_v2i64_v2f32(<2 x i64> %va) strictfp {1457; CHECK-LABEL: vuitofp_v2i64_v2f32:1458; CHECK:       # %bb.0:1459; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma1460; CHECK-NEXT:    vfncvt.f.xu.w v9, v81461; CHECK-NEXT:    vmv1r.v v8, v91462; CHECK-NEXT:    ret1463  %evec = call <2 x float> @llvm.experimental.constrained.uitofp.v2f32.v2i64(<2 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1464  ret <2 x float> %evec1465}1466 1467define <2 x double> @vsitofp_v2i64_v2f64(<2 x i64> %va) strictfp {1468; CHECK-LABEL: vsitofp_v2i64_v2f64:1469; CHECK:       # %bb.0:1470; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma1471; CHECK-NEXT:    vfcvt.f.x.v v8, v81472; CHECK-NEXT:    ret1473  %evec = call <2 x double> @llvm.experimental.constrained.sitofp.v2f64.v2i64(<2 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1474  ret <2 x double> %evec1475}1476 1477define <2 x double> @vuitofp_v2i64_v2f64(<2 x i64> %va) strictfp {1478; CHECK-LABEL: vuitofp_v2i64_v2f64:1479; CHECK:       # %bb.0:1480; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma1481; CHECK-NEXT:    vfcvt.f.xu.v v8, v81482; CHECK-NEXT:    ret1483  %evec = call <2 x double> @llvm.experimental.constrained.uitofp.v2f64.v2i64(<2 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1484  ret <2 x double> %evec1485}1486 1487define <4 x half> @vsitofp_v4i64_v4f16(<4 x i64> %va) strictfp {1488; CHECK-LABEL: vsitofp_v4i64_v4f16:1489; CHECK:       # %bb.0:1490; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1491; CHECK-NEXT:    vfncvt.f.x.w v10, v81492; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma1493; CHECK-NEXT:    vfncvt.f.f.w v8, v101494; CHECK-NEXT:    ret1495  %evec = call <4 x half> @llvm.experimental.constrained.sitofp.v4f16.v4i64(<4 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1496  ret <4 x half> %evec1497}1498 1499define <4 x half> @vuitofp_v4i64_v4f16(<4 x i64> %va) strictfp {1500; CHECK-LABEL: vuitofp_v4i64_v4f16:1501; CHECK:       # %bb.0:1502; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1503; CHECK-NEXT:    vfncvt.f.xu.w v10, v81504; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma1505; CHECK-NEXT:    vfncvt.f.f.w v8, v101506; CHECK-NEXT:    ret1507  %evec = call <4 x half> @llvm.experimental.constrained.uitofp.v4f16.v4i64(<4 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1508  ret <4 x half> %evec1509}1510 1511define <4 x float> @vsitofp_v4i64_v4f32(<4 x i64> %va) strictfp {1512; CHECK-LABEL: vsitofp_v4i64_v4f32:1513; CHECK:       # %bb.0:1514; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1515; CHECK-NEXT:    vfncvt.f.x.w v10, v81516; CHECK-NEXT:    vmv.v.v v8, v101517; CHECK-NEXT:    ret1518  %evec = call <4 x float> @llvm.experimental.constrained.sitofp.v4f32.v4i64(<4 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1519  ret <4 x float> %evec1520}1521 1522define <4 x float> @vuitofp_v4i64_v4f32(<4 x i64> %va) strictfp {1523; CHECK-LABEL: vuitofp_v4i64_v4f32:1524; CHECK:       # %bb.0:1525; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma1526; CHECK-NEXT:    vfncvt.f.xu.w v10, v81527; CHECK-NEXT:    vmv.v.v v8, v101528; CHECK-NEXT:    ret1529  %evec = call <4 x float> @llvm.experimental.constrained.uitofp.v4f32.v4i64(<4 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1530  ret <4 x float> %evec1531}1532 1533define <4 x double> @vsitofp_v4i64_v4f64(<4 x i64> %va) strictfp {1534; CHECK-LABEL: vsitofp_v4i64_v4f64:1535; CHECK:       # %bb.0:1536; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma1537; CHECK-NEXT:    vfcvt.f.x.v v8, v81538; CHECK-NEXT:    ret1539  %evec = call <4 x double> @llvm.experimental.constrained.sitofp.v4f64.v4i64(<4 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1540  ret <4 x double> %evec1541}1542 1543define <4 x double> @vuitofp_v4i64_v4f64(<4 x i64> %va) strictfp {1544; CHECK-LABEL: vuitofp_v4i64_v4f64:1545; CHECK:       # %bb.0:1546; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma1547; CHECK-NEXT:    vfcvt.f.xu.v v8, v81548; CHECK-NEXT:    ret1549  %evec = call <4 x double> @llvm.experimental.constrained.uitofp.v4f64.v4i64(<4 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1550  ret <4 x double> %evec1551}1552 1553define <8 x half> @vsitofp_v8i64_v8f16(<8 x i64> %va) strictfp {1554; CHECK-LABEL: vsitofp_v8i64_v8f16:1555; CHECK:       # %bb.0:1556; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1557; CHECK-NEXT:    vfncvt.f.x.w v12, v81558; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma1559; CHECK-NEXT:    vfncvt.f.f.w v8, v121560; CHECK-NEXT:    ret1561  %evec = call <8 x half> @llvm.experimental.constrained.sitofp.v8f16.v8i64(<8 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1562  ret <8 x half> %evec1563}1564 1565define <8 x half> @vuitofp_v8i64_v8f16(<8 x i64> %va) strictfp {1566; CHECK-LABEL: vuitofp_v8i64_v8f16:1567; CHECK:       # %bb.0:1568; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1569; CHECK-NEXT:    vfncvt.f.xu.w v12, v81570; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma1571; CHECK-NEXT:    vfncvt.f.f.w v8, v121572; CHECK-NEXT:    ret1573  %evec = call <8 x half> @llvm.experimental.constrained.uitofp.v8f16.v8i64(<8 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1574  ret <8 x half> %evec1575}1576 1577define <8 x float> @vsitofp_v8i64_v8f32(<8 x i64> %va) strictfp {1578; CHECK-LABEL: vsitofp_v8i64_v8f32:1579; CHECK:       # %bb.0:1580; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1581; CHECK-NEXT:    vfncvt.f.x.w v12, v81582; CHECK-NEXT:    vmv.v.v v8, v121583; CHECK-NEXT:    ret1584  %evec = call <8 x float> @llvm.experimental.constrained.sitofp.v8f32.v8i64(<8 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1585  ret <8 x float> %evec1586}1587 1588define <8 x float> @vuitofp_v8i64_v8f32(<8 x i64> %va) strictfp {1589; CHECK-LABEL: vuitofp_v8i64_v8f32:1590; CHECK:       # %bb.0:1591; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma1592; CHECK-NEXT:    vfncvt.f.xu.w v12, v81593; CHECK-NEXT:    vmv.v.v v8, v121594; CHECK-NEXT:    ret1595  %evec = call <8 x float> @llvm.experimental.constrained.uitofp.v8f32.v8i64(<8 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1596  ret <8 x float> %evec1597}1598 1599define <8 x double> @vsitofp_v8i64_v8f64(<8 x i64> %va) strictfp {1600; CHECK-LABEL: vsitofp_v8i64_v8f64:1601; CHECK:       # %bb.0:1602; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma1603; CHECK-NEXT:    vfcvt.f.x.v v8, v81604; CHECK-NEXT:    ret1605  %evec = call <8 x double> @llvm.experimental.constrained.sitofp.v8f64.v8i64(<8 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1606  ret <8 x double> %evec1607}1608 1609define <8 x double> @vuitofp_v8i64_v8f64(<8 x i64> %va) strictfp {1610; CHECK-LABEL: vuitofp_v8i64_v8f64:1611; CHECK:       # %bb.0:1612; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma1613; CHECK-NEXT:    vfcvt.f.xu.v v8, v81614; CHECK-NEXT:    ret1615  %evec = call <8 x double> @llvm.experimental.constrained.uitofp.v8f64.v8i64(<8 x i64> %va, metadata !"round.dynamic", metadata !"fpexcept.strict")1616  ret <8 x double> %evec1617}1618