2728 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v,+zvfbfmin \3; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \4; RUN: --check-prefixes=CHECK,ZVFH5; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v,+zvfbfmin \6; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \7; RUN: --check-prefixes=CHECK,ZVFH8; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfhmin,+v,+zvfbfmin \9; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \10; RUN: --check-prefixes=CHECK,ZVFHMIN11; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfhmin,+v,+zvfbfmin \12; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \13; RUN: --check-prefixes=CHECK,ZVFHMIN14 15define <vscale x 1 x bfloat> @vsitofp_nxv1i1_nxv1bf16(<vscale x 1 x i1> %va) {16; CHECK-LABEL: vsitofp_nxv1i1_nxv1bf16:17; CHECK: # %bb.0:18; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma19; CHECK-NEXT: vmv.v.i v8, 020; CHECK-NEXT: vmerge.vim v8, v8, -1, v021; CHECK-NEXT: vfwcvt.f.x.v v9, v822; CHECK-NEXT: vfncvtbf16.f.f.w v8, v923; CHECK-NEXT: ret24 %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x bfloat>25 ret <vscale x 1 x bfloat> %evec26}27 28define <vscale x 1 x bfloat> @vuitofp_nxv1i1_nxv1bf16(<vscale x 1 x i1> %va) {29; CHECK-LABEL: vuitofp_nxv1i1_nxv1bf16:30; CHECK: # %bb.0:31; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma32; CHECK-NEXT: vmv.v.i v8, 033; CHECK-NEXT: vmerge.vim v8, v8, 1, v034; CHECK-NEXT: vfwcvt.f.xu.v v9, v835; CHECK-NEXT: vfncvtbf16.f.f.w v8, v936; CHECK-NEXT: ret37 %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x bfloat>38 ret <vscale x 1 x bfloat> %evec39}40 41define <vscale x 2 x bfloat> @vsitofp_nxv2i1_nxv2bf16(<vscale x 2 x i1> %va) {42; CHECK-LABEL: vsitofp_nxv2i1_nxv2bf16:43; CHECK: # %bb.0:44; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma45; CHECK-NEXT: vmv.v.i v8, 046; CHECK-NEXT: vmerge.vim v8, v8, -1, v047; CHECK-NEXT: vfwcvt.f.x.v v9, v848; CHECK-NEXT: vfncvtbf16.f.f.w v8, v949; CHECK-NEXT: ret50 %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x bfloat>51 ret <vscale x 2 x bfloat> %evec52}53 54define <vscale x 2 x bfloat> @vuitofp_nxv2i1_nxv2bf16(<vscale x 2 x i1> %va) {55; CHECK-LABEL: vuitofp_nxv2i1_nxv2bf16:56; CHECK: # %bb.0:57; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma58; CHECK-NEXT: vmv.v.i v8, 059; CHECK-NEXT: vmerge.vim v8, v8, 1, v060; CHECK-NEXT: vfwcvt.f.xu.v v9, v861; CHECK-NEXT: vfncvtbf16.f.f.w v8, v962; CHECK-NEXT: ret63 %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x bfloat>64 ret <vscale x 2 x bfloat> %evec65}66 67define <vscale x 4 x bfloat> @vsitofp_nxv4i1_nxv4bf16(<vscale x 4 x i1> %va) {68; CHECK-LABEL: vsitofp_nxv4i1_nxv4bf16:69; CHECK: # %bb.0:70; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma71; CHECK-NEXT: vmv.v.i v8, 072; CHECK-NEXT: vmerge.vim v8, v8, -1, v073; CHECK-NEXT: vfwcvt.f.x.v v10, v874; CHECK-NEXT: vfncvtbf16.f.f.w v8, v1075; CHECK-NEXT: ret76 %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x bfloat>77 ret <vscale x 4 x bfloat> %evec78}79 80define <vscale x 4 x bfloat> @vuitofp_nxv4i1_nxv4bf16(<vscale x 4 x i1> %va) {81; CHECK-LABEL: vuitofp_nxv4i1_nxv4bf16:82; CHECK: # %bb.0:83; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma84; CHECK-NEXT: vmv.v.i v8, 085; CHECK-NEXT: vmerge.vim v8, v8, 1, v086; CHECK-NEXT: vfwcvt.f.xu.v v10, v887; CHECK-NEXT: vfncvtbf16.f.f.w v8, v1088; CHECK-NEXT: ret89 %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x bfloat>90 ret <vscale x 4 x bfloat> %evec91}92 93define <vscale x 8 x bfloat> @vsitofp_nxv8i1_nxv8bf16(<vscale x 8 x i1> %va) {94; CHECK-LABEL: vsitofp_nxv8i1_nxv8bf16:95; CHECK: # %bb.0:96; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma97; CHECK-NEXT: vmv.v.i v8, 098; CHECK-NEXT: vmerge.vim v8, v8, -1, v099; CHECK-NEXT: vfwcvt.f.x.v v12, v8100; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12101; CHECK-NEXT: ret102 %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x bfloat>103 ret <vscale x 8 x bfloat> %evec104}105 106define <vscale x 8 x bfloat> @vuitofp_nxv8i1_nxv8bf16(<vscale x 8 x i1> %va) {107; CHECK-LABEL: vuitofp_nxv8i1_nxv8bf16:108; CHECK: # %bb.0:109; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma110; CHECK-NEXT: vmv.v.i v8, 0111; CHECK-NEXT: vmerge.vim v8, v8, 1, v0112; CHECK-NEXT: vfwcvt.f.xu.v v12, v8113; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12114; CHECK-NEXT: ret115 %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x bfloat>116 ret <vscale x 8 x bfloat> %evec117}118 119define <vscale x 16 x bfloat> @vsitofp_nxv16i1_nxv16bf16(<vscale x 16 x i1> %va) {120; CHECK-LABEL: vsitofp_nxv16i1_nxv16bf16:121; CHECK: # %bb.0:122; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma123; CHECK-NEXT: vmv.v.i v8, 0124; CHECK-NEXT: vmerge.vim v8, v8, -1, v0125; CHECK-NEXT: vfwcvt.f.x.v v16, v8126; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16127; CHECK-NEXT: ret128 %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x bfloat>129 ret <vscale x 16 x bfloat> %evec130}131 132define <vscale x 16 x bfloat> @vuitofp_nxv16i1_nxv16bf16(<vscale x 16 x i1> %va) {133; CHECK-LABEL: vuitofp_nxv16i1_nxv16bf16:134; CHECK: # %bb.0:135; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma136; CHECK-NEXT: vmv.v.i v8, 0137; CHECK-NEXT: vmerge.vim v8, v8, 1, v0138; CHECK-NEXT: vfwcvt.f.xu.v v16, v8139; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16140; CHECK-NEXT: ret141 %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x bfloat>142 ret <vscale x 16 x bfloat> %evec143}144 145define <vscale x 32 x bfloat> @vsitofp_nxv32i1_nxv32bf16(<vscale x 32 x i1> %va) {146; CHECK-LABEL: vsitofp_nxv32i1_nxv32bf16:147; CHECK: # %bb.0:148; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma149; CHECK-NEXT: vmv.v.i v12, 0150; CHECK-NEXT: csrr a0, vlenb151; CHECK-NEXT: vmerge.vim v8, v12, -1, v0152; CHECK-NEXT: srli a0, a0, 2153; CHECK-NEXT: vfwcvt.f.x.v v16, v8154; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma155; CHECK-NEXT: vslidedown.vx v0, v0, a0156; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma157; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16158; CHECK-NEXT: vmerge.vim v12, v12, -1, v0159; CHECK-NEXT: vfwcvt.f.x.v v16, v12160; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16161; CHECK-NEXT: ret162 %evec = sitofp <vscale x 32 x i1> %va to <vscale x 32 x bfloat>163 ret <vscale x 32 x bfloat> %evec164}165 166define <vscale x 32 x bfloat> @vuitofp_nxv32i1_nxv32bf16(<vscale x 32 x i1> %va) {167; CHECK-LABEL: vuitofp_nxv32i1_nxv32bf16:168; CHECK: # %bb.0:169; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma170; CHECK-NEXT: vmv.v.i v12, 0171; CHECK-NEXT: csrr a0, vlenb172; CHECK-NEXT: vmerge.vim v8, v12, 1, v0173; CHECK-NEXT: srli a0, a0, 2174; CHECK-NEXT: vfwcvt.f.xu.v v16, v8175; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma176; CHECK-NEXT: vslidedown.vx v0, v0, a0177; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma178; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16179; CHECK-NEXT: vmerge.vim v12, v12, 1, v0180; CHECK-NEXT: vfwcvt.f.xu.v v16, v12181; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16182; CHECK-NEXT: ret183 %evec = uitofp <vscale x 32 x i1> %va to <vscale x 32 x bfloat>184 ret <vscale x 32 x bfloat> %evec185}186 187define <vscale x 1 x bfloat> @vsitofp_nxv1i8_nxv1bf16(<vscale x 1 x i8> %va) {188; CHECK-LABEL: vsitofp_nxv1i8_nxv1bf16:189; CHECK: # %bb.0:190; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma191; CHECK-NEXT: vsext.vf2 v9, v8192; CHECK-NEXT: vfwcvt.f.x.v v10, v9193; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10194; CHECK-NEXT: ret195 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x bfloat>196 ret <vscale x 1 x bfloat> %evec197}198 199define <vscale x 1 x bfloat> @vsitofp_nxv1i7_nxv1bf16(<vscale x 1 x i7> %va) {200; CHECK-LABEL: vsitofp_nxv1i7_nxv1bf16:201; CHECK: # %bb.0:202; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma203; CHECK-NEXT: vadd.vv v8, v8, v8204; CHECK-NEXT: vsra.vi v8, v8, 1205; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma206; CHECK-NEXT: vsext.vf2 v9, v8207; CHECK-NEXT: vfwcvt.f.x.v v10, v9208; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10209; CHECK-NEXT: ret210 %evec = sitofp <vscale x 1 x i7> %va to <vscale x 1 x bfloat>211 ret <vscale x 1 x bfloat> %evec212}213 214define <vscale x 1 x bfloat> @vuitofp_nxv1i7_nxv1bf16(<vscale x 1 x i7> %va) {215; CHECK-LABEL: vuitofp_nxv1i7_nxv1bf16:216; CHECK: # %bb.0:217; CHECK-NEXT: li a0, 127218; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma219; CHECK-NEXT: vand.vx v8, v8, a0220; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma221; CHECK-NEXT: vzext.vf2 v9, v8222; CHECK-NEXT: vfwcvt.f.xu.v v10, v9223; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10224; CHECK-NEXT: ret225 %evec = uitofp <vscale x 1 x i7> %va to <vscale x 1 x bfloat>226 ret <vscale x 1 x bfloat> %evec227}228 229define <vscale x 1 x bfloat> @vuitofp_nxv1i8_nxv1bf16(<vscale x 1 x i8> %va) {230; CHECK-LABEL: vuitofp_nxv1i8_nxv1bf16:231; CHECK: # %bb.0:232; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma233; CHECK-NEXT: vzext.vf2 v9, v8234; CHECK-NEXT: vfwcvt.f.xu.v v10, v9235; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10236; CHECK-NEXT: ret237 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x bfloat>238 ret <vscale x 1 x bfloat> %evec239}240 241define <vscale x 2 x bfloat> @vsitofp_nxv2i8_nxv2bf16(<vscale x 2 x i8> %va) {242; CHECK-LABEL: vsitofp_nxv2i8_nxv2bf16:243; CHECK: # %bb.0:244; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma245; CHECK-NEXT: vsext.vf2 v9, v8246; CHECK-NEXT: vfwcvt.f.x.v v10, v9247; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10248; CHECK-NEXT: ret249 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x bfloat>250 ret <vscale x 2 x bfloat> %evec251}252 253define <vscale x 2 x bfloat> @vuitofp_nxv2i8_nxv2bf16(<vscale x 2 x i8> %va) {254; CHECK-LABEL: vuitofp_nxv2i8_nxv2bf16:255; CHECK: # %bb.0:256; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma257; CHECK-NEXT: vzext.vf2 v9, v8258; CHECK-NEXT: vfwcvt.f.xu.v v10, v9259; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10260; CHECK-NEXT: ret261 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x bfloat>262 ret <vscale x 2 x bfloat> %evec263}264 265define <vscale x 4 x bfloat> @vsitofp_nxv4i8_nxv4bf16(<vscale x 4 x i8> %va) {266; CHECK-LABEL: vsitofp_nxv4i8_nxv4bf16:267; CHECK: # %bb.0:268; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma269; CHECK-NEXT: vsext.vf2 v9, v8270; CHECK-NEXT: vfwcvt.f.x.v v10, v9271; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10272; CHECK-NEXT: ret273 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x bfloat>274 ret <vscale x 4 x bfloat> %evec275}276 277define <vscale x 4 x bfloat> @vuitofp_nxv4i8_nxv4bf16(<vscale x 4 x i8> %va) {278; CHECK-LABEL: vuitofp_nxv4i8_nxv4bf16:279; CHECK: # %bb.0:280; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma281; CHECK-NEXT: vzext.vf2 v9, v8282; CHECK-NEXT: vfwcvt.f.xu.v v10, v9283; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10284; CHECK-NEXT: ret285 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x bfloat>286 ret <vscale x 4 x bfloat> %evec287}288 289define <vscale x 8 x bfloat> @vsitofp_nxv8i8_nxv8bf16(<vscale x 8 x i8> %va) {290; CHECK-LABEL: vsitofp_nxv8i8_nxv8bf16:291; CHECK: # %bb.0:292; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma293; CHECK-NEXT: vsext.vf2 v10, v8294; CHECK-NEXT: vfwcvt.f.x.v v12, v10295; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12296; CHECK-NEXT: ret297 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x bfloat>298 ret <vscale x 8 x bfloat> %evec299}300 301define <vscale x 8 x bfloat> @vuitofp_nxv8i8_nxv8bf16(<vscale x 8 x i8> %va) {302; CHECK-LABEL: vuitofp_nxv8i8_nxv8bf16:303; CHECK: # %bb.0:304; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma305; CHECK-NEXT: vzext.vf2 v10, v8306; CHECK-NEXT: vfwcvt.f.xu.v v12, v10307; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12308; CHECK-NEXT: ret309 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x bfloat>310 ret <vscale x 8 x bfloat> %evec311}312 313define <vscale x 16 x bfloat> @vsitofp_nxv16i8_nxv16bf16(<vscale x 16 x i8> %va) {314; CHECK-LABEL: vsitofp_nxv16i8_nxv16bf16:315; CHECK: # %bb.0:316; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma317; CHECK-NEXT: vsext.vf2 v12, v8318; CHECK-NEXT: vfwcvt.f.x.v v16, v12319; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16320; CHECK-NEXT: ret321 %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x bfloat>322 ret <vscale x 16 x bfloat> %evec323}324 325define <vscale x 16 x bfloat> @vuitofp_nxv16i8_nxv16bf16(<vscale x 16 x i8> %va) {326; CHECK-LABEL: vuitofp_nxv16i8_nxv16bf16:327; CHECK: # %bb.0:328; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma329; CHECK-NEXT: vzext.vf2 v12, v8330; CHECK-NEXT: vfwcvt.f.xu.v v16, v12331; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16332; CHECK-NEXT: ret333 %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x bfloat>334 ret <vscale x 16 x bfloat> %evec335}336 337define <vscale x 32 x bfloat> @vsitofp_nxv32i8_nxv32bf16(<vscale x 32 x i8> %va) {338; CHECK-LABEL: vsitofp_nxv32i8_nxv32bf16:339; CHECK: # %bb.0:340; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma341; CHECK-NEXT: vsext.vf2 v12, v8342; CHECK-NEXT: vsext.vf2 v24, v10343; CHECK-NEXT: vfwcvt.f.x.v v16, v12344; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16345; CHECK-NEXT: vfwcvt.f.x.v v16, v24346; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16347; CHECK-NEXT: ret348 %evec = sitofp <vscale x 32 x i8> %va to <vscale x 32 x bfloat>349 ret <vscale x 32 x bfloat> %evec350}351 352define <vscale x 32 x bfloat> @vuitofp_nxv32i8_nxv32bf16(<vscale x 32 x i8> %va) {353; CHECK-LABEL: vuitofp_nxv32i8_nxv32bf16:354; CHECK: # %bb.0:355; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma356; CHECK-NEXT: vzext.vf2 v12, v8357; CHECK-NEXT: vzext.vf2 v24, v10358; CHECK-NEXT: vfwcvt.f.xu.v v16, v12359; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16360; CHECK-NEXT: vfwcvt.f.xu.v v16, v24361; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16362; CHECK-NEXT: ret363 %evec = uitofp <vscale x 32 x i8> %va to <vscale x 32 x bfloat>364 ret <vscale x 32 x bfloat> %evec365}366 367define <vscale x 1 x bfloat> @vsitofp_nxv1i16_nxv1bf16(<vscale x 1 x i16> %va) {368; CHECK-LABEL: vsitofp_nxv1i16_nxv1bf16:369; CHECK: # %bb.0:370; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma371; CHECK-NEXT: vfwcvt.f.x.v v9, v8372; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9373; CHECK-NEXT: ret374 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x bfloat>375 ret <vscale x 1 x bfloat> %evec376}377 378define <vscale x 1 x bfloat> @vuitofp_nxv1i16_nxv1bf16(<vscale x 1 x i16> %va) {379; CHECK-LABEL: vuitofp_nxv1i16_nxv1bf16:380; CHECK: # %bb.0:381; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma382; CHECK-NEXT: vfwcvt.f.xu.v v9, v8383; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9384; CHECK-NEXT: ret385 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x bfloat>386 ret <vscale x 1 x bfloat> %evec387}388 389define <vscale x 2 x bfloat> @vsitofp_nxv2i16_nxv2bf16(<vscale x 2 x i16> %va) {390; CHECK-LABEL: vsitofp_nxv2i16_nxv2bf16:391; CHECK: # %bb.0:392; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma393; CHECK-NEXT: vfwcvt.f.x.v v9, v8394; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9395; CHECK-NEXT: ret396 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x bfloat>397 ret <vscale x 2 x bfloat> %evec398}399 400define <vscale x 2 x bfloat> @vuitofp_nxv2i16_nxv2bf16(<vscale x 2 x i16> %va) {401; CHECK-LABEL: vuitofp_nxv2i16_nxv2bf16:402; CHECK: # %bb.0:403; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma404; CHECK-NEXT: vfwcvt.f.xu.v v9, v8405; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9406; CHECK-NEXT: ret407 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x bfloat>408 ret <vscale x 2 x bfloat> %evec409}410 411define <vscale x 4 x bfloat> @vsitofp_nxv4i16_nxv4bf16(<vscale x 4 x i16> %va) {412; CHECK-LABEL: vsitofp_nxv4i16_nxv4bf16:413; CHECK: # %bb.0:414; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma415; CHECK-NEXT: vfwcvt.f.x.v v10, v8416; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10417; CHECK-NEXT: ret418 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x bfloat>419 ret <vscale x 4 x bfloat> %evec420}421 422define <vscale x 4 x bfloat> @vuitofp_nxv4i16_nxv4bf16(<vscale x 4 x i16> %va) {423; CHECK-LABEL: vuitofp_nxv4i16_nxv4bf16:424; CHECK: # %bb.0:425; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma426; CHECK-NEXT: vfwcvt.f.xu.v v10, v8427; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10428; CHECK-NEXT: ret429 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x bfloat>430 ret <vscale x 4 x bfloat> %evec431}432 433define <vscale x 8 x bfloat> @vsitofp_nxv8i16_nxv8bf16(<vscale x 8 x i16> %va) {434; CHECK-LABEL: vsitofp_nxv8i16_nxv8bf16:435; CHECK: # %bb.0:436; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma437; CHECK-NEXT: vfwcvt.f.x.v v12, v8438; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12439; CHECK-NEXT: ret440 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x bfloat>441 ret <vscale x 8 x bfloat> %evec442}443 444define <vscale x 8 x bfloat> @vuitofp_nxv8i16_nxv8bf16(<vscale x 8 x i16> %va) {445; CHECK-LABEL: vuitofp_nxv8i16_nxv8bf16:446; CHECK: # %bb.0:447; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma448; CHECK-NEXT: vfwcvt.f.xu.v v12, v8449; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12450; CHECK-NEXT: ret451 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x bfloat>452 ret <vscale x 8 x bfloat> %evec453}454 455define <vscale x 16 x bfloat> @vsitofp_nxv16i16_nxv16bf16(<vscale x 16 x i16> %va) {456; CHECK-LABEL: vsitofp_nxv16i16_nxv16bf16:457; CHECK: # %bb.0:458; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma459; CHECK-NEXT: vfwcvt.f.x.v v16, v8460; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16461; CHECK-NEXT: ret462 %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x bfloat>463 ret <vscale x 16 x bfloat> %evec464}465 466define <vscale x 16 x bfloat> @vuitofp_nxv16i16_nxv16bf16(<vscale x 16 x i16> %va) {467; CHECK-LABEL: vuitofp_nxv16i16_nxv16bf16:468; CHECK: # %bb.0:469; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma470; CHECK-NEXT: vfwcvt.f.xu.v v16, v8471; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16472; CHECK-NEXT: ret473 %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x bfloat>474 ret <vscale x 16 x bfloat> %evec475}476 477define <vscale x 32 x bfloat> @vsitofp_nxv32i16_nxv32bf16(<vscale x 32 x i16> %va) {478; CHECK-LABEL: vsitofp_nxv32i16_nxv32bf16:479; CHECK: # %bb.0:480; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma481; CHECK-NEXT: vfwcvt.f.x.v v16, v8482; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16483; CHECK-NEXT: vfwcvt.f.x.v v16, v12484; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16485; CHECK-NEXT: ret486 %evec = sitofp <vscale x 32 x i16> %va to <vscale x 32 x bfloat>487 ret <vscale x 32 x bfloat> %evec488}489 490define <vscale x 32 x bfloat> @vuitofp_nxv32i16_nxv32bf16(<vscale x 32 x i16> %va) {491; CHECK-LABEL: vuitofp_nxv32i16_nxv32bf16:492; CHECK: # %bb.0:493; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma494; CHECK-NEXT: vfwcvt.f.xu.v v16, v8495; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16496; CHECK-NEXT: vfwcvt.f.xu.v v16, v12497; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16498; CHECK-NEXT: ret499 %evec = uitofp <vscale x 32 x i16> %va to <vscale x 32 x bfloat>500 ret <vscale x 32 x bfloat> %evec501}502 503define <vscale x 1 x bfloat> @vsitofp_nxv1i32_nxv1bf16(<vscale x 1 x i32> %va) {504; CHECK-LABEL: vsitofp_nxv1i32_nxv1bf16:505; CHECK: # %bb.0:506; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma507; CHECK-NEXT: vfcvt.f.x.v v9, v8508; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma509; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9510; CHECK-NEXT: ret511 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x bfloat>512 ret <vscale x 1 x bfloat> %evec513}514 515define <vscale x 1 x bfloat> @vuitofp_nxv1i32_nxv1bf16(<vscale x 1 x i32> %va) {516; CHECK-LABEL: vuitofp_nxv1i32_nxv1bf16:517; CHECK: # %bb.0:518; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma519; CHECK-NEXT: vfcvt.f.xu.v v9, v8520; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma521; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9522; CHECK-NEXT: ret523 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x bfloat>524 ret <vscale x 1 x bfloat> %evec525}526 527define <vscale x 2 x bfloat> @vsitofp_nxv2i32_nxv2bf16(<vscale x 2 x i32> %va) {528; CHECK-LABEL: vsitofp_nxv2i32_nxv2bf16:529; CHECK: # %bb.0:530; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma531; CHECK-NEXT: vfcvt.f.x.v v9, v8532; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma533; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9534; CHECK-NEXT: ret535 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x bfloat>536 ret <vscale x 2 x bfloat> %evec537}538 539define <vscale x 2 x bfloat> @vuitofp_nxv2i32_nxv2bf16(<vscale x 2 x i32> %va) {540; CHECK-LABEL: vuitofp_nxv2i32_nxv2bf16:541; CHECK: # %bb.0:542; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma543; CHECK-NEXT: vfcvt.f.xu.v v9, v8544; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma545; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9546; CHECK-NEXT: ret547 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x bfloat>548 ret <vscale x 2 x bfloat> %evec549}550 551define <vscale x 4 x bfloat> @vsitofp_nxv4i32_nxv4bf16(<vscale x 4 x i32> %va) {552; CHECK-LABEL: vsitofp_nxv4i32_nxv4bf16:553; CHECK: # %bb.0:554; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma555; CHECK-NEXT: vfcvt.f.x.v v10, v8556; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma557; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10558; CHECK-NEXT: ret559 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x bfloat>560 ret <vscale x 4 x bfloat> %evec561}562 563define <vscale x 4 x bfloat> @vuitofp_nxv4i32_nxv4bf16(<vscale x 4 x i32> %va) {564; CHECK-LABEL: vuitofp_nxv4i32_nxv4bf16:565; CHECK: # %bb.0:566; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma567; CHECK-NEXT: vfcvt.f.xu.v v10, v8568; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma569; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10570; CHECK-NEXT: ret571 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x bfloat>572 ret <vscale x 4 x bfloat> %evec573}574 575define <vscale x 8 x bfloat> @vsitofp_nxv8i32_nxv8bf16(<vscale x 8 x i32> %va) {576; CHECK-LABEL: vsitofp_nxv8i32_nxv8bf16:577; CHECK: # %bb.0:578; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma579; CHECK-NEXT: vfcvt.f.x.v v12, v8580; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma581; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12582; CHECK-NEXT: ret583 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x bfloat>584 ret <vscale x 8 x bfloat> %evec585}586 587define <vscale x 8 x bfloat> @vuitofp_nxv8i32_nxv8bf16(<vscale x 8 x i32> %va) {588; CHECK-LABEL: vuitofp_nxv8i32_nxv8bf16:589; CHECK: # %bb.0:590; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma591; CHECK-NEXT: vfcvt.f.xu.v v12, v8592; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma593; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12594; CHECK-NEXT: ret595 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x bfloat>596 ret <vscale x 8 x bfloat> %evec597}598 599define <vscale x 16 x bfloat> @vsitofp_nxv16i32_nxv16bf16(<vscale x 16 x i32> %va) {600; CHECK-LABEL: vsitofp_nxv16i32_nxv16bf16:601; CHECK: # %bb.0:602; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma603; CHECK-NEXT: vfcvt.f.x.v v16, v8604; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma605; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16606; CHECK-NEXT: ret607 %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x bfloat>608 ret <vscale x 16 x bfloat> %evec609}610 611define <vscale x 16 x bfloat> @vuitofp_nxv16i32_nxv16bf16(<vscale x 16 x i32> %va) {612; CHECK-LABEL: vuitofp_nxv16i32_nxv16bf16:613; CHECK: # %bb.0:614; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma615; CHECK-NEXT: vfcvt.f.xu.v v16, v8616; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma617; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16618; CHECK-NEXT: ret619 %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x bfloat>620 ret <vscale x 16 x bfloat> %evec621}622 623define <vscale x 1 x bfloat> @vsitofp_nxv1i64_nxv1bf16(<vscale x 1 x i64> %va) {624; CHECK-LABEL: vsitofp_nxv1i64_nxv1bf16:625; CHECK: # %bb.0:626; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma627; CHECK-NEXT: vfncvt.f.x.w v9, v8628; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma629; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9630; CHECK-NEXT: ret631 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x bfloat>632 ret <vscale x 1 x bfloat> %evec633}634 635define <vscale x 1 x bfloat> @vuitofp_nxv1i64_nxv1bf16(<vscale x 1 x i64> %va) {636; CHECK-LABEL: vuitofp_nxv1i64_nxv1bf16:637; CHECK: # %bb.0:638; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma639; CHECK-NEXT: vfncvt.f.xu.w v9, v8640; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma641; CHECK-NEXT: vfncvtbf16.f.f.w v8, v9642; CHECK-NEXT: ret643 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x bfloat>644 ret <vscale x 1 x bfloat> %evec645}646 647define <vscale x 2 x bfloat> @vsitofp_nxv2i64_nxv2bf16(<vscale x 2 x i64> %va) {648; CHECK-LABEL: vsitofp_nxv2i64_nxv2bf16:649; CHECK: # %bb.0:650; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma651; CHECK-NEXT: vfncvt.f.x.w v10, v8652; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma653; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10654; CHECK-NEXT: ret655 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x bfloat>656 ret <vscale x 2 x bfloat> %evec657}658 659define <vscale x 2 x bfloat> @vuitofp_nxv2i64_nxv2bf16(<vscale x 2 x i64> %va) {660; CHECK-LABEL: vuitofp_nxv2i64_nxv2bf16:661; CHECK: # %bb.0:662; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma663; CHECK-NEXT: vfncvt.f.xu.w v10, v8664; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma665; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10666; CHECK-NEXT: ret667 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x bfloat>668 ret <vscale x 2 x bfloat> %evec669}670 671define <vscale x 4 x bfloat> @vsitofp_nxv4i64_nxv4bf16(<vscale x 4 x i64> %va) {672; CHECK-LABEL: vsitofp_nxv4i64_nxv4bf16:673; CHECK: # %bb.0:674; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma675; CHECK-NEXT: vfncvt.f.x.w v12, v8676; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma677; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12678; CHECK-NEXT: ret679 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x bfloat>680 ret <vscale x 4 x bfloat> %evec681}682 683define <vscale x 4 x bfloat> @vuitofp_nxv4i64_nxv4bf16(<vscale x 4 x i64> %va) {684; CHECK-LABEL: vuitofp_nxv4i64_nxv4bf16:685; CHECK: # %bb.0:686; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma687; CHECK-NEXT: vfncvt.f.xu.w v12, v8688; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma689; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12690; CHECK-NEXT: ret691 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x bfloat>692 ret <vscale x 4 x bfloat> %evec693}694 695define <vscale x 8 x bfloat> @vsitofp_nxv8i64_nxv8bf16(<vscale x 8 x i64> %va) {696; CHECK-LABEL: vsitofp_nxv8i64_nxv8bf16:697; CHECK: # %bb.0:698; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma699; CHECK-NEXT: vfncvt.f.x.w v16, v8700; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma701; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16702; CHECK-NEXT: ret703 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x bfloat>704 ret <vscale x 8 x bfloat> %evec705}706 707define <vscale x 8 x bfloat> @vuitofp_nxv8i64_nxv8bf16(<vscale x 8 x i64> %va) {708; CHECK-LABEL: vuitofp_nxv8i64_nxv8bf16:709; CHECK: # %bb.0:710; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma711; CHECK-NEXT: vfncvt.f.xu.w v16, v8712; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma713; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16714; CHECK-NEXT: ret715 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x bfloat>716 ret <vscale x 8 x bfloat> %evec717}718 719define <vscale x 1 x half> @vsitofp_nxv1i1_nxv1f16(<vscale x 1 x i1> %va) {720; ZVFH-LABEL: vsitofp_nxv1i1_nxv1f16:721; ZVFH: # %bb.0:722; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma723; ZVFH-NEXT: vmv.v.i v8, 0724; ZVFH-NEXT: vmerge.vim v9, v8, -1, v0725; ZVFH-NEXT: vfwcvt.f.x.v v8, v9726; ZVFH-NEXT: ret727;728; ZVFHMIN-LABEL: vsitofp_nxv1i1_nxv1f16:729; ZVFHMIN: # %bb.0:730; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma731; ZVFHMIN-NEXT: vmv.v.i v8, 0732; ZVFHMIN-NEXT: vmerge.vim v8, v8, -1, v0733; ZVFHMIN-NEXT: vfwcvt.f.x.v v9, v8734; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9735; ZVFHMIN-NEXT: ret736 %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x half>737 ret <vscale x 1 x half> %evec738}739 740define <vscale x 1 x half> @vuitofp_nxv1i1_nxv1f16(<vscale x 1 x i1> %va) {741; ZVFH-LABEL: vuitofp_nxv1i1_nxv1f16:742; ZVFH: # %bb.0:743; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma744; ZVFH-NEXT: vmv.v.i v8, 0745; ZVFH-NEXT: vmerge.vim v9, v8, 1, v0746; ZVFH-NEXT: vfwcvt.f.xu.v v8, v9747; ZVFH-NEXT: ret748;749; ZVFHMIN-LABEL: vuitofp_nxv1i1_nxv1f16:750; ZVFHMIN: # %bb.0:751; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma752; ZVFHMIN-NEXT: vmv.v.i v8, 0753; ZVFHMIN-NEXT: vmerge.vim v8, v8, 1, v0754; ZVFHMIN-NEXT: vfwcvt.f.xu.v v9, v8755; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9756; ZVFHMIN-NEXT: ret757 %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x half>758 ret <vscale x 1 x half> %evec759}760 761define <vscale x 1 x float> @vsitofp_nxv1i1_nxv1f32(<vscale x 1 x i1> %va) {762; CHECK-LABEL: vsitofp_nxv1i1_nxv1f32:763; CHECK: # %bb.0:764; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma765; CHECK-NEXT: vmv.v.i v8, 0766; CHECK-NEXT: vmerge.vim v9, v8, -1, v0767; CHECK-NEXT: vfwcvt.f.x.v v8, v9768; CHECK-NEXT: ret769 %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x float>770 ret <vscale x 1 x float> %evec771}772 773define <vscale x 1 x float> @vuitofp_nxv1i1_nxv1f32(<vscale x 1 x i1> %va) {774; CHECK-LABEL: vuitofp_nxv1i1_nxv1f32:775; CHECK: # %bb.0:776; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma777; CHECK-NEXT: vmv.v.i v8, 0778; CHECK-NEXT: vmerge.vim v9, v8, 1, v0779; CHECK-NEXT: vfwcvt.f.xu.v v8, v9780; CHECK-NEXT: ret781 %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x float>782 ret <vscale x 1 x float> %evec783}784 785define <vscale x 1 x double> @vsitofp_nxv1i1_nxv1f64(<vscale x 1 x i1> %va) {786; CHECK-LABEL: vsitofp_nxv1i1_nxv1f64:787; CHECK: # %bb.0:788; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma789; CHECK-NEXT: vmv.v.i v8, 0790; CHECK-NEXT: vmerge.vim v9, v8, -1, v0791; CHECK-NEXT: vfwcvt.f.x.v v8, v9792; CHECK-NEXT: ret793 %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x double>794 ret <vscale x 1 x double> %evec795}796 797define <vscale x 1 x double> @vuitofp_nxv1i1_nxv1f64(<vscale x 1 x i1> %va) {798; CHECK-LABEL: vuitofp_nxv1i1_nxv1f64:799; CHECK: # %bb.0:800; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma801; CHECK-NEXT: vmv.v.i v8, 0802; CHECK-NEXT: vmerge.vim v9, v8, 1, v0803; CHECK-NEXT: vfwcvt.f.xu.v v8, v9804; CHECK-NEXT: ret805 %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x double>806 ret <vscale x 1 x double> %evec807}808 809define <vscale x 2 x half> @vsitofp_nxv2i1_nxv2f16(<vscale x 2 x i1> %va) {810; ZVFH-LABEL: vsitofp_nxv2i1_nxv2f16:811; ZVFH: # %bb.0:812; ZVFH-NEXT: vsetvli a0, zero, e8, mf4, ta, ma813; ZVFH-NEXT: vmv.v.i v8, 0814; ZVFH-NEXT: vmerge.vim v9, v8, -1, v0815; ZVFH-NEXT: vfwcvt.f.x.v v8, v9816; ZVFH-NEXT: ret817;818; ZVFHMIN-LABEL: vsitofp_nxv2i1_nxv2f16:819; ZVFHMIN: # %bb.0:820; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma821; ZVFHMIN-NEXT: vmv.v.i v8, 0822; ZVFHMIN-NEXT: vmerge.vim v8, v8, -1, v0823; ZVFHMIN-NEXT: vfwcvt.f.x.v v9, v8824; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9825; ZVFHMIN-NEXT: ret826 %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x half>827 ret <vscale x 2 x half> %evec828}829 830define <vscale x 2 x half> @vuitofp_nxv2i1_nxv2f16(<vscale x 2 x i1> %va) {831; ZVFH-LABEL: vuitofp_nxv2i1_nxv2f16:832; ZVFH: # %bb.0:833; ZVFH-NEXT: vsetvli a0, zero, e8, mf4, ta, ma834; ZVFH-NEXT: vmv.v.i v8, 0835; ZVFH-NEXT: vmerge.vim v9, v8, 1, v0836; ZVFH-NEXT: vfwcvt.f.xu.v v8, v9837; ZVFH-NEXT: ret838;839; ZVFHMIN-LABEL: vuitofp_nxv2i1_nxv2f16:840; ZVFHMIN: # %bb.0:841; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma842; ZVFHMIN-NEXT: vmv.v.i v8, 0843; ZVFHMIN-NEXT: vmerge.vim v8, v8, 1, v0844; ZVFHMIN-NEXT: vfwcvt.f.xu.v v9, v8845; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9846; ZVFHMIN-NEXT: ret847 %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x half>848 ret <vscale x 2 x half> %evec849}850 851define <vscale x 2 x float> @vsitofp_nxv2i1_nxv2f32(<vscale x 2 x i1> %va) {852; CHECK-LABEL: vsitofp_nxv2i1_nxv2f32:853; CHECK: # %bb.0:854; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma855; CHECK-NEXT: vmv.v.i v8, 0856; CHECK-NEXT: vmerge.vim v9, v8, -1, v0857; CHECK-NEXT: vfwcvt.f.x.v v8, v9858; CHECK-NEXT: ret859 %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x float>860 ret <vscale x 2 x float> %evec861}862 863define <vscale x 2 x float> @vuitofp_nxv2i1_nxv2f32(<vscale x 2 x i1> %va) {864; CHECK-LABEL: vuitofp_nxv2i1_nxv2f32:865; CHECK: # %bb.0:866; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma867; CHECK-NEXT: vmv.v.i v8, 0868; CHECK-NEXT: vmerge.vim v9, v8, 1, v0869; CHECK-NEXT: vfwcvt.f.xu.v v8, v9870; CHECK-NEXT: ret871 %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x float>872 ret <vscale x 2 x float> %evec873}874 875define <vscale x 2 x double> @vsitofp_nxv2i1_nxv2f64(<vscale x 2 x i1> %va) {876; CHECK-LABEL: vsitofp_nxv2i1_nxv2f64:877; CHECK: # %bb.0:878; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma879; CHECK-NEXT: vmv.v.i v8, 0880; CHECK-NEXT: vmerge.vim v10, v8, -1, v0881; CHECK-NEXT: vfwcvt.f.x.v v8, v10882; CHECK-NEXT: ret883 %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x double>884 ret <vscale x 2 x double> %evec885}886 887define <vscale x 2 x double> @vuitofp_nxv2i1_nxv2f64(<vscale x 2 x i1> %va) {888; CHECK-LABEL: vuitofp_nxv2i1_nxv2f64:889; CHECK: # %bb.0:890; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma891; CHECK-NEXT: vmv.v.i v8, 0892; CHECK-NEXT: vmerge.vim v10, v8, 1, v0893; CHECK-NEXT: vfwcvt.f.xu.v v8, v10894; CHECK-NEXT: ret895 %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x double>896 ret <vscale x 2 x double> %evec897}898 899define <vscale x 4 x half> @vsitofp_nxv4i1_nxv4f16(<vscale x 4 x i1> %va) {900; ZVFH-LABEL: vsitofp_nxv4i1_nxv4f16:901; ZVFH: # %bb.0:902; ZVFH-NEXT: vsetvli a0, zero, e8, mf2, ta, ma903; ZVFH-NEXT: vmv.v.i v8, 0904; ZVFH-NEXT: vmerge.vim v9, v8, -1, v0905; ZVFH-NEXT: vfwcvt.f.x.v v8, v9906; ZVFH-NEXT: ret907;908; ZVFHMIN-LABEL: vsitofp_nxv4i1_nxv4f16:909; ZVFHMIN: # %bb.0:910; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma911; ZVFHMIN-NEXT: vmv.v.i v8, 0912; ZVFHMIN-NEXT: vmerge.vim v8, v8, -1, v0913; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v8914; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10915; ZVFHMIN-NEXT: ret916 %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x half>917 ret <vscale x 4 x half> %evec918}919 920define <vscale x 4 x half> @vuitofp_nxv4i1_nxv4f16(<vscale x 4 x i1> %va) {921; ZVFH-LABEL: vuitofp_nxv4i1_nxv4f16:922; ZVFH: # %bb.0:923; ZVFH-NEXT: vsetvli a0, zero, e8, mf2, ta, ma924; ZVFH-NEXT: vmv.v.i v8, 0925; ZVFH-NEXT: vmerge.vim v9, v8, 1, v0926; ZVFH-NEXT: vfwcvt.f.xu.v v8, v9927; ZVFH-NEXT: ret928;929; ZVFHMIN-LABEL: vuitofp_nxv4i1_nxv4f16:930; ZVFHMIN: # %bb.0:931; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma932; ZVFHMIN-NEXT: vmv.v.i v8, 0933; ZVFHMIN-NEXT: vmerge.vim v8, v8, 1, v0934; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v8935; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10936; ZVFHMIN-NEXT: ret937 %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x half>938 ret <vscale x 4 x half> %evec939}940 941define <vscale x 4 x float> @vsitofp_nxv4i1_nxv4f32(<vscale x 4 x i1> %va) {942; CHECK-LABEL: vsitofp_nxv4i1_nxv4f32:943; CHECK: # %bb.0:944; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma945; CHECK-NEXT: vmv.v.i v8, 0946; CHECK-NEXT: vmerge.vim v10, v8, -1, v0947; CHECK-NEXT: vfwcvt.f.x.v v8, v10948; CHECK-NEXT: ret949 %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x float>950 ret <vscale x 4 x float> %evec951}952 953define <vscale x 4 x float> @vuitofp_nxv4i1_nxv4f32(<vscale x 4 x i1> %va) {954; CHECK-LABEL: vuitofp_nxv4i1_nxv4f32:955; CHECK: # %bb.0:956; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma957; CHECK-NEXT: vmv.v.i v8, 0958; CHECK-NEXT: vmerge.vim v10, v8, 1, v0959; CHECK-NEXT: vfwcvt.f.xu.v v8, v10960; CHECK-NEXT: ret961 %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x float>962 ret <vscale x 4 x float> %evec963}964 965define <vscale x 4 x double> @vsitofp_nxv4i1_nxv4f64(<vscale x 4 x i1> %va) {966; CHECK-LABEL: vsitofp_nxv4i1_nxv4f64:967; CHECK: # %bb.0:968; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma969; CHECK-NEXT: vmv.v.i v8, 0970; CHECK-NEXT: vmerge.vim v12, v8, -1, v0971; CHECK-NEXT: vfwcvt.f.x.v v8, v12972; CHECK-NEXT: ret973 %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x double>974 ret <vscale x 4 x double> %evec975}976 977define <vscale x 4 x double> @vuitofp_nxv4i1_nxv4f64(<vscale x 4 x i1> %va) {978; CHECK-LABEL: vuitofp_nxv4i1_nxv4f64:979; CHECK: # %bb.0:980; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma981; CHECK-NEXT: vmv.v.i v8, 0982; CHECK-NEXT: vmerge.vim v12, v8, 1, v0983; CHECK-NEXT: vfwcvt.f.xu.v v8, v12984; CHECK-NEXT: ret985 %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x double>986 ret <vscale x 4 x double> %evec987}988 989define <vscale x 8 x half> @vsitofp_nxv8i1_nxv8f16(<vscale x 8 x i1> %va) {990; ZVFH-LABEL: vsitofp_nxv8i1_nxv8f16:991; ZVFH: # %bb.0:992; ZVFH-NEXT: vsetvli a0, zero, e8, m1, ta, ma993; ZVFH-NEXT: vmv.v.i v8, 0994; ZVFH-NEXT: vmerge.vim v10, v8, -1, v0995; ZVFH-NEXT: vfwcvt.f.x.v v8, v10996; ZVFH-NEXT: ret997;998; ZVFHMIN-LABEL: vsitofp_nxv8i1_nxv8f16:999; ZVFHMIN: # %bb.0:1000; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma1001; ZVFHMIN-NEXT: vmv.v.i v8, 01002; ZVFHMIN-NEXT: vmerge.vim v8, v8, -1, v01003; ZVFHMIN-NEXT: vfwcvt.f.x.v v12, v81004; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v121005; ZVFHMIN-NEXT: ret1006 %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x half>1007 ret <vscale x 8 x half> %evec1008}1009 1010define <vscale x 8 x half> @vuitofp_nxv8i1_nxv8f16(<vscale x 8 x i1> %va) {1011; ZVFH-LABEL: vuitofp_nxv8i1_nxv8f16:1012; ZVFH: # %bb.0:1013; ZVFH-NEXT: vsetvli a0, zero, e8, m1, ta, ma1014; ZVFH-NEXT: vmv.v.i v8, 01015; ZVFH-NEXT: vmerge.vim v10, v8, 1, v01016; ZVFH-NEXT: vfwcvt.f.xu.v v8, v101017; ZVFH-NEXT: ret1018;1019; ZVFHMIN-LABEL: vuitofp_nxv8i1_nxv8f16:1020; ZVFHMIN: # %bb.0:1021; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma1022; ZVFHMIN-NEXT: vmv.v.i v8, 01023; ZVFHMIN-NEXT: vmerge.vim v8, v8, 1, v01024; ZVFHMIN-NEXT: vfwcvt.f.xu.v v12, v81025; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v121026; ZVFHMIN-NEXT: ret1027 %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x half>1028 ret <vscale x 8 x half> %evec1029}1030 1031define <vscale x 8 x float> @vsitofp_nxv8i1_nxv8f32(<vscale x 8 x i1> %va) {1032; CHECK-LABEL: vsitofp_nxv8i1_nxv8f32:1033; CHECK: # %bb.0:1034; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma1035; CHECK-NEXT: vmv.v.i v8, 01036; CHECK-NEXT: vmerge.vim v12, v8, -1, v01037; CHECK-NEXT: vfwcvt.f.x.v v8, v121038; CHECK-NEXT: ret1039 %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x float>1040 ret <vscale x 8 x float> %evec1041}1042 1043define <vscale x 8 x float> @vuitofp_nxv8i1_nxv8f32(<vscale x 8 x i1> %va) {1044; CHECK-LABEL: vuitofp_nxv8i1_nxv8f32:1045; CHECK: # %bb.0:1046; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma1047; CHECK-NEXT: vmv.v.i v8, 01048; CHECK-NEXT: vmerge.vim v12, v8, 1, v01049; CHECK-NEXT: vfwcvt.f.xu.v v8, v121050; CHECK-NEXT: ret1051 %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x float>1052 ret <vscale x 8 x float> %evec1053}1054 1055define <vscale x 8 x double> @vsitofp_nxv8i1_nxv8f64(<vscale x 8 x i1> %va) {1056; CHECK-LABEL: vsitofp_nxv8i1_nxv8f64:1057; CHECK: # %bb.0:1058; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1059; CHECK-NEXT: vmv.v.i v8, 01060; CHECK-NEXT: vmerge.vim v16, v8, -1, v01061; CHECK-NEXT: vfwcvt.f.x.v v8, v161062; CHECK-NEXT: ret1063 %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x double>1064 ret <vscale x 8 x double> %evec1065}1066 1067define <vscale x 8 x double> @vuitofp_nxv8i1_nxv8f64(<vscale x 8 x i1> %va) {1068; CHECK-LABEL: vuitofp_nxv8i1_nxv8f64:1069; CHECK: # %bb.0:1070; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1071; CHECK-NEXT: vmv.v.i v8, 01072; CHECK-NEXT: vmerge.vim v16, v8, 1, v01073; CHECK-NEXT: vfwcvt.f.xu.v v8, v161074; CHECK-NEXT: ret1075 %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x double>1076 ret <vscale x 8 x double> %evec1077}1078 1079define <vscale x 16 x half> @vsitofp_nxv16i1_nxv16f16(<vscale x 16 x i1> %va) {1080; ZVFH-LABEL: vsitofp_nxv16i1_nxv16f16:1081; ZVFH: # %bb.0:1082; ZVFH-NEXT: vsetvli a0, zero, e8, m2, ta, ma1083; ZVFH-NEXT: vmv.v.i v8, 01084; ZVFH-NEXT: vmerge.vim v12, v8, -1, v01085; ZVFH-NEXT: vfwcvt.f.x.v v8, v121086; ZVFH-NEXT: ret1087;1088; ZVFHMIN-LABEL: vsitofp_nxv16i1_nxv16f16:1089; ZVFHMIN: # %bb.0:1090; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1091; ZVFHMIN-NEXT: vmv.v.i v8, 01092; ZVFHMIN-NEXT: vmerge.vim v8, v8, -1, v01093; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v81094; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v161095; ZVFHMIN-NEXT: ret1096 %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x half>1097 ret <vscale x 16 x half> %evec1098}1099 1100define <vscale x 16 x half> @vuitofp_nxv16i1_nxv16f16(<vscale x 16 x i1> %va) {1101; ZVFH-LABEL: vuitofp_nxv16i1_nxv16f16:1102; ZVFH: # %bb.0:1103; ZVFH-NEXT: vsetvli a0, zero, e8, m2, ta, ma1104; ZVFH-NEXT: vmv.v.i v8, 01105; ZVFH-NEXT: vmerge.vim v12, v8, 1, v01106; ZVFH-NEXT: vfwcvt.f.xu.v v8, v121107; ZVFH-NEXT: ret1108;1109; ZVFHMIN-LABEL: vuitofp_nxv16i1_nxv16f16:1110; ZVFHMIN: # %bb.0:1111; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1112; ZVFHMIN-NEXT: vmv.v.i v8, 01113; ZVFHMIN-NEXT: vmerge.vim v8, v8, 1, v01114; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v81115; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v161116; ZVFHMIN-NEXT: ret1117 %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x half>1118 ret <vscale x 16 x half> %evec1119}1120 1121define <vscale x 16 x float> @vsitofp_nxv16i1_nxv16f32(<vscale x 16 x i1> %va) {1122; CHECK-LABEL: vsitofp_nxv16i1_nxv16f32:1123; CHECK: # %bb.0:1124; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma1125; CHECK-NEXT: vmv.v.i v8, 01126; CHECK-NEXT: vmerge.vim v16, v8, -1, v01127; CHECK-NEXT: vfwcvt.f.x.v v8, v161128; CHECK-NEXT: ret1129 %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x float>1130 ret <vscale x 16 x float> %evec1131}1132 1133define <vscale x 16 x float> @vuitofp_nxv16i1_nxv16f32(<vscale x 16 x i1> %va) {1134; CHECK-LABEL: vuitofp_nxv16i1_nxv16f32:1135; CHECK: # %bb.0:1136; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma1137; CHECK-NEXT: vmv.v.i v8, 01138; CHECK-NEXT: vmerge.vim v16, v8, 1, v01139; CHECK-NEXT: vfwcvt.f.xu.v v8, v161140; CHECK-NEXT: ret1141 %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x float>1142 ret <vscale x 16 x float> %evec1143}1144 1145define <vscale x 32 x half> @vsitofp_nxv32i1_nxv32f16(<vscale x 32 x i1> %va) {1146; ZVFH-LABEL: vsitofp_nxv32i1_nxv32f16:1147; ZVFH: # %bb.0:1148; ZVFH-NEXT: vsetvli a0, zero, e8, m4, ta, ma1149; ZVFH-NEXT: vmv.v.i v8, 01150; ZVFH-NEXT: vmerge.vim v16, v8, -1, v01151; ZVFH-NEXT: vfwcvt.f.x.v v8, v161152; ZVFH-NEXT: ret1153;1154; ZVFHMIN-LABEL: vsitofp_nxv32i1_nxv32f16:1155; ZVFHMIN: # %bb.0:1156; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1157; ZVFHMIN-NEXT: vmv.v.i v12, 01158; ZVFHMIN-NEXT: csrr a0, vlenb1159; ZVFHMIN-NEXT: vmerge.vim v8, v12, -1, v01160; ZVFHMIN-NEXT: srli a0, a0, 21161; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v81162; ZVFHMIN-NEXT: vsetvli a1, zero, e8, mf2, ta, ma1163; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a01164; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1165; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v161166; ZVFHMIN-NEXT: vmerge.vim v12, v12, -1, v01167; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v121168; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v161169; ZVFHMIN-NEXT: ret1170 %evec = sitofp <vscale x 32 x i1> %va to <vscale x 32 x half>1171 ret <vscale x 32 x half> %evec1172}1173 1174define <vscale x 32 x half> @vuitofp_nxv32i1_nxv32f16(<vscale x 32 x i1> %va) {1175; ZVFH-LABEL: vuitofp_nxv32i1_nxv32f16:1176; ZVFH: # %bb.0:1177; ZVFH-NEXT: vsetvli a0, zero, e8, m4, ta, ma1178; ZVFH-NEXT: vmv.v.i v8, 01179; ZVFH-NEXT: vmerge.vim v16, v8, 1, v01180; ZVFH-NEXT: vfwcvt.f.xu.v v8, v161181; ZVFH-NEXT: ret1182;1183; ZVFHMIN-LABEL: vuitofp_nxv32i1_nxv32f16:1184; ZVFHMIN: # %bb.0:1185; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1186; ZVFHMIN-NEXT: vmv.v.i v12, 01187; ZVFHMIN-NEXT: csrr a0, vlenb1188; ZVFHMIN-NEXT: vmerge.vim v8, v12, 1, v01189; ZVFHMIN-NEXT: srli a0, a0, 21190; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v81191; ZVFHMIN-NEXT: vsetvli a1, zero, e8, mf2, ta, ma1192; ZVFHMIN-NEXT: vslidedown.vx v0, v0, a01193; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1194; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v161195; ZVFHMIN-NEXT: vmerge.vim v12, v12, 1, v01196; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v121197; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v161198; ZVFHMIN-NEXT: ret1199 %evec = uitofp <vscale x 32 x i1> %va to <vscale x 32 x half>1200 ret <vscale x 32 x half> %evec1201}1202 1203define <vscale x 1 x half> @vsitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) {1204; ZVFH-LABEL: vsitofp_nxv1i8_nxv1f16:1205; ZVFH: # %bb.0:1206; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma1207; ZVFH-NEXT: vfwcvt.f.x.v v9, v81208; ZVFH-NEXT: vmv1r.v v8, v91209; ZVFH-NEXT: ret1210;1211; ZVFHMIN-LABEL: vsitofp_nxv1i8_nxv1f16:1212; ZVFHMIN: # %bb.0:1213; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1214; ZVFHMIN-NEXT: vsext.vf2 v9, v81215; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v91216; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101217; ZVFHMIN-NEXT: ret1218 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x half>1219 ret <vscale x 1 x half> %evec1220}1221 1222define <vscale x 1 x half> @vsitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) {1223; ZVFH-LABEL: vsitofp_nxv1i7_nxv1f16:1224; ZVFH: # %bb.0:1225; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma1226; ZVFH-NEXT: vadd.vv v8, v8, v81227; ZVFH-NEXT: vsra.vi v9, v8, 11228; ZVFH-NEXT: vfwcvt.f.x.v v8, v91229; ZVFH-NEXT: ret1230;1231; ZVFHMIN-LABEL: vsitofp_nxv1i7_nxv1f16:1232; ZVFHMIN: # %bb.0:1233; ZVFHMIN-NEXT: vsetvli a0, zero, e8, mf8, ta, ma1234; ZVFHMIN-NEXT: vadd.vv v8, v8, v81235; ZVFHMIN-NEXT: vsra.vi v8, v8, 11236; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma1237; ZVFHMIN-NEXT: vsext.vf2 v9, v81238; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v91239; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101240; ZVFHMIN-NEXT: ret1241 %evec = sitofp <vscale x 1 x i7> %va to <vscale x 1 x half>1242 ret <vscale x 1 x half> %evec1243}1244 1245define <vscale x 1 x half> @vuitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) {1246; ZVFH-LABEL: vuitofp_nxv1i7_nxv1f16:1247; ZVFH: # %bb.0:1248; ZVFH-NEXT: li a0, 1271249; ZVFH-NEXT: vsetvli a1, zero, e8, mf8, ta, ma1250; ZVFH-NEXT: vand.vx v9, v8, a01251; ZVFH-NEXT: vfwcvt.f.xu.v v8, v91252; ZVFH-NEXT: ret1253;1254; ZVFHMIN-LABEL: vuitofp_nxv1i7_nxv1f16:1255; ZVFHMIN: # %bb.0:1256; ZVFHMIN-NEXT: li a0, 1271257; ZVFHMIN-NEXT: vsetvli a1, zero, e8, mf8, ta, ma1258; ZVFHMIN-NEXT: vand.vx v8, v8, a01259; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma1260; ZVFHMIN-NEXT: vzext.vf2 v9, v81261; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v91262; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101263; ZVFHMIN-NEXT: ret1264 %evec = uitofp <vscale x 1 x i7> %va to <vscale x 1 x half>1265 ret <vscale x 1 x half> %evec1266}1267 1268define <vscale x 1 x half> @vuitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) {1269; ZVFH-LABEL: vuitofp_nxv1i8_nxv1f16:1270; ZVFH: # %bb.0:1271; ZVFH-NEXT: vsetvli a0, zero, e8, mf8, ta, ma1272; ZVFH-NEXT: vfwcvt.f.xu.v v9, v81273; ZVFH-NEXT: vmv1r.v v8, v91274; ZVFH-NEXT: ret1275;1276; ZVFHMIN-LABEL: vuitofp_nxv1i8_nxv1f16:1277; ZVFHMIN: # %bb.0:1278; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1279; ZVFHMIN-NEXT: vzext.vf2 v9, v81280; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v91281; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101282; ZVFHMIN-NEXT: ret1283 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x half>1284 ret <vscale x 1 x half> %evec1285}1286 1287define <vscale x 1 x float> @vsitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) {1288; CHECK-LABEL: vsitofp_nxv1i8_nxv1f32:1289; CHECK: # %bb.0:1290; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1291; CHECK-NEXT: vsext.vf2 v9, v81292; CHECK-NEXT: vfwcvt.f.x.v v8, v91293; CHECK-NEXT: ret1294 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x float>1295 ret <vscale x 1 x float> %evec1296}1297 1298define <vscale x 1 x float> @vuitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) {1299; CHECK-LABEL: vuitofp_nxv1i8_nxv1f32:1300; CHECK: # %bb.0:1301; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1302; CHECK-NEXT: vzext.vf2 v9, v81303; CHECK-NEXT: vfwcvt.f.xu.v v8, v91304; CHECK-NEXT: ret1305 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x float>1306 ret <vscale x 1 x float> %evec1307}1308 1309define <vscale x 1 x double> @vsitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) {1310; CHECK-LABEL: vsitofp_nxv1i8_nxv1f64:1311; CHECK: # %bb.0:1312; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1313; CHECK-NEXT: vsext.vf4 v9, v81314; CHECK-NEXT: vfwcvt.f.x.v v8, v91315; CHECK-NEXT: ret1316 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x double>1317 ret <vscale x 1 x double> %evec1318}1319 1320define <vscale x 1 x double> @vuitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) {1321; CHECK-LABEL: vuitofp_nxv1i8_nxv1f64:1322; CHECK: # %bb.0:1323; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1324; CHECK-NEXT: vzext.vf4 v9, v81325; CHECK-NEXT: vfwcvt.f.xu.v v8, v91326; CHECK-NEXT: ret1327 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x double>1328 ret <vscale x 1 x double> %evec1329}1330 1331define <vscale x 2 x half> @vsitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) {1332; ZVFH-LABEL: vsitofp_nxv2i8_nxv2f16:1333; ZVFH: # %bb.0:1334; ZVFH-NEXT: vsetvli a0, zero, e8, mf4, ta, ma1335; ZVFH-NEXT: vfwcvt.f.x.v v9, v81336; ZVFH-NEXT: vmv1r.v v8, v91337; ZVFH-NEXT: ret1338;1339; ZVFHMIN-LABEL: vsitofp_nxv2i8_nxv2f16:1340; ZVFHMIN: # %bb.0:1341; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1342; ZVFHMIN-NEXT: vsext.vf2 v9, v81343; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v91344; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101345; ZVFHMIN-NEXT: ret1346 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x half>1347 ret <vscale x 2 x half> %evec1348}1349 1350define <vscale x 2 x half> @vuitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) {1351; ZVFH-LABEL: vuitofp_nxv2i8_nxv2f16:1352; ZVFH: # %bb.0:1353; ZVFH-NEXT: vsetvli a0, zero, e8, mf4, ta, ma1354; ZVFH-NEXT: vfwcvt.f.xu.v v9, v81355; ZVFH-NEXT: vmv1r.v v8, v91356; ZVFH-NEXT: ret1357;1358; ZVFHMIN-LABEL: vuitofp_nxv2i8_nxv2f16:1359; ZVFHMIN: # %bb.0:1360; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1361; ZVFHMIN-NEXT: vzext.vf2 v9, v81362; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v91363; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101364; ZVFHMIN-NEXT: ret1365 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x half>1366 ret <vscale x 2 x half> %evec1367}1368 1369define <vscale x 2 x float> @vsitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) {1370; CHECK-LABEL: vsitofp_nxv2i8_nxv2f32:1371; CHECK: # %bb.0:1372; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1373; CHECK-NEXT: vsext.vf2 v9, v81374; CHECK-NEXT: vfwcvt.f.x.v v8, v91375; CHECK-NEXT: ret1376 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x float>1377 ret <vscale x 2 x float> %evec1378}1379 1380define <vscale x 2 x float> @vuitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) {1381; CHECK-LABEL: vuitofp_nxv2i8_nxv2f32:1382; CHECK: # %bb.0:1383; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1384; CHECK-NEXT: vzext.vf2 v9, v81385; CHECK-NEXT: vfwcvt.f.xu.v v8, v91386; CHECK-NEXT: ret1387 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x float>1388 ret <vscale x 2 x float> %evec1389}1390 1391define <vscale x 2 x double> @vsitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) {1392; CHECK-LABEL: vsitofp_nxv2i8_nxv2f64:1393; CHECK: # %bb.0:1394; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1395; CHECK-NEXT: vsext.vf4 v10, v81396; CHECK-NEXT: vfwcvt.f.x.v v8, v101397; CHECK-NEXT: ret1398 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x double>1399 ret <vscale x 2 x double> %evec1400}1401 1402define <vscale x 2 x double> @vuitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) {1403; CHECK-LABEL: vuitofp_nxv2i8_nxv2f64:1404; CHECK: # %bb.0:1405; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1406; CHECK-NEXT: vzext.vf4 v10, v81407; CHECK-NEXT: vfwcvt.f.xu.v v8, v101408; CHECK-NEXT: ret1409 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x double>1410 ret <vscale x 2 x double> %evec1411}1412 1413define <vscale x 4 x half> @vsitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) {1414; ZVFH-LABEL: vsitofp_nxv4i8_nxv4f16:1415; ZVFH: # %bb.0:1416; ZVFH-NEXT: vsetvli a0, zero, e8, mf2, ta, ma1417; ZVFH-NEXT: vfwcvt.f.x.v v9, v81418; ZVFH-NEXT: vmv1r.v v8, v91419; ZVFH-NEXT: ret1420;1421; ZVFHMIN-LABEL: vsitofp_nxv4i8_nxv4f16:1422; ZVFHMIN: # %bb.0:1423; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma1424; ZVFHMIN-NEXT: vsext.vf2 v9, v81425; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v91426; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101427; ZVFHMIN-NEXT: ret1428 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x half>1429 ret <vscale x 4 x half> %evec1430}1431 1432define <vscale x 4 x half> @vuitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) {1433; ZVFH-LABEL: vuitofp_nxv4i8_nxv4f16:1434; ZVFH: # %bb.0:1435; ZVFH-NEXT: vsetvli a0, zero, e8, mf2, ta, ma1436; ZVFH-NEXT: vfwcvt.f.xu.v v9, v81437; ZVFH-NEXT: vmv1r.v v8, v91438; ZVFH-NEXT: ret1439;1440; ZVFHMIN-LABEL: vuitofp_nxv4i8_nxv4f16:1441; ZVFHMIN: # %bb.0:1442; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma1443; ZVFHMIN-NEXT: vzext.vf2 v9, v81444; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v91445; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101446; ZVFHMIN-NEXT: ret1447 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x half>1448 ret <vscale x 4 x half> %evec1449}1450 1451define <vscale x 4 x float> @vsitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) {1452; CHECK-LABEL: vsitofp_nxv4i8_nxv4f32:1453; CHECK: # %bb.0:1454; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma1455; CHECK-NEXT: vsext.vf2 v10, v81456; CHECK-NEXT: vfwcvt.f.x.v v8, v101457; CHECK-NEXT: ret1458 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x float>1459 ret <vscale x 4 x float> %evec1460}1461 1462define <vscale x 4 x float> @vuitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) {1463; CHECK-LABEL: vuitofp_nxv4i8_nxv4f32:1464; CHECK: # %bb.0:1465; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma1466; CHECK-NEXT: vzext.vf2 v10, v81467; CHECK-NEXT: vfwcvt.f.xu.v v8, v101468; CHECK-NEXT: ret1469 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x float>1470 ret <vscale x 4 x float> %evec1471}1472 1473define <vscale x 4 x double> @vsitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) {1474; CHECK-LABEL: vsitofp_nxv4i8_nxv4f64:1475; CHECK: # %bb.0:1476; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1477; CHECK-NEXT: vsext.vf4 v12, v81478; CHECK-NEXT: vfwcvt.f.x.v v8, v121479; CHECK-NEXT: ret1480 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x double>1481 ret <vscale x 4 x double> %evec1482}1483 1484define <vscale x 4 x double> @vuitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) {1485; CHECK-LABEL: vuitofp_nxv4i8_nxv4f64:1486; CHECK: # %bb.0:1487; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1488; CHECK-NEXT: vzext.vf4 v12, v81489; CHECK-NEXT: vfwcvt.f.xu.v v8, v121490; CHECK-NEXT: ret1491 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x double>1492 ret <vscale x 4 x double> %evec1493}1494 1495define <vscale x 8 x half> @vsitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) {1496; ZVFH-LABEL: vsitofp_nxv8i8_nxv8f16:1497; ZVFH: # %bb.0:1498; ZVFH-NEXT: vsetvli a0, zero, e8, m1, ta, ma1499; ZVFH-NEXT: vmv1r.v v10, v81500; ZVFH-NEXT: vfwcvt.f.x.v v8, v101501; ZVFH-NEXT: ret1502;1503; ZVFHMIN-LABEL: vsitofp_nxv8i8_nxv8f16:1504; ZVFHMIN: # %bb.0:1505; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma1506; ZVFHMIN-NEXT: vsext.vf2 v10, v81507; ZVFHMIN-NEXT: vfwcvt.f.x.v v12, v101508; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v121509; ZVFHMIN-NEXT: ret1510 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x half>1511 ret <vscale x 8 x half> %evec1512}1513 1514define <vscale x 8 x half> @vuitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) {1515; ZVFH-LABEL: vuitofp_nxv8i8_nxv8f16:1516; ZVFH: # %bb.0:1517; ZVFH-NEXT: vsetvli a0, zero, e8, m1, ta, ma1518; ZVFH-NEXT: vmv1r.v v10, v81519; ZVFH-NEXT: vfwcvt.f.xu.v v8, v101520; ZVFH-NEXT: ret1521;1522; ZVFHMIN-LABEL: vuitofp_nxv8i8_nxv8f16:1523; ZVFHMIN: # %bb.0:1524; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma1525; ZVFHMIN-NEXT: vzext.vf2 v10, v81526; ZVFHMIN-NEXT: vfwcvt.f.xu.v v12, v101527; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v121528; ZVFHMIN-NEXT: ret1529 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x half>1530 ret <vscale x 8 x half> %evec1531}1532 1533define <vscale x 8 x float> @vsitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) {1534; CHECK-LABEL: vsitofp_nxv8i8_nxv8f32:1535; CHECK: # %bb.0:1536; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma1537; CHECK-NEXT: vsext.vf2 v12, v81538; CHECK-NEXT: vfwcvt.f.x.v v8, v121539; CHECK-NEXT: ret1540 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x float>1541 ret <vscale x 8 x float> %evec1542}1543 1544define <vscale x 8 x float> @vuitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) {1545; CHECK-LABEL: vuitofp_nxv8i8_nxv8f32:1546; CHECK: # %bb.0:1547; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma1548; CHECK-NEXT: vzext.vf2 v12, v81549; CHECK-NEXT: vfwcvt.f.xu.v v8, v121550; CHECK-NEXT: ret1551 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x float>1552 ret <vscale x 8 x float> %evec1553}1554 1555define <vscale x 8 x double> @vsitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) {1556; CHECK-LABEL: vsitofp_nxv8i8_nxv8f64:1557; CHECK: # %bb.0:1558; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1559; CHECK-NEXT: vsext.vf4 v16, v81560; CHECK-NEXT: vfwcvt.f.x.v v8, v161561; CHECK-NEXT: ret1562 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x double>1563 ret <vscale x 8 x double> %evec1564}1565 1566define <vscale x 8 x double> @vuitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) {1567; CHECK-LABEL: vuitofp_nxv8i8_nxv8f64:1568; CHECK: # %bb.0:1569; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1570; CHECK-NEXT: vzext.vf4 v16, v81571; CHECK-NEXT: vfwcvt.f.xu.v v8, v161572; CHECK-NEXT: ret1573 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x double>1574 ret <vscale x 8 x double> %evec1575}1576 1577define <vscale x 16 x half> @vsitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) {1578; ZVFH-LABEL: vsitofp_nxv16i8_nxv16f16:1579; ZVFH: # %bb.0:1580; ZVFH-NEXT: vsetvli a0, zero, e8, m2, ta, ma1581; ZVFH-NEXT: vmv2r.v v12, v81582; ZVFH-NEXT: vfwcvt.f.x.v v8, v121583; ZVFH-NEXT: ret1584;1585; ZVFHMIN-LABEL: vsitofp_nxv16i8_nxv16f16:1586; ZVFHMIN: # %bb.0:1587; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1588; ZVFHMIN-NEXT: vsext.vf2 v12, v81589; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v121590; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v161591; ZVFHMIN-NEXT: ret1592 %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x half>1593 ret <vscale x 16 x half> %evec1594}1595 1596define <vscale x 16 x half> @vuitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) {1597; ZVFH-LABEL: vuitofp_nxv16i8_nxv16f16:1598; ZVFH: # %bb.0:1599; ZVFH-NEXT: vsetvli a0, zero, e8, m2, ta, ma1600; ZVFH-NEXT: vmv2r.v v12, v81601; ZVFH-NEXT: vfwcvt.f.xu.v v8, v121602; ZVFH-NEXT: ret1603;1604; ZVFHMIN-LABEL: vuitofp_nxv16i8_nxv16f16:1605; ZVFHMIN: # %bb.0:1606; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1607; ZVFHMIN-NEXT: vzext.vf2 v12, v81608; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v121609; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v161610; ZVFHMIN-NEXT: ret1611 %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x half>1612 ret <vscale x 16 x half> %evec1613}1614 1615define <vscale x 16 x float> @vsitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) {1616; CHECK-LABEL: vsitofp_nxv16i8_nxv16f32:1617; CHECK: # %bb.0:1618; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma1619; CHECK-NEXT: vsext.vf2 v16, v81620; CHECK-NEXT: vfwcvt.f.x.v v8, v161621; CHECK-NEXT: ret1622 %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x float>1623 ret <vscale x 16 x float> %evec1624}1625 1626define <vscale x 16 x float> @vuitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) {1627; CHECK-LABEL: vuitofp_nxv16i8_nxv16f32:1628; CHECK: # %bb.0:1629; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma1630; CHECK-NEXT: vzext.vf2 v16, v81631; CHECK-NEXT: vfwcvt.f.xu.v v8, v161632; CHECK-NEXT: ret1633 %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x float>1634 ret <vscale x 16 x float> %evec1635}1636 1637define <vscale x 32 x half> @vsitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) {1638; ZVFH-LABEL: vsitofp_nxv32i8_nxv32f16:1639; ZVFH: # %bb.0:1640; ZVFH-NEXT: vsetvli a0, zero, e8, m4, ta, ma1641; ZVFH-NEXT: vmv4r.v v16, v81642; ZVFH-NEXT: vfwcvt.f.x.v v8, v161643; ZVFH-NEXT: ret1644;1645; ZVFHMIN-LABEL: vsitofp_nxv32i8_nxv32f16:1646; ZVFHMIN: # %bb.0:1647; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1648; ZVFHMIN-NEXT: vsext.vf2 v12, v81649; ZVFHMIN-NEXT: vsext.vf2 v24, v101650; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v121651; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v161652; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v241653; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v161654; ZVFHMIN-NEXT: ret1655 %evec = sitofp <vscale x 32 x i8> %va to <vscale x 32 x half>1656 ret <vscale x 32 x half> %evec1657}1658 1659define <vscale x 32 x half> @vuitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) {1660; ZVFH-LABEL: vuitofp_nxv32i8_nxv32f16:1661; ZVFH: # %bb.0:1662; ZVFH-NEXT: vsetvli a0, zero, e8, m4, ta, ma1663; ZVFH-NEXT: vmv4r.v v16, v81664; ZVFH-NEXT: vfwcvt.f.xu.v v8, v161665; ZVFH-NEXT: ret1666;1667; ZVFHMIN-LABEL: vuitofp_nxv32i8_nxv32f16:1668; ZVFHMIN: # %bb.0:1669; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma1670; ZVFHMIN-NEXT: vzext.vf2 v12, v81671; ZVFHMIN-NEXT: vzext.vf2 v24, v101672; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v121673; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v161674; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v241675; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v161676; ZVFHMIN-NEXT: ret1677 %evec = uitofp <vscale x 32 x i8> %va to <vscale x 32 x half>1678 ret <vscale x 32 x half> %evec1679}1680 1681define <vscale x 1 x half> @vsitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) {1682; ZVFH-LABEL: vsitofp_nxv1i16_nxv1f16:1683; ZVFH: # %bb.0:1684; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1685; ZVFH-NEXT: vfcvt.f.x.v v8, v81686; ZVFH-NEXT: ret1687;1688; ZVFHMIN-LABEL: vsitofp_nxv1i16_nxv1f16:1689; ZVFHMIN: # %bb.0:1690; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1691; ZVFHMIN-NEXT: vfwcvt.f.x.v v9, v81692; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v91693; ZVFHMIN-NEXT: ret1694 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x half>1695 ret <vscale x 1 x half> %evec1696}1697 1698define <vscale x 1 x half> @vuitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) {1699; ZVFH-LABEL: vuitofp_nxv1i16_nxv1f16:1700; ZVFH: # %bb.0:1701; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1702; ZVFH-NEXT: vfcvt.f.xu.v v8, v81703; ZVFH-NEXT: ret1704;1705; ZVFHMIN-LABEL: vuitofp_nxv1i16_nxv1f16:1706; ZVFHMIN: # %bb.0:1707; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1708; ZVFHMIN-NEXT: vfwcvt.f.xu.v v9, v81709; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v91710; ZVFHMIN-NEXT: ret1711 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x half>1712 ret <vscale x 1 x half> %evec1713}1714 1715define <vscale x 1 x float> @vsitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) {1716; CHECK-LABEL: vsitofp_nxv1i16_nxv1f32:1717; CHECK: # %bb.0:1718; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1719; CHECK-NEXT: vfwcvt.f.x.v v9, v81720; CHECK-NEXT: vmv1r.v v8, v91721; CHECK-NEXT: ret1722 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x float>1723 ret <vscale x 1 x float> %evec1724}1725 1726define <vscale x 1 x float> @vuitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) {1727; CHECK-LABEL: vuitofp_nxv1i16_nxv1f32:1728; CHECK: # %bb.0:1729; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma1730; CHECK-NEXT: vfwcvt.f.xu.v v9, v81731; CHECK-NEXT: vmv1r.v v8, v91732; CHECK-NEXT: ret1733 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x float>1734 ret <vscale x 1 x float> %evec1735}1736 1737define <vscale x 1 x double> @vsitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) {1738; CHECK-LABEL: vsitofp_nxv1i16_nxv1f64:1739; CHECK: # %bb.0:1740; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1741; CHECK-NEXT: vsext.vf2 v9, v81742; CHECK-NEXT: vfwcvt.f.x.v v8, v91743; CHECK-NEXT: ret1744 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x double>1745 ret <vscale x 1 x double> %evec1746}1747 1748define <vscale x 1 x double> @vuitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) {1749; CHECK-LABEL: vuitofp_nxv1i16_nxv1f64:1750; CHECK: # %bb.0:1751; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma1752; CHECK-NEXT: vzext.vf2 v9, v81753; CHECK-NEXT: vfwcvt.f.xu.v v8, v91754; CHECK-NEXT: ret1755 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x double>1756 ret <vscale x 1 x double> %evec1757}1758 1759define <vscale x 2 x half> @vsitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) {1760; ZVFH-LABEL: vsitofp_nxv2i16_nxv2f16:1761; ZVFH: # %bb.0:1762; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1763; ZVFH-NEXT: vfcvt.f.x.v v8, v81764; ZVFH-NEXT: ret1765;1766; ZVFHMIN-LABEL: vsitofp_nxv2i16_nxv2f16:1767; ZVFHMIN: # %bb.0:1768; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1769; ZVFHMIN-NEXT: vfwcvt.f.x.v v9, v81770; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v91771; ZVFHMIN-NEXT: ret1772 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x half>1773 ret <vscale x 2 x half> %evec1774}1775 1776define <vscale x 2 x half> @vuitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) {1777; ZVFH-LABEL: vuitofp_nxv2i16_nxv2f16:1778; ZVFH: # %bb.0:1779; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1780; ZVFH-NEXT: vfcvt.f.xu.v v8, v81781; ZVFH-NEXT: ret1782;1783; ZVFHMIN-LABEL: vuitofp_nxv2i16_nxv2f16:1784; ZVFHMIN: # %bb.0:1785; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1786; ZVFHMIN-NEXT: vfwcvt.f.xu.v v9, v81787; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v91788; ZVFHMIN-NEXT: ret1789 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x half>1790 ret <vscale x 2 x half> %evec1791}1792 1793define <vscale x 2 x float> @vsitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) {1794; CHECK-LABEL: vsitofp_nxv2i16_nxv2f32:1795; CHECK: # %bb.0:1796; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1797; CHECK-NEXT: vfwcvt.f.x.v v9, v81798; CHECK-NEXT: vmv1r.v v8, v91799; CHECK-NEXT: ret1800 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x float>1801 ret <vscale x 2 x float> %evec1802}1803 1804define <vscale x 2 x float> @vuitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) {1805; CHECK-LABEL: vuitofp_nxv2i16_nxv2f32:1806; CHECK: # %bb.0:1807; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma1808; CHECK-NEXT: vfwcvt.f.xu.v v9, v81809; CHECK-NEXT: vmv1r.v v8, v91810; CHECK-NEXT: ret1811 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x float>1812 ret <vscale x 2 x float> %evec1813}1814 1815define <vscale x 2 x double> @vsitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) {1816; CHECK-LABEL: vsitofp_nxv2i16_nxv2f64:1817; CHECK: # %bb.0:1818; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1819; CHECK-NEXT: vsext.vf2 v10, v81820; CHECK-NEXT: vfwcvt.f.x.v v8, v101821; CHECK-NEXT: ret1822 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x double>1823 ret <vscale x 2 x double> %evec1824}1825 1826define <vscale x 2 x double> @vuitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) {1827; CHECK-LABEL: vuitofp_nxv2i16_nxv2f64:1828; CHECK: # %bb.0:1829; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma1830; CHECK-NEXT: vzext.vf2 v10, v81831; CHECK-NEXT: vfwcvt.f.xu.v v8, v101832; CHECK-NEXT: ret1833 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x double>1834 ret <vscale x 2 x double> %evec1835}1836 1837define <vscale x 4 x half> @vsitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) {1838; ZVFH-LABEL: vsitofp_nxv4i16_nxv4f16:1839; ZVFH: # %bb.0:1840; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma1841; ZVFH-NEXT: vfcvt.f.x.v v8, v81842; ZVFH-NEXT: ret1843;1844; ZVFHMIN-LABEL: vsitofp_nxv4i16_nxv4f16:1845; ZVFHMIN: # %bb.0:1846; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma1847; ZVFHMIN-NEXT: vfwcvt.f.x.v v10, v81848; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101849; ZVFHMIN-NEXT: ret1850 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x half>1851 ret <vscale x 4 x half> %evec1852}1853 1854define <vscale x 4 x half> @vuitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) {1855; ZVFH-LABEL: vuitofp_nxv4i16_nxv4f16:1856; ZVFH: # %bb.0:1857; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma1858; ZVFH-NEXT: vfcvt.f.xu.v v8, v81859; ZVFH-NEXT: ret1860;1861; ZVFHMIN-LABEL: vuitofp_nxv4i16_nxv4f16:1862; ZVFHMIN: # %bb.0:1863; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma1864; ZVFHMIN-NEXT: vfwcvt.f.xu.v v10, v81865; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v101866; ZVFHMIN-NEXT: ret1867 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x half>1868 ret <vscale x 4 x half> %evec1869}1870 1871define <vscale x 4 x float> @vsitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) {1872; CHECK-LABEL: vsitofp_nxv4i16_nxv4f32:1873; CHECK: # %bb.0:1874; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma1875; CHECK-NEXT: vmv1r.v v10, v81876; CHECK-NEXT: vfwcvt.f.x.v v8, v101877; CHECK-NEXT: ret1878 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x float>1879 ret <vscale x 4 x float> %evec1880}1881 1882define <vscale x 4 x float> @vuitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) {1883; CHECK-LABEL: vuitofp_nxv4i16_nxv4f32:1884; CHECK: # %bb.0:1885; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma1886; CHECK-NEXT: vmv1r.v v10, v81887; CHECK-NEXT: vfwcvt.f.xu.v v8, v101888; CHECK-NEXT: ret1889 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x float>1890 ret <vscale x 4 x float> %evec1891}1892 1893define <vscale x 4 x double> @vsitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) {1894; CHECK-LABEL: vsitofp_nxv4i16_nxv4f64:1895; CHECK: # %bb.0:1896; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1897; CHECK-NEXT: vsext.vf2 v12, v81898; CHECK-NEXT: vfwcvt.f.x.v v8, v121899; CHECK-NEXT: ret1900 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x double>1901 ret <vscale x 4 x double> %evec1902}1903 1904define <vscale x 4 x double> @vuitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) {1905; CHECK-LABEL: vuitofp_nxv4i16_nxv4f64:1906; CHECK: # %bb.0:1907; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma1908; CHECK-NEXT: vzext.vf2 v12, v81909; CHECK-NEXT: vfwcvt.f.xu.v v8, v121910; CHECK-NEXT: ret1911 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x double>1912 ret <vscale x 4 x double> %evec1913}1914 1915define <vscale x 8 x half> @vsitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) {1916; ZVFH-LABEL: vsitofp_nxv8i16_nxv8f16:1917; ZVFH: # %bb.0:1918; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma1919; ZVFH-NEXT: vfcvt.f.x.v v8, v81920; ZVFH-NEXT: ret1921;1922; ZVFHMIN-LABEL: vsitofp_nxv8i16_nxv8f16:1923; ZVFHMIN: # %bb.0:1924; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma1925; ZVFHMIN-NEXT: vfwcvt.f.x.v v12, v81926; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v121927; ZVFHMIN-NEXT: ret1928 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x half>1929 ret <vscale x 8 x half> %evec1930}1931 1932define <vscale x 8 x half> @vuitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) {1933; ZVFH-LABEL: vuitofp_nxv8i16_nxv8f16:1934; ZVFH: # %bb.0:1935; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma1936; ZVFH-NEXT: vfcvt.f.xu.v v8, v81937; ZVFH-NEXT: ret1938;1939; ZVFHMIN-LABEL: vuitofp_nxv8i16_nxv8f16:1940; ZVFHMIN: # %bb.0:1941; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma1942; ZVFHMIN-NEXT: vfwcvt.f.xu.v v12, v81943; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v121944; ZVFHMIN-NEXT: ret1945 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x half>1946 ret <vscale x 8 x half> %evec1947}1948 1949define <vscale x 8 x float> @vsitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) {1950; CHECK-LABEL: vsitofp_nxv8i16_nxv8f32:1951; CHECK: # %bb.0:1952; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma1953; CHECK-NEXT: vmv2r.v v12, v81954; CHECK-NEXT: vfwcvt.f.x.v v8, v121955; CHECK-NEXT: ret1956 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x float>1957 ret <vscale x 8 x float> %evec1958}1959 1960define <vscale x 8 x float> @vuitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) {1961; CHECK-LABEL: vuitofp_nxv8i16_nxv8f32:1962; CHECK: # %bb.0:1963; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma1964; CHECK-NEXT: vmv2r.v v12, v81965; CHECK-NEXT: vfwcvt.f.xu.v v8, v121966; CHECK-NEXT: ret1967 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x float>1968 ret <vscale x 8 x float> %evec1969}1970 1971define <vscale x 8 x double> @vsitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) {1972; CHECK-LABEL: vsitofp_nxv8i16_nxv8f64:1973; CHECK: # %bb.0:1974; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1975; CHECK-NEXT: vsext.vf2 v16, v81976; CHECK-NEXT: vfwcvt.f.x.v v8, v161977; CHECK-NEXT: ret1978 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x double>1979 ret <vscale x 8 x double> %evec1980}1981 1982define <vscale x 8 x double> @vuitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) {1983; CHECK-LABEL: vuitofp_nxv8i16_nxv8f64:1984; CHECK: # %bb.0:1985; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma1986; CHECK-NEXT: vzext.vf2 v16, v81987; CHECK-NEXT: vfwcvt.f.xu.v v8, v161988; CHECK-NEXT: ret1989 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x double>1990 ret <vscale x 8 x double> %evec1991}1992 1993define <vscale x 16 x half> @vsitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) {1994; ZVFH-LABEL: vsitofp_nxv16i16_nxv16f16:1995; ZVFH: # %bb.0:1996; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma1997; ZVFH-NEXT: vfcvt.f.x.v v8, v81998; ZVFH-NEXT: ret1999;2000; ZVFHMIN-LABEL: vsitofp_nxv16i16_nxv16f16:2001; ZVFHMIN: # %bb.0:2002; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma2003; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v82004; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v162005; ZVFHMIN-NEXT: ret2006 %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x half>2007 ret <vscale x 16 x half> %evec2008}2009 2010define <vscale x 16 x half> @vuitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) {2011; ZVFH-LABEL: vuitofp_nxv16i16_nxv16f16:2012; ZVFH: # %bb.0:2013; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma2014; ZVFH-NEXT: vfcvt.f.xu.v v8, v82015; ZVFH-NEXT: ret2016;2017; ZVFHMIN-LABEL: vuitofp_nxv16i16_nxv16f16:2018; ZVFHMIN: # %bb.0:2019; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma2020; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v82021; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v162022; ZVFHMIN-NEXT: ret2023 %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x half>2024 ret <vscale x 16 x half> %evec2025}2026 2027define <vscale x 16 x float> @vsitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) {2028; CHECK-LABEL: vsitofp_nxv16i16_nxv16f32:2029; CHECK: # %bb.0:2030; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma2031; CHECK-NEXT: vmv4r.v v16, v82032; CHECK-NEXT: vfwcvt.f.x.v v8, v162033; CHECK-NEXT: ret2034 %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x float>2035 ret <vscale x 16 x float> %evec2036}2037 2038define <vscale x 16 x float> @vuitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) {2039; CHECK-LABEL: vuitofp_nxv16i16_nxv16f32:2040; CHECK: # %bb.0:2041; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma2042; CHECK-NEXT: vmv4r.v v16, v82043; CHECK-NEXT: vfwcvt.f.xu.v v8, v162044; CHECK-NEXT: ret2045 %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x float>2046 ret <vscale x 16 x float> %evec2047}2048 2049define <vscale x 32 x half> @vsitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) {2050; ZVFH-LABEL: vsitofp_nxv32i16_nxv32f16:2051; ZVFH: # %bb.0:2052; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma2053; ZVFH-NEXT: vfcvt.f.x.v v8, v82054; ZVFH-NEXT: ret2055;2056; ZVFHMIN-LABEL: vsitofp_nxv32i16_nxv32f16:2057; ZVFHMIN: # %bb.0:2058; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma2059; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v82060; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v162061; ZVFHMIN-NEXT: vfwcvt.f.x.v v16, v122062; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v162063; ZVFHMIN-NEXT: ret2064 %evec = sitofp <vscale x 32 x i16> %va to <vscale x 32 x half>2065 ret <vscale x 32 x half> %evec2066}2067 2068define <vscale x 32 x half> @vuitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) {2069; ZVFH-LABEL: vuitofp_nxv32i16_nxv32f16:2070; ZVFH: # %bb.0:2071; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma2072; ZVFH-NEXT: vfcvt.f.xu.v v8, v82073; ZVFH-NEXT: ret2074;2075; ZVFHMIN-LABEL: vuitofp_nxv32i16_nxv32f16:2076; ZVFHMIN: # %bb.0:2077; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma2078; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v82079; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v162080; ZVFHMIN-NEXT: vfwcvt.f.xu.v v16, v122081; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v162082; ZVFHMIN-NEXT: ret2083 %evec = uitofp <vscale x 32 x i16> %va to <vscale x 32 x half>2084 ret <vscale x 32 x half> %evec2085}2086 2087define <vscale x 1 x half> @vsitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) {2088; ZVFH-LABEL: vsitofp_nxv1i32_nxv1f16:2089; ZVFH: # %bb.0:2090; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma2091; ZVFH-NEXT: vfncvt.f.x.w v9, v82092; ZVFH-NEXT: vmv1r.v v8, v92093; ZVFH-NEXT: ret2094;2095; ZVFHMIN-LABEL: vsitofp_nxv1i32_nxv1f16:2096; ZVFHMIN: # %bb.0:2097; ZVFHMIN-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2098; ZVFHMIN-NEXT: vfcvt.f.x.v v9, v82099; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma2100; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v92101; ZVFHMIN-NEXT: ret2102 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x half>2103 ret <vscale x 1 x half> %evec2104}2105 2106define <vscale x 1 x half> @vuitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) {2107; ZVFH-LABEL: vuitofp_nxv1i32_nxv1f16:2108; ZVFH: # %bb.0:2109; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma2110; ZVFH-NEXT: vfncvt.f.xu.w v9, v82111; ZVFH-NEXT: vmv1r.v v8, v92112; ZVFH-NEXT: ret2113;2114; ZVFHMIN-LABEL: vuitofp_nxv1i32_nxv1f16:2115; ZVFHMIN: # %bb.0:2116; ZVFHMIN-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2117; ZVFHMIN-NEXT: vfcvt.f.xu.v v9, v82118; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma2119; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v92120; ZVFHMIN-NEXT: ret2121 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x half>2122 ret <vscale x 1 x half> %evec2123}2124 2125define <vscale x 1 x float> @vsitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) {2126; CHECK-LABEL: vsitofp_nxv1i32_nxv1f32:2127; CHECK: # %bb.0:2128; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2129; CHECK-NEXT: vfcvt.f.x.v v8, v82130; CHECK-NEXT: ret2131 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x float>2132 ret <vscale x 1 x float> %evec2133}2134 2135define <vscale x 1 x float> @vuitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) {2136; CHECK-LABEL: vuitofp_nxv1i32_nxv1f32:2137; CHECK: # %bb.0:2138; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2139; CHECK-NEXT: vfcvt.f.xu.v v8, v82140; CHECK-NEXT: ret2141 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x float>2142 ret <vscale x 1 x float> %evec2143}2144 2145define <vscale x 1 x double> @vsitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) {2146; CHECK-LABEL: vsitofp_nxv1i32_nxv1f64:2147; CHECK: # %bb.0:2148; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2149; CHECK-NEXT: vfwcvt.f.x.v v9, v82150; CHECK-NEXT: vmv1r.v v8, v92151; CHECK-NEXT: ret2152 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x double>2153 ret <vscale x 1 x double> %evec2154}2155 2156define <vscale x 1 x double> @vuitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) {2157; CHECK-LABEL: vuitofp_nxv1i32_nxv1f64:2158; CHECK: # %bb.0:2159; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2160; CHECK-NEXT: vfwcvt.f.xu.v v9, v82161; CHECK-NEXT: vmv1r.v v8, v92162; CHECK-NEXT: ret2163 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x double>2164 ret <vscale x 1 x double> %evec2165}2166 2167define <vscale x 2 x half> @vsitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) {2168; ZVFH-LABEL: vsitofp_nxv2i32_nxv2f16:2169; ZVFH: # %bb.0:2170; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma2171; ZVFH-NEXT: vfncvt.f.x.w v9, v82172; ZVFH-NEXT: vmv1r.v v8, v92173; ZVFH-NEXT: ret2174;2175; ZVFHMIN-LABEL: vsitofp_nxv2i32_nxv2f16:2176; ZVFHMIN: # %bb.0:2177; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m1, ta, ma2178; ZVFHMIN-NEXT: vfcvt.f.x.v v9, v82179; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma2180; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v92181; ZVFHMIN-NEXT: ret2182 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x half>2183 ret <vscale x 2 x half> %evec2184}2185 2186define <vscale x 2 x half> @vuitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) {2187; ZVFH-LABEL: vuitofp_nxv2i32_nxv2f16:2188; ZVFH: # %bb.0:2189; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma2190; ZVFH-NEXT: vfncvt.f.xu.w v9, v82191; ZVFH-NEXT: vmv1r.v v8, v92192; ZVFH-NEXT: ret2193;2194; ZVFHMIN-LABEL: vuitofp_nxv2i32_nxv2f16:2195; ZVFHMIN: # %bb.0:2196; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m1, ta, ma2197; ZVFHMIN-NEXT: vfcvt.f.xu.v v9, v82198; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma2199; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v92200; ZVFHMIN-NEXT: ret2201 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x half>2202 ret <vscale x 2 x half> %evec2203}2204 2205define <vscale x 2 x float> @vsitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) {2206; CHECK-LABEL: vsitofp_nxv2i32_nxv2f32:2207; CHECK: # %bb.0:2208; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma2209; CHECK-NEXT: vfcvt.f.x.v v8, v82210; CHECK-NEXT: ret2211 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x float>2212 ret <vscale x 2 x float> %evec2213}2214 2215define <vscale x 2 x float> @vuitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) {2216; CHECK-LABEL: vuitofp_nxv2i32_nxv2f32:2217; CHECK: # %bb.0:2218; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma2219; CHECK-NEXT: vfcvt.f.xu.v v8, v82220; CHECK-NEXT: ret2221 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x float>2222 ret <vscale x 2 x float> %evec2223}2224 2225define <vscale x 2 x double> @vsitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) {2226; CHECK-LABEL: vsitofp_nxv2i32_nxv2f64:2227; CHECK: # %bb.0:2228; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma2229; CHECK-NEXT: vmv1r.v v10, v82230; CHECK-NEXT: vfwcvt.f.x.v v8, v102231; CHECK-NEXT: ret2232 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x double>2233 ret <vscale x 2 x double> %evec2234}2235 2236define <vscale x 2 x double> @vuitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) {2237; CHECK-LABEL: vuitofp_nxv2i32_nxv2f64:2238; CHECK: # %bb.0:2239; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma2240; CHECK-NEXT: vmv1r.v v10, v82241; CHECK-NEXT: vfwcvt.f.xu.v v8, v102242; CHECK-NEXT: ret2243 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x double>2244 ret <vscale x 2 x double> %evec2245}2246 2247define <vscale x 4 x half> @vsitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) {2248; ZVFH-LABEL: vsitofp_nxv4i32_nxv4f16:2249; ZVFH: # %bb.0:2250; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma2251; ZVFH-NEXT: vfncvt.f.x.w v10, v82252; ZVFH-NEXT: vmv.v.v v8, v102253; ZVFH-NEXT: ret2254;2255; ZVFHMIN-LABEL: vsitofp_nxv4i32_nxv4f16:2256; ZVFHMIN: # %bb.0:2257; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m2, ta, ma2258; ZVFHMIN-NEXT: vfcvt.f.x.v v10, v82259; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma2260; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v102261; ZVFHMIN-NEXT: ret2262 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x half>2263 ret <vscale x 4 x half> %evec2264}2265 2266define <vscale x 4 x half> @vuitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) {2267; ZVFH-LABEL: vuitofp_nxv4i32_nxv4f16:2268; ZVFH: # %bb.0:2269; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma2270; ZVFH-NEXT: vfncvt.f.xu.w v10, v82271; ZVFH-NEXT: vmv.v.v v8, v102272; ZVFH-NEXT: ret2273;2274; ZVFHMIN-LABEL: vuitofp_nxv4i32_nxv4f16:2275; ZVFHMIN: # %bb.0:2276; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m2, ta, ma2277; ZVFHMIN-NEXT: vfcvt.f.xu.v v10, v82278; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma2279; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v102280; ZVFHMIN-NEXT: ret2281 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x half>2282 ret <vscale x 4 x half> %evec2283}2284 2285define <vscale x 4 x float> @vsitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) {2286; CHECK-LABEL: vsitofp_nxv4i32_nxv4f32:2287; CHECK: # %bb.0:2288; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma2289; CHECK-NEXT: vfcvt.f.x.v v8, v82290; CHECK-NEXT: ret2291 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x float>2292 ret <vscale x 4 x float> %evec2293}2294 2295define <vscale x 4 x float> @vuitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) {2296; CHECK-LABEL: vuitofp_nxv4i32_nxv4f32:2297; CHECK: # %bb.0:2298; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma2299; CHECK-NEXT: vfcvt.f.xu.v v8, v82300; CHECK-NEXT: ret2301 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x float>2302 ret <vscale x 4 x float> %evec2303}2304 2305define <vscale x 4 x double> @vsitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) {2306; CHECK-LABEL: vsitofp_nxv4i32_nxv4f64:2307; CHECK: # %bb.0:2308; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma2309; CHECK-NEXT: vmv2r.v v12, v82310; CHECK-NEXT: vfwcvt.f.x.v v8, v122311; CHECK-NEXT: ret2312 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x double>2313 ret <vscale x 4 x double> %evec2314}2315 2316define <vscale x 4 x double> @vuitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) {2317; CHECK-LABEL: vuitofp_nxv4i32_nxv4f64:2318; CHECK: # %bb.0:2319; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma2320; CHECK-NEXT: vmv2r.v v12, v82321; CHECK-NEXT: vfwcvt.f.xu.v v8, v122322; CHECK-NEXT: ret2323 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x double>2324 ret <vscale x 4 x double> %evec2325}2326 2327define <vscale x 8 x half> @vsitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) {2328; ZVFH-LABEL: vsitofp_nxv8i32_nxv8f16:2329; ZVFH: # %bb.0:2330; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma2331; ZVFH-NEXT: vfncvt.f.x.w v12, v82332; ZVFH-NEXT: vmv.v.v v8, v122333; ZVFH-NEXT: ret2334;2335; ZVFHMIN-LABEL: vsitofp_nxv8i32_nxv8f16:2336; ZVFHMIN: # %bb.0:2337; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma2338; ZVFHMIN-NEXT: vfcvt.f.x.v v12, v82339; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma2340; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v122341; ZVFHMIN-NEXT: ret2342 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x half>2343 ret <vscale x 8 x half> %evec2344}2345 2346define <vscale x 8 x half> @vuitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) {2347; ZVFH-LABEL: vuitofp_nxv8i32_nxv8f16:2348; ZVFH: # %bb.0:2349; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma2350; ZVFH-NEXT: vfncvt.f.xu.w v12, v82351; ZVFH-NEXT: vmv.v.v v8, v122352; ZVFH-NEXT: ret2353;2354; ZVFHMIN-LABEL: vuitofp_nxv8i32_nxv8f16:2355; ZVFHMIN: # %bb.0:2356; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m4, ta, ma2357; ZVFHMIN-NEXT: vfcvt.f.xu.v v12, v82358; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma2359; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v122360; ZVFHMIN-NEXT: ret2361 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x half>2362 ret <vscale x 8 x half> %evec2363}2364 2365define <vscale x 8 x float> @vsitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) {2366; CHECK-LABEL: vsitofp_nxv8i32_nxv8f32:2367; CHECK: # %bb.0:2368; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma2369; CHECK-NEXT: vfcvt.f.x.v v8, v82370; CHECK-NEXT: ret2371 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x float>2372 ret <vscale x 8 x float> %evec2373}2374 2375define <vscale x 8 x float> @vuitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) {2376; CHECK-LABEL: vuitofp_nxv8i32_nxv8f32:2377; CHECK: # %bb.0:2378; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma2379; CHECK-NEXT: vfcvt.f.xu.v v8, v82380; CHECK-NEXT: ret2381 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x float>2382 ret <vscale x 8 x float> %evec2383}2384 2385define <vscale x 8 x double> @vsitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) {2386; CHECK-LABEL: vsitofp_nxv8i32_nxv8f64:2387; CHECK: # %bb.0:2388; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma2389; CHECK-NEXT: vmv4r.v v16, v82390; CHECK-NEXT: vfwcvt.f.x.v v8, v162391; CHECK-NEXT: ret2392 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x double>2393 ret <vscale x 8 x double> %evec2394}2395 2396define <vscale x 8 x double> @vuitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) {2397; CHECK-LABEL: vuitofp_nxv8i32_nxv8f64:2398; CHECK: # %bb.0:2399; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma2400; CHECK-NEXT: vmv4r.v v16, v82401; CHECK-NEXT: vfwcvt.f.xu.v v8, v162402; CHECK-NEXT: ret2403 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x double>2404 ret <vscale x 8 x double> %evec2405}2406 2407define <vscale x 16 x half> @vsitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) {2408; ZVFH-LABEL: vsitofp_nxv16i32_nxv16f16:2409; ZVFH: # %bb.0:2410; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma2411; ZVFH-NEXT: vfncvt.f.x.w v16, v82412; ZVFH-NEXT: vmv.v.v v8, v162413; ZVFH-NEXT: ret2414;2415; ZVFHMIN-LABEL: vsitofp_nxv16i32_nxv16f16:2416; ZVFHMIN: # %bb.0:2417; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m8, ta, ma2418; ZVFHMIN-NEXT: vfcvt.f.x.v v16, v82419; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma2420; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v162421; ZVFHMIN-NEXT: ret2422 %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x half>2423 ret <vscale x 16 x half> %evec2424}2425 2426define <vscale x 16 x half> @vuitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) {2427; ZVFH-LABEL: vuitofp_nxv16i32_nxv16f16:2428; ZVFH: # %bb.0:2429; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma2430; ZVFH-NEXT: vfncvt.f.xu.w v16, v82431; ZVFH-NEXT: vmv.v.v v8, v162432; ZVFH-NEXT: ret2433;2434; ZVFHMIN-LABEL: vuitofp_nxv16i32_nxv16f16:2435; ZVFHMIN: # %bb.0:2436; ZVFHMIN-NEXT: vsetvli a0, zero, e32, m8, ta, ma2437; ZVFHMIN-NEXT: vfcvt.f.xu.v v16, v82438; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma2439; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v162440; ZVFHMIN-NEXT: ret2441 %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x half>2442 ret <vscale x 16 x half> %evec2443}2444 2445define <vscale x 16 x float> @vsitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) {2446; CHECK-LABEL: vsitofp_nxv16i32_nxv16f32:2447; CHECK: # %bb.0:2448; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma2449; CHECK-NEXT: vfcvt.f.x.v v8, v82450; CHECK-NEXT: ret2451 %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x float>2452 ret <vscale x 16 x float> %evec2453}2454 2455define <vscale x 16 x float> @vuitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) {2456; CHECK-LABEL: vuitofp_nxv16i32_nxv16f32:2457; CHECK: # %bb.0:2458; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma2459; CHECK-NEXT: vfcvt.f.xu.v v8, v82460; CHECK-NEXT: ret2461 %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x float>2462 ret <vscale x 16 x float> %evec2463}2464 2465define <vscale x 1 x half> @vsitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) {2466; CHECK-LABEL: vsitofp_nxv1i64_nxv1f16:2467; CHECK: # %bb.0:2468; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2469; CHECK-NEXT: vfncvt.f.x.w v9, v82470; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma2471; CHECK-NEXT: vfncvt.f.f.w v8, v92472; CHECK-NEXT: ret2473 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x half>2474 ret <vscale x 1 x half> %evec2475}2476 2477define <vscale x 1 x half> @vuitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) {2478; CHECK-LABEL: vuitofp_nxv1i64_nxv1f16:2479; CHECK: # %bb.0:2480; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2481; CHECK-NEXT: vfncvt.f.xu.w v9, v82482; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma2483; CHECK-NEXT: vfncvt.f.f.w v8, v92484; CHECK-NEXT: ret2485 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x half>2486 ret <vscale x 1 x half> %evec2487}2488 2489define <vscale x 1 x float> @vsitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) {2490; CHECK-LABEL: vsitofp_nxv1i64_nxv1f32:2491; CHECK: # %bb.0:2492; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2493; CHECK-NEXT: vfncvt.f.x.w v9, v82494; CHECK-NEXT: vmv1r.v v8, v92495; CHECK-NEXT: ret2496 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x float>2497 ret <vscale x 1 x float> %evec2498}2499 2500define <vscale x 1 x float> @vuitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) {2501; CHECK-LABEL: vuitofp_nxv1i64_nxv1f32:2502; CHECK: # %bb.0:2503; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma2504; CHECK-NEXT: vfncvt.f.xu.w v9, v82505; CHECK-NEXT: vmv1r.v v8, v92506; CHECK-NEXT: ret2507 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x float>2508 ret <vscale x 1 x float> %evec2509}2510 2511define <vscale x 1 x double> @vsitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) {2512; CHECK-LABEL: vsitofp_nxv1i64_nxv1f64:2513; CHECK: # %bb.0:2514; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma2515; CHECK-NEXT: vfcvt.f.x.v v8, v82516; CHECK-NEXT: ret2517 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x double>2518 ret <vscale x 1 x double> %evec2519}2520 2521define <vscale x 1 x double> @vuitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) {2522; CHECK-LABEL: vuitofp_nxv1i64_nxv1f64:2523; CHECK: # %bb.0:2524; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma2525; CHECK-NEXT: vfcvt.f.xu.v v8, v82526; CHECK-NEXT: ret2527 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x double>2528 ret <vscale x 1 x double> %evec2529}2530 2531define <vscale x 2 x half> @vsitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) {2532; CHECK-LABEL: vsitofp_nxv2i64_nxv2f16:2533; CHECK: # %bb.0:2534; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma2535; CHECK-NEXT: vfncvt.f.x.w v10, v82536; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma2537; CHECK-NEXT: vfncvt.f.f.w v8, v102538; CHECK-NEXT: ret2539 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x half>2540 ret <vscale x 2 x half> %evec2541}2542 2543define <vscale x 2 x half> @vuitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) {2544; CHECK-LABEL: vuitofp_nxv2i64_nxv2f16:2545; CHECK: # %bb.0:2546; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma2547; CHECK-NEXT: vfncvt.f.xu.w v10, v82548; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma2549; CHECK-NEXT: vfncvt.f.f.w v8, v102550; CHECK-NEXT: ret2551 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x half>2552 ret <vscale x 2 x half> %evec2553}2554 2555define <vscale x 2 x float> @vsitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) {2556; CHECK-LABEL: vsitofp_nxv2i64_nxv2f32:2557; CHECK: # %bb.0:2558; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma2559; CHECK-NEXT: vfncvt.f.x.w v10, v82560; CHECK-NEXT: vmv.v.v v8, v102561; CHECK-NEXT: ret2562 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x float>2563 ret <vscale x 2 x float> %evec2564}2565 2566define <vscale x 2 x float> @vuitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) {2567; CHECK-LABEL: vuitofp_nxv2i64_nxv2f32:2568; CHECK: # %bb.0:2569; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma2570; CHECK-NEXT: vfncvt.f.xu.w v10, v82571; CHECK-NEXT: vmv.v.v v8, v102572; CHECK-NEXT: ret2573 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x float>2574 ret <vscale x 2 x float> %evec2575}2576 2577define <vscale x 2 x double> @vsitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) {2578; CHECK-LABEL: vsitofp_nxv2i64_nxv2f64:2579; CHECK: # %bb.0:2580; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma2581; CHECK-NEXT: vfcvt.f.x.v v8, v82582; CHECK-NEXT: ret2583 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x double>2584 ret <vscale x 2 x double> %evec2585}2586 2587define <vscale x 2 x double> @vuitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) {2588; CHECK-LABEL: vuitofp_nxv2i64_nxv2f64:2589; CHECK: # %bb.0:2590; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma2591; CHECK-NEXT: vfcvt.f.xu.v v8, v82592; CHECK-NEXT: ret2593 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x double>2594 ret <vscale x 2 x double> %evec2595}2596 2597define <vscale x 4 x half> @vsitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) {2598; CHECK-LABEL: vsitofp_nxv4i64_nxv4f16:2599; CHECK: # %bb.0:2600; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma2601; CHECK-NEXT: vfncvt.f.x.w v12, v82602; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma2603; CHECK-NEXT: vfncvt.f.f.w v8, v122604; CHECK-NEXT: ret2605 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x half>2606 ret <vscale x 4 x half> %evec2607}2608 2609define <vscale x 4 x half> @vuitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) {2610; CHECK-LABEL: vuitofp_nxv4i64_nxv4f16:2611; CHECK: # %bb.0:2612; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma2613; CHECK-NEXT: vfncvt.f.xu.w v12, v82614; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma2615; CHECK-NEXT: vfncvt.f.f.w v8, v122616; CHECK-NEXT: ret2617 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x half>2618 ret <vscale x 4 x half> %evec2619}2620 2621define <vscale x 4 x float> @vsitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) {2622; CHECK-LABEL: vsitofp_nxv4i64_nxv4f32:2623; CHECK: # %bb.0:2624; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma2625; CHECK-NEXT: vfncvt.f.x.w v12, v82626; CHECK-NEXT: vmv.v.v v8, v122627; CHECK-NEXT: ret2628 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x float>2629 ret <vscale x 4 x float> %evec2630}2631 2632define <vscale x 4 x float> @vuitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) {2633; CHECK-LABEL: vuitofp_nxv4i64_nxv4f32:2634; CHECK: # %bb.0:2635; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma2636; CHECK-NEXT: vfncvt.f.xu.w v12, v82637; CHECK-NEXT: vmv.v.v v8, v122638; CHECK-NEXT: ret2639 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x float>2640 ret <vscale x 4 x float> %evec2641}2642 2643define <vscale x 4 x double> @vsitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) {2644; CHECK-LABEL: vsitofp_nxv4i64_nxv4f64:2645; CHECK: # %bb.0:2646; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma2647; CHECK-NEXT: vfcvt.f.x.v v8, v82648; CHECK-NEXT: ret2649 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x double>2650 ret <vscale x 4 x double> %evec2651}2652 2653define <vscale x 4 x double> @vuitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) {2654; CHECK-LABEL: vuitofp_nxv4i64_nxv4f64:2655; CHECK: # %bb.0:2656; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma2657; CHECK-NEXT: vfcvt.f.xu.v v8, v82658; CHECK-NEXT: ret2659 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x double>2660 ret <vscale x 4 x double> %evec2661}2662 2663define <vscale x 8 x half> @vsitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) {2664; CHECK-LABEL: vsitofp_nxv8i64_nxv8f16:2665; CHECK: # %bb.0:2666; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma2667; CHECK-NEXT: vfncvt.f.x.w v16, v82668; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma2669; CHECK-NEXT: vfncvt.f.f.w v8, v162670; CHECK-NEXT: ret2671 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x half>2672 ret <vscale x 8 x half> %evec2673}2674 2675define <vscale x 8 x half> @vuitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) {2676; CHECK-LABEL: vuitofp_nxv8i64_nxv8f16:2677; CHECK: # %bb.0:2678; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma2679; CHECK-NEXT: vfncvt.f.xu.w v16, v82680; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma2681; CHECK-NEXT: vfncvt.f.f.w v8, v162682; CHECK-NEXT: ret2683 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x half>2684 ret <vscale x 8 x half> %evec2685}2686 2687define <vscale x 8 x float> @vsitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) {2688; CHECK-LABEL: vsitofp_nxv8i64_nxv8f32:2689; CHECK: # %bb.0:2690; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma2691; CHECK-NEXT: vfncvt.f.x.w v16, v82692; CHECK-NEXT: vmv.v.v v8, v162693; CHECK-NEXT: ret2694 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x float>2695 ret <vscale x 8 x float> %evec2696}2697 2698define <vscale x 8 x float> @vuitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) {2699; CHECK-LABEL: vuitofp_nxv8i64_nxv8f32:2700; CHECK: # %bb.0:2701; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma2702; CHECK-NEXT: vfncvt.f.xu.w v16, v82703; CHECK-NEXT: vmv.v.v v8, v162704; CHECK-NEXT: ret2705 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x float>2706 ret <vscale x 8 x float> %evec2707}2708 2709define <vscale x 8 x double> @vsitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) {2710; CHECK-LABEL: vsitofp_nxv8i64_nxv8f64:2711; CHECK: # %bb.0:2712; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma2713; CHECK-NEXT: vfcvt.f.x.v v8, v82714; CHECK-NEXT: ret2715 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x double>2716 ret <vscale x 8 x double> %evec2717}2718 2719define <vscale x 8 x double> @vuitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) {2720; CHECK-LABEL: vuitofp_nxv8i64_nxv8f64:2721; CHECK: # %bb.0:2722; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma2723; CHECK-NEXT: vfcvt.f.xu.v v8, v82724; CHECK-NEXT: ret2725 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x double>2726 ret <vscale x 8 x double> %evec2727}2728