6368 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -mattr=+zve64d,+f,+d,+zvfh,+zvfbfmin \3; RUN: -verify-machineinstrs < %s | FileCheck %s4 5define <vscale x 1 x i8> @test_vlseg2ff_nxv1i8_triscv.vector.tuple_nxv1i8_2t(ptr %base, i64 %vl, ptr %outvl) {6; CHECK-LABEL: test_vlseg2ff_nxv1i8_triscv.vector.tuple_nxv1i8_2t:7; CHECK: # %bb.0: # %entry8; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma9; CHECK-NEXT: vlseg2e8ff.v v7, (a0)10; CHECK-NEXT: csrr a0, vl11; CHECK-NEXT: sd a0, 0(a2)12; CHECK-NEXT: ret13entry:14 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv1i8_2t(target("riscv.vector.tuple", <vscale x 1 x i8>, 2) poison, ptr %base, i64 %vl, i64 3)15 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i64} %0, 016 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_2t(target("riscv.vector.tuple", <vscale x 1 x i8>, 2) %1, i32 1)17 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i64} %0, 118 store i64 %3, ptr %outvl19 ret <vscale x 1 x i8> %220}21 22define <vscale x 1 x i8> @test_vlseg2ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_2t(target("riscv.vector.tuple", <vscale x 1 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {23; CHECK-LABEL: test_vlseg2ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_2t:24; CHECK: # %bb.0: # %entry25; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu26; CHECK-NEXT: vmv1r.v v7, v827; CHECK-NEXT: vmv1r.v v8, v928; CHECK-NEXT: vlseg2e8ff.v v7, (a0), v0.t29; CHECK-NEXT: csrr a0, vl30; CHECK-NEXT: sd a0, 0(a2)31; CHECK-NEXT: ret32entry:33 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv1i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 2) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 3)34 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i64} %0, 035 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_2t(target("riscv.vector.tuple", <vscale x 1 x i8>, 2) %1, i32 1)36 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i64} %0, 137 store i64 %3, ptr %outvl38 ret <vscale x 1 x i8> %239}40 41define <vscale x 2 x i8> @test_vlseg2ff_nxv2i8_triscv.vector.tuple_nxv2i8_2t(ptr %base, i64 %vl, ptr %outvl) {42; CHECK-LABEL: test_vlseg2ff_nxv2i8_triscv.vector.tuple_nxv2i8_2t:43; CHECK: # %bb.0: # %entry44; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma45; CHECK-NEXT: vlseg2e8ff.v v7, (a0)46; CHECK-NEXT: csrr a0, vl47; CHECK-NEXT: sd a0, 0(a2)48; CHECK-NEXT: ret49entry:50 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) poison, ptr %base, i64 %vl, i64 3)51 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 052 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %1, i32 1)53 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 154 store i64 %3, ptr %outvl55 ret <vscale x 2 x i8> %256}57 58define <vscale x 2 x i8> @test_vlseg2ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {59; CHECK-LABEL: test_vlseg2ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_2t:60; CHECK: # %bb.0: # %entry61; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu62; CHECK-NEXT: vmv1r.v v7, v863; CHECK-NEXT: vmv1r.v v8, v964; CHECK-NEXT: vlseg2e8ff.v v7, (a0), v0.t65; CHECK-NEXT: csrr a0, vl66; CHECK-NEXT: sd a0, 0(a2)67; CHECK-NEXT: ret68entry:69 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv2i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 3)70 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 071 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %1, i32 1)72 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 173 store i64 %3, ptr %outvl74 ret <vscale x 2 x i8> %275}76 77define <vscale x 4 x i8> @test_vlseg2ff_nxv4i8_triscv.vector.tuple_nxv4i8_2t(ptr %base, i64 %vl, ptr %outvl) {78; CHECK-LABEL: test_vlseg2ff_nxv4i8_triscv.vector.tuple_nxv4i8_2t:79; CHECK: # %bb.0: # %entry80; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma81; CHECK-NEXT: vlseg2e8ff.v v7, (a0)82; CHECK-NEXT: csrr a0, vl83; CHECK-NEXT: sd a0, 0(a2)84; CHECK-NEXT: ret85entry:86 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) poison, ptr %base, i64 %vl, i64 3)87 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 088 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)89 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 190 store i64 %3, ptr %outvl91 ret <vscale x 4 x i8> %292}93 94define <vscale x 4 x i8> @test_vlseg2ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {95; CHECK-LABEL: test_vlseg2ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_2t:96; CHECK: # %bb.0: # %entry97; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu98; CHECK-NEXT: vmv1r.v v7, v899; CHECK-NEXT: vmv1r.v v8, v9100; CHECK-NEXT: vlseg2e8ff.v v7, (a0), v0.t101; CHECK-NEXT: csrr a0, vl102; CHECK-NEXT: sd a0, 0(a2)103; CHECK-NEXT: ret104entry:105 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 3)106 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 0107 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)108 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 1109 store i64 %3, ptr %outvl110 ret <vscale x 4 x i8> %2111}112 113define <vscale x 8 x i8> @test_vlseg2ff_nxv8i8_triscv.vector.tuple_nxv8i8_2t(ptr %base, i64 %vl, ptr %outvl) {114; CHECK-LABEL: test_vlseg2ff_nxv8i8_triscv.vector.tuple_nxv8i8_2t:115; CHECK: # %bb.0: # %entry116; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma117; CHECK-NEXT: vlseg2e8ff.v v7, (a0)118; CHECK-NEXT: csrr a0, vl119; CHECK-NEXT: sd a0, 0(a2)120; CHECK-NEXT: ret121entry:122 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) poison, ptr %base, i64 %vl, i64 3)123 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 0124 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)125 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 1126 store i64 %3, ptr %outvl127 ret <vscale x 8 x i8> %2128}129 130define <vscale x 8 x i8> @test_vlseg2ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {131; CHECK-LABEL: test_vlseg2ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_2t:132; CHECK: # %bb.0: # %entry133; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu134; CHECK-NEXT: vmv1r.v v7, v8135; CHECK-NEXT: vmv1r.v v8, v9136; CHECK-NEXT: vlseg2e8ff.v v7, (a0), v0.t137; CHECK-NEXT: csrr a0, vl138; CHECK-NEXT: sd a0, 0(a2)139; CHECK-NEXT: ret140entry:141 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 3)142 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 0143 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)144 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 1145 store i64 %3, ptr %outvl146 ret <vscale x 8 x i8> %2147}148 149define <vscale x 16 x i8> @test_vlseg2ff_nxv16i8_triscv.vector.tuple_nxv16i8_2t(ptr %base, i64 %vl, ptr %outvl) {150; CHECK-LABEL: test_vlseg2ff_nxv16i8_triscv.vector.tuple_nxv16i8_2t:151; CHECK: # %bb.0: # %entry152; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma153; CHECK-NEXT: vlseg2e8ff.v v6, (a0)154; CHECK-NEXT: csrr a0, vl155; CHECK-NEXT: sd a0, 0(a2)156; CHECK-NEXT: ret157entry:158 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, ptr %base, i64 %vl, i64 3)159 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 0160 %2 = call <vscale x 16 x i8> @llvm.riscv.tuple.extract.nxv16i8.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)161 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 1162 store i64 %3, ptr %outvl163 ret <vscale x 16 x i8> %2164}165 166define <vscale x 16 x i8> @test_vlseg2ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 16 x i1> %mask, ptr %outvl) {167; CHECK-LABEL: test_vlseg2ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_2t:168; CHECK: # %bb.0: # %entry169; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu170; CHECK-NEXT: vmv2r.v v6, v8171; CHECK-NEXT: vmv2r.v v8, v10172; CHECK-NEXT: vlseg2e8ff.v v6, (a0), v0.t173; CHECK-NEXT: csrr a0, vl174; CHECK-NEXT: sd a0, 0(a2)175; CHECK-NEXT: ret176entry:177 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv16i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, <vscale x 16 x i1> %mask, i64 %vl, i64 1, i64 3)178 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 0179 %2 = call <vscale x 16 x i8> @llvm.riscv.tuple.extract.nxv16i8.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)180 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 1181 store i64 %3, ptr %outvl182 ret <vscale x 16 x i8> %2183}184 185define <vscale x 32 x i8> @test_vlseg2ff_nxv32i8_triscv.vector.tuple_nxv32i8_2t(ptr %base, i64 %vl, ptr %outvl) {186; CHECK-LABEL: test_vlseg2ff_nxv32i8_triscv.vector.tuple_nxv32i8_2t:187; CHECK: # %bb.0: # %entry188; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma189; CHECK-NEXT: vlseg2e8ff.v v4, (a0)190; CHECK-NEXT: csrr a0, vl191; CHECK-NEXT: sd a0, 0(a2)192; CHECK-NEXT: ret193entry:194 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) poison, ptr %base, i64 %vl, i64 3)195 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 0196 %2 = call <vscale x 32 x i8> @llvm.riscv.tuple.extract.nxv32i8.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)197 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 1198 store i64 %3, ptr %outvl199 ret <vscale x 32 x i8> %2200}201 202define <vscale x 32 x i8> @test_vlseg2ff_mask_nxv32i8_triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 32 x i1> %mask, ptr %outvl) {203; CHECK-LABEL: test_vlseg2ff_mask_nxv32i8_triscv.vector.tuple_nxv32i8_2t:204; CHECK: # %bb.0: # %entry205; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu206; CHECK-NEXT: vmv4r.v v4, v8207; CHECK-NEXT: vmv4r.v v8, v12208; CHECK-NEXT: vlseg2e8ff.v v4, (a0), v0.t209; CHECK-NEXT: csrr a0, vl210; CHECK-NEXT: sd a0, 0(a2)211; CHECK-NEXT: ret212entry:213 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv32i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, <vscale x 32 x i1> %mask, i64 %vl, i64 1, i64 3)214 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 0215 %2 = call <vscale x 32 x i8> @llvm.riscv.tuple.extract.nxv32i8.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)216 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 1217 store i64 %3, ptr %outvl218 ret <vscale x 32 x i8> %2219}220 221define <vscale x 1 x i8> @test_vlseg3ff_nxv1i8_triscv.vector.tuple_nxv1i8_3t(ptr %base, i64 %vl, ptr %outvl) {222; CHECK-LABEL: test_vlseg3ff_nxv1i8_triscv.vector.tuple_nxv1i8_3t:223; CHECK: # %bb.0: # %entry224; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma225; CHECK-NEXT: vlseg3e8ff.v v7, (a0)226; CHECK-NEXT: csrr a0, vl227; CHECK-NEXT: sd a0, 0(a2)228; CHECK-NEXT: ret229entry:230 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv1i8_3t(target("riscv.vector.tuple", <vscale x 1 x i8>, 3) poison, ptr %base, i64 %vl, i64 3)231 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i64} %0, 0232 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_3t(target("riscv.vector.tuple", <vscale x 1 x i8>, 3) %1, i32 1)233 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i64} %0, 1234 store i64 %3, ptr %outvl235 ret <vscale x 1 x i8> %2236}237 238define <vscale x 1 x i8> @test_vlseg3ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_3t(target("riscv.vector.tuple", <vscale x 1 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {239; CHECK-LABEL: test_vlseg3ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_3t:240; CHECK: # %bb.0: # %entry241; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu242; CHECK-NEXT: vmv1r.v v7, v8243; CHECK-NEXT: vmv1r.v v8, v9244; CHECK-NEXT: vmv1r.v v9, v10245; CHECK-NEXT: vlseg3e8ff.v v7, (a0), v0.t246; CHECK-NEXT: csrr a0, vl247; CHECK-NEXT: sd a0, 0(a2)248; CHECK-NEXT: ret249entry:250 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv1i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 3) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 3)251 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i64} %0, 0252 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_3t(target("riscv.vector.tuple", <vscale x 1 x i8>, 3) %1, i32 1)253 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i64} %0, 1254 store i64 %3, ptr %outvl255 ret <vscale x 1 x i8> %2256}257 258define <vscale x 2 x i8> @test_vlseg3ff_nxv2i8_triscv.vector.tuple_nxv2i8_3t(ptr %base, i64 %vl, ptr %outvl) {259; CHECK-LABEL: test_vlseg3ff_nxv2i8_triscv.vector.tuple_nxv2i8_3t:260; CHECK: # %bb.0: # %entry261; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma262; CHECK-NEXT: vlseg3e8ff.v v7, (a0)263; CHECK-NEXT: csrr a0, vl264; CHECK-NEXT: sd a0, 0(a2)265; CHECK-NEXT: ret266entry:267 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) poison, ptr %base, i64 %vl, i64 3)268 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 0269 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %1, i32 1)270 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 1271 store i64 %3, ptr %outvl272 ret <vscale x 2 x i8> %2273}274 275define <vscale x 2 x i8> @test_vlseg3ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {276; CHECK-LABEL: test_vlseg3ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_3t:277; CHECK: # %bb.0: # %entry278; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu279; CHECK-NEXT: vmv1r.v v7, v8280; CHECK-NEXT: vmv1r.v v8, v9281; CHECK-NEXT: vmv1r.v v9, v10282; CHECK-NEXT: vlseg3e8ff.v v7, (a0), v0.t283; CHECK-NEXT: csrr a0, vl284; CHECK-NEXT: sd a0, 0(a2)285; CHECK-NEXT: ret286entry:287 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv2i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 3)288 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 0289 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %1, i32 1)290 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 1291 store i64 %3, ptr %outvl292 ret <vscale x 2 x i8> %2293}294 295define <vscale x 4 x i8> @test_vlseg3ff_nxv4i8_triscv.vector.tuple_nxv4i8_3t(ptr %base, i64 %vl, ptr %outvl) {296; CHECK-LABEL: test_vlseg3ff_nxv4i8_triscv.vector.tuple_nxv4i8_3t:297; CHECK: # %bb.0: # %entry298; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma299; CHECK-NEXT: vlseg3e8ff.v v7, (a0)300; CHECK-NEXT: csrr a0, vl301; CHECK-NEXT: sd a0, 0(a2)302; CHECK-NEXT: ret303entry:304 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) poison, ptr %base, i64 %vl, i64 3)305 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 0306 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)307 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 1308 store i64 %3, ptr %outvl309 ret <vscale x 4 x i8> %2310}311 312define <vscale x 4 x i8> @test_vlseg3ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {313; CHECK-LABEL: test_vlseg3ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_3t:314; CHECK: # %bb.0: # %entry315; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu316; CHECK-NEXT: vmv1r.v v7, v8317; CHECK-NEXT: vmv1r.v v8, v9318; CHECK-NEXT: vmv1r.v v9, v10319; CHECK-NEXT: vlseg3e8ff.v v7, (a0), v0.t320; CHECK-NEXT: csrr a0, vl321; CHECK-NEXT: sd a0, 0(a2)322; CHECK-NEXT: ret323entry:324 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 3)325 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 0326 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)327 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 1328 store i64 %3, ptr %outvl329 ret <vscale x 4 x i8> %2330}331 332define <vscale x 8 x i8> @test_vlseg3ff_nxv8i8_triscv.vector.tuple_nxv8i8_3t(ptr %base, i64 %vl, ptr %outvl) {333; CHECK-LABEL: test_vlseg3ff_nxv8i8_triscv.vector.tuple_nxv8i8_3t:334; CHECK: # %bb.0: # %entry335; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma336; CHECK-NEXT: vlseg3e8ff.v v7, (a0)337; CHECK-NEXT: csrr a0, vl338; CHECK-NEXT: sd a0, 0(a2)339; CHECK-NEXT: ret340entry:341 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) poison, ptr %base, i64 %vl, i64 3)342 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 0343 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)344 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 1345 store i64 %3, ptr %outvl346 ret <vscale x 8 x i8> %2347}348 349define <vscale x 8 x i8> @test_vlseg3ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {350; CHECK-LABEL: test_vlseg3ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_3t:351; CHECK: # %bb.0: # %entry352; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu353; CHECK-NEXT: vmv1r.v v7, v8354; CHECK-NEXT: vmv1r.v v8, v9355; CHECK-NEXT: vmv1r.v v9, v10356; CHECK-NEXT: vlseg3e8ff.v v7, (a0), v0.t357; CHECK-NEXT: csrr a0, vl358; CHECK-NEXT: sd a0, 0(a2)359; CHECK-NEXT: ret360entry:361 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 3)362 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 0363 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)364 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 1365 store i64 %3, ptr %outvl366 ret <vscale x 8 x i8> %2367}368 369define <vscale x 16 x i8> @test_vlseg3ff_nxv16i8_triscv.vector.tuple_nxv16i8_3t(ptr %base, i64 %vl, ptr %outvl) {370; CHECK-LABEL: test_vlseg3ff_nxv16i8_triscv.vector.tuple_nxv16i8_3t:371; CHECK: # %bb.0: # %entry372; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma373; CHECK-NEXT: vlseg3e8ff.v v6, (a0)374; CHECK-NEXT: csrr a0, vl375; CHECK-NEXT: sd a0, 0(a2)376; CHECK-NEXT: ret377entry:378 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, ptr %base, i64 %vl, i64 3)379 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 0380 %2 = call <vscale x 16 x i8> @llvm.riscv.tuple.extract.nxv16i8.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)381 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 1382 store i64 %3, ptr %outvl383 ret <vscale x 16 x i8> %2384}385 386define <vscale x 16 x i8> @test_vlseg3ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 16 x i1> %mask, ptr %outvl) {387; CHECK-LABEL: test_vlseg3ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_3t:388; CHECK: # %bb.0: # %entry389; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu390; CHECK-NEXT: vmv2r.v v6, v8391; CHECK-NEXT: vmv2r.v v8, v10392; CHECK-NEXT: vmv2r.v v10, v12393; CHECK-NEXT: vlseg3e8ff.v v6, (a0), v0.t394; CHECK-NEXT: csrr a0, vl395; CHECK-NEXT: sd a0, 0(a2)396; CHECK-NEXT: ret397entry:398 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv16i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, <vscale x 16 x i1> %mask, i64 %vl, i64 1, i64 3)399 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 0400 %2 = call <vscale x 16 x i8> @llvm.riscv.tuple.extract.nxv16i8.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)401 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 1402 store i64 %3, ptr %outvl403 ret <vscale x 16 x i8> %2404}405 406define <vscale x 1 x i8> @test_vlseg4ff_nxv1i8_triscv.vector.tuple_nxv1i8_4t(ptr %base, i64 %vl, ptr %outvl) {407; CHECK-LABEL: test_vlseg4ff_nxv1i8_triscv.vector.tuple_nxv1i8_4t:408; CHECK: # %bb.0: # %entry409; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma410; CHECK-NEXT: vlseg4e8ff.v v7, (a0)411; CHECK-NEXT: csrr a0, vl412; CHECK-NEXT: sd a0, 0(a2)413; CHECK-NEXT: ret414entry:415 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv1i8_4t(target("riscv.vector.tuple", <vscale x 1 x i8>, 4) poison, ptr %base, i64 %vl, i64 3)416 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i64} %0, 0417 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_4t(target("riscv.vector.tuple", <vscale x 1 x i8>, 4) %1, i32 1)418 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i64} %0, 1419 store i64 %3, ptr %outvl420 ret <vscale x 1 x i8> %2421}422 423define <vscale x 1 x i8> @test_vlseg4ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_4t(target("riscv.vector.tuple", <vscale x 1 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {424; CHECK-LABEL: test_vlseg4ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_4t:425; CHECK: # %bb.0: # %entry426; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu427; CHECK-NEXT: vmv1r.v v7, v8428; CHECK-NEXT: vmv1r.v v8, v9429; CHECK-NEXT: vmv1r.v v9, v10430; CHECK-NEXT: vmv1r.v v10, v11431; CHECK-NEXT: vlseg4e8ff.v v7, (a0), v0.t432; CHECK-NEXT: csrr a0, vl433; CHECK-NEXT: sd a0, 0(a2)434; CHECK-NEXT: ret435entry:436 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv1i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 4) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 3)437 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i64} %0, 0438 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_4t(target("riscv.vector.tuple", <vscale x 1 x i8>, 4) %1, i32 1)439 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i64} %0, 1440 store i64 %3, ptr %outvl441 ret <vscale x 1 x i8> %2442}443 444define <vscale x 2 x i8> @test_vlseg4ff_nxv2i8_triscv.vector.tuple_nxv2i8_4t(ptr %base, i64 %vl, ptr %outvl) {445; CHECK-LABEL: test_vlseg4ff_nxv2i8_triscv.vector.tuple_nxv2i8_4t:446; CHECK: # %bb.0: # %entry447; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma448; CHECK-NEXT: vlseg4e8ff.v v7, (a0)449; CHECK-NEXT: csrr a0, vl450; CHECK-NEXT: sd a0, 0(a2)451; CHECK-NEXT: ret452entry:453 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) poison, ptr %base, i64 %vl, i64 3)454 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 0455 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %1, i32 1)456 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 1457 store i64 %3, ptr %outvl458 ret <vscale x 2 x i8> %2459}460 461define <vscale x 2 x i8> @test_vlseg4ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {462; CHECK-LABEL: test_vlseg4ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_4t:463; CHECK: # %bb.0: # %entry464; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu465; CHECK-NEXT: vmv1r.v v7, v8466; CHECK-NEXT: vmv1r.v v8, v9467; CHECK-NEXT: vmv1r.v v9, v10468; CHECK-NEXT: vmv1r.v v10, v11469; CHECK-NEXT: vlseg4e8ff.v v7, (a0), v0.t470; CHECK-NEXT: csrr a0, vl471; CHECK-NEXT: sd a0, 0(a2)472; CHECK-NEXT: ret473entry:474 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv2i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 3)475 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 0476 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %1, i32 1)477 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 1478 store i64 %3, ptr %outvl479 ret <vscale x 2 x i8> %2480}481 482define <vscale x 4 x i8> @test_vlseg4ff_nxv4i8_triscv.vector.tuple_nxv4i8_4t(ptr %base, i64 %vl, ptr %outvl) {483; CHECK-LABEL: test_vlseg4ff_nxv4i8_triscv.vector.tuple_nxv4i8_4t:484; CHECK: # %bb.0: # %entry485; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma486; CHECK-NEXT: vlseg4e8ff.v v7, (a0)487; CHECK-NEXT: csrr a0, vl488; CHECK-NEXT: sd a0, 0(a2)489; CHECK-NEXT: ret490entry:491 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) poison, ptr %base, i64 %vl, i64 3)492 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 0493 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)494 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 1495 store i64 %3, ptr %outvl496 ret <vscale x 4 x i8> %2497}498 499define <vscale x 4 x i8> @test_vlseg4ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {500; CHECK-LABEL: test_vlseg4ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_4t:501; CHECK: # %bb.0: # %entry502; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu503; CHECK-NEXT: vmv1r.v v7, v8504; CHECK-NEXT: vmv1r.v v8, v9505; CHECK-NEXT: vmv1r.v v9, v10506; CHECK-NEXT: vmv1r.v v10, v11507; CHECK-NEXT: vlseg4e8ff.v v7, (a0), v0.t508; CHECK-NEXT: csrr a0, vl509; CHECK-NEXT: sd a0, 0(a2)510; CHECK-NEXT: ret511entry:512 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 3)513 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 0514 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)515 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 1516 store i64 %3, ptr %outvl517 ret <vscale x 4 x i8> %2518}519 520define <vscale x 8 x i8> @test_vlseg4ff_nxv8i8_triscv.vector.tuple_nxv8i8_4t(ptr %base, i64 %vl, ptr %outvl) {521; CHECK-LABEL: test_vlseg4ff_nxv8i8_triscv.vector.tuple_nxv8i8_4t:522; CHECK: # %bb.0: # %entry523; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma524; CHECK-NEXT: vlseg4e8ff.v v7, (a0)525; CHECK-NEXT: csrr a0, vl526; CHECK-NEXT: sd a0, 0(a2)527; CHECK-NEXT: ret528entry:529 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, ptr %base, i64 %vl, i64 3)530 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 0531 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)532 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 1533 store i64 %3, ptr %outvl534 ret <vscale x 8 x i8> %2535}536 537define <vscale x 8 x i8> @test_vlseg4ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {538; CHECK-LABEL: test_vlseg4ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_4t:539; CHECK: # %bb.0: # %entry540; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu541; CHECK-NEXT: vmv1r.v v7, v8542; CHECK-NEXT: vmv1r.v v8, v9543; CHECK-NEXT: vmv1r.v v9, v10544; CHECK-NEXT: vmv1r.v v10, v11545; CHECK-NEXT: vlseg4e8ff.v v7, (a0), v0.t546; CHECK-NEXT: csrr a0, vl547; CHECK-NEXT: sd a0, 0(a2)548; CHECK-NEXT: ret549entry:550 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 3)551 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 0552 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)553 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 1554 store i64 %3, ptr %outvl555 ret <vscale x 8 x i8> %2556}557 558define <vscale x 16 x i8> @test_vlseg4ff_nxv16i8_triscv.vector.tuple_nxv16i8_4t(ptr %base, i64 %vl, ptr %outvl) {559; CHECK-LABEL: test_vlseg4ff_nxv16i8_triscv.vector.tuple_nxv16i8_4t:560; CHECK: # %bb.0: # %entry561; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma562; CHECK-NEXT: vlseg4e8ff.v v6, (a0)563; CHECK-NEXT: csrr a0, vl564; CHECK-NEXT: sd a0, 0(a2)565; CHECK-NEXT: ret566entry:567 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) poison, ptr %base, i64 %vl, i64 3)568 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 0569 %2 = call <vscale x 16 x i8> @llvm.riscv.tuple.extract.nxv16i8.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)570 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 1571 store i64 %3, ptr %outvl572 ret <vscale x 16 x i8> %2573}574 575define <vscale x 16 x i8> @test_vlseg4ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 16 x i1> %mask, ptr %outvl) {576; CHECK-LABEL: test_vlseg4ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_4t:577; CHECK: # %bb.0: # %entry578; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu579; CHECK-NEXT: vmv2r.v v6, v8580; CHECK-NEXT: vmv2r.v v8, v10581; CHECK-NEXT: vmv2r.v v10, v12582; CHECK-NEXT: vmv2r.v v12, v14583; CHECK-NEXT: vlseg4e8ff.v v6, (a0), v0.t584; CHECK-NEXT: csrr a0, vl585; CHECK-NEXT: sd a0, 0(a2)586; CHECK-NEXT: ret587entry:588 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv16i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, <vscale x 16 x i1> %mask, i64 %vl, i64 1, i64 3)589 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 0590 %2 = call <vscale x 16 x i8> @llvm.riscv.tuple.extract.nxv16i8.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)591 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 1592 store i64 %3, ptr %outvl593 ret <vscale x 16 x i8> %2594}595 596define <vscale x 1 x i8> @test_vlseg5ff_nxv1i8_triscv.vector.tuple_nxv1i8_5t(ptr %base, i64 %vl, ptr %outvl) {597; CHECK-LABEL: test_vlseg5ff_nxv1i8_triscv.vector.tuple_nxv1i8_5t:598; CHECK: # %bb.0: # %entry599; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma600; CHECK-NEXT: vlseg5e8ff.v v7, (a0)601; CHECK-NEXT: csrr a0, vl602; CHECK-NEXT: sd a0, 0(a2)603; CHECK-NEXT: ret604entry:605 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv1i8_5t(target("riscv.vector.tuple", <vscale x 1 x i8>, 5) poison, ptr %base, i64 %vl, i64 3)606 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i64} %0, 0607 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_5t(target("riscv.vector.tuple", <vscale x 1 x i8>, 5) %1, i32 1)608 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i64} %0, 1609 store i64 %3, ptr %outvl610 ret <vscale x 1 x i8> %2611}612 613define <vscale x 1 x i8> @test_vlseg5ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_5t(target("riscv.vector.tuple", <vscale x 1 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {614; CHECK-LABEL: test_vlseg5ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_5t:615; CHECK: # %bb.0: # %entry616; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu617; CHECK-NEXT: vmv1r.v v7, v8618; CHECK-NEXT: vmv1r.v v8, v9619; CHECK-NEXT: vmv1r.v v9, v10620; CHECK-NEXT: vmv1r.v v10, v11621; CHECK-NEXT: vmv1r.v v11, v12622; CHECK-NEXT: vlseg5e8ff.v v7, (a0), v0.t623; CHECK-NEXT: csrr a0, vl624; CHECK-NEXT: sd a0, 0(a2)625; CHECK-NEXT: ret626entry:627 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv1i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 5) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 3)628 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i64} %0, 0629 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_5t(target("riscv.vector.tuple", <vscale x 1 x i8>, 5) %1, i32 1)630 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i64} %0, 1631 store i64 %3, ptr %outvl632 ret <vscale x 1 x i8> %2633}634 635define <vscale x 2 x i8> @test_vlseg5ff_nxv2i8_triscv.vector.tuple_nxv2i8_5t(ptr %base, i64 %vl, ptr %outvl) {636; CHECK-LABEL: test_vlseg5ff_nxv2i8_triscv.vector.tuple_nxv2i8_5t:637; CHECK: # %bb.0: # %entry638; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma639; CHECK-NEXT: vlseg5e8ff.v v7, (a0)640; CHECK-NEXT: csrr a0, vl641; CHECK-NEXT: sd a0, 0(a2)642; CHECK-NEXT: ret643entry:644 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) poison, ptr %base, i64 %vl, i64 3)645 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 0646 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %1, i32 1)647 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 1648 store i64 %3, ptr %outvl649 ret <vscale x 2 x i8> %2650}651 652define <vscale x 2 x i8> @test_vlseg5ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {653; CHECK-LABEL: test_vlseg5ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_5t:654; CHECK: # %bb.0: # %entry655; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu656; CHECK-NEXT: vmv1r.v v7, v8657; CHECK-NEXT: vmv1r.v v8, v9658; CHECK-NEXT: vmv1r.v v9, v10659; CHECK-NEXT: vmv1r.v v10, v11660; CHECK-NEXT: vmv1r.v v11, v12661; CHECK-NEXT: vlseg5e8ff.v v7, (a0), v0.t662; CHECK-NEXT: csrr a0, vl663; CHECK-NEXT: sd a0, 0(a2)664; CHECK-NEXT: ret665entry:666 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv2i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 3)667 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 0668 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %1, i32 1)669 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 1670 store i64 %3, ptr %outvl671 ret <vscale x 2 x i8> %2672}673 674define <vscale x 4 x i8> @test_vlseg5ff_nxv4i8_triscv.vector.tuple_nxv4i8_5t(ptr %base, i64 %vl, ptr %outvl) {675; CHECK-LABEL: test_vlseg5ff_nxv4i8_triscv.vector.tuple_nxv4i8_5t:676; CHECK: # %bb.0: # %entry677; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma678; CHECK-NEXT: vlseg5e8ff.v v7, (a0)679; CHECK-NEXT: csrr a0, vl680; CHECK-NEXT: sd a0, 0(a2)681; CHECK-NEXT: ret682entry:683 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) poison, ptr %base, i64 %vl, i64 3)684 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 0685 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)686 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 1687 store i64 %3, ptr %outvl688 ret <vscale x 4 x i8> %2689}690 691define <vscale x 4 x i8> @test_vlseg5ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {692; CHECK-LABEL: test_vlseg5ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_5t:693; CHECK: # %bb.0: # %entry694; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu695; CHECK-NEXT: vmv1r.v v7, v8696; CHECK-NEXT: vmv1r.v v8, v9697; CHECK-NEXT: vmv1r.v v9, v10698; CHECK-NEXT: vmv1r.v v10, v11699; CHECK-NEXT: vmv1r.v v11, v12700; CHECK-NEXT: vlseg5e8ff.v v7, (a0), v0.t701; CHECK-NEXT: csrr a0, vl702; CHECK-NEXT: sd a0, 0(a2)703; CHECK-NEXT: ret704entry:705 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 3)706 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 0707 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)708 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 1709 store i64 %3, ptr %outvl710 ret <vscale x 4 x i8> %2711}712 713define <vscale x 8 x i8> @test_vlseg5ff_nxv8i8_triscv.vector.tuple_nxv8i8_5t(ptr %base, i64 %vl, ptr %outvl) {714; CHECK-LABEL: test_vlseg5ff_nxv8i8_triscv.vector.tuple_nxv8i8_5t:715; CHECK: # %bb.0: # %entry716; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma717; CHECK-NEXT: vlseg5e8ff.v v7, (a0)718; CHECK-NEXT: csrr a0, vl719; CHECK-NEXT: sd a0, 0(a2)720; CHECK-NEXT: ret721entry:722 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) poison, ptr %base, i64 %vl, i64 3)723 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 0724 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)725 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 1726 store i64 %3, ptr %outvl727 ret <vscale x 8 x i8> %2728}729 730define <vscale x 8 x i8> @test_vlseg5ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {731; CHECK-LABEL: test_vlseg5ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_5t:732; CHECK: # %bb.0: # %entry733; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu734; CHECK-NEXT: vmv1r.v v7, v8735; CHECK-NEXT: vmv1r.v v8, v9736; CHECK-NEXT: vmv1r.v v9, v10737; CHECK-NEXT: vmv1r.v v10, v11738; CHECK-NEXT: vmv1r.v v11, v12739; CHECK-NEXT: vlseg5e8ff.v v7, (a0), v0.t740; CHECK-NEXT: csrr a0, vl741; CHECK-NEXT: sd a0, 0(a2)742; CHECK-NEXT: ret743entry:744 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 3)745 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 0746 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)747 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 1748 store i64 %3, ptr %outvl749 ret <vscale x 8 x i8> %2750}751 752define <vscale x 1 x i8> @test_vlseg6ff_nxv1i8_triscv.vector.tuple_nxv1i8_6t(ptr %base, i64 %vl, ptr %outvl) {753; CHECK-LABEL: test_vlseg6ff_nxv1i8_triscv.vector.tuple_nxv1i8_6t:754; CHECK: # %bb.0: # %entry755; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma756; CHECK-NEXT: vlseg6e8ff.v v7, (a0)757; CHECK-NEXT: csrr a0, vl758; CHECK-NEXT: sd a0, 0(a2)759; CHECK-NEXT: ret760entry:761 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv1i8_6t(target("riscv.vector.tuple", <vscale x 1 x i8>, 6) poison, ptr %base, i64 %vl, i64 3)762 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i64} %0, 0763 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_6t(target("riscv.vector.tuple", <vscale x 1 x i8>, 6) %1, i32 1)764 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i64} %0, 1765 store i64 %3, ptr %outvl766 ret <vscale x 1 x i8> %2767}768 769define <vscale x 1 x i8> @test_vlseg6ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_6t(target("riscv.vector.tuple", <vscale x 1 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {770; CHECK-LABEL: test_vlseg6ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_6t:771; CHECK: # %bb.0: # %entry772; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu773; CHECK-NEXT: vmv1r.v v7, v8774; CHECK-NEXT: vmv1r.v v8, v9775; CHECK-NEXT: vmv1r.v v9, v10776; CHECK-NEXT: vmv1r.v v10, v11777; CHECK-NEXT: vmv1r.v v11, v12778; CHECK-NEXT: vmv1r.v v12, v13779; CHECK-NEXT: vlseg6e8ff.v v7, (a0), v0.t780; CHECK-NEXT: csrr a0, vl781; CHECK-NEXT: sd a0, 0(a2)782; CHECK-NEXT: ret783entry:784 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv1i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 6) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 3)785 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i64} %0, 0786 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_6t(target("riscv.vector.tuple", <vscale x 1 x i8>, 6) %1, i32 1)787 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i64} %0, 1788 store i64 %3, ptr %outvl789 ret <vscale x 1 x i8> %2790}791 792define <vscale x 2 x i8> @test_vlseg6ff_nxv2i8_triscv.vector.tuple_nxv2i8_6t(ptr %base, i64 %vl, ptr %outvl) {793; CHECK-LABEL: test_vlseg6ff_nxv2i8_triscv.vector.tuple_nxv2i8_6t:794; CHECK: # %bb.0: # %entry795; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma796; CHECK-NEXT: vlseg6e8ff.v v7, (a0)797; CHECK-NEXT: csrr a0, vl798; CHECK-NEXT: sd a0, 0(a2)799; CHECK-NEXT: ret800entry:801 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) poison, ptr %base, i64 %vl, i64 3)802 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 0803 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %1, i32 1)804 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 1805 store i64 %3, ptr %outvl806 ret <vscale x 2 x i8> %2807}808 809define <vscale x 2 x i8> @test_vlseg6ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {810; CHECK-LABEL: test_vlseg6ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_6t:811; CHECK: # %bb.0: # %entry812; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu813; CHECK-NEXT: vmv1r.v v7, v8814; CHECK-NEXT: vmv1r.v v8, v9815; CHECK-NEXT: vmv1r.v v9, v10816; CHECK-NEXT: vmv1r.v v10, v11817; CHECK-NEXT: vmv1r.v v11, v12818; CHECK-NEXT: vmv1r.v v12, v13819; CHECK-NEXT: vlseg6e8ff.v v7, (a0), v0.t820; CHECK-NEXT: csrr a0, vl821; CHECK-NEXT: sd a0, 0(a2)822; CHECK-NEXT: ret823entry:824 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv2i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 3)825 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 0826 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %1, i32 1)827 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 1828 store i64 %3, ptr %outvl829 ret <vscale x 2 x i8> %2830}831 832define <vscale x 4 x i8> @test_vlseg6ff_nxv4i8_triscv.vector.tuple_nxv4i8_6t(ptr %base, i64 %vl, ptr %outvl) {833; CHECK-LABEL: test_vlseg6ff_nxv4i8_triscv.vector.tuple_nxv4i8_6t:834; CHECK: # %bb.0: # %entry835; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma836; CHECK-NEXT: vlseg6e8ff.v v7, (a0)837; CHECK-NEXT: csrr a0, vl838; CHECK-NEXT: sd a0, 0(a2)839; CHECK-NEXT: ret840entry:841 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) poison, ptr %base, i64 %vl, i64 3)842 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 0843 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)844 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 1845 store i64 %3, ptr %outvl846 ret <vscale x 4 x i8> %2847}848 849define <vscale x 4 x i8> @test_vlseg6ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {850; CHECK-LABEL: test_vlseg6ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_6t:851; CHECK: # %bb.0: # %entry852; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu853; CHECK-NEXT: vmv1r.v v7, v8854; CHECK-NEXT: vmv1r.v v8, v9855; CHECK-NEXT: vmv1r.v v9, v10856; CHECK-NEXT: vmv1r.v v10, v11857; CHECK-NEXT: vmv1r.v v11, v12858; CHECK-NEXT: vmv1r.v v12, v13859; CHECK-NEXT: vlseg6e8ff.v v7, (a0), v0.t860; CHECK-NEXT: csrr a0, vl861; CHECK-NEXT: sd a0, 0(a2)862; CHECK-NEXT: ret863entry:864 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 3)865 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 0866 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)867 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 1868 store i64 %3, ptr %outvl869 ret <vscale x 4 x i8> %2870}871 872define <vscale x 8 x i8> @test_vlseg6ff_nxv8i8_triscv.vector.tuple_nxv8i8_6t(ptr %base, i64 %vl, ptr %outvl) {873; CHECK-LABEL: test_vlseg6ff_nxv8i8_triscv.vector.tuple_nxv8i8_6t:874; CHECK: # %bb.0: # %entry875; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma876; CHECK-NEXT: vlseg6e8ff.v v7, (a0)877; CHECK-NEXT: csrr a0, vl878; CHECK-NEXT: sd a0, 0(a2)879; CHECK-NEXT: ret880entry:881 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) poison, ptr %base, i64 %vl, i64 3)882 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 0883 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)884 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 1885 store i64 %3, ptr %outvl886 ret <vscale x 8 x i8> %2887}888 889define <vscale x 8 x i8> @test_vlseg6ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {890; CHECK-LABEL: test_vlseg6ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_6t:891; CHECK: # %bb.0: # %entry892; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu893; CHECK-NEXT: vmv1r.v v7, v8894; CHECK-NEXT: vmv1r.v v8, v9895; CHECK-NEXT: vmv1r.v v9, v10896; CHECK-NEXT: vmv1r.v v10, v11897; CHECK-NEXT: vmv1r.v v11, v12898; CHECK-NEXT: vmv1r.v v12, v13899; CHECK-NEXT: vlseg6e8ff.v v7, (a0), v0.t900; CHECK-NEXT: csrr a0, vl901; CHECK-NEXT: sd a0, 0(a2)902; CHECK-NEXT: ret903entry:904 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 3)905 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 0906 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)907 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 1908 store i64 %3, ptr %outvl909 ret <vscale x 8 x i8> %2910}911 912define <vscale x 1 x i8> @test_vlseg7ff_nxv1i8_triscv.vector.tuple_nxv1i8_7t(ptr %base, i64 %vl, ptr %outvl) {913; CHECK-LABEL: test_vlseg7ff_nxv1i8_triscv.vector.tuple_nxv1i8_7t:914; CHECK: # %bb.0: # %entry915; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma916; CHECK-NEXT: vlseg7e8ff.v v7, (a0)917; CHECK-NEXT: csrr a0, vl918; CHECK-NEXT: sd a0, 0(a2)919; CHECK-NEXT: ret920entry:921 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv1i8_7t(target("riscv.vector.tuple", <vscale x 1 x i8>, 7) poison, ptr %base, i64 %vl, i64 3)922 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i64} %0, 0923 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_7t(target("riscv.vector.tuple", <vscale x 1 x i8>, 7) %1, i32 1)924 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i64} %0, 1925 store i64 %3, ptr %outvl926 ret <vscale x 1 x i8> %2927}928 929define <vscale x 1 x i8> @test_vlseg7ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_7t(target("riscv.vector.tuple", <vscale x 1 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {930; CHECK-LABEL: test_vlseg7ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_7t:931; CHECK: # %bb.0: # %entry932; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu933; CHECK-NEXT: vmv1r.v v7, v8934; CHECK-NEXT: vmv1r.v v8, v9935; CHECK-NEXT: vmv1r.v v9, v10936; CHECK-NEXT: vmv1r.v v10, v11937; CHECK-NEXT: vmv1r.v v11, v12938; CHECK-NEXT: vmv1r.v v12, v13939; CHECK-NEXT: vmv1r.v v13, v14940; CHECK-NEXT: vlseg7e8ff.v v7, (a0), v0.t941; CHECK-NEXT: csrr a0, vl942; CHECK-NEXT: sd a0, 0(a2)943; CHECK-NEXT: ret944entry:945 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv1i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 7) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 3)946 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i64} %0, 0947 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_7t(target("riscv.vector.tuple", <vscale x 1 x i8>, 7) %1, i32 1)948 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i64} %0, 1949 store i64 %3, ptr %outvl950 ret <vscale x 1 x i8> %2951}952 953define <vscale x 2 x i8> @test_vlseg7ff_nxv2i8_triscv.vector.tuple_nxv2i8_7t(ptr %base, i64 %vl, ptr %outvl) {954; CHECK-LABEL: test_vlseg7ff_nxv2i8_triscv.vector.tuple_nxv2i8_7t:955; CHECK: # %bb.0: # %entry956; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma957; CHECK-NEXT: vlseg7e8ff.v v7, (a0)958; CHECK-NEXT: csrr a0, vl959; CHECK-NEXT: sd a0, 0(a2)960; CHECK-NEXT: ret961entry:962 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) poison, ptr %base, i64 %vl, i64 3)963 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 0964 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %1, i32 1)965 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 1966 store i64 %3, ptr %outvl967 ret <vscale x 2 x i8> %2968}969 970define <vscale x 2 x i8> @test_vlseg7ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {971; CHECK-LABEL: test_vlseg7ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_7t:972; CHECK: # %bb.0: # %entry973; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu974; CHECK-NEXT: vmv1r.v v7, v8975; CHECK-NEXT: vmv1r.v v8, v9976; CHECK-NEXT: vmv1r.v v9, v10977; CHECK-NEXT: vmv1r.v v10, v11978; CHECK-NEXT: vmv1r.v v11, v12979; CHECK-NEXT: vmv1r.v v12, v13980; CHECK-NEXT: vmv1r.v v13, v14981; CHECK-NEXT: vlseg7e8ff.v v7, (a0), v0.t982; CHECK-NEXT: csrr a0, vl983; CHECK-NEXT: sd a0, 0(a2)984; CHECK-NEXT: ret985entry:986 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv2i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 3)987 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 0988 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %1, i32 1)989 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 1990 store i64 %3, ptr %outvl991 ret <vscale x 2 x i8> %2992}993 994define <vscale x 4 x i8> @test_vlseg7ff_nxv4i8_triscv.vector.tuple_nxv4i8_7t(ptr %base, i64 %vl, ptr %outvl) {995; CHECK-LABEL: test_vlseg7ff_nxv4i8_triscv.vector.tuple_nxv4i8_7t:996; CHECK: # %bb.0: # %entry997; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma998; CHECK-NEXT: vlseg7e8ff.v v7, (a0)999; CHECK-NEXT: csrr a0, vl1000; CHECK-NEXT: sd a0, 0(a2)1001; CHECK-NEXT: ret1002entry:1003 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) poison, ptr %base, i64 %vl, i64 3)1004 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 01005 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)1006 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 11007 store i64 %3, ptr %outvl1008 ret <vscale x 4 x i8> %21009}1010 1011define <vscale x 4 x i8> @test_vlseg7ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {1012; CHECK-LABEL: test_vlseg7ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_7t:1013; CHECK: # %bb.0: # %entry1014; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu1015; CHECK-NEXT: vmv1r.v v7, v81016; CHECK-NEXT: vmv1r.v v8, v91017; CHECK-NEXT: vmv1r.v v9, v101018; CHECK-NEXT: vmv1r.v v10, v111019; CHECK-NEXT: vmv1r.v v11, v121020; CHECK-NEXT: vmv1r.v v12, v131021; CHECK-NEXT: vmv1r.v v13, v141022; CHECK-NEXT: vlseg7e8ff.v v7, (a0), v0.t1023; CHECK-NEXT: csrr a0, vl1024; CHECK-NEXT: sd a0, 0(a2)1025; CHECK-NEXT: ret1026entry:1027 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 3)1028 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 01029 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)1030 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 11031 store i64 %3, ptr %outvl1032 ret <vscale x 4 x i8> %21033}1034 1035define <vscale x 8 x i8> @test_vlseg7ff_nxv8i8_triscv.vector.tuple_nxv8i8_7t(ptr %base, i64 %vl, ptr %outvl) {1036; CHECK-LABEL: test_vlseg7ff_nxv8i8_triscv.vector.tuple_nxv8i8_7t:1037; CHECK: # %bb.0: # %entry1038; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma1039; CHECK-NEXT: vlseg7e8ff.v v7, (a0)1040; CHECK-NEXT: csrr a0, vl1041; CHECK-NEXT: sd a0, 0(a2)1042; CHECK-NEXT: ret1043entry:1044 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) poison, ptr %base, i64 %vl, i64 3)1045 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 01046 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)1047 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 11048 store i64 %3, ptr %outvl1049 ret <vscale x 8 x i8> %21050}1051 1052define <vscale x 8 x i8> @test_vlseg7ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {1053; CHECK-LABEL: test_vlseg7ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_7t:1054; CHECK: # %bb.0: # %entry1055; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu1056; CHECK-NEXT: vmv1r.v v7, v81057; CHECK-NEXT: vmv1r.v v8, v91058; CHECK-NEXT: vmv1r.v v9, v101059; CHECK-NEXT: vmv1r.v v10, v111060; CHECK-NEXT: vmv1r.v v11, v121061; CHECK-NEXT: vmv1r.v v12, v131062; CHECK-NEXT: vmv1r.v v13, v141063; CHECK-NEXT: vlseg7e8ff.v v7, (a0), v0.t1064; CHECK-NEXT: csrr a0, vl1065; CHECK-NEXT: sd a0, 0(a2)1066; CHECK-NEXT: ret1067entry:1068 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 3)1069 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 01070 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)1071 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 11072 store i64 %3, ptr %outvl1073 ret <vscale x 8 x i8> %21074}1075 1076define <vscale x 1 x i8> @test_vlseg8ff_nxv1i8_triscv.vector.tuple_nxv1i8_8t(ptr %base, i64 %vl, ptr %outvl) {1077; CHECK-LABEL: test_vlseg8ff_nxv1i8_triscv.vector.tuple_nxv1i8_8t:1078; CHECK: # %bb.0: # %entry1079; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma1080; CHECK-NEXT: vlseg8e8ff.v v7, (a0)1081; CHECK-NEXT: csrr a0, vl1082; CHECK-NEXT: sd a0, 0(a2)1083; CHECK-NEXT: ret1084entry:1085 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv1i8_8t(target("riscv.vector.tuple", <vscale x 1 x i8>, 8) poison, ptr %base, i64 %vl, i64 3)1086 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i64} %0, 01087 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_8t(target("riscv.vector.tuple", <vscale x 1 x i8>, 8) %1, i32 1)1088 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i64} %0, 11089 store i64 %3, ptr %outvl1090 ret <vscale x 1 x i8> %21091}1092 1093define <vscale x 1 x i8> @test_vlseg8ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_8t(target("riscv.vector.tuple", <vscale x 1 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {1094; CHECK-LABEL: test_vlseg8ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_8t:1095; CHECK: # %bb.0: # %entry1096; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu1097; CHECK-NEXT: vmv1r.v v7, v81098; CHECK-NEXT: vmv1r.v v8, v91099; CHECK-NEXT: vmv1r.v v9, v101100; CHECK-NEXT: vmv1r.v v10, v111101; CHECK-NEXT: vmv1r.v v11, v121102; CHECK-NEXT: vmv1r.v v12, v131103; CHECK-NEXT: vmv1r.v v13, v141104; CHECK-NEXT: vmv1r.v v14, v151105; CHECK-NEXT: vlseg8e8ff.v v7, (a0), v0.t1106; CHECK-NEXT: csrr a0, vl1107; CHECK-NEXT: sd a0, 0(a2)1108; CHECK-NEXT: ret1109entry:1110 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv1i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 8) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 3)1111 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i64} %0, 01112 %2 = call <vscale x 1 x i8> @llvm.riscv.tuple.extract.nxv1i8.triscv.vector.tuple_nxv1i8_8t(target("riscv.vector.tuple", <vscale x 1 x i8>, 8) %1, i32 1)1113 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i64} %0, 11114 store i64 %3, ptr %outvl1115 ret <vscale x 1 x i8> %21116}1117 1118define <vscale x 2 x i8> @test_vlseg8ff_nxv2i8_triscv.vector.tuple_nxv2i8_8t(ptr %base, i64 %vl, ptr %outvl) {1119; CHECK-LABEL: test_vlseg8ff_nxv2i8_triscv.vector.tuple_nxv2i8_8t:1120; CHECK: # %bb.0: # %entry1121; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma1122; CHECK-NEXT: vlseg8e8ff.v v7, (a0)1123; CHECK-NEXT: csrr a0, vl1124; CHECK-NEXT: sd a0, 0(a2)1125; CHECK-NEXT: ret1126entry:1127 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) poison, ptr %base, i64 %vl, i64 3)1128 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 01129 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %1, i32 1)1130 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 11131 store i64 %3, ptr %outvl1132 ret <vscale x 2 x i8> %21133}1134 1135define <vscale x 2 x i8> @test_vlseg8ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {1136; CHECK-LABEL: test_vlseg8ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_8t:1137; CHECK: # %bb.0: # %entry1138; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu1139; CHECK-NEXT: vmv1r.v v7, v81140; CHECK-NEXT: vmv1r.v v8, v91141; CHECK-NEXT: vmv1r.v v9, v101142; CHECK-NEXT: vmv1r.v v10, v111143; CHECK-NEXT: vmv1r.v v11, v121144; CHECK-NEXT: vmv1r.v v12, v131145; CHECK-NEXT: vmv1r.v v13, v141146; CHECK-NEXT: vmv1r.v v14, v151147; CHECK-NEXT: vlseg8e8ff.v v7, (a0), v0.t1148; CHECK-NEXT: csrr a0, vl1149; CHECK-NEXT: sd a0, 0(a2)1150; CHECK-NEXT: ret1151entry:1152 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv2i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 3)1153 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 01154 %2 = call <vscale x 2 x i8> @llvm.riscv.tuple.extract.nxv2i8.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %1, i32 1)1155 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 11156 store i64 %3, ptr %outvl1157 ret <vscale x 2 x i8> %21158}1159 1160define <vscale x 4 x i8> @test_vlseg8ff_nxv4i8_triscv.vector.tuple_nxv4i8_8t(ptr %base, i64 %vl, ptr %outvl) {1161; CHECK-LABEL: test_vlseg8ff_nxv4i8_triscv.vector.tuple_nxv4i8_8t:1162; CHECK: # %bb.0: # %entry1163; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma1164; CHECK-NEXT: vlseg8e8ff.v v7, (a0)1165; CHECK-NEXT: csrr a0, vl1166; CHECK-NEXT: sd a0, 0(a2)1167; CHECK-NEXT: ret1168entry:1169 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) poison, ptr %base, i64 %vl, i64 3)1170 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 01171 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)1172 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 11173 store i64 %3, ptr %outvl1174 ret <vscale x 4 x i8> %21175}1176 1177define <vscale x 4 x i8> @test_vlseg8ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {1178; CHECK-LABEL: test_vlseg8ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_8t:1179; CHECK: # %bb.0: # %entry1180; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu1181; CHECK-NEXT: vmv1r.v v7, v81182; CHECK-NEXT: vmv1r.v v8, v91183; CHECK-NEXT: vmv1r.v v9, v101184; CHECK-NEXT: vmv1r.v v10, v111185; CHECK-NEXT: vmv1r.v v11, v121186; CHECK-NEXT: vmv1r.v v12, v131187; CHECK-NEXT: vmv1r.v v13, v141188; CHECK-NEXT: vmv1r.v v14, v151189; CHECK-NEXT: vlseg8e8ff.v v7, (a0), v0.t1190; CHECK-NEXT: csrr a0, vl1191; CHECK-NEXT: sd a0, 0(a2)1192; CHECK-NEXT: ret1193entry:1194 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 3)1195 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 01196 %2 = call <vscale x 4 x i8> @llvm.riscv.tuple.extract.nxv4i8.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)1197 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 11198 store i64 %3, ptr %outvl1199 ret <vscale x 4 x i8> %21200}1201 1202define <vscale x 8 x i8> @test_vlseg8ff_nxv8i8_triscv.vector.tuple_nxv8i8_8t(ptr %base, i64 %vl, ptr %outvl) {1203; CHECK-LABEL: test_vlseg8ff_nxv8i8_triscv.vector.tuple_nxv8i8_8t:1204; CHECK: # %bb.0: # %entry1205; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma1206; CHECK-NEXT: vlseg8e8ff.v v7, (a0)1207; CHECK-NEXT: csrr a0, vl1208; CHECK-NEXT: sd a0, 0(a2)1209; CHECK-NEXT: ret1210entry:1211 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) poison, ptr %base, i64 %vl, i64 3)1212 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 01213 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)1214 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 11215 store i64 %3, ptr %outvl1216 ret <vscale x 8 x i8> %21217}1218 1219define <vscale x 8 x i8> @test_vlseg8ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {1220; CHECK-LABEL: test_vlseg8ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_8t:1221; CHECK: # %bb.0: # %entry1222; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu1223; CHECK-NEXT: vmv1r.v v7, v81224; CHECK-NEXT: vmv1r.v v8, v91225; CHECK-NEXT: vmv1r.v v9, v101226; CHECK-NEXT: vmv1r.v v10, v111227; CHECK-NEXT: vmv1r.v v11, v121228; CHECK-NEXT: vmv1r.v v12, v131229; CHECK-NEXT: vmv1r.v v13, v141230; CHECK-NEXT: vmv1r.v v14, v151231; CHECK-NEXT: vlseg8e8ff.v v7, (a0), v0.t1232; CHECK-NEXT: csrr a0, vl1233; CHECK-NEXT: sd a0, 0(a2)1234; CHECK-NEXT: ret1235entry:1236 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 3)1237 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 01238 %2 = call <vscale x 8 x i8> @llvm.riscv.tuple.extract.nxv8i8.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)1239 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 11240 store i64 %3, ptr %outvl1241 ret <vscale x 8 x i8> %21242}1243 1244define <vscale x 1 x i16> @test_vlseg2ff_nxv1i16_triscv.vector.tuple_nxv2i8_2t(ptr %base, i64 %vl, ptr %outvl) {1245; CHECK-LABEL: test_vlseg2ff_nxv1i16_triscv.vector.tuple_nxv2i8_2t:1246; CHECK: # %bb.0: # %entry1247; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma1248; CHECK-NEXT: vlseg2e16ff.v v7, (a0)1249; CHECK-NEXT: csrr a0, vl1250; CHECK-NEXT: sd a0, 0(a2)1251; CHECK-NEXT: ret1252entry:1253 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)1254 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 01255 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %1, i32 1)1256 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 11257 store i64 %3, ptr %outvl1258 ret <vscale x 1 x i16> %21259}1260 1261define <vscale x 1 x i16> @test_vlseg2ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {1262; CHECK-LABEL: test_vlseg2ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_2t:1263; CHECK: # %bb.0: # %entry1264; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu1265; CHECK-NEXT: vmv1r.v v7, v81266; CHECK-NEXT: vmv1r.v v8, v91267; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t1268; CHECK-NEXT: csrr a0, vl1269; CHECK-NEXT: sd a0, 0(a2)1270; CHECK-NEXT: ret1271entry:1272 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv2i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)1273 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 01274 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %1, i32 1)1275 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 11276 store i64 %3, ptr %outvl1277 ret <vscale x 1 x i16> %21278}1279 1280define <vscale x 2 x i16> @test_vlseg2ff_nxv2i16_triscv.vector.tuple_nxv4i8_2t(ptr %base, i64 %vl, ptr %outvl) {1281; CHECK-LABEL: test_vlseg2ff_nxv2i16_triscv.vector.tuple_nxv4i8_2t:1282; CHECK: # %bb.0: # %entry1283; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma1284; CHECK-NEXT: vlseg2e16ff.v v7, (a0)1285; CHECK-NEXT: csrr a0, vl1286; CHECK-NEXT: sd a0, 0(a2)1287; CHECK-NEXT: ret1288entry:1289 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)1290 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 01291 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)1292 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 11293 store i64 %3, ptr %outvl1294 ret <vscale x 2 x i16> %21295}1296 1297define <vscale x 2 x i16> @test_vlseg2ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {1298; CHECK-LABEL: test_vlseg2ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_2t:1299; CHECK: # %bb.0: # %entry1300; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu1301; CHECK-NEXT: vmv1r.v v7, v81302; CHECK-NEXT: vmv1r.v v8, v91303; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t1304; CHECK-NEXT: csrr a0, vl1305; CHECK-NEXT: sd a0, 0(a2)1306; CHECK-NEXT: ret1307entry:1308 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)1309 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 01310 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)1311 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 11312 store i64 %3, ptr %outvl1313 ret <vscale x 2 x i16> %21314}1315 1316define <vscale x 4 x i16> @test_vlseg2ff_nxv4i16_triscv.vector.tuple_nxv8i8_2t(ptr %base, i64 %vl, ptr %outvl) {1317; CHECK-LABEL: test_vlseg2ff_nxv4i16_triscv.vector.tuple_nxv8i8_2t:1318; CHECK: # %bb.0: # %entry1319; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma1320; CHECK-NEXT: vlseg2e16ff.v v7, (a0)1321; CHECK-NEXT: csrr a0, vl1322; CHECK-NEXT: sd a0, 0(a2)1323; CHECK-NEXT: ret1324entry:1325 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)1326 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 01327 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)1328 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 11329 store i64 %3, ptr %outvl1330 ret <vscale x 4 x i16> %21331}1332 1333define <vscale x 4 x i16> @test_vlseg2ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {1334; CHECK-LABEL: test_vlseg2ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_2t:1335; CHECK: # %bb.0: # %entry1336; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu1337; CHECK-NEXT: vmv1r.v v7, v81338; CHECK-NEXT: vmv1r.v v8, v91339; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t1340; CHECK-NEXT: csrr a0, vl1341; CHECK-NEXT: sd a0, 0(a2)1342; CHECK-NEXT: ret1343entry:1344 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)1345 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 01346 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)1347 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 11348 store i64 %3, ptr %outvl1349 ret <vscale x 4 x i16> %21350}1351 1352define <vscale x 8 x i16> @test_vlseg2ff_nxv8i16_triscv.vector.tuple_nxv16i8_2t(ptr %base, i64 %vl, ptr %outvl) {1353; CHECK-LABEL: test_vlseg2ff_nxv8i16_triscv.vector.tuple_nxv16i8_2t:1354; CHECK: # %bb.0: # %entry1355; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma1356; CHECK-NEXT: vlseg2e16ff.v v6, (a0)1357; CHECK-NEXT: csrr a0, vl1358; CHECK-NEXT: sd a0, 0(a2)1359; CHECK-NEXT: ret1360entry:1361 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)1362 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 01363 %2 = call <vscale x 8 x i16> @llvm.riscv.tuple.extract.nxv8i16.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)1364 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 11365 store i64 %3, ptr %outvl1366 ret <vscale x 8 x i16> %21367}1368 1369define <vscale x 8 x i16> @test_vlseg2ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {1370; CHECK-LABEL: test_vlseg2ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_2t:1371; CHECK: # %bb.0: # %entry1372; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu1373; CHECK-NEXT: vmv2r.v v6, v81374; CHECK-NEXT: vmv2r.v v8, v101375; CHECK-NEXT: vlseg2e16ff.v v6, (a0), v0.t1376; CHECK-NEXT: csrr a0, vl1377; CHECK-NEXT: sd a0, 0(a2)1378; CHECK-NEXT: ret1379entry:1380 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)1381 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 01382 %2 = call <vscale x 8 x i16> @llvm.riscv.tuple.extract.nxv8i16.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)1383 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 11384 store i64 %3, ptr %outvl1385 ret <vscale x 8 x i16> %21386}1387 1388define <vscale x 16 x i16> @test_vlseg2ff_nxv16i16_triscv.vector.tuple_nxv32i8_2t(ptr %base, i64 %vl, ptr %outvl) {1389; CHECK-LABEL: test_vlseg2ff_nxv16i16_triscv.vector.tuple_nxv32i8_2t:1390; CHECK: # %bb.0: # %entry1391; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma1392; CHECK-NEXT: vlseg2e16ff.v v4, (a0)1393; CHECK-NEXT: csrr a0, vl1394; CHECK-NEXT: sd a0, 0(a2)1395; CHECK-NEXT: ret1396entry:1397 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)1398 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 01399 %2 = call <vscale x 16 x i16> @llvm.riscv.tuple.extract.nxv16i16.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)1400 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 11401 store i64 %3, ptr %outvl1402 ret <vscale x 16 x i16> %21403}1404 1405define <vscale x 16 x i16> @test_vlseg2ff_mask_nxv16i16_triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 16 x i1> %mask, ptr %outvl) {1406; CHECK-LABEL: test_vlseg2ff_mask_nxv16i16_triscv.vector.tuple_nxv32i8_2t:1407; CHECK: # %bb.0: # %entry1408; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu1409; CHECK-NEXT: vmv4r.v v4, v81410; CHECK-NEXT: vmv4r.v v8, v121411; CHECK-NEXT: vlseg2e16ff.v v4, (a0), v0.t1412; CHECK-NEXT: csrr a0, vl1413; CHECK-NEXT: sd a0, 0(a2)1414; CHECK-NEXT: ret1415entry:1416 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv16i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, <vscale x 16 x i1> %mask, i64 %vl, i64 1, i64 4)1417 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 01418 %2 = call <vscale x 16 x i16> @llvm.riscv.tuple.extract.nxv16i16.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)1419 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 11420 store i64 %3, ptr %outvl1421 ret <vscale x 16 x i16> %21422}1423 1424define <vscale x 1 x i16> @test_vlseg3ff_nxv1i16_triscv.vector.tuple_nxv2i8_3t(ptr %base, i64 %vl, ptr %outvl) {1425; CHECK-LABEL: test_vlseg3ff_nxv1i16_triscv.vector.tuple_nxv2i8_3t:1426; CHECK: # %bb.0: # %entry1427; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma1428; CHECK-NEXT: vlseg3e16ff.v v7, (a0)1429; CHECK-NEXT: csrr a0, vl1430; CHECK-NEXT: sd a0, 0(a2)1431; CHECK-NEXT: ret1432entry:1433 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)1434 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 01435 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %1, i32 1)1436 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 11437 store i64 %3, ptr %outvl1438 ret <vscale x 1 x i16> %21439}1440 1441define <vscale x 1 x i16> @test_vlseg3ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {1442; CHECK-LABEL: test_vlseg3ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_3t:1443; CHECK: # %bb.0: # %entry1444; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu1445; CHECK-NEXT: vmv1r.v v7, v81446; CHECK-NEXT: vmv1r.v v8, v91447; CHECK-NEXT: vmv1r.v v9, v101448; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t1449; CHECK-NEXT: csrr a0, vl1450; CHECK-NEXT: sd a0, 0(a2)1451; CHECK-NEXT: ret1452entry:1453 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv2i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)1454 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 01455 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %1, i32 1)1456 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 11457 store i64 %3, ptr %outvl1458 ret <vscale x 1 x i16> %21459}1460 1461define <vscale x 2 x i16> @test_vlseg3ff_nxv2i16_triscv.vector.tuple_nxv4i8_3t(ptr %base, i64 %vl, ptr %outvl) {1462; CHECK-LABEL: test_vlseg3ff_nxv2i16_triscv.vector.tuple_nxv4i8_3t:1463; CHECK: # %bb.0: # %entry1464; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma1465; CHECK-NEXT: vlseg3e16ff.v v7, (a0)1466; CHECK-NEXT: csrr a0, vl1467; CHECK-NEXT: sd a0, 0(a2)1468; CHECK-NEXT: ret1469entry:1470 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)1471 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 01472 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)1473 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 11474 store i64 %3, ptr %outvl1475 ret <vscale x 2 x i16> %21476}1477 1478define <vscale x 2 x i16> @test_vlseg3ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {1479; CHECK-LABEL: test_vlseg3ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_3t:1480; CHECK: # %bb.0: # %entry1481; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu1482; CHECK-NEXT: vmv1r.v v7, v81483; CHECK-NEXT: vmv1r.v v8, v91484; CHECK-NEXT: vmv1r.v v9, v101485; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t1486; CHECK-NEXT: csrr a0, vl1487; CHECK-NEXT: sd a0, 0(a2)1488; CHECK-NEXT: ret1489entry:1490 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)1491 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 01492 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)1493 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 11494 store i64 %3, ptr %outvl1495 ret <vscale x 2 x i16> %21496}1497 1498define <vscale x 4 x i16> @test_vlseg3ff_nxv4i16_triscv.vector.tuple_nxv8i8_3t(ptr %base, i64 %vl, ptr %outvl) {1499; CHECK-LABEL: test_vlseg3ff_nxv4i16_triscv.vector.tuple_nxv8i8_3t:1500; CHECK: # %bb.0: # %entry1501; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma1502; CHECK-NEXT: vlseg3e16ff.v v7, (a0)1503; CHECK-NEXT: csrr a0, vl1504; CHECK-NEXT: sd a0, 0(a2)1505; CHECK-NEXT: ret1506entry:1507 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)1508 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 01509 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)1510 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 11511 store i64 %3, ptr %outvl1512 ret <vscale x 4 x i16> %21513}1514 1515define <vscale x 4 x i16> @test_vlseg3ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {1516; CHECK-LABEL: test_vlseg3ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_3t:1517; CHECK: # %bb.0: # %entry1518; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu1519; CHECK-NEXT: vmv1r.v v7, v81520; CHECK-NEXT: vmv1r.v v8, v91521; CHECK-NEXT: vmv1r.v v9, v101522; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t1523; CHECK-NEXT: csrr a0, vl1524; CHECK-NEXT: sd a0, 0(a2)1525; CHECK-NEXT: ret1526entry:1527 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)1528 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 01529 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)1530 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 11531 store i64 %3, ptr %outvl1532 ret <vscale x 4 x i16> %21533}1534 1535define <vscale x 8 x i16> @test_vlseg3ff_nxv8i16_triscv.vector.tuple_nxv16i8_3t(ptr %base, i64 %vl, ptr %outvl) {1536; CHECK-LABEL: test_vlseg3ff_nxv8i16_triscv.vector.tuple_nxv16i8_3t:1537; CHECK: # %bb.0: # %entry1538; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma1539; CHECK-NEXT: vlseg3e16ff.v v6, (a0)1540; CHECK-NEXT: csrr a0, vl1541; CHECK-NEXT: sd a0, 0(a2)1542; CHECK-NEXT: ret1543entry:1544 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)1545 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 01546 %2 = call <vscale x 8 x i16> @llvm.riscv.tuple.extract.nxv8i16.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)1547 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 11548 store i64 %3, ptr %outvl1549 ret <vscale x 8 x i16> %21550}1551 1552define <vscale x 8 x i16> @test_vlseg3ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {1553; CHECK-LABEL: test_vlseg3ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_3t:1554; CHECK: # %bb.0: # %entry1555; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu1556; CHECK-NEXT: vmv2r.v v6, v81557; CHECK-NEXT: vmv2r.v v8, v101558; CHECK-NEXT: vmv2r.v v10, v121559; CHECK-NEXT: vlseg3e16ff.v v6, (a0), v0.t1560; CHECK-NEXT: csrr a0, vl1561; CHECK-NEXT: sd a0, 0(a2)1562; CHECK-NEXT: ret1563entry:1564 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)1565 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 01566 %2 = call <vscale x 8 x i16> @llvm.riscv.tuple.extract.nxv8i16.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)1567 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 11568 store i64 %3, ptr %outvl1569 ret <vscale x 8 x i16> %21570}1571 1572define <vscale x 1 x i16> @test_vlseg4ff_nxv1i16_triscv.vector.tuple_nxv2i8_4t(ptr %base, i64 %vl, ptr %outvl) {1573; CHECK-LABEL: test_vlseg4ff_nxv1i16_triscv.vector.tuple_nxv2i8_4t:1574; CHECK: # %bb.0: # %entry1575; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma1576; CHECK-NEXT: vlseg4e16ff.v v7, (a0)1577; CHECK-NEXT: csrr a0, vl1578; CHECK-NEXT: sd a0, 0(a2)1579; CHECK-NEXT: ret1580entry:1581 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)1582 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 01583 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %1, i32 1)1584 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 11585 store i64 %3, ptr %outvl1586 ret <vscale x 1 x i16> %21587}1588 1589define <vscale x 1 x i16> @test_vlseg4ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {1590; CHECK-LABEL: test_vlseg4ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_4t:1591; CHECK: # %bb.0: # %entry1592; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu1593; CHECK-NEXT: vmv1r.v v7, v81594; CHECK-NEXT: vmv1r.v v8, v91595; CHECK-NEXT: vmv1r.v v9, v101596; CHECK-NEXT: vmv1r.v v10, v111597; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t1598; CHECK-NEXT: csrr a0, vl1599; CHECK-NEXT: sd a0, 0(a2)1600; CHECK-NEXT: ret1601entry:1602 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv2i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)1603 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 01604 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %1, i32 1)1605 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 11606 store i64 %3, ptr %outvl1607 ret <vscale x 1 x i16> %21608}1609 1610define <vscale x 2 x i16> @test_vlseg4ff_nxv2i16_triscv.vector.tuple_nxv4i8_4t(ptr %base, i64 %vl, ptr %outvl) {1611; CHECK-LABEL: test_vlseg4ff_nxv2i16_triscv.vector.tuple_nxv4i8_4t:1612; CHECK: # %bb.0: # %entry1613; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma1614; CHECK-NEXT: vlseg4e16ff.v v7, (a0)1615; CHECK-NEXT: csrr a0, vl1616; CHECK-NEXT: sd a0, 0(a2)1617; CHECK-NEXT: ret1618entry:1619 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)1620 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 01621 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)1622 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 11623 store i64 %3, ptr %outvl1624 ret <vscale x 2 x i16> %21625}1626 1627define <vscale x 2 x i16> @test_vlseg4ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {1628; CHECK-LABEL: test_vlseg4ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_4t:1629; CHECK: # %bb.0: # %entry1630; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu1631; CHECK-NEXT: vmv1r.v v7, v81632; CHECK-NEXT: vmv1r.v v8, v91633; CHECK-NEXT: vmv1r.v v9, v101634; CHECK-NEXT: vmv1r.v v10, v111635; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t1636; CHECK-NEXT: csrr a0, vl1637; CHECK-NEXT: sd a0, 0(a2)1638; CHECK-NEXT: ret1639entry:1640 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)1641 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 01642 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)1643 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 11644 store i64 %3, ptr %outvl1645 ret <vscale x 2 x i16> %21646}1647 1648define <vscale x 4 x i16> @test_vlseg4ff_nxv4i16_triscv.vector.tuple_nxv8i8_4t(ptr %base, i64 %vl, ptr %outvl) {1649; CHECK-LABEL: test_vlseg4ff_nxv4i16_triscv.vector.tuple_nxv8i8_4t:1650; CHECK: # %bb.0: # %entry1651; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma1652; CHECK-NEXT: vlseg4e16ff.v v7, (a0)1653; CHECK-NEXT: csrr a0, vl1654; CHECK-NEXT: sd a0, 0(a2)1655; CHECK-NEXT: ret1656entry:1657 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)1658 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 01659 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)1660 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 11661 store i64 %3, ptr %outvl1662 ret <vscale x 4 x i16> %21663}1664 1665define <vscale x 4 x i16> @test_vlseg4ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {1666; CHECK-LABEL: test_vlseg4ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_4t:1667; CHECK: # %bb.0: # %entry1668; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu1669; CHECK-NEXT: vmv1r.v v7, v81670; CHECK-NEXT: vmv1r.v v8, v91671; CHECK-NEXT: vmv1r.v v9, v101672; CHECK-NEXT: vmv1r.v v10, v111673; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t1674; CHECK-NEXT: csrr a0, vl1675; CHECK-NEXT: sd a0, 0(a2)1676; CHECK-NEXT: ret1677entry:1678 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)1679 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 01680 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)1681 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 11682 store i64 %3, ptr %outvl1683 ret <vscale x 4 x i16> %21684}1685 1686define <vscale x 8 x i16> @test_vlseg4ff_nxv8i16_triscv.vector.tuple_nxv16i8_4t(ptr %base, i64 %vl, ptr %outvl) {1687; CHECK-LABEL: test_vlseg4ff_nxv8i16_triscv.vector.tuple_nxv16i8_4t:1688; CHECK: # %bb.0: # %entry1689; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma1690; CHECK-NEXT: vlseg4e16ff.v v6, (a0)1691; CHECK-NEXT: csrr a0, vl1692; CHECK-NEXT: sd a0, 0(a2)1693; CHECK-NEXT: ret1694entry:1695 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)1696 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 01697 %2 = call <vscale x 8 x i16> @llvm.riscv.tuple.extract.nxv8i16.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)1698 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 11699 store i64 %3, ptr %outvl1700 ret <vscale x 8 x i16> %21701}1702 1703define <vscale x 8 x i16> @test_vlseg4ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {1704; CHECK-LABEL: test_vlseg4ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_4t:1705; CHECK: # %bb.0: # %entry1706; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu1707; CHECK-NEXT: vmv2r.v v6, v81708; CHECK-NEXT: vmv2r.v v8, v101709; CHECK-NEXT: vmv2r.v v10, v121710; CHECK-NEXT: vmv2r.v v12, v141711; CHECK-NEXT: vlseg4e16ff.v v6, (a0), v0.t1712; CHECK-NEXT: csrr a0, vl1713; CHECK-NEXT: sd a0, 0(a2)1714; CHECK-NEXT: ret1715entry:1716 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)1717 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 01718 %2 = call <vscale x 8 x i16> @llvm.riscv.tuple.extract.nxv8i16.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)1719 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 11720 store i64 %3, ptr %outvl1721 ret <vscale x 8 x i16> %21722}1723 1724define <vscale x 1 x i16> @test_vlseg5ff_nxv1i16_triscv.vector.tuple_nxv2i8_5t(ptr %base, i64 %vl, ptr %outvl) {1725; CHECK-LABEL: test_vlseg5ff_nxv1i16_triscv.vector.tuple_nxv2i8_5t:1726; CHECK: # %bb.0: # %entry1727; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma1728; CHECK-NEXT: vlseg5e16ff.v v7, (a0)1729; CHECK-NEXT: csrr a0, vl1730; CHECK-NEXT: sd a0, 0(a2)1731; CHECK-NEXT: ret1732entry:1733 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)1734 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 01735 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %1, i32 1)1736 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 11737 store i64 %3, ptr %outvl1738 ret <vscale x 1 x i16> %21739}1740 1741define <vscale x 1 x i16> @test_vlseg5ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {1742; CHECK-LABEL: test_vlseg5ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_5t:1743; CHECK: # %bb.0: # %entry1744; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu1745; CHECK-NEXT: vmv1r.v v7, v81746; CHECK-NEXT: vmv1r.v v8, v91747; CHECK-NEXT: vmv1r.v v9, v101748; CHECK-NEXT: vmv1r.v v10, v111749; CHECK-NEXT: vmv1r.v v11, v121750; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t1751; CHECK-NEXT: csrr a0, vl1752; CHECK-NEXT: sd a0, 0(a2)1753; CHECK-NEXT: ret1754entry:1755 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv2i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)1756 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 01757 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %1, i32 1)1758 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 11759 store i64 %3, ptr %outvl1760 ret <vscale x 1 x i16> %21761}1762 1763define <vscale x 2 x i16> @test_vlseg5ff_nxv2i16_triscv.vector.tuple_nxv4i8_5t(ptr %base, i64 %vl, ptr %outvl) {1764; CHECK-LABEL: test_vlseg5ff_nxv2i16_triscv.vector.tuple_nxv4i8_5t:1765; CHECK: # %bb.0: # %entry1766; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma1767; CHECK-NEXT: vlseg5e16ff.v v7, (a0)1768; CHECK-NEXT: csrr a0, vl1769; CHECK-NEXT: sd a0, 0(a2)1770; CHECK-NEXT: ret1771entry:1772 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)1773 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 01774 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)1775 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 11776 store i64 %3, ptr %outvl1777 ret <vscale x 2 x i16> %21778}1779 1780define <vscale x 2 x i16> @test_vlseg5ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {1781; CHECK-LABEL: test_vlseg5ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_5t:1782; CHECK: # %bb.0: # %entry1783; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu1784; CHECK-NEXT: vmv1r.v v7, v81785; CHECK-NEXT: vmv1r.v v8, v91786; CHECK-NEXT: vmv1r.v v9, v101787; CHECK-NEXT: vmv1r.v v10, v111788; CHECK-NEXT: vmv1r.v v11, v121789; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t1790; CHECK-NEXT: csrr a0, vl1791; CHECK-NEXT: sd a0, 0(a2)1792; CHECK-NEXT: ret1793entry:1794 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)1795 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 01796 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)1797 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 11798 store i64 %3, ptr %outvl1799 ret <vscale x 2 x i16> %21800}1801 1802define <vscale x 4 x i16> @test_vlseg5ff_nxv4i16_triscv.vector.tuple_nxv8i8_5t(ptr %base, i64 %vl, ptr %outvl) {1803; CHECK-LABEL: test_vlseg5ff_nxv4i16_triscv.vector.tuple_nxv8i8_5t:1804; CHECK: # %bb.0: # %entry1805; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma1806; CHECK-NEXT: vlseg5e16ff.v v7, (a0)1807; CHECK-NEXT: csrr a0, vl1808; CHECK-NEXT: sd a0, 0(a2)1809; CHECK-NEXT: ret1810entry:1811 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)1812 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 01813 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)1814 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 11815 store i64 %3, ptr %outvl1816 ret <vscale x 4 x i16> %21817}1818 1819define <vscale x 4 x i16> @test_vlseg5ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {1820; CHECK-LABEL: test_vlseg5ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_5t:1821; CHECK: # %bb.0: # %entry1822; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu1823; CHECK-NEXT: vmv1r.v v7, v81824; CHECK-NEXT: vmv1r.v v8, v91825; CHECK-NEXT: vmv1r.v v9, v101826; CHECK-NEXT: vmv1r.v v10, v111827; CHECK-NEXT: vmv1r.v v11, v121828; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t1829; CHECK-NEXT: csrr a0, vl1830; CHECK-NEXT: sd a0, 0(a2)1831; CHECK-NEXT: ret1832entry:1833 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)1834 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 01835 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)1836 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 11837 store i64 %3, ptr %outvl1838 ret <vscale x 4 x i16> %21839}1840 1841define <vscale x 1 x i16> @test_vlseg6ff_nxv1i16_triscv.vector.tuple_nxv2i8_6t(ptr %base, i64 %vl, ptr %outvl) {1842; CHECK-LABEL: test_vlseg6ff_nxv1i16_triscv.vector.tuple_nxv2i8_6t:1843; CHECK: # %bb.0: # %entry1844; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma1845; CHECK-NEXT: vlseg6e16ff.v v7, (a0)1846; CHECK-NEXT: csrr a0, vl1847; CHECK-NEXT: sd a0, 0(a2)1848; CHECK-NEXT: ret1849entry:1850 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)1851 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 01852 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %1, i32 1)1853 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 11854 store i64 %3, ptr %outvl1855 ret <vscale x 1 x i16> %21856}1857 1858define <vscale x 1 x i16> @test_vlseg6ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {1859; CHECK-LABEL: test_vlseg6ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_6t:1860; CHECK: # %bb.0: # %entry1861; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu1862; CHECK-NEXT: vmv1r.v v7, v81863; CHECK-NEXT: vmv1r.v v8, v91864; CHECK-NEXT: vmv1r.v v9, v101865; CHECK-NEXT: vmv1r.v v10, v111866; CHECK-NEXT: vmv1r.v v11, v121867; CHECK-NEXT: vmv1r.v v12, v131868; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t1869; CHECK-NEXT: csrr a0, vl1870; CHECK-NEXT: sd a0, 0(a2)1871; CHECK-NEXT: ret1872entry:1873 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv2i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)1874 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 01875 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %1, i32 1)1876 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 11877 store i64 %3, ptr %outvl1878 ret <vscale x 1 x i16> %21879}1880 1881define <vscale x 2 x i16> @test_vlseg6ff_nxv2i16_triscv.vector.tuple_nxv4i8_6t(ptr %base, i64 %vl, ptr %outvl) {1882; CHECK-LABEL: test_vlseg6ff_nxv2i16_triscv.vector.tuple_nxv4i8_6t:1883; CHECK: # %bb.0: # %entry1884; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma1885; CHECK-NEXT: vlseg6e16ff.v v7, (a0)1886; CHECK-NEXT: csrr a0, vl1887; CHECK-NEXT: sd a0, 0(a2)1888; CHECK-NEXT: ret1889entry:1890 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)1891 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 01892 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)1893 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 11894 store i64 %3, ptr %outvl1895 ret <vscale x 2 x i16> %21896}1897 1898define <vscale x 2 x i16> @test_vlseg6ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {1899; CHECK-LABEL: test_vlseg6ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_6t:1900; CHECK: # %bb.0: # %entry1901; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu1902; CHECK-NEXT: vmv1r.v v7, v81903; CHECK-NEXT: vmv1r.v v8, v91904; CHECK-NEXT: vmv1r.v v9, v101905; CHECK-NEXT: vmv1r.v v10, v111906; CHECK-NEXT: vmv1r.v v11, v121907; CHECK-NEXT: vmv1r.v v12, v131908; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t1909; CHECK-NEXT: csrr a0, vl1910; CHECK-NEXT: sd a0, 0(a2)1911; CHECK-NEXT: ret1912entry:1913 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)1914 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 01915 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)1916 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 11917 store i64 %3, ptr %outvl1918 ret <vscale x 2 x i16> %21919}1920 1921define <vscale x 4 x i16> @test_vlseg6ff_nxv4i16_triscv.vector.tuple_nxv8i8_6t(ptr %base, i64 %vl, ptr %outvl) {1922; CHECK-LABEL: test_vlseg6ff_nxv4i16_triscv.vector.tuple_nxv8i8_6t:1923; CHECK: # %bb.0: # %entry1924; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma1925; CHECK-NEXT: vlseg6e16ff.v v7, (a0)1926; CHECK-NEXT: csrr a0, vl1927; CHECK-NEXT: sd a0, 0(a2)1928; CHECK-NEXT: ret1929entry:1930 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)1931 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 01932 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)1933 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 11934 store i64 %3, ptr %outvl1935 ret <vscale x 4 x i16> %21936}1937 1938define <vscale x 4 x i16> @test_vlseg6ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {1939; CHECK-LABEL: test_vlseg6ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_6t:1940; CHECK: # %bb.0: # %entry1941; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu1942; CHECK-NEXT: vmv1r.v v7, v81943; CHECK-NEXT: vmv1r.v v8, v91944; CHECK-NEXT: vmv1r.v v9, v101945; CHECK-NEXT: vmv1r.v v10, v111946; CHECK-NEXT: vmv1r.v v11, v121947; CHECK-NEXT: vmv1r.v v12, v131948; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t1949; CHECK-NEXT: csrr a0, vl1950; CHECK-NEXT: sd a0, 0(a2)1951; CHECK-NEXT: ret1952entry:1953 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)1954 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 01955 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)1956 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 11957 store i64 %3, ptr %outvl1958 ret <vscale x 4 x i16> %21959}1960 1961define <vscale x 1 x i16> @test_vlseg7ff_nxv1i16_triscv.vector.tuple_nxv2i8_7t(ptr %base, i64 %vl, ptr %outvl) {1962; CHECK-LABEL: test_vlseg7ff_nxv1i16_triscv.vector.tuple_nxv2i8_7t:1963; CHECK: # %bb.0: # %entry1964; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma1965; CHECK-NEXT: vlseg7e16ff.v v7, (a0)1966; CHECK-NEXT: csrr a0, vl1967; CHECK-NEXT: sd a0, 0(a2)1968; CHECK-NEXT: ret1969entry:1970 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)1971 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 01972 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %1, i32 1)1973 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 11974 store i64 %3, ptr %outvl1975 ret <vscale x 1 x i16> %21976}1977 1978define <vscale x 1 x i16> @test_vlseg7ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {1979; CHECK-LABEL: test_vlseg7ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_7t:1980; CHECK: # %bb.0: # %entry1981; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu1982; CHECK-NEXT: vmv1r.v v7, v81983; CHECK-NEXT: vmv1r.v v8, v91984; CHECK-NEXT: vmv1r.v v9, v101985; CHECK-NEXT: vmv1r.v v10, v111986; CHECK-NEXT: vmv1r.v v11, v121987; CHECK-NEXT: vmv1r.v v12, v131988; CHECK-NEXT: vmv1r.v v13, v141989; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t1990; CHECK-NEXT: csrr a0, vl1991; CHECK-NEXT: sd a0, 0(a2)1992; CHECK-NEXT: ret1993entry:1994 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv2i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)1995 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 01996 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %1, i32 1)1997 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 11998 store i64 %3, ptr %outvl1999 ret <vscale x 1 x i16> %22000}2001 2002define <vscale x 2 x i16> @test_vlseg7ff_nxv2i16_triscv.vector.tuple_nxv4i8_7t(ptr %base, i64 %vl, ptr %outvl) {2003; CHECK-LABEL: test_vlseg7ff_nxv2i16_triscv.vector.tuple_nxv4i8_7t:2004; CHECK: # %bb.0: # %entry2005; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma2006; CHECK-NEXT: vlseg7e16ff.v v7, (a0)2007; CHECK-NEXT: csrr a0, vl2008; CHECK-NEXT: sd a0, 0(a2)2009; CHECK-NEXT: ret2010entry:2011 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)2012 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 02013 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)2014 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 12015 store i64 %3, ptr %outvl2016 ret <vscale x 2 x i16> %22017}2018 2019define <vscale x 2 x i16> @test_vlseg7ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2020; CHECK-LABEL: test_vlseg7ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_7t:2021; CHECK: # %bb.0: # %entry2022; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu2023; CHECK-NEXT: vmv1r.v v7, v82024; CHECK-NEXT: vmv1r.v v8, v92025; CHECK-NEXT: vmv1r.v v9, v102026; CHECK-NEXT: vmv1r.v v10, v112027; CHECK-NEXT: vmv1r.v v11, v122028; CHECK-NEXT: vmv1r.v v12, v132029; CHECK-NEXT: vmv1r.v v13, v142030; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t2031; CHECK-NEXT: csrr a0, vl2032; CHECK-NEXT: sd a0, 0(a2)2033; CHECK-NEXT: ret2034entry:2035 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)2036 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 02037 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)2038 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 12039 store i64 %3, ptr %outvl2040 ret <vscale x 2 x i16> %22041}2042 2043define <vscale x 4 x i16> @test_vlseg7ff_nxv4i16_triscv.vector.tuple_nxv8i8_7t(ptr %base, i64 %vl, ptr %outvl) {2044; CHECK-LABEL: test_vlseg7ff_nxv4i16_triscv.vector.tuple_nxv8i8_7t:2045; CHECK: # %bb.0: # %entry2046; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma2047; CHECK-NEXT: vlseg7e16ff.v v7, (a0)2048; CHECK-NEXT: csrr a0, vl2049; CHECK-NEXT: sd a0, 0(a2)2050; CHECK-NEXT: ret2051entry:2052 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)2053 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 02054 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)2055 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 12056 store i64 %3, ptr %outvl2057 ret <vscale x 4 x i16> %22058}2059 2060define <vscale x 4 x i16> @test_vlseg7ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {2061; CHECK-LABEL: test_vlseg7ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_7t:2062; CHECK: # %bb.0: # %entry2063; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu2064; CHECK-NEXT: vmv1r.v v7, v82065; CHECK-NEXT: vmv1r.v v8, v92066; CHECK-NEXT: vmv1r.v v9, v102067; CHECK-NEXT: vmv1r.v v10, v112068; CHECK-NEXT: vmv1r.v v11, v122069; CHECK-NEXT: vmv1r.v v12, v132070; CHECK-NEXT: vmv1r.v v13, v142071; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t2072; CHECK-NEXT: csrr a0, vl2073; CHECK-NEXT: sd a0, 0(a2)2074; CHECK-NEXT: ret2075entry:2076 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)2077 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 02078 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)2079 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 12080 store i64 %3, ptr %outvl2081 ret <vscale x 4 x i16> %22082}2083 2084define <vscale x 1 x i16> @test_vlseg8ff_nxv1i16_triscv.vector.tuple_nxv2i8_8t(ptr %base, i64 %vl, ptr %outvl) {2085; CHECK-LABEL: test_vlseg8ff_nxv1i16_triscv.vector.tuple_nxv2i8_8t:2086; CHECK: # %bb.0: # %entry2087; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma2088; CHECK-NEXT: vlseg8e16ff.v v7, (a0)2089; CHECK-NEXT: csrr a0, vl2090; CHECK-NEXT: sd a0, 0(a2)2091; CHECK-NEXT: ret2092entry:2093 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)2094 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 02095 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %1, i32 1)2096 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 12097 store i64 %3, ptr %outvl2098 ret <vscale x 1 x i16> %22099}2100 2101define <vscale x 1 x i16> @test_vlseg8ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2102; CHECK-LABEL: test_vlseg8ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_8t:2103; CHECK: # %bb.0: # %entry2104; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu2105; CHECK-NEXT: vmv1r.v v7, v82106; CHECK-NEXT: vmv1r.v v8, v92107; CHECK-NEXT: vmv1r.v v9, v102108; CHECK-NEXT: vmv1r.v v10, v112109; CHECK-NEXT: vmv1r.v v11, v122110; CHECK-NEXT: vmv1r.v v12, v132111; CHECK-NEXT: vmv1r.v v13, v142112; CHECK-NEXT: vmv1r.v v14, v152113; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t2114; CHECK-NEXT: csrr a0, vl2115; CHECK-NEXT: sd a0, 0(a2)2116; CHECK-NEXT: ret2117entry:2118 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv2i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)2119 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 02120 %2 = call <vscale x 1 x i16> @llvm.riscv.tuple.extract.nxv1i16.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %1, i32 1)2121 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 12122 store i64 %3, ptr %outvl2123 ret <vscale x 1 x i16> %22124}2125 2126define <vscale x 2 x i16> @test_vlseg8ff_nxv2i16_triscv.vector.tuple_nxv4i8_8t(ptr %base, i64 %vl, ptr %outvl) {2127; CHECK-LABEL: test_vlseg8ff_nxv2i16_triscv.vector.tuple_nxv4i8_8t:2128; CHECK: # %bb.0: # %entry2129; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma2130; CHECK-NEXT: vlseg8e16ff.v v7, (a0)2131; CHECK-NEXT: csrr a0, vl2132; CHECK-NEXT: sd a0, 0(a2)2133; CHECK-NEXT: ret2134entry:2135 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)2136 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 02137 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)2138 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 12139 store i64 %3, ptr %outvl2140 ret <vscale x 2 x i16> %22141}2142 2143define <vscale x 2 x i16> @test_vlseg8ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2144; CHECK-LABEL: test_vlseg8ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_8t:2145; CHECK: # %bb.0: # %entry2146; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu2147; CHECK-NEXT: vmv1r.v v7, v82148; CHECK-NEXT: vmv1r.v v8, v92149; CHECK-NEXT: vmv1r.v v9, v102150; CHECK-NEXT: vmv1r.v v10, v112151; CHECK-NEXT: vmv1r.v v11, v122152; CHECK-NEXT: vmv1r.v v12, v132153; CHECK-NEXT: vmv1r.v v13, v142154; CHECK-NEXT: vmv1r.v v14, v152155; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t2156; CHECK-NEXT: csrr a0, vl2157; CHECK-NEXT: sd a0, 0(a2)2158; CHECK-NEXT: ret2159entry:2160 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)2161 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 02162 %2 = call <vscale x 2 x i16> @llvm.riscv.tuple.extract.nxv2i16.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)2163 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 12164 store i64 %3, ptr %outvl2165 ret <vscale x 2 x i16> %22166}2167 2168define <vscale x 4 x i16> @test_vlseg8ff_nxv4i16_triscv.vector.tuple_nxv8i8_8t(ptr %base, i64 %vl, ptr %outvl) {2169; CHECK-LABEL: test_vlseg8ff_nxv4i16_triscv.vector.tuple_nxv8i8_8t:2170; CHECK: # %bb.0: # %entry2171; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma2172; CHECK-NEXT: vlseg8e16ff.v v7, (a0)2173; CHECK-NEXT: csrr a0, vl2174; CHECK-NEXT: sd a0, 0(a2)2175; CHECK-NEXT: ret2176entry:2177 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)2178 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 02179 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)2180 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 12181 store i64 %3, ptr %outvl2182 ret <vscale x 4 x i16> %22183}2184 2185define <vscale x 4 x i16> @test_vlseg8ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {2186; CHECK-LABEL: test_vlseg8ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_8t:2187; CHECK: # %bb.0: # %entry2188; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu2189; CHECK-NEXT: vmv1r.v v7, v82190; CHECK-NEXT: vmv1r.v v8, v92191; CHECK-NEXT: vmv1r.v v9, v102192; CHECK-NEXT: vmv1r.v v10, v112193; CHECK-NEXT: vmv1r.v v11, v122194; CHECK-NEXT: vmv1r.v v12, v132195; CHECK-NEXT: vmv1r.v v13, v142196; CHECK-NEXT: vmv1r.v v14, v152197; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t2198; CHECK-NEXT: csrr a0, vl2199; CHECK-NEXT: sd a0, 0(a2)2200; CHECK-NEXT: ret2201entry:2202 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)2203 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 02204 %2 = call <vscale x 4 x i16> @llvm.riscv.tuple.extract.nxv4i16.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)2205 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 12206 store i64 %3, ptr %outvl2207 ret <vscale x 4 x i16> %22208}2209 2210define <vscale x 1 x i32> @test_vlseg2ff_nxv1i32_triscv.vector.tuple_nxv4i8_2t(ptr %base, i64 %vl, ptr %outvl) {2211; CHECK-LABEL: test_vlseg2ff_nxv1i32_triscv.vector.tuple_nxv4i8_2t:2212; CHECK: # %bb.0: # %entry2213; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma2214; CHECK-NEXT: vlseg2e32ff.v v7, (a0)2215; CHECK-NEXT: csrr a0, vl2216; CHECK-NEXT: sd a0, 0(a2)2217; CHECK-NEXT: ret2218entry:2219 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) poison, ptr %base, i64 %vl, i64 5)2220 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 02221 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)2222 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 12223 store i64 %3, ptr %outvl2224 ret <vscale x 1 x i32> %22225}2226 2227define <vscale x 1 x i32> @test_vlseg2ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2228; CHECK-LABEL: test_vlseg2ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_2t:2229; CHECK: # %bb.0: # %entry2230; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu2231; CHECK-NEXT: vmv1r.v v7, v82232; CHECK-NEXT: vmv1r.v v8, v92233; CHECK-NEXT: vlseg2e32ff.v v7, (a0), v0.t2234; CHECK-NEXT: csrr a0, vl2235; CHECK-NEXT: sd a0, 0(a2)2236; CHECK-NEXT: ret2237entry:2238 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)2239 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 02240 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)2241 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 12242 store i64 %3, ptr %outvl2243 ret <vscale x 1 x i32> %22244}2245 2246define <vscale x 2 x i32> @test_vlseg2ff_nxv2i32_triscv.vector.tuple_nxv8i8_2t(ptr %base, i64 %vl, ptr %outvl) {2247; CHECK-LABEL: test_vlseg2ff_nxv2i32_triscv.vector.tuple_nxv8i8_2t:2248; CHECK: # %bb.0: # %entry2249; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma2250; CHECK-NEXT: vlseg2e32ff.v v7, (a0)2251; CHECK-NEXT: csrr a0, vl2252; CHECK-NEXT: sd a0, 0(a2)2253; CHECK-NEXT: ret2254entry:2255 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) poison, ptr %base, i64 %vl, i64 5)2256 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 02257 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)2258 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 12259 store i64 %3, ptr %outvl2260 ret <vscale x 2 x i32> %22261}2262 2263define <vscale x 2 x i32> @test_vlseg2ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2264; CHECK-LABEL: test_vlseg2ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_2t:2265; CHECK: # %bb.0: # %entry2266; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu2267; CHECK-NEXT: vmv1r.v v7, v82268; CHECK-NEXT: vmv1r.v v8, v92269; CHECK-NEXT: vlseg2e32ff.v v7, (a0), v0.t2270; CHECK-NEXT: csrr a0, vl2271; CHECK-NEXT: sd a0, 0(a2)2272; CHECK-NEXT: ret2273entry:2274 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)2275 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 02276 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)2277 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 12278 store i64 %3, ptr %outvl2279 ret <vscale x 2 x i32> %22280}2281 2282define <vscale x 4 x i32> @test_vlseg2ff_nxv4i32_triscv.vector.tuple_nxv16i8_2t(ptr %base, i64 %vl, ptr %outvl) {2283; CHECK-LABEL: test_vlseg2ff_nxv4i32_triscv.vector.tuple_nxv16i8_2t:2284; CHECK: # %bb.0: # %entry2285; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma2286; CHECK-NEXT: vlseg2e32ff.v v6, (a0)2287; CHECK-NEXT: csrr a0, vl2288; CHECK-NEXT: sd a0, 0(a2)2289; CHECK-NEXT: ret2290entry:2291 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, ptr %base, i64 %vl, i64 5)2292 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 02293 %2 = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)2294 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 12295 store i64 %3, ptr %outvl2296 ret <vscale x 4 x i32> %22297}2298 2299define <vscale x 4 x i32> @test_vlseg2ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {2300; CHECK-LABEL: test_vlseg2ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_2t:2301; CHECK: # %bb.0: # %entry2302; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu2303; CHECK-NEXT: vmv2r.v v6, v82304; CHECK-NEXT: vmv2r.v v8, v102305; CHECK-NEXT: vlseg2e32ff.v v6, (a0), v0.t2306; CHECK-NEXT: csrr a0, vl2307; CHECK-NEXT: sd a0, 0(a2)2308; CHECK-NEXT: ret2309entry:2310 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 5)2311 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 02312 %2 = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)2313 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 12314 store i64 %3, ptr %outvl2315 ret <vscale x 4 x i32> %22316}2317 2318define <vscale x 8 x i32> @test_vlseg2ff_nxv8i32_triscv.vector.tuple_nxv32i8_2t(ptr %base, i64 %vl, ptr %outvl) {2319; CHECK-LABEL: test_vlseg2ff_nxv8i32_triscv.vector.tuple_nxv32i8_2t:2320; CHECK: # %bb.0: # %entry2321; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma2322; CHECK-NEXT: vlseg2e32ff.v v4, (a0)2323; CHECK-NEXT: csrr a0, vl2324; CHECK-NEXT: sd a0, 0(a2)2325; CHECK-NEXT: ret2326entry:2327 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) poison, ptr %base, i64 %vl, i64 5)2328 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 02329 %2 = call <vscale x 8 x i32> @llvm.riscv.tuple.extract.nxv8i32.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)2330 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 12331 store i64 %3, ptr %outvl2332 ret <vscale x 8 x i32> %22333}2334 2335define <vscale x 8 x i32> @test_vlseg2ff_mask_nxv8i32_triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {2336; CHECK-LABEL: test_vlseg2ff_mask_nxv8i32_triscv.vector.tuple_nxv32i8_2t:2337; CHECK: # %bb.0: # %entry2338; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu2339; CHECK-NEXT: vmv4r.v v4, v82340; CHECK-NEXT: vmv4r.v v8, v122341; CHECK-NEXT: vlseg2e32ff.v v4, (a0), v0.t2342; CHECK-NEXT: csrr a0, vl2343; CHECK-NEXT: sd a0, 0(a2)2344; CHECK-NEXT: ret2345entry:2346 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 5)2347 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 02348 %2 = call <vscale x 8 x i32> @llvm.riscv.tuple.extract.nxv8i32.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)2349 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 12350 store i64 %3, ptr %outvl2351 ret <vscale x 8 x i32> %22352}2353 2354define <vscale x 1 x i32> @test_vlseg3ff_nxv1i32_triscv.vector.tuple_nxv4i8_3t(ptr %base, i64 %vl, ptr %outvl) {2355; CHECK-LABEL: test_vlseg3ff_nxv1i32_triscv.vector.tuple_nxv4i8_3t:2356; CHECK: # %bb.0: # %entry2357; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma2358; CHECK-NEXT: vlseg3e32ff.v v7, (a0)2359; CHECK-NEXT: csrr a0, vl2360; CHECK-NEXT: sd a0, 0(a2)2361; CHECK-NEXT: ret2362entry:2363 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) poison, ptr %base, i64 %vl, i64 5)2364 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 02365 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)2366 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 12367 store i64 %3, ptr %outvl2368 ret <vscale x 1 x i32> %22369}2370 2371define <vscale x 1 x i32> @test_vlseg3ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2372; CHECK-LABEL: test_vlseg3ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_3t:2373; CHECK: # %bb.0: # %entry2374; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu2375; CHECK-NEXT: vmv1r.v v7, v82376; CHECK-NEXT: vmv1r.v v8, v92377; CHECK-NEXT: vmv1r.v v9, v102378; CHECK-NEXT: vlseg3e32ff.v v7, (a0), v0.t2379; CHECK-NEXT: csrr a0, vl2380; CHECK-NEXT: sd a0, 0(a2)2381; CHECK-NEXT: ret2382entry:2383 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)2384 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 02385 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)2386 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 12387 store i64 %3, ptr %outvl2388 ret <vscale x 1 x i32> %22389}2390 2391define <vscale x 2 x i32> @test_vlseg3ff_nxv2i32_triscv.vector.tuple_nxv8i8_3t(ptr %base, i64 %vl, ptr %outvl) {2392; CHECK-LABEL: test_vlseg3ff_nxv2i32_triscv.vector.tuple_nxv8i8_3t:2393; CHECK: # %bb.0: # %entry2394; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma2395; CHECK-NEXT: vlseg3e32ff.v v7, (a0)2396; CHECK-NEXT: csrr a0, vl2397; CHECK-NEXT: sd a0, 0(a2)2398; CHECK-NEXT: ret2399entry:2400 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) poison, ptr %base, i64 %vl, i64 5)2401 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 02402 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)2403 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 12404 store i64 %3, ptr %outvl2405 ret <vscale x 2 x i32> %22406}2407 2408define <vscale x 2 x i32> @test_vlseg3ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2409; CHECK-LABEL: test_vlseg3ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_3t:2410; CHECK: # %bb.0: # %entry2411; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu2412; CHECK-NEXT: vmv1r.v v7, v82413; CHECK-NEXT: vmv1r.v v8, v92414; CHECK-NEXT: vmv1r.v v9, v102415; CHECK-NEXT: vlseg3e32ff.v v7, (a0), v0.t2416; CHECK-NEXT: csrr a0, vl2417; CHECK-NEXT: sd a0, 0(a2)2418; CHECK-NEXT: ret2419entry:2420 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)2421 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 02422 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)2423 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 12424 store i64 %3, ptr %outvl2425 ret <vscale x 2 x i32> %22426}2427 2428define <vscale x 4 x i32> @test_vlseg3ff_nxv4i32_triscv.vector.tuple_nxv16i8_3t(ptr %base, i64 %vl, ptr %outvl) {2429; CHECK-LABEL: test_vlseg3ff_nxv4i32_triscv.vector.tuple_nxv16i8_3t:2430; CHECK: # %bb.0: # %entry2431; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma2432; CHECK-NEXT: vlseg3e32ff.v v6, (a0)2433; CHECK-NEXT: csrr a0, vl2434; CHECK-NEXT: sd a0, 0(a2)2435; CHECK-NEXT: ret2436entry:2437 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, ptr %base, i64 %vl, i64 5)2438 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 02439 %2 = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)2440 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 12441 store i64 %3, ptr %outvl2442 ret <vscale x 4 x i32> %22443}2444 2445define <vscale x 4 x i32> @test_vlseg3ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {2446; CHECK-LABEL: test_vlseg3ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_3t:2447; CHECK: # %bb.0: # %entry2448; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu2449; CHECK-NEXT: vmv2r.v v6, v82450; CHECK-NEXT: vmv2r.v v8, v102451; CHECK-NEXT: vmv2r.v v10, v122452; CHECK-NEXT: vlseg3e32ff.v v6, (a0), v0.t2453; CHECK-NEXT: csrr a0, vl2454; CHECK-NEXT: sd a0, 0(a2)2455; CHECK-NEXT: ret2456entry:2457 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 5)2458 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 02459 %2 = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)2460 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 12461 store i64 %3, ptr %outvl2462 ret <vscale x 4 x i32> %22463}2464 2465define <vscale x 1 x i32> @test_vlseg4ff_nxv1i32_triscv.vector.tuple_nxv4i8_4t(ptr %base, i64 %vl, ptr %outvl) {2466; CHECK-LABEL: test_vlseg4ff_nxv1i32_triscv.vector.tuple_nxv4i8_4t:2467; CHECK: # %bb.0: # %entry2468; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma2469; CHECK-NEXT: vlseg4e32ff.v v7, (a0)2470; CHECK-NEXT: csrr a0, vl2471; CHECK-NEXT: sd a0, 0(a2)2472; CHECK-NEXT: ret2473entry:2474 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) poison, ptr %base, i64 %vl, i64 5)2475 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 02476 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)2477 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 12478 store i64 %3, ptr %outvl2479 ret <vscale x 1 x i32> %22480}2481 2482define <vscale x 1 x i32> @test_vlseg4ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2483; CHECK-LABEL: test_vlseg4ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_4t:2484; CHECK: # %bb.0: # %entry2485; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu2486; CHECK-NEXT: vmv1r.v v7, v82487; CHECK-NEXT: vmv1r.v v8, v92488; CHECK-NEXT: vmv1r.v v9, v102489; CHECK-NEXT: vmv1r.v v10, v112490; CHECK-NEXT: vlseg4e32ff.v v7, (a0), v0.t2491; CHECK-NEXT: csrr a0, vl2492; CHECK-NEXT: sd a0, 0(a2)2493; CHECK-NEXT: ret2494entry:2495 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)2496 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 02497 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)2498 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 12499 store i64 %3, ptr %outvl2500 ret <vscale x 1 x i32> %22501}2502 2503define <vscale x 2 x i32> @test_vlseg4ff_nxv2i32_triscv.vector.tuple_nxv8i8_4t(ptr %base, i64 %vl, ptr %outvl) {2504; CHECK-LABEL: test_vlseg4ff_nxv2i32_triscv.vector.tuple_nxv8i8_4t:2505; CHECK: # %bb.0: # %entry2506; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma2507; CHECK-NEXT: vlseg4e32ff.v v7, (a0)2508; CHECK-NEXT: csrr a0, vl2509; CHECK-NEXT: sd a0, 0(a2)2510; CHECK-NEXT: ret2511entry:2512 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, ptr %base, i64 %vl, i64 5)2513 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 02514 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)2515 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 12516 store i64 %3, ptr %outvl2517 ret <vscale x 2 x i32> %22518}2519 2520define <vscale x 2 x i32> @test_vlseg4ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2521; CHECK-LABEL: test_vlseg4ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_4t:2522; CHECK: # %bb.0: # %entry2523; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu2524; CHECK-NEXT: vmv1r.v v7, v82525; CHECK-NEXT: vmv1r.v v8, v92526; CHECK-NEXT: vmv1r.v v9, v102527; CHECK-NEXT: vmv1r.v v10, v112528; CHECK-NEXT: vlseg4e32ff.v v7, (a0), v0.t2529; CHECK-NEXT: csrr a0, vl2530; CHECK-NEXT: sd a0, 0(a2)2531; CHECK-NEXT: ret2532entry:2533 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)2534 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 02535 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)2536 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 12537 store i64 %3, ptr %outvl2538 ret <vscale x 2 x i32> %22539}2540 2541define <vscale x 4 x i32> @test_vlseg4ff_nxv4i32_triscv.vector.tuple_nxv16i8_4t(ptr %base, i64 %vl, ptr %outvl) {2542; CHECK-LABEL: test_vlseg4ff_nxv4i32_triscv.vector.tuple_nxv16i8_4t:2543; CHECK: # %bb.0: # %entry2544; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma2545; CHECK-NEXT: vlseg4e32ff.v v6, (a0)2546; CHECK-NEXT: csrr a0, vl2547; CHECK-NEXT: sd a0, 0(a2)2548; CHECK-NEXT: ret2549entry:2550 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) poison, ptr %base, i64 %vl, i64 5)2551 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 02552 %2 = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)2553 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 12554 store i64 %3, ptr %outvl2555 ret <vscale x 4 x i32> %22556}2557 2558define <vscale x 4 x i32> @test_vlseg4ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {2559; CHECK-LABEL: test_vlseg4ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_4t:2560; CHECK: # %bb.0: # %entry2561; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu2562; CHECK-NEXT: vmv2r.v v6, v82563; CHECK-NEXT: vmv2r.v v8, v102564; CHECK-NEXT: vmv2r.v v10, v122565; CHECK-NEXT: vmv2r.v v12, v142566; CHECK-NEXT: vlseg4e32ff.v v6, (a0), v0.t2567; CHECK-NEXT: csrr a0, vl2568; CHECK-NEXT: sd a0, 0(a2)2569; CHECK-NEXT: ret2570entry:2571 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 5)2572 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 02573 %2 = call <vscale x 4 x i32> @llvm.riscv.tuple.extract.nxv4i32.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)2574 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 12575 store i64 %3, ptr %outvl2576 ret <vscale x 4 x i32> %22577}2578 2579define <vscale x 1 x i32> @test_vlseg5ff_nxv1i32_triscv.vector.tuple_nxv4i8_5t(ptr %base, i64 %vl, ptr %outvl) {2580; CHECK-LABEL: test_vlseg5ff_nxv1i32_triscv.vector.tuple_nxv4i8_5t:2581; CHECK: # %bb.0: # %entry2582; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma2583; CHECK-NEXT: vlseg5e32ff.v v7, (a0)2584; CHECK-NEXT: csrr a0, vl2585; CHECK-NEXT: sd a0, 0(a2)2586; CHECK-NEXT: ret2587entry:2588 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) poison, ptr %base, i64 %vl, i64 5)2589 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 02590 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)2591 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 12592 store i64 %3, ptr %outvl2593 ret <vscale x 1 x i32> %22594}2595 2596define <vscale x 1 x i32> @test_vlseg5ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2597; CHECK-LABEL: test_vlseg5ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_5t:2598; CHECK: # %bb.0: # %entry2599; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu2600; CHECK-NEXT: vmv1r.v v7, v82601; CHECK-NEXT: vmv1r.v v8, v92602; CHECK-NEXT: vmv1r.v v9, v102603; CHECK-NEXT: vmv1r.v v10, v112604; CHECK-NEXT: vmv1r.v v11, v122605; CHECK-NEXT: vlseg5e32ff.v v7, (a0), v0.t2606; CHECK-NEXT: csrr a0, vl2607; CHECK-NEXT: sd a0, 0(a2)2608; CHECK-NEXT: ret2609entry:2610 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)2611 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 02612 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)2613 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 12614 store i64 %3, ptr %outvl2615 ret <vscale x 1 x i32> %22616}2617 2618define <vscale x 2 x i32> @test_vlseg5ff_nxv2i32_triscv.vector.tuple_nxv8i8_5t(ptr %base, i64 %vl, ptr %outvl) {2619; CHECK-LABEL: test_vlseg5ff_nxv2i32_triscv.vector.tuple_nxv8i8_5t:2620; CHECK: # %bb.0: # %entry2621; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma2622; CHECK-NEXT: vlseg5e32ff.v v7, (a0)2623; CHECK-NEXT: csrr a0, vl2624; CHECK-NEXT: sd a0, 0(a2)2625; CHECK-NEXT: ret2626entry:2627 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) poison, ptr %base, i64 %vl, i64 5)2628 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 02629 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)2630 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 12631 store i64 %3, ptr %outvl2632 ret <vscale x 2 x i32> %22633}2634 2635define <vscale x 2 x i32> @test_vlseg5ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2636; CHECK-LABEL: test_vlseg5ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_5t:2637; CHECK: # %bb.0: # %entry2638; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu2639; CHECK-NEXT: vmv1r.v v7, v82640; CHECK-NEXT: vmv1r.v v8, v92641; CHECK-NEXT: vmv1r.v v9, v102642; CHECK-NEXT: vmv1r.v v10, v112643; CHECK-NEXT: vmv1r.v v11, v122644; CHECK-NEXT: vlseg5e32ff.v v7, (a0), v0.t2645; CHECK-NEXT: csrr a0, vl2646; CHECK-NEXT: sd a0, 0(a2)2647; CHECK-NEXT: ret2648entry:2649 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)2650 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 02651 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)2652 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 12653 store i64 %3, ptr %outvl2654 ret <vscale x 2 x i32> %22655}2656 2657define <vscale x 1 x i32> @test_vlseg6ff_nxv1i32_triscv.vector.tuple_nxv4i8_6t(ptr %base, i64 %vl, ptr %outvl) {2658; CHECK-LABEL: test_vlseg6ff_nxv1i32_triscv.vector.tuple_nxv4i8_6t:2659; CHECK: # %bb.0: # %entry2660; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma2661; CHECK-NEXT: vlseg6e32ff.v v7, (a0)2662; CHECK-NEXT: csrr a0, vl2663; CHECK-NEXT: sd a0, 0(a2)2664; CHECK-NEXT: ret2665entry:2666 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) poison, ptr %base, i64 %vl, i64 5)2667 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 02668 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)2669 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 12670 store i64 %3, ptr %outvl2671 ret <vscale x 1 x i32> %22672}2673 2674define <vscale x 1 x i32> @test_vlseg6ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2675; CHECK-LABEL: test_vlseg6ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_6t:2676; CHECK: # %bb.0: # %entry2677; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu2678; CHECK-NEXT: vmv1r.v v7, v82679; CHECK-NEXT: vmv1r.v v8, v92680; CHECK-NEXT: vmv1r.v v9, v102681; CHECK-NEXT: vmv1r.v v10, v112682; CHECK-NEXT: vmv1r.v v11, v122683; CHECK-NEXT: vmv1r.v v12, v132684; CHECK-NEXT: vlseg6e32ff.v v7, (a0), v0.t2685; CHECK-NEXT: csrr a0, vl2686; CHECK-NEXT: sd a0, 0(a2)2687; CHECK-NEXT: ret2688entry:2689 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)2690 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 02691 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)2692 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 12693 store i64 %3, ptr %outvl2694 ret <vscale x 1 x i32> %22695}2696 2697define <vscale x 2 x i32> @test_vlseg6ff_nxv2i32_triscv.vector.tuple_nxv8i8_6t(ptr %base, i64 %vl, ptr %outvl) {2698; CHECK-LABEL: test_vlseg6ff_nxv2i32_triscv.vector.tuple_nxv8i8_6t:2699; CHECK: # %bb.0: # %entry2700; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma2701; CHECK-NEXT: vlseg6e32ff.v v7, (a0)2702; CHECK-NEXT: csrr a0, vl2703; CHECK-NEXT: sd a0, 0(a2)2704; CHECK-NEXT: ret2705entry:2706 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) poison, ptr %base, i64 %vl, i64 5)2707 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 02708 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)2709 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 12710 store i64 %3, ptr %outvl2711 ret <vscale x 2 x i32> %22712}2713 2714define <vscale x 2 x i32> @test_vlseg6ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2715; CHECK-LABEL: test_vlseg6ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_6t:2716; CHECK: # %bb.0: # %entry2717; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu2718; CHECK-NEXT: vmv1r.v v7, v82719; CHECK-NEXT: vmv1r.v v8, v92720; CHECK-NEXT: vmv1r.v v9, v102721; CHECK-NEXT: vmv1r.v v10, v112722; CHECK-NEXT: vmv1r.v v11, v122723; CHECK-NEXT: vmv1r.v v12, v132724; CHECK-NEXT: vlseg6e32ff.v v7, (a0), v0.t2725; CHECK-NEXT: csrr a0, vl2726; CHECK-NEXT: sd a0, 0(a2)2727; CHECK-NEXT: ret2728entry:2729 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)2730 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 02731 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)2732 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 12733 store i64 %3, ptr %outvl2734 ret <vscale x 2 x i32> %22735}2736 2737define <vscale x 1 x i32> @test_vlseg7ff_nxv1i32_triscv.vector.tuple_nxv4i8_7t(ptr %base, i64 %vl, ptr %outvl) {2738; CHECK-LABEL: test_vlseg7ff_nxv1i32_triscv.vector.tuple_nxv4i8_7t:2739; CHECK: # %bb.0: # %entry2740; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma2741; CHECK-NEXT: vlseg7e32ff.v v7, (a0)2742; CHECK-NEXT: csrr a0, vl2743; CHECK-NEXT: sd a0, 0(a2)2744; CHECK-NEXT: ret2745entry:2746 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) poison, ptr %base, i64 %vl, i64 5)2747 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 02748 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)2749 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 12750 store i64 %3, ptr %outvl2751 ret <vscale x 1 x i32> %22752}2753 2754define <vscale x 1 x i32> @test_vlseg7ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2755; CHECK-LABEL: test_vlseg7ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_7t:2756; CHECK: # %bb.0: # %entry2757; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu2758; CHECK-NEXT: vmv1r.v v7, v82759; CHECK-NEXT: vmv1r.v v8, v92760; CHECK-NEXT: vmv1r.v v9, v102761; CHECK-NEXT: vmv1r.v v10, v112762; CHECK-NEXT: vmv1r.v v11, v122763; CHECK-NEXT: vmv1r.v v12, v132764; CHECK-NEXT: vmv1r.v v13, v142765; CHECK-NEXT: vlseg7e32ff.v v7, (a0), v0.t2766; CHECK-NEXT: csrr a0, vl2767; CHECK-NEXT: sd a0, 0(a2)2768; CHECK-NEXT: ret2769entry:2770 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)2771 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 02772 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)2773 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 12774 store i64 %3, ptr %outvl2775 ret <vscale x 1 x i32> %22776}2777 2778define <vscale x 2 x i32> @test_vlseg7ff_nxv2i32_triscv.vector.tuple_nxv8i8_7t(ptr %base, i64 %vl, ptr %outvl) {2779; CHECK-LABEL: test_vlseg7ff_nxv2i32_triscv.vector.tuple_nxv8i8_7t:2780; CHECK: # %bb.0: # %entry2781; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma2782; CHECK-NEXT: vlseg7e32ff.v v7, (a0)2783; CHECK-NEXT: csrr a0, vl2784; CHECK-NEXT: sd a0, 0(a2)2785; CHECK-NEXT: ret2786entry:2787 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) poison, ptr %base, i64 %vl, i64 5)2788 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 02789 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)2790 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 12791 store i64 %3, ptr %outvl2792 ret <vscale x 2 x i32> %22793}2794 2795define <vscale x 2 x i32> @test_vlseg7ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2796; CHECK-LABEL: test_vlseg7ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_7t:2797; CHECK: # %bb.0: # %entry2798; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu2799; CHECK-NEXT: vmv1r.v v7, v82800; CHECK-NEXT: vmv1r.v v8, v92801; CHECK-NEXT: vmv1r.v v9, v102802; CHECK-NEXT: vmv1r.v v10, v112803; CHECK-NEXT: vmv1r.v v11, v122804; CHECK-NEXT: vmv1r.v v12, v132805; CHECK-NEXT: vmv1r.v v13, v142806; CHECK-NEXT: vlseg7e32ff.v v7, (a0), v0.t2807; CHECK-NEXT: csrr a0, vl2808; CHECK-NEXT: sd a0, 0(a2)2809; CHECK-NEXT: ret2810entry:2811 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)2812 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 02813 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)2814 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 12815 store i64 %3, ptr %outvl2816 ret <vscale x 2 x i32> %22817}2818 2819define <vscale x 1 x i32> @test_vlseg8ff_nxv1i32_triscv.vector.tuple_nxv4i8_8t(ptr %base, i64 %vl, ptr %outvl) {2820; CHECK-LABEL: test_vlseg8ff_nxv1i32_triscv.vector.tuple_nxv4i8_8t:2821; CHECK: # %bb.0: # %entry2822; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma2823; CHECK-NEXT: vlseg8e32ff.v v7, (a0)2824; CHECK-NEXT: csrr a0, vl2825; CHECK-NEXT: sd a0, 0(a2)2826; CHECK-NEXT: ret2827entry:2828 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) poison, ptr %base, i64 %vl, i64 5)2829 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 02830 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)2831 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 12832 store i64 %3, ptr %outvl2833 ret <vscale x 1 x i32> %22834}2835 2836define <vscale x 1 x i32> @test_vlseg8ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2837; CHECK-LABEL: test_vlseg8ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_8t:2838; CHECK: # %bb.0: # %entry2839; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu2840; CHECK-NEXT: vmv1r.v v7, v82841; CHECK-NEXT: vmv1r.v v8, v92842; CHECK-NEXT: vmv1r.v v9, v102843; CHECK-NEXT: vmv1r.v v10, v112844; CHECK-NEXT: vmv1r.v v11, v122845; CHECK-NEXT: vmv1r.v v12, v132846; CHECK-NEXT: vmv1r.v v13, v142847; CHECK-NEXT: vmv1r.v v14, v152848; CHECK-NEXT: vlseg8e32ff.v v7, (a0), v0.t2849; CHECK-NEXT: csrr a0, vl2850; CHECK-NEXT: sd a0, 0(a2)2851; CHECK-NEXT: ret2852entry:2853 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)2854 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 02855 %2 = call <vscale x 1 x i32> @llvm.riscv.tuple.extract.nxv1i32.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)2856 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 12857 store i64 %3, ptr %outvl2858 ret <vscale x 1 x i32> %22859}2860 2861define <vscale x 2 x i32> @test_vlseg8ff_nxv2i32_triscv.vector.tuple_nxv8i8_8t(ptr %base, i64 %vl, ptr %outvl) {2862; CHECK-LABEL: test_vlseg8ff_nxv2i32_triscv.vector.tuple_nxv8i8_8t:2863; CHECK: # %bb.0: # %entry2864; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma2865; CHECK-NEXT: vlseg8e32ff.v v7, (a0)2866; CHECK-NEXT: csrr a0, vl2867; CHECK-NEXT: sd a0, 0(a2)2868; CHECK-NEXT: ret2869entry:2870 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) poison, ptr %base, i64 %vl, i64 5)2871 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 02872 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)2873 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 12874 store i64 %3, ptr %outvl2875 ret <vscale x 2 x i32> %22876}2877 2878define <vscale x 2 x i32> @test_vlseg8ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2879; CHECK-LABEL: test_vlseg8ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_8t:2880; CHECK: # %bb.0: # %entry2881; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu2882; CHECK-NEXT: vmv1r.v v7, v82883; CHECK-NEXT: vmv1r.v v8, v92884; CHECK-NEXT: vmv1r.v v9, v102885; CHECK-NEXT: vmv1r.v v10, v112886; CHECK-NEXT: vmv1r.v v11, v122887; CHECK-NEXT: vmv1r.v v12, v132888; CHECK-NEXT: vmv1r.v v13, v142889; CHECK-NEXT: vmv1r.v v14, v152890; CHECK-NEXT: vlseg8e32ff.v v7, (a0), v0.t2891; CHECK-NEXT: csrr a0, vl2892; CHECK-NEXT: sd a0, 0(a2)2893; CHECK-NEXT: ret2894entry:2895 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)2896 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 02897 %2 = call <vscale x 2 x i32> @llvm.riscv.tuple.extract.nxv2i32.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)2898 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 12899 store i64 %3, ptr %outvl2900 ret <vscale x 2 x i32> %22901}2902 2903define <vscale x 1 x i64> @test_vlseg2ff_nxv1i64_triscv.vector.tuple_nxv8i8_2t(ptr %base, i64 %vl, ptr %outvl) {2904; CHECK-LABEL: test_vlseg2ff_nxv1i64_triscv.vector.tuple_nxv8i8_2t:2905; CHECK: # %bb.0: # %entry2906; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma2907; CHECK-NEXT: vlseg2e64ff.v v7, (a0)2908; CHECK-NEXT: csrr a0, vl2909; CHECK-NEXT: sd a0, 0(a2)2910; CHECK-NEXT: ret2911entry:2912 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) poison, ptr %base, i64 %vl, i64 6)2913 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 02914 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)2915 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 12916 store i64 %3, ptr %outvl2917 ret <vscale x 1 x i64> %22918}2919 2920define <vscale x 1 x i64> @test_vlseg2ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {2921; CHECK-LABEL: test_vlseg2ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_2t:2922; CHECK: # %bb.0: # %entry2923; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu2924; CHECK-NEXT: vmv1r.v v7, v82925; CHECK-NEXT: vmv1r.v v8, v92926; CHECK-NEXT: vlseg2e64ff.v v7, (a0), v0.t2927; CHECK-NEXT: csrr a0, vl2928; CHECK-NEXT: sd a0, 0(a2)2929; CHECK-NEXT: ret2930entry:2931 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)2932 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 02933 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)2934 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 12935 store i64 %3, ptr %outvl2936 ret <vscale x 1 x i64> %22937}2938 2939define <vscale x 2 x i64> @test_vlseg2ff_nxv2i64_triscv.vector.tuple_nxv16i8_2t(ptr %base, i64 %vl, ptr %outvl) {2940; CHECK-LABEL: test_vlseg2ff_nxv2i64_triscv.vector.tuple_nxv16i8_2t:2941; CHECK: # %bb.0: # %entry2942; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma2943; CHECK-NEXT: vlseg2e64ff.v v6, (a0)2944; CHECK-NEXT: csrr a0, vl2945; CHECK-NEXT: sd a0, 0(a2)2946; CHECK-NEXT: ret2947entry:2948 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, ptr %base, i64 %vl, i64 6)2949 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 02950 %2 = call <vscale x 2 x i64> @llvm.riscv.tuple.extract.nxv2i64.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)2951 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 12952 store i64 %3, ptr %outvl2953 ret <vscale x 2 x i64> %22954}2955 2956define <vscale x 2 x i64> @test_vlseg2ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {2957; CHECK-LABEL: test_vlseg2ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_2t:2958; CHECK: # %bb.0: # %entry2959; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu2960; CHECK-NEXT: vmv2r.v v6, v82961; CHECK-NEXT: vmv2r.v v8, v102962; CHECK-NEXT: vlseg2e64ff.v v6, (a0), v0.t2963; CHECK-NEXT: csrr a0, vl2964; CHECK-NEXT: sd a0, 0(a2)2965; CHECK-NEXT: ret2966entry:2967 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 6)2968 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 02969 %2 = call <vscale x 2 x i64> @llvm.riscv.tuple.extract.nxv2i64.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)2970 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 12971 store i64 %3, ptr %outvl2972 ret <vscale x 2 x i64> %22973}2974 2975define <vscale x 4 x i64> @test_vlseg2ff_nxv4i64_triscv.vector.tuple_nxv32i8_2t(ptr %base, i64 %vl, ptr %outvl) {2976; CHECK-LABEL: test_vlseg2ff_nxv4i64_triscv.vector.tuple_nxv32i8_2t:2977; CHECK: # %bb.0: # %entry2978; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, ma2979; CHECK-NEXT: vlseg2e64ff.v v4, (a0)2980; CHECK-NEXT: csrr a0, vl2981; CHECK-NEXT: sd a0, 0(a2)2982; CHECK-NEXT: ret2983entry:2984 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) poison, ptr %base, i64 %vl, i64 6)2985 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 02986 %2 = call <vscale x 4 x i64> @llvm.riscv.tuple.extract.nxv4i64.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)2987 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 12988 store i64 %3, ptr %outvl2989 ret <vscale x 4 x i64> %22990}2991 2992define <vscale x 4 x i64> @test_vlseg2ff_mask_nxv4i64_triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {2993; CHECK-LABEL: test_vlseg2ff_mask_nxv4i64_triscv.vector.tuple_nxv32i8_2t:2994; CHECK: # %bb.0: # %entry2995; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, mu2996; CHECK-NEXT: vmv4r.v v4, v82997; CHECK-NEXT: vmv4r.v v8, v122998; CHECK-NEXT: vlseg2e64ff.v v4, (a0), v0.t2999; CHECK-NEXT: csrr a0, vl3000; CHECK-NEXT: sd a0, 0(a2)3001; CHECK-NEXT: ret3002entry:3003 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 6)3004 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 03005 %2 = call <vscale x 4 x i64> @llvm.riscv.tuple.extract.nxv4i64.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)3006 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 13007 store i64 %3, ptr %outvl3008 ret <vscale x 4 x i64> %23009}3010 3011define <vscale x 1 x i64> @test_vlseg3ff_nxv1i64_triscv.vector.tuple_nxv8i8_3t(ptr %base, i64 %vl, ptr %outvl) {3012; CHECK-LABEL: test_vlseg3ff_nxv1i64_triscv.vector.tuple_nxv8i8_3t:3013; CHECK: # %bb.0: # %entry3014; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma3015; CHECK-NEXT: vlseg3e64ff.v v7, (a0)3016; CHECK-NEXT: csrr a0, vl3017; CHECK-NEXT: sd a0, 0(a2)3018; CHECK-NEXT: ret3019entry:3020 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) poison, ptr %base, i64 %vl, i64 6)3021 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 03022 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)3023 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 13024 store i64 %3, ptr %outvl3025 ret <vscale x 1 x i64> %23026}3027 3028define <vscale x 1 x i64> @test_vlseg3ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3029; CHECK-LABEL: test_vlseg3ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_3t:3030; CHECK: # %bb.0: # %entry3031; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu3032; CHECK-NEXT: vmv1r.v v7, v83033; CHECK-NEXT: vmv1r.v v8, v93034; CHECK-NEXT: vmv1r.v v9, v103035; CHECK-NEXT: vlseg3e64ff.v v7, (a0), v0.t3036; CHECK-NEXT: csrr a0, vl3037; CHECK-NEXT: sd a0, 0(a2)3038; CHECK-NEXT: ret3039entry:3040 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)3041 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 03042 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)3043 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 13044 store i64 %3, ptr %outvl3045 ret <vscale x 1 x i64> %23046}3047 3048define <vscale x 2 x i64> @test_vlseg3ff_nxv2i64_triscv.vector.tuple_nxv16i8_3t(ptr %base, i64 %vl, ptr %outvl) {3049; CHECK-LABEL: test_vlseg3ff_nxv2i64_triscv.vector.tuple_nxv16i8_3t:3050; CHECK: # %bb.0: # %entry3051; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma3052; CHECK-NEXT: vlseg3e64ff.v v6, (a0)3053; CHECK-NEXT: csrr a0, vl3054; CHECK-NEXT: sd a0, 0(a2)3055; CHECK-NEXT: ret3056entry:3057 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, ptr %base, i64 %vl, i64 6)3058 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 03059 %2 = call <vscale x 2 x i64> @llvm.riscv.tuple.extract.nxv2i64.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)3060 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 13061 store i64 %3, ptr %outvl3062 ret <vscale x 2 x i64> %23063}3064 3065define <vscale x 2 x i64> @test_vlseg3ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {3066; CHECK-LABEL: test_vlseg3ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_3t:3067; CHECK: # %bb.0: # %entry3068; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu3069; CHECK-NEXT: vmv2r.v v6, v83070; CHECK-NEXT: vmv2r.v v8, v103071; CHECK-NEXT: vmv2r.v v10, v123072; CHECK-NEXT: vlseg3e64ff.v v6, (a0), v0.t3073; CHECK-NEXT: csrr a0, vl3074; CHECK-NEXT: sd a0, 0(a2)3075; CHECK-NEXT: ret3076entry:3077 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 6)3078 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 03079 %2 = call <vscale x 2 x i64> @llvm.riscv.tuple.extract.nxv2i64.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)3080 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 13081 store i64 %3, ptr %outvl3082 ret <vscale x 2 x i64> %23083}3084 3085define <vscale x 1 x i64> @test_vlseg4ff_nxv1i64_triscv.vector.tuple_nxv8i8_4t(ptr %base, i64 %vl, ptr %outvl) {3086; CHECK-LABEL: test_vlseg4ff_nxv1i64_triscv.vector.tuple_nxv8i8_4t:3087; CHECK: # %bb.0: # %entry3088; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma3089; CHECK-NEXT: vlseg4e64ff.v v7, (a0)3090; CHECK-NEXT: csrr a0, vl3091; CHECK-NEXT: sd a0, 0(a2)3092; CHECK-NEXT: ret3093entry:3094 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, ptr %base, i64 %vl, i64 6)3095 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 03096 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)3097 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 13098 store i64 %3, ptr %outvl3099 ret <vscale x 1 x i64> %23100}3101 3102define <vscale x 1 x i64> @test_vlseg4ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3103; CHECK-LABEL: test_vlseg4ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_4t:3104; CHECK: # %bb.0: # %entry3105; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu3106; CHECK-NEXT: vmv1r.v v7, v83107; CHECK-NEXT: vmv1r.v v8, v93108; CHECK-NEXT: vmv1r.v v9, v103109; CHECK-NEXT: vmv1r.v v10, v113110; CHECK-NEXT: vlseg4e64ff.v v7, (a0), v0.t3111; CHECK-NEXT: csrr a0, vl3112; CHECK-NEXT: sd a0, 0(a2)3113; CHECK-NEXT: ret3114entry:3115 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)3116 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 03117 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)3118 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 13119 store i64 %3, ptr %outvl3120 ret <vscale x 1 x i64> %23121}3122 3123define <vscale x 2 x i64> @test_vlseg4ff_nxv2i64_triscv.vector.tuple_nxv16i8_4t(ptr %base, i64 %vl, ptr %outvl) {3124; CHECK-LABEL: test_vlseg4ff_nxv2i64_triscv.vector.tuple_nxv16i8_4t:3125; CHECK: # %bb.0: # %entry3126; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma3127; CHECK-NEXT: vlseg4e64ff.v v6, (a0)3128; CHECK-NEXT: csrr a0, vl3129; CHECK-NEXT: sd a0, 0(a2)3130; CHECK-NEXT: ret3131entry:3132 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) poison, ptr %base, i64 %vl, i64 6)3133 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 03134 %2 = call <vscale x 2 x i64> @llvm.riscv.tuple.extract.nxv2i64.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)3135 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 13136 store i64 %3, ptr %outvl3137 ret <vscale x 2 x i64> %23138}3139 3140define <vscale x 2 x i64> @test_vlseg4ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {3141; CHECK-LABEL: test_vlseg4ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_4t:3142; CHECK: # %bb.0: # %entry3143; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu3144; CHECK-NEXT: vmv2r.v v6, v83145; CHECK-NEXT: vmv2r.v v8, v103146; CHECK-NEXT: vmv2r.v v10, v123147; CHECK-NEXT: vmv2r.v v12, v143148; CHECK-NEXT: vlseg4e64ff.v v6, (a0), v0.t3149; CHECK-NEXT: csrr a0, vl3150; CHECK-NEXT: sd a0, 0(a2)3151; CHECK-NEXT: ret3152entry:3153 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 6)3154 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 03155 %2 = call <vscale x 2 x i64> @llvm.riscv.tuple.extract.nxv2i64.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)3156 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 13157 store i64 %3, ptr %outvl3158 ret <vscale x 2 x i64> %23159}3160 3161define <vscale x 1 x i64> @test_vlseg5ff_nxv1i64_triscv.vector.tuple_nxv8i8_5t(ptr %base, i64 %vl, ptr %outvl) {3162; CHECK-LABEL: test_vlseg5ff_nxv1i64_triscv.vector.tuple_nxv8i8_5t:3163; CHECK: # %bb.0: # %entry3164; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma3165; CHECK-NEXT: vlseg5e64ff.v v7, (a0)3166; CHECK-NEXT: csrr a0, vl3167; CHECK-NEXT: sd a0, 0(a2)3168; CHECK-NEXT: ret3169entry:3170 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) poison, ptr %base, i64 %vl, i64 6)3171 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 03172 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)3173 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 13174 store i64 %3, ptr %outvl3175 ret <vscale x 1 x i64> %23176}3177 3178define <vscale x 1 x i64> @test_vlseg5ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3179; CHECK-LABEL: test_vlseg5ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_5t:3180; CHECK: # %bb.0: # %entry3181; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu3182; CHECK-NEXT: vmv1r.v v7, v83183; CHECK-NEXT: vmv1r.v v8, v93184; CHECK-NEXT: vmv1r.v v9, v103185; CHECK-NEXT: vmv1r.v v10, v113186; CHECK-NEXT: vmv1r.v v11, v123187; CHECK-NEXT: vlseg5e64ff.v v7, (a0), v0.t3188; CHECK-NEXT: csrr a0, vl3189; CHECK-NEXT: sd a0, 0(a2)3190; CHECK-NEXT: ret3191entry:3192 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)3193 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 03194 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)3195 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 13196 store i64 %3, ptr %outvl3197 ret <vscale x 1 x i64> %23198}3199 3200define <vscale x 1 x i64> @test_vlseg6ff_nxv1i64_triscv.vector.tuple_nxv8i8_6t(ptr %base, i64 %vl, ptr %outvl) {3201; CHECK-LABEL: test_vlseg6ff_nxv1i64_triscv.vector.tuple_nxv8i8_6t:3202; CHECK: # %bb.0: # %entry3203; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma3204; CHECK-NEXT: vlseg6e64ff.v v7, (a0)3205; CHECK-NEXT: csrr a0, vl3206; CHECK-NEXT: sd a0, 0(a2)3207; CHECK-NEXT: ret3208entry:3209 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) poison, ptr %base, i64 %vl, i64 6)3210 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 03211 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)3212 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 13213 store i64 %3, ptr %outvl3214 ret <vscale x 1 x i64> %23215}3216 3217define <vscale x 1 x i64> @test_vlseg6ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3218; CHECK-LABEL: test_vlseg6ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_6t:3219; CHECK: # %bb.0: # %entry3220; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu3221; CHECK-NEXT: vmv1r.v v7, v83222; CHECK-NEXT: vmv1r.v v8, v93223; CHECK-NEXT: vmv1r.v v9, v103224; CHECK-NEXT: vmv1r.v v10, v113225; CHECK-NEXT: vmv1r.v v11, v123226; CHECK-NEXT: vmv1r.v v12, v133227; CHECK-NEXT: vlseg6e64ff.v v7, (a0), v0.t3228; CHECK-NEXT: csrr a0, vl3229; CHECK-NEXT: sd a0, 0(a2)3230; CHECK-NEXT: ret3231entry:3232 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)3233 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 03234 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)3235 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 13236 store i64 %3, ptr %outvl3237 ret <vscale x 1 x i64> %23238}3239 3240define <vscale x 1 x i64> @test_vlseg7ff_nxv1i64_triscv.vector.tuple_nxv8i8_7t(ptr %base, i64 %vl, ptr %outvl) {3241; CHECK-LABEL: test_vlseg7ff_nxv1i64_triscv.vector.tuple_nxv8i8_7t:3242; CHECK: # %bb.0: # %entry3243; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma3244; CHECK-NEXT: vlseg7e64ff.v v7, (a0)3245; CHECK-NEXT: csrr a0, vl3246; CHECK-NEXT: sd a0, 0(a2)3247; CHECK-NEXT: ret3248entry:3249 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) poison, ptr %base, i64 %vl, i64 6)3250 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 03251 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)3252 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 13253 store i64 %3, ptr %outvl3254 ret <vscale x 1 x i64> %23255}3256 3257define <vscale x 1 x i64> @test_vlseg7ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3258; CHECK-LABEL: test_vlseg7ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_7t:3259; CHECK: # %bb.0: # %entry3260; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu3261; CHECK-NEXT: vmv1r.v v7, v83262; CHECK-NEXT: vmv1r.v v8, v93263; CHECK-NEXT: vmv1r.v v9, v103264; CHECK-NEXT: vmv1r.v v10, v113265; CHECK-NEXT: vmv1r.v v11, v123266; CHECK-NEXT: vmv1r.v v12, v133267; CHECK-NEXT: vmv1r.v v13, v143268; CHECK-NEXT: vlseg7e64ff.v v7, (a0), v0.t3269; CHECK-NEXT: csrr a0, vl3270; CHECK-NEXT: sd a0, 0(a2)3271; CHECK-NEXT: ret3272entry:3273 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)3274 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 03275 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)3276 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 13277 store i64 %3, ptr %outvl3278 ret <vscale x 1 x i64> %23279}3280 3281define <vscale x 1 x i64> @test_vlseg8ff_nxv1i64_triscv.vector.tuple_nxv8i8_8t(ptr %base, i64 %vl, ptr %outvl) {3282; CHECK-LABEL: test_vlseg8ff_nxv1i64_triscv.vector.tuple_nxv8i8_8t:3283; CHECK: # %bb.0: # %entry3284; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma3285; CHECK-NEXT: vlseg8e64ff.v v7, (a0)3286; CHECK-NEXT: csrr a0, vl3287; CHECK-NEXT: sd a0, 0(a2)3288; CHECK-NEXT: ret3289entry:3290 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) poison, ptr %base, i64 %vl, i64 6)3291 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 03292 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)3293 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 13294 store i64 %3, ptr %outvl3295 ret <vscale x 1 x i64> %23296}3297 3298define <vscale x 1 x i64> @test_vlseg8ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3299; CHECK-LABEL: test_vlseg8ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_8t:3300; CHECK: # %bb.0: # %entry3301; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu3302; CHECK-NEXT: vmv1r.v v7, v83303; CHECK-NEXT: vmv1r.v v8, v93304; CHECK-NEXT: vmv1r.v v9, v103305; CHECK-NEXT: vmv1r.v v10, v113306; CHECK-NEXT: vmv1r.v v11, v123307; CHECK-NEXT: vmv1r.v v12, v133308; CHECK-NEXT: vmv1r.v v13, v143309; CHECK-NEXT: vmv1r.v v14, v153310; CHECK-NEXT: vlseg8e64ff.v v7, (a0), v0.t3311; CHECK-NEXT: csrr a0, vl3312; CHECK-NEXT: sd a0, 0(a2)3313; CHECK-NEXT: ret3314entry:3315 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)3316 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 03317 %2 = call <vscale x 1 x i64> @llvm.riscv.tuple.extract.nxv1i64.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)3318 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 13319 store i64 %3, ptr %outvl3320 ret <vscale x 1 x i64> %23321}3322 3323define <vscale x 1 x half> @test_vlseg2ff_nxv1f16_triscv.vector.tuple_nxv2i8_2t(ptr %base, i64 %vl, ptr %outvl) {3324; CHECK-LABEL: test_vlseg2ff_nxv1f16_triscv.vector.tuple_nxv2i8_2t:3325; CHECK: # %bb.0: # %entry3326; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma3327; CHECK-NEXT: vlseg2e16ff.v v7, (a0)3328; CHECK-NEXT: csrr a0, vl3329; CHECK-NEXT: sd a0, 0(a2)3330; CHECK-NEXT: ret3331entry:3332 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)3333 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 03334 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %1, i32 1)3335 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 13336 store i64 %3, ptr %outvl3337 ret <vscale x 1 x half> %23338}3339 3340define <vscale x 1 x half> @test_vlseg2ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3341; CHECK-LABEL: test_vlseg2ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_2t:3342; CHECK: # %bb.0: # %entry3343; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu3344; CHECK-NEXT: vmv1r.v v7, v83345; CHECK-NEXT: vmv1r.v v8, v93346; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t3347; CHECK-NEXT: csrr a0, vl3348; CHECK-NEXT: sd a0, 0(a2)3349; CHECK-NEXT: ret3350entry:3351 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv2i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)3352 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 03353 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %1, i32 1)3354 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 13355 store i64 %3, ptr %outvl3356 ret <vscale x 1 x half> %23357}3358 3359define <vscale x 2 x half> @test_vlseg2ff_nxv2f16_triscv.vector.tuple_nxv4i8_2t(ptr %base, i64 %vl, ptr %outvl) {3360; CHECK-LABEL: test_vlseg2ff_nxv2f16_triscv.vector.tuple_nxv4i8_2t:3361; CHECK: # %bb.0: # %entry3362; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma3363; CHECK-NEXT: vlseg2e16ff.v v7, (a0)3364; CHECK-NEXT: csrr a0, vl3365; CHECK-NEXT: sd a0, 0(a2)3366; CHECK-NEXT: ret3367entry:3368 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)3369 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 03370 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)3371 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 13372 store i64 %3, ptr %outvl3373 ret <vscale x 2 x half> %23374}3375 3376define <vscale x 2 x half> @test_vlseg2ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {3377; CHECK-LABEL: test_vlseg2ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_2t:3378; CHECK: # %bb.0: # %entry3379; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu3380; CHECK-NEXT: vmv1r.v v7, v83381; CHECK-NEXT: vmv1r.v v8, v93382; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t3383; CHECK-NEXT: csrr a0, vl3384; CHECK-NEXT: sd a0, 0(a2)3385; CHECK-NEXT: ret3386entry:3387 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)3388 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 03389 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)3390 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 13391 store i64 %3, ptr %outvl3392 ret <vscale x 2 x half> %23393}3394 3395define <vscale x 4 x half> @test_vlseg2ff_nxv4f16_triscv.vector.tuple_nxv8i8_2t(ptr %base, i64 %vl, ptr %outvl) {3396; CHECK-LABEL: test_vlseg2ff_nxv4f16_triscv.vector.tuple_nxv8i8_2t:3397; CHECK: # %bb.0: # %entry3398; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma3399; CHECK-NEXT: vlseg2e16ff.v v7, (a0)3400; CHECK-NEXT: csrr a0, vl3401; CHECK-NEXT: sd a0, 0(a2)3402; CHECK-NEXT: ret3403entry:3404 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)3405 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 03406 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)3407 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 13408 store i64 %3, ptr %outvl3409 ret <vscale x 4 x half> %23410}3411 3412define <vscale x 4 x half> @test_vlseg2ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {3413; CHECK-LABEL: test_vlseg2ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_2t:3414; CHECK: # %bb.0: # %entry3415; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu3416; CHECK-NEXT: vmv1r.v v7, v83417; CHECK-NEXT: vmv1r.v v8, v93418; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t3419; CHECK-NEXT: csrr a0, vl3420; CHECK-NEXT: sd a0, 0(a2)3421; CHECK-NEXT: ret3422entry:3423 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)3424 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 03425 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)3426 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 13427 store i64 %3, ptr %outvl3428 ret <vscale x 4 x half> %23429}3430 3431define <vscale x 8 x half> @test_vlseg2ff_nxv8f16_triscv.vector.tuple_nxv16i8_2t(ptr %base, i64 %vl, ptr %outvl) {3432; CHECK-LABEL: test_vlseg2ff_nxv8f16_triscv.vector.tuple_nxv16i8_2t:3433; CHECK: # %bb.0: # %entry3434; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma3435; CHECK-NEXT: vlseg2e16ff.v v6, (a0)3436; CHECK-NEXT: csrr a0, vl3437; CHECK-NEXT: sd a0, 0(a2)3438; CHECK-NEXT: ret3439entry:3440 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)3441 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 03442 %2 = call <vscale x 8 x half> @llvm.riscv.tuple.extract.nxv8f16.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)3443 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 13444 store i64 %3, ptr %outvl3445 ret <vscale x 8 x half> %23446}3447 3448define <vscale x 8 x half> @test_vlseg2ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {3449; CHECK-LABEL: test_vlseg2ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_2t:3450; CHECK: # %bb.0: # %entry3451; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu3452; CHECK-NEXT: vmv2r.v v6, v83453; CHECK-NEXT: vmv2r.v v8, v103454; CHECK-NEXT: vlseg2e16ff.v v6, (a0), v0.t3455; CHECK-NEXT: csrr a0, vl3456; CHECK-NEXT: sd a0, 0(a2)3457; CHECK-NEXT: ret3458entry:3459 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)3460 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 03461 %2 = call <vscale x 8 x half> @llvm.riscv.tuple.extract.nxv8f16.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)3462 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 13463 store i64 %3, ptr %outvl3464 ret <vscale x 8 x half> %23465}3466 3467define <vscale x 16 x half> @test_vlseg2ff_nxv16f16_triscv.vector.tuple_nxv32i8_2t(ptr %base, i64 %vl, ptr %outvl) {3468; CHECK-LABEL: test_vlseg2ff_nxv16f16_triscv.vector.tuple_nxv32i8_2t:3469; CHECK: # %bb.0: # %entry3470; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma3471; CHECK-NEXT: vlseg2e16ff.v v4, (a0)3472; CHECK-NEXT: csrr a0, vl3473; CHECK-NEXT: sd a0, 0(a2)3474; CHECK-NEXT: ret3475entry:3476 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)3477 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 03478 %2 = call <vscale x 16 x half> @llvm.riscv.tuple.extract.nxv16f16.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)3479 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 13480 store i64 %3, ptr %outvl3481 ret <vscale x 16 x half> %23482}3483 3484define <vscale x 16 x half> @test_vlseg2ff_mask_nxv16f16_triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 16 x i1> %mask, ptr %outvl) {3485; CHECK-LABEL: test_vlseg2ff_mask_nxv16f16_triscv.vector.tuple_nxv32i8_2t:3486; CHECK: # %bb.0: # %entry3487; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu3488; CHECK-NEXT: vmv4r.v v4, v83489; CHECK-NEXT: vmv4r.v v8, v123490; CHECK-NEXT: vlseg2e16ff.v v4, (a0), v0.t3491; CHECK-NEXT: csrr a0, vl3492; CHECK-NEXT: sd a0, 0(a2)3493; CHECK-NEXT: ret3494entry:3495 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv16i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, <vscale x 16 x i1> %mask, i64 %vl, i64 1, i64 4)3496 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 03497 %2 = call <vscale x 16 x half> @llvm.riscv.tuple.extract.nxv16f16.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)3498 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 13499 store i64 %3, ptr %outvl3500 ret <vscale x 16 x half> %23501}3502 3503define <vscale x 1 x half> @test_vlseg3ff_nxv1f16_triscv.vector.tuple_nxv2i8_3t(ptr %base, i64 %vl, ptr %outvl) {3504; CHECK-LABEL: test_vlseg3ff_nxv1f16_triscv.vector.tuple_nxv2i8_3t:3505; CHECK: # %bb.0: # %entry3506; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma3507; CHECK-NEXT: vlseg3e16ff.v v7, (a0)3508; CHECK-NEXT: csrr a0, vl3509; CHECK-NEXT: sd a0, 0(a2)3510; CHECK-NEXT: ret3511entry:3512 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)3513 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 03514 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %1, i32 1)3515 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 13516 store i64 %3, ptr %outvl3517 ret <vscale x 1 x half> %23518}3519 3520define <vscale x 1 x half> @test_vlseg3ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3521; CHECK-LABEL: test_vlseg3ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_3t:3522; CHECK: # %bb.0: # %entry3523; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu3524; CHECK-NEXT: vmv1r.v v7, v83525; CHECK-NEXT: vmv1r.v v8, v93526; CHECK-NEXT: vmv1r.v v9, v103527; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t3528; CHECK-NEXT: csrr a0, vl3529; CHECK-NEXT: sd a0, 0(a2)3530; CHECK-NEXT: ret3531entry:3532 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv2i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)3533 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 03534 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %1, i32 1)3535 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 13536 store i64 %3, ptr %outvl3537 ret <vscale x 1 x half> %23538}3539 3540define <vscale x 2 x half> @test_vlseg3ff_nxv2f16_triscv.vector.tuple_nxv4i8_3t(ptr %base, i64 %vl, ptr %outvl) {3541; CHECK-LABEL: test_vlseg3ff_nxv2f16_triscv.vector.tuple_nxv4i8_3t:3542; CHECK: # %bb.0: # %entry3543; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma3544; CHECK-NEXT: vlseg3e16ff.v v7, (a0)3545; CHECK-NEXT: csrr a0, vl3546; CHECK-NEXT: sd a0, 0(a2)3547; CHECK-NEXT: ret3548entry:3549 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)3550 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 03551 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)3552 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 13553 store i64 %3, ptr %outvl3554 ret <vscale x 2 x half> %23555}3556 3557define <vscale x 2 x half> @test_vlseg3ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {3558; CHECK-LABEL: test_vlseg3ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_3t:3559; CHECK: # %bb.0: # %entry3560; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu3561; CHECK-NEXT: vmv1r.v v7, v83562; CHECK-NEXT: vmv1r.v v8, v93563; CHECK-NEXT: vmv1r.v v9, v103564; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t3565; CHECK-NEXT: csrr a0, vl3566; CHECK-NEXT: sd a0, 0(a2)3567; CHECK-NEXT: ret3568entry:3569 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)3570 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 03571 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)3572 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 13573 store i64 %3, ptr %outvl3574 ret <vscale x 2 x half> %23575}3576 3577define <vscale x 4 x half> @test_vlseg3ff_nxv4f16_triscv.vector.tuple_nxv8i8_3t(ptr %base, i64 %vl, ptr %outvl) {3578; CHECK-LABEL: test_vlseg3ff_nxv4f16_triscv.vector.tuple_nxv8i8_3t:3579; CHECK: # %bb.0: # %entry3580; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma3581; CHECK-NEXT: vlseg3e16ff.v v7, (a0)3582; CHECK-NEXT: csrr a0, vl3583; CHECK-NEXT: sd a0, 0(a2)3584; CHECK-NEXT: ret3585entry:3586 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)3587 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 03588 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)3589 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 13590 store i64 %3, ptr %outvl3591 ret <vscale x 4 x half> %23592}3593 3594define <vscale x 4 x half> @test_vlseg3ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {3595; CHECK-LABEL: test_vlseg3ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_3t:3596; CHECK: # %bb.0: # %entry3597; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu3598; CHECK-NEXT: vmv1r.v v7, v83599; CHECK-NEXT: vmv1r.v v8, v93600; CHECK-NEXT: vmv1r.v v9, v103601; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t3602; CHECK-NEXT: csrr a0, vl3603; CHECK-NEXT: sd a0, 0(a2)3604; CHECK-NEXT: ret3605entry:3606 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)3607 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 03608 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)3609 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 13610 store i64 %3, ptr %outvl3611 ret <vscale x 4 x half> %23612}3613 3614define <vscale x 8 x half> @test_vlseg3ff_nxv8f16_triscv.vector.tuple_nxv16i8_3t(ptr %base, i64 %vl, ptr %outvl) {3615; CHECK-LABEL: test_vlseg3ff_nxv8f16_triscv.vector.tuple_nxv16i8_3t:3616; CHECK: # %bb.0: # %entry3617; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma3618; CHECK-NEXT: vlseg3e16ff.v v6, (a0)3619; CHECK-NEXT: csrr a0, vl3620; CHECK-NEXT: sd a0, 0(a2)3621; CHECK-NEXT: ret3622entry:3623 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)3624 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 03625 %2 = call <vscale x 8 x half> @llvm.riscv.tuple.extract.nxv8f16.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)3626 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 13627 store i64 %3, ptr %outvl3628 ret <vscale x 8 x half> %23629}3630 3631define <vscale x 8 x half> @test_vlseg3ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {3632; CHECK-LABEL: test_vlseg3ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_3t:3633; CHECK: # %bb.0: # %entry3634; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu3635; CHECK-NEXT: vmv2r.v v6, v83636; CHECK-NEXT: vmv2r.v v8, v103637; CHECK-NEXT: vmv2r.v v10, v123638; CHECK-NEXT: vlseg3e16ff.v v6, (a0), v0.t3639; CHECK-NEXT: csrr a0, vl3640; CHECK-NEXT: sd a0, 0(a2)3641; CHECK-NEXT: ret3642entry:3643 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)3644 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 03645 %2 = call <vscale x 8 x half> @llvm.riscv.tuple.extract.nxv8f16.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)3646 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 13647 store i64 %3, ptr %outvl3648 ret <vscale x 8 x half> %23649}3650 3651define <vscale x 1 x half> @test_vlseg4ff_nxv1f16_triscv.vector.tuple_nxv2i8_4t(ptr %base, i64 %vl, ptr %outvl) {3652; CHECK-LABEL: test_vlseg4ff_nxv1f16_triscv.vector.tuple_nxv2i8_4t:3653; CHECK: # %bb.0: # %entry3654; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma3655; CHECK-NEXT: vlseg4e16ff.v v7, (a0)3656; CHECK-NEXT: csrr a0, vl3657; CHECK-NEXT: sd a0, 0(a2)3658; CHECK-NEXT: ret3659entry:3660 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)3661 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 03662 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %1, i32 1)3663 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 13664 store i64 %3, ptr %outvl3665 ret <vscale x 1 x half> %23666}3667 3668define <vscale x 1 x half> @test_vlseg4ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3669; CHECK-LABEL: test_vlseg4ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_4t:3670; CHECK: # %bb.0: # %entry3671; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu3672; CHECK-NEXT: vmv1r.v v7, v83673; CHECK-NEXT: vmv1r.v v8, v93674; CHECK-NEXT: vmv1r.v v9, v103675; CHECK-NEXT: vmv1r.v v10, v113676; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t3677; CHECK-NEXT: csrr a0, vl3678; CHECK-NEXT: sd a0, 0(a2)3679; CHECK-NEXT: ret3680entry:3681 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv2i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)3682 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 03683 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %1, i32 1)3684 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 13685 store i64 %3, ptr %outvl3686 ret <vscale x 1 x half> %23687}3688 3689define <vscale x 2 x half> @test_vlseg4ff_nxv2f16_triscv.vector.tuple_nxv4i8_4t(ptr %base, i64 %vl, ptr %outvl) {3690; CHECK-LABEL: test_vlseg4ff_nxv2f16_triscv.vector.tuple_nxv4i8_4t:3691; CHECK: # %bb.0: # %entry3692; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma3693; CHECK-NEXT: vlseg4e16ff.v v7, (a0)3694; CHECK-NEXT: csrr a0, vl3695; CHECK-NEXT: sd a0, 0(a2)3696; CHECK-NEXT: ret3697entry:3698 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)3699 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 03700 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)3701 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 13702 store i64 %3, ptr %outvl3703 ret <vscale x 2 x half> %23704}3705 3706define <vscale x 2 x half> @test_vlseg4ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {3707; CHECK-LABEL: test_vlseg4ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_4t:3708; CHECK: # %bb.0: # %entry3709; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu3710; CHECK-NEXT: vmv1r.v v7, v83711; CHECK-NEXT: vmv1r.v v8, v93712; CHECK-NEXT: vmv1r.v v9, v103713; CHECK-NEXT: vmv1r.v v10, v113714; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t3715; CHECK-NEXT: csrr a0, vl3716; CHECK-NEXT: sd a0, 0(a2)3717; CHECK-NEXT: ret3718entry:3719 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)3720 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 03721 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)3722 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 13723 store i64 %3, ptr %outvl3724 ret <vscale x 2 x half> %23725}3726 3727define <vscale x 4 x half> @test_vlseg4ff_nxv4f16_triscv.vector.tuple_nxv8i8_4t(ptr %base, i64 %vl, ptr %outvl) {3728; CHECK-LABEL: test_vlseg4ff_nxv4f16_triscv.vector.tuple_nxv8i8_4t:3729; CHECK: # %bb.0: # %entry3730; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma3731; CHECK-NEXT: vlseg4e16ff.v v7, (a0)3732; CHECK-NEXT: csrr a0, vl3733; CHECK-NEXT: sd a0, 0(a2)3734; CHECK-NEXT: ret3735entry:3736 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)3737 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 03738 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)3739 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 13740 store i64 %3, ptr %outvl3741 ret <vscale x 4 x half> %23742}3743 3744define <vscale x 4 x half> @test_vlseg4ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {3745; CHECK-LABEL: test_vlseg4ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_4t:3746; CHECK: # %bb.0: # %entry3747; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu3748; CHECK-NEXT: vmv1r.v v7, v83749; CHECK-NEXT: vmv1r.v v8, v93750; CHECK-NEXT: vmv1r.v v9, v103751; CHECK-NEXT: vmv1r.v v10, v113752; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t3753; CHECK-NEXT: csrr a0, vl3754; CHECK-NEXT: sd a0, 0(a2)3755; CHECK-NEXT: ret3756entry:3757 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)3758 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 03759 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)3760 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 13761 store i64 %3, ptr %outvl3762 ret <vscale x 4 x half> %23763}3764 3765define <vscale x 8 x half> @test_vlseg4ff_nxv8f16_triscv.vector.tuple_nxv16i8_4t(ptr %base, i64 %vl, ptr %outvl) {3766; CHECK-LABEL: test_vlseg4ff_nxv8f16_triscv.vector.tuple_nxv16i8_4t:3767; CHECK: # %bb.0: # %entry3768; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma3769; CHECK-NEXT: vlseg4e16ff.v v6, (a0)3770; CHECK-NEXT: csrr a0, vl3771; CHECK-NEXT: sd a0, 0(a2)3772; CHECK-NEXT: ret3773entry:3774 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)3775 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 03776 %2 = call <vscale x 8 x half> @llvm.riscv.tuple.extract.nxv8f16.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)3777 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 13778 store i64 %3, ptr %outvl3779 ret <vscale x 8 x half> %23780}3781 3782define <vscale x 8 x half> @test_vlseg4ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {3783; CHECK-LABEL: test_vlseg4ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_4t:3784; CHECK: # %bb.0: # %entry3785; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu3786; CHECK-NEXT: vmv2r.v v6, v83787; CHECK-NEXT: vmv2r.v v8, v103788; CHECK-NEXT: vmv2r.v v10, v123789; CHECK-NEXT: vmv2r.v v12, v143790; CHECK-NEXT: vlseg4e16ff.v v6, (a0), v0.t3791; CHECK-NEXT: csrr a0, vl3792; CHECK-NEXT: sd a0, 0(a2)3793; CHECK-NEXT: ret3794entry:3795 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)3796 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 03797 %2 = call <vscale x 8 x half> @llvm.riscv.tuple.extract.nxv8f16.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)3798 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 13799 store i64 %3, ptr %outvl3800 ret <vscale x 8 x half> %23801}3802 3803define <vscale x 1 x half> @test_vlseg5ff_nxv1f16_triscv.vector.tuple_nxv2i8_5t(ptr %base, i64 %vl, ptr %outvl) {3804; CHECK-LABEL: test_vlseg5ff_nxv1f16_triscv.vector.tuple_nxv2i8_5t:3805; CHECK: # %bb.0: # %entry3806; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma3807; CHECK-NEXT: vlseg5e16ff.v v7, (a0)3808; CHECK-NEXT: csrr a0, vl3809; CHECK-NEXT: sd a0, 0(a2)3810; CHECK-NEXT: ret3811entry:3812 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)3813 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 03814 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %1, i32 1)3815 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 13816 store i64 %3, ptr %outvl3817 ret <vscale x 1 x half> %23818}3819 3820define <vscale x 1 x half> @test_vlseg5ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3821; CHECK-LABEL: test_vlseg5ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_5t:3822; CHECK: # %bb.0: # %entry3823; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu3824; CHECK-NEXT: vmv1r.v v7, v83825; CHECK-NEXT: vmv1r.v v8, v93826; CHECK-NEXT: vmv1r.v v9, v103827; CHECK-NEXT: vmv1r.v v10, v113828; CHECK-NEXT: vmv1r.v v11, v123829; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t3830; CHECK-NEXT: csrr a0, vl3831; CHECK-NEXT: sd a0, 0(a2)3832; CHECK-NEXT: ret3833entry:3834 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv2i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)3835 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 03836 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %1, i32 1)3837 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 13838 store i64 %3, ptr %outvl3839 ret <vscale x 1 x half> %23840}3841 3842define <vscale x 2 x half> @test_vlseg5ff_nxv2f16_triscv.vector.tuple_nxv4i8_5t(ptr %base, i64 %vl, ptr %outvl) {3843; CHECK-LABEL: test_vlseg5ff_nxv2f16_triscv.vector.tuple_nxv4i8_5t:3844; CHECK: # %bb.0: # %entry3845; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma3846; CHECK-NEXT: vlseg5e16ff.v v7, (a0)3847; CHECK-NEXT: csrr a0, vl3848; CHECK-NEXT: sd a0, 0(a2)3849; CHECK-NEXT: ret3850entry:3851 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)3852 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 03853 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)3854 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 13855 store i64 %3, ptr %outvl3856 ret <vscale x 2 x half> %23857}3858 3859define <vscale x 2 x half> @test_vlseg5ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {3860; CHECK-LABEL: test_vlseg5ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_5t:3861; CHECK: # %bb.0: # %entry3862; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu3863; CHECK-NEXT: vmv1r.v v7, v83864; CHECK-NEXT: vmv1r.v v8, v93865; CHECK-NEXT: vmv1r.v v9, v103866; CHECK-NEXT: vmv1r.v v10, v113867; CHECK-NEXT: vmv1r.v v11, v123868; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t3869; CHECK-NEXT: csrr a0, vl3870; CHECK-NEXT: sd a0, 0(a2)3871; CHECK-NEXT: ret3872entry:3873 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)3874 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 03875 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)3876 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 13877 store i64 %3, ptr %outvl3878 ret <vscale x 2 x half> %23879}3880 3881define <vscale x 4 x half> @test_vlseg5ff_nxv4f16_triscv.vector.tuple_nxv8i8_5t(ptr %base, i64 %vl, ptr %outvl) {3882; CHECK-LABEL: test_vlseg5ff_nxv4f16_triscv.vector.tuple_nxv8i8_5t:3883; CHECK: # %bb.0: # %entry3884; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma3885; CHECK-NEXT: vlseg5e16ff.v v7, (a0)3886; CHECK-NEXT: csrr a0, vl3887; CHECK-NEXT: sd a0, 0(a2)3888; CHECK-NEXT: ret3889entry:3890 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)3891 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 03892 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)3893 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 13894 store i64 %3, ptr %outvl3895 ret <vscale x 4 x half> %23896}3897 3898define <vscale x 4 x half> @test_vlseg5ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {3899; CHECK-LABEL: test_vlseg5ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_5t:3900; CHECK: # %bb.0: # %entry3901; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu3902; CHECK-NEXT: vmv1r.v v7, v83903; CHECK-NEXT: vmv1r.v v8, v93904; CHECK-NEXT: vmv1r.v v9, v103905; CHECK-NEXT: vmv1r.v v10, v113906; CHECK-NEXT: vmv1r.v v11, v123907; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t3908; CHECK-NEXT: csrr a0, vl3909; CHECK-NEXT: sd a0, 0(a2)3910; CHECK-NEXT: ret3911entry:3912 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)3913 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 03914 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)3915 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 13916 store i64 %3, ptr %outvl3917 ret <vscale x 4 x half> %23918}3919 3920define <vscale x 1 x half> @test_vlseg6ff_nxv1f16_triscv.vector.tuple_nxv2i8_6t(ptr %base, i64 %vl, ptr %outvl) {3921; CHECK-LABEL: test_vlseg6ff_nxv1f16_triscv.vector.tuple_nxv2i8_6t:3922; CHECK: # %bb.0: # %entry3923; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma3924; CHECK-NEXT: vlseg6e16ff.v v7, (a0)3925; CHECK-NEXT: csrr a0, vl3926; CHECK-NEXT: sd a0, 0(a2)3927; CHECK-NEXT: ret3928entry:3929 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)3930 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 03931 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %1, i32 1)3932 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 13933 store i64 %3, ptr %outvl3934 ret <vscale x 1 x half> %23935}3936 3937define <vscale x 1 x half> @test_vlseg6ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {3938; CHECK-LABEL: test_vlseg6ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_6t:3939; CHECK: # %bb.0: # %entry3940; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu3941; CHECK-NEXT: vmv1r.v v7, v83942; CHECK-NEXT: vmv1r.v v8, v93943; CHECK-NEXT: vmv1r.v v9, v103944; CHECK-NEXT: vmv1r.v v10, v113945; CHECK-NEXT: vmv1r.v v11, v123946; CHECK-NEXT: vmv1r.v v12, v133947; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t3948; CHECK-NEXT: csrr a0, vl3949; CHECK-NEXT: sd a0, 0(a2)3950; CHECK-NEXT: ret3951entry:3952 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv2i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)3953 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 03954 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %1, i32 1)3955 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 13956 store i64 %3, ptr %outvl3957 ret <vscale x 1 x half> %23958}3959 3960define <vscale x 2 x half> @test_vlseg6ff_nxv2f16_triscv.vector.tuple_nxv4i8_6t(ptr %base, i64 %vl, ptr %outvl) {3961; CHECK-LABEL: test_vlseg6ff_nxv2f16_triscv.vector.tuple_nxv4i8_6t:3962; CHECK: # %bb.0: # %entry3963; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma3964; CHECK-NEXT: vlseg6e16ff.v v7, (a0)3965; CHECK-NEXT: csrr a0, vl3966; CHECK-NEXT: sd a0, 0(a2)3967; CHECK-NEXT: ret3968entry:3969 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)3970 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 03971 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)3972 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 13973 store i64 %3, ptr %outvl3974 ret <vscale x 2 x half> %23975}3976 3977define <vscale x 2 x half> @test_vlseg6ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {3978; CHECK-LABEL: test_vlseg6ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_6t:3979; CHECK: # %bb.0: # %entry3980; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu3981; CHECK-NEXT: vmv1r.v v7, v83982; CHECK-NEXT: vmv1r.v v8, v93983; CHECK-NEXT: vmv1r.v v9, v103984; CHECK-NEXT: vmv1r.v v10, v113985; CHECK-NEXT: vmv1r.v v11, v123986; CHECK-NEXT: vmv1r.v v12, v133987; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t3988; CHECK-NEXT: csrr a0, vl3989; CHECK-NEXT: sd a0, 0(a2)3990; CHECK-NEXT: ret3991entry:3992 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)3993 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 03994 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)3995 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 13996 store i64 %3, ptr %outvl3997 ret <vscale x 2 x half> %23998}3999 4000define <vscale x 4 x half> @test_vlseg6ff_nxv4f16_triscv.vector.tuple_nxv8i8_6t(ptr %base, i64 %vl, ptr %outvl) {4001; CHECK-LABEL: test_vlseg6ff_nxv4f16_triscv.vector.tuple_nxv8i8_6t:4002; CHECK: # %bb.0: # %entry4003; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma4004; CHECK-NEXT: vlseg6e16ff.v v7, (a0)4005; CHECK-NEXT: csrr a0, vl4006; CHECK-NEXT: sd a0, 0(a2)4007; CHECK-NEXT: ret4008entry:4009 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)4010 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 04011 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)4012 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 14013 store i64 %3, ptr %outvl4014 ret <vscale x 4 x half> %24015}4016 4017define <vscale x 4 x half> @test_vlseg6ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {4018; CHECK-LABEL: test_vlseg6ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_6t:4019; CHECK: # %bb.0: # %entry4020; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu4021; CHECK-NEXT: vmv1r.v v7, v84022; CHECK-NEXT: vmv1r.v v8, v94023; CHECK-NEXT: vmv1r.v v9, v104024; CHECK-NEXT: vmv1r.v v10, v114025; CHECK-NEXT: vmv1r.v v11, v124026; CHECK-NEXT: vmv1r.v v12, v134027; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t4028; CHECK-NEXT: csrr a0, vl4029; CHECK-NEXT: sd a0, 0(a2)4030; CHECK-NEXT: ret4031entry:4032 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)4033 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 04034 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)4035 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 14036 store i64 %3, ptr %outvl4037 ret <vscale x 4 x half> %24038}4039 4040define <vscale x 1 x half> @test_vlseg7ff_nxv1f16_triscv.vector.tuple_nxv2i8_7t(ptr %base, i64 %vl, ptr %outvl) {4041; CHECK-LABEL: test_vlseg7ff_nxv1f16_triscv.vector.tuple_nxv2i8_7t:4042; CHECK: # %bb.0: # %entry4043; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma4044; CHECK-NEXT: vlseg7e16ff.v v7, (a0)4045; CHECK-NEXT: csrr a0, vl4046; CHECK-NEXT: sd a0, 0(a2)4047; CHECK-NEXT: ret4048entry:4049 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)4050 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 04051 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %1, i32 1)4052 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 14053 store i64 %3, ptr %outvl4054 ret <vscale x 1 x half> %24055}4056 4057define <vscale x 1 x half> @test_vlseg7ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4058; CHECK-LABEL: test_vlseg7ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_7t:4059; CHECK: # %bb.0: # %entry4060; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu4061; CHECK-NEXT: vmv1r.v v7, v84062; CHECK-NEXT: vmv1r.v v8, v94063; CHECK-NEXT: vmv1r.v v9, v104064; CHECK-NEXT: vmv1r.v v10, v114065; CHECK-NEXT: vmv1r.v v11, v124066; CHECK-NEXT: vmv1r.v v12, v134067; CHECK-NEXT: vmv1r.v v13, v144068; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t4069; CHECK-NEXT: csrr a0, vl4070; CHECK-NEXT: sd a0, 0(a2)4071; CHECK-NEXT: ret4072entry:4073 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv2i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)4074 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 04075 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %1, i32 1)4076 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 14077 store i64 %3, ptr %outvl4078 ret <vscale x 1 x half> %24079}4080 4081define <vscale x 2 x half> @test_vlseg7ff_nxv2f16_triscv.vector.tuple_nxv4i8_7t(ptr %base, i64 %vl, ptr %outvl) {4082; CHECK-LABEL: test_vlseg7ff_nxv2f16_triscv.vector.tuple_nxv4i8_7t:4083; CHECK: # %bb.0: # %entry4084; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma4085; CHECK-NEXT: vlseg7e16ff.v v7, (a0)4086; CHECK-NEXT: csrr a0, vl4087; CHECK-NEXT: sd a0, 0(a2)4088; CHECK-NEXT: ret4089entry:4090 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)4091 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 04092 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)4093 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 14094 store i64 %3, ptr %outvl4095 ret <vscale x 2 x half> %24096}4097 4098define <vscale x 2 x half> @test_vlseg7ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4099; CHECK-LABEL: test_vlseg7ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_7t:4100; CHECK: # %bb.0: # %entry4101; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu4102; CHECK-NEXT: vmv1r.v v7, v84103; CHECK-NEXT: vmv1r.v v8, v94104; CHECK-NEXT: vmv1r.v v9, v104105; CHECK-NEXT: vmv1r.v v10, v114106; CHECK-NEXT: vmv1r.v v11, v124107; CHECK-NEXT: vmv1r.v v12, v134108; CHECK-NEXT: vmv1r.v v13, v144109; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t4110; CHECK-NEXT: csrr a0, vl4111; CHECK-NEXT: sd a0, 0(a2)4112; CHECK-NEXT: ret4113entry:4114 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)4115 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 04116 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)4117 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 14118 store i64 %3, ptr %outvl4119 ret <vscale x 2 x half> %24120}4121 4122define <vscale x 4 x half> @test_vlseg7ff_nxv4f16_triscv.vector.tuple_nxv8i8_7t(ptr %base, i64 %vl, ptr %outvl) {4123; CHECK-LABEL: test_vlseg7ff_nxv4f16_triscv.vector.tuple_nxv8i8_7t:4124; CHECK: # %bb.0: # %entry4125; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma4126; CHECK-NEXT: vlseg7e16ff.v v7, (a0)4127; CHECK-NEXT: csrr a0, vl4128; CHECK-NEXT: sd a0, 0(a2)4129; CHECK-NEXT: ret4130entry:4131 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)4132 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 04133 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)4134 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 14135 store i64 %3, ptr %outvl4136 ret <vscale x 4 x half> %24137}4138 4139define <vscale x 4 x half> @test_vlseg7ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {4140; CHECK-LABEL: test_vlseg7ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_7t:4141; CHECK: # %bb.0: # %entry4142; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu4143; CHECK-NEXT: vmv1r.v v7, v84144; CHECK-NEXT: vmv1r.v v8, v94145; CHECK-NEXT: vmv1r.v v9, v104146; CHECK-NEXT: vmv1r.v v10, v114147; CHECK-NEXT: vmv1r.v v11, v124148; CHECK-NEXT: vmv1r.v v12, v134149; CHECK-NEXT: vmv1r.v v13, v144150; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t4151; CHECK-NEXT: csrr a0, vl4152; CHECK-NEXT: sd a0, 0(a2)4153; CHECK-NEXT: ret4154entry:4155 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)4156 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 04157 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)4158 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 14159 store i64 %3, ptr %outvl4160 ret <vscale x 4 x half> %24161}4162 4163define <vscale x 1 x half> @test_vlseg8ff_nxv1f16_triscv.vector.tuple_nxv2i8_8t(ptr %base, i64 %vl, ptr %outvl) {4164; CHECK-LABEL: test_vlseg8ff_nxv1f16_triscv.vector.tuple_nxv2i8_8t:4165; CHECK: # %bb.0: # %entry4166; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma4167; CHECK-NEXT: vlseg8e16ff.v v7, (a0)4168; CHECK-NEXT: csrr a0, vl4169; CHECK-NEXT: sd a0, 0(a2)4170; CHECK-NEXT: ret4171entry:4172 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)4173 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 04174 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %1, i32 1)4175 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 14176 store i64 %3, ptr %outvl4177 ret <vscale x 1 x half> %24178}4179 4180define <vscale x 1 x half> @test_vlseg8ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4181; CHECK-LABEL: test_vlseg8ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_8t:4182; CHECK: # %bb.0: # %entry4183; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu4184; CHECK-NEXT: vmv1r.v v7, v84185; CHECK-NEXT: vmv1r.v v8, v94186; CHECK-NEXT: vmv1r.v v9, v104187; CHECK-NEXT: vmv1r.v v10, v114188; CHECK-NEXT: vmv1r.v v11, v124189; CHECK-NEXT: vmv1r.v v12, v134190; CHECK-NEXT: vmv1r.v v13, v144191; CHECK-NEXT: vmv1r.v v14, v154192; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t4193; CHECK-NEXT: csrr a0, vl4194; CHECK-NEXT: sd a0, 0(a2)4195; CHECK-NEXT: ret4196entry:4197 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv2i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)4198 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 04199 %2 = call <vscale x 1 x half> @llvm.riscv.tuple.extract.nxv1f16.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %1, i32 1)4200 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 14201 store i64 %3, ptr %outvl4202 ret <vscale x 1 x half> %24203}4204 4205define <vscale x 2 x half> @test_vlseg8ff_nxv2f16_triscv.vector.tuple_nxv4i8_8t(ptr %base, i64 %vl, ptr %outvl) {4206; CHECK-LABEL: test_vlseg8ff_nxv2f16_triscv.vector.tuple_nxv4i8_8t:4207; CHECK: # %bb.0: # %entry4208; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma4209; CHECK-NEXT: vlseg8e16ff.v v7, (a0)4210; CHECK-NEXT: csrr a0, vl4211; CHECK-NEXT: sd a0, 0(a2)4212; CHECK-NEXT: ret4213entry:4214 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)4215 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 04216 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)4217 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 14218 store i64 %3, ptr %outvl4219 ret <vscale x 2 x half> %24220}4221 4222define <vscale x 2 x half> @test_vlseg8ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4223; CHECK-LABEL: test_vlseg8ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_8t:4224; CHECK: # %bb.0: # %entry4225; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu4226; CHECK-NEXT: vmv1r.v v7, v84227; CHECK-NEXT: vmv1r.v v8, v94228; CHECK-NEXT: vmv1r.v v9, v104229; CHECK-NEXT: vmv1r.v v10, v114230; CHECK-NEXT: vmv1r.v v11, v124231; CHECK-NEXT: vmv1r.v v12, v134232; CHECK-NEXT: vmv1r.v v13, v144233; CHECK-NEXT: vmv1r.v v14, v154234; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t4235; CHECK-NEXT: csrr a0, vl4236; CHECK-NEXT: sd a0, 0(a2)4237; CHECK-NEXT: ret4238entry:4239 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)4240 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 04241 %2 = call <vscale x 2 x half> @llvm.riscv.tuple.extract.nxv2f16.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)4242 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 14243 store i64 %3, ptr %outvl4244 ret <vscale x 2 x half> %24245}4246 4247define <vscale x 4 x half> @test_vlseg8ff_nxv4f16_triscv.vector.tuple_nxv8i8_8t(ptr %base, i64 %vl, ptr %outvl) {4248; CHECK-LABEL: test_vlseg8ff_nxv4f16_triscv.vector.tuple_nxv8i8_8t:4249; CHECK: # %bb.0: # %entry4250; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma4251; CHECK-NEXT: vlseg8e16ff.v v7, (a0)4252; CHECK-NEXT: csrr a0, vl4253; CHECK-NEXT: sd a0, 0(a2)4254; CHECK-NEXT: ret4255entry:4256 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)4257 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 04258 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)4259 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 14260 store i64 %3, ptr %outvl4261 ret <vscale x 4 x half> %24262}4263 4264define <vscale x 4 x half> @test_vlseg8ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {4265; CHECK-LABEL: test_vlseg8ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_8t:4266; CHECK: # %bb.0: # %entry4267; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu4268; CHECK-NEXT: vmv1r.v v7, v84269; CHECK-NEXT: vmv1r.v v8, v94270; CHECK-NEXT: vmv1r.v v9, v104271; CHECK-NEXT: vmv1r.v v10, v114272; CHECK-NEXT: vmv1r.v v11, v124273; CHECK-NEXT: vmv1r.v v12, v134274; CHECK-NEXT: vmv1r.v v13, v144275; CHECK-NEXT: vmv1r.v v14, v154276; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t4277; CHECK-NEXT: csrr a0, vl4278; CHECK-NEXT: sd a0, 0(a2)4279; CHECK-NEXT: ret4280entry:4281 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)4282 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 04283 %2 = call <vscale x 4 x half> @llvm.riscv.tuple.extract.nxv4f16.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)4284 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 14285 store i64 %3, ptr %outvl4286 ret <vscale x 4 x half> %24287}4288 4289define <vscale x 1 x float> @test_vlseg2ff_nxv1f32_triscv.vector.tuple_nxv4i8_2t(ptr %base, i64 %vl, ptr %outvl) {4290; CHECK-LABEL: test_vlseg2ff_nxv1f32_triscv.vector.tuple_nxv4i8_2t:4291; CHECK: # %bb.0: # %entry4292; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma4293; CHECK-NEXT: vlseg2e32ff.v v7, (a0)4294; CHECK-NEXT: csrr a0, vl4295; CHECK-NEXT: sd a0, 0(a2)4296; CHECK-NEXT: ret4297entry:4298 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) poison, ptr %base, i64 %vl, i64 5)4299 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 04300 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)4301 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 14302 store i64 %3, ptr %outvl4303 ret <vscale x 1 x float> %24304}4305 4306define <vscale x 1 x float> @test_vlseg2ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4307; CHECK-LABEL: test_vlseg2ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_2t:4308; CHECK: # %bb.0: # %entry4309; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu4310; CHECK-NEXT: vmv1r.v v7, v84311; CHECK-NEXT: vmv1r.v v8, v94312; CHECK-NEXT: vlseg2e32ff.v v7, (a0), v0.t4313; CHECK-NEXT: csrr a0, vl4314; CHECK-NEXT: sd a0, 0(a2)4315; CHECK-NEXT: ret4316entry:4317 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)4318 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 04319 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)4320 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 14321 store i64 %3, ptr %outvl4322 ret <vscale x 1 x float> %24323}4324 4325define <vscale x 2 x float> @test_vlseg2ff_nxv2f32_triscv.vector.tuple_nxv8i8_2t(ptr %base, i64 %vl, ptr %outvl) {4326; CHECK-LABEL: test_vlseg2ff_nxv2f32_triscv.vector.tuple_nxv8i8_2t:4327; CHECK: # %bb.0: # %entry4328; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma4329; CHECK-NEXT: vlseg2e32ff.v v7, (a0)4330; CHECK-NEXT: csrr a0, vl4331; CHECK-NEXT: sd a0, 0(a2)4332; CHECK-NEXT: ret4333entry:4334 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) poison, ptr %base, i64 %vl, i64 5)4335 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 04336 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)4337 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 14338 store i64 %3, ptr %outvl4339 ret <vscale x 2 x float> %24340}4341 4342define <vscale x 2 x float> @test_vlseg2ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4343; CHECK-LABEL: test_vlseg2ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_2t:4344; CHECK: # %bb.0: # %entry4345; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu4346; CHECK-NEXT: vmv1r.v v7, v84347; CHECK-NEXT: vmv1r.v v8, v94348; CHECK-NEXT: vlseg2e32ff.v v7, (a0), v0.t4349; CHECK-NEXT: csrr a0, vl4350; CHECK-NEXT: sd a0, 0(a2)4351; CHECK-NEXT: ret4352entry:4353 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)4354 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 04355 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)4356 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 14357 store i64 %3, ptr %outvl4358 ret <vscale x 2 x float> %24359}4360 4361define <vscale x 4 x float> @test_vlseg2ff_nxv4f32_triscv.vector.tuple_nxv16i8_2t(ptr %base, i64 %vl, ptr %outvl) {4362; CHECK-LABEL: test_vlseg2ff_nxv4f32_triscv.vector.tuple_nxv16i8_2t:4363; CHECK: # %bb.0: # %entry4364; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma4365; CHECK-NEXT: vlseg2e32ff.v v6, (a0)4366; CHECK-NEXT: csrr a0, vl4367; CHECK-NEXT: sd a0, 0(a2)4368; CHECK-NEXT: ret4369entry:4370 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, ptr %base, i64 %vl, i64 5)4371 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 04372 %2 = call <vscale x 4 x float> @llvm.riscv.tuple.extract.nxv4f32.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)4373 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 14374 store i64 %3, ptr %outvl4375 ret <vscale x 4 x float> %24376}4377 4378define <vscale x 4 x float> @test_vlseg2ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {4379; CHECK-LABEL: test_vlseg2ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_2t:4380; CHECK: # %bb.0: # %entry4381; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu4382; CHECK-NEXT: vmv2r.v v6, v84383; CHECK-NEXT: vmv2r.v v8, v104384; CHECK-NEXT: vlseg2e32ff.v v6, (a0), v0.t4385; CHECK-NEXT: csrr a0, vl4386; CHECK-NEXT: sd a0, 0(a2)4387; CHECK-NEXT: ret4388entry:4389 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 5)4390 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 04391 %2 = call <vscale x 4 x float> @llvm.riscv.tuple.extract.nxv4f32.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)4392 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 14393 store i64 %3, ptr %outvl4394 ret <vscale x 4 x float> %24395}4396 4397define <vscale x 8 x float> @test_vlseg2ff_nxv8f32_triscv.vector.tuple_nxv32i8_2t(ptr %base, i64 %vl, ptr %outvl) {4398; CHECK-LABEL: test_vlseg2ff_nxv8f32_triscv.vector.tuple_nxv32i8_2t:4399; CHECK: # %bb.0: # %entry4400; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma4401; CHECK-NEXT: vlseg2e32ff.v v4, (a0)4402; CHECK-NEXT: csrr a0, vl4403; CHECK-NEXT: sd a0, 0(a2)4404; CHECK-NEXT: ret4405entry:4406 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) poison, ptr %base, i64 %vl, i64 5)4407 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 04408 %2 = call <vscale x 8 x float> @llvm.riscv.tuple.extract.nxv8f32.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)4409 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 14410 store i64 %3, ptr %outvl4411 ret <vscale x 8 x float> %24412}4413 4414define <vscale x 8 x float> @test_vlseg2ff_mask_nxv8f32_triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {4415; CHECK-LABEL: test_vlseg2ff_mask_nxv8f32_triscv.vector.tuple_nxv32i8_2t:4416; CHECK: # %bb.0: # %entry4417; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu4418; CHECK-NEXT: vmv4r.v v4, v84419; CHECK-NEXT: vmv4r.v v8, v124420; CHECK-NEXT: vlseg2e32ff.v v4, (a0), v0.t4421; CHECK-NEXT: csrr a0, vl4422; CHECK-NEXT: sd a0, 0(a2)4423; CHECK-NEXT: ret4424entry:4425 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 5)4426 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 04427 %2 = call <vscale x 8 x float> @llvm.riscv.tuple.extract.nxv8f32.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)4428 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 14429 store i64 %3, ptr %outvl4430 ret <vscale x 8 x float> %24431}4432 4433define <vscale x 1 x float> @test_vlseg3ff_nxv1f32_triscv.vector.tuple_nxv4i8_3t(ptr %base, i64 %vl, ptr %outvl) {4434; CHECK-LABEL: test_vlseg3ff_nxv1f32_triscv.vector.tuple_nxv4i8_3t:4435; CHECK: # %bb.0: # %entry4436; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma4437; CHECK-NEXT: vlseg3e32ff.v v7, (a0)4438; CHECK-NEXT: csrr a0, vl4439; CHECK-NEXT: sd a0, 0(a2)4440; CHECK-NEXT: ret4441entry:4442 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) poison, ptr %base, i64 %vl, i64 5)4443 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 04444 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)4445 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 14446 store i64 %3, ptr %outvl4447 ret <vscale x 1 x float> %24448}4449 4450define <vscale x 1 x float> @test_vlseg3ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4451; CHECK-LABEL: test_vlseg3ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_3t:4452; CHECK: # %bb.0: # %entry4453; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu4454; CHECK-NEXT: vmv1r.v v7, v84455; CHECK-NEXT: vmv1r.v v8, v94456; CHECK-NEXT: vmv1r.v v9, v104457; CHECK-NEXT: vlseg3e32ff.v v7, (a0), v0.t4458; CHECK-NEXT: csrr a0, vl4459; CHECK-NEXT: sd a0, 0(a2)4460; CHECK-NEXT: ret4461entry:4462 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)4463 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 04464 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)4465 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 14466 store i64 %3, ptr %outvl4467 ret <vscale x 1 x float> %24468}4469 4470define <vscale x 2 x float> @test_vlseg3ff_nxv2f32_triscv.vector.tuple_nxv8i8_3t(ptr %base, i64 %vl, ptr %outvl) {4471; CHECK-LABEL: test_vlseg3ff_nxv2f32_triscv.vector.tuple_nxv8i8_3t:4472; CHECK: # %bb.0: # %entry4473; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma4474; CHECK-NEXT: vlseg3e32ff.v v7, (a0)4475; CHECK-NEXT: csrr a0, vl4476; CHECK-NEXT: sd a0, 0(a2)4477; CHECK-NEXT: ret4478entry:4479 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) poison, ptr %base, i64 %vl, i64 5)4480 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 04481 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)4482 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 14483 store i64 %3, ptr %outvl4484 ret <vscale x 2 x float> %24485}4486 4487define <vscale x 2 x float> @test_vlseg3ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4488; CHECK-LABEL: test_vlseg3ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_3t:4489; CHECK: # %bb.0: # %entry4490; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu4491; CHECK-NEXT: vmv1r.v v7, v84492; CHECK-NEXT: vmv1r.v v8, v94493; CHECK-NEXT: vmv1r.v v9, v104494; CHECK-NEXT: vlseg3e32ff.v v7, (a0), v0.t4495; CHECK-NEXT: csrr a0, vl4496; CHECK-NEXT: sd a0, 0(a2)4497; CHECK-NEXT: ret4498entry:4499 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)4500 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 04501 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)4502 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 14503 store i64 %3, ptr %outvl4504 ret <vscale x 2 x float> %24505}4506 4507define <vscale x 4 x float> @test_vlseg3ff_nxv4f32_triscv.vector.tuple_nxv16i8_3t(ptr %base, i64 %vl, ptr %outvl) {4508; CHECK-LABEL: test_vlseg3ff_nxv4f32_triscv.vector.tuple_nxv16i8_3t:4509; CHECK: # %bb.0: # %entry4510; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma4511; CHECK-NEXT: vlseg3e32ff.v v6, (a0)4512; CHECK-NEXT: csrr a0, vl4513; CHECK-NEXT: sd a0, 0(a2)4514; CHECK-NEXT: ret4515entry:4516 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, ptr %base, i64 %vl, i64 5)4517 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 04518 %2 = call <vscale x 4 x float> @llvm.riscv.tuple.extract.nxv4f32.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)4519 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 14520 store i64 %3, ptr %outvl4521 ret <vscale x 4 x float> %24522}4523 4524define <vscale x 4 x float> @test_vlseg3ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {4525; CHECK-LABEL: test_vlseg3ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_3t:4526; CHECK: # %bb.0: # %entry4527; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu4528; CHECK-NEXT: vmv2r.v v6, v84529; CHECK-NEXT: vmv2r.v v8, v104530; CHECK-NEXT: vmv2r.v v10, v124531; CHECK-NEXT: vlseg3e32ff.v v6, (a0), v0.t4532; CHECK-NEXT: csrr a0, vl4533; CHECK-NEXT: sd a0, 0(a2)4534; CHECK-NEXT: ret4535entry:4536 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 5)4537 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 04538 %2 = call <vscale x 4 x float> @llvm.riscv.tuple.extract.nxv4f32.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)4539 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 14540 store i64 %3, ptr %outvl4541 ret <vscale x 4 x float> %24542}4543 4544define <vscale x 1 x float> @test_vlseg4ff_nxv1f32_triscv.vector.tuple_nxv4i8_4t(ptr %base, i64 %vl, ptr %outvl) {4545; CHECK-LABEL: test_vlseg4ff_nxv1f32_triscv.vector.tuple_nxv4i8_4t:4546; CHECK: # %bb.0: # %entry4547; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma4548; CHECK-NEXT: vlseg4e32ff.v v7, (a0)4549; CHECK-NEXT: csrr a0, vl4550; CHECK-NEXT: sd a0, 0(a2)4551; CHECK-NEXT: ret4552entry:4553 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) poison, ptr %base, i64 %vl, i64 5)4554 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 04555 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)4556 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 14557 store i64 %3, ptr %outvl4558 ret <vscale x 1 x float> %24559}4560 4561define <vscale x 1 x float> @test_vlseg4ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4562; CHECK-LABEL: test_vlseg4ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_4t:4563; CHECK: # %bb.0: # %entry4564; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu4565; CHECK-NEXT: vmv1r.v v7, v84566; CHECK-NEXT: vmv1r.v v8, v94567; CHECK-NEXT: vmv1r.v v9, v104568; CHECK-NEXT: vmv1r.v v10, v114569; CHECK-NEXT: vlseg4e32ff.v v7, (a0), v0.t4570; CHECK-NEXT: csrr a0, vl4571; CHECK-NEXT: sd a0, 0(a2)4572; CHECK-NEXT: ret4573entry:4574 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)4575 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 04576 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)4577 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 14578 store i64 %3, ptr %outvl4579 ret <vscale x 1 x float> %24580}4581 4582define <vscale x 2 x float> @test_vlseg4ff_nxv2f32_triscv.vector.tuple_nxv8i8_4t(ptr %base, i64 %vl, ptr %outvl) {4583; CHECK-LABEL: test_vlseg4ff_nxv2f32_triscv.vector.tuple_nxv8i8_4t:4584; CHECK: # %bb.0: # %entry4585; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma4586; CHECK-NEXT: vlseg4e32ff.v v7, (a0)4587; CHECK-NEXT: csrr a0, vl4588; CHECK-NEXT: sd a0, 0(a2)4589; CHECK-NEXT: ret4590entry:4591 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, ptr %base, i64 %vl, i64 5)4592 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 04593 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)4594 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 14595 store i64 %3, ptr %outvl4596 ret <vscale x 2 x float> %24597}4598 4599define <vscale x 2 x float> @test_vlseg4ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4600; CHECK-LABEL: test_vlseg4ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_4t:4601; CHECK: # %bb.0: # %entry4602; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu4603; CHECK-NEXT: vmv1r.v v7, v84604; CHECK-NEXT: vmv1r.v v8, v94605; CHECK-NEXT: vmv1r.v v9, v104606; CHECK-NEXT: vmv1r.v v10, v114607; CHECK-NEXT: vlseg4e32ff.v v7, (a0), v0.t4608; CHECK-NEXT: csrr a0, vl4609; CHECK-NEXT: sd a0, 0(a2)4610; CHECK-NEXT: ret4611entry:4612 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)4613 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 04614 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)4615 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 14616 store i64 %3, ptr %outvl4617 ret <vscale x 2 x float> %24618}4619 4620define <vscale x 4 x float> @test_vlseg4ff_nxv4f32_triscv.vector.tuple_nxv16i8_4t(ptr %base, i64 %vl, ptr %outvl) {4621; CHECK-LABEL: test_vlseg4ff_nxv4f32_triscv.vector.tuple_nxv16i8_4t:4622; CHECK: # %bb.0: # %entry4623; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma4624; CHECK-NEXT: vlseg4e32ff.v v6, (a0)4625; CHECK-NEXT: csrr a0, vl4626; CHECK-NEXT: sd a0, 0(a2)4627; CHECK-NEXT: ret4628entry:4629 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) poison, ptr %base, i64 %vl, i64 5)4630 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 04631 %2 = call <vscale x 4 x float> @llvm.riscv.tuple.extract.nxv4f32.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)4632 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 14633 store i64 %3, ptr %outvl4634 ret <vscale x 4 x float> %24635}4636 4637define <vscale x 4 x float> @test_vlseg4ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {4638; CHECK-LABEL: test_vlseg4ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_4t:4639; CHECK: # %bb.0: # %entry4640; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu4641; CHECK-NEXT: vmv2r.v v6, v84642; CHECK-NEXT: vmv2r.v v8, v104643; CHECK-NEXT: vmv2r.v v10, v124644; CHECK-NEXT: vmv2r.v v12, v144645; CHECK-NEXT: vlseg4e32ff.v v6, (a0), v0.t4646; CHECK-NEXT: csrr a0, vl4647; CHECK-NEXT: sd a0, 0(a2)4648; CHECK-NEXT: ret4649entry:4650 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 5)4651 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 04652 %2 = call <vscale x 4 x float> @llvm.riscv.tuple.extract.nxv4f32.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)4653 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 14654 store i64 %3, ptr %outvl4655 ret <vscale x 4 x float> %24656}4657 4658define <vscale x 1 x float> @test_vlseg5ff_nxv1f32_triscv.vector.tuple_nxv4i8_5t(ptr %base, i64 %vl, ptr %outvl) {4659; CHECK-LABEL: test_vlseg5ff_nxv1f32_triscv.vector.tuple_nxv4i8_5t:4660; CHECK: # %bb.0: # %entry4661; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma4662; CHECK-NEXT: vlseg5e32ff.v v7, (a0)4663; CHECK-NEXT: csrr a0, vl4664; CHECK-NEXT: sd a0, 0(a2)4665; CHECK-NEXT: ret4666entry:4667 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) poison, ptr %base, i64 %vl, i64 5)4668 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 04669 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)4670 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 14671 store i64 %3, ptr %outvl4672 ret <vscale x 1 x float> %24673}4674 4675define <vscale x 1 x float> @test_vlseg5ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4676; CHECK-LABEL: test_vlseg5ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_5t:4677; CHECK: # %bb.0: # %entry4678; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu4679; CHECK-NEXT: vmv1r.v v7, v84680; CHECK-NEXT: vmv1r.v v8, v94681; CHECK-NEXT: vmv1r.v v9, v104682; CHECK-NEXT: vmv1r.v v10, v114683; CHECK-NEXT: vmv1r.v v11, v124684; CHECK-NEXT: vlseg5e32ff.v v7, (a0), v0.t4685; CHECK-NEXT: csrr a0, vl4686; CHECK-NEXT: sd a0, 0(a2)4687; CHECK-NEXT: ret4688entry:4689 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)4690 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 04691 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)4692 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 14693 store i64 %3, ptr %outvl4694 ret <vscale x 1 x float> %24695}4696 4697define <vscale x 2 x float> @test_vlseg5ff_nxv2f32_triscv.vector.tuple_nxv8i8_5t(ptr %base, i64 %vl, ptr %outvl) {4698; CHECK-LABEL: test_vlseg5ff_nxv2f32_triscv.vector.tuple_nxv8i8_5t:4699; CHECK: # %bb.0: # %entry4700; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma4701; CHECK-NEXT: vlseg5e32ff.v v7, (a0)4702; CHECK-NEXT: csrr a0, vl4703; CHECK-NEXT: sd a0, 0(a2)4704; CHECK-NEXT: ret4705entry:4706 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) poison, ptr %base, i64 %vl, i64 5)4707 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 04708 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)4709 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 14710 store i64 %3, ptr %outvl4711 ret <vscale x 2 x float> %24712}4713 4714define <vscale x 2 x float> @test_vlseg5ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4715; CHECK-LABEL: test_vlseg5ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_5t:4716; CHECK: # %bb.0: # %entry4717; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu4718; CHECK-NEXT: vmv1r.v v7, v84719; CHECK-NEXT: vmv1r.v v8, v94720; CHECK-NEXT: vmv1r.v v9, v104721; CHECK-NEXT: vmv1r.v v10, v114722; CHECK-NEXT: vmv1r.v v11, v124723; CHECK-NEXT: vlseg5e32ff.v v7, (a0), v0.t4724; CHECK-NEXT: csrr a0, vl4725; CHECK-NEXT: sd a0, 0(a2)4726; CHECK-NEXT: ret4727entry:4728 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)4729 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 04730 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)4731 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 14732 store i64 %3, ptr %outvl4733 ret <vscale x 2 x float> %24734}4735 4736define <vscale x 1 x float> @test_vlseg6ff_nxv1f32_triscv.vector.tuple_nxv4i8_6t(ptr %base, i64 %vl, ptr %outvl) {4737; CHECK-LABEL: test_vlseg6ff_nxv1f32_triscv.vector.tuple_nxv4i8_6t:4738; CHECK: # %bb.0: # %entry4739; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma4740; CHECK-NEXT: vlseg6e32ff.v v7, (a0)4741; CHECK-NEXT: csrr a0, vl4742; CHECK-NEXT: sd a0, 0(a2)4743; CHECK-NEXT: ret4744entry:4745 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) poison, ptr %base, i64 %vl, i64 5)4746 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 04747 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)4748 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 14749 store i64 %3, ptr %outvl4750 ret <vscale x 1 x float> %24751}4752 4753define <vscale x 1 x float> @test_vlseg6ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4754; CHECK-LABEL: test_vlseg6ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_6t:4755; CHECK: # %bb.0: # %entry4756; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu4757; CHECK-NEXT: vmv1r.v v7, v84758; CHECK-NEXT: vmv1r.v v8, v94759; CHECK-NEXT: vmv1r.v v9, v104760; CHECK-NEXT: vmv1r.v v10, v114761; CHECK-NEXT: vmv1r.v v11, v124762; CHECK-NEXT: vmv1r.v v12, v134763; CHECK-NEXT: vlseg6e32ff.v v7, (a0), v0.t4764; CHECK-NEXT: csrr a0, vl4765; CHECK-NEXT: sd a0, 0(a2)4766; CHECK-NEXT: ret4767entry:4768 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)4769 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 04770 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)4771 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 14772 store i64 %3, ptr %outvl4773 ret <vscale x 1 x float> %24774}4775 4776define <vscale x 2 x float> @test_vlseg6ff_nxv2f32_triscv.vector.tuple_nxv8i8_6t(ptr %base, i64 %vl, ptr %outvl) {4777; CHECK-LABEL: test_vlseg6ff_nxv2f32_triscv.vector.tuple_nxv8i8_6t:4778; CHECK: # %bb.0: # %entry4779; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma4780; CHECK-NEXT: vlseg6e32ff.v v7, (a0)4781; CHECK-NEXT: csrr a0, vl4782; CHECK-NEXT: sd a0, 0(a2)4783; CHECK-NEXT: ret4784entry:4785 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) poison, ptr %base, i64 %vl, i64 5)4786 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 04787 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)4788 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 14789 store i64 %3, ptr %outvl4790 ret <vscale x 2 x float> %24791}4792 4793define <vscale x 2 x float> @test_vlseg6ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4794; CHECK-LABEL: test_vlseg6ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_6t:4795; CHECK: # %bb.0: # %entry4796; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu4797; CHECK-NEXT: vmv1r.v v7, v84798; CHECK-NEXT: vmv1r.v v8, v94799; CHECK-NEXT: vmv1r.v v9, v104800; CHECK-NEXT: vmv1r.v v10, v114801; CHECK-NEXT: vmv1r.v v11, v124802; CHECK-NEXT: vmv1r.v v12, v134803; CHECK-NEXT: vlseg6e32ff.v v7, (a0), v0.t4804; CHECK-NEXT: csrr a0, vl4805; CHECK-NEXT: sd a0, 0(a2)4806; CHECK-NEXT: ret4807entry:4808 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)4809 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 04810 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)4811 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 14812 store i64 %3, ptr %outvl4813 ret <vscale x 2 x float> %24814}4815 4816define <vscale x 1 x float> @test_vlseg7ff_nxv1f32_triscv.vector.tuple_nxv4i8_7t(ptr %base, i64 %vl, ptr %outvl) {4817; CHECK-LABEL: test_vlseg7ff_nxv1f32_triscv.vector.tuple_nxv4i8_7t:4818; CHECK: # %bb.0: # %entry4819; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma4820; CHECK-NEXT: vlseg7e32ff.v v7, (a0)4821; CHECK-NEXT: csrr a0, vl4822; CHECK-NEXT: sd a0, 0(a2)4823; CHECK-NEXT: ret4824entry:4825 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) poison, ptr %base, i64 %vl, i64 5)4826 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 04827 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)4828 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 14829 store i64 %3, ptr %outvl4830 ret <vscale x 1 x float> %24831}4832 4833define <vscale x 1 x float> @test_vlseg7ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4834; CHECK-LABEL: test_vlseg7ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_7t:4835; CHECK: # %bb.0: # %entry4836; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu4837; CHECK-NEXT: vmv1r.v v7, v84838; CHECK-NEXT: vmv1r.v v8, v94839; CHECK-NEXT: vmv1r.v v9, v104840; CHECK-NEXT: vmv1r.v v10, v114841; CHECK-NEXT: vmv1r.v v11, v124842; CHECK-NEXT: vmv1r.v v12, v134843; CHECK-NEXT: vmv1r.v v13, v144844; CHECK-NEXT: vlseg7e32ff.v v7, (a0), v0.t4845; CHECK-NEXT: csrr a0, vl4846; CHECK-NEXT: sd a0, 0(a2)4847; CHECK-NEXT: ret4848entry:4849 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)4850 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 04851 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)4852 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 14853 store i64 %3, ptr %outvl4854 ret <vscale x 1 x float> %24855}4856 4857define <vscale x 2 x float> @test_vlseg7ff_nxv2f32_triscv.vector.tuple_nxv8i8_7t(ptr %base, i64 %vl, ptr %outvl) {4858; CHECK-LABEL: test_vlseg7ff_nxv2f32_triscv.vector.tuple_nxv8i8_7t:4859; CHECK: # %bb.0: # %entry4860; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma4861; CHECK-NEXT: vlseg7e32ff.v v7, (a0)4862; CHECK-NEXT: csrr a0, vl4863; CHECK-NEXT: sd a0, 0(a2)4864; CHECK-NEXT: ret4865entry:4866 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) poison, ptr %base, i64 %vl, i64 5)4867 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 04868 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)4869 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 14870 store i64 %3, ptr %outvl4871 ret <vscale x 2 x float> %24872}4873 4874define <vscale x 2 x float> @test_vlseg7ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4875; CHECK-LABEL: test_vlseg7ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_7t:4876; CHECK: # %bb.0: # %entry4877; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu4878; CHECK-NEXT: vmv1r.v v7, v84879; CHECK-NEXT: vmv1r.v v8, v94880; CHECK-NEXT: vmv1r.v v9, v104881; CHECK-NEXT: vmv1r.v v10, v114882; CHECK-NEXT: vmv1r.v v11, v124883; CHECK-NEXT: vmv1r.v v12, v134884; CHECK-NEXT: vmv1r.v v13, v144885; CHECK-NEXT: vlseg7e32ff.v v7, (a0), v0.t4886; CHECK-NEXT: csrr a0, vl4887; CHECK-NEXT: sd a0, 0(a2)4888; CHECK-NEXT: ret4889entry:4890 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)4891 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 04892 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)4893 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 14894 store i64 %3, ptr %outvl4895 ret <vscale x 2 x float> %24896}4897 4898define <vscale x 1 x float> @test_vlseg8ff_nxv1f32_triscv.vector.tuple_nxv4i8_8t(ptr %base, i64 %vl, ptr %outvl) {4899; CHECK-LABEL: test_vlseg8ff_nxv1f32_triscv.vector.tuple_nxv4i8_8t:4900; CHECK: # %bb.0: # %entry4901; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma4902; CHECK-NEXT: vlseg8e32ff.v v7, (a0)4903; CHECK-NEXT: csrr a0, vl4904; CHECK-NEXT: sd a0, 0(a2)4905; CHECK-NEXT: ret4906entry:4907 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) poison, ptr %base, i64 %vl, i64 5)4908 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 04909 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)4910 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 14911 store i64 %3, ptr %outvl4912 ret <vscale x 1 x float> %24913}4914 4915define <vscale x 1 x float> @test_vlseg8ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {4916; CHECK-LABEL: test_vlseg8ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_8t:4917; CHECK: # %bb.0: # %entry4918; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu4919; CHECK-NEXT: vmv1r.v v7, v84920; CHECK-NEXT: vmv1r.v v8, v94921; CHECK-NEXT: vmv1r.v v9, v104922; CHECK-NEXT: vmv1r.v v10, v114923; CHECK-NEXT: vmv1r.v v11, v124924; CHECK-NEXT: vmv1r.v v12, v134925; CHECK-NEXT: vmv1r.v v13, v144926; CHECK-NEXT: vmv1r.v v14, v154927; CHECK-NEXT: vlseg8e32ff.v v7, (a0), v0.t4928; CHECK-NEXT: csrr a0, vl4929; CHECK-NEXT: sd a0, 0(a2)4930; CHECK-NEXT: ret4931entry:4932 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 5)4933 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 04934 %2 = call <vscale x 1 x float> @llvm.riscv.tuple.extract.nxv1f32.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)4935 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 14936 store i64 %3, ptr %outvl4937 ret <vscale x 1 x float> %24938}4939 4940define <vscale x 2 x float> @test_vlseg8ff_nxv2f32_triscv.vector.tuple_nxv8i8_8t(ptr %base, i64 %vl, ptr %outvl) {4941; CHECK-LABEL: test_vlseg8ff_nxv2f32_triscv.vector.tuple_nxv8i8_8t:4942; CHECK: # %bb.0: # %entry4943; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma4944; CHECK-NEXT: vlseg8e32ff.v v7, (a0)4945; CHECK-NEXT: csrr a0, vl4946; CHECK-NEXT: sd a0, 0(a2)4947; CHECK-NEXT: ret4948entry:4949 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) poison, ptr %base, i64 %vl, i64 5)4950 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 04951 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)4952 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 14953 store i64 %3, ptr %outvl4954 ret <vscale x 2 x float> %24955}4956 4957define <vscale x 2 x float> @test_vlseg8ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {4958; CHECK-LABEL: test_vlseg8ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_8t:4959; CHECK: # %bb.0: # %entry4960; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu4961; CHECK-NEXT: vmv1r.v v7, v84962; CHECK-NEXT: vmv1r.v v8, v94963; CHECK-NEXT: vmv1r.v v9, v104964; CHECK-NEXT: vmv1r.v v10, v114965; CHECK-NEXT: vmv1r.v v11, v124966; CHECK-NEXT: vmv1r.v v12, v134967; CHECK-NEXT: vmv1r.v v13, v144968; CHECK-NEXT: vmv1r.v v14, v154969; CHECK-NEXT: vlseg8e32ff.v v7, (a0), v0.t4970; CHECK-NEXT: csrr a0, vl4971; CHECK-NEXT: sd a0, 0(a2)4972; CHECK-NEXT: ret4973entry:4974 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 5)4975 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 04976 %2 = call <vscale x 2 x float> @llvm.riscv.tuple.extract.nxv2f32.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)4977 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 14978 store i64 %3, ptr %outvl4979 ret <vscale x 2 x float> %24980}4981 4982define <vscale x 1 x double> @test_vlseg2ff_nxv1f64_triscv.vector.tuple_nxv8i8_2t(ptr %base, i64 %vl, ptr %outvl) {4983; CHECK-LABEL: test_vlseg2ff_nxv1f64_triscv.vector.tuple_nxv8i8_2t:4984; CHECK: # %bb.0: # %entry4985; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma4986; CHECK-NEXT: vlseg2e64ff.v v7, (a0)4987; CHECK-NEXT: csrr a0, vl4988; CHECK-NEXT: sd a0, 0(a2)4989; CHECK-NEXT: ret4990entry:4991 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) poison, ptr %base, i64 %vl, i64 6)4992 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 04993 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)4994 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 14995 store i64 %3, ptr %outvl4996 ret <vscale x 1 x double> %24997}4998 4999define <vscale x 1 x double> @test_vlseg2ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5000; CHECK-LABEL: test_vlseg2ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_2t:5001; CHECK: # %bb.0: # %entry5002; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu5003; CHECK-NEXT: vmv1r.v v7, v85004; CHECK-NEXT: vmv1r.v v8, v95005; CHECK-NEXT: vlseg2e64ff.v v7, (a0), v0.t5006; CHECK-NEXT: csrr a0, vl5007; CHECK-NEXT: sd a0, 0(a2)5008; CHECK-NEXT: ret5009entry:5010 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)5011 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 05012 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)5013 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 15014 store i64 %3, ptr %outvl5015 ret <vscale x 1 x double> %25016}5017 5018define <vscale x 2 x double> @test_vlseg2ff_nxv2f64_triscv.vector.tuple_nxv16i8_2t(ptr %base, i64 %vl, ptr %outvl) {5019; CHECK-LABEL: test_vlseg2ff_nxv2f64_triscv.vector.tuple_nxv16i8_2t:5020; CHECK: # %bb.0: # %entry5021; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma5022; CHECK-NEXT: vlseg2e64ff.v v6, (a0)5023; CHECK-NEXT: csrr a0, vl5024; CHECK-NEXT: sd a0, 0(a2)5025; CHECK-NEXT: ret5026entry:5027 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, ptr %base, i64 %vl, i64 6)5028 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 05029 %2 = call <vscale x 2 x double> @llvm.riscv.tuple.extract.nxv2f64.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)5030 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 15031 store i64 %3, ptr %outvl5032 ret <vscale x 2 x double> %25033}5034 5035define <vscale x 2 x double> @test_vlseg2ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {5036; CHECK-LABEL: test_vlseg2ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_2t:5037; CHECK: # %bb.0: # %entry5038; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu5039; CHECK-NEXT: vmv2r.v v6, v85040; CHECK-NEXT: vmv2r.v v8, v105041; CHECK-NEXT: vlseg2e64ff.v v6, (a0), v0.t5042; CHECK-NEXT: csrr a0, vl5043; CHECK-NEXT: sd a0, 0(a2)5044; CHECK-NEXT: ret5045entry:5046 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 6)5047 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 05048 %2 = call <vscale x 2 x double> @llvm.riscv.tuple.extract.nxv2f64.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)5049 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 15050 store i64 %3, ptr %outvl5051 ret <vscale x 2 x double> %25052}5053 5054define <vscale x 4 x double> @test_vlseg2ff_nxv4f64_triscv.vector.tuple_nxv32i8_2t(ptr %base, i64 %vl, ptr %outvl) {5055; CHECK-LABEL: test_vlseg2ff_nxv4f64_triscv.vector.tuple_nxv32i8_2t:5056; CHECK: # %bb.0: # %entry5057; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, ma5058; CHECK-NEXT: vlseg2e64ff.v v4, (a0)5059; CHECK-NEXT: csrr a0, vl5060; CHECK-NEXT: sd a0, 0(a2)5061; CHECK-NEXT: ret5062entry:5063 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) poison, ptr %base, i64 %vl, i64 6)5064 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 05065 %2 = call <vscale x 4 x double> @llvm.riscv.tuple.extract.nxv4f64.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)5066 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 15067 store i64 %3, ptr %outvl5068 ret <vscale x 4 x double> %25069}5070 5071define <vscale x 4 x double> @test_vlseg2ff_mask_nxv4f64_triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {5072; CHECK-LABEL: test_vlseg2ff_mask_nxv4f64_triscv.vector.tuple_nxv32i8_2t:5073; CHECK: # %bb.0: # %entry5074; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, mu5075; CHECK-NEXT: vmv4r.v v4, v85076; CHECK-NEXT: vmv4r.v v8, v125077; CHECK-NEXT: vlseg2e64ff.v v4, (a0), v0.t5078; CHECK-NEXT: csrr a0, vl5079; CHECK-NEXT: sd a0, 0(a2)5080; CHECK-NEXT: ret5081entry:5082 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 6)5083 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 05084 %2 = call <vscale x 4 x double> @llvm.riscv.tuple.extract.nxv4f64.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)5085 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 15086 store i64 %3, ptr %outvl5087 ret <vscale x 4 x double> %25088}5089 5090define <vscale x 1 x double> @test_vlseg3ff_nxv1f64_triscv.vector.tuple_nxv8i8_3t(ptr %base, i64 %vl, ptr %outvl) {5091; CHECK-LABEL: test_vlseg3ff_nxv1f64_triscv.vector.tuple_nxv8i8_3t:5092; CHECK: # %bb.0: # %entry5093; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma5094; CHECK-NEXT: vlseg3e64ff.v v7, (a0)5095; CHECK-NEXT: csrr a0, vl5096; CHECK-NEXT: sd a0, 0(a2)5097; CHECK-NEXT: ret5098entry:5099 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) poison, ptr %base, i64 %vl, i64 6)5100 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 05101 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)5102 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 15103 store i64 %3, ptr %outvl5104 ret <vscale x 1 x double> %25105}5106 5107define <vscale x 1 x double> @test_vlseg3ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5108; CHECK-LABEL: test_vlseg3ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_3t:5109; CHECK: # %bb.0: # %entry5110; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu5111; CHECK-NEXT: vmv1r.v v7, v85112; CHECK-NEXT: vmv1r.v v8, v95113; CHECK-NEXT: vmv1r.v v9, v105114; CHECK-NEXT: vlseg3e64ff.v v7, (a0), v0.t5115; CHECK-NEXT: csrr a0, vl5116; CHECK-NEXT: sd a0, 0(a2)5117; CHECK-NEXT: ret5118entry:5119 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)5120 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 05121 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)5122 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 15123 store i64 %3, ptr %outvl5124 ret <vscale x 1 x double> %25125}5126 5127define <vscale x 2 x double> @test_vlseg3ff_nxv2f64_triscv.vector.tuple_nxv16i8_3t(ptr %base, i64 %vl, ptr %outvl) {5128; CHECK-LABEL: test_vlseg3ff_nxv2f64_triscv.vector.tuple_nxv16i8_3t:5129; CHECK: # %bb.0: # %entry5130; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma5131; CHECK-NEXT: vlseg3e64ff.v v6, (a0)5132; CHECK-NEXT: csrr a0, vl5133; CHECK-NEXT: sd a0, 0(a2)5134; CHECK-NEXT: ret5135entry:5136 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, ptr %base, i64 %vl, i64 6)5137 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 05138 %2 = call <vscale x 2 x double> @llvm.riscv.tuple.extract.nxv2f64.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)5139 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 15140 store i64 %3, ptr %outvl5141 ret <vscale x 2 x double> %25142}5143 5144define <vscale x 2 x double> @test_vlseg3ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {5145; CHECK-LABEL: test_vlseg3ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_3t:5146; CHECK: # %bb.0: # %entry5147; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu5148; CHECK-NEXT: vmv2r.v v6, v85149; CHECK-NEXT: vmv2r.v v8, v105150; CHECK-NEXT: vmv2r.v v10, v125151; CHECK-NEXT: vlseg3e64ff.v v6, (a0), v0.t5152; CHECK-NEXT: csrr a0, vl5153; CHECK-NEXT: sd a0, 0(a2)5154; CHECK-NEXT: ret5155entry:5156 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 6)5157 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 05158 %2 = call <vscale x 2 x double> @llvm.riscv.tuple.extract.nxv2f64.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)5159 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 15160 store i64 %3, ptr %outvl5161 ret <vscale x 2 x double> %25162}5163 5164define <vscale x 1 x double> @test_vlseg4ff_nxv1f64_triscv.vector.tuple_nxv8i8_4t(ptr %base, i64 %vl, ptr %outvl) {5165; CHECK-LABEL: test_vlseg4ff_nxv1f64_triscv.vector.tuple_nxv8i8_4t:5166; CHECK: # %bb.0: # %entry5167; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma5168; CHECK-NEXT: vlseg4e64ff.v v7, (a0)5169; CHECK-NEXT: csrr a0, vl5170; CHECK-NEXT: sd a0, 0(a2)5171; CHECK-NEXT: ret5172entry:5173 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, ptr %base, i64 %vl, i64 6)5174 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 05175 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)5176 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 15177 store i64 %3, ptr %outvl5178 ret <vscale x 1 x double> %25179}5180 5181define <vscale x 1 x double> @test_vlseg4ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5182; CHECK-LABEL: test_vlseg4ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_4t:5183; CHECK: # %bb.0: # %entry5184; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu5185; CHECK-NEXT: vmv1r.v v7, v85186; CHECK-NEXT: vmv1r.v v8, v95187; CHECK-NEXT: vmv1r.v v9, v105188; CHECK-NEXT: vmv1r.v v10, v115189; CHECK-NEXT: vlseg4e64ff.v v7, (a0), v0.t5190; CHECK-NEXT: csrr a0, vl5191; CHECK-NEXT: sd a0, 0(a2)5192; CHECK-NEXT: ret5193entry:5194 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)5195 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 05196 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)5197 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 15198 store i64 %3, ptr %outvl5199 ret <vscale x 1 x double> %25200}5201 5202define <vscale x 2 x double> @test_vlseg4ff_nxv2f64_triscv.vector.tuple_nxv16i8_4t(ptr %base, i64 %vl, ptr %outvl) {5203; CHECK-LABEL: test_vlseg4ff_nxv2f64_triscv.vector.tuple_nxv16i8_4t:5204; CHECK: # %bb.0: # %entry5205; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma5206; CHECK-NEXT: vlseg4e64ff.v v6, (a0)5207; CHECK-NEXT: csrr a0, vl5208; CHECK-NEXT: sd a0, 0(a2)5209; CHECK-NEXT: ret5210entry:5211 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) poison, ptr %base, i64 %vl, i64 6)5212 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 05213 %2 = call <vscale x 2 x double> @llvm.riscv.tuple.extract.nxv2f64.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)5214 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 15215 store i64 %3, ptr %outvl5216 ret <vscale x 2 x double> %25217}5218 5219define <vscale x 2 x double> @test_vlseg4ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {5220; CHECK-LABEL: test_vlseg4ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_4t:5221; CHECK: # %bb.0: # %entry5222; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu5223; CHECK-NEXT: vmv2r.v v6, v85224; CHECK-NEXT: vmv2r.v v8, v105225; CHECK-NEXT: vmv2r.v v10, v125226; CHECK-NEXT: vmv2r.v v12, v145227; CHECK-NEXT: vlseg4e64ff.v v6, (a0), v0.t5228; CHECK-NEXT: csrr a0, vl5229; CHECK-NEXT: sd a0, 0(a2)5230; CHECK-NEXT: ret5231entry:5232 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 6)5233 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 05234 %2 = call <vscale x 2 x double> @llvm.riscv.tuple.extract.nxv2f64.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)5235 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 15236 store i64 %3, ptr %outvl5237 ret <vscale x 2 x double> %25238}5239 5240define <vscale x 1 x double> @test_vlseg5ff_nxv1f64_triscv.vector.tuple_nxv8i8_5t(ptr %base, i64 %vl, ptr %outvl) {5241; CHECK-LABEL: test_vlseg5ff_nxv1f64_triscv.vector.tuple_nxv8i8_5t:5242; CHECK: # %bb.0: # %entry5243; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma5244; CHECK-NEXT: vlseg5e64ff.v v7, (a0)5245; CHECK-NEXT: csrr a0, vl5246; CHECK-NEXT: sd a0, 0(a2)5247; CHECK-NEXT: ret5248entry:5249 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) poison, ptr %base, i64 %vl, i64 6)5250 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 05251 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)5252 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 15253 store i64 %3, ptr %outvl5254 ret <vscale x 1 x double> %25255}5256 5257define <vscale x 1 x double> @test_vlseg5ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5258; CHECK-LABEL: test_vlseg5ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_5t:5259; CHECK: # %bb.0: # %entry5260; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu5261; CHECK-NEXT: vmv1r.v v7, v85262; CHECK-NEXT: vmv1r.v v8, v95263; CHECK-NEXT: vmv1r.v v9, v105264; CHECK-NEXT: vmv1r.v v10, v115265; CHECK-NEXT: vmv1r.v v11, v125266; CHECK-NEXT: vlseg5e64ff.v v7, (a0), v0.t5267; CHECK-NEXT: csrr a0, vl5268; CHECK-NEXT: sd a0, 0(a2)5269; CHECK-NEXT: ret5270entry:5271 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)5272 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 05273 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)5274 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 15275 store i64 %3, ptr %outvl5276 ret <vscale x 1 x double> %25277}5278 5279define <vscale x 1 x double> @test_vlseg6ff_nxv1f64_triscv.vector.tuple_nxv8i8_6t(ptr %base, i64 %vl, ptr %outvl) {5280; CHECK-LABEL: test_vlseg6ff_nxv1f64_triscv.vector.tuple_nxv8i8_6t:5281; CHECK: # %bb.0: # %entry5282; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma5283; CHECK-NEXT: vlseg6e64ff.v v7, (a0)5284; CHECK-NEXT: csrr a0, vl5285; CHECK-NEXT: sd a0, 0(a2)5286; CHECK-NEXT: ret5287entry:5288 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) poison, ptr %base, i64 %vl, i64 6)5289 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 05290 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)5291 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 15292 store i64 %3, ptr %outvl5293 ret <vscale x 1 x double> %25294}5295 5296define <vscale x 1 x double> @test_vlseg6ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5297; CHECK-LABEL: test_vlseg6ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_6t:5298; CHECK: # %bb.0: # %entry5299; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu5300; CHECK-NEXT: vmv1r.v v7, v85301; CHECK-NEXT: vmv1r.v v8, v95302; CHECK-NEXT: vmv1r.v v9, v105303; CHECK-NEXT: vmv1r.v v10, v115304; CHECK-NEXT: vmv1r.v v11, v125305; CHECK-NEXT: vmv1r.v v12, v135306; CHECK-NEXT: vlseg6e64ff.v v7, (a0), v0.t5307; CHECK-NEXT: csrr a0, vl5308; CHECK-NEXT: sd a0, 0(a2)5309; CHECK-NEXT: ret5310entry:5311 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)5312 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 05313 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)5314 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 15315 store i64 %3, ptr %outvl5316 ret <vscale x 1 x double> %25317}5318 5319define <vscale x 1 x double> @test_vlseg7ff_nxv1f64_triscv.vector.tuple_nxv8i8_7t(ptr %base, i64 %vl, ptr %outvl) {5320; CHECK-LABEL: test_vlseg7ff_nxv1f64_triscv.vector.tuple_nxv8i8_7t:5321; CHECK: # %bb.0: # %entry5322; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma5323; CHECK-NEXT: vlseg7e64ff.v v7, (a0)5324; CHECK-NEXT: csrr a0, vl5325; CHECK-NEXT: sd a0, 0(a2)5326; CHECK-NEXT: ret5327entry:5328 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) poison, ptr %base, i64 %vl, i64 6)5329 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 05330 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)5331 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 15332 store i64 %3, ptr %outvl5333 ret <vscale x 1 x double> %25334}5335 5336define <vscale x 1 x double> @test_vlseg7ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5337; CHECK-LABEL: test_vlseg7ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_7t:5338; CHECK: # %bb.0: # %entry5339; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu5340; CHECK-NEXT: vmv1r.v v7, v85341; CHECK-NEXT: vmv1r.v v8, v95342; CHECK-NEXT: vmv1r.v v9, v105343; CHECK-NEXT: vmv1r.v v10, v115344; CHECK-NEXT: vmv1r.v v11, v125345; CHECK-NEXT: vmv1r.v v12, v135346; CHECK-NEXT: vmv1r.v v13, v145347; CHECK-NEXT: vlseg7e64ff.v v7, (a0), v0.t5348; CHECK-NEXT: csrr a0, vl5349; CHECK-NEXT: sd a0, 0(a2)5350; CHECK-NEXT: ret5351entry:5352 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)5353 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 05354 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)5355 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 15356 store i64 %3, ptr %outvl5357 ret <vscale x 1 x double> %25358}5359 5360define <vscale x 1 x double> @test_vlseg8ff_nxv1f64_triscv.vector.tuple_nxv8i8_8t(ptr %base, i64 %vl, ptr %outvl) {5361; CHECK-LABEL: test_vlseg8ff_nxv1f64_triscv.vector.tuple_nxv8i8_8t:5362; CHECK: # %bb.0: # %entry5363; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma5364; CHECK-NEXT: vlseg8e64ff.v v7, (a0)5365; CHECK-NEXT: csrr a0, vl5366; CHECK-NEXT: sd a0, 0(a2)5367; CHECK-NEXT: ret5368entry:5369 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) poison, ptr %base, i64 %vl, i64 6)5370 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 05371 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)5372 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 15373 store i64 %3, ptr %outvl5374 ret <vscale x 1 x double> %25375}5376 5377define <vscale x 1 x double> @test_vlseg8ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5378; CHECK-LABEL: test_vlseg8ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_8t:5379; CHECK: # %bb.0: # %entry5380; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu5381; CHECK-NEXT: vmv1r.v v7, v85382; CHECK-NEXT: vmv1r.v v8, v95383; CHECK-NEXT: vmv1r.v v9, v105384; CHECK-NEXT: vmv1r.v v10, v115385; CHECK-NEXT: vmv1r.v v11, v125386; CHECK-NEXT: vmv1r.v v12, v135387; CHECK-NEXT: vmv1r.v v13, v145388; CHECK-NEXT: vmv1r.v v14, v155389; CHECK-NEXT: vlseg8e64ff.v v7, (a0), v0.t5390; CHECK-NEXT: csrr a0, vl5391; CHECK-NEXT: sd a0, 0(a2)5392; CHECK-NEXT: ret5393entry:5394 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 6)5395 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 05396 %2 = call <vscale x 1 x double> @llvm.riscv.tuple.extract.nxv1f64.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)5397 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 15398 store i64 %3, ptr %outvl5399 ret <vscale x 1 x double> %25400}5401 5402define <vscale x 1 x bfloat> @test_vlseg2ff_nxv1bf16_triscv.vector.tuple_nxv2i8_2t(ptr %base, i64 %vl, ptr %outvl) {5403; CHECK-LABEL: test_vlseg2ff_nxv1bf16_triscv.vector.tuple_nxv2i8_2t:5404; CHECK: # %bb.0: # %entry5405; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma5406; CHECK-NEXT: vlseg2e16ff.v v7, (a0)5407; CHECK-NEXT: csrr a0, vl5408; CHECK-NEXT: sd a0, 0(a2)5409; CHECK-NEXT: ret5410entry:5411 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)5412 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 05413 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %1, i32 1)5414 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 15415 store i64 %3, ptr %outvl5416 ret <vscale x 1 x bfloat> %25417}5418 5419define <vscale x 1 x bfloat> @test_vlseg2ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5420; CHECK-LABEL: test_vlseg2ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_2t:5421; CHECK: # %bb.0: # %entry5422; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu5423; CHECK-NEXT: vmv1r.v v7, v85424; CHECK-NEXT: vmv1r.v v8, v95425; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t5426; CHECK-NEXT: csrr a0, vl5427; CHECK-NEXT: sd a0, 0(a2)5428; CHECK-NEXT: ret5429entry:5430 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv2i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)5431 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 05432 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) %1, i32 1)5433 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i64} %0, 15434 store i64 %3, ptr %outvl5435 ret <vscale x 1 x bfloat> %25436}5437 5438define <vscale x 2 x bfloat> @test_vlseg2ff_nxv2bf16_triscv.vector.tuple_nxv4i8_2t(ptr %base, i64 %vl, ptr %outvl) {5439; CHECK-LABEL: test_vlseg2ff_nxv2bf16_triscv.vector.tuple_nxv4i8_2t:5440; CHECK: # %bb.0: # %entry5441; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma5442; CHECK-NEXT: vlseg2e16ff.v v7, (a0)5443; CHECK-NEXT: csrr a0, vl5444; CHECK-NEXT: sd a0, 0(a2)5445; CHECK-NEXT: ret5446entry:5447 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)5448 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 05449 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)5450 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 15451 store i64 %3, ptr %outvl5452 ret <vscale x 2 x bfloat> %25453}5454 5455define <vscale x 2 x bfloat> @test_vlseg2ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {5456; CHECK-LABEL: test_vlseg2ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_2t:5457; CHECK: # %bb.0: # %entry5458; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu5459; CHECK-NEXT: vmv1r.v v7, v85460; CHECK-NEXT: vmv1r.v v8, v95461; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t5462; CHECK-NEXT: csrr a0, vl5463; CHECK-NEXT: sd a0, 0(a2)5464; CHECK-NEXT: ret5465entry:5466 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)5467 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 05468 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) %1, i32 1)5469 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i64} %0, 15470 store i64 %3, ptr %outvl5471 ret <vscale x 2 x bfloat> %25472}5473 5474define <vscale x 4 x bfloat> @test_vlseg2ff_nxv4bf16_triscv.vector.tuple_nxv8i8_2t(ptr %base, i64 %vl, ptr %outvl) {5475; CHECK-LABEL: test_vlseg2ff_nxv4bf16_triscv.vector.tuple_nxv8i8_2t:5476; CHECK: # %bb.0: # %entry5477; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma5478; CHECK-NEXT: vlseg2e16ff.v v7, (a0)5479; CHECK-NEXT: csrr a0, vl5480; CHECK-NEXT: sd a0, 0(a2)5481; CHECK-NEXT: ret5482entry:5483 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)5484 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 05485 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)5486 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 15487 store i64 %3, ptr %outvl5488 ret <vscale x 4 x bfloat> %25489}5490 5491define <vscale x 4 x bfloat> @test_vlseg2ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {5492; CHECK-LABEL: test_vlseg2ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_2t:5493; CHECK: # %bb.0: # %entry5494; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu5495; CHECK-NEXT: vmv1r.v v7, v85496; CHECK-NEXT: vmv1r.v v8, v95497; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t5498; CHECK-NEXT: csrr a0, vl5499; CHECK-NEXT: sd a0, 0(a2)5500; CHECK-NEXT: ret5501entry:5502 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)5503 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 05504 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) %1, i32 1)5505 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i64} %0, 15506 store i64 %3, ptr %outvl5507 ret <vscale x 4 x bfloat> %25508}5509 5510define <vscale x 8 x bfloat> @test_vlseg2ff_nxv8bf16_triscv.vector.tuple_nxv16i8_2t(ptr %base, i64 %vl, ptr %outvl) {5511; CHECK-LABEL: test_vlseg2ff_nxv8bf16_triscv.vector.tuple_nxv16i8_2t:5512; CHECK: # %bb.0: # %entry5513; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma5514; CHECK-NEXT: vlseg2e16ff.v v6, (a0)5515; CHECK-NEXT: csrr a0, vl5516; CHECK-NEXT: sd a0, 0(a2)5517; CHECK-NEXT: ret5518entry:5519 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)5520 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 05521 %2 = call <vscale x 8 x bfloat> @llvm.riscv.tuple.extract.nxv8bf16.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)5522 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 15523 store i64 %3, ptr %outvl5524 ret <vscale x 8 x bfloat> %25525}5526 5527define <vscale x 8 x bfloat> @test_vlseg2ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {5528; CHECK-LABEL: test_vlseg2ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_2t:5529; CHECK: # %bb.0: # %entry5530; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu5531; CHECK-NEXT: vmv2r.v v6, v85532; CHECK-NEXT: vmv2r.v v8, v105533; CHECK-NEXT: vlseg2e16ff.v v6, (a0), v0.t5534; CHECK-NEXT: csrr a0, vl5535; CHECK-NEXT: sd a0, 0(a2)5536; CHECK-NEXT: ret5537entry:5538 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)5539 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 05540 %2 = call <vscale x 8 x bfloat> @llvm.riscv.tuple.extract.nxv8bf16.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) %1, i32 1)5541 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i64} %0, 15542 store i64 %3, ptr %outvl5543 ret <vscale x 8 x bfloat> %25544}5545 5546define <vscale x 16 x bfloat> @test_vlseg2ff_nxv16bf16_triscv.vector.tuple_nxv32i8_2t(ptr %base, i64 %vl, ptr %outvl) {5547; CHECK-LABEL: test_vlseg2ff_nxv16bf16_triscv.vector.tuple_nxv32i8_2t:5548; CHECK: # %bb.0: # %entry5549; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma5550; CHECK-NEXT: vlseg2e16ff.v v4, (a0)5551; CHECK-NEXT: csrr a0, vl5552; CHECK-NEXT: sd a0, 0(a2)5553; CHECK-NEXT: ret5554entry:5555 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) poison, ptr %base, i64 %vl, i64 4)5556 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 05557 %2 = call <vscale x 16 x bfloat> @llvm.riscv.tuple.extract.nxv16bf16.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)5558 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 15559 store i64 %3, ptr %outvl5560 ret <vscale x 16 x bfloat> %25561}5562 5563define <vscale x 16 x bfloat> @test_vlseg2ff_mask_nxv16bf16_triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, i64 %vl, <vscale x 16 x i1> %mask, ptr %outvl) {5564; CHECK-LABEL: test_vlseg2ff_mask_nxv16bf16_triscv.vector.tuple_nxv32i8_2t:5565; CHECK: # %bb.0: # %entry5566; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu5567; CHECK-NEXT: vmv4r.v v4, v85568; CHECK-NEXT: vmv4r.v v8, v125569; CHECK-NEXT: vlseg2e16ff.v v4, (a0), v0.t5570; CHECK-NEXT: csrr a0, vl5571; CHECK-NEXT: sd a0, 0(a2)5572; CHECK-NEXT: ret5573entry:5574 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv16i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %val, ptr %base, <vscale x 16 x i1> %mask, i64 %vl, i64 1, i64 4)5575 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 05576 %2 = call <vscale x 16 x bfloat> @llvm.riscv.tuple.extract.nxv16bf16.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) %1, i32 1)5577 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i64} %0, 15578 store i64 %3, ptr %outvl5579 ret <vscale x 16 x bfloat> %25580}5581 5582define <vscale x 1 x bfloat> @test_vlseg3ff_nxv1bf16_triscv.vector.tuple_nxv2i8_3t(ptr %base, i64 %vl, ptr %outvl) {5583; CHECK-LABEL: test_vlseg3ff_nxv1bf16_triscv.vector.tuple_nxv2i8_3t:5584; CHECK: # %bb.0: # %entry5585; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma5586; CHECK-NEXT: vlseg3e16ff.v v7, (a0)5587; CHECK-NEXT: csrr a0, vl5588; CHECK-NEXT: sd a0, 0(a2)5589; CHECK-NEXT: ret5590entry:5591 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)5592 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 05593 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %1, i32 1)5594 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 15595 store i64 %3, ptr %outvl5596 ret <vscale x 1 x bfloat> %25597}5598 5599define <vscale x 1 x bfloat> @test_vlseg3ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5600; CHECK-LABEL: test_vlseg3ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_3t:5601; CHECK: # %bb.0: # %entry5602; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu5603; CHECK-NEXT: vmv1r.v v7, v85604; CHECK-NEXT: vmv1r.v v8, v95605; CHECK-NEXT: vmv1r.v v9, v105606; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t5607; CHECK-NEXT: csrr a0, vl5608; CHECK-NEXT: sd a0, 0(a2)5609; CHECK-NEXT: ret5610entry:5611 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv2i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)5612 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 05613 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) %1, i32 1)5614 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i64} %0, 15615 store i64 %3, ptr %outvl5616 ret <vscale x 1 x bfloat> %25617}5618 5619define <vscale x 2 x bfloat> @test_vlseg3ff_nxv2bf16_triscv.vector.tuple_nxv4i8_3t(ptr %base, i64 %vl, ptr %outvl) {5620; CHECK-LABEL: test_vlseg3ff_nxv2bf16_triscv.vector.tuple_nxv4i8_3t:5621; CHECK: # %bb.0: # %entry5622; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma5623; CHECK-NEXT: vlseg3e16ff.v v7, (a0)5624; CHECK-NEXT: csrr a0, vl5625; CHECK-NEXT: sd a0, 0(a2)5626; CHECK-NEXT: ret5627entry:5628 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)5629 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 05630 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)5631 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 15632 store i64 %3, ptr %outvl5633 ret <vscale x 2 x bfloat> %25634}5635 5636define <vscale x 2 x bfloat> @test_vlseg3ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {5637; CHECK-LABEL: test_vlseg3ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_3t:5638; CHECK: # %bb.0: # %entry5639; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu5640; CHECK-NEXT: vmv1r.v v7, v85641; CHECK-NEXT: vmv1r.v v8, v95642; CHECK-NEXT: vmv1r.v v9, v105643; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t5644; CHECK-NEXT: csrr a0, vl5645; CHECK-NEXT: sd a0, 0(a2)5646; CHECK-NEXT: ret5647entry:5648 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)5649 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 05650 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) %1, i32 1)5651 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i64} %0, 15652 store i64 %3, ptr %outvl5653 ret <vscale x 2 x bfloat> %25654}5655 5656define <vscale x 4 x bfloat> @test_vlseg3ff_nxv4bf16_triscv.vector.tuple_nxv8i8_3t(ptr %base, i64 %vl, ptr %outvl) {5657; CHECK-LABEL: test_vlseg3ff_nxv4bf16_triscv.vector.tuple_nxv8i8_3t:5658; CHECK: # %bb.0: # %entry5659; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma5660; CHECK-NEXT: vlseg3e16ff.v v7, (a0)5661; CHECK-NEXT: csrr a0, vl5662; CHECK-NEXT: sd a0, 0(a2)5663; CHECK-NEXT: ret5664entry:5665 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)5666 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 05667 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)5668 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 15669 store i64 %3, ptr %outvl5670 ret <vscale x 4 x bfloat> %25671}5672 5673define <vscale x 4 x bfloat> @test_vlseg3ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {5674; CHECK-LABEL: test_vlseg3ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_3t:5675; CHECK: # %bb.0: # %entry5676; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu5677; CHECK-NEXT: vmv1r.v v7, v85678; CHECK-NEXT: vmv1r.v v8, v95679; CHECK-NEXT: vmv1r.v v9, v105680; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t5681; CHECK-NEXT: csrr a0, vl5682; CHECK-NEXT: sd a0, 0(a2)5683; CHECK-NEXT: ret5684entry:5685 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)5686 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 05687 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) %1, i32 1)5688 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i64} %0, 15689 store i64 %3, ptr %outvl5690 ret <vscale x 4 x bfloat> %25691}5692 5693define <vscale x 8 x bfloat> @test_vlseg3ff_nxv8bf16_triscv.vector.tuple_nxv16i8_3t(ptr %base, i64 %vl, ptr %outvl) {5694; CHECK-LABEL: test_vlseg3ff_nxv8bf16_triscv.vector.tuple_nxv16i8_3t:5695; CHECK: # %bb.0: # %entry5696; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma5697; CHECK-NEXT: vlseg3e16ff.v v6, (a0)5698; CHECK-NEXT: csrr a0, vl5699; CHECK-NEXT: sd a0, 0(a2)5700; CHECK-NEXT: ret5701entry:5702 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) poison, ptr %base, i64 %vl, i64 4)5703 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 05704 %2 = call <vscale x 8 x bfloat> @llvm.riscv.tuple.extract.nxv8bf16.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)5705 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 15706 store i64 %3, ptr %outvl5707 ret <vscale x 8 x bfloat> %25708}5709 5710define <vscale x 8 x bfloat> @test_vlseg3ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {5711; CHECK-LABEL: test_vlseg3ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_3t:5712; CHECK: # %bb.0: # %entry5713; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu5714; CHECK-NEXT: vmv2r.v v6, v85715; CHECK-NEXT: vmv2r.v v8, v105716; CHECK-NEXT: vmv2r.v v10, v125717; CHECK-NEXT: vlseg3e16ff.v v6, (a0), v0.t5718; CHECK-NEXT: csrr a0, vl5719; CHECK-NEXT: sd a0, 0(a2)5720; CHECK-NEXT: ret5721entry:5722 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)5723 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 05724 %2 = call <vscale x 8 x bfloat> @llvm.riscv.tuple.extract.nxv8bf16.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) %1, i32 1)5725 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i64} %0, 15726 store i64 %3, ptr %outvl5727 ret <vscale x 8 x bfloat> %25728}5729 5730define <vscale x 1 x bfloat> @test_vlseg4ff_nxv1bf16_triscv.vector.tuple_nxv2i8_4t(ptr %base, i64 %vl, ptr %outvl) {5731; CHECK-LABEL: test_vlseg4ff_nxv1bf16_triscv.vector.tuple_nxv2i8_4t:5732; CHECK: # %bb.0: # %entry5733; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma5734; CHECK-NEXT: vlseg4e16ff.v v7, (a0)5735; CHECK-NEXT: csrr a0, vl5736; CHECK-NEXT: sd a0, 0(a2)5737; CHECK-NEXT: ret5738entry:5739 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)5740 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 05741 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %1, i32 1)5742 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 15743 store i64 %3, ptr %outvl5744 ret <vscale x 1 x bfloat> %25745}5746 5747define <vscale x 1 x bfloat> @test_vlseg4ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5748; CHECK-LABEL: test_vlseg4ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_4t:5749; CHECK: # %bb.0: # %entry5750; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu5751; CHECK-NEXT: vmv1r.v v7, v85752; CHECK-NEXT: vmv1r.v v8, v95753; CHECK-NEXT: vmv1r.v v9, v105754; CHECK-NEXT: vmv1r.v v10, v115755; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t5756; CHECK-NEXT: csrr a0, vl5757; CHECK-NEXT: sd a0, 0(a2)5758; CHECK-NEXT: ret5759entry:5760 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv2i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)5761 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 05762 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) %1, i32 1)5763 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i64} %0, 15764 store i64 %3, ptr %outvl5765 ret <vscale x 1 x bfloat> %25766}5767 5768define <vscale x 2 x bfloat> @test_vlseg4ff_nxv2bf16_triscv.vector.tuple_nxv4i8_4t(ptr %base, i64 %vl, ptr %outvl) {5769; CHECK-LABEL: test_vlseg4ff_nxv2bf16_triscv.vector.tuple_nxv4i8_4t:5770; CHECK: # %bb.0: # %entry5771; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma5772; CHECK-NEXT: vlseg4e16ff.v v7, (a0)5773; CHECK-NEXT: csrr a0, vl5774; CHECK-NEXT: sd a0, 0(a2)5775; CHECK-NEXT: ret5776entry:5777 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)5778 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 05779 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)5780 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 15781 store i64 %3, ptr %outvl5782 ret <vscale x 2 x bfloat> %25783}5784 5785define <vscale x 2 x bfloat> @test_vlseg4ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {5786; CHECK-LABEL: test_vlseg4ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_4t:5787; CHECK: # %bb.0: # %entry5788; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu5789; CHECK-NEXT: vmv1r.v v7, v85790; CHECK-NEXT: vmv1r.v v8, v95791; CHECK-NEXT: vmv1r.v v9, v105792; CHECK-NEXT: vmv1r.v v10, v115793; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t5794; CHECK-NEXT: csrr a0, vl5795; CHECK-NEXT: sd a0, 0(a2)5796; CHECK-NEXT: ret5797entry:5798 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)5799 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 05800 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) %1, i32 1)5801 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i64} %0, 15802 store i64 %3, ptr %outvl5803 ret <vscale x 2 x bfloat> %25804}5805 5806define <vscale x 4 x bfloat> @test_vlseg4ff_nxv4bf16_triscv.vector.tuple_nxv8i8_4t(ptr %base, i64 %vl, ptr %outvl) {5807; CHECK-LABEL: test_vlseg4ff_nxv4bf16_triscv.vector.tuple_nxv8i8_4t:5808; CHECK: # %bb.0: # %entry5809; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma5810; CHECK-NEXT: vlseg4e16ff.v v7, (a0)5811; CHECK-NEXT: csrr a0, vl5812; CHECK-NEXT: sd a0, 0(a2)5813; CHECK-NEXT: ret5814entry:5815 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)5816 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 05817 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)5818 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 15819 store i64 %3, ptr %outvl5820 ret <vscale x 4 x bfloat> %25821}5822 5823define <vscale x 4 x bfloat> @test_vlseg4ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {5824; CHECK-LABEL: test_vlseg4ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_4t:5825; CHECK: # %bb.0: # %entry5826; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu5827; CHECK-NEXT: vmv1r.v v7, v85828; CHECK-NEXT: vmv1r.v v8, v95829; CHECK-NEXT: vmv1r.v v9, v105830; CHECK-NEXT: vmv1r.v v10, v115831; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t5832; CHECK-NEXT: csrr a0, vl5833; CHECK-NEXT: sd a0, 0(a2)5834; CHECK-NEXT: ret5835entry:5836 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)5837 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 05838 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) %1, i32 1)5839 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i64} %0, 15840 store i64 %3, ptr %outvl5841 ret <vscale x 4 x bfloat> %25842}5843 5844define <vscale x 8 x bfloat> @test_vlseg4ff_nxv8bf16_triscv.vector.tuple_nxv16i8_4t(ptr %base, i64 %vl, ptr %outvl) {5845; CHECK-LABEL: test_vlseg4ff_nxv8bf16_triscv.vector.tuple_nxv16i8_4t:5846; CHECK: # %bb.0: # %entry5847; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma5848; CHECK-NEXT: vlseg4e16ff.v v6, (a0)5849; CHECK-NEXT: csrr a0, vl5850; CHECK-NEXT: sd a0, 0(a2)5851; CHECK-NEXT: ret5852entry:5853 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) poison, ptr %base, i64 %vl, i64 4)5854 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 05855 %2 = call <vscale x 8 x bfloat> @llvm.riscv.tuple.extract.nxv8bf16.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)5856 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 15857 store i64 %3, ptr %outvl5858 ret <vscale x 8 x bfloat> %25859}5860 5861define <vscale x 8 x bfloat> @test_vlseg4ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, i64 %vl, <vscale x 8 x i1> %mask, ptr %outvl) {5862; CHECK-LABEL: test_vlseg4ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_4t:5863; CHECK: # %bb.0: # %entry5864; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu5865; CHECK-NEXT: vmv2r.v v6, v85866; CHECK-NEXT: vmv2r.v v8, v105867; CHECK-NEXT: vmv2r.v v10, v125868; CHECK-NEXT: vmv2r.v v12, v145869; CHECK-NEXT: vlseg4e16ff.v v6, (a0), v0.t5870; CHECK-NEXT: csrr a0, vl5871; CHECK-NEXT: sd a0, 0(a2)5872; CHECK-NEXT: ret5873entry:5874 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %val, ptr %base, <vscale x 8 x i1> %mask, i64 %vl, i64 1, i64 4)5875 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 05876 %2 = call <vscale x 8 x bfloat> @llvm.riscv.tuple.extract.nxv8bf16.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) %1, i32 1)5877 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i64} %0, 15878 store i64 %3, ptr %outvl5879 ret <vscale x 8 x bfloat> %25880}5881 5882define <vscale x 1 x bfloat> @test_vlseg5ff_nxv1bf16_triscv.vector.tuple_nxv2i8_5t(ptr %base, i64 %vl, ptr %outvl) {5883; CHECK-LABEL: test_vlseg5ff_nxv1bf16_triscv.vector.tuple_nxv2i8_5t:5884; CHECK: # %bb.0: # %entry5885; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma5886; CHECK-NEXT: vlseg5e16ff.v v7, (a0)5887; CHECK-NEXT: csrr a0, vl5888; CHECK-NEXT: sd a0, 0(a2)5889; CHECK-NEXT: ret5890entry:5891 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)5892 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 05893 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %1, i32 1)5894 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 15895 store i64 %3, ptr %outvl5896 ret <vscale x 1 x bfloat> %25897}5898 5899define <vscale x 1 x bfloat> @test_vlseg5ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {5900; CHECK-LABEL: test_vlseg5ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_5t:5901; CHECK: # %bb.0: # %entry5902; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu5903; CHECK-NEXT: vmv1r.v v7, v85904; CHECK-NEXT: vmv1r.v v8, v95905; CHECK-NEXT: vmv1r.v v9, v105906; CHECK-NEXT: vmv1r.v v10, v115907; CHECK-NEXT: vmv1r.v v11, v125908; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t5909; CHECK-NEXT: csrr a0, vl5910; CHECK-NEXT: sd a0, 0(a2)5911; CHECK-NEXT: ret5912entry:5913 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv2i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)5914 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 05915 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) %1, i32 1)5916 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i64} %0, 15917 store i64 %3, ptr %outvl5918 ret <vscale x 1 x bfloat> %25919}5920 5921define <vscale x 2 x bfloat> @test_vlseg5ff_nxv2bf16_triscv.vector.tuple_nxv4i8_5t(ptr %base, i64 %vl, ptr %outvl) {5922; CHECK-LABEL: test_vlseg5ff_nxv2bf16_triscv.vector.tuple_nxv4i8_5t:5923; CHECK: # %bb.0: # %entry5924; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma5925; CHECK-NEXT: vlseg5e16ff.v v7, (a0)5926; CHECK-NEXT: csrr a0, vl5927; CHECK-NEXT: sd a0, 0(a2)5928; CHECK-NEXT: ret5929entry:5930 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)5931 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 05932 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)5933 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 15934 store i64 %3, ptr %outvl5935 ret <vscale x 2 x bfloat> %25936}5937 5938define <vscale x 2 x bfloat> @test_vlseg5ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {5939; CHECK-LABEL: test_vlseg5ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_5t:5940; CHECK: # %bb.0: # %entry5941; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu5942; CHECK-NEXT: vmv1r.v v7, v85943; CHECK-NEXT: vmv1r.v v8, v95944; CHECK-NEXT: vmv1r.v v9, v105945; CHECK-NEXT: vmv1r.v v10, v115946; CHECK-NEXT: vmv1r.v v11, v125947; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t5948; CHECK-NEXT: csrr a0, vl5949; CHECK-NEXT: sd a0, 0(a2)5950; CHECK-NEXT: ret5951entry:5952 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)5953 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 05954 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) %1, i32 1)5955 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i64} %0, 15956 store i64 %3, ptr %outvl5957 ret <vscale x 2 x bfloat> %25958}5959 5960define <vscale x 4 x bfloat> @test_vlseg5ff_nxv4bf16_triscv.vector.tuple_nxv8i8_5t(ptr %base, i64 %vl, ptr %outvl) {5961; CHECK-LABEL: test_vlseg5ff_nxv4bf16_triscv.vector.tuple_nxv8i8_5t:5962; CHECK: # %bb.0: # %entry5963; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma5964; CHECK-NEXT: vlseg5e16ff.v v7, (a0)5965; CHECK-NEXT: csrr a0, vl5966; CHECK-NEXT: sd a0, 0(a2)5967; CHECK-NEXT: ret5968entry:5969 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) poison, ptr %base, i64 %vl, i64 4)5970 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 05971 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)5972 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 15973 store i64 %3, ptr %outvl5974 ret <vscale x 4 x bfloat> %25975}5976 5977define <vscale x 4 x bfloat> @test_vlseg5ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {5978; CHECK-LABEL: test_vlseg5ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_5t:5979; CHECK: # %bb.0: # %entry5980; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu5981; CHECK-NEXT: vmv1r.v v7, v85982; CHECK-NEXT: vmv1r.v v8, v95983; CHECK-NEXT: vmv1r.v v9, v105984; CHECK-NEXT: vmv1r.v v10, v115985; CHECK-NEXT: vmv1r.v v11, v125986; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t5987; CHECK-NEXT: csrr a0, vl5988; CHECK-NEXT: sd a0, 0(a2)5989; CHECK-NEXT: ret5990entry:5991 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)5992 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 05993 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) %1, i32 1)5994 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i64} %0, 15995 store i64 %3, ptr %outvl5996 ret <vscale x 4 x bfloat> %25997}5998 5999define <vscale x 1 x bfloat> @test_vlseg6ff_nxv1bf16_triscv.vector.tuple_nxv2i8_6t(ptr %base, i64 %vl, ptr %outvl) {6000; CHECK-LABEL: test_vlseg6ff_nxv1bf16_triscv.vector.tuple_nxv2i8_6t:6001; CHECK: # %bb.0: # %entry6002; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma6003; CHECK-NEXT: vlseg6e16ff.v v7, (a0)6004; CHECK-NEXT: csrr a0, vl6005; CHECK-NEXT: sd a0, 0(a2)6006; CHECK-NEXT: ret6007entry:6008 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)6009 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 06010 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %1, i32 1)6011 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 16012 store i64 %3, ptr %outvl6013 ret <vscale x 1 x bfloat> %26014}6015 6016define <vscale x 1 x bfloat> @test_vlseg6ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {6017; CHECK-LABEL: test_vlseg6ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_6t:6018; CHECK: # %bb.0: # %entry6019; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu6020; CHECK-NEXT: vmv1r.v v7, v86021; CHECK-NEXT: vmv1r.v v8, v96022; CHECK-NEXT: vmv1r.v v9, v106023; CHECK-NEXT: vmv1r.v v10, v116024; CHECK-NEXT: vmv1r.v v11, v126025; CHECK-NEXT: vmv1r.v v12, v136026; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t6027; CHECK-NEXT: csrr a0, vl6028; CHECK-NEXT: sd a0, 0(a2)6029; CHECK-NEXT: ret6030entry:6031 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv2i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)6032 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 06033 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) %1, i32 1)6034 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i64} %0, 16035 store i64 %3, ptr %outvl6036 ret <vscale x 1 x bfloat> %26037}6038 6039define <vscale x 2 x bfloat> @test_vlseg6ff_nxv2bf16_triscv.vector.tuple_nxv4i8_6t(ptr %base, i64 %vl, ptr %outvl) {6040; CHECK-LABEL: test_vlseg6ff_nxv2bf16_triscv.vector.tuple_nxv4i8_6t:6041; CHECK: # %bb.0: # %entry6042; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma6043; CHECK-NEXT: vlseg6e16ff.v v7, (a0)6044; CHECK-NEXT: csrr a0, vl6045; CHECK-NEXT: sd a0, 0(a2)6046; CHECK-NEXT: ret6047entry:6048 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)6049 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 06050 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)6051 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 16052 store i64 %3, ptr %outvl6053 ret <vscale x 2 x bfloat> %26054}6055 6056define <vscale x 2 x bfloat> @test_vlseg6ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {6057; CHECK-LABEL: test_vlseg6ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_6t:6058; CHECK: # %bb.0: # %entry6059; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu6060; CHECK-NEXT: vmv1r.v v7, v86061; CHECK-NEXT: vmv1r.v v8, v96062; CHECK-NEXT: vmv1r.v v9, v106063; CHECK-NEXT: vmv1r.v v10, v116064; CHECK-NEXT: vmv1r.v v11, v126065; CHECK-NEXT: vmv1r.v v12, v136066; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t6067; CHECK-NEXT: csrr a0, vl6068; CHECK-NEXT: sd a0, 0(a2)6069; CHECK-NEXT: ret6070entry:6071 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)6072 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 06073 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) %1, i32 1)6074 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i64} %0, 16075 store i64 %3, ptr %outvl6076 ret <vscale x 2 x bfloat> %26077}6078 6079define <vscale x 4 x bfloat> @test_vlseg6ff_nxv4bf16_triscv.vector.tuple_nxv8i8_6t(ptr %base, i64 %vl, ptr %outvl) {6080; CHECK-LABEL: test_vlseg6ff_nxv4bf16_triscv.vector.tuple_nxv8i8_6t:6081; CHECK: # %bb.0: # %entry6082; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma6083; CHECK-NEXT: vlseg6e16ff.v v7, (a0)6084; CHECK-NEXT: csrr a0, vl6085; CHECK-NEXT: sd a0, 0(a2)6086; CHECK-NEXT: ret6087entry:6088 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) poison, ptr %base, i64 %vl, i64 4)6089 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 06090 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)6091 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 16092 store i64 %3, ptr %outvl6093 ret <vscale x 4 x bfloat> %26094}6095 6096define <vscale x 4 x bfloat> @test_vlseg6ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {6097; CHECK-LABEL: test_vlseg6ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_6t:6098; CHECK: # %bb.0: # %entry6099; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu6100; CHECK-NEXT: vmv1r.v v7, v86101; CHECK-NEXT: vmv1r.v v8, v96102; CHECK-NEXT: vmv1r.v v9, v106103; CHECK-NEXT: vmv1r.v v10, v116104; CHECK-NEXT: vmv1r.v v11, v126105; CHECK-NEXT: vmv1r.v v12, v136106; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t6107; CHECK-NEXT: csrr a0, vl6108; CHECK-NEXT: sd a0, 0(a2)6109; CHECK-NEXT: ret6110entry:6111 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)6112 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 06113 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) %1, i32 1)6114 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i64} %0, 16115 store i64 %3, ptr %outvl6116 ret <vscale x 4 x bfloat> %26117}6118 6119define <vscale x 1 x bfloat> @test_vlseg7ff_nxv1bf16_triscv.vector.tuple_nxv2i8_7t(ptr %base, i64 %vl, ptr %outvl) {6120; CHECK-LABEL: test_vlseg7ff_nxv1bf16_triscv.vector.tuple_nxv2i8_7t:6121; CHECK: # %bb.0: # %entry6122; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma6123; CHECK-NEXT: vlseg7e16ff.v v7, (a0)6124; CHECK-NEXT: csrr a0, vl6125; CHECK-NEXT: sd a0, 0(a2)6126; CHECK-NEXT: ret6127entry:6128 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)6129 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 06130 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %1, i32 1)6131 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 16132 store i64 %3, ptr %outvl6133 ret <vscale x 1 x bfloat> %26134}6135 6136define <vscale x 1 x bfloat> @test_vlseg7ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {6137; CHECK-LABEL: test_vlseg7ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_7t:6138; CHECK: # %bb.0: # %entry6139; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu6140; CHECK-NEXT: vmv1r.v v7, v86141; CHECK-NEXT: vmv1r.v v8, v96142; CHECK-NEXT: vmv1r.v v9, v106143; CHECK-NEXT: vmv1r.v v10, v116144; CHECK-NEXT: vmv1r.v v11, v126145; CHECK-NEXT: vmv1r.v v12, v136146; CHECK-NEXT: vmv1r.v v13, v146147; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t6148; CHECK-NEXT: csrr a0, vl6149; CHECK-NEXT: sd a0, 0(a2)6150; CHECK-NEXT: ret6151entry:6152 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv2i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)6153 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 06154 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) %1, i32 1)6155 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i64} %0, 16156 store i64 %3, ptr %outvl6157 ret <vscale x 1 x bfloat> %26158}6159 6160define <vscale x 2 x bfloat> @test_vlseg7ff_nxv2bf16_triscv.vector.tuple_nxv4i8_7t(ptr %base, i64 %vl, ptr %outvl) {6161; CHECK-LABEL: test_vlseg7ff_nxv2bf16_triscv.vector.tuple_nxv4i8_7t:6162; CHECK: # %bb.0: # %entry6163; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma6164; CHECK-NEXT: vlseg7e16ff.v v7, (a0)6165; CHECK-NEXT: csrr a0, vl6166; CHECK-NEXT: sd a0, 0(a2)6167; CHECK-NEXT: ret6168entry:6169 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)6170 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 06171 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)6172 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 16173 store i64 %3, ptr %outvl6174 ret <vscale x 2 x bfloat> %26175}6176 6177define <vscale x 2 x bfloat> @test_vlseg7ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {6178; CHECK-LABEL: test_vlseg7ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_7t:6179; CHECK: # %bb.0: # %entry6180; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu6181; CHECK-NEXT: vmv1r.v v7, v86182; CHECK-NEXT: vmv1r.v v8, v96183; CHECK-NEXT: vmv1r.v v9, v106184; CHECK-NEXT: vmv1r.v v10, v116185; CHECK-NEXT: vmv1r.v v11, v126186; CHECK-NEXT: vmv1r.v v12, v136187; CHECK-NEXT: vmv1r.v v13, v146188; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t6189; CHECK-NEXT: csrr a0, vl6190; CHECK-NEXT: sd a0, 0(a2)6191; CHECK-NEXT: ret6192entry:6193 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)6194 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 06195 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) %1, i32 1)6196 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i64} %0, 16197 store i64 %3, ptr %outvl6198 ret <vscale x 2 x bfloat> %26199}6200 6201define <vscale x 4 x bfloat> @test_vlseg7ff_nxv4bf16_triscv.vector.tuple_nxv8i8_7t(ptr %base, i64 %vl, ptr %outvl) {6202; CHECK-LABEL: test_vlseg7ff_nxv4bf16_triscv.vector.tuple_nxv8i8_7t:6203; CHECK: # %bb.0: # %entry6204; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma6205; CHECK-NEXT: vlseg7e16ff.v v7, (a0)6206; CHECK-NEXT: csrr a0, vl6207; CHECK-NEXT: sd a0, 0(a2)6208; CHECK-NEXT: ret6209entry:6210 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) poison, ptr %base, i64 %vl, i64 4)6211 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 06212 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)6213 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 16214 store i64 %3, ptr %outvl6215 ret <vscale x 4 x bfloat> %26216}6217 6218define <vscale x 4 x bfloat> @test_vlseg7ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {6219; CHECK-LABEL: test_vlseg7ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_7t:6220; CHECK: # %bb.0: # %entry6221; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu6222; CHECK-NEXT: vmv1r.v v7, v86223; CHECK-NEXT: vmv1r.v v8, v96224; CHECK-NEXT: vmv1r.v v9, v106225; CHECK-NEXT: vmv1r.v v10, v116226; CHECK-NEXT: vmv1r.v v11, v126227; CHECK-NEXT: vmv1r.v v12, v136228; CHECK-NEXT: vmv1r.v v13, v146229; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t6230; CHECK-NEXT: csrr a0, vl6231; CHECK-NEXT: sd a0, 0(a2)6232; CHECK-NEXT: ret6233entry:6234 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)6235 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 06236 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) %1, i32 1)6237 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i64} %0, 16238 store i64 %3, ptr %outvl6239 ret <vscale x 4 x bfloat> %26240}6241 6242define <vscale x 1 x bfloat> @test_vlseg8ff_nxv1bf16_triscv.vector.tuple_nxv2i8_8t(ptr %base, i64 %vl, ptr %outvl) {6243; CHECK-LABEL: test_vlseg8ff_nxv1bf16_triscv.vector.tuple_nxv2i8_8t:6244; CHECK: # %bb.0: # %entry6245; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma6246; CHECK-NEXT: vlseg8e16ff.v v7, (a0)6247; CHECK-NEXT: csrr a0, vl6248; CHECK-NEXT: sd a0, 0(a2)6249; CHECK-NEXT: ret6250entry:6251 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)6252 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 06253 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %1, i32 1)6254 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 16255 store i64 %3, ptr %outvl6256 ret <vscale x 1 x bfloat> %26257}6258 6259define <vscale x 1 x bfloat> @test_vlseg8ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 1 x i1> %mask, ptr %outvl) {6260; CHECK-LABEL: test_vlseg8ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_8t:6261; CHECK: # %bb.0: # %entry6262; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu6263; CHECK-NEXT: vmv1r.v v7, v86264; CHECK-NEXT: vmv1r.v v8, v96265; CHECK-NEXT: vmv1r.v v9, v106266; CHECK-NEXT: vmv1r.v v10, v116267; CHECK-NEXT: vmv1r.v v11, v126268; CHECK-NEXT: vmv1r.v v12, v136269; CHECK-NEXT: vmv1r.v v13, v146270; CHECK-NEXT: vmv1r.v v14, v156271; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t6272; CHECK-NEXT: csrr a0, vl6273; CHECK-NEXT: sd a0, 0(a2)6274; CHECK-NEXT: ret6275entry:6276 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv2i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %val, ptr %base, <vscale x 1 x i1> %mask, i64 %vl, i64 1, i64 4)6277 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 06278 %2 = call <vscale x 1 x bfloat> @llvm.riscv.tuple.extract.nxv1bf16.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) %1, i32 1)6279 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i64} %0, 16280 store i64 %3, ptr %outvl6281 ret <vscale x 1 x bfloat> %26282}6283 6284define <vscale x 2 x bfloat> @test_vlseg8ff_nxv2bf16_triscv.vector.tuple_nxv4i8_8t(ptr %base, i64 %vl, ptr %outvl) {6285; CHECK-LABEL: test_vlseg8ff_nxv2bf16_triscv.vector.tuple_nxv4i8_8t:6286; CHECK: # %bb.0: # %entry6287; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma6288; CHECK-NEXT: vlseg8e16ff.v v7, (a0)6289; CHECK-NEXT: csrr a0, vl6290; CHECK-NEXT: sd a0, 0(a2)6291; CHECK-NEXT: ret6292entry:6293 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)6294 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 06295 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)6296 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 16297 store i64 %3, ptr %outvl6298 ret <vscale x 2 x bfloat> %26299}6300 6301define <vscale x 2 x bfloat> @test_vlseg8ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 2 x i1> %mask, ptr %outvl) {6302; CHECK-LABEL: test_vlseg8ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_8t:6303; CHECK: # %bb.0: # %entry6304; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu6305; CHECK-NEXT: vmv1r.v v7, v86306; CHECK-NEXT: vmv1r.v v8, v96307; CHECK-NEXT: vmv1r.v v9, v106308; CHECK-NEXT: vmv1r.v v10, v116309; CHECK-NEXT: vmv1r.v v11, v126310; CHECK-NEXT: vmv1r.v v12, v136311; CHECK-NEXT: vmv1r.v v13, v146312; CHECK-NEXT: vmv1r.v v14, v156313; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t6314; CHECK-NEXT: csrr a0, vl6315; CHECK-NEXT: sd a0, 0(a2)6316; CHECK-NEXT: ret6317entry:6318 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %val, ptr %base, <vscale x 2 x i1> %mask, i64 %vl, i64 1, i64 4)6319 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 06320 %2 = call <vscale x 2 x bfloat> @llvm.riscv.tuple.extract.nxv2bf16.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) %1, i32 1)6321 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i64} %0, 16322 store i64 %3, ptr %outvl6323 ret <vscale x 2 x bfloat> %26324}6325 6326define <vscale x 4 x bfloat> @test_vlseg8ff_nxv4bf16_triscv.vector.tuple_nxv8i8_8t(ptr %base, i64 %vl, ptr %outvl) {6327; CHECK-LABEL: test_vlseg8ff_nxv4bf16_triscv.vector.tuple_nxv8i8_8t:6328; CHECK: # %bb.0: # %entry6329; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma6330; CHECK-NEXT: vlseg8e16ff.v v7, (a0)6331; CHECK-NEXT: csrr a0, vl6332; CHECK-NEXT: sd a0, 0(a2)6333; CHECK-NEXT: ret6334entry:6335 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) poison, ptr %base, i64 %vl, i64 4)6336 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 06337 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)6338 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 16339 store i64 %3, ptr %outvl6340 ret <vscale x 4 x bfloat> %26341}6342 6343define <vscale x 4 x bfloat> @test_vlseg8ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, i64 %vl, <vscale x 4 x i1> %mask, ptr %outvl) {6344; CHECK-LABEL: test_vlseg8ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_8t:6345; CHECK: # %bb.0: # %entry6346; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu6347; CHECK-NEXT: vmv1r.v v7, v86348; CHECK-NEXT: vmv1r.v v8, v96349; CHECK-NEXT: vmv1r.v v9, v106350; CHECK-NEXT: vmv1r.v v10, v116351; CHECK-NEXT: vmv1r.v v11, v126352; CHECK-NEXT: vmv1r.v v12, v136353; CHECK-NEXT: vmv1r.v v13, v146354; CHECK-NEXT: vmv1r.v v14, v156355; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t6356; CHECK-NEXT: csrr a0, vl6357; CHECK-NEXT: sd a0, 0(a2)6358; CHECK-NEXT: ret6359entry:6360 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %val, ptr %base, <vscale x 4 x i1> %mask, i64 %vl, i64 1, i64 4)6361 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 06362 %2 = call <vscale x 4 x bfloat> @llvm.riscv.tuple.extract.nxv4bf16.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) %1, i32 1)6363 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i64} %0, 16364 store i64 %3, ptr %outvl6365 ret <vscale x 4 x bfloat> %26366}6367 6368