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