1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s 3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s 4 5define <vscale x 1 x i16> @vsext_nxv1i8_nxv1i16(<vscale x 1 x i8> %va) { 6; CHECK-LABEL: vsext_nxv1i8_nxv1i16: 7; CHECK: # %bb.0: 8; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 9; CHECK-NEXT: vsext.vf2 v9, v8 10; CHECK-NEXT: vmv1r.v v8, v9 11; CHECK-NEXT: ret 12 %evec = sext <vscale x 1 x i8> %va to <vscale x 1 x i16> 13 ret <vscale x 1 x i16> %evec 14} 15 16define <vscale x 1 x i16> @vzext_nxv1i8_nxv1i16(<vscale x 1 x i8> %va) { 17; CHECK-LABEL: vzext_nxv1i8_nxv1i16: 18; CHECK: # %bb.0: 19; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma 20; CHECK-NEXT: vzext.vf2 v9, v8 21; CHECK-NEXT: vmv1r.v v8, v9 22; CHECK-NEXT: ret 23 %evec = zext <vscale x 1 x i8> %va to <vscale x 1 x i16> 24 ret <vscale x 1 x i16> %evec 25} 26 27define <vscale x 1 x i32> @vsext_nxv1i8_nxv1i32(<vscale x 1 x i8> %va) { 28; CHECK-LABEL: vsext_nxv1i8_nxv1i32: 29; CHECK: # %bb.0: 30; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 31; CHECK-NEXT: vsext.vf4 v9, v8 32; CHECK-NEXT: vmv1r.v v8, v9 33; CHECK-NEXT: ret 34 %evec = sext <vscale x 1 x i8> %va to <vscale x 1 x i32> 35 ret <vscale x 1 x i32> %evec 36} 37 38define <vscale x 1 x i32> @vzext_nxv1i8_nxv1i32(<vscale x 1 x i8> %va) { 39; CHECK-LABEL: vzext_nxv1i8_nxv1i32: 40; CHECK: # %bb.0: 41; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 42; CHECK-NEXT: vzext.vf4 v9, v8 43; CHECK-NEXT: vmv1r.v v8, v9 44; CHECK-NEXT: ret 45 %evec = zext <vscale x 1 x i8> %va to <vscale x 1 x i32> 46 ret <vscale x 1 x i32> %evec 47} 48 49define <vscale x 1 x i64> @vsext_nxv1i8_nxv1i64(<vscale x 1 x i8> %va) { 50; CHECK-LABEL: vsext_nxv1i8_nxv1i64: 51; CHECK: # %bb.0: 52; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 53; CHECK-NEXT: vsext.vf8 v9, v8 54; CHECK-NEXT: vmv.v.v v8, v9 55; CHECK-NEXT: ret 56 %evec = sext <vscale x 1 x i8> %va to <vscale x 1 x i64> 57 ret <vscale x 1 x i64> %evec 58} 59 60define <vscale x 1 x i64> @vzext_nxv1i8_nxv1i64(<vscale x 1 x i8> %va) { 61; CHECK-LABEL: vzext_nxv1i8_nxv1i64: 62; CHECK: # %bb.0: 63; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 64; CHECK-NEXT: vzext.vf8 v9, v8 65; CHECK-NEXT: vmv.v.v v8, v9 66; CHECK-NEXT: ret 67 %evec = zext <vscale x 1 x i8> %va to <vscale x 1 x i64> 68 ret <vscale x 1 x i64> %evec 69} 70 71define <vscale x 2 x i16> @vsext_nxv2i8_nxv2i16(<vscale x 2 x i8> %va) { 72; CHECK-LABEL: vsext_nxv2i8_nxv2i16: 73; CHECK: # %bb.0: 74; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 75; CHECK-NEXT: vsext.vf2 v9, v8 76; CHECK-NEXT: vmv1r.v v8, v9 77; CHECK-NEXT: ret 78 %evec = sext <vscale x 2 x i8> %va to <vscale x 2 x i16> 79 ret <vscale x 2 x i16> %evec 80} 81 82define <vscale x 2 x i16> @vzext_nxv2i8_nxv2i16(<vscale x 2 x i8> %va) { 83; CHECK-LABEL: vzext_nxv2i8_nxv2i16: 84; CHECK: # %bb.0: 85; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma 86; CHECK-NEXT: vzext.vf2 v9, v8 87; CHECK-NEXT: vmv1r.v v8, v9 88; CHECK-NEXT: ret 89 %evec = zext <vscale x 2 x i8> %va to <vscale x 2 x i16> 90 ret <vscale x 2 x i16> %evec 91} 92 93define <vscale x 2 x i32> @vsext_nxv2i8_nxv2i32(<vscale x 2 x i8> %va) { 94; CHECK-LABEL: vsext_nxv2i8_nxv2i32: 95; CHECK: # %bb.0: 96; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 97; CHECK-NEXT: vsext.vf4 v9, v8 98; CHECK-NEXT: vmv.v.v v8, v9 99; CHECK-NEXT: ret 100 %evec = sext <vscale x 2 x i8> %va to <vscale x 2 x i32> 101 ret <vscale x 2 x i32> %evec 102} 103 104define <vscale x 2 x i32> @vzext_nxv2i8_nxv2i32(<vscale x 2 x i8> %va) { 105; CHECK-LABEL: vzext_nxv2i8_nxv2i32: 106; CHECK: # %bb.0: 107; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 108; CHECK-NEXT: vzext.vf4 v9, v8 109; CHECK-NEXT: vmv.v.v v8, v9 110; CHECK-NEXT: ret 111 %evec = zext <vscale x 2 x i8> %va to <vscale x 2 x i32> 112 ret <vscale x 2 x i32> %evec 113} 114 115define <vscale x 2 x i64> @vsext_nxv2i8_nxv2i64(<vscale x 2 x i8> %va) { 116; CHECK-LABEL: vsext_nxv2i8_nxv2i64: 117; CHECK: # %bb.0: 118; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 119; CHECK-NEXT: vsext.vf8 v10, v8 120; CHECK-NEXT: vmv.v.v v8, v10 121; CHECK-NEXT: ret 122 %evec = sext <vscale x 2 x i8> %va to <vscale x 2 x i64> 123 ret <vscale x 2 x i64> %evec 124} 125 126define <vscale x 2 x i64> @vzext_nxv2i8_nxv2i64(<vscale x 2 x i8> %va) { 127; CHECK-LABEL: vzext_nxv2i8_nxv2i64: 128; CHECK: # %bb.0: 129; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 130; CHECK-NEXT: vzext.vf8 v10, v8 131; CHECK-NEXT: vmv.v.v v8, v10 132; CHECK-NEXT: ret 133 %evec = zext <vscale x 2 x i8> %va to <vscale x 2 x i64> 134 ret <vscale x 2 x i64> %evec 135} 136 137define <vscale x 4 x i16> @vsext_nxv4i8_nxv4i16(<vscale x 4 x i8> %va) { 138; CHECK-LABEL: vsext_nxv4i8_nxv4i16: 139; CHECK: # %bb.0: 140; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 141; CHECK-NEXT: vsext.vf2 v9, v8 142; CHECK-NEXT: vmv.v.v v8, v9 143; CHECK-NEXT: ret 144 %evec = sext <vscale x 4 x i8> %va to <vscale x 4 x i16> 145 ret <vscale x 4 x i16> %evec 146} 147 148define <vscale x 4 x i16> @vzext_nxv4i8_nxv4i16(<vscale x 4 x i8> %va) { 149; CHECK-LABEL: vzext_nxv4i8_nxv4i16: 150; CHECK: # %bb.0: 151; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma 152; CHECK-NEXT: vzext.vf2 v9, v8 153; CHECK-NEXT: vmv.v.v v8, v9 154; CHECK-NEXT: ret 155 %evec = zext <vscale x 4 x i8> %va to <vscale x 4 x i16> 156 ret <vscale x 4 x i16> %evec 157} 158 159define <vscale x 4 x i32> @vsext_nxv4i8_nxv4i32(<vscale x 4 x i8> %va) { 160; CHECK-LABEL: vsext_nxv4i8_nxv4i32: 161; CHECK: # %bb.0: 162; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 163; CHECK-NEXT: vsext.vf4 v10, v8 164; CHECK-NEXT: vmv.v.v v8, v10 165; CHECK-NEXT: ret 166 %evec = sext <vscale x 4 x i8> %va to <vscale x 4 x i32> 167 ret <vscale x 4 x i32> %evec 168} 169 170define <vscale x 4 x i32> @vzext_nxv4i8_nxv4i32(<vscale x 4 x i8> %va) { 171; CHECK-LABEL: vzext_nxv4i8_nxv4i32: 172; CHECK: # %bb.0: 173; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 174; CHECK-NEXT: vzext.vf4 v10, v8 175; CHECK-NEXT: vmv.v.v v8, v10 176; CHECK-NEXT: ret 177 %evec = zext <vscale x 4 x i8> %va to <vscale x 4 x i32> 178 ret <vscale x 4 x i32> %evec 179} 180 181define <vscale x 4 x i64> @vsext_nxv4i8_nxv4i64(<vscale x 4 x i8> %va) { 182; CHECK-LABEL: vsext_nxv4i8_nxv4i64: 183; CHECK: # %bb.0: 184; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 185; CHECK-NEXT: vsext.vf8 v12, v8 186; CHECK-NEXT: vmv.v.v v8, v12 187; CHECK-NEXT: ret 188 %evec = sext <vscale x 4 x i8> %va to <vscale x 4 x i64> 189 ret <vscale x 4 x i64> %evec 190} 191 192define <vscale x 4 x i64> @vzext_nxv4i8_nxv4i64(<vscale x 4 x i8> %va) { 193; CHECK-LABEL: vzext_nxv4i8_nxv4i64: 194; CHECK: # %bb.0: 195; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 196; CHECK-NEXT: vzext.vf8 v12, v8 197; CHECK-NEXT: vmv.v.v v8, v12 198; CHECK-NEXT: ret 199 %evec = zext <vscale x 4 x i8> %va to <vscale x 4 x i64> 200 ret <vscale x 4 x i64> %evec 201} 202 203define <vscale x 8 x i16> @vsext_nxv8i8_nxv8i16(<vscale x 8 x i8> %va) { 204; CHECK-LABEL: vsext_nxv8i8_nxv8i16: 205; CHECK: # %bb.0: 206; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 207; CHECK-NEXT: vsext.vf2 v10, v8 208; CHECK-NEXT: vmv.v.v v8, v10 209; CHECK-NEXT: ret 210 %evec = sext <vscale x 8 x i8> %va to <vscale x 8 x i16> 211 ret <vscale x 8 x i16> %evec 212} 213 214define <vscale x 8 x i16> @vzext_nxv8i8_nxv8i16(<vscale x 8 x i8> %va) { 215; CHECK-LABEL: vzext_nxv8i8_nxv8i16: 216; CHECK: # %bb.0: 217; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma 218; CHECK-NEXT: vzext.vf2 v10, v8 219; CHECK-NEXT: vmv.v.v v8, v10 220; CHECK-NEXT: ret 221 %evec = zext <vscale x 8 x i8> %va to <vscale x 8 x i16> 222 ret <vscale x 8 x i16> %evec 223} 224 225define <vscale x 8 x i32> @vsext_nxv8i8_nxv8i32(<vscale x 8 x i8> %va) { 226; CHECK-LABEL: vsext_nxv8i8_nxv8i32: 227; CHECK: # %bb.0: 228; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 229; CHECK-NEXT: vsext.vf4 v12, v8 230; CHECK-NEXT: vmv.v.v v8, v12 231; CHECK-NEXT: ret 232 %evec = sext <vscale x 8 x i8> %va to <vscale x 8 x i32> 233 ret <vscale x 8 x i32> %evec 234} 235 236define <vscale x 8 x i32> @vzext_nxv8i8_nxv8i32(<vscale x 8 x i8> %va) { 237; CHECK-LABEL: vzext_nxv8i8_nxv8i32: 238; CHECK: # %bb.0: 239; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 240; CHECK-NEXT: vzext.vf4 v12, v8 241; CHECK-NEXT: vmv.v.v v8, v12 242; CHECK-NEXT: ret 243 %evec = zext <vscale x 8 x i8> %va to <vscale x 8 x i32> 244 ret <vscale x 8 x i32> %evec 245} 246 247define <vscale x 8 x i64> @vsext_nxv8i8_nxv8i64(<vscale x 8 x i8> %va) { 248; CHECK-LABEL: vsext_nxv8i8_nxv8i64: 249; CHECK: # %bb.0: 250; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 251; CHECK-NEXT: vsext.vf8 v16, v8 252; CHECK-NEXT: vmv.v.v v8, v16 253; CHECK-NEXT: ret 254 %evec = sext <vscale x 8 x i8> %va to <vscale x 8 x i64> 255 ret <vscale x 8 x i64> %evec 256} 257 258define <vscale x 8 x i64> @vzext_nxv8i8_nxv8i64(<vscale x 8 x i8> %va) { 259; CHECK-LABEL: vzext_nxv8i8_nxv8i64: 260; CHECK: # %bb.0: 261; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 262; CHECK-NEXT: vzext.vf8 v16, v8 263; CHECK-NEXT: vmv.v.v v8, v16 264; CHECK-NEXT: ret 265 %evec = zext <vscale x 8 x i8> %va to <vscale x 8 x i64> 266 ret <vscale x 8 x i64> %evec 267} 268 269define <vscale x 16 x i16> @vsext_nxv16i8_nxv16i16(<vscale x 16 x i8> %va) { 270; CHECK-LABEL: vsext_nxv16i8_nxv16i16: 271; CHECK: # %bb.0: 272; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 273; CHECK-NEXT: vsext.vf2 v12, v8 274; CHECK-NEXT: vmv.v.v v8, v12 275; CHECK-NEXT: ret 276 %evec = sext <vscale x 16 x i8> %va to <vscale x 16 x i16> 277 ret <vscale x 16 x i16> %evec 278} 279 280define <vscale x 16 x i16> @vzext_nxv16i8_nxv16i16(<vscale x 16 x i8> %va) { 281; CHECK-LABEL: vzext_nxv16i8_nxv16i16: 282; CHECK: # %bb.0: 283; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma 284; CHECK-NEXT: vzext.vf2 v12, v8 285; CHECK-NEXT: vmv.v.v v8, v12 286; CHECK-NEXT: ret 287 %evec = zext <vscale x 16 x i8> %va to <vscale x 16 x i16> 288 ret <vscale x 16 x i16> %evec 289} 290 291define <vscale x 16 x i32> @vsext_nxv16i8_nxv16i32(<vscale x 16 x i8> %va) { 292; CHECK-LABEL: vsext_nxv16i8_nxv16i32: 293; CHECK: # %bb.0: 294; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 295; CHECK-NEXT: vsext.vf4 v16, v8 296; CHECK-NEXT: vmv.v.v v8, v16 297; CHECK-NEXT: ret 298 %evec = sext <vscale x 16 x i8> %va to <vscale x 16 x i32> 299 ret <vscale x 16 x i32> %evec 300} 301 302define <vscale x 16 x i32> @vzext_nxv16i8_nxv16i32(<vscale x 16 x i8> %va) { 303; CHECK-LABEL: vzext_nxv16i8_nxv16i32: 304; CHECK: # %bb.0: 305; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 306; CHECK-NEXT: vzext.vf4 v16, v8 307; CHECK-NEXT: vmv.v.v v8, v16 308; CHECK-NEXT: ret 309 %evec = zext <vscale x 16 x i8> %va to <vscale x 16 x i32> 310 ret <vscale x 16 x i32> %evec 311} 312 313define <vscale x 32 x i16> @vsext_nxv32i8_nxv32i16(<vscale x 32 x i8> %va) { 314; CHECK-LABEL: vsext_nxv32i8_nxv32i16: 315; CHECK: # %bb.0: 316; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 317; CHECK-NEXT: vsext.vf2 v16, v8 318; CHECK-NEXT: vmv.v.v v8, v16 319; CHECK-NEXT: ret 320 %evec = sext <vscale x 32 x i8> %va to <vscale x 32 x i16> 321 ret <vscale x 32 x i16> %evec 322} 323 324define <vscale x 32 x i16> @vzext_nxv32i8_nxv32i16(<vscale x 32 x i8> %va) { 325; CHECK-LABEL: vzext_nxv32i8_nxv32i16: 326; CHECK: # %bb.0: 327; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma 328; CHECK-NEXT: vzext.vf2 v16, v8 329; CHECK-NEXT: vmv.v.v v8, v16 330; CHECK-NEXT: ret 331 %evec = zext <vscale x 32 x i8> %va to <vscale x 32 x i16> 332 ret <vscale x 32 x i16> %evec 333} 334 335define <vscale x 1 x i32> @vsext_nxv1i16_nxv1i32(<vscale x 1 x i16> %va) { 336; CHECK-LABEL: vsext_nxv1i16_nxv1i32: 337; CHECK: # %bb.0: 338; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 339; CHECK-NEXT: vsext.vf2 v9, v8 340; CHECK-NEXT: vmv1r.v v8, v9 341; CHECK-NEXT: ret 342 %evec = sext <vscale x 1 x i16> %va to <vscale x 1 x i32> 343 ret <vscale x 1 x i32> %evec 344} 345 346define <vscale x 1 x i32> @vzext_nxv1i16_nxv1i32(<vscale x 1 x i16> %va) { 347; CHECK-LABEL: vzext_nxv1i16_nxv1i32: 348; CHECK: # %bb.0: 349; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma 350; CHECK-NEXT: vzext.vf2 v9, v8 351; CHECK-NEXT: vmv1r.v v8, v9 352; CHECK-NEXT: ret 353 %evec = zext <vscale x 1 x i16> %va to <vscale x 1 x i32> 354 ret <vscale x 1 x i32> %evec 355} 356 357define <vscale x 1 x i64> @vsext_nxv1i16_nxv1i64(<vscale x 1 x i16> %va) { 358; CHECK-LABEL: vsext_nxv1i16_nxv1i64: 359; CHECK: # %bb.0: 360; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 361; CHECK-NEXT: vsext.vf4 v9, v8 362; CHECK-NEXT: vmv.v.v v8, v9 363; CHECK-NEXT: ret 364 %evec = sext <vscale x 1 x i16> %va to <vscale x 1 x i64> 365 ret <vscale x 1 x i64> %evec 366} 367 368define <vscale x 1 x i64> @vzext_nxv1i16_nxv1i64(<vscale x 1 x i16> %va) { 369; CHECK-LABEL: vzext_nxv1i16_nxv1i64: 370; CHECK: # %bb.0: 371; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 372; CHECK-NEXT: vzext.vf4 v9, v8 373; CHECK-NEXT: vmv.v.v v8, v9 374; CHECK-NEXT: ret 375 %evec = zext <vscale x 1 x i16> %va to <vscale x 1 x i64> 376 ret <vscale x 1 x i64> %evec 377} 378 379define <vscale x 2 x i32> @vsext_nxv2i16_nxv2i32(<vscale x 2 x i16> %va) { 380; CHECK-LABEL: vsext_nxv2i16_nxv2i32: 381; CHECK: # %bb.0: 382; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 383; CHECK-NEXT: vsext.vf2 v9, v8 384; CHECK-NEXT: vmv.v.v v8, v9 385; CHECK-NEXT: ret 386 %evec = sext <vscale x 2 x i16> %va to <vscale x 2 x i32> 387 ret <vscale x 2 x i32> %evec 388} 389 390define <vscale x 2 x i32> @vzext_nxv2i16_nxv2i32(<vscale x 2 x i16> %va) { 391; CHECK-LABEL: vzext_nxv2i16_nxv2i32: 392; CHECK: # %bb.0: 393; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma 394; CHECK-NEXT: vzext.vf2 v9, v8 395; CHECK-NEXT: vmv.v.v v8, v9 396; CHECK-NEXT: ret 397 %evec = zext <vscale x 2 x i16> %va to <vscale x 2 x i32> 398 ret <vscale x 2 x i32> %evec 399} 400 401define <vscale x 2 x i64> @vsext_nxv2i16_nxv2i64(<vscale x 2 x i16> %va) { 402; CHECK-LABEL: vsext_nxv2i16_nxv2i64: 403; CHECK: # %bb.0: 404; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 405; CHECK-NEXT: vsext.vf4 v10, v8 406; CHECK-NEXT: vmv.v.v v8, v10 407; CHECK-NEXT: ret 408 %evec = sext <vscale x 2 x i16> %va to <vscale x 2 x i64> 409 ret <vscale x 2 x i64> %evec 410} 411 412define <vscale x 2 x i64> @vzext_nxv2i16_nxv2i64(<vscale x 2 x i16> %va) { 413; CHECK-LABEL: vzext_nxv2i16_nxv2i64: 414; CHECK: # %bb.0: 415; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 416; CHECK-NEXT: vzext.vf4 v10, v8 417; CHECK-NEXT: vmv.v.v v8, v10 418; CHECK-NEXT: ret 419 %evec = zext <vscale x 2 x i16> %va to <vscale x 2 x i64> 420 ret <vscale x 2 x i64> %evec 421} 422 423define <vscale x 4 x i32> @vsext_nxv4i16_nxv4i32(<vscale x 4 x i16> %va) { 424; CHECK-LABEL: vsext_nxv4i16_nxv4i32: 425; CHECK: # %bb.0: 426; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 427; CHECK-NEXT: vsext.vf2 v10, v8 428; CHECK-NEXT: vmv.v.v v8, v10 429; CHECK-NEXT: ret 430 %evec = sext <vscale x 4 x i16> %va to <vscale x 4 x i32> 431 ret <vscale x 4 x i32> %evec 432} 433 434define <vscale x 4 x i32> @vzext_nxv4i16_nxv4i32(<vscale x 4 x i16> %va) { 435; CHECK-LABEL: vzext_nxv4i16_nxv4i32: 436; CHECK: # %bb.0: 437; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma 438; CHECK-NEXT: vzext.vf2 v10, v8 439; CHECK-NEXT: vmv.v.v v8, v10 440; CHECK-NEXT: ret 441 %evec = zext <vscale x 4 x i16> %va to <vscale x 4 x i32> 442 ret <vscale x 4 x i32> %evec 443} 444 445define <vscale x 4 x i64> @vsext_nxv4i16_nxv4i64(<vscale x 4 x i16> %va) { 446; CHECK-LABEL: vsext_nxv4i16_nxv4i64: 447; CHECK: # %bb.0: 448; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 449; CHECK-NEXT: vsext.vf4 v12, v8 450; CHECK-NEXT: vmv.v.v v8, v12 451; CHECK-NEXT: ret 452 %evec = sext <vscale x 4 x i16> %va to <vscale x 4 x i64> 453 ret <vscale x 4 x i64> %evec 454} 455 456define <vscale x 4 x i64> @vzext_nxv4i16_nxv4i64(<vscale x 4 x i16> %va) { 457; CHECK-LABEL: vzext_nxv4i16_nxv4i64: 458; CHECK: # %bb.0: 459; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 460; CHECK-NEXT: vzext.vf4 v12, v8 461; CHECK-NEXT: vmv.v.v v8, v12 462; CHECK-NEXT: ret 463 %evec = zext <vscale x 4 x i16> %va to <vscale x 4 x i64> 464 ret <vscale x 4 x i64> %evec 465} 466 467define <vscale x 8 x i32> @vsext_nxv8i16_nxv8i32(<vscale x 8 x i16> %va) { 468; CHECK-LABEL: vsext_nxv8i16_nxv8i32: 469; CHECK: # %bb.0: 470; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 471; CHECK-NEXT: vsext.vf2 v12, v8 472; CHECK-NEXT: vmv.v.v v8, v12 473; CHECK-NEXT: ret 474 %evec = sext <vscale x 8 x i16> %va to <vscale x 8 x i32> 475 ret <vscale x 8 x i32> %evec 476} 477 478define <vscale x 8 x i32> @vzext_nxv8i16_nxv8i32(<vscale x 8 x i16> %va) { 479; CHECK-LABEL: vzext_nxv8i16_nxv8i32: 480; CHECK: # %bb.0: 481; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma 482; CHECK-NEXT: vzext.vf2 v12, v8 483; CHECK-NEXT: vmv.v.v v8, v12 484; CHECK-NEXT: ret 485 %evec = zext <vscale x 8 x i16> %va to <vscale x 8 x i32> 486 ret <vscale x 8 x i32> %evec 487} 488 489define <vscale x 8 x i64> @vsext_nxv8i16_nxv8i64(<vscale x 8 x i16> %va) { 490; CHECK-LABEL: vsext_nxv8i16_nxv8i64: 491; CHECK: # %bb.0: 492; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 493; CHECK-NEXT: vsext.vf4 v16, v8 494; CHECK-NEXT: vmv.v.v v8, v16 495; CHECK-NEXT: ret 496 %evec = sext <vscale x 8 x i16> %va to <vscale x 8 x i64> 497 ret <vscale x 8 x i64> %evec 498} 499 500define <vscale x 8 x i64> @vzext_nxv8i16_nxv8i64(<vscale x 8 x i16> %va) { 501; CHECK-LABEL: vzext_nxv8i16_nxv8i64: 502; CHECK: # %bb.0: 503; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 504; CHECK-NEXT: vzext.vf4 v16, v8 505; CHECK-NEXT: vmv.v.v v8, v16 506; CHECK-NEXT: ret 507 %evec = zext <vscale x 8 x i16> %va to <vscale x 8 x i64> 508 ret <vscale x 8 x i64> %evec 509} 510 511define <vscale x 16 x i32> @vsext_nxv16i16_nxv16i32(<vscale x 16 x i16> %va) { 512; CHECK-LABEL: vsext_nxv16i16_nxv16i32: 513; CHECK: # %bb.0: 514; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 515; CHECK-NEXT: vsext.vf2 v16, v8 516; CHECK-NEXT: vmv.v.v v8, v16 517; CHECK-NEXT: ret 518 %evec = sext <vscale x 16 x i16> %va to <vscale x 16 x i32> 519 ret <vscale x 16 x i32> %evec 520} 521 522define <vscale x 16 x i32> @vzext_nxv16i16_nxv16i32(<vscale x 16 x i16> %va) { 523; CHECK-LABEL: vzext_nxv16i16_nxv16i32: 524; CHECK: # %bb.0: 525; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma 526; CHECK-NEXT: vzext.vf2 v16, v8 527; CHECK-NEXT: vmv.v.v v8, v16 528; CHECK-NEXT: ret 529 %evec = zext <vscale x 16 x i16> %va to <vscale x 16 x i32> 530 ret <vscale x 16 x i32> %evec 531} 532 533define <vscale x 1 x i64> @vsext_nxv1i32_nxv1i64(<vscale x 1 x i32> %va) { 534; CHECK-LABEL: vsext_nxv1i32_nxv1i64: 535; CHECK: # %bb.0: 536; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 537; CHECK-NEXT: vsext.vf2 v9, v8 538; CHECK-NEXT: vmv.v.v v8, v9 539; CHECK-NEXT: ret 540 %evec = sext <vscale x 1 x i32> %va to <vscale x 1 x i64> 541 ret <vscale x 1 x i64> %evec 542} 543 544define <vscale x 1 x i64> @vzext_nxv1i32_nxv1i64(<vscale x 1 x i32> %va) { 545; CHECK-LABEL: vzext_nxv1i32_nxv1i64: 546; CHECK: # %bb.0: 547; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma 548; CHECK-NEXT: vzext.vf2 v9, v8 549; CHECK-NEXT: vmv.v.v v8, v9 550; CHECK-NEXT: ret 551 %evec = zext <vscale x 1 x i32> %va to <vscale x 1 x i64> 552 ret <vscale x 1 x i64> %evec 553} 554 555define <vscale x 2 x i64> @vsext_nxv2i32_nxv2i64(<vscale x 2 x i32> %va) { 556; CHECK-LABEL: vsext_nxv2i32_nxv2i64: 557; CHECK: # %bb.0: 558; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 559; CHECK-NEXT: vsext.vf2 v10, v8 560; CHECK-NEXT: vmv.v.v v8, v10 561; CHECK-NEXT: ret 562 %evec = sext <vscale x 2 x i32> %va to <vscale x 2 x i64> 563 ret <vscale x 2 x i64> %evec 564} 565 566define <vscale x 2 x i64> @vzext_nxv2i32_nxv2i64(<vscale x 2 x i32> %va) { 567; CHECK-LABEL: vzext_nxv2i32_nxv2i64: 568; CHECK: # %bb.0: 569; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma 570; CHECK-NEXT: vzext.vf2 v10, v8 571; CHECK-NEXT: vmv.v.v v8, v10 572; CHECK-NEXT: ret 573 %evec = zext <vscale x 2 x i32> %va to <vscale x 2 x i64> 574 ret <vscale x 2 x i64> %evec 575} 576 577define <vscale x 4 x i64> @vsext_nxv4i32_nxv4i64(<vscale x 4 x i32> %va) { 578; CHECK-LABEL: vsext_nxv4i32_nxv4i64: 579; CHECK: # %bb.0: 580; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 581; CHECK-NEXT: vsext.vf2 v12, v8 582; CHECK-NEXT: vmv.v.v v8, v12 583; CHECK-NEXT: ret 584 %evec = sext <vscale x 4 x i32> %va to <vscale x 4 x i64> 585 ret <vscale x 4 x i64> %evec 586} 587 588define <vscale x 4 x i64> @vzext_nxv4i32_nxv4i64(<vscale x 4 x i32> %va) { 589; CHECK-LABEL: vzext_nxv4i32_nxv4i64: 590; CHECK: # %bb.0: 591; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma 592; CHECK-NEXT: vzext.vf2 v12, v8 593; CHECK-NEXT: vmv.v.v v8, v12 594; CHECK-NEXT: ret 595 %evec = zext <vscale x 4 x i32> %va to <vscale x 4 x i64> 596 ret <vscale x 4 x i64> %evec 597} 598 599define <vscale x 8 x i64> @vsext_nxv8i32_nxv8i64(<vscale x 8 x i32> %va) { 600; CHECK-LABEL: vsext_nxv8i32_nxv8i64: 601; CHECK: # %bb.0: 602; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 603; CHECK-NEXT: vsext.vf2 v16, v8 604; CHECK-NEXT: vmv.v.v v8, v16 605; CHECK-NEXT: ret 606 %evec = sext <vscale x 8 x i32> %va to <vscale x 8 x i64> 607 ret <vscale x 8 x i64> %evec 608} 609 610define <vscale x 8 x i64> @vzext_nxv8i32_nxv8i64(<vscale x 8 x i32> %va) { 611; CHECK-LABEL: vzext_nxv8i32_nxv8i64: 612; CHECK: # %bb.0: 613; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma 614; CHECK-NEXT: vzext.vf2 v16, v8 615; CHECK-NEXT: vmv.v.v v8, v16 616; CHECK-NEXT: ret 617 %evec = zext <vscale x 8 x i32> %va to <vscale x 8 x i64> 618 ret <vscale x 8 x i64> %evec 619} 620