1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple riscv64 -mattr=+m,+d,+experimental-zfh,+experimental-v -verify-machineinstrs < %s | FileCheck %s 3 4define <vscale x 8 x i32> @insert_nxv8i32_nxv4i32_0(<vscale x 8 x i32> %vec, <vscale x 4 x i32> %subvec) { 5; CHECK-LABEL: insert_nxv8i32_nxv4i32_0: 6; CHECK: # %bb.0: 7; CHECK-NEXT: vmv2r.v v8, v12 8; CHECK-NEXT: ret 9 %v = call <vscale x 8 x i32> @llvm.experimental.vector.insert.nxv4i32.nxv8i32(<vscale x 8 x i32> %vec, <vscale x 4 x i32> %subvec, i64 0) 10 ret <vscale x 8 x i32> %v 11} 12 13define <vscale x 8 x i32> @insert_nxv8i32_nxv4i32_4(<vscale x 8 x i32> %vec, <vscale x 4 x i32> %subvec) { 14; CHECK-LABEL: insert_nxv8i32_nxv4i32_4: 15; CHECK: # %bb.0: 16; CHECK-NEXT: vmv2r.v v10, v12 17; CHECK-NEXT: ret 18 %v = call <vscale x 8 x i32> @llvm.experimental.vector.insert.nxv4i32.nxv8i32(<vscale x 8 x i32> %vec, <vscale x 4 x i32> %subvec, i64 4) 19 ret <vscale x 8 x i32> %v 20} 21 22define <vscale x 8 x i32> @insert_nxv8i32_nxv2i32_0(<vscale x 8 x i32> %vec, <vscale x 2 x i32> %subvec) { 23; CHECK-LABEL: insert_nxv8i32_nxv2i32_0: 24; CHECK: # %bb.0: 25; CHECK-NEXT: vmv1r.v v8, v12 26; CHECK-NEXT: ret 27 %v = call <vscale x 8 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv8i32(<vscale x 8 x i32> %vec, <vscale x 2 x i32> %subvec, i64 0) 28 ret <vscale x 8 x i32> %v 29} 30 31define <vscale x 8 x i32> @insert_nxv8i32_nxv2i32_2(<vscale x 8 x i32> %vec, <vscale x 2 x i32> %subvec) { 32; CHECK-LABEL: insert_nxv8i32_nxv2i32_2: 33; CHECK: # %bb.0: 34; CHECK-NEXT: vmv1r.v v9, v12 35; CHECK-NEXT: ret 36 %v = call <vscale x 8 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv8i32(<vscale x 8 x i32> %vec, <vscale x 2 x i32> %subvec, i64 2) 37 ret <vscale x 8 x i32> %v 38} 39 40define <vscale x 8 x i32> @insert_nxv8i32_nxv2i32_4(<vscale x 8 x i32> %vec, <vscale x 2 x i32> %subvec) { 41; CHECK-LABEL: insert_nxv8i32_nxv2i32_4: 42; CHECK: # %bb.0: 43; CHECK-NEXT: vmv1r.v v10, v12 44; CHECK-NEXT: ret 45 %v = call <vscale x 8 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv8i32(<vscale x 8 x i32> %vec, <vscale x 2 x i32> %subvec, i64 4) 46 ret <vscale x 8 x i32> %v 47} 48 49define <vscale x 8 x i32> @insert_nxv8i32_nxv2i32_6(<vscale x 8 x i32> %vec, <vscale x 2 x i32> %subvec) { 50; CHECK-LABEL: insert_nxv8i32_nxv2i32_6: 51; CHECK: # %bb.0: 52; CHECK-NEXT: vmv1r.v v11, v12 53; CHECK-NEXT: ret 54 %v = call <vscale x 8 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv8i32(<vscale x 8 x i32> %vec, <vscale x 2 x i32> %subvec, i64 6) 55 ret <vscale x 8 x i32> %v 56} 57 58define <vscale x 4 x i8> @insert_nxv1i8_nxv4i8_0(<vscale x 4 x i8> %vec, <vscale x 1 x i8> %subvec) { 59; CHECK-LABEL: insert_nxv1i8_nxv4i8_0: 60; CHECK: # %bb.0: 61; CHECK-NEXT: csrr a0, vlenb 62; CHECK-NEXT: srli a0, a0, 3 63; CHECK-NEXT: vsetvli a0, a0, e8,mf2,tu,mu 64; CHECK-NEXT: vslideup.vi v8, v9, 0 65; CHECK-NEXT: ret 66 %v = call <vscale x 4 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv4i8(<vscale x 4 x i8> %vec, <vscale x 1 x i8> %subvec, i64 0) 67 ret <vscale x 4 x i8> %v 68} 69 70define <vscale x 4 x i8> @insert_nxv1i8_nxv4i8_3(<vscale x 4 x i8> %vec, <vscale x 1 x i8> %subvec) { 71; CHECK-LABEL: insert_nxv1i8_nxv4i8_3: 72; CHECK: # %bb.0: 73; CHECK-NEXT: csrr a0, vlenb 74; CHECK-NEXT: srli a0, a0, 3 75; CHECK-NEXT: slli a1, a0, 1 76; CHECK-NEXT: add a1, a1, a0 77; CHECK-NEXT: add a0, a1, a0 78; CHECK-NEXT: vsetvli a0, a0, e8,mf2,tu,mu 79; CHECK-NEXT: vslideup.vx v8, v9, a1 80; CHECK-NEXT: ret 81 %v = call <vscale x 4 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv4i8(<vscale x 4 x i8> %vec, <vscale x 1 x i8> %subvec, i64 3) 82 ret <vscale x 4 x i8> %v 83} 84 85define <vscale x 16 x i32> @insert_nxv16i32_nxv8i32_0(<vscale x 16 x i32> %vec, <vscale x 8 x i32> %subvec) { 86; CHECK-LABEL: insert_nxv16i32_nxv8i32_0: 87; CHECK: # %bb.0: 88; CHECK-NEXT: vmv4r.v v8, v16 89; CHECK-NEXT: ret 90 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv8i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 8 x i32> %subvec, i64 0) 91 ret <vscale x 16 x i32> %v 92} 93 94define <vscale x 16 x i32> @insert_nxv16i32_nxv8i32_8(<vscale x 16 x i32> %vec, <vscale x 8 x i32> %subvec) { 95; CHECK-LABEL: insert_nxv16i32_nxv8i32_8: 96; CHECK: # %bb.0: 97; CHECK-NEXT: vmv4r.v v12, v16 98; CHECK-NEXT: ret 99 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv8i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 8 x i32> %subvec, i64 8) 100 ret <vscale x 16 x i32> %v 101} 102 103define <vscale x 16 x i32> @insert_nxv16i32_nxv4i32_0(<vscale x 16 x i32> %vec, <vscale x 4 x i32> %subvec) { 104; CHECK-LABEL: insert_nxv16i32_nxv4i32_0: 105; CHECK: # %bb.0: 106; CHECK-NEXT: vmv2r.v v8, v16 107; CHECK-NEXT: ret 108 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv4i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 4 x i32> %subvec, i64 0) 109 ret <vscale x 16 x i32> %v 110} 111 112define <vscale x 16 x i32> @insert_nxv16i32_nxv4i32_4(<vscale x 16 x i32> %vec, <vscale x 4 x i32> %subvec) { 113; CHECK-LABEL: insert_nxv16i32_nxv4i32_4: 114; CHECK: # %bb.0: 115; CHECK-NEXT: vmv2r.v v10, v16 116; CHECK-NEXT: ret 117 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv4i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 4 x i32> %subvec, i64 4) 118 ret <vscale x 16 x i32> %v 119} 120 121define <vscale x 16 x i32> @insert_nxv16i32_nxv4i32_8(<vscale x 16 x i32> %vec, <vscale x 4 x i32> %subvec) { 122; CHECK-LABEL: insert_nxv16i32_nxv4i32_8: 123; CHECK: # %bb.0: 124; CHECK-NEXT: vmv2r.v v12, v16 125; CHECK-NEXT: ret 126 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv4i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 4 x i32> %subvec, i64 8) 127 ret <vscale x 16 x i32> %v 128} 129 130define <vscale x 16 x i32> @insert_nxv16i32_nxv4i32_12(<vscale x 16 x i32> %vec, <vscale x 4 x i32> %subvec) { 131; CHECK-LABEL: insert_nxv16i32_nxv4i32_12: 132; CHECK: # %bb.0: 133; CHECK-NEXT: vmv2r.v v14, v16 134; CHECK-NEXT: ret 135 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv4i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 4 x i32> %subvec, i64 12) 136 ret <vscale x 16 x i32> %v 137} 138 139define <vscale x 16 x i32> @insert_nxv16i32_nxv2i32_0(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec) { 140; CHECK-LABEL: insert_nxv16i32_nxv2i32_0: 141; CHECK: # %bb.0: 142; CHECK-NEXT: vmv1r.v v8, v16 143; CHECK-NEXT: ret 144 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec, i64 0) 145 ret <vscale x 16 x i32> %v 146} 147 148define <vscale x 16 x i32> @insert_nxv16i32_nxv2i32_2(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec) { 149; CHECK-LABEL: insert_nxv16i32_nxv2i32_2: 150; CHECK: # %bb.0: 151; CHECK-NEXT: vmv1r.v v9, v16 152; CHECK-NEXT: ret 153 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec, i64 2) 154 ret <vscale x 16 x i32> %v 155} 156 157define <vscale x 16 x i32> @insert_nxv16i32_nxv2i32_4(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec) { 158; CHECK-LABEL: insert_nxv16i32_nxv2i32_4: 159; CHECK: # %bb.0: 160; CHECK-NEXT: vmv1r.v v10, v16 161; CHECK-NEXT: ret 162 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec, i64 4) 163 ret <vscale x 16 x i32> %v 164} 165 166define <vscale x 16 x i32> @insert_nxv16i32_nxv2i32_6(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec) { 167; CHECK-LABEL: insert_nxv16i32_nxv2i32_6: 168; CHECK: # %bb.0: 169; CHECK-NEXT: vmv1r.v v11, v16 170; CHECK-NEXT: ret 171 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec, i64 6) 172 ret <vscale x 16 x i32> %v 173} 174 175define <vscale x 16 x i32> @insert_nxv16i32_nxv2i32_8(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec) { 176; CHECK-LABEL: insert_nxv16i32_nxv2i32_8: 177; CHECK: # %bb.0: 178; CHECK-NEXT: vmv1r.v v12, v16 179; CHECK-NEXT: ret 180 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec, i64 8) 181 ret <vscale x 16 x i32> %v 182} 183 184define <vscale x 16 x i32> @insert_nxv16i32_nxv2i32_10(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec) { 185; CHECK-LABEL: insert_nxv16i32_nxv2i32_10: 186; CHECK: # %bb.0: 187; CHECK-NEXT: vmv1r.v v13, v16 188; CHECK-NEXT: ret 189 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec, i64 10) 190 ret <vscale x 16 x i32> %v 191} 192 193define <vscale x 16 x i32> @insert_nxv16i32_nxv2i32_12(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec) { 194; CHECK-LABEL: insert_nxv16i32_nxv2i32_12: 195; CHECK: # %bb.0: 196; CHECK-NEXT: vmv1r.v v14, v16 197; CHECK-NEXT: ret 198 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec, i64 12) 199 ret <vscale x 16 x i32> %v 200} 201 202define <vscale x 16 x i32> @insert_nxv16i32_nxv2i32_14(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec) { 203; CHECK-LABEL: insert_nxv16i32_nxv2i32_14: 204; CHECK: # %bb.0: 205; CHECK-NEXT: vmv1r.v v15, v16 206; CHECK-NEXT: ret 207 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 2 x i32> %subvec, i64 14) 208 ret <vscale x 16 x i32> %v 209} 210 211define <vscale x 16 x i32> @insert_nxv16i32_nxv1i32_0(<vscale x 16 x i32> %vec, <vscale x 1 x i32> %subvec) { 212; CHECK-LABEL: insert_nxv16i32_nxv1i32_0: 213; CHECK: # %bb.0: 214; CHECK-NEXT: csrr a0, vlenb 215; CHECK-NEXT: srli a0, a0, 3 216; CHECK-NEXT: vsetvli a0, a0, e32,m1,tu,mu 217; CHECK-NEXT: vslideup.vi v8, v16, 0 218; CHECK-NEXT: ret 219 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv1i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 1 x i32> %subvec, i64 0) 220 ret <vscale x 16 x i32> %v 221} 222 223define <vscale x 16 x i32> @insert_nxv16i32_nxv1i32_1(<vscale x 16 x i32> %vec, <vscale x 1 x i32> %subvec) { 224; CHECK-LABEL: insert_nxv16i32_nxv1i32_1: 225; CHECK: # %bb.0: 226; CHECK-NEXT: csrr a0, vlenb 227; CHECK-NEXT: srli a0, a0, 3 228; CHECK-NEXT: add a1, a0, a0 229; CHECK-NEXT: vsetvli a1, a1, e32,m1,tu,mu 230; CHECK-NEXT: vslideup.vx v8, v16, a0 231; CHECK-NEXT: ret 232 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv1i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 1 x i32> %subvec, i64 1) 233 ret <vscale x 16 x i32> %v 234} 235 236define <vscale x 16 x i32> @insert_nxv16i32_nxv1i32_6(<vscale x 16 x i32> %vec, <vscale x 1 x i32> %subvec) { 237; CHECK-LABEL: insert_nxv16i32_nxv1i32_6: 238; CHECK: # %bb.0: 239; CHECK-NEXT: csrr a0, vlenb 240; CHECK-NEXT: srli a0, a0, 3 241; CHECK-NEXT: vsetvli a0, a0, e32,m1,tu,mu 242; CHECK-NEXT: vslideup.vi v11, v16, 0 243; CHECK-NEXT: ret 244 %v = call <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv1i32.nxv16i32(<vscale x 16 x i32> %vec, <vscale x 1 x i32> %subvec, i64 6) 245 ret <vscale x 16 x i32> %v 246} 247 248define <vscale x 16 x i8> @insert_nxv16i8_nxv1i8_0(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec) { 249; CHECK-LABEL: insert_nxv16i8_nxv1i8_0: 250; CHECK: # %bb.0: 251; CHECK-NEXT: csrr a0, vlenb 252; CHECK-NEXT: srli a0, a0, 3 253; CHECK-NEXT: vsetvli a0, a0, e8,m1,tu,mu 254; CHECK-NEXT: vslideup.vi v8, v10, 0 255; CHECK-NEXT: ret 256 %v = call <vscale x 16 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv16i8(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec, i64 0) 257 ret <vscale x 16 x i8> %v 258} 259 260define <vscale x 16 x i8> @insert_nxv16i8_nxv1i8_1(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec) { 261; CHECK-LABEL: insert_nxv16i8_nxv1i8_1: 262; CHECK: # %bb.0: 263; CHECK-NEXT: csrr a0, vlenb 264; CHECK-NEXT: srli a0, a0, 3 265; CHECK-NEXT: add a1, a0, a0 266; CHECK-NEXT: vsetvli a1, a1, e8,m1,tu,mu 267; CHECK-NEXT: vslideup.vx v8, v10, a0 268; CHECK-NEXT: ret 269 %v = call <vscale x 16 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv16i8(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec, i64 1) 270 ret <vscale x 16 x i8> %v 271} 272 273define <vscale x 16 x i8> @insert_nxv16i8_nxv1i8_2(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec) { 274; CHECK-LABEL: insert_nxv16i8_nxv1i8_2: 275; CHECK: # %bb.0: 276; CHECK-NEXT: csrr a0, vlenb 277; CHECK-NEXT: srli a0, a0, 3 278; CHECK-NEXT: slli a1, a0, 1 279; CHECK-NEXT: add a0, a1, a0 280; CHECK-NEXT: vsetvli a0, a0, e8,m1,tu,mu 281; CHECK-NEXT: vslideup.vx v8, v10, a1 282; CHECK-NEXT: ret 283 %v = call <vscale x 16 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv16i8(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec, i64 2) 284 ret <vscale x 16 x i8> %v 285} 286 287define <vscale x 16 x i8> @insert_nxv16i8_nxv1i8_3(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec) { 288; CHECK-LABEL: insert_nxv16i8_nxv1i8_3: 289; CHECK: # %bb.0: 290; CHECK-NEXT: csrr a0, vlenb 291; CHECK-NEXT: srli a0, a0, 3 292; CHECK-NEXT: slli a1, a0, 1 293; CHECK-NEXT: add a1, a1, a0 294; CHECK-NEXT: add a0, a1, a0 295; CHECK-NEXT: vsetvli a0, a0, e8,m1,tu,mu 296; CHECK-NEXT: vslideup.vx v8, v10, a1 297; CHECK-NEXT: ret 298 %v = call <vscale x 16 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv16i8(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec, i64 3) 299 ret <vscale x 16 x i8> %v 300} 301 302define <vscale x 16 x i8> @insert_nxv16i8_nxv1i8_7(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec) { 303; CHECK-LABEL: insert_nxv16i8_nxv1i8_7: 304; CHECK: # %bb.0: 305; CHECK-NEXT: csrr a0, vlenb 306; CHECK-NEXT: srli a0, a0, 3 307; CHECK-NEXT: slli a1, a0, 3 308; CHECK-NEXT: sub a0, a1, a0 309; CHECK-NEXT: vsetvli a1, a1, e8,m1,tu,mu 310; CHECK-NEXT: vslideup.vx v8, v10, a0 311; CHECK-NEXT: ret 312 %v = call <vscale x 16 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv16i8(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec, i64 7) 313 ret <vscale x 16 x i8> %v 314} 315 316define <vscale x 16 x i8> @insert_nxv16i8_nxv1i8_15(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec) { 317; CHECK-LABEL: insert_nxv16i8_nxv1i8_15: 318; CHECK: # %bb.0: 319; CHECK-NEXT: csrr a0, vlenb 320; CHECK-NEXT: srli a0, a0, 3 321; CHECK-NEXT: slli a1, a0, 3 322; CHECK-NEXT: sub a0, a1, a0 323; CHECK-NEXT: vsetvli a1, a1, e8,m1,tu,mu 324; CHECK-NEXT: vslideup.vx v9, v10, a0 325; CHECK-NEXT: ret 326 %v = call <vscale x 16 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv16i8(<vscale x 16 x i8> %vec, <vscale x 1 x i8> %subvec, i64 15) 327 ret <vscale x 16 x i8> %v 328} 329 330define <vscale x 32 x half> @insert_nxv32f16_nxv2f16_0(<vscale x 32 x half> %vec, <vscale x 2 x half> %subvec) { 331; CHECK-LABEL: insert_nxv32f16_nxv2f16_0: 332; CHECK: # %bb.0: 333; CHECK-NEXT: csrr a0, vlenb 334; CHECK-NEXT: srli a0, a0, 2 335; CHECK-NEXT: vsetvli a0, a0, e16,m1,tu,mu 336; CHECK-NEXT: vslideup.vi v8, v16, 0 337; CHECK-NEXT: ret 338 %v = call <vscale x 32 x half> @llvm.experimental.vector.insert.nxv2f16.nxv32f16(<vscale x 32 x half> %vec, <vscale x 2 x half> %subvec, i64 0) 339 ret <vscale x 32 x half> %v 340} 341 342define <vscale x 32 x half> @insert_nxv32f16_nxv2f16_2(<vscale x 32 x half> %vec, <vscale x 2 x half> %subvec) { 343; CHECK-LABEL: insert_nxv32f16_nxv2f16_2: 344; CHECK: # %bb.0: 345; CHECK-NEXT: csrr a0, vlenb 346; CHECK-NEXT: srli a0, a0, 2 347; CHECK-NEXT: add a1, a0, a0 348; CHECK-NEXT: vsetvli a1, a1, e16,m1,tu,mu 349; CHECK-NEXT: vslideup.vx v8, v16, a0 350; CHECK-NEXT: ret 351 %v = call <vscale x 32 x half> @llvm.experimental.vector.insert.nxv2f16.nxv32f16(<vscale x 32 x half> %vec, <vscale x 2 x half> %subvec, i64 2) 352 ret <vscale x 32 x half> %v 353} 354 355define <vscale x 32 x half> @insert_nxv32f16_nxv2f16_26(<vscale x 32 x half> %vec, <vscale x 2 x half> %subvec) { 356; CHECK-LABEL: insert_nxv32f16_nxv2f16_26: 357; CHECK: # %bb.0: 358; CHECK-NEXT: csrr a0, vlenb 359; CHECK-NEXT: srli a0, a0, 2 360; CHECK-NEXT: add a1, a0, a0 361; CHECK-NEXT: vsetvli a1, a1, e16,m1,tu,mu 362; CHECK-NEXT: vslideup.vx v14, v16, a0 363; CHECK-NEXT: ret 364 %v = call <vscale x 32 x half> @llvm.experimental.vector.insert.nxv2f16.nxv32f16(<vscale x 32 x half> %vec, <vscale x 2 x half> %subvec, i64 26) 365 ret <vscale x 32 x half> %v 366} 367 368define <vscale x 32 x half> @insert_nxv32f16_undef_nxv1f16_0(<vscale x 1 x half> %subvec) { 369; CHECK-LABEL: insert_nxv32f16_undef_nxv1f16_0: 370; CHECK: # %bb.0: 371; CHECK-NEXT: # kill: def $v8 killed $v8 def $v8m8 372; CHECK-NEXT: ret 373 %v = call <vscale x 32 x half> @llvm.experimental.vector.insert.nxv1f16.nxv32f16(<vscale x 32 x half> undef, <vscale x 1 x half> %subvec, i64 0) 374 ret <vscale x 32 x half> %v 375} 376 377define <vscale x 32 x half> @insert_nxv32f16_undef_nxv1f16_26(<vscale x 1 x half> %subvec) { 378; CHECK-LABEL: insert_nxv32f16_undef_nxv1f16_26: 379; CHECK: # %bb.0: 380; CHECK-NEXT: csrr a0, vlenb 381; CHECK-NEXT: srli a0, a0, 3 382; CHECK-NEXT: slli a1, a0, 1 383; CHECK-NEXT: add a0, a1, a0 384; CHECK-NEXT: vsetvli a0, a0, e16,m1,ta,mu 385; CHECK-NEXT: vslideup.vx v22, v8, a1 386; CHECK-NEXT: vmv8r.v v8, v16 387; CHECK-NEXT: ret 388 %v = call <vscale x 32 x half> @llvm.experimental.vector.insert.nxv1f16.nxv32f16(<vscale x 32 x half> undef, <vscale x 1 x half> %subvec, i64 26) 389 ret <vscale x 32 x half> %v 390} 391 392define <vscale x 32 x i1> @insert_nxv32i1_nxv8i1_0(<vscale x 32 x i1> %v, <vscale x 8 x i1> %sv) { 393; CHECK-LABEL: insert_nxv32i1_nxv8i1_0: 394; CHECK: # %bb.0: 395; CHECK-NEXT: csrr a0, vlenb 396; CHECK-NEXT: srli a0, a0, 3 397; CHECK-NEXT: vsetvli a0, a0, e8,mf2,tu,mu 398; CHECK-NEXT: vslideup.vi v0, v8, 0 399; CHECK-NEXT: ret 400 %vec = call <vscale x 32 x i1> @llvm.experimental.vector.insert.nxv8i1.nxv32i1(<vscale x 32 x i1> %v, <vscale x 8 x i1> %sv, i64 0) 401 ret <vscale x 32 x i1> %vec 402} 403 404define <vscale x 32 x i1> @insert_nxv32i1_nxv8i1_8(<vscale x 32 x i1> %v, <vscale x 8 x i1> %sv) { 405; CHECK-LABEL: insert_nxv32i1_nxv8i1_8: 406; CHECK: # %bb.0: 407; CHECK-NEXT: csrr a0, vlenb 408; CHECK-NEXT: srli a0, a0, 3 409; CHECK-NEXT: add a1, a0, a0 410; CHECK-NEXT: vsetvli a1, a1, e8,mf2,tu,mu 411; CHECK-NEXT: vslideup.vx v0, v8, a0 412; CHECK-NEXT: ret 413 %vec = call <vscale x 32 x i1> @llvm.experimental.vector.insert.nxv8i1.nxv32i1(<vscale x 32 x i1> %v, <vscale x 8 x i1> %sv, i64 8) 414 ret <vscale x 32 x i1> %vec 415} 416 417define <vscale x 4 x i1> @insert_nxv4i1_nxv1i1_0(<vscale x 4 x i1> %v, <vscale x 1 x i1> %sv) { 418; CHECK-LABEL: insert_nxv4i1_nxv1i1_0: 419; CHECK: # %bb.0: 420; CHECK-NEXT: vsetvli a0, zero, e8,mf2,ta,mu 421; CHECK-NEXT: vmv.v.i v25, 0 422; CHECK-NEXT: vmerge.vim v25, v25, 1, v0 423; CHECK-NEXT: vsetvli a0, zero, e8,mf8,ta,mu 424; CHECK-NEXT: vmv.v.i v26, 0 425; CHECK-NEXT: vmv1r.v v0, v8 426; CHECK-NEXT: vmerge.vim v26, v26, 1, v0 427; CHECK-NEXT: csrr a0, vlenb 428; CHECK-NEXT: srli a0, a0, 3 429; CHECK-NEXT: vsetvli a0, a0, e8,mf2,tu,mu 430; CHECK-NEXT: vslideup.vi v25, v26, 0 431; CHECK-NEXT: vsetvli a0, zero, e8,mf2,ta,mu 432; CHECK-NEXT: vmsne.vi v0, v25, 0 433; CHECK-NEXT: ret 434 %vec = call <vscale x 4 x i1> @llvm.experimental.vector.insert.nxv1i1.nxv4i1(<vscale x 4 x i1> %v, <vscale x 1 x i1> %sv, i64 0) 435 ret <vscale x 4 x i1> %vec 436} 437 438define <vscale x 4 x i1> @insert_nxv4i1_nxv1i1_2(<vscale x 4 x i1> %v, <vscale x 1 x i1> %sv) { 439; CHECK-LABEL: insert_nxv4i1_nxv1i1_2: 440; CHECK: # %bb.0: 441; CHECK-NEXT: vsetvli a0, zero, e8,mf2,ta,mu 442; CHECK-NEXT: vmv.v.i v25, 0 443; CHECK-NEXT: vmerge.vim v25, v25, 1, v0 444; CHECK-NEXT: csrr a0, vlenb 445; CHECK-NEXT: srli a0, a0, 3 446; CHECK-NEXT: slli a1, a0, 1 447; CHECK-NEXT: add a0, a1, a0 448; CHECK-NEXT: vsetvli a2, zero, e8,mf8,ta,mu 449; CHECK-NEXT: vmv.v.i v26, 0 450; CHECK-NEXT: vmv1r.v v0, v8 451; CHECK-NEXT: vmerge.vim v26, v26, 1, v0 452; CHECK-NEXT: vsetvli a0, a0, e8,mf2,tu,mu 453; CHECK-NEXT: vslideup.vx v25, v26, a1 454; CHECK-NEXT: vsetvli a0, zero, e8,mf2,ta,mu 455; CHECK-NEXT: vmsne.vi v0, v25, 0 456; CHECK-NEXT: ret 457 %vec = call <vscale x 4 x i1> @llvm.experimental.vector.insert.nxv1i1.nxv4i1(<vscale x 4 x i1> %v, <vscale x 1 x i1> %sv, i64 2) 458 ret <vscale x 4 x i1> %vec 459} 460 461declare <vscale x 16 x i64> @llvm.experimental.vector.insert.nxv8i64.nxv16i64(<vscale x 16 x i64>, <vscale x 8 x i64>, i64) 462 463define void @insert_nxv8i64_nxv16i64(<vscale x 8 x i64> %sv0, <vscale x 8 x i64> %sv1, <vscale x 16 x i64>* %out) { 464; CHECK-LABEL: insert_nxv8i64_nxv16i64: 465; CHECK: # %bb.0: 466; CHECK-NEXT: vs8r.v v8, (a0) 467; CHECK-NEXT: csrr a1, vlenb 468; CHECK-NEXT: slli a1, a1, 3 469; CHECK-NEXT: add a0, a0, a1 470; CHECK-NEXT: vs8r.v v16, (a0) 471; CHECK-NEXT: ret 472 %v0 = call <vscale x 16 x i64> @llvm.experimental.vector.insert.nxv8i64.nxv16i64(<vscale x 16 x i64> undef, <vscale x 8 x i64> %sv0, i64 0) 473 %v = call <vscale x 16 x i64> @llvm.experimental.vector.insert.nxv8i64.nxv16i64(<vscale x 16 x i64> %v0, <vscale x 8 x i64> %sv1, i64 8) 474 store <vscale x 16 x i64> %v, <vscale x 16 x i64>* %out 475 ret void 476} 477 478define void @insert_nxv8i64_nxv16i64_lo(<vscale x 8 x i64> %sv0, <vscale x 16 x i64>* %out) { 479; CHECK-LABEL: insert_nxv8i64_nxv16i64_lo: 480; CHECK: # %bb.0: 481; CHECK-NEXT: vs8r.v v8, (a0) 482; CHECK-NEXT: ret 483 %v = call <vscale x 16 x i64> @llvm.experimental.vector.insert.nxv8i64.nxv16i64(<vscale x 16 x i64> undef, <vscale x 8 x i64> %sv0, i64 0) 484 store <vscale x 16 x i64> %v, <vscale x 16 x i64>* %out 485 ret void 486} 487 488define void @insert_nxv8i64_nxv16i64_hi(<vscale x 8 x i64> %sv0, <vscale x 16 x i64>* %out) { 489; CHECK-LABEL: insert_nxv8i64_nxv16i64_hi: 490; CHECK: # %bb.0: 491; CHECK-NEXT: csrr a1, vlenb 492; CHECK-NEXT: slli a1, a1, 3 493; CHECK-NEXT: add a0, a0, a1 494; CHECK-NEXT: vs8r.v v8, (a0) 495; CHECK-NEXT: ret 496 %v = call <vscale x 16 x i64> @llvm.experimental.vector.insert.nxv8i64.nxv16i64(<vscale x 16 x i64> undef, <vscale x 8 x i64> %sv0, i64 8) 497 store <vscale x 16 x i64> %v, <vscale x 16 x i64>* %out 498 ret void 499} 500 501declare <vscale x 4 x i1> @llvm.experimental.vector.insert.nxv1i1.nxv4i1(<vscale x 4 x i1>, <vscale x 1 x i1>, i64) 502declare <vscale x 32 x i1> @llvm.experimental.vector.insert.nxv8i1.nxv32i1(<vscale x 32 x i1>, <vscale x 8 x i1>, i64) 503 504declare <vscale x 16 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv16i8(<vscale x 16 x i8>, <vscale x 1 x i8>, i64) 505 506declare <vscale x 32 x half> @llvm.experimental.vector.insert.nxv1f16.nxv32f16(<vscale x 32 x half>, <vscale x 1 x half>, i64) 507declare <vscale x 32 x half> @llvm.experimental.vector.insert.nxv2f16.nxv32f16(<vscale x 32 x half>, <vscale x 2 x half>, i64) 508 509declare <vscale x 4 x i8> @llvm.experimental.vector.insert.nxv1i8.nxv4i8(<vscale x 4 x i8>, <vscale x 1 x i8>, i64 %idx) 510 511declare <vscale x 8 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv8i32(<vscale x 8 x i32>, <vscale x 2 x i32>, i64 %idx) 512declare <vscale x 8 x i32> @llvm.experimental.vector.insert.nxv4i32.nxv8i32(<vscale x 8 x i32>, <vscale x 4 x i32>, i64 %idx) 513 514declare <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv1i32.nxv16i32(<vscale x 16 x i32>, <vscale x 1 x i32>, i64 %idx) 515declare <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv2i32.nxv16i32(<vscale x 16 x i32>, <vscale x 2 x i32>, i64 %idx) 516declare <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv4i32.nxv16i32(<vscale x 16 x i32>, <vscale x 4 x i32>, i64 %idx) 517declare <vscale x 16 x i32> @llvm.experimental.vector.insert.nxv8i32.nxv16i32(<vscale x 16 x i32>, <vscale x 8 x i32>, i64 %idx) 518