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> @vuitofp_nxv1i8_nxv1f16(<vscale x 1 x i8> %va) { 379; CHECK-LABEL: vuitofp_nxv1i8_nxv1f16: 380; CHECK: # %bb.0: 381; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 382; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 383; CHECK-NEXT: vmv1r.v v8, v9 384; CHECK-NEXT: ret 385 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x half> 386 ret <vscale x 1 x half> %evec 387} 388 389define <vscale x 1 x float> @vsitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) { 390; CHECK-LABEL: vsitofp_nxv1i8_nxv1f32: 391; CHECK: # %bb.0: 392; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 393; CHECK-NEXT: vsext.vf4 v9, v8 394; CHECK-NEXT: vfcvt.f.x.v v8, v9 395; CHECK-NEXT: ret 396 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x float> 397 ret <vscale x 1 x float> %evec 398} 399 400define <vscale x 1 x float> @vuitofp_nxv1i8_nxv1f32(<vscale x 1 x i8> %va) { 401; CHECK-LABEL: vuitofp_nxv1i8_nxv1f32: 402; CHECK: # %bb.0: 403; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 404; CHECK-NEXT: vzext.vf4 v9, v8 405; CHECK-NEXT: vfcvt.f.xu.v v8, v9 406; CHECK-NEXT: ret 407 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x float> 408 ret <vscale x 1 x float> %evec 409} 410 411define <vscale x 1 x double> @vsitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) { 412; CHECK-LABEL: vsitofp_nxv1i8_nxv1f64: 413; CHECK: # %bb.0: 414; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 415; CHECK-NEXT: vsext.vf8 v9, v8 416; CHECK-NEXT: vfcvt.f.x.v v8, v9 417; CHECK-NEXT: ret 418 %evec = sitofp <vscale x 1 x i8> %va to <vscale x 1 x double> 419 ret <vscale x 1 x double> %evec 420} 421 422define <vscale x 1 x double> @vuitofp_nxv1i8_nxv1f64(<vscale x 1 x i8> %va) { 423; CHECK-LABEL: vuitofp_nxv1i8_nxv1f64: 424; CHECK: # %bb.0: 425; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 426; CHECK-NEXT: vzext.vf8 v9, v8 427; CHECK-NEXT: vfcvt.f.xu.v v8, v9 428; CHECK-NEXT: ret 429 %evec = uitofp <vscale x 1 x i8> %va to <vscale x 1 x double> 430 ret <vscale x 1 x double> %evec 431} 432 433define <vscale x 2 x half> @vsitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) { 434; CHECK-LABEL: vsitofp_nxv2i8_nxv2f16: 435; CHECK: # %bb.0: 436; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 437; CHECK-NEXT: vfwcvt.f.x.v v9, v8 438; CHECK-NEXT: vmv1r.v v8, v9 439; CHECK-NEXT: ret 440 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x half> 441 ret <vscale x 2 x half> %evec 442} 443 444define <vscale x 2 x half> @vuitofp_nxv2i8_nxv2f16(<vscale x 2 x i8> %va) { 445; CHECK-LABEL: vuitofp_nxv2i8_nxv2f16: 446; CHECK: # %bb.0: 447; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 448; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 449; CHECK-NEXT: vmv1r.v v8, v9 450; CHECK-NEXT: ret 451 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x half> 452 ret <vscale x 2 x half> %evec 453} 454 455define <vscale x 2 x float> @vsitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) { 456; CHECK-LABEL: vsitofp_nxv2i8_nxv2f32: 457; CHECK: # %bb.0: 458; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 459; CHECK-NEXT: vsext.vf4 v9, v8 460; CHECK-NEXT: vfcvt.f.x.v v8, v9 461; CHECK-NEXT: ret 462 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x float> 463 ret <vscale x 2 x float> %evec 464} 465 466define <vscale x 2 x float> @vuitofp_nxv2i8_nxv2f32(<vscale x 2 x i8> %va) { 467; CHECK-LABEL: vuitofp_nxv2i8_nxv2f32: 468; CHECK: # %bb.0: 469; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 470; CHECK-NEXT: vzext.vf4 v9, v8 471; CHECK-NEXT: vfcvt.f.xu.v v8, v9 472; CHECK-NEXT: ret 473 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x float> 474 ret <vscale x 2 x float> %evec 475} 476 477define <vscale x 2 x double> @vsitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) { 478; CHECK-LABEL: vsitofp_nxv2i8_nxv2f64: 479; CHECK: # %bb.0: 480; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 481; CHECK-NEXT: vsext.vf8 v10, v8 482; CHECK-NEXT: vfcvt.f.x.v v8, v10 483; CHECK-NEXT: ret 484 %evec = sitofp <vscale x 2 x i8> %va to <vscale x 2 x double> 485 ret <vscale x 2 x double> %evec 486} 487 488define <vscale x 2 x double> @vuitofp_nxv2i8_nxv2f64(<vscale x 2 x i8> %va) { 489; CHECK-LABEL: vuitofp_nxv2i8_nxv2f64: 490; CHECK: # %bb.0: 491; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 492; CHECK-NEXT: vzext.vf8 v10, v8 493; CHECK-NEXT: vfcvt.f.xu.v v8, v10 494; CHECK-NEXT: ret 495 %evec = uitofp <vscale x 2 x i8> %va to <vscale x 2 x double> 496 ret <vscale x 2 x double> %evec 497} 498 499define <vscale x 4 x half> @vsitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) { 500; CHECK-LABEL: vsitofp_nxv4i8_nxv4f16: 501; CHECK: # %bb.0: 502; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 503; CHECK-NEXT: vfwcvt.f.x.v v9, v8 504; CHECK-NEXT: vmv1r.v v8, v9 505; CHECK-NEXT: ret 506 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x half> 507 ret <vscale x 4 x half> %evec 508} 509 510define <vscale x 4 x half> @vuitofp_nxv4i8_nxv4f16(<vscale x 4 x i8> %va) { 511; CHECK-LABEL: vuitofp_nxv4i8_nxv4f16: 512; CHECK: # %bb.0: 513; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 514; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 515; CHECK-NEXT: vmv1r.v v8, v9 516; CHECK-NEXT: ret 517 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x half> 518 ret <vscale x 4 x half> %evec 519} 520 521define <vscale x 4 x float> @vsitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) { 522; CHECK-LABEL: vsitofp_nxv4i8_nxv4f32: 523; CHECK: # %bb.0: 524; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 525; CHECK-NEXT: vsext.vf4 v10, v8 526; CHECK-NEXT: vfcvt.f.x.v v8, v10 527; CHECK-NEXT: ret 528 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x float> 529 ret <vscale x 4 x float> %evec 530} 531 532define <vscale x 4 x float> @vuitofp_nxv4i8_nxv4f32(<vscale x 4 x i8> %va) { 533; CHECK-LABEL: vuitofp_nxv4i8_nxv4f32: 534; CHECK: # %bb.0: 535; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 536; CHECK-NEXT: vzext.vf4 v10, v8 537; CHECK-NEXT: vfcvt.f.xu.v v8, v10 538; CHECK-NEXT: ret 539 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x float> 540 ret <vscale x 4 x float> %evec 541} 542 543define <vscale x 4 x double> @vsitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) { 544; CHECK-LABEL: vsitofp_nxv4i8_nxv4f64: 545; CHECK: # %bb.0: 546; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 547; CHECK-NEXT: vsext.vf8 v12, v8 548; CHECK-NEXT: vfcvt.f.x.v v8, v12 549; CHECK-NEXT: ret 550 %evec = sitofp <vscale x 4 x i8> %va to <vscale x 4 x double> 551 ret <vscale x 4 x double> %evec 552} 553 554define <vscale x 4 x double> @vuitofp_nxv4i8_nxv4f64(<vscale x 4 x i8> %va) { 555; CHECK-LABEL: vuitofp_nxv4i8_nxv4f64: 556; CHECK: # %bb.0: 557; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 558; CHECK-NEXT: vzext.vf8 v12, v8 559; CHECK-NEXT: vfcvt.f.xu.v v8, v12 560; CHECK-NEXT: ret 561 %evec = uitofp <vscale x 4 x i8> %va to <vscale x 4 x double> 562 ret <vscale x 4 x double> %evec 563} 564 565define <vscale x 8 x half> @vsitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) { 566; CHECK-LABEL: vsitofp_nxv8i8_nxv8f16: 567; CHECK: # %bb.0: 568; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 569; CHECK-NEXT: vfwcvt.f.x.v v10, v8 570; CHECK-NEXT: vmv2r.v v8, v10 571; CHECK-NEXT: ret 572 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x half> 573 ret <vscale x 8 x half> %evec 574} 575 576define <vscale x 8 x half> @vuitofp_nxv8i8_nxv8f16(<vscale x 8 x i8> %va) { 577; CHECK-LABEL: vuitofp_nxv8i8_nxv8f16: 578; CHECK: # %bb.0: 579; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 580; CHECK-NEXT: vfwcvt.f.xu.v v10, v8 581; CHECK-NEXT: vmv2r.v v8, v10 582; CHECK-NEXT: ret 583 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x half> 584 ret <vscale x 8 x half> %evec 585} 586 587define <vscale x 8 x float> @vsitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) { 588; CHECK-LABEL: vsitofp_nxv8i8_nxv8f32: 589; CHECK: # %bb.0: 590; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 591; CHECK-NEXT: vsext.vf4 v12, v8 592; CHECK-NEXT: vfcvt.f.x.v v8, v12 593; CHECK-NEXT: ret 594 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x float> 595 ret <vscale x 8 x float> %evec 596} 597 598define <vscale x 8 x float> @vuitofp_nxv8i8_nxv8f32(<vscale x 8 x i8> %va) { 599; CHECK-LABEL: vuitofp_nxv8i8_nxv8f32: 600; CHECK: # %bb.0: 601; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 602; CHECK-NEXT: vzext.vf4 v12, v8 603; CHECK-NEXT: vfcvt.f.xu.v v8, v12 604; CHECK-NEXT: ret 605 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x float> 606 ret <vscale x 8 x float> %evec 607} 608 609define <vscale x 8 x double> @vsitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) { 610; CHECK-LABEL: vsitofp_nxv8i8_nxv8f64: 611; CHECK: # %bb.0: 612; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 613; CHECK-NEXT: vsext.vf8 v16, v8 614; CHECK-NEXT: vfcvt.f.x.v v8, v16 615; CHECK-NEXT: ret 616 %evec = sitofp <vscale x 8 x i8> %va to <vscale x 8 x double> 617 ret <vscale x 8 x double> %evec 618} 619 620define <vscale x 8 x double> @vuitofp_nxv8i8_nxv8f64(<vscale x 8 x i8> %va) { 621; CHECK-LABEL: vuitofp_nxv8i8_nxv8f64: 622; CHECK: # %bb.0: 623; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 624; CHECK-NEXT: vzext.vf8 v16, v8 625; CHECK-NEXT: vfcvt.f.xu.v v8, v16 626; CHECK-NEXT: ret 627 %evec = uitofp <vscale x 8 x i8> %va to <vscale x 8 x double> 628 ret <vscale x 8 x double> %evec 629} 630 631define <vscale x 16 x half> @vsitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) { 632; CHECK-LABEL: vsitofp_nxv16i8_nxv16f16: 633; CHECK: # %bb.0: 634; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 635; CHECK-NEXT: vfwcvt.f.x.v v12, v8 636; CHECK-NEXT: vmv4r.v v8, v12 637; CHECK-NEXT: ret 638 %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x half> 639 ret <vscale x 16 x half> %evec 640} 641 642define <vscale x 16 x half> @vuitofp_nxv16i8_nxv16f16(<vscale x 16 x i8> %va) { 643; CHECK-LABEL: vuitofp_nxv16i8_nxv16f16: 644; CHECK: # %bb.0: 645; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 646; CHECK-NEXT: vfwcvt.f.xu.v v12, v8 647; CHECK-NEXT: vmv4r.v v8, v12 648; CHECK-NEXT: ret 649 %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x half> 650 ret <vscale x 16 x half> %evec 651} 652 653define <vscale x 16 x float> @vsitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) { 654; CHECK-LABEL: vsitofp_nxv16i8_nxv16f32: 655; CHECK: # %bb.0: 656; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 657; CHECK-NEXT: vsext.vf4 v16, v8 658; CHECK-NEXT: vfcvt.f.x.v v8, v16 659; CHECK-NEXT: ret 660 %evec = sitofp <vscale x 16 x i8> %va to <vscale x 16 x float> 661 ret <vscale x 16 x float> %evec 662} 663 664define <vscale x 16 x float> @vuitofp_nxv16i8_nxv16f32(<vscale x 16 x i8> %va) { 665; CHECK-LABEL: vuitofp_nxv16i8_nxv16f32: 666; CHECK: # %bb.0: 667; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 668; CHECK-NEXT: vzext.vf4 v16, v8 669; CHECK-NEXT: vfcvt.f.xu.v v8, v16 670; CHECK-NEXT: ret 671 %evec = uitofp <vscale x 16 x i8> %va to <vscale x 16 x float> 672 ret <vscale x 16 x float> %evec 673} 674 675define <vscale x 32 x half> @vsitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) { 676; CHECK-LABEL: vsitofp_nxv32i8_nxv32f16: 677; CHECK: # %bb.0: 678; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 679; CHECK-NEXT: vfwcvt.f.x.v v16, v8 680; CHECK-NEXT: vmv8r.v v8, v16 681; CHECK-NEXT: ret 682 %evec = sitofp <vscale x 32 x i8> %va to <vscale x 32 x half> 683 ret <vscale x 32 x half> %evec 684} 685 686define <vscale x 32 x half> @vuitofp_nxv32i8_nxv32f16(<vscale x 32 x i8> %va) { 687; CHECK-LABEL: vuitofp_nxv32i8_nxv32f16: 688; CHECK: # %bb.0: 689; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 690; CHECK-NEXT: vfwcvt.f.xu.v v16, v8 691; CHECK-NEXT: vmv8r.v v8, v16 692; CHECK-NEXT: ret 693 %evec = uitofp <vscale x 32 x i8> %va to <vscale x 32 x half> 694 ret <vscale x 32 x half> %evec 695} 696 697define <vscale x 1 x half> @vsitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) { 698; CHECK-LABEL: vsitofp_nxv1i16_nxv1f16: 699; CHECK: # %bb.0: 700; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 701; CHECK-NEXT: vfcvt.f.x.v v8, v8 702; CHECK-NEXT: ret 703 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x half> 704 ret <vscale x 1 x half> %evec 705} 706 707define <vscale x 1 x half> @vuitofp_nxv1i16_nxv1f16(<vscale x 1 x i16> %va) { 708; CHECK-LABEL: vuitofp_nxv1i16_nxv1f16: 709; CHECK: # %bb.0: 710; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 711; CHECK-NEXT: vfcvt.f.xu.v v8, v8 712; CHECK-NEXT: ret 713 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x half> 714 ret <vscale x 1 x half> %evec 715} 716 717define <vscale x 1 x float> @vsitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) { 718; CHECK-LABEL: vsitofp_nxv1i16_nxv1f32: 719; CHECK: # %bb.0: 720; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 721; CHECK-NEXT: vfwcvt.f.x.v v9, v8 722; CHECK-NEXT: vmv1r.v v8, v9 723; CHECK-NEXT: ret 724 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x float> 725 ret <vscale x 1 x float> %evec 726} 727 728define <vscale x 1 x float> @vuitofp_nxv1i16_nxv1f32(<vscale x 1 x i16> %va) { 729; CHECK-LABEL: vuitofp_nxv1i16_nxv1f32: 730; CHECK: # %bb.0: 731; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 732; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 733; CHECK-NEXT: vmv1r.v v8, v9 734; CHECK-NEXT: ret 735 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x float> 736 ret <vscale x 1 x float> %evec 737} 738 739define <vscale x 1 x double> @vsitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) { 740; CHECK-LABEL: vsitofp_nxv1i16_nxv1f64: 741; CHECK: # %bb.0: 742; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 743; CHECK-NEXT: vsext.vf4 v9, v8 744; CHECK-NEXT: vfcvt.f.x.v v8, v9 745; CHECK-NEXT: ret 746 %evec = sitofp <vscale x 1 x i16> %va to <vscale x 1 x double> 747 ret <vscale x 1 x double> %evec 748} 749 750define <vscale x 1 x double> @vuitofp_nxv1i16_nxv1f64(<vscale x 1 x i16> %va) { 751; CHECK-LABEL: vuitofp_nxv1i16_nxv1f64: 752; CHECK: # %bb.0: 753; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 754; CHECK-NEXT: vzext.vf4 v9, v8 755; CHECK-NEXT: vfcvt.f.xu.v v8, v9 756; CHECK-NEXT: ret 757 %evec = uitofp <vscale x 1 x i16> %va to <vscale x 1 x double> 758 ret <vscale x 1 x double> %evec 759} 760 761define <vscale x 2 x half> @vsitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) { 762; CHECK-LABEL: vsitofp_nxv2i16_nxv2f16: 763; CHECK: # %bb.0: 764; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 765; CHECK-NEXT: vfcvt.f.x.v v8, v8 766; CHECK-NEXT: ret 767 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x half> 768 ret <vscale x 2 x half> %evec 769} 770 771define <vscale x 2 x half> @vuitofp_nxv2i16_nxv2f16(<vscale x 2 x i16> %va) { 772; CHECK-LABEL: vuitofp_nxv2i16_nxv2f16: 773; CHECK: # %bb.0: 774; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 775; CHECK-NEXT: vfcvt.f.xu.v v8, v8 776; CHECK-NEXT: ret 777 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x half> 778 ret <vscale x 2 x half> %evec 779} 780 781define <vscale x 2 x float> @vsitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) { 782; CHECK-LABEL: vsitofp_nxv2i16_nxv2f32: 783; CHECK: # %bb.0: 784; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 785; CHECK-NEXT: vfwcvt.f.x.v v9, v8 786; CHECK-NEXT: vmv1r.v v8, v9 787; CHECK-NEXT: ret 788 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x float> 789 ret <vscale x 2 x float> %evec 790} 791 792define <vscale x 2 x float> @vuitofp_nxv2i16_nxv2f32(<vscale x 2 x i16> %va) { 793; CHECK-LABEL: vuitofp_nxv2i16_nxv2f32: 794; CHECK: # %bb.0: 795; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 796; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 797; CHECK-NEXT: vmv1r.v v8, v9 798; CHECK-NEXT: ret 799 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x float> 800 ret <vscale x 2 x float> %evec 801} 802 803define <vscale x 2 x double> @vsitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) { 804; CHECK-LABEL: vsitofp_nxv2i16_nxv2f64: 805; CHECK: # %bb.0: 806; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 807; CHECK-NEXT: vsext.vf4 v10, v8 808; CHECK-NEXT: vfcvt.f.x.v v8, v10 809; CHECK-NEXT: ret 810 %evec = sitofp <vscale x 2 x i16> %va to <vscale x 2 x double> 811 ret <vscale x 2 x double> %evec 812} 813 814define <vscale x 2 x double> @vuitofp_nxv2i16_nxv2f64(<vscale x 2 x i16> %va) { 815; CHECK-LABEL: vuitofp_nxv2i16_nxv2f64: 816; CHECK: # %bb.0: 817; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 818; CHECK-NEXT: vzext.vf4 v10, v8 819; CHECK-NEXT: vfcvt.f.xu.v v8, v10 820; CHECK-NEXT: ret 821 %evec = uitofp <vscale x 2 x i16> %va to <vscale x 2 x double> 822 ret <vscale x 2 x double> %evec 823} 824 825define <vscale x 4 x half> @vsitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) { 826; CHECK-LABEL: vsitofp_nxv4i16_nxv4f16: 827; CHECK: # %bb.0: 828; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 829; CHECK-NEXT: vfcvt.f.x.v v8, v8 830; CHECK-NEXT: ret 831 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x half> 832 ret <vscale x 4 x half> %evec 833} 834 835define <vscale x 4 x half> @vuitofp_nxv4i16_nxv4f16(<vscale x 4 x i16> %va) { 836; CHECK-LABEL: vuitofp_nxv4i16_nxv4f16: 837; CHECK: # %bb.0: 838; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 839; CHECK-NEXT: vfcvt.f.xu.v v8, v8 840; CHECK-NEXT: ret 841 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x half> 842 ret <vscale x 4 x half> %evec 843} 844 845define <vscale x 4 x float> @vsitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) { 846; CHECK-LABEL: vsitofp_nxv4i16_nxv4f32: 847; CHECK: # %bb.0: 848; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 849; CHECK-NEXT: vfwcvt.f.x.v v10, v8 850; CHECK-NEXT: vmv2r.v v8, v10 851; CHECK-NEXT: ret 852 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x float> 853 ret <vscale x 4 x float> %evec 854} 855 856define <vscale x 4 x float> @vuitofp_nxv4i16_nxv4f32(<vscale x 4 x i16> %va) { 857; CHECK-LABEL: vuitofp_nxv4i16_nxv4f32: 858; CHECK: # %bb.0: 859; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 860; CHECK-NEXT: vfwcvt.f.xu.v v10, v8 861; CHECK-NEXT: vmv2r.v v8, v10 862; CHECK-NEXT: ret 863 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x float> 864 ret <vscale x 4 x float> %evec 865} 866 867define <vscale x 4 x double> @vsitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) { 868; CHECK-LABEL: vsitofp_nxv4i16_nxv4f64: 869; CHECK: # %bb.0: 870; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 871; CHECK-NEXT: vsext.vf4 v12, v8 872; CHECK-NEXT: vfcvt.f.x.v v8, v12 873; CHECK-NEXT: ret 874 %evec = sitofp <vscale x 4 x i16> %va to <vscale x 4 x double> 875 ret <vscale x 4 x double> %evec 876} 877 878define <vscale x 4 x double> @vuitofp_nxv4i16_nxv4f64(<vscale x 4 x i16> %va) { 879; CHECK-LABEL: vuitofp_nxv4i16_nxv4f64: 880; CHECK: # %bb.0: 881; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 882; CHECK-NEXT: vzext.vf4 v12, v8 883; CHECK-NEXT: vfcvt.f.xu.v v8, v12 884; CHECK-NEXT: ret 885 %evec = uitofp <vscale x 4 x i16> %va to <vscale x 4 x double> 886 ret <vscale x 4 x double> %evec 887} 888 889define <vscale x 8 x half> @vsitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) { 890; CHECK-LABEL: vsitofp_nxv8i16_nxv8f16: 891; CHECK: # %bb.0: 892; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 893; CHECK-NEXT: vfcvt.f.x.v v8, v8 894; CHECK-NEXT: ret 895 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x half> 896 ret <vscale x 8 x half> %evec 897} 898 899define <vscale x 8 x half> @vuitofp_nxv8i16_nxv8f16(<vscale x 8 x i16> %va) { 900; CHECK-LABEL: vuitofp_nxv8i16_nxv8f16: 901; CHECK: # %bb.0: 902; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 903; CHECK-NEXT: vfcvt.f.xu.v v8, v8 904; CHECK-NEXT: ret 905 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x half> 906 ret <vscale x 8 x half> %evec 907} 908 909define <vscale x 8 x float> @vsitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) { 910; CHECK-LABEL: vsitofp_nxv8i16_nxv8f32: 911; CHECK: # %bb.0: 912; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 913; CHECK-NEXT: vfwcvt.f.x.v v12, v8 914; CHECK-NEXT: vmv4r.v v8, v12 915; CHECK-NEXT: ret 916 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x float> 917 ret <vscale x 8 x float> %evec 918} 919 920define <vscale x 8 x float> @vuitofp_nxv8i16_nxv8f32(<vscale x 8 x i16> %va) { 921; CHECK-LABEL: vuitofp_nxv8i16_nxv8f32: 922; CHECK: # %bb.0: 923; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 924; CHECK-NEXT: vfwcvt.f.xu.v v12, v8 925; CHECK-NEXT: vmv4r.v v8, v12 926; CHECK-NEXT: ret 927 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x float> 928 ret <vscale x 8 x float> %evec 929} 930 931define <vscale x 8 x double> @vsitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) { 932; CHECK-LABEL: vsitofp_nxv8i16_nxv8f64: 933; CHECK: # %bb.0: 934; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 935; CHECK-NEXT: vsext.vf4 v16, v8 936; CHECK-NEXT: vfcvt.f.x.v v8, v16 937; CHECK-NEXT: ret 938 %evec = sitofp <vscale x 8 x i16> %va to <vscale x 8 x double> 939 ret <vscale x 8 x double> %evec 940} 941 942define <vscale x 8 x double> @vuitofp_nxv8i16_nxv8f64(<vscale x 8 x i16> %va) { 943; CHECK-LABEL: vuitofp_nxv8i16_nxv8f64: 944; CHECK: # %bb.0: 945; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 946; CHECK-NEXT: vzext.vf4 v16, v8 947; CHECK-NEXT: vfcvt.f.xu.v v8, v16 948; CHECK-NEXT: ret 949 %evec = uitofp <vscale x 8 x i16> %va to <vscale x 8 x double> 950 ret <vscale x 8 x double> %evec 951} 952 953define <vscale x 16 x half> @vsitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) { 954; CHECK-LABEL: vsitofp_nxv16i16_nxv16f16: 955; CHECK: # %bb.0: 956; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 957; CHECK-NEXT: vfcvt.f.x.v v8, v8 958; CHECK-NEXT: ret 959 %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x half> 960 ret <vscale x 16 x half> %evec 961} 962 963define <vscale x 16 x half> @vuitofp_nxv16i16_nxv16f16(<vscale x 16 x i16> %va) { 964; CHECK-LABEL: vuitofp_nxv16i16_nxv16f16: 965; CHECK: # %bb.0: 966; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 967; CHECK-NEXT: vfcvt.f.xu.v v8, v8 968; CHECK-NEXT: ret 969 %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x half> 970 ret <vscale x 16 x half> %evec 971} 972 973define <vscale x 16 x float> @vsitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) { 974; CHECK-LABEL: vsitofp_nxv16i16_nxv16f32: 975; CHECK: # %bb.0: 976; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 977; CHECK-NEXT: vfwcvt.f.x.v v16, v8 978; CHECK-NEXT: vmv8r.v v8, v16 979; CHECK-NEXT: ret 980 %evec = sitofp <vscale x 16 x i16> %va to <vscale x 16 x float> 981 ret <vscale x 16 x float> %evec 982} 983 984define <vscale x 16 x float> @vuitofp_nxv16i16_nxv16f32(<vscale x 16 x i16> %va) { 985; CHECK-LABEL: vuitofp_nxv16i16_nxv16f32: 986; CHECK: # %bb.0: 987; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 988; CHECK-NEXT: vfwcvt.f.xu.v v16, v8 989; CHECK-NEXT: vmv8r.v v8, v16 990; CHECK-NEXT: ret 991 %evec = uitofp <vscale x 16 x i16> %va to <vscale x 16 x float> 992 ret <vscale x 16 x float> %evec 993} 994 995define <vscale x 32 x half> @vsitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) { 996; CHECK-LABEL: vsitofp_nxv32i16_nxv32f16: 997; CHECK: # %bb.0: 998; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 999; CHECK-NEXT: vfcvt.f.x.v v8, v8 1000; CHECK-NEXT: ret 1001 %evec = sitofp <vscale x 32 x i16> %va to <vscale x 32 x half> 1002 ret <vscale x 32 x half> %evec 1003} 1004 1005define <vscale x 32 x half> @vuitofp_nxv32i16_nxv32f16(<vscale x 32 x i16> %va) { 1006; CHECK-LABEL: vuitofp_nxv32i16_nxv32f16: 1007; CHECK: # %bb.0: 1008; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 1009; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1010; CHECK-NEXT: ret 1011 %evec = uitofp <vscale x 32 x i16> %va to <vscale x 32 x half> 1012 ret <vscale x 32 x half> %evec 1013} 1014 1015define <vscale x 1 x half> @vsitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) { 1016; CHECK-LABEL: vsitofp_nxv1i32_nxv1f16: 1017; CHECK: # %bb.0: 1018; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 1019; CHECK-NEXT: vfncvt.f.x.w v9, v8 1020; CHECK-NEXT: vmv1r.v v8, v9 1021; CHECK-NEXT: ret 1022 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x half> 1023 ret <vscale x 1 x half> %evec 1024} 1025 1026define <vscale x 1 x half> @vuitofp_nxv1i32_nxv1f16(<vscale x 1 x i32> %va) { 1027; CHECK-LABEL: vuitofp_nxv1i32_nxv1f16: 1028; CHECK: # %bb.0: 1029; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 1030; CHECK-NEXT: vfncvt.f.xu.w v9, v8 1031; CHECK-NEXT: vmv1r.v v8, v9 1032; CHECK-NEXT: ret 1033 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x half> 1034 ret <vscale x 1 x half> %evec 1035} 1036 1037define <vscale x 1 x float> @vsitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) { 1038; CHECK-LABEL: vsitofp_nxv1i32_nxv1f32: 1039; CHECK: # %bb.0: 1040; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1041; CHECK-NEXT: vfcvt.f.x.v v8, v8 1042; CHECK-NEXT: ret 1043 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x float> 1044 ret <vscale x 1 x float> %evec 1045} 1046 1047define <vscale x 1 x float> @vuitofp_nxv1i32_nxv1f32(<vscale x 1 x i32> %va) { 1048; CHECK-LABEL: vuitofp_nxv1i32_nxv1f32: 1049; CHECK: # %bb.0: 1050; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1051; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1052; CHECK-NEXT: ret 1053 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x float> 1054 ret <vscale x 1 x float> %evec 1055} 1056 1057define <vscale x 1 x double> @vsitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) { 1058; CHECK-LABEL: vsitofp_nxv1i32_nxv1f64: 1059; CHECK: # %bb.0: 1060; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1061; CHECK-NEXT: vfwcvt.f.x.v v9, v8 1062; CHECK-NEXT: vmv1r.v v8, v9 1063; CHECK-NEXT: ret 1064 %evec = sitofp <vscale x 1 x i32> %va to <vscale x 1 x double> 1065 ret <vscale x 1 x double> %evec 1066} 1067 1068define <vscale x 1 x double> @vuitofp_nxv1i32_nxv1f64(<vscale x 1 x i32> %va) { 1069; CHECK-LABEL: vuitofp_nxv1i32_nxv1f64: 1070; CHECK: # %bb.0: 1071; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1072; CHECK-NEXT: vfwcvt.f.xu.v v9, v8 1073; CHECK-NEXT: vmv1r.v v8, v9 1074; CHECK-NEXT: ret 1075 %evec = uitofp <vscale x 1 x i32> %va to <vscale x 1 x double> 1076 ret <vscale x 1 x double> %evec 1077} 1078 1079define <vscale x 2 x half> @vsitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) { 1080; CHECK-LABEL: vsitofp_nxv2i32_nxv2f16: 1081; CHECK: # %bb.0: 1082; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1083; CHECK-NEXT: vfncvt.f.x.w v9, v8 1084; CHECK-NEXT: vmv1r.v v8, v9 1085; CHECK-NEXT: ret 1086 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x half> 1087 ret <vscale x 2 x half> %evec 1088} 1089 1090define <vscale x 2 x half> @vuitofp_nxv2i32_nxv2f16(<vscale x 2 x i32> %va) { 1091; CHECK-LABEL: vuitofp_nxv2i32_nxv2f16: 1092; CHECK: # %bb.0: 1093; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 1094; CHECK-NEXT: vfncvt.f.xu.w v9, v8 1095; CHECK-NEXT: vmv1r.v v8, v9 1096; CHECK-NEXT: ret 1097 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x half> 1098 ret <vscale x 2 x half> %evec 1099} 1100 1101define <vscale x 2 x float> @vsitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) { 1102; CHECK-LABEL: vsitofp_nxv2i32_nxv2f32: 1103; CHECK: # %bb.0: 1104; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1105; CHECK-NEXT: vfcvt.f.x.v v8, v8 1106; CHECK-NEXT: ret 1107 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x float> 1108 ret <vscale x 2 x float> %evec 1109} 1110 1111define <vscale x 2 x float> @vuitofp_nxv2i32_nxv2f32(<vscale x 2 x i32> %va) { 1112; CHECK-LABEL: vuitofp_nxv2i32_nxv2f32: 1113; CHECK: # %bb.0: 1114; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1115; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1116; CHECK-NEXT: ret 1117 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x float> 1118 ret <vscale x 2 x float> %evec 1119} 1120 1121define <vscale x 2 x double> @vsitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) { 1122; CHECK-LABEL: vsitofp_nxv2i32_nxv2f64: 1123; CHECK: # %bb.0: 1124; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1125; CHECK-NEXT: vfwcvt.f.x.v v10, v8 1126; CHECK-NEXT: vmv2r.v v8, v10 1127; CHECK-NEXT: ret 1128 %evec = sitofp <vscale x 2 x i32> %va to <vscale x 2 x double> 1129 ret <vscale x 2 x double> %evec 1130} 1131 1132define <vscale x 2 x double> @vuitofp_nxv2i32_nxv2f64(<vscale x 2 x i32> %va) { 1133; CHECK-LABEL: vuitofp_nxv2i32_nxv2f64: 1134; CHECK: # %bb.0: 1135; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1136; CHECK-NEXT: vfwcvt.f.xu.v v10, v8 1137; CHECK-NEXT: vmv2r.v v8, v10 1138; CHECK-NEXT: ret 1139 %evec = uitofp <vscale x 2 x i32> %va to <vscale x 2 x double> 1140 ret <vscale x 2 x double> %evec 1141} 1142 1143define <vscale x 4 x half> @vsitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) { 1144; CHECK-LABEL: vsitofp_nxv4i32_nxv4f16: 1145; CHECK: # %bb.0: 1146; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1147; CHECK-NEXT: vfncvt.f.x.w v10, v8 1148; CHECK-NEXT: vmv.v.v v8, v10 1149; CHECK-NEXT: ret 1150 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x half> 1151 ret <vscale x 4 x half> %evec 1152} 1153 1154define <vscale x 4 x half> @vuitofp_nxv4i32_nxv4f16(<vscale x 4 x i32> %va) { 1155; CHECK-LABEL: vuitofp_nxv4i32_nxv4f16: 1156; CHECK: # %bb.0: 1157; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 1158; CHECK-NEXT: vfncvt.f.xu.w v10, v8 1159; CHECK-NEXT: vmv.v.v v8, v10 1160; CHECK-NEXT: ret 1161 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x half> 1162 ret <vscale x 4 x half> %evec 1163} 1164 1165define <vscale x 4 x float> @vsitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) { 1166; CHECK-LABEL: vsitofp_nxv4i32_nxv4f32: 1167; CHECK: # %bb.0: 1168; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1169; CHECK-NEXT: vfcvt.f.x.v v8, v8 1170; CHECK-NEXT: ret 1171 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x float> 1172 ret <vscale x 4 x float> %evec 1173} 1174 1175define <vscale x 4 x float> @vuitofp_nxv4i32_nxv4f32(<vscale x 4 x i32> %va) { 1176; CHECK-LABEL: vuitofp_nxv4i32_nxv4f32: 1177; CHECK: # %bb.0: 1178; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1179; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1180; CHECK-NEXT: ret 1181 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x float> 1182 ret <vscale x 4 x float> %evec 1183} 1184 1185define <vscale x 4 x double> @vsitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) { 1186; CHECK-LABEL: vsitofp_nxv4i32_nxv4f64: 1187; CHECK: # %bb.0: 1188; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1189; CHECK-NEXT: vfwcvt.f.x.v v12, v8 1190; CHECK-NEXT: vmv4r.v v8, v12 1191; CHECK-NEXT: ret 1192 %evec = sitofp <vscale x 4 x i32> %va to <vscale x 4 x double> 1193 ret <vscale x 4 x double> %evec 1194} 1195 1196define <vscale x 4 x double> @vuitofp_nxv4i32_nxv4f64(<vscale x 4 x i32> %va) { 1197; CHECK-LABEL: vuitofp_nxv4i32_nxv4f64: 1198; CHECK: # %bb.0: 1199; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1200; CHECK-NEXT: vfwcvt.f.xu.v v12, v8 1201; CHECK-NEXT: vmv4r.v v8, v12 1202; CHECK-NEXT: ret 1203 %evec = uitofp <vscale x 4 x i32> %va to <vscale x 4 x double> 1204 ret <vscale x 4 x double> %evec 1205} 1206 1207define <vscale x 8 x half> @vsitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) { 1208; CHECK-LABEL: vsitofp_nxv8i32_nxv8f16: 1209; CHECK: # %bb.0: 1210; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1211; CHECK-NEXT: vfncvt.f.x.w v12, v8 1212; CHECK-NEXT: vmv.v.v v8, v12 1213; CHECK-NEXT: ret 1214 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x half> 1215 ret <vscale x 8 x half> %evec 1216} 1217 1218define <vscale x 8 x half> @vuitofp_nxv8i32_nxv8f16(<vscale x 8 x i32> %va) { 1219; CHECK-LABEL: vuitofp_nxv8i32_nxv8f16: 1220; CHECK: # %bb.0: 1221; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1222; CHECK-NEXT: vfncvt.f.xu.w v12, v8 1223; CHECK-NEXT: vmv.v.v v8, v12 1224; CHECK-NEXT: ret 1225 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x half> 1226 ret <vscale x 8 x half> %evec 1227} 1228 1229define <vscale x 8 x float> @vsitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) { 1230; CHECK-LABEL: vsitofp_nxv8i32_nxv8f32: 1231; CHECK: # %bb.0: 1232; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1233; CHECK-NEXT: vfcvt.f.x.v v8, v8 1234; CHECK-NEXT: ret 1235 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x float> 1236 ret <vscale x 8 x float> %evec 1237} 1238 1239define <vscale x 8 x float> @vuitofp_nxv8i32_nxv8f32(<vscale x 8 x i32> %va) { 1240; CHECK-LABEL: vuitofp_nxv8i32_nxv8f32: 1241; CHECK: # %bb.0: 1242; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1243; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1244; CHECK-NEXT: ret 1245 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x float> 1246 ret <vscale x 8 x float> %evec 1247} 1248 1249define <vscale x 8 x double> @vsitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) { 1250; CHECK-LABEL: vsitofp_nxv8i32_nxv8f64: 1251; CHECK: # %bb.0: 1252; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1253; CHECK-NEXT: vfwcvt.f.x.v v16, v8 1254; CHECK-NEXT: vmv8r.v v8, v16 1255; CHECK-NEXT: ret 1256 %evec = sitofp <vscale x 8 x i32> %va to <vscale x 8 x double> 1257 ret <vscale x 8 x double> %evec 1258} 1259 1260define <vscale x 8 x double> @vuitofp_nxv8i32_nxv8f64(<vscale x 8 x i32> %va) { 1261; CHECK-LABEL: vuitofp_nxv8i32_nxv8f64: 1262; CHECK: # %bb.0: 1263; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1264; CHECK-NEXT: vfwcvt.f.xu.v v16, v8 1265; CHECK-NEXT: vmv8r.v v8, v16 1266; CHECK-NEXT: ret 1267 %evec = uitofp <vscale x 8 x i32> %va to <vscale x 8 x double> 1268 ret <vscale x 8 x double> %evec 1269} 1270 1271define <vscale x 16 x half> @vsitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) { 1272; CHECK-LABEL: vsitofp_nxv16i32_nxv16f16: 1273; CHECK: # %bb.0: 1274; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1275; CHECK-NEXT: vfncvt.f.x.w v16, v8 1276; CHECK-NEXT: vmv.v.v v8, v16 1277; CHECK-NEXT: ret 1278 %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x half> 1279 ret <vscale x 16 x half> %evec 1280} 1281 1282define <vscale x 16 x half> @vuitofp_nxv16i32_nxv16f16(<vscale x 16 x i32> %va) { 1283; CHECK-LABEL: vuitofp_nxv16i32_nxv16f16: 1284; CHECK: # %bb.0: 1285; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1286; CHECK-NEXT: vfncvt.f.xu.w v16, v8 1287; CHECK-NEXT: vmv.v.v v8, v16 1288; CHECK-NEXT: ret 1289 %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x half> 1290 ret <vscale x 16 x half> %evec 1291} 1292 1293define <vscale x 16 x float> @vsitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) { 1294; CHECK-LABEL: vsitofp_nxv16i32_nxv16f32: 1295; CHECK: # %bb.0: 1296; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 1297; CHECK-NEXT: vfcvt.f.x.v v8, v8 1298; CHECK-NEXT: ret 1299 %evec = sitofp <vscale x 16 x i32> %va to <vscale x 16 x float> 1300 ret <vscale x 16 x float> %evec 1301} 1302 1303define <vscale x 16 x float> @vuitofp_nxv16i32_nxv16f32(<vscale x 16 x i32> %va) { 1304; CHECK-LABEL: vuitofp_nxv16i32_nxv16f32: 1305; CHECK: # %bb.0: 1306; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 1307; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1308; CHECK-NEXT: ret 1309 %evec = uitofp <vscale x 16 x i32> %va to <vscale x 16 x float> 1310 ret <vscale x 16 x float> %evec 1311} 1312 1313define <vscale x 1 x half> @vsitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) { 1314; CHECK-LABEL: vsitofp_nxv1i64_nxv1f16: 1315; CHECK: # %bb.0: 1316; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1317; CHECK-NEXT: vfncvt.f.x.w v9, v8 1318; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu 1319; CHECK-NEXT: vfncvt.f.f.w v8, v9 1320; CHECK-NEXT: ret 1321 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x half> 1322 ret <vscale x 1 x half> %evec 1323} 1324 1325define <vscale x 1 x half> @vuitofp_nxv1i64_nxv1f16(<vscale x 1 x i64> %va) { 1326; CHECK-LABEL: vuitofp_nxv1i64_nxv1f16: 1327; CHECK: # %bb.0: 1328; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1329; CHECK-NEXT: vfncvt.f.xu.w v9, v8 1330; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu 1331; CHECK-NEXT: vfncvt.f.f.w v8, v9 1332; CHECK-NEXT: ret 1333 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x half> 1334 ret <vscale x 1 x half> %evec 1335} 1336 1337define <vscale x 1 x float> @vsitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) { 1338; CHECK-LABEL: vsitofp_nxv1i64_nxv1f32: 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: vmv1r.v v8, v9 1343; CHECK-NEXT: ret 1344 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x float> 1345 ret <vscale x 1 x float> %evec 1346} 1347 1348define <vscale x 1 x float> @vuitofp_nxv1i64_nxv1f32(<vscale x 1 x i64> %va) { 1349; CHECK-LABEL: vuitofp_nxv1i64_nxv1f32: 1350; CHECK: # %bb.0: 1351; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1352; CHECK-NEXT: vfncvt.f.xu.w v9, v8 1353; CHECK-NEXT: vmv1r.v v8, v9 1354; CHECK-NEXT: ret 1355 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x float> 1356 ret <vscale x 1 x float> %evec 1357} 1358 1359define <vscale x 1 x double> @vsitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) { 1360; CHECK-LABEL: vsitofp_nxv1i64_nxv1f64: 1361; CHECK: # %bb.0: 1362; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 1363; CHECK-NEXT: vfcvt.f.x.v v8, v8 1364; CHECK-NEXT: ret 1365 %evec = sitofp <vscale x 1 x i64> %va to <vscale x 1 x double> 1366 ret <vscale x 1 x double> %evec 1367} 1368 1369define <vscale x 1 x double> @vuitofp_nxv1i64_nxv1f64(<vscale x 1 x i64> %va) { 1370; CHECK-LABEL: vuitofp_nxv1i64_nxv1f64: 1371; CHECK: # %bb.0: 1372; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 1373; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1374; CHECK-NEXT: ret 1375 %evec = uitofp <vscale x 1 x i64> %va to <vscale x 1 x double> 1376 ret <vscale x 1 x double> %evec 1377} 1378 1379define <vscale x 2 x half> @vsitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) { 1380; CHECK-LABEL: vsitofp_nxv2i64_nxv2f16: 1381; CHECK: # %bb.0: 1382; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1383; CHECK-NEXT: vfncvt.f.x.w v10, v8 1384; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu 1385; CHECK-NEXT: vfncvt.f.f.w v8, v10 1386; CHECK-NEXT: ret 1387 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x half> 1388 ret <vscale x 2 x half> %evec 1389} 1390 1391define <vscale x 2 x half> @vuitofp_nxv2i64_nxv2f16(<vscale x 2 x i64> %va) { 1392; CHECK-LABEL: vuitofp_nxv2i64_nxv2f16: 1393; CHECK: # %bb.0: 1394; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1395; CHECK-NEXT: vfncvt.f.xu.w v10, v8 1396; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu 1397; CHECK-NEXT: vfncvt.f.f.w v8, v10 1398; CHECK-NEXT: ret 1399 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x half> 1400 ret <vscale x 2 x half> %evec 1401} 1402 1403define <vscale x 2 x float> @vsitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) { 1404; CHECK-LABEL: vsitofp_nxv2i64_nxv2f32: 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: vmv.v.v v8, v10 1409; CHECK-NEXT: ret 1410 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x float> 1411 ret <vscale x 2 x float> %evec 1412} 1413 1414define <vscale x 2 x float> @vuitofp_nxv2i64_nxv2f32(<vscale x 2 x i64> %va) { 1415; CHECK-LABEL: vuitofp_nxv2i64_nxv2f32: 1416; CHECK: # %bb.0: 1417; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1418; CHECK-NEXT: vfncvt.f.xu.w v10, v8 1419; CHECK-NEXT: vmv.v.v v8, v10 1420; CHECK-NEXT: ret 1421 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x float> 1422 ret <vscale x 2 x float> %evec 1423} 1424 1425define <vscale x 2 x double> @vsitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) { 1426; CHECK-LABEL: vsitofp_nxv2i64_nxv2f64: 1427; CHECK: # %bb.0: 1428; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 1429; CHECK-NEXT: vfcvt.f.x.v v8, v8 1430; CHECK-NEXT: ret 1431 %evec = sitofp <vscale x 2 x i64> %va to <vscale x 2 x double> 1432 ret <vscale x 2 x double> %evec 1433} 1434 1435define <vscale x 2 x double> @vuitofp_nxv2i64_nxv2f64(<vscale x 2 x i64> %va) { 1436; CHECK-LABEL: vuitofp_nxv2i64_nxv2f64: 1437; CHECK: # %bb.0: 1438; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 1439; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1440; CHECK-NEXT: ret 1441 %evec = uitofp <vscale x 2 x i64> %va to <vscale x 2 x double> 1442 ret <vscale x 2 x double> %evec 1443} 1444 1445define <vscale x 4 x half> @vsitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) { 1446; CHECK-LABEL: vsitofp_nxv4i64_nxv4f16: 1447; CHECK: # %bb.0: 1448; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1449; CHECK-NEXT: vfncvt.f.x.w v12, v8 1450; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu 1451; CHECK-NEXT: vfncvt.f.f.w v8, v12 1452; CHECK-NEXT: ret 1453 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x half> 1454 ret <vscale x 4 x half> %evec 1455} 1456 1457define <vscale x 4 x half> @vuitofp_nxv4i64_nxv4f16(<vscale x 4 x i64> %va) { 1458; CHECK-LABEL: vuitofp_nxv4i64_nxv4f16: 1459; CHECK: # %bb.0: 1460; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1461; CHECK-NEXT: vfncvt.f.xu.w v12, v8 1462; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu 1463; CHECK-NEXT: vfncvt.f.f.w v8, v12 1464; CHECK-NEXT: ret 1465 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x half> 1466 ret <vscale x 4 x half> %evec 1467} 1468 1469define <vscale x 4 x float> @vsitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) { 1470; CHECK-LABEL: vsitofp_nxv4i64_nxv4f32: 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: vmv.v.v v8, v12 1475; CHECK-NEXT: ret 1476 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x float> 1477 ret <vscale x 4 x float> %evec 1478} 1479 1480define <vscale x 4 x float> @vuitofp_nxv4i64_nxv4f32(<vscale x 4 x i64> %va) { 1481; CHECK-LABEL: vuitofp_nxv4i64_nxv4f32: 1482; CHECK: # %bb.0: 1483; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1484; CHECK-NEXT: vfncvt.f.xu.w v12, v8 1485; CHECK-NEXT: vmv.v.v v8, v12 1486; CHECK-NEXT: ret 1487 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x float> 1488 ret <vscale x 4 x float> %evec 1489} 1490 1491define <vscale x 4 x double> @vsitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) { 1492; CHECK-LABEL: vsitofp_nxv4i64_nxv4f64: 1493; CHECK: # %bb.0: 1494; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 1495; CHECK-NEXT: vfcvt.f.x.v v8, v8 1496; CHECK-NEXT: ret 1497 %evec = sitofp <vscale x 4 x i64> %va to <vscale x 4 x double> 1498 ret <vscale x 4 x double> %evec 1499} 1500 1501define <vscale x 4 x double> @vuitofp_nxv4i64_nxv4f64(<vscale x 4 x i64> %va) { 1502; CHECK-LABEL: vuitofp_nxv4i64_nxv4f64: 1503; CHECK: # %bb.0: 1504; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 1505; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1506; CHECK-NEXT: ret 1507 %evec = uitofp <vscale x 4 x i64> %va to <vscale x 4 x double> 1508 ret <vscale x 4 x double> %evec 1509} 1510 1511define <vscale x 8 x half> @vsitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) { 1512; CHECK-LABEL: vsitofp_nxv8i64_nxv8f16: 1513; CHECK: # %bb.0: 1514; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1515; CHECK-NEXT: vfncvt.f.x.w v16, v8 1516; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu 1517; CHECK-NEXT: vfncvt.f.f.w v8, v16 1518; CHECK-NEXT: ret 1519 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x half> 1520 ret <vscale x 8 x half> %evec 1521} 1522 1523define <vscale x 8 x half> @vuitofp_nxv8i64_nxv8f16(<vscale x 8 x i64> %va) { 1524; CHECK-LABEL: vuitofp_nxv8i64_nxv8f16: 1525; CHECK: # %bb.0: 1526; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1527; CHECK-NEXT: vfncvt.f.xu.w v16, v8 1528; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu 1529; CHECK-NEXT: vfncvt.f.f.w v8, v16 1530; CHECK-NEXT: ret 1531 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x half> 1532 ret <vscale x 8 x half> %evec 1533} 1534 1535define <vscale x 8 x float> @vsitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) { 1536; CHECK-LABEL: vsitofp_nxv8i64_nxv8f32: 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: vmv.v.v v8, v16 1541; CHECK-NEXT: ret 1542 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x float> 1543 ret <vscale x 8 x float> %evec 1544} 1545 1546define <vscale x 8 x float> @vuitofp_nxv8i64_nxv8f32(<vscale x 8 x i64> %va) { 1547; CHECK-LABEL: vuitofp_nxv8i64_nxv8f32: 1548; CHECK: # %bb.0: 1549; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1550; CHECK-NEXT: vfncvt.f.xu.w v16, v8 1551; CHECK-NEXT: vmv.v.v v8, v16 1552; CHECK-NEXT: ret 1553 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x float> 1554 ret <vscale x 8 x float> %evec 1555} 1556 1557define <vscale x 8 x double> @vsitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) { 1558; CHECK-LABEL: vsitofp_nxv8i64_nxv8f64: 1559; CHECK: # %bb.0: 1560; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1561; CHECK-NEXT: vfcvt.f.x.v v8, v8 1562; CHECK-NEXT: ret 1563 %evec = sitofp <vscale x 8 x i64> %va to <vscale x 8 x double> 1564 ret <vscale x 8 x double> %evec 1565} 1566 1567define <vscale x 8 x double> @vuitofp_nxv8i64_nxv8f64(<vscale x 8 x i64> %va) { 1568; CHECK-LABEL: vuitofp_nxv8i64_nxv8f64: 1569; CHECK: # %bb.0: 1570; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1571; CHECK-NEXT: vfcvt.f.xu.v v8, v8 1572; CHECK-NEXT: ret 1573 %evec = uitofp <vscale x 8 x i64> %va to <vscale x 8 x double> 1574 ret <vscale x 8 x double> %evec 1575} 1576