1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+experimental-zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+experimental-zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s 6 7define <vscale x 1 x half> @vsitofp_nxv1i1_nxv1f16(<vscale x 1 x i1> %va) { 8; CHECK-LABEL: vsitofp_nxv1i1_nxv1f16: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 11; CHECK-NEXT: vmv.v.i v8, 0 12; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 13; CHECK-NEXT: vfcvt.f.x.v v8, v8 14; CHECK-NEXT: ret 15 %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x half> 16 ret <vscale x 1 x half> %evec 17} 18 19define <vscale x 1 x half> @vuitofp_nxv1i1_nxv1f16(<vscale x 1 x i1> %va) { 20; CHECK-LABEL: vuitofp_nxv1i1_nxv1f16: 21; CHECK: # %bb.0: 22; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 23; CHECK-NEXT: vmv.v.i v8, 0 24; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 25; CHECK-NEXT: vfcvt.f.xu.v v8, v8 26; CHECK-NEXT: ret 27 %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x half> 28 ret <vscale x 1 x half> %evec 29} 30 31define <vscale x 1 x float> @vsitofp_nxv1i1_nxv1f32(<vscale x 1 x i1> %va) { 32; CHECK-LABEL: vsitofp_nxv1i1_nxv1f32: 33; CHECK: # %bb.0: 34; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 35; CHECK-NEXT: vmv.v.i v8, 0 36; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 37; CHECK-NEXT: vfcvt.f.x.v v8, v8 38; CHECK-NEXT: ret 39 %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x float> 40 ret <vscale x 1 x float> %evec 41} 42 43define <vscale x 1 x float> @vuitofp_nxv1i1_nxv1f32(<vscale x 1 x i1> %va) { 44; CHECK-LABEL: vuitofp_nxv1i1_nxv1f32: 45; CHECK: # %bb.0: 46; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 47; CHECK-NEXT: vmv.v.i v8, 0 48; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 49; CHECK-NEXT: vfcvt.f.xu.v v8, v8 50; CHECK-NEXT: ret 51 %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x float> 52 ret <vscale x 1 x float> %evec 53} 54 55define <vscale x 1 x double> @vsitofp_nxv1i1_nxv1f64(<vscale x 1 x i1> %va) { 56; CHECK-LABEL: vsitofp_nxv1i1_nxv1f64: 57; CHECK: # %bb.0: 58; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 59; CHECK-NEXT: vmv.v.i v8, 0 60; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 61; CHECK-NEXT: vfcvt.f.x.v v8, v8 62; CHECK-NEXT: ret 63 %evec = sitofp <vscale x 1 x i1> %va to <vscale x 1 x double> 64 ret <vscale x 1 x double> %evec 65} 66 67define <vscale x 1 x double> @vuitofp_nxv1i1_nxv1f64(<vscale x 1 x i1> %va) { 68; CHECK-LABEL: vuitofp_nxv1i1_nxv1f64: 69; CHECK: # %bb.0: 70; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 71; CHECK-NEXT: vmv.v.i v8, 0 72; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 73; CHECK-NEXT: vfcvt.f.xu.v v8, v8 74; CHECK-NEXT: ret 75 %evec = uitofp <vscale x 1 x i1> %va to <vscale x 1 x double> 76 ret <vscale x 1 x double> %evec 77} 78 79define <vscale x 2 x half> @vsitofp_nxv2i1_nxv2f16(<vscale x 2 x i1> %va) { 80; CHECK-LABEL: vsitofp_nxv2i1_nxv2f16: 81; CHECK: # %bb.0: 82; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 83; CHECK-NEXT: vmv.v.i v8, 0 84; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 85; CHECK-NEXT: vfcvt.f.x.v v8, v8 86; CHECK-NEXT: ret 87 %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x half> 88 ret <vscale x 2 x half> %evec 89} 90 91define <vscale x 2 x half> @vuitofp_nxv2i1_nxv2f16(<vscale x 2 x i1> %va) { 92; CHECK-LABEL: vuitofp_nxv2i1_nxv2f16: 93; CHECK: # %bb.0: 94; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 95; CHECK-NEXT: vmv.v.i v8, 0 96; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 97; CHECK-NEXT: vfcvt.f.xu.v v8, v8 98; CHECK-NEXT: ret 99 %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x half> 100 ret <vscale x 2 x half> %evec 101} 102 103define <vscale x 2 x float> @vsitofp_nxv2i1_nxv2f32(<vscale x 2 x i1> %va) { 104; CHECK-LABEL: vsitofp_nxv2i1_nxv2f32: 105; CHECK: # %bb.0: 106; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 107; CHECK-NEXT: vmv.v.i v8, 0 108; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 109; CHECK-NEXT: vfcvt.f.x.v v8, v8 110; CHECK-NEXT: ret 111 %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x float> 112 ret <vscale x 2 x float> %evec 113} 114 115define <vscale x 2 x float> @vuitofp_nxv2i1_nxv2f32(<vscale x 2 x i1> %va) { 116; CHECK-LABEL: vuitofp_nxv2i1_nxv2f32: 117; CHECK: # %bb.0: 118; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 119; CHECK-NEXT: vmv.v.i v8, 0 120; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 121; CHECK-NEXT: vfcvt.f.xu.v v8, v8 122; CHECK-NEXT: ret 123 %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x float> 124 ret <vscale x 2 x float> %evec 125} 126 127define <vscale x 2 x double> @vsitofp_nxv2i1_nxv2f64(<vscale x 2 x i1> %va) { 128; CHECK-LABEL: vsitofp_nxv2i1_nxv2f64: 129; CHECK: # %bb.0: 130; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 131; CHECK-NEXT: vmv.v.i v8, 0 132; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 133; CHECK-NEXT: vfcvt.f.x.v v8, v8 134; CHECK-NEXT: ret 135 %evec = sitofp <vscale x 2 x i1> %va to <vscale x 2 x double> 136 ret <vscale x 2 x double> %evec 137} 138 139define <vscale x 2 x double> @vuitofp_nxv2i1_nxv2f64(<vscale x 2 x i1> %va) { 140; CHECK-LABEL: vuitofp_nxv2i1_nxv2f64: 141; CHECK: # %bb.0: 142; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 143; CHECK-NEXT: vmv.v.i v8, 0 144; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 145; CHECK-NEXT: vfcvt.f.xu.v v8, v8 146; CHECK-NEXT: ret 147 %evec = uitofp <vscale x 2 x i1> %va to <vscale x 2 x double> 148 ret <vscale x 2 x double> %evec 149} 150 151define <vscale x 4 x half> @vsitofp_nxv4i1_nxv4f16(<vscale x 4 x i1> %va) { 152; CHECK-LABEL: vsitofp_nxv4i1_nxv4f16: 153; CHECK: # %bb.0: 154; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 155; CHECK-NEXT: vmv.v.i v8, 0 156; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 157; CHECK-NEXT: vfcvt.f.x.v v8, v8 158; CHECK-NEXT: ret 159 %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x half> 160 ret <vscale x 4 x half> %evec 161} 162 163define <vscale x 4 x half> @vuitofp_nxv4i1_nxv4f16(<vscale x 4 x i1> %va) { 164; CHECK-LABEL: vuitofp_nxv4i1_nxv4f16: 165; CHECK: # %bb.0: 166; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 167; CHECK-NEXT: vmv.v.i v8, 0 168; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 169; CHECK-NEXT: vfcvt.f.xu.v v8, v8 170; CHECK-NEXT: ret 171 %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x half> 172 ret <vscale x 4 x half> %evec 173} 174 175define <vscale x 4 x float> @vsitofp_nxv4i1_nxv4f32(<vscale x 4 x i1> %va) { 176; CHECK-LABEL: vsitofp_nxv4i1_nxv4f32: 177; CHECK: # %bb.0: 178; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 179; CHECK-NEXT: vmv.v.i v8, 0 180; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 181; CHECK-NEXT: vfcvt.f.x.v v8, v8 182; CHECK-NEXT: ret 183 %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x float> 184 ret <vscale x 4 x float> %evec 185} 186 187define <vscale x 4 x float> @vuitofp_nxv4i1_nxv4f32(<vscale x 4 x i1> %va) { 188; CHECK-LABEL: vuitofp_nxv4i1_nxv4f32: 189; CHECK: # %bb.0: 190; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 191; CHECK-NEXT: vmv.v.i v8, 0 192; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 193; CHECK-NEXT: vfcvt.f.xu.v v8, v8 194; CHECK-NEXT: ret 195 %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x float> 196 ret <vscale x 4 x float> %evec 197} 198 199define <vscale x 4 x double> @vsitofp_nxv4i1_nxv4f64(<vscale x 4 x i1> %va) { 200; CHECK-LABEL: vsitofp_nxv4i1_nxv4f64: 201; CHECK: # %bb.0: 202; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 203; CHECK-NEXT: vmv.v.i v8, 0 204; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 205; CHECK-NEXT: vfcvt.f.x.v v8, v8 206; CHECK-NEXT: ret 207 %evec = sitofp <vscale x 4 x i1> %va to <vscale x 4 x double> 208 ret <vscale x 4 x double> %evec 209} 210 211define <vscale x 4 x double> @vuitofp_nxv4i1_nxv4f64(<vscale x 4 x i1> %va) { 212; CHECK-LABEL: vuitofp_nxv4i1_nxv4f64: 213; CHECK: # %bb.0: 214; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 215; CHECK-NEXT: vmv.v.i v8, 0 216; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 217; CHECK-NEXT: vfcvt.f.xu.v v8, v8 218; CHECK-NEXT: ret 219 %evec = uitofp <vscale x 4 x i1> %va to <vscale x 4 x double> 220 ret <vscale x 4 x double> %evec 221} 222 223define <vscale x 8 x half> @vsitofp_nxv8i1_nxv8f16(<vscale x 8 x i1> %va) { 224; CHECK-LABEL: vsitofp_nxv8i1_nxv8f16: 225; CHECK: # %bb.0: 226; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 227; CHECK-NEXT: vmv.v.i v8, 0 228; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 229; CHECK-NEXT: vfcvt.f.x.v v8, v8 230; CHECK-NEXT: ret 231 %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x half> 232 ret <vscale x 8 x half> %evec 233} 234 235define <vscale x 8 x half> @vuitofp_nxv8i1_nxv8f16(<vscale x 8 x i1> %va) { 236; CHECK-LABEL: vuitofp_nxv8i1_nxv8f16: 237; CHECK: # %bb.0: 238; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 239; CHECK-NEXT: vmv.v.i v8, 0 240; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 241; CHECK-NEXT: vfcvt.f.xu.v v8, v8 242; CHECK-NEXT: ret 243 %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x half> 244 ret <vscale x 8 x half> %evec 245} 246 247define <vscale x 8 x float> @vsitofp_nxv8i1_nxv8f32(<vscale x 8 x i1> %va) { 248; CHECK-LABEL: vsitofp_nxv8i1_nxv8f32: 249; CHECK: # %bb.0: 250; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 251; CHECK-NEXT: vmv.v.i v8, 0 252; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 253; CHECK-NEXT: vfcvt.f.x.v v8, v8 254; CHECK-NEXT: ret 255 %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x float> 256 ret <vscale x 8 x float> %evec 257} 258 259define <vscale x 8 x float> @vuitofp_nxv8i1_nxv8f32(<vscale x 8 x i1> %va) { 260; CHECK-LABEL: vuitofp_nxv8i1_nxv8f32: 261; CHECK: # %bb.0: 262; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 263; CHECK-NEXT: vmv.v.i v8, 0 264; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 265; CHECK-NEXT: vfcvt.f.xu.v v8, v8 266; CHECK-NEXT: ret 267 %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x float> 268 ret <vscale x 8 x float> %evec 269} 270 271define <vscale x 8 x double> @vsitofp_nxv8i1_nxv8f64(<vscale x 8 x i1> %va) { 272; CHECK-LABEL: vsitofp_nxv8i1_nxv8f64: 273; CHECK: # %bb.0: 274; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 275; CHECK-NEXT: vmv.v.i v8, 0 276; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 277; CHECK-NEXT: vfcvt.f.x.v v8, v8 278; CHECK-NEXT: ret 279 %evec = sitofp <vscale x 8 x i1> %va to <vscale x 8 x double> 280 ret <vscale x 8 x double> %evec 281} 282 283define <vscale x 8 x double> @vuitofp_nxv8i1_nxv8f64(<vscale x 8 x i1> %va) { 284; CHECK-LABEL: vuitofp_nxv8i1_nxv8f64: 285; CHECK: # %bb.0: 286; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 287; CHECK-NEXT: vmv.v.i v8, 0 288; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 289; CHECK-NEXT: vfcvt.f.xu.v v8, v8 290; CHECK-NEXT: ret 291 %evec = uitofp <vscale x 8 x i1> %va to <vscale x 8 x double> 292 ret <vscale x 8 x double> %evec 293} 294 295define <vscale x 16 x half> @vsitofp_nxv16i1_nxv16f16(<vscale x 16 x i1> %va) { 296; CHECK-LABEL: vsitofp_nxv16i1_nxv16f16: 297; CHECK: # %bb.0: 298; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 299; CHECK-NEXT: vmv.v.i v8, 0 300; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 301; CHECK-NEXT: vfcvt.f.x.v v8, v8 302; CHECK-NEXT: ret 303 %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x half> 304 ret <vscale x 16 x half> %evec 305} 306 307define <vscale x 16 x half> @vuitofp_nxv16i1_nxv16f16(<vscale x 16 x i1> %va) { 308; CHECK-LABEL: vuitofp_nxv16i1_nxv16f16: 309; CHECK: # %bb.0: 310; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 311; CHECK-NEXT: vmv.v.i v8, 0 312; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 313; CHECK-NEXT: vfcvt.f.xu.v v8, v8 314; CHECK-NEXT: ret 315 %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x half> 316 ret <vscale x 16 x half> %evec 317} 318 319define <vscale x 16 x float> @vsitofp_nxv16i1_nxv16f32(<vscale x 16 x i1> %va) { 320; CHECK-LABEL: vsitofp_nxv16i1_nxv16f32: 321; CHECK: # %bb.0: 322; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 323; CHECK-NEXT: vmv.v.i v8, 0 324; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 325; CHECK-NEXT: vfcvt.f.x.v v8, v8 326; CHECK-NEXT: ret 327 %evec = sitofp <vscale x 16 x i1> %va to <vscale x 16 x float> 328 ret <vscale x 16 x float> %evec 329} 330 331define <vscale x 16 x float> @vuitofp_nxv16i1_nxv16f32(<vscale x 16 x i1> %va) { 332; CHECK-LABEL: vuitofp_nxv16i1_nxv16f32: 333; CHECK: # %bb.0: 334; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 335; CHECK-NEXT: vmv.v.i v8, 0 336; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 337; CHECK-NEXT: vfcvt.f.xu.v v8, v8 338; CHECK-NEXT: ret 339 %evec = uitofp <vscale x 16 x i1> %va to <vscale x 16 x float> 340 ret <vscale x 16 x float> %evec 341} 342 343define <vscale x 32 x half> @vsitofp_nxv32i1_nxv32f16(<vscale x 32 x i1> %va) { 344; CHECK-LABEL: vsitofp_nxv32i1_nxv32f16: 345; CHECK: # %bb.0: 346; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 347; CHECK-NEXT: vmv.v.i v8, 0 348; CHECK-NEXT: vmerge.vim v8, v8, -1, v0 349; CHECK-NEXT: vfcvt.f.x.v v8, v8 350; CHECK-NEXT: ret 351 %evec = sitofp <vscale x 32 x i1> %va to <vscale x 32 x half> 352 ret <vscale x 32 x half> %evec 353} 354 355define <vscale x 32 x half> @vuitofp_nxv32i1_nxv32f16(<vscale x 32 x i1> %va) { 356; CHECK-LABEL: vuitofp_nxv32i1_nxv32f16: 357; CHECK: # %bb.0: 358; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 359; CHECK-NEXT: vmv.v.i v8, 0 360; CHECK-NEXT: vmerge.vim v8, v8, 1, v0 361; CHECK-NEXT: vfcvt.f.xu.v v8, v8 362; CHECK-NEXT: ret 363 %evec = uitofp <vscale x 32 x i1> %va to <vscale x 32 x half> 364 ret <vscale x 32 x half> %evec 365} 366 367define <vscale x 1 x half> @vsitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) { 368; CHECK-LABEL: vsitofp_nxv1i8_nxv1f16: 369; CHECK: # %bb.0: 370; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 371; CHECK-NEXT: vfwcvt.f.x.v v9, v8 372; CHECK-NEXT: vmv1r.v v8, v9 373; CHECK-NEXT: ret 374 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x half> 375 ret <vscale x 1 x half> %evec 376} 377 378define <vscale x 1 x half> @vsitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) { 379; CHECK-LABEL: vsitofp_nxv1i7_nxv1f16: 380; CHECK: # %bb.0: 381; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 382; CHECK-NEXT: vadd.vv v8, v8, v8 383; CHECK-NEXT: vsra.vi v9, v8, 1 384; CHECK-NEXT: vfwcvt.f.x.v v8, v9 385; CHECK-NEXT: ret 386 %evec = sitofp <vscale x 1 x i7> %va to <vscale x 1 x half> 387 ret <vscale x 1 x half> %evec 388} 389 390define <vscale x 1 x half> @vuitofp_nxv1i7_nxv1f16(<vscale x 1 x i7> %va) { 391; CHECK-LABEL: vuitofp_nxv1i7_nxv1f16: 392; CHECK: # %bb.0: 393; CHECK-NEXT: li a0, 127 394; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, mu 395; CHECK-NEXT: vand.vx v9, v8, a0 396; CHECK-NEXT: vfwcvt.f.xu.v v8, v9 397; CHECK-NEXT: ret 398 %evec = uitofp <vscale x 1 x i7> %va to <vscale x 1 x half> 399 ret <vscale x 1 x half> %evec 400} 401 402define <vscale x 1 x half> @vuitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) { 403; CHECK-LABEL: vuitofp_nxv1i8_nxv1f16: 404; CHECK: # %bb.0: 405; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 406; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 407; CHECK-NEXT: vmv1r.v v8, v9 408; CHECK-NEXT: ret 409 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x half> 410 ret <vscale x 1 x half> %evec 411} 412 413define <vscale x 1 x float> @vsitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) { 414; CHECK-LABEL: vsitofp_nxv1i8_nxv1f32: 415; CHECK: # %bb.0: 416; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 417; CHECK-NEXT: vsext.vf4 v9, v8 418; CHECK-NEXT: vfcvt.f.x.v v8, v9 419; CHECK-NEXT: ret 420 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x float> 421 ret <vscale x 1 x float> %evec 422} 423 424define <vscale x 1 x float> @vuitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) { 425; CHECK-LABEL: vuitofp_nxv1i8_nxv1f32: 426; CHECK: # %bb.0: 427; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 428; CHECK-NEXT: vzext.vf4 v9, v8 429; CHECK-NEXT: vfcvt.f.xu.v v8, v9 430; CHECK-NEXT: ret 431 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x float> 432 ret <vscale x 1 x float> %evec 433} 434 435define <vscale x 1 x double> @vsitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) { 436; CHECK-LABEL: vsitofp_nxv1i8_nxv1f64: 437; CHECK: # %bb.0: 438; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 439; CHECK-NEXT: vsext.vf8 v9, v8 440; CHECK-NEXT: vfcvt.f.x.v v8, v9 441; CHECK-NEXT: ret 442 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x double> 443 ret <vscale x 1 x double> %evec 444} 445 446define <vscale x 1 x double> @vuitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) { 447; CHECK-LABEL: vuitofp_nxv1i8_nxv1f64: 448; CHECK: # %bb.0: 449; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 450; CHECK-NEXT: vzext.vf8 v9, v8 451; CHECK-NEXT: vfcvt.f.xu.v v8, v9 452; CHECK-NEXT: ret 453 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x double> 454 ret <vscale x 1 x double> %evec 455} 456 457define <vscale x 2 x half> @vsitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) { 458; CHECK-LABEL: vsitofp_nxv2i8_nxv2f16: 459; CHECK: # %bb.0: 460; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 461; CHECK-NEXT: vfwcvt.f.x.v v9, v8 462; CHECK-NEXT: vmv1r.v v8, v9 463; CHECK-NEXT: ret 464 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x half> 465 ret <vscale x 2 x half> %evec 466} 467 468define <vscale x 2 x half> @vuitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) { 469; CHECK-LABEL: vuitofp_nxv2i8_nxv2f16: 470; CHECK: # %bb.0: 471; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 472; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 473; CHECK-NEXT: vmv1r.v v8, v9 474; CHECK-NEXT: ret 475 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x half> 476 ret <vscale x 2 x half> %evec 477} 478 479define <vscale x 2 x float> @vsitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) { 480; CHECK-LABEL: vsitofp_nxv2i8_nxv2f32: 481; CHECK: # %bb.0: 482; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 483; CHECK-NEXT: vsext.vf4 v9, v8 484; CHECK-NEXT: vfcvt.f.x.v v8, v9 485; CHECK-NEXT: ret 486 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x float> 487 ret <vscale x 2 x float> %evec 488} 489 490define <vscale x 2 x float> @vuitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) { 491; CHECK-LABEL: vuitofp_nxv2i8_nxv2f32: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 494; CHECK-NEXT: vzext.vf4 v9, v8 495; CHECK-NEXT: vfcvt.f.xu.v v8, v9 496; CHECK-NEXT: ret 497 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x float> 498 ret <vscale x 2 x float> %evec 499} 500 501define <vscale x 2 x double> @vsitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) { 502; CHECK-LABEL: vsitofp_nxv2i8_nxv2f64: 503; CHECK: # %bb.0: 504; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 505; CHECK-NEXT: vsext.vf8 v10, v8 506; CHECK-NEXT: vfcvt.f.x.v v8, v10 507; CHECK-NEXT: ret 508 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x double> 509 ret <vscale x 2 x double> %evec 510} 511 512define <vscale x 2 x double> @vuitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) { 513; CHECK-LABEL: vuitofp_nxv2i8_nxv2f64: 514; CHECK: # %bb.0: 515; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 516; CHECK-NEXT: vzext.vf8 v10, v8 517; CHECK-NEXT: vfcvt.f.xu.v v8, v10 518; CHECK-NEXT: ret 519 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x double> 520 ret <vscale x 2 x double> %evec 521} 522 523define <vscale x 4 x half> @vsitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) { 524; CHECK-LABEL: vsitofp_nxv4i8_nxv4f16: 525; CHECK: # %bb.0: 526; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 527; CHECK-NEXT: vfwcvt.f.x.v v9, v8 528; CHECK-NEXT: vmv1r.v v8, v9 529; CHECK-NEXT: ret 530 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x half> 531 ret <vscale x 4 x half> %evec 532} 533 534define <vscale x 4 x half> @vuitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) { 535; CHECK-LABEL: vuitofp_nxv4i8_nxv4f16: 536; CHECK: # %bb.0: 537; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 538; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 539; CHECK-NEXT: vmv1r.v v8, v9 540; CHECK-NEXT: ret 541 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x half> 542 ret <vscale x 4 x half> %evec 543} 544 545define <vscale x 4 x float> @vsitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) { 546; CHECK-LABEL: vsitofp_nxv4i8_nxv4f32: 547; CHECK: # %bb.0: 548; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 549; CHECK-NEXT: vsext.vf4 v10, v8 550; CHECK-NEXT: vfcvt.f.x.v v8, v10 551; CHECK-NEXT: ret 552 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x float> 553 ret <vscale x 4 x float> %evec 554} 555 556define <vscale x 4 x float> @vuitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) { 557; CHECK-LABEL: vuitofp_nxv4i8_nxv4f32: 558; CHECK: # %bb.0: 559; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 560; CHECK-NEXT: vzext.vf4 v10, v8 561; CHECK-NEXT: vfcvt.f.xu.v v8, v10 562; CHECK-NEXT: ret 563 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x float> 564 ret <vscale x 4 x float> %evec 565} 566 567define <vscale x 4 x double> @vsitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) { 568; CHECK-LABEL: vsitofp_nxv4i8_nxv4f64: 569; CHECK: # %bb.0: 570; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 571; CHECK-NEXT: vsext.vf8 v12, v8 572; CHECK-NEXT: vfcvt.f.x.v v8, v12 573; CHECK-NEXT: ret 574 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x double> 575 ret <vscale x 4 x double> %evec 576} 577 578define <vscale x 4 x double> @vuitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) { 579; CHECK-LABEL: vuitofp_nxv4i8_nxv4f64: 580; CHECK: # %bb.0: 581; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 582; CHECK-NEXT: vzext.vf8 v12, v8 583; CHECK-NEXT: vfcvt.f.xu.v v8, v12 584; CHECK-NEXT: ret 585 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x double> 586 ret <vscale x 4 x double> %evec 587} 588 589define <vscale x 8 x half> @vsitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) { 590; CHECK-LABEL: vsitofp_nxv8i8_nxv8f16: 591; CHECK: # %bb.0: 592; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 593; CHECK-NEXT: vfwcvt.f.x.v v10, v8 594; CHECK-NEXT: vmv2r.v v8, v10 595; CHECK-NEXT: ret 596 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x half> 597 ret <vscale x 8 x half> %evec 598} 599 600define <vscale x 8 x half> @vuitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) { 601; CHECK-LABEL: vuitofp_nxv8i8_nxv8f16: 602; CHECK: # %bb.0: 603; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 604; CHECK-NEXT: vfwcvt.f.xu.v v10, v8 605; CHECK-NEXT: vmv2r.v v8, v10 606; CHECK-NEXT: ret 607 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x half> 608 ret <vscale x 8 x half> %evec 609} 610 611define <vscale x 8 x float> @vsitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) { 612; CHECK-LABEL: vsitofp_nxv8i8_nxv8f32: 613; CHECK: # %bb.0: 614; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 615; CHECK-NEXT: vsext.vf4 v12, v8 616; CHECK-NEXT: vfcvt.f.x.v v8, v12 617; CHECK-NEXT: ret 618 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x float> 619 ret <vscale x 8 x float> %evec 620} 621 622define <vscale x 8 x float> @vuitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) { 623; CHECK-LABEL: vuitofp_nxv8i8_nxv8f32: 624; CHECK: # %bb.0: 625; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 626; CHECK-NEXT: vzext.vf4 v12, v8 627; CHECK-NEXT: vfcvt.f.xu.v v8, v12 628; CHECK-NEXT: ret 629 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x float> 630 ret <vscale x 8 x float> %evec 631} 632 633define <vscale x 8 x double> @vsitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) { 634; CHECK-LABEL: vsitofp_nxv8i8_nxv8f64: 635; CHECK: # %bb.0: 636; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 637; CHECK-NEXT: vsext.vf8 v16, v8 638; CHECK-NEXT: vfcvt.f.x.v v8, v16 639; CHECK-NEXT: ret 640 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x double> 641 ret <vscale x 8 x double> %evec 642} 643 644define <vscale x 8 x double> @vuitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) { 645; CHECK-LABEL: vuitofp_nxv8i8_nxv8f64: 646; CHECK: # %bb.0: 647; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 648; CHECK-NEXT: vzext.vf8 v16, v8 649; CHECK-NEXT: vfcvt.f.xu.v v8, v16 650; CHECK-NEXT: ret 651 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x double> 652 ret <vscale x 8 x double> %evec 653} 654 655define <vscale x 16 x half> @vsitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) { 656; CHECK-LABEL: vsitofp_nxv16i8_nxv16f16: 657; CHECK: # %bb.0: 658; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 659; CHECK-NEXT: vfwcvt.f.x.v v12, v8 660; CHECK-NEXT: vmv4r.v v8, v12 661; CHECK-NEXT: ret 662 %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x half> 663 ret <vscale x 16 x half> %evec 664} 665 666define <vscale x 16 x half> @vuitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) { 667; CHECK-LABEL: vuitofp_nxv16i8_nxv16f16: 668; CHECK: # %bb.0: 669; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 670; CHECK-NEXT: vfwcvt.f.xu.v v12, v8 671; CHECK-NEXT: vmv4r.v v8, v12 672; CHECK-NEXT: ret 673 %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x half> 674 ret <vscale x 16 x half> %evec 675} 676 677define <vscale x 16 x float> @vsitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) { 678; CHECK-LABEL: vsitofp_nxv16i8_nxv16f32: 679; CHECK: # %bb.0: 680; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 681; CHECK-NEXT: vsext.vf4 v16, v8 682; CHECK-NEXT: vfcvt.f.x.v v8, v16 683; CHECK-NEXT: ret 684 %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x float> 685 ret <vscale x 16 x float> %evec 686} 687 688define <vscale x 16 x float> @vuitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) { 689; CHECK-LABEL: vuitofp_nxv16i8_nxv16f32: 690; CHECK: # %bb.0: 691; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 692; CHECK-NEXT: vzext.vf4 v16, v8 693; CHECK-NEXT: vfcvt.f.xu.v v8, v16 694; CHECK-NEXT: ret 695 %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x float> 696 ret <vscale x 16 x float> %evec 697} 698 699define <vscale x 32 x half> @vsitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) { 700; CHECK-LABEL: vsitofp_nxv32i8_nxv32f16: 701; CHECK: # %bb.0: 702; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 703; CHECK-NEXT: vfwcvt.f.x.v v16, v8 704; CHECK-NEXT: vmv8r.v v8, v16 705; CHECK-NEXT: ret 706 %evec = sitofp <vscale x 32 x i8> %va to <vscale x 32 x half> 707 ret <vscale x 32 x half> %evec 708} 709 710define <vscale x 32 x half> @vuitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) { 711; CHECK-LABEL: vuitofp_nxv32i8_nxv32f16: 712; CHECK: # %bb.0: 713; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 714; CHECK-NEXT: vfwcvt.f.xu.v v16, v8 715; CHECK-NEXT: vmv8r.v v8, v16 716; CHECK-NEXT: ret 717 %evec = uitofp <vscale x 32 x i8> %va to <vscale x 32 x half> 718 ret <vscale x 32 x half> %evec 719} 720 721define <vscale x 1 x half> @vsitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) { 722; CHECK-LABEL: vsitofp_nxv1i16_nxv1f16: 723; CHECK: # %bb.0: 724; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 725; CHECK-NEXT: vfcvt.f.x.v v8, v8 726; CHECK-NEXT: ret 727 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x half> 728 ret <vscale x 1 x half> %evec 729} 730 731define <vscale x 1 x half> @vuitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) { 732; CHECK-LABEL: vuitofp_nxv1i16_nxv1f16: 733; CHECK: # %bb.0: 734; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 735; CHECK-NEXT: vfcvt.f.xu.v v8, v8 736; CHECK-NEXT: ret 737 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x half> 738 ret <vscale x 1 x half> %evec 739} 740 741define <vscale x 1 x float> @vsitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) { 742; CHECK-LABEL: vsitofp_nxv1i16_nxv1f32: 743; CHECK: # %bb.0: 744; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 745; CHECK-NEXT: vfwcvt.f.x.v v9, v8 746; CHECK-NEXT: vmv1r.v v8, v9 747; CHECK-NEXT: ret 748 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x float> 749 ret <vscale x 1 x float> %evec 750} 751 752define <vscale x 1 x float> @vuitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) { 753; CHECK-LABEL: vuitofp_nxv1i16_nxv1f32: 754; CHECK: # %bb.0: 755; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 756; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 757; CHECK-NEXT: vmv1r.v v8, v9 758; CHECK-NEXT: ret 759 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x float> 760 ret <vscale x 1 x float> %evec 761} 762 763define <vscale x 1 x double> @vsitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) { 764; CHECK-LABEL: vsitofp_nxv1i16_nxv1f64: 765; CHECK: # %bb.0: 766; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 767; CHECK-NEXT: vsext.vf4 v9, v8 768; CHECK-NEXT: vfcvt.f.x.v v8, v9 769; CHECK-NEXT: ret 770 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x double> 771 ret <vscale x 1 x double> %evec 772} 773 774define <vscale x 1 x double> @vuitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) { 775; CHECK-LABEL: vuitofp_nxv1i16_nxv1f64: 776; CHECK: # %bb.0: 777; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 778; CHECK-NEXT: vzext.vf4 v9, v8 779; CHECK-NEXT: vfcvt.f.xu.v v8, v9 780; CHECK-NEXT: ret 781 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x double> 782 ret <vscale x 1 x double> %evec 783} 784 785define <vscale x 2 x half> @vsitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) { 786; CHECK-LABEL: vsitofp_nxv2i16_nxv2f16: 787; CHECK: # %bb.0: 788; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 789; CHECK-NEXT: vfcvt.f.x.v v8, v8 790; CHECK-NEXT: ret 791 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x half> 792 ret <vscale x 2 x half> %evec 793} 794 795define <vscale x 2 x half> @vuitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) { 796; CHECK-LABEL: vuitofp_nxv2i16_nxv2f16: 797; CHECK: # %bb.0: 798; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 799; CHECK-NEXT: vfcvt.f.xu.v v8, v8 800; CHECK-NEXT: ret 801 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x half> 802 ret <vscale x 2 x half> %evec 803} 804 805define <vscale x 2 x float> @vsitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) { 806; CHECK-LABEL: vsitofp_nxv2i16_nxv2f32: 807; CHECK: # %bb.0: 808; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 809; CHECK-NEXT: vfwcvt.f.x.v v9, v8 810; CHECK-NEXT: vmv1r.v v8, v9 811; CHECK-NEXT: ret 812 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x float> 813 ret <vscale x 2 x float> %evec 814} 815 816define <vscale x 2 x float> @vuitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) { 817; CHECK-LABEL: vuitofp_nxv2i16_nxv2f32: 818; CHECK: # %bb.0: 819; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 820; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 821; CHECK-NEXT: vmv1r.v v8, v9 822; CHECK-NEXT: ret 823 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x float> 824 ret <vscale x 2 x float> %evec 825} 826 827define <vscale x 2 x double> @vsitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) { 828; CHECK-LABEL: vsitofp_nxv2i16_nxv2f64: 829; CHECK: # %bb.0: 830; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 831; CHECK-NEXT: vsext.vf4 v10, v8 832; CHECK-NEXT: vfcvt.f.x.v v8, v10 833; CHECK-NEXT: ret 834 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x double> 835 ret <vscale x 2 x double> %evec 836} 837 838define <vscale x 2 x double> @vuitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) { 839; CHECK-LABEL: vuitofp_nxv2i16_nxv2f64: 840; CHECK: # %bb.0: 841; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 842; CHECK-NEXT: vzext.vf4 v10, v8 843; CHECK-NEXT: vfcvt.f.xu.v v8, v10 844; CHECK-NEXT: ret 845 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x double> 846 ret <vscale x 2 x double> %evec 847} 848 849define <vscale x 4 x half> @vsitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) { 850; CHECK-LABEL: vsitofp_nxv4i16_nxv4f16: 851; CHECK: # %bb.0: 852; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 853; CHECK-NEXT: vfcvt.f.x.v v8, v8 854; CHECK-NEXT: ret 855 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x half> 856 ret <vscale x 4 x half> %evec 857} 858 859define <vscale x 4 x half> @vuitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) { 860; CHECK-LABEL: vuitofp_nxv4i16_nxv4f16: 861; CHECK: # %bb.0: 862; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 863; CHECK-NEXT: vfcvt.f.xu.v v8, v8 864; CHECK-NEXT: ret 865 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x half> 866 ret <vscale x 4 x half> %evec 867} 868 869define <vscale x 4 x float> @vsitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) { 870; CHECK-LABEL: vsitofp_nxv4i16_nxv4f32: 871; CHECK: # %bb.0: 872; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 873; CHECK-NEXT: vfwcvt.f.x.v v10, v8 874; CHECK-NEXT: vmv2r.v v8, v10 875; CHECK-NEXT: ret 876 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x float> 877 ret <vscale x 4 x float> %evec 878} 879 880define <vscale x 4 x float> @vuitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) { 881; CHECK-LABEL: vuitofp_nxv4i16_nxv4f32: 882; CHECK: # %bb.0: 883; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 884; CHECK-NEXT: vfwcvt.f.xu.v v10, v8 885; CHECK-NEXT: vmv2r.v v8, v10 886; CHECK-NEXT: ret 887 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x float> 888 ret <vscale x 4 x float> %evec 889} 890 891define <vscale x 4 x double> @vsitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) { 892; CHECK-LABEL: vsitofp_nxv4i16_nxv4f64: 893; CHECK: # %bb.0: 894; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 895; CHECK-NEXT: vsext.vf4 v12, v8 896; CHECK-NEXT: vfcvt.f.x.v v8, v12 897; CHECK-NEXT: ret 898 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x double> 899 ret <vscale x 4 x double> %evec 900} 901 902define <vscale x 4 x double> @vuitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) { 903; CHECK-LABEL: vuitofp_nxv4i16_nxv4f64: 904; CHECK: # %bb.0: 905; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 906; CHECK-NEXT: vzext.vf4 v12, v8 907; CHECK-NEXT: vfcvt.f.xu.v v8, v12 908; CHECK-NEXT: ret 909 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x double> 910 ret <vscale x 4 x double> %evec 911} 912 913define <vscale x 8 x half> @vsitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) { 914; CHECK-LABEL: vsitofp_nxv8i16_nxv8f16: 915; CHECK: # %bb.0: 916; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 917; CHECK-NEXT: vfcvt.f.x.v v8, v8 918; CHECK-NEXT: ret 919 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x half> 920 ret <vscale x 8 x half> %evec 921} 922 923define <vscale x 8 x half> @vuitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) { 924; CHECK-LABEL: vuitofp_nxv8i16_nxv8f16: 925; CHECK: # %bb.0: 926; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 927; CHECK-NEXT: vfcvt.f.xu.v v8, v8 928; CHECK-NEXT: ret 929 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x half> 930 ret <vscale x 8 x half> %evec 931} 932 933define <vscale x 8 x float> @vsitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) { 934; CHECK-LABEL: vsitofp_nxv8i16_nxv8f32: 935; CHECK: # %bb.0: 936; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 937; CHECK-NEXT: vfwcvt.f.x.v v12, v8 938; CHECK-NEXT: vmv4r.v v8, v12 939; CHECK-NEXT: ret 940 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x float> 941 ret <vscale x 8 x float> %evec 942} 943 944define <vscale x 8 x float> @vuitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) { 945; CHECK-LABEL: vuitofp_nxv8i16_nxv8f32: 946; CHECK: # %bb.0: 947; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 948; CHECK-NEXT: vfwcvt.f.xu.v v12, v8 949; CHECK-NEXT: vmv4r.v v8, v12 950; CHECK-NEXT: ret 951 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x float> 952 ret <vscale x 8 x float> %evec 953} 954 955define <vscale x 8 x double> @vsitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) { 956; CHECK-LABEL: vsitofp_nxv8i16_nxv8f64: 957; CHECK: # %bb.0: 958; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 959; CHECK-NEXT: vsext.vf4 v16, v8 960; CHECK-NEXT: vfcvt.f.x.v v8, v16 961; CHECK-NEXT: ret 962 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x double> 963 ret <vscale x 8 x double> %evec 964} 965 966define <vscale x 8 x double> @vuitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) { 967; CHECK-LABEL: vuitofp_nxv8i16_nxv8f64: 968; CHECK: # %bb.0: 969; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 970; CHECK-NEXT: vzext.vf4 v16, v8 971; CHECK-NEXT: vfcvt.f.xu.v v8, v16 972; CHECK-NEXT: ret 973 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x double> 974 ret <vscale x 8 x double> %evec 975} 976 977define <vscale x 16 x half> @vsitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) { 978; CHECK-LABEL: vsitofp_nxv16i16_nxv16f16: 979; CHECK: # %bb.0: 980; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 981; CHECK-NEXT: vfcvt.f.x.v v8, v8 982; CHECK-NEXT: ret 983 %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x half> 984 ret <vscale x 16 x half> %evec 985} 986 987define <vscale x 16 x half> @vuitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) { 988; CHECK-LABEL: vuitofp_nxv16i16_nxv16f16: 989; CHECK: # %bb.0: 990; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 991; CHECK-NEXT: vfcvt.f.xu.v v8, v8 992; CHECK-NEXT: ret 993 %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x half> 994 ret <vscale x 16 x half> %evec 995} 996 997define <vscale x 16 x float> @vsitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) { 998; CHECK-LABEL: vsitofp_nxv16i16_nxv16f32: 999; CHECK: # %bb.0: 1000; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1001; CHECK-NEXT: vfwcvt.f.x.v v16, v8 1002; CHECK-NEXT: vmv8r.v v8, v16 1003; CHECK-NEXT: ret 1004 %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x float> 1005 ret <vscale x 16 x float> %evec 1006} 1007 1008define <vscale x 16 x float> @vuitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) { 1009; CHECK-LABEL: vuitofp_nxv16i16_nxv16f32: 1010; CHECK: # %bb.0: 1011; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1012; CHECK-NEXT: vfwcvt.f.xu.v v16, v8 1013; CHECK-NEXT: vmv8r.v v8, v16 1014; CHECK-NEXT: ret 1015 %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x float> 1016 ret <vscale x 16 x float> %evec 1017} 1018 1019define <vscale x 32 x half> @vsitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) { 1020; CHECK-LABEL: vsitofp_nxv32i16_nxv32f16: 1021; CHECK: # %bb.0: 1022; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 1023; CHECK-NEXT: vfcvt.f.x.v v8, v8 1024; CHECK-NEXT: ret 1025 %evec = sitofp <vscale x 32 x i16> %va to <vscale x 32 x half> 1026 ret <vscale x 32 x half> %evec 1027} 1028 1029define <vscale x 32 x half> @vuitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) { 1030; CHECK-LABEL: vuitofp_nxv32i16_nxv32f16: 1031; CHECK: # %bb.0: 1032; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 1033; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1034; CHECK-NEXT: ret 1035 %evec = uitofp <vscale x 32 x i16> %va to <vscale x 32 x half> 1036 ret <vscale x 32 x half> %evec 1037} 1038 1039define <vscale x 1 x half> @vsitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) { 1040; CHECK-LABEL: vsitofp_nxv1i32_nxv1f16: 1041; CHECK: # %bb.0: 1042; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 1043; CHECK-NEXT: vfncvt.f.x.w v9, v8 1044; CHECK-NEXT: vmv1r.v v8, v9 1045; CHECK-NEXT: ret 1046 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x half> 1047 ret <vscale x 1 x half> %evec 1048} 1049 1050define <vscale x 1 x half> @vuitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) { 1051; CHECK-LABEL: vuitofp_nxv1i32_nxv1f16: 1052; CHECK: # %bb.0: 1053; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 1054; CHECK-NEXT: vfncvt.f.xu.w v9, v8 1055; CHECK-NEXT: vmv1r.v v8, v9 1056; CHECK-NEXT: ret 1057 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x half> 1058 ret <vscale x 1 x half> %evec 1059} 1060 1061define <vscale x 1 x float> @vsitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) { 1062; CHECK-LABEL: vsitofp_nxv1i32_nxv1f32: 1063; CHECK: # %bb.0: 1064; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1065; CHECK-NEXT: vfcvt.f.x.v v8, v8 1066; CHECK-NEXT: ret 1067 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x float> 1068 ret <vscale x 1 x float> %evec 1069} 1070 1071define <vscale x 1 x float> @vuitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) { 1072; CHECK-LABEL: vuitofp_nxv1i32_nxv1f32: 1073; CHECK: # %bb.0: 1074; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1075; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1076; CHECK-NEXT: ret 1077 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x float> 1078 ret <vscale x 1 x float> %evec 1079} 1080 1081define <vscale x 1 x double> @vsitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) { 1082; CHECK-LABEL: vsitofp_nxv1i32_nxv1f64: 1083; CHECK: # %bb.0: 1084; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1085; CHECK-NEXT: vfwcvt.f.x.v v9, v8 1086; CHECK-NEXT: vmv1r.v v8, v9 1087; CHECK-NEXT: ret 1088 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x double> 1089 ret <vscale x 1 x double> %evec 1090} 1091 1092define <vscale x 1 x double> @vuitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) { 1093; CHECK-LABEL: vuitofp_nxv1i32_nxv1f64: 1094; CHECK: # %bb.0: 1095; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1096; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 1097; CHECK-NEXT: vmv1r.v v8, v9 1098; CHECK-NEXT: ret 1099 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x double> 1100 ret <vscale x 1 x double> %evec 1101} 1102 1103define <vscale x 2 x half> @vsitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) { 1104; CHECK-LABEL: vsitofp_nxv2i32_nxv2f16: 1105; CHECK: # %bb.0: 1106; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1107; CHECK-NEXT: vfncvt.f.x.w v9, v8 1108; CHECK-NEXT: vmv1r.v v8, v9 1109; CHECK-NEXT: ret 1110 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x half> 1111 ret <vscale x 2 x half> %evec 1112} 1113 1114define <vscale x 2 x half> @vuitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) { 1115; CHECK-LABEL: vuitofp_nxv2i32_nxv2f16: 1116; CHECK: # %bb.0: 1117; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1118; CHECK-NEXT: vfncvt.f.xu.w v9, v8 1119; CHECK-NEXT: vmv1r.v v8, v9 1120; CHECK-NEXT: ret 1121 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x half> 1122 ret <vscale x 2 x half> %evec 1123} 1124 1125define <vscale x 2 x float> @vsitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) { 1126; CHECK-LABEL: vsitofp_nxv2i32_nxv2f32: 1127; CHECK: # %bb.0: 1128; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1129; CHECK-NEXT: vfcvt.f.x.v v8, v8 1130; CHECK-NEXT: ret 1131 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x float> 1132 ret <vscale x 2 x float> %evec 1133} 1134 1135define <vscale x 2 x float> @vuitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) { 1136; CHECK-LABEL: vuitofp_nxv2i32_nxv2f32: 1137; CHECK: # %bb.0: 1138; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1139; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1140; CHECK-NEXT: ret 1141 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x float> 1142 ret <vscale x 2 x float> %evec 1143} 1144 1145define <vscale x 2 x double> @vsitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) { 1146; CHECK-LABEL: vsitofp_nxv2i32_nxv2f64: 1147; CHECK: # %bb.0: 1148; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1149; CHECK-NEXT: vfwcvt.f.x.v v10, v8 1150; CHECK-NEXT: vmv2r.v v8, v10 1151; CHECK-NEXT: ret 1152 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x double> 1153 ret <vscale x 2 x double> %evec 1154} 1155 1156define <vscale x 2 x double> @vuitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) { 1157; CHECK-LABEL: vuitofp_nxv2i32_nxv2f64: 1158; CHECK: # %bb.0: 1159; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1160; CHECK-NEXT: vfwcvt.f.xu.v v10, v8 1161; CHECK-NEXT: vmv2r.v v8, v10 1162; CHECK-NEXT: ret 1163 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x double> 1164 ret <vscale x 2 x double> %evec 1165} 1166 1167define <vscale x 4 x half> @vsitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) { 1168; CHECK-LABEL: vsitofp_nxv4i32_nxv4f16: 1169; CHECK: # %bb.0: 1170; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1171; CHECK-NEXT: vfncvt.f.x.w v10, v8 1172; CHECK-NEXT: vmv.v.v v8, v10 1173; CHECK-NEXT: ret 1174 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x half> 1175 ret <vscale x 4 x half> %evec 1176} 1177 1178define <vscale x 4 x half> @vuitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) { 1179; CHECK-LABEL: vuitofp_nxv4i32_nxv4f16: 1180; CHECK: # %bb.0: 1181; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1182; CHECK-NEXT: vfncvt.f.xu.w v10, v8 1183; CHECK-NEXT: vmv.v.v v8, v10 1184; CHECK-NEXT: ret 1185 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x half> 1186 ret <vscale x 4 x half> %evec 1187} 1188 1189define <vscale x 4 x float> @vsitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) { 1190; CHECK-LABEL: vsitofp_nxv4i32_nxv4f32: 1191; CHECK: # %bb.0: 1192; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1193; CHECK-NEXT: vfcvt.f.x.v v8, v8 1194; CHECK-NEXT: ret 1195 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x float> 1196 ret <vscale x 4 x float> %evec 1197} 1198 1199define <vscale x 4 x float> @vuitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) { 1200; CHECK-LABEL: vuitofp_nxv4i32_nxv4f32: 1201; CHECK: # %bb.0: 1202; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1203; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1204; CHECK-NEXT: ret 1205 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x float> 1206 ret <vscale x 4 x float> %evec 1207} 1208 1209define <vscale x 4 x double> @vsitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) { 1210; CHECK-LABEL: vsitofp_nxv4i32_nxv4f64: 1211; CHECK: # %bb.0: 1212; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1213; CHECK-NEXT: vfwcvt.f.x.v v12, v8 1214; CHECK-NEXT: vmv4r.v v8, v12 1215; CHECK-NEXT: ret 1216 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x double> 1217 ret <vscale x 4 x double> %evec 1218} 1219 1220define <vscale x 4 x double> @vuitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) { 1221; CHECK-LABEL: vuitofp_nxv4i32_nxv4f64: 1222; CHECK: # %bb.0: 1223; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1224; CHECK-NEXT: vfwcvt.f.xu.v v12, v8 1225; CHECK-NEXT: vmv4r.v v8, v12 1226; CHECK-NEXT: ret 1227 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x double> 1228 ret <vscale x 4 x double> %evec 1229} 1230 1231define <vscale x 8 x half> @vsitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) { 1232; CHECK-LABEL: vsitofp_nxv8i32_nxv8f16: 1233; CHECK: # %bb.0: 1234; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1235; CHECK-NEXT: vfncvt.f.x.w v12, v8 1236; CHECK-NEXT: vmv.v.v v8, v12 1237; CHECK-NEXT: ret 1238 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x half> 1239 ret <vscale x 8 x half> %evec 1240} 1241 1242define <vscale x 8 x half> @vuitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) { 1243; CHECK-LABEL: vuitofp_nxv8i32_nxv8f16: 1244; CHECK: # %bb.0: 1245; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1246; CHECK-NEXT: vfncvt.f.xu.w v12, v8 1247; CHECK-NEXT: vmv.v.v v8, v12 1248; CHECK-NEXT: ret 1249 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x half> 1250 ret <vscale x 8 x half> %evec 1251} 1252 1253define <vscale x 8 x float> @vsitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) { 1254; CHECK-LABEL: vsitofp_nxv8i32_nxv8f32: 1255; CHECK: # %bb.0: 1256; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1257; CHECK-NEXT: vfcvt.f.x.v v8, v8 1258; CHECK-NEXT: ret 1259 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x float> 1260 ret <vscale x 8 x float> %evec 1261} 1262 1263define <vscale x 8 x float> @vuitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) { 1264; CHECK-LABEL: vuitofp_nxv8i32_nxv8f32: 1265; CHECK: # %bb.0: 1266; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1267; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1268; CHECK-NEXT: ret 1269 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x float> 1270 ret <vscale x 8 x float> %evec 1271} 1272 1273define <vscale x 8 x double> @vsitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) { 1274; CHECK-LABEL: vsitofp_nxv8i32_nxv8f64: 1275; CHECK: # %bb.0: 1276; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1277; CHECK-NEXT: vfwcvt.f.x.v v16, v8 1278; CHECK-NEXT: vmv8r.v v8, v16 1279; CHECK-NEXT: ret 1280 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x double> 1281 ret <vscale x 8 x double> %evec 1282} 1283 1284define <vscale x 8 x double> @vuitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) { 1285; CHECK-LABEL: vuitofp_nxv8i32_nxv8f64: 1286; CHECK: # %bb.0: 1287; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1288; CHECK-NEXT: vfwcvt.f.xu.v v16, v8 1289; CHECK-NEXT: vmv8r.v v8, v16 1290; CHECK-NEXT: ret 1291 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x double> 1292 ret <vscale x 8 x double> %evec 1293} 1294 1295define <vscale x 16 x half> @vsitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) { 1296; CHECK-LABEL: vsitofp_nxv16i32_nxv16f16: 1297; CHECK: # %bb.0: 1298; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1299; CHECK-NEXT: vfncvt.f.x.w v16, v8 1300; CHECK-NEXT: vmv.v.v v8, v16 1301; CHECK-NEXT: ret 1302 %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x half> 1303 ret <vscale x 16 x half> %evec 1304} 1305 1306define <vscale x 16 x half> @vuitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) { 1307; CHECK-LABEL: vuitofp_nxv16i32_nxv16f16: 1308; CHECK: # %bb.0: 1309; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1310; CHECK-NEXT: vfncvt.f.xu.w v16, v8 1311; CHECK-NEXT: vmv.v.v v8, v16 1312; CHECK-NEXT: ret 1313 %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x half> 1314 ret <vscale x 16 x half> %evec 1315} 1316 1317define <vscale x 16 x float> @vsitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) { 1318; CHECK-LABEL: vsitofp_nxv16i32_nxv16f32: 1319; CHECK: # %bb.0: 1320; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 1321; CHECK-NEXT: vfcvt.f.x.v v8, v8 1322; CHECK-NEXT: ret 1323 %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x float> 1324 ret <vscale x 16 x float> %evec 1325} 1326 1327define <vscale x 16 x float> @vuitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) { 1328; CHECK-LABEL: vuitofp_nxv16i32_nxv16f32: 1329; CHECK: # %bb.0: 1330; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 1331; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1332; CHECK-NEXT: ret 1333 %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x float> 1334 ret <vscale x 16 x float> %evec 1335} 1336 1337define <vscale x 1 x half> @vsitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) { 1338; CHECK-LABEL: vsitofp_nxv1i64_nxv1f16: 1339; CHECK: # %bb.0: 1340; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1341; CHECK-NEXT: vfncvt.f.x.w v9, v8 1342; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu 1343; CHECK-NEXT: vfncvt.f.f.w v8, v9 1344; CHECK-NEXT: ret 1345 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x half> 1346 ret <vscale x 1 x half> %evec 1347} 1348 1349define <vscale x 1 x half> @vuitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) { 1350; CHECK-LABEL: vuitofp_nxv1i64_nxv1f16: 1351; CHECK: # %bb.0: 1352; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1353; CHECK-NEXT: vfncvt.f.xu.w v9, v8 1354; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu 1355; CHECK-NEXT: vfncvt.f.f.w v8, v9 1356; CHECK-NEXT: ret 1357 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x half> 1358 ret <vscale x 1 x half> %evec 1359} 1360 1361define <vscale x 1 x float> @vsitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) { 1362; CHECK-LABEL: vsitofp_nxv1i64_nxv1f32: 1363; CHECK: # %bb.0: 1364; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1365; CHECK-NEXT: vfncvt.f.x.w v9, v8 1366; CHECK-NEXT: vmv1r.v v8, v9 1367; CHECK-NEXT: ret 1368 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x float> 1369 ret <vscale x 1 x float> %evec 1370} 1371 1372define <vscale x 1 x float> @vuitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) { 1373; CHECK-LABEL: vuitofp_nxv1i64_nxv1f32: 1374; CHECK: # %bb.0: 1375; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1376; CHECK-NEXT: vfncvt.f.xu.w v9, v8 1377; CHECK-NEXT: vmv1r.v v8, v9 1378; CHECK-NEXT: ret 1379 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x float> 1380 ret <vscale x 1 x float> %evec 1381} 1382 1383define <vscale x 1 x double> @vsitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) { 1384; CHECK-LABEL: vsitofp_nxv1i64_nxv1f64: 1385; CHECK: # %bb.0: 1386; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 1387; CHECK-NEXT: vfcvt.f.x.v v8, v8 1388; CHECK-NEXT: ret 1389 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x double> 1390 ret <vscale x 1 x double> %evec 1391} 1392 1393define <vscale x 1 x double> @vuitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) { 1394; CHECK-LABEL: vuitofp_nxv1i64_nxv1f64: 1395; CHECK: # %bb.0: 1396; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 1397; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1398; CHECK-NEXT: ret 1399 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x double> 1400 ret <vscale x 1 x double> %evec 1401} 1402 1403define <vscale x 2 x half> @vsitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) { 1404; CHECK-LABEL: vsitofp_nxv2i64_nxv2f16: 1405; CHECK: # %bb.0: 1406; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1407; CHECK-NEXT: vfncvt.f.x.w v10, v8 1408; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu 1409; CHECK-NEXT: vfncvt.f.f.w v8, v10 1410; CHECK-NEXT: ret 1411 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x half> 1412 ret <vscale x 2 x half> %evec 1413} 1414 1415define <vscale x 2 x half> @vuitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) { 1416; CHECK-LABEL: vuitofp_nxv2i64_nxv2f16: 1417; CHECK: # %bb.0: 1418; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1419; CHECK-NEXT: vfncvt.f.xu.w v10, v8 1420; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu 1421; CHECK-NEXT: vfncvt.f.f.w v8, v10 1422; CHECK-NEXT: ret 1423 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x half> 1424 ret <vscale x 2 x half> %evec 1425} 1426 1427define <vscale x 2 x float> @vsitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) { 1428; CHECK-LABEL: vsitofp_nxv2i64_nxv2f32: 1429; CHECK: # %bb.0: 1430; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1431; CHECK-NEXT: vfncvt.f.x.w v10, v8 1432; CHECK-NEXT: vmv.v.v v8, v10 1433; CHECK-NEXT: ret 1434 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x float> 1435 ret <vscale x 2 x float> %evec 1436} 1437 1438define <vscale x 2 x float> @vuitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) { 1439; CHECK-LABEL: vuitofp_nxv2i64_nxv2f32: 1440; CHECK: # %bb.0: 1441; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1442; CHECK-NEXT: vfncvt.f.xu.w v10, v8 1443; CHECK-NEXT: vmv.v.v v8, v10 1444; CHECK-NEXT: ret 1445 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x float> 1446 ret <vscale x 2 x float> %evec 1447} 1448 1449define <vscale x 2 x double> @vsitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) { 1450; CHECK-LABEL: vsitofp_nxv2i64_nxv2f64: 1451; CHECK: # %bb.0: 1452; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 1453; CHECK-NEXT: vfcvt.f.x.v v8, v8 1454; CHECK-NEXT: ret 1455 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x double> 1456 ret <vscale x 2 x double> %evec 1457} 1458 1459define <vscale x 2 x double> @vuitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) { 1460; CHECK-LABEL: vuitofp_nxv2i64_nxv2f64: 1461; CHECK: # %bb.0: 1462; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 1463; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1464; CHECK-NEXT: ret 1465 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x double> 1466 ret <vscale x 2 x double> %evec 1467} 1468 1469define <vscale x 4 x half> @vsitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) { 1470; CHECK-LABEL: vsitofp_nxv4i64_nxv4f16: 1471; CHECK: # %bb.0: 1472; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1473; CHECK-NEXT: vfncvt.f.x.w v12, v8 1474; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu 1475; CHECK-NEXT: vfncvt.f.f.w v8, v12 1476; CHECK-NEXT: ret 1477 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x half> 1478 ret <vscale x 4 x half> %evec 1479} 1480 1481define <vscale x 4 x half> @vuitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) { 1482; CHECK-LABEL: vuitofp_nxv4i64_nxv4f16: 1483; CHECK: # %bb.0: 1484; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1485; CHECK-NEXT: vfncvt.f.xu.w v12, v8 1486; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu 1487; CHECK-NEXT: vfncvt.f.f.w v8, v12 1488; CHECK-NEXT: ret 1489 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x half> 1490 ret <vscale x 4 x half> %evec 1491} 1492 1493define <vscale x 4 x float> @vsitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) { 1494; CHECK-LABEL: vsitofp_nxv4i64_nxv4f32: 1495; CHECK: # %bb.0: 1496; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1497; CHECK-NEXT: vfncvt.f.x.w v12, v8 1498; CHECK-NEXT: vmv.v.v v8, v12 1499; CHECK-NEXT: ret 1500 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x float> 1501 ret <vscale x 4 x float> %evec 1502} 1503 1504define <vscale x 4 x float> @vuitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) { 1505; CHECK-LABEL: vuitofp_nxv4i64_nxv4f32: 1506; CHECK: # %bb.0: 1507; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1508; CHECK-NEXT: vfncvt.f.xu.w v12, v8 1509; CHECK-NEXT: vmv.v.v v8, v12 1510; CHECK-NEXT: ret 1511 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x float> 1512 ret <vscale x 4 x float> %evec 1513} 1514 1515define <vscale x 4 x double> @vsitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) { 1516; CHECK-LABEL: vsitofp_nxv4i64_nxv4f64: 1517; CHECK: # %bb.0: 1518; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 1519; CHECK-NEXT: vfcvt.f.x.v v8, v8 1520; CHECK-NEXT: ret 1521 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x double> 1522 ret <vscale x 4 x double> %evec 1523} 1524 1525define <vscale x 4 x double> @vuitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) { 1526; CHECK-LABEL: vuitofp_nxv4i64_nxv4f64: 1527; CHECK: # %bb.0: 1528; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 1529; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1530; CHECK-NEXT: ret 1531 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x double> 1532 ret <vscale x 4 x double> %evec 1533} 1534 1535define <vscale x 8 x half> @vsitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) { 1536; CHECK-LABEL: vsitofp_nxv8i64_nxv8f16: 1537; CHECK: # %bb.0: 1538; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1539; CHECK-NEXT: vfncvt.f.x.w v16, v8 1540; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu 1541; CHECK-NEXT: vfncvt.f.f.w v8, v16 1542; CHECK-NEXT: ret 1543 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x half> 1544 ret <vscale x 8 x half> %evec 1545} 1546 1547define <vscale x 8 x half> @vuitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) { 1548; CHECK-LABEL: vuitofp_nxv8i64_nxv8f16: 1549; CHECK: # %bb.0: 1550; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1551; CHECK-NEXT: vfncvt.f.xu.w v16, v8 1552; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu 1553; CHECK-NEXT: vfncvt.f.f.w v8, v16 1554; CHECK-NEXT: ret 1555 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x half> 1556 ret <vscale x 8 x half> %evec 1557} 1558 1559define <vscale x 8 x float> @vsitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) { 1560; CHECK-LABEL: vsitofp_nxv8i64_nxv8f32: 1561; CHECK: # %bb.0: 1562; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1563; CHECK-NEXT: vfncvt.f.x.w v16, v8 1564; CHECK-NEXT: vmv.v.v v8, v16 1565; CHECK-NEXT: ret 1566 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x float> 1567 ret <vscale x 8 x float> %evec 1568} 1569 1570define <vscale x 8 x float> @vuitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) { 1571; CHECK-LABEL: vuitofp_nxv8i64_nxv8f32: 1572; CHECK: # %bb.0: 1573; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1574; CHECK-NEXT: vfncvt.f.xu.w v16, v8 1575; CHECK-NEXT: vmv.v.v v8, v16 1576; CHECK-NEXT: ret 1577 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x float> 1578 ret <vscale x 8 x float> %evec 1579} 1580 1581define <vscale x 8 x double> @vsitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) { 1582; CHECK-LABEL: vsitofp_nxv8i64_nxv8f64: 1583; CHECK: # %bb.0: 1584; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1585; CHECK-NEXT: vfcvt.f.x.v v8, v8 1586; CHECK-NEXT: ret 1587 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x double> 1588 ret <vscale x 8 x double> %evec 1589} 1590 1591define <vscale x 8 x double> @vuitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) { 1592; CHECK-LABEL: vuitofp_nxv8i64_nxv8f64: 1593; CHECK: # %bb.0: 1594; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1595; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1596; CHECK-NEXT: ret 1597 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x double> 1598 ret <vscale x 8 x double> %evec 1599} 1600