1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+zve64d,+f,+d,+zvfh,+zvfbfmin \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4 5declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv1i8_2t(target("riscv.vector.tuple", <vscale x 1 x i8>, 2), ptr, i32, i32) 6declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv1i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 2), ptr, <vscale x 1 x i1>, i32, i32, i32) 7 8define <vscale x 1 x i8> @test_vlseg2ff_nxv1i8_triscv.vector.tuple_nxv1i8_2t(ptr %base, i32 %vl, ptr %outvl) { 9; CHECK-LABEL: test_vlseg2ff_nxv1i8_triscv.vector.tuple_nxv1i8_2t: 10; CHECK: # %bb.0: # %entry 11; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 12; CHECK-NEXT: vlseg2e8ff.v v7, (a0) 13; CHECK-NEXT: csrr a0, vl 14; CHECK-NEXT: sw a0, 0(a2) 15; CHECK-NEXT: ret 16entry: 17 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv1i8_2t(target("riscv.vector.tuple", <vscale x 1 x i8>, 2) undef, ptr %base, i32 %vl, i32 3) 18 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i32} %0, 0 19 %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) 20 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i32} %0, 1 21 store i32 %3, ptr %outvl 22 ret <vscale x 1 x i8> %2 23} 24 25define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 26; CHECK-LABEL: test_vlseg2ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_2t: 27; CHECK: # %bb.0: # %entry 28; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu 29; CHECK-NEXT: vmv1r.v v7, v8 30; CHECK-NEXT: vmv1r.v v8, v9 31; CHECK-NEXT: vlseg2e8ff.v v7, (a0), v0.t 32; CHECK-NEXT: csrr a0, vl 33; CHECK-NEXT: sw a0, 0(a2) 34; CHECK-NEXT: ret 35entry: 36 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 3) 37 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i32} %0, 0 38 %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) 39 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 2), i32} %0, 1 40 store i32 %3, ptr %outvl 41 ret <vscale x 1 x i8> %2 42} 43 44declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2), ptr, i32, i32) 45declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv2i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 2), ptr, <vscale x 2 x i1>, i32, i32, i32) 46 47define <vscale x 2 x i8> @test_vlseg2ff_nxv2i8_triscv.vector.tuple_nxv2i8_2t(ptr %base, i32 %vl, ptr %outvl) { 48; CHECK-LABEL: test_vlseg2ff_nxv2i8_triscv.vector.tuple_nxv2i8_2t: 49; CHECK: # %bb.0: # %entry 50; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 51; CHECK-NEXT: vlseg2e8ff.v v7, (a0) 52; CHECK-NEXT: csrr a0, vl 53; CHECK-NEXT: sw a0, 0(a2) 54; CHECK-NEXT: ret 55entry: 56 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) undef, ptr %base, i32 %vl, i32 3) 57 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 0 58 %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) 59 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 1 60 store i32 %3, ptr %outvl 61 ret <vscale x 2 x i8> %2 62} 63 64define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 65; CHECK-LABEL: test_vlseg2ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_2t: 66; CHECK: # %bb.0: # %entry 67; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 68; CHECK-NEXT: vmv1r.v v7, v8 69; CHECK-NEXT: vmv1r.v v8, v9 70; CHECK-NEXT: vlseg2e8ff.v v7, (a0), v0.t 71; CHECK-NEXT: csrr a0, vl 72; CHECK-NEXT: sw a0, 0(a2) 73; CHECK-NEXT: ret 74entry: 75 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 3) 76 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 0 77 %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) 78 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 1 79 store i32 %3, ptr %outvl 80 ret <vscale x 2 x i8> %2 81} 82 83declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2), ptr, i32, i32) 84declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2), ptr, <vscale x 4 x i1>, i32, i32, i32) 85 86define <vscale x 4 x i8> @test_vlseg2ff_nxv4i8_triscv.vector.tuple_nxv4i8_2t(ptr %base, i32 %vl, ptr %outvl) { 87; CHECK-LABEL: test_vlseg2ff_nxv4i8_triscv.vector.tuple_nxv4i8_2t: 88; CHECK: # %bb.0: # %entry 89; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 90; CHECK-NEXT: vlseg2e8ff.v v7, (a0) 91; CHECK-NEXT: csrr a0, vl 92; CHECK-NEXT: sw a0, 0(a2) 93; CHECK-NEXT: ret 94entry: 95 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) undef, ptr %base, i32 %vl, i32 3) 96 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 97 %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) 98 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 99 store i32 %3, ptr %outvl 100 ret <vscale x 4 x i8> %2 101} 102 103define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 104; CHECK-LABEL: test_vlseg2ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_2t: 105; CHECK: # %bb.0: # %entry 106; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu 107; CHECK-NEXT: vmv1r.v v7, v8 108; CHECK-NEXT: vmv1r.v v8, v9 109; CHECK-NEXT: vlseg2e8ff.v v7, (a0), v0.t 110; CHECK-NEXT: csrr a0, vl 111; CHECK-NEXT: sw a0, 0(a2) 112; CHECK-NEXT: ret 113entry: 114 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 3) 115 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 116 %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) 117 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 118 store i32 %3, ptr %outvl 119 ret <vscale x 4 x i8> %2 120} 121 122declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2), ptr, i32, i32) 123declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2), ptr, <vscale x 8 x i1>, i32, i32, i32) 124 125define <vscale x 8 x i8> @test_vlseg2ff_nxv8i8_triscv.vector.tuple_nxv8i8_2t(ptr %base, i32 %vl, ptr %outvl) { 126; CHECK-LABEL: test_vlseg2ff_nxv8i8_triscv.vector.tuple_nxv8i8_2t: 127; CHECK: # %bb.0: # %entry 128; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 129; CHECK-NEXT: vlseg2e8ff.v v7, (a0) 130; CHECK-NEXT: csrr a0, vl 131; CHECK-NEXT: sw a0, 0(a2) 132; CHECK-NEXT: ret 133entry: 134 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) undef, ptr %base, i32 %vl, i32 3) 135 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 136 %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) 137 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 138 store i32 %3, ptr %outvl 139 ret <vscale x 8 x i8> %2 140} 141 142define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 143; CHECK-LABEL: test_vlseg2ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_2t: 144; CHECK: # %bb.0: # %entry 145; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu 146; CHECK-NEXT: vmv1r.v v7, v8 147; CHECK-NEXT: vmv1r.v v8, v9 148; CHECK-NEXT: vlseg2e8ff.v v7, (a0), v0.t 149; CHECK-NEXT: csrr a0, vl 150; CHECK-NEXT: sw a0, 0(a2) 151; CHECK-NEXT: ret 152entry: 153 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 3) 154 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 155 %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) 156 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 157 store i32 %3, ptr %outvl 158 ret <vscale x 8 x i8> %2 159} 160 161declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2), ptr, i32, i32) 162declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv16i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2), ptr, <vscale x 16 x i1>, i32, i32, i32) 163 164define <vscale x 16 x i8> @test_vlseg2ff_nxv16i8_triscv.vector.tuple_nxv16i8_2t(ptr %base, i32 %vl, ptr %outvl) { 165; CHECK-LABEL: test_vlseg2ff_nxv16i8_triscv.vector.tuple_nxv16i8_2t: 166; CHECK: # %bb.0: # %entry 167; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma 168; CHECK-NEXT: vlseg2e8ff.v v6, (a0) 169; CHECK-NEXT: csrr a0, vl 170; CHECK-NEXT: sw a0, 0(a2) 171; CHECK-NEXT: ret 172entry: 173 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) undef, ptr %base, i32 %vl, i32 3) 174 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 175 %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) 176 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 177 store i32 %3, ptr %outvl 178 ret <vscale x 16 x i8> %2 179} 180 181define <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, i32 %vl, <vscale x 16 x i1> %mask, ptr %outvl) { 182; CHECK-LABEL: test_vlseg2ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_2t: 183; CHECK: # %bb.0: # %entry 184; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu 185; CHECK-NEXT: vmv2r.v v6, v8 186; CHECK-NEXT: vmv2r.v v8, v10 187; CHECK-NEXT: vlseg2e8ff.v v6, (a0), v0.t 188; CHECK-NEXT: csrr a0, vl 189; CHECK-NEXT: sw a0, 0(a2) 190; CHECK-NEXT: ret 191entry: 192 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 3) 193 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 194 %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) 195 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 196 store i32 %3, ptr %outvl 197 ret <vscale x 16 x i8> %2 198} 199 200declare {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2), ptr, i32, i32) 201declare {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv32i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2), ptr, <vscale x 32 x i1>, i32, i32, i32) 202 203define <vscale x 32 x i8> @test_vlseg2ff_nxv32i8_triscv.vector.tuple_nxv32i8_2t(ptr %base, i32 %vl, ptr %outvl) { 204; CHECK-LABEL: test_vlseg2ff_nxv32i8_triscv.vector.tuple_nxv32i8_2t: 205; CHECK: # %bb.0: # %entry 206; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma 207; CHECK-NEXT: vlseg2e8ff.v v4, (a0) 208; CHECK-NEXT: csrr a0, vl 209; CHECK-NEXT: sw a0, 0(a2) 210; CHECK-NEXT: ret 211entry: 212 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) undef, ptr %base, i32 %vl, i32 3) 213 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 214 %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) 215 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 216 store i32 %3, ptr %outvl 217 ret <vscale x 32 x i8> %2 218} 219 220define <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, i32 %vl, <vscale x 32 x i1> %mask, ptr %outvl) { 221; CHECK-LABEL: test_vlseg2ff_mask_nxv32i8_triscv.vector.tuple_nxv32i8_2t: 222; CHECK: # %bb.0: # %entry 223; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, mu 224; CHECK-NEXT: vmv4r.v v4, v8 225; CHECK-NEXT: vmv4r.v v8, v12 226; CHECK-NEXT: vlseg2e8ff.v v4, (a0), v0.t 227; CHECK-NEXT: csrr a0, vl 228; CHECK-NEXT: sw a0, 0(a2) 229; CHECK-NEXT: ret 230entry: 231 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 3) 232 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 233 %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) 234 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 235 store i32 %3, ptr %outvl 236 ret <vscale x 32 x i8> %2 237} 238 239declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv1i8_3t(target("riscv.vector.tuple", <vscale x 1 x i8>, 3), ptr, i32, i32) 240declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv1i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 3), ptr, <vscale x 1 x i1>, i32, i32, i32) 241 242define <vscale x 1 x i8> @test_vlseg3ff_nxv1i8_triscv.vector.tuple_nxv1i8_3t(ptr %base, i32 %vl, ptr %outvl) { 243; CHECK-LABEL: test_vlseg3ff_nxv1i8_triscv.vector.tuple_nxv1i8_3t: 244; CHECK: # %bb.0: # %entry 245; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 246; CHECK-NEXT: vlseg3e8ff.v v7, (a0) 247; CHECK-NEXT: csrr a0, vl 248; CHECK-NEXT: sw a0, 0(a2) 249; CHECK-NEXT: ret 250entry: 251 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv1i8_3t(target("riscv.vector.tuple", <vscale x 1 x i8>, 3) undef, ptr %base, i32 %vl, i32 3) 252 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i32} %0, 0 253 %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) 254 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i32} %0, 1 255 store i32 %3, ptr %outvl 256 ret <vscale x 1 x i8> %2 257} 258 259define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 260; CHECK-LABEL: test_vlseg3ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_3t: 261; CHECK: # %bb.0: # %entry 262; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu 263; CHECK-NEXT: vmv1r.v v7, v8 264; CHECK-NEXT: vmv1r.v v8, v9 265; CHECK-NEXT: vmv1r.v v9, v10 266; CHECK-NEXT: vlseg3e8ff.v v7, (a0), v0.t 267; CHECK-NEXT: csrr a0, vl 268; CHECK-NEXT: sw a0, 0(a2) 269; CHECK-NEXT: ret 270entry: 271 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 3) 272 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i32} %0, 0 273 %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) 274 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 3), i32} %0, 1 275 store i32 %3, ptr %outvl 276 ret <vscale x 1 x i8> %2 277} 278 279declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3), ptr, i32, i32) 280declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv2i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 3), ptr, <vscale x 2 x i1>, i32, i32, i32) 281 282define <vscale x 2 x i8> @test_vlseg3ff_nxv2i8_triscv.vector.tuple_nxv2i8_3t(ptr %base, i32 %vl, ptr %outvl) { 283; CHECK-LABEL: test_vlseg3ff_nxv2i8_triscv.vector.tuple_nxv2i8_3t: 284; CHECK: # %bb.0: # %entry 285; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 286; CHECK-NEXT: vlseg3e8ff.v v7, (a0) 287; CHECK-NEXT: csrr a0, vl 288; CHECK-NEXT: sw a0, 0(a2) 289; CHECK-NEXT: ret 290entry: 291 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) undef, ptr %base, i32 %vl, i32 3) 292 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 0 293 %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) 294 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 1 295 store i32 %3, ptr %outvl 296 ret <vscale x 2 x i8> %2 297} 298 299define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 300; CHECK-LABEL: test_vlseg3ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_3t: 301; CHECK: # %bb.0: # %entry 302; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 303; CHECK-NEXT: vmv1r.v v7, v8 304; CHECK-NEXT: vmv1r.v v8, v9 305; CHECK-NEXT: vmv1r.v v9, v10 306; CHECK-NEXT: vlseg3e8ff.v v7, (a0), v0.t 307; CHECK-NEXT: csrr a0, vl 308; CHECK-NEXT: sw a0, 0(a2) 309; CHECK-NEXT: ret 310entry: 311 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 3) 312 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 0 313 %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) 314 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 1 315 store i32 %3, ptr %outvl 316 ret <vscale x 2 x i8> %2 317} 318 319declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3), ptr, i32, i32) 320declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3), ptr, <vscale x 4 x i1>, i32, i32, i32) 321 322define <vscale x 4 x i8> @test_vlseg3ff_nxv4i8_triscv.vector.tuple_nxv4i8_3t(ptr %base, i32 %vl, ptr %outvl) { 323; CHECK-LABEL: test_vlseg3ff_nxv4i8_triscv.vector.tuple_nxv4i8_3t: 324; CHECK: # %bb.0: # %entry 325; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 326; CHECK-NEXT: vlseg3e8ff.v v7, (a0) 327; CHECK-NEXT: csrr a0, vl 328; CHECK-NEXT: sw a0, 0(a2) 329; CHECK-NEXT: ret 330entry: 331 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) undef, ptr %base, i32 %vl, i32 3) 332 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 333 %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) 334 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 335 store i32 %3, ptr %outvl 336 ret <vscale x 4 x i8> %2 337} 338 339define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 340; CHECK-LABEL: test_vlseg3ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_3t: 341; CHECK: # %bb.0: # %entry 342; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu 343; CHECK-NEXT: vmv1r.v v7, v8 344; CHECK-NEXT: vmv1r.v v8, v9 345; CHECK-NEXT: vmv1r.v v9, v10 346; CHECK-NEXT: vlseg3e8ff.v v7, (a0), v0.t 347; CHECK-NEXT: csrr a0, vl 348; CHECK-NEXT: sw a0, 0(a2) 349; CHECK-NEXT: ret 350entry: 351 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 3) 352 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 353 %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) 354 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 355 store i32 %3, ptr %outvl 356 ret <vscale x 4 x i8> %2 357} 358 359declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3), ptr, i32, i32) 360declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3), ptr, <vscale x 8 x i1>, i32, i32, i32) 361 362define <vscale x 8 x i8> @test_vlseg3ff_nxv8i8_triscv.vector.tuple_nxv8i8_3t(ptr %base, i32 %vl, ptr %outvl) { 363; CHECK-LABEL: test_vlseg3ff_nxv8i8_triscv.vector.tuple_nxv8i8_3t: 364; CHECK: # %bb.0: # %entry 365; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 366; CHECK-NEXT: vlseg3e8ff.v v7, (a0) 367; CHECK-NEXT: csrr a0, vl 368; CHECK-NEXT: sw a0, 0(a2) 369; CHECK-NEXT: ret 370entry: 371 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) undef, ptr %base, i32 %vl, i32 3) 372 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 373 %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) 374 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 375 store i32 %3, ptr %outvl 376 ret <vscale x 8 x i8> %2 377} 378 379define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 380; CHECK-LABEL: test_vlseg3ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_3t: 381; CHECK: # %bb.0: # %entry 382; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu 383; CHECK-NEXT: vmv1r.v v7, v8 384; CHECK-NEXT: vmv1r.v v8, v9 385; CHECK-NEXT: vmv1r.v v9, v10 386; CHECK-NEXT: vlseg3e8ff.v v7, (a0), v0.t 387; CHECK-NEXT: csrr a0, vl 388; CHECK-NEXT: sw a0, 0(a2) 389; CHECK-NEXT: ret 390entry: 391 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 3) 392 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 393 %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) 394 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 395 store i32 %3, ptr %outvl 396 ret <vscale x 8 x i8> %2 397} 398 399declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3), ptr, i32, i32) 400declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv16i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3), ptr, <vscale x 16 x i1>, i32, i32, i32) 401 402define <vscale x 16 x i8> @test_vlseg3ff_nxv16i8_triscv.vector.tuple_nxv16i8_3t(ptr %base, i32 %vl, ptr %outvl) { 403; CHECK-LABEL: test_vlseg3ff_nxv16i8_triscv.vector.tuple_nxv16i8_3t: 404; CHECK: # %bb.0: # %entry 405; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma 406; CHECK-NEXT: vlseg3e8ff.v v6, (a0) 407; CHECK-NEXT: csrr a0, vl 408; CHECK-NEXT: sw a0, 0(a2) 409; CHECK-NEXT: ret 410entry: 411 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) undef, ptr %base, i32 %vl, i32 3) 412 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 413 %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) 414 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 415 store i32 %3, ptr %outvl 416 ret <vscale x 16 x i8> %2 417} 418 419define <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, i32 %vl, <vscale x 16 x i1> %mask, ptr %outvl) { 420; CHECK-LABEL: test_vlseg3ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_3t: 421; CHECK: # %bb.0: # %entry 422; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu 423; CHECK-NEXT: vmv2r.v v6, v8 424; CHECK-NEXT: vmv2r.v v8, v10 425; CHECK-NEXT: vmv2r.v v10, v12 426; CHECK-NEXT: vlseg3e8ff.v v6, (a0), v0.t 427; CHECK-NEXT: csrr a0, vl 428; CHECK-NEXT: sw a0, 0(a2) 429; CHECK-NEXT: ret 430entry: 431 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 3) 432 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 433 %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) 434 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 435 store i32 %3, ptr %outvl 436 ret <vscale x 16 x i8> %2 437} 438 439declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv1i8_4t(target("riscv.vector.tuple", <vscale x 1 x i8>, 4), ptr, i32, i32) 440declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv1i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 4), ptr, <vscale x 1 x i1>, i32, i32, i32) 441 442define <vscale x 1 x i8> @test_vlseg4ff_nxv1i8_triscv.vector.tuple_nxv1i8_4t(ptr %base, i32 %vl, ptr %outvl) { 443; CHECK-LABEL: test_vlseg4ff_nxv1i8_triscv.vector.tuple_nxv1i8_4t: 444; CHECK: # %bb.0: # %entry 445; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 446; CHECK-NEXT: vlseg4e8ff.v v7, (a0) 447; CHECK-NEXT: csrr a0, vl 448; CHECK-NEXT: sw a0, 0(a2) 449; CHECK-NEXT: ret 450entry: 451 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv1i8_4t(target("riscv.vector.tuple", <vscale x 1 x i8>, 4) undef, ptr %base, i32 %vl, i32 3) 452 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i32} %0, 0 453 %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) 454 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i32} %0, 1 455 store i32 %3, ptr %outvl 456 ret <vscale x 1 x i8> %2 457} 458 459define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 460; CHECK-LABEL: test_vlseg4ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_4t: 461; CHECK: # %bb.0: # %entry 462; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu 463; CHECK-NEXT: vmv1r.v v7, v8 464; CHECK-NEXT: vmv1r.v v8, v9 465; CHECK-NEXT: vmv1r.v v9, v10 466; CHECK-NEXT: vmv1r.v v10, v11 467; CHECK-NEXT: vlseg4e8ff.v v7, (a0), v0.t 468; CHECK-NEXT: csrr a0, vl 469; CHECK-NEXT: sw a0, 0(a2) 470; CHECK-NEXT: ret 471entry: 472 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 3) 473 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i32} %0, 0 474 %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) 475 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 4), i32} %0, 1 476 store i32 %3, ptr %outvl 477 ret <vscale x 1 x i8> %2 478} 479 480declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4), ptr, i32, i32) 481declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv2i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 4), ptr, <vscale x 2 x i1>, i32, i32, i32) 482 483define <vscale x 2 x i8> @test_vlseg4ff_nxv2i8_triscv.vector.tuple_nxv2i8_4t(ptr %base, i32 %vl, ptr %outvl) { 484; CHECK-LABEL: test_vlseg4ff_nxv2i8_triscv.vector.tuple_nxv2i8_4t: 485; CHECK: # %bb.0: # %entry 486; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 487; CHECK-NEXT: vlseg4e8ff.v v7, (a0) 488; CHECK-NEXT: csrr a0, vl 489; CHECK-NEXT: sw a0, 0(a2) 490; CHECK-NEXT: ret 491entry: 492 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) undef, ptr %base, i32 %vl, i32 3) 493 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 0 494 %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) 495 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 1 496 store i32 %3, ptr %outvl 497 ret <vscale x 2 x i8> %2 498} 499 500define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 501; CHECK-LABEL: test_vlseg4ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_4t: 502; CHECK: # %bb.0: # %entry 503; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 504; CHECK-NEXT: vmv1r.v v7, v8 505; CHECK-NEXT: vmv1r.v v8, v9 506; CHECK-NEXT: vmv1r.v v9, v10 507; CHECK-NEXT: vmv1r.v v10, v11 508; CHECK-NEXT: vlseg4e8ff.v v7, (a0), v0.t 509; CHECK-NEXT: csrr a0, vl 510; CHECK-NEXT: sw a0, 0(a2) 511; CHECK-NEXT: ret 512entry: 513 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 3) 514 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 0 515 %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) 516 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 1 517 store i32 %3, ptr %outvl 518 ret <vscale x 2 x i8> %2 519} 520 521declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4), ptr, i32, i32) 522declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4), ptr, <vscale x 4 x i1>, i32, i32, i32) 523 524define <vscale x 4 x i8> @test_vlseg4ff_nxv4i8_triscv.vector.tuple_nxv4i8_4t(ptr %base, i32 %vl, ptr %outvl) { 525; CHECK-LABEL: test_vlseg4ff_nxv4i8_triscv.vector.tuple_nxv4i8_4t: 526; CHECK: # %bb.0: # %entry 527; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 528; CHECK-NEXT: vlseg4e8ff.v v7, (a0) 529; CHECK-NEXT: csrr a0, vl 530; CHECK-NEXT: sw a0, 0(a2) 531; CHECK-NEXT: ret 532entry: 533 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) undef, ptr %base, i32 %vl, i32 3) 534 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 535 %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) 536 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 537 store i32 %3, ptr %outvl 538 ret <vscale x 4 x i8> %2 539} 540 541define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 542; CHECK-LABEL: test_vlseg4ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_4t: 543; CHECK: # %bb.0: # %entry 544; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu 545; CHECK-NEXT: vmv1r.v v7, v8 546; CHECK-NEXT: vmv1r.v v8, v9 547; CHECK-NEXT: vmv1r.v v9, v10 548; CHECK-NEXT: vmv1r.v v10, v11 549; CHECK-NEXT: vlseg4e8ff.v v7, (a0), v0.t 550; CHECK-NEXT: csrr a0, vl 551; CHECK-NEXT: sw a0, 0(a2) 552; CHECK-NEXT: ret 553entry: 554 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 3) 555 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 556 %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) 557 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 558 store i32 %3, ptr %outvl 559 ret <vscale x 4 x i8> %2 560} 561 562declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4), ptr, i32, i32) 563declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4), ptr, <vscale x 8 x i1>, i32, i32, i32) 564 565define <vscale x 8 x i8> @test_vlseg4ff_nxv8i8_triscv.vector.tuple_nxv8i8_4t(ptr %base, i32 %vl, ptr %outvl) { 566; CHECK-LABEL: test_vlseg4ff_nxv8i8_triscv.vector.tuple_nxv8i8_4t: 567; CHECK: # %bb.0: # %entry 568; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 569; CHECK-NEXT: vlseg4e8ff.v v7, (a0) 570; CHECK-NEXT: csrr a0, vl 571; CHECK-NEXT: sw a0, 0(a2) 572; CHECK-NEXT: ret 573entry: 574 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) undef, ptr %base, i32 %vl, i32 3) 575 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 576 %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) 577 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 578 store i32 %3, ptr %outvl 579 ret <vscale x 8 x i8> %2 580} 581 582define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 583; CHECK-LABEL: test_vlseg4ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_4t: 584; CHECK: # %bb.0: # %entry 585; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu 586; CHECK-NEXT: vmv1r.v v7, v8 587; CHECK-NEXT: vmv1r.v v8, v9 588; CHECK-NEXT: vmv1r.v v9, v10 589; CHECK-NEXT: vmv1r.v v10, v11 590; CHECK-NEXT: vlseg4e8ff.v v7, (a0), v0.t 591; CHECK-NEXT: csrr a0, vl 592; CHECK-NEXT: sw a0, 0(a2) 593; CHECK-NEXT: ret 594entry: 595 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 3) 596 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 597 %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) 598 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 599 store i32 %3, ptr %outvl 600 ret <vscale x 8 x i8> %2 601} 602 603declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4), ptr, i32, i32) 604declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv16i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4), ptr, <vscale x 16 x i1>, i32, i32, i32) 605 606define <vscale x 16 x i8> @test_vlseg4ff_nxv16i8_triscv.vector.tuple_nxv16i8_4t(ptr %base, i32 %vl, ptr %outvl) { 607; CHECK-LABEL: test_vlseg4ff_nxv16i8_triscv.vector.tuple_nxv16i8_4t: 608; CHECK: # %bb.0: # %entry 609; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma 610; CHECK-NEXT: vlseg4e8ff.v v6, (a0) 611; CHECK-NEXT: csrr a0, vl 612; CHECK-NEXT: sw a0, 0(a2) 613; CHECK-NEXT: ret 614entry: 615 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) undef, ptr %base, i32 %vl, i32 3) 616 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 617 %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) 618 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 619 store i32 %3, ptr %outvl 620 ret <vscale x 16 x i8> %2 621} 622 623define <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, i32 %vl, <vscale x 16 x i1> %mask, ptr %outvl) { 624; CHECK-LABEL: test_vlseg4ff_mask_nxv16i8_triscv.vector.tuple_nxv16i8_4t: 625; CHECK: # %bb.0: # %entry 626; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, mu 627; CHECK-NEXT: vmv2r.v v6, v8 628; CHECK-NEXT: vmv2r.v v8, v10 629; CHECK-NEXT: vmv2r.v v10, v12 630; CHECK-NEXT: vmv2r.v v12, v14 631; CHECK-NEXT: vlseg4e8ff.v v6, (a0), v0.t 632; CHECK-NEXT: csrr a0, vl 633; CHECK-NEXT: sw a0, 0(a2) 634; CHECK-NEXT: ret 635entry: 636 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 3) 637 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 638 %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) 639 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 640 store i32 %3, ptr %outvl 641 ret <vscale x 16 x i8> %2 642} 643 644declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv1i8_5t(target("riscv.vector.tuple", <vscale x 1 x i8>, 5), ptr, i32, i32) 645declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv1i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 5), ptr, <vscale x 1 x i1>, i32, i32, i32) 646 647define <vscale x 1 x i8> @test_vlseg5ff_nxv1i8_triscv.vector.tuple_nxv1i8_5t(ptr %base, i32 %vl, ptr %outvl) { 648; CHECK-LABEL: test_vlseg5ff_nxv1i8_triscv.vector.tuple_nxv1i8_5t: 649; CHECK: # %bb.0: # %entry 650; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 651; CHECK-NEXT: vlseg5e8ff.v v7, (a0) 652; CHECK-NEXT: csrr a0, vl 653; CHECK-NEXT: sw a0, 0(a2) 654; CHECK-NEXT: ret 655entry: 656 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv1i8_5t(target("riscv.vector.tuple", <vscale x 1 x i8>, 5) undef, ptr %base, i32 %vl, i32 3) 657 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i32} %0, 0 658 %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) 659 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i32} %0, 1 660 store i32 %3, ptr %outvl 661 ret <vscale x 1 x i8> %2 662} 663 664define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 665; CHECK-LABEL: test_vlseg5ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_5t: 666; CHECK: # %bb.0: # %entry 667; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu 668; CHECK-NEXT: vmv1r.v v7, v8 669; CHECK-NEXT: vmv1r.v v8, v9 670; CHECK-NEXT: vmv1r.v v9, v10 671; CHECK-NEXT: vmv1r.v v10, v11 672; CHECK-NEXT: vmv1r.v v11, v12 673; CHECK-NEXT: vlseg5e8ff.v v7, (a0), v0.t 674; CHECK-NEXT: csrr a0, vl 675; CHECK-NEXT: sw a0, 0(a2) 676; CHECK-NEXT: ret 677entry: 678 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 3) 679 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i32} %0, 0 680 %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) 681 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 5), i32} %0, 1 682 store i32 %3, ptr %outvl 683 ret <vscale x 1 x i8> %2 684} 685 686declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5), ptr, i32, i32) 687declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv2i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 5), ptr, <vscale x 2 x i1>, i32, i32, i32) 688 689define <vscale x 2 x i8> @test_vlseg5ff_nxv2i8_triscv.vector.tuple_nxv2i8_5t(ptr %base, i32 %vl, ptr %outvl) { 690; CHECK-LABEL: test_vlseg5ff_nxv2i8_triscv.vector.tuple_nxv2i8_5t: 691; CHECK: # %bb.0: # %entry 692; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 693; CHECK-NEXT: vlseg5e8ff.v v7, (a0) 694; CHECK-NEXT: csrr a0, vl 695; CHECK-NEXT: sw a0, 0(a2) 696; CHECK-NEXT: ret 697entry: 698 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) undef, ptr %base, i32 %vl, i32 3) 699 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 0 700 %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) 701 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 1 702 store i32 %3, ptr %outvl 703 ret <vscale x 2 x i8> %2 704} 705 706define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 707; CHECK-LABEL: test_vlseg5ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_5t: 708; CHECK: # %bb.0: # %entry 709; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 710; CHECK-NEXT: vmv1r.v v7, v8 711; CHECK-NEXT: vmv1r.v v8, v9 712; CHECK-NEXT: vmv1r.v v9, v10 713; CHECK-NEXT: vmv1r.v v10, v11 714; CHECK-NEXT: vmv1r.v v11, v12 715; CHECK-NEXT: vlseg5e8ff.v v7, (a0), v0.t 716; CHECK-NEXT: csrr a0, vl 717; CHECK-NEXT: sw a0, 0(a2) 718; CHECK-NEXT: ret 719entry: 720 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 3) 721 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 0 722 %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) 723 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 1 724 store i32 %3, ptr %outvl 725 ret <vscale x 2 x i8> %2 726} 727 728declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5), ptr, i32, i32) 729declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5), ptr, <vscale x 4 x i1>, i32, i32, i32) 730 731define <vscale x 4 x i8> @test_vlseg5ff_nxv4i8_triscv.vector.tuple_nxv4i8_5t(ptr %base, i32 %vl, ptr %outvl) { 732; CHECK-LABEL: test_vlseg5ff_nxv4i8_triscv.vector.tuple_nxv4i8_5t: 733; CHECK: # %bb.0: # %entry 734; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 735; CHECK-NEXT: vlseg5e8ff.v v7, (a0) 736; CHECK-NEXT: csrr a0, vl 737; CHECK-NEXT: sw a0, 0(a2) 738; CHECK-NEXT: ret 739entry: 740 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) undef, ptr %base, i32 %vl, i32 3) 741 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 742 %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) 743 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 744 store i32 %3, ptr %outvl 745 ret <vscale x 4 x i8> %2 746} 747 748define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 749; CHECK-LABEL: test_vlseg5ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_5t: 750; CHECK: # %bb.0: # %entry 751; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu 752; CHECK-NEXT: vmv1r.v v7, v8 753; CHECK-NEXT: vmv1r.v v8, v9 754; CHECK-NEXT: vmv1r.v v9, v10 755; CHECK-NEXT: vmv1r.v v10, v11 756; CHECK-NEXT: vmv1r.v v11, v12 757; CHECK-NEXT: vlseg5e8ff.v v7, (a0), v0.t 758; CHECK-NEXT: csrr a0, vl 759; CHECK-NEXT: sw a0, 0(a2) 760; CHECK-NEXT: ret 761entry: 762 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 3) 763 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 764 %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) 765 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 766 store i32 %3, ptr %outvl 767 ret <vscale x 4 x i8> %2 768} 769 770declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5), ptr, i32, i32) 771declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5), ptr, <vscale x 8 x i1>, i32, i32, i32) 772 773define <vscale x 8 x i8> @test_vlseg5ff_nxv8i8_triscv.vector.tuple_nxv8i8_5t(ptr %base, i32 %vl, ptr %outvl) { 774; CHECK-LABEL: test_vlseg5ff_nxv8i8_triscv.vector.tuple_nxv8i8_5t: 775; CHECK: # %bb.0: # %entry 776; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 777; CHECK-NEXT: vlseg5e8ff.v v7, (a0) 778; CHECK-NEXT: csrr a0, vl 779; CHECK-NEXT: sw a0, 0(a2) 780; CHECK-NEXT: ret 781entry: 782 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) undef, ptr %base, i32 %vl, i32 3) 783 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 784 %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) 785 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 786 store i32 %3, ptr %outvl 787 ret <vscale x 8 x i8> %2 788} 789 790define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 791; CHECK-LABEL: test_vlseg5ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_5t: 792; CHECK: # %bb.0: # %entry 793; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu 794; CHECK-NEXT: vmv1r.v v7, v8 795; CHECK-NEXT: vmv1r.v v8, v9 796; CHECK-NEXT: vmv1r.v v9, v10 797; CHECK-NEXT: vmv1r.v v10, v11 798; CHECK-NEXT: vmv1r.v v11, v12 799; CHECK-NEXT: vlseg5e8ff.v v7, (a0), v0.t 800; CHECK-NEXT: csrr a0, vl 801; CHECK-NEXT: sw a0, 0(a2) 802; CHECK-NEXT: ret 803entry: 804 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 3) 805 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 806 %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) 807 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 808 store i32 %3, ptr %outvl 809 ret <vscale x 8 x i8> %2 810} 811 812declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv1i8_6t(target("riscv.vector.tuple", <vscale x 1 x i8>, 6), ptr, i32, i32) 813declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv1i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 6), ptr, <vscale x 1 x i1>, i32, i32, i32) 814 815define <vscale x 1 x i8> @test_vlseg6ff_nxv1i8_triscv.vector.tuple_nxv1i8_6t(ptr %base, i32 %vl, ptr %outvl) { 816; CHECK-LABEL: test_vlseg6ff_nxv1i8_triscv.vector.tuple_nxv1i8_6t: 817; CHECK: # %bb.0: # %entry 818; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 819; CHECK-NEXT: vlseg6e8ff.v v7, (a0) 820; CHECK-NEXT: csrr a0, vl 821; CHECK-NEXT: sw a0, 0(a2) 822; CHECK-NEXT: ret 823entry: 824 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv1i8_6t(target("riscv.vector.tuple", <vscale x 1 x i8>, 6) undef, ptr %base, i32 %vl, i32 3) 825 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i32} %0, 0 826 %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) 827 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i32} %0, 1 828 store i32 %3, ptr %outvl 829 ret <vscale x 1 x i8> %2 830} 831 832define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 833; CHECK-LABEL: test_vlseg6ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_6t: 834; CHECK: # %bb.0: # %entry 835; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu 836; CHECK-NEXT: vmv1r.v v7, v8 837; CHECK-NEXT: vmv1r.v v8, v9 838; CHECK-NEXT: vmv1r.v v9, v10 839; CHECK-NEXT: vmv1r.v v10, v11 840; CHECK-NEXT: vmv1r.v v11, v12 841; CHECK-NEXT: vmv1r.v v12, v13 842; CHECK-NEXT: vlseg6e8ff.v v7, (a0), v0.t 843; CHECK-NEXT: csrr a0, vl 844; CHECK-NEXT: sw a0, 0(a2) 845; CHECK-NEXT: ret 846entry: 847 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 3) 848 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i32} %0, 0 849 %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) 850 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 6), i32} %0, 1 851 store i32 %3, ptr %outvl 852 ret <vscale x 1 x i8> %2 853} 854 855declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6), ptr, i32, i32) 856declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv2i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 6), ptr, <vscale x 2 x i1>, i32, i32, i32) 857 858define <vscale x 2 x i8> @test_vlseg6ff_nxv2i8_triscv.vector.tuple_nxv2i8_6t(ptr %base, i32 %vl, ptr %outvl) { 859; CHECK-LABEL: test_vlseg6ff_nxv2i8_triscv.vector.tuple_nxv2i8_6t: 860; CHECK: # %bb.0: # %entry 861; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 862; CHECK-NEXT: vlseg6e8ff.v v7, (a0) 863; CHECK-NEXT: csrr a0, vl 864; CHECK-NEXT: sw a0, 0(a2) 865; CHECK-NEXT: ret 866entry: 867 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) undef, ptr %base, i32 %vl, i32 3) 868 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 0 869 %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) 870 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 1 871 store i32 %3, ptr %outvl 872 ret <vscale x 2 x i8> %2 873} 874 875define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 876; CHECK-LABEL: test_vlseg6ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_6t: 877; CHECK: # %bb.0: # %entry 878; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 879; CHECK-NEXT: vmv1r.v v7, v8 880; CHECK-NEXT: vmv1r.v v8, v9 881; CHECK-NEXT: vmv1r.v v9, v10 882; CHECK-NEXT: vmv1r.v v10, v11 883; CHECK-NEXT: vmv1r.v v11, v12 884; CHECK-NEXT: vmv1r.v v12, v13 885; CHECK-NEXT: vlseg6e8ff.v v7, (a0), v0.t 886; CHECK-NEXT: csrr a0, vl 887; CHECK-NEXT: sw a0, 0(a2) 888; CHECK-NEXT: ret 889entry: 890 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 3) 891 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 0 892 %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) 893 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 1 894 store i32 %3, ptr %outvl 895 ret <vscale x 2 x i8> %2 896} 897 898declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6), ptr, i32, i32) 899declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6), ptr, <vscale x 4 x i1>, i32, i32, i32) 900 901define <vscale x 4 x i8> @test_vlseg6ff_nxv4i8_triscv.vector.tuple_nxv4i8_6t(ptr %base, i32 %vl, ptr %outvl) { 902; CHECK-LABEL: test_vlseg6ff_nxv4i8_triscv.vector.tuple_nxv4i8_6t: 903; CHECK: # %bb.0: # %entry 904; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 905; CHECK-NEXT: vlseg6e8ff.v v7, (a0) 906; CHECK-NEXT: csrr a0, vl 907; CHECK-NEXT: sw a0, 0(a2) 908; CHECK-NEXT: ret 909entry: 910 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) undef, ptr %base, i32 %vl, i32 3) 911 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 912 %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) 913 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 914 store i32 %3, ptr %outvl 915 ret <vscale x 4 x i8> %2 916} 917 918define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 919; CHECK-LABEL: test_vlseg6ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_6t: 920; CHECK: # %bb.0: # %entry 921; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu 922; CHECK-NEXT: vmv1r.v v7, v8 923; CHECK-NEXT: vmv1r.v v8, v9 924; CHECK-NEXT: vmv1r.v v9, v10 925; CHECK-NEXT: vmv1r.v v10, v11 926; CHECK-NEXT: vmv1r.v v11, v12 927; CHECK-NEXT: vmv1r.v v12, v13 928; CHECK-NEXT: vlseg6e8ff.v v7, (a0), v0.t 929; CHECK-NEXT: csrr a0, vl 930; CHECK-NEXT: sw a0, 0(a2) 931; CHECK-NEXT: ret 932entry: 933 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 3) 934 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 935 %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) 936 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 937 store i32 %3, ptr %outvl 938 ret <vscale x 4 x i8> %2 939} 940 941declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6), ptr, i32, i32) 942declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6), ptr, <vscale x 8 x i1>, i32, i32, i32) 943 944define <vscale x 8 x i8> @test_vlseg6ff_nxv8i8_triscv.vector.tuple_nxv8i8_6t(ptr %base, i32 %vl, ptr %outvl) { 945; CHECK-LABEL: test_vlseg6ff_nxv8i8_triscv.vector.tuple_nxv8i8_6t: 946; CHECK: # %bb.0: # %entry 947; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 948; CHECK-NEXT: vlseg6e8ff.v v7, (a0) 949; CHECK-NEXT: csrr a0, vl 950; CHECK-NEXT: sw a0, 0(a2) 951; CHECK-NEXT: ret 952entry: 953 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) undef, ptr %base, i32 %vl, i32 3) 954 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 955 %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) 956 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 957 store i32 %3, ptr %outvl 958 ret <vscale x 8 x i8> %2 959} 960 961define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 962; CHECK-LABEL: test_vlseg6ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_6t: 963; CHECK: # %bb.0: # %entry 964; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu 965; CHECK-NEXT: vmv1r.v v7, v8 966; CHECK-NEXT: vmv1r.v v8, v9 967; CHECK-NEXT: vmv1r.v v9, v10 968; CHECK-NEXT: vmv1r.v v10, v11 969; CHECK-NEXT: vmv1r.v v11, v12 970; CHECK-NEXT: vmv1r.v v12, v13 971; CHECK-NEXT: vlseg6e8ff.v v7, (a0), v0.t 972; CHECK-NEXT: csrr a0, vl 973; CHECK-NEXT: sw a0, 0(a2) 974; CHECK-NEXT: ret 975entry: 976 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 3) 977 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 978 %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) 979 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 980 store i32 %3, ptr %outvl 981 ret <vscale x 8 x i8> %2 982} 983 984declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv1i8_7t(target("riscv.vector.tuple", <vscale x 1 x i8>, 7), ptr, i32, i32) 985declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv1i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 7), ptr, <vscale x 1 x i1>, i32, i32, i32) 986 987define <vscale x 1 x i8> @test_vlseg7ff_nxv1i8_triscv.vector.tuple_nxv1i8_7t(ptr %base, i32 %vl, ptr %outvl) { 988; CHECK-LABEL: test_vlseg7ff_nxv1i8_triscv.vector.tuple_nxv1i8_7t: 989; CHECK: # %bb.0: # %entry 990; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 991; CHECK-NEXT: vlseg7e8ff.v v7, (a0) 992; CHECK-NEXT: csrr a0, vl 993; CHECK-NEXT: sw a0, 0(a2) 994; CHECK-NEXT: ret 995entry: 996 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv1i8_7t(target("riscv.vector.tuple", <vscale x 1 x i8>, 7) undef, ptr %base, i32 %vl, i32 3) 997 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i32} %0, 0 998 %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) 999 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i32} %0, 1 1000 store i32 %3, ptr %outvl 1001 ret <vscale x 1 x i8> %2 1002} 1003 1004define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 1005; CHECK-LABEL: test_vlseg7ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_7t: 1006; CHECK: # %bb.0: # %entry 1007; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu 1008; CHECK-NEXT: vmv1r.v v7, v8 1009; CHECK-NEXT: vmv1r.v v8, v9 1010; CHECK-NEXT: vmv1r.v v9, v10 1011; CHECK-NEXT: vmv1r.v v10, v11 1012; CHECK-NEXT: vmv1r.v v11, v12 1013; CHECK-NEXT: vmv1r.v v12, v13 1014; CHECK-NEXT: vmv1r.v v13, v14 1015; CHECK-NEXT: vlseg7e8ff.v v7, (a0), v0.t 1016; CHECK-NEXT: csrr a0, vl 1017; CHECK-NEXT: sw a0, 0(a2) 1018; CHECK-NEXT: ret 1019entry: 1020 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 3) 1021 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i32} %0, 0 1022 %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) 1023 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 7), i32} %0, 1 1024 store i32 %3, ptr %outvl 1025 ret <vscale x 1 x i8> %2 1026} 1027 1028declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7), ptr, i32, i32) 1029declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv2i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 7), ptr, <vscale x 2 x i1>, i32, i32, i32) 1030 1031define <vscale x 2 x i8> @test_vlseg7ff_nxv2i8_triscv.vector.tuple_nxv2i8_7t(ptr %base, i32 %vl, ptr %outvl) { 1032; CHECK-LABEL: test_vlseg7ff_nxv2i8_triscv.vector.tuple_nxv2i8_7t: 1033; CHECK: # %bb.0: # %entry 1034; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 1035; CHECK-NEXT: vlseg7e8ff.v v7, (a0) 1036; CHECK-NEXT: csrr a0, vl 1037; CHECK-NEXT: sw a0, 0(a2) 1038; CHECK-NEXT: ret 1039entry: 1040 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) undef, ptr %base, i32 %vl, i32 3) 1041 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 0 1042 %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) 1043 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 1 1044 store i32 %3, ptr %outvl 1045 ret <vscale x 2 x i8> %2 1046} 1047 1048define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 1049; CHECK-LABEL: test_vlseg7ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_7t: 1050; CHECK: # %bb.0: # %entry 1051; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 1052; CHECK-NEXT: vmv1r.v v7, v8 1053; CHECK-NEXT: vmv1r.v v8, v9 1054; CHECK-NEXT: vmv1r.v v9, v10 1055; CHECK-NEXT: vmv1r.v v10, v11 1056; CHECK-NEXT: vmv1r.v v11, v12 1057; CHECK-NEXT: vmv1r.v v12, v13 1058; CHECK-NEXT: vmv1r.v v13, v14 1059; CHECK-NEXT: vlseg7e8ff.v v7, (a0), v0.t 1060; CHECK-NEXT: csrr a0, vl 1061; CHECK-NEXT: sw a0, 0(a2) 1062; CHECK-NEXT: ret 1063entry: 1064 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 3) 1065 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 0 1066 %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) 1067 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 1 1068 store i32 %3, ptr %outvl 1069 ret <vscale x 2 x i8> %2 1070} 1071 1072declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7), ptr, i32, i32) 1073declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7), ptr, <vscale x 4 x i1>, i32, i32, i32) 1074 1075define <vscale x 4 x i8> @test_vlseg7ff_nxv4i8_triscv.vector.tuple_nxv4i8_7t(ptr %base, i32 %vl, ptr %outvl) { 1076; CHECK-LABEL: test_vlseg7ff_nxv4i8_triscv.vector.tuple_nxv4i8_7t: 1077; CHECK: # %bb.0: # %entry 1078; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 1079; CHECK-NEXT: vlseg7e8ff.v v7, (a0) 1080; CHECK-NEXT: csrr a0, vl 1081; CHECK-NEXT: sw a0, 0(a2) 1082; CHECK-NEXT: ret 1083entry: 1084 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) undef, ptr %base, i32 %vl, i32 3) 1085 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 1086 %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) 1087 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 1088 store i32 %3, ptr %outvl 1089 ret <vscale x 4 x i8> %2 1090} 1091 1092define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 1093; CHECK-LABEL: test_vlseg7ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_7t: 1094; CHECK: # %bb.0: # %entry 1095; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu 1096; CHECK-NEXT: vmv1r.v v7, v8 1097; CHECK-NEXT: vmv1r.v v8, v9 1098; CHECK-NEXT: vmv1r.v v9, v10 1099; CHECK-NEXT: vmv1r.v v10, v11 1100; CHECK-NEXT: vmv1r.v v11, v12 1101; CHECK-NEXT: vmv1r.v v12, v13 1102; CHECK-NEXT: vmv1r.v v13, v14 1103; CHECK-NEXT: vlseg7e8ff.v v7, (a0), v0.t 1104; CHECK-NEXT: csrr a0, vl 1105; CHECK-NEXT: sw a0, 0(a2) 1106; CHECK-NEXT: ret 1107entry: 1108 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 3) 1109 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 1110 %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) 1111 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 1112 store i32 %3, ptr %outvl 1113 ret <vscale x 4 x i8> %2 1114} 1115 1116declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7), ptr, i32, i32) 1117declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7), ptr, <vscale x 8 x i1>, i32, i32, i32) 1118 1119define <vscale x 8 x i8> @test_vlseg7ff_nxv8i8_triscv.vector.tuple_nxv8i8_7t(ptr %base, i32 %vl, ptr %outvl) { 1120; CHECK-LABEL: test_vlseg7ff_nxv8i8_triscv.vector.tuple_nxv8i8_7t: 1121; CHECK: # %bb.0: # %entry 1122; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 1123; CHECK-NEXT: vlseg7e8ff.v v7, (a0) 1124; CHECK-NEXT: csrr a0, vl 1125; CHECK-NEXT: sw a0, 0(a2) 1126; CHECK-NEXT: ret 1127entry: 1128 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) undef, ptr %base, i32 %vl, i32 3) 1129 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 1130 %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) 1131 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 1132 store i32 %3, ptr %outvl 1133 ret <vscale x 8 x i8> %2 1134} 1135 1136define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 1137; CHECK-LABEL: test_vlseg7ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_7t: 1138; CHECK: # %bb.0: # %entry 1139; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu 1140; CHECK-NEXT: vmv1r.v v7, v8 1141; CHECK-NEXT: vmv1r.v v8, v9 1142; CHECK-NEXT: vmv1r.v v9, v10 1143; CHECK-NEXT: vmv1r.v v10, v11 1144; CHECK-NEXT: vmv1r.v v11, v12 1145; CHECK-NEXT: vmv1r.v v12, v13 1146; CHECK-NEXT: vmv1r.v v13, v14 1147; CHECK-NEXT: vlseg7e8ff.v v7, (a0), v0.t 1148; CHECK-NEXT: csrr a0, vl 1149; CHECK-NEXT: sw a0, 0(a2) 1150; CHECK-NEXT: ret 1151entry: 1152 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 3) 1153 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 1154 %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) 1155 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 1156 store i32 %3, ptr %outvl 1157 ret <vscale x 8 x i8> %2 1158} 1159 1160declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv1i8_8t(target("riscv.vector.tuple", <vscale x 1 x i8>, 8), ptr, i32, i32) 1161declare {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv1i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 1 x i8>, 8), ptr, <vscale x 1 x i1>, i32, i32, i32) 1162 1163define <vscale x 1 x i8> @test_vlseg8ff_nxv1i8_triscv.vector.tuple_nxv1i8_8t(ptr %base, i32 %vl, ptr %outvl) { 1164; CHECK-LABEL: test_vlseg8ff_nxv1i8_triscv.vector.tuple_nxv1i8_8t: 1165; CHECK: # %bb.0: # %entry 1166; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 1167; CHECK-NEXT: vlseg8e8ff.v v7, (a0) 1168; CHECK-NEXT: csrr a0, vl 1169; CHECK-NEXT: sw a0, 0(a2) 1170; CHECK-NEXT: ret 1171entry: 1172 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv1i8_8t(target("riscv.vector.tuple", <vscale x 1 x i8>, 8) undef, ptr %base, i32 %vl, i32 3) 1173 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i32} %0, 0 1174 %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) 1175 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i32} %0, 1 1176 store i32 %3, ptr %outvl 1177 ret <vscale x 1 x i8> %2 1178} 1179 1180define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 1181; CHECK-LABEL: test_vlseg8ff_mask_nxv1i8_triscv.vector.tuple_nxv1i8_8t: 1182; CHECK: # %bb.0: # %entry 1183; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, mu 1184; CHECK-NEXT: vmv1r.v v7, v8 1185; CHECK-NEXT: vmv1r.v v8, v9 1186; CHECK-NEXT: vmv1r.v v9, v10 1187; CHECK-NEXT: vmv1r.v v10, v11 1188; CHECK-NEXT: vmv1r.v v11, v12 1189; CHECK-NEXT: vmv1r.v v12, v13 1190; CHECK-NEXT: vmv1r.v v13, v14 1191; CHECK-NEXT: vmv1r.v v14, v15 1192; CHECK-NEXT: vlseg8e8ff.v v7, (a0), v0.t 1193; CHECK-NEXT: csrr a0, vl 1194; CHECK-NEXT: sw a0, 0(a2) 1195; CHECK-NEXT: ret 1196entry: 1197 %0 = tail call {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 3) 1198 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i32} %0, 0 1199 %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) 1200 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 1 x i8>, 8), i32} %0, 1 1201 store i32 %3, ptr %outvl 1202 ret <vscale x 1 x i8> %2 1203} 1204 1205declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8), ptr, i32, i32) 1206declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv2i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 8), ptr, <vscale x 2 x i1>, i32, i32, i32) 1207 1208define <vscale x 2 x i8> @test_vlseg8ff_nxv2i8_triscv.vector.tuple_nxv2i8_8t(ptr %base, i32 %vl, ptr %outvl) { 1209; CHECK-LABEL: test_vlseg8ff_nxv2i8_triscv.vector.tuple_nxv2i8_8t: 1210; CHECK: # %bb.0: # %entry 1211; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 1212; CHECK-NEXT: vlseg8e8ff.v v7, (a0) 1213; CHECK-NEXT: csrr a0, vl 1214; CHECK-NEXT: sw a0, 0(a2) 1215; CHECK-NEXT: ret 1216entry: 1217 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) undef, ptr %base, i32 %vl, i32 3) 1218 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 0 1219 %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) 1220 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 1 1221 store i32 %3, ptr %outvl 1222 ret <vscale x 2 x i8> %2 1223} 1224 1225define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 1226; CHECK-LABEL: test_vlseg8ff_mask_nxv2i8_triscv.vector.tuple_nxv2i8_8t: 1227; CHECK: # %bb.0: # %entry 1228; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, mu 1229; CHECK-NEXT: vmv1r.v v7, v8 1230; CHECK-NEXT: vmv1r.v v8, v9 1231; CHECK-NEXT: vmv1r.v v9, v10 1232; CHECK-NEXT: vmv1r.v v10, v11 1233; CHECK-NEXT: vmv1r.v v11, v12 1234; CHECK-NEXT: vmv1r.v v12, v13 1235; CHECK-NEXT: vmv1r.v v13, v14 1236; CHECK-NEXT: vmv1r.v v14, v15 1237; CHECK-NEXT: vlseg8e8ff.v v7, (a0), v0.t 1238; CHECK-NEXT: csrr a0, vl 1239; CHECK-NEXT: sw a0, 0(a2) 1240; CHECK-NEXT: ret 1241entry: 1242 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 3) 1243 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 0 1244 %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) 1245 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 1 1246 store i32 %3, ptr %outvl 1247 ret <vscale x 2 x i8> %2 1248} 1249 1250declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8), ptr, i32, i32) 1251declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv4i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8), ptr, <vscale x 4 x i1>, i32, i32, i32) 1252 1253define <vscale x 4 x i8> @test_vlseg8ff_nxv4i8_triscv.vector.tuple_nxv4i8_8t(ptr %base, i32 %vl, ptr %outvl) { 1254; CHECK-LABEL: test_vlseg8ff_nxv4i8_triscv.vector.tuple_nxv4i8_8t: 1255; CHECK: # %bb.0: # %entry 1256; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 1257; CHECK-NEXT: vlseg8e8ff.v v7, (a0) 1258; CHECK-NEXT: csrr a0, vl 1259; CHECK-NEXT: sw a0, 0(a2) 1260; CHECK-NEXT: ret 1261entry: 1262 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) undef, ptr %base, i32 %vl, i32 3) 1263 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 1264 %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) 1265 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 1266 store i32 %3, ptr %outvl 1267 ret <vscale x 4 x i8> %2 1268} 1269 1270define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 1271; CHECK-LABEL: test_vlseg8ff_mask_nxv4i8_triscv.vector.tuple_nxv4i8_8t: 1272; CHECK: # %bb.0: # %entry 1273; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, mu 1274; CHECK-NEXT: vmv1r.v v7, v8 1275; CHECK-NEXT: vmv1r.v v8, v9 1276; CHECK-NEXT: vmv1r.v v9, v10 1277; CHECK-NEXT: vmv1r.v v10, v11 1278; CHECK-NEXT: vmv1r.v v11, v12 1279; CHECK-NEXT: vmv1r.v v12, v13 1280; CHECK-NEXT: vmv1r.v v13, v14 1281; CHECK-NEXT: vmv1r.v v14, v15 1282; CHECK-NEXT: vlseg8e8ff.v v7, (a0), v0.t 1283; CHECK-NEXT: csrr a0, vl 1284; CHECK-NEXT: sw a0, 0(a2) 1285; CHECK-NEXT: ret 1286entry: 1287 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 3) 1288 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 1289 %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) 1290 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 1291 store i32 %3, ptr %outvl 1292 ret <vscale x 4 x i8> %2 1293} 1294 1295declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8), ptr, i32, i32) 1296declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv8i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8), ptr, <vscale x 8 x i1>, i32, i32, i32) 1297 1298define <vscale x 8 x i8> @test_vlseg8ff_nxv8i8_triscv.vector.tuple_nxv8i8_8t(ptr %base, i32 %vl, ptr %outvl) { 1299; CHECK-LABEL: test_vlseg8ff_nxv8i8_triscv.vector.tuple_nxv8i8_8t: 1300; CHECK: # %bb.0: # %entry 1301; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 1302; CHECK-NEXT: vlseg8e8ff.v v7, (a0) 1303; CHECK-NEXT: csrr a0, vl 1304; CHECK-NEXT: sw a0, 0(a2) 1305; CHECK-NEXT: ret 1306entry: 1307 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) undef, ptr %base, i32 %vl, i32 3) 1308 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 1309 %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) 1310 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 1311 store i32 %3, ptr %outvl 1312 ret <vscale x 8 x i8> %2 1313} 1314 1315define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 1316; CHECK-LABEL: test_vlseg8ff_mask_nxv8i8_triscv.vector.tuple_nxv8i8_8t: 1317; CHECK: # %bb.0: # %entry 1318; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, mu 1319; CHECK-NEXT: vmv1r.v v7, v8 1320; CHECK-NEXT: vmv1r.v v8, v9 1321; CHECK-NEXT: vmv1r.v v9, v10 1322; CHECK-NEXT: vmv1r.v v10, v11 1323; CHECK-NEXT: vmv1r.v v11, v12 1324; CHECK-NEXT: vmv1r.v v12, v13 1325; CHECK-NEXT: vmv1r.v v13, v14 1326; CHECK-NEXT: vmv1r.v v14, v15 1327; CHECK-NEXT: vlseg8e8ff.v v7, (a0), v0.t 1328; CHECK-NEXT: csrr a0, vl 1329; CHECK-NEXT: sw a0, 0(a2) 1330; CHECK-NEXT: ret 1331entry: 1332 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 3) 1333 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 1334 %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) 1335 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 1336 store i32 %3, ptr %outvl 1337 ret <vscale x 8 x i8> %2 1338} 1339 1340declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv2i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 2), ptr, <vscale x 1 x i1>, i32, i32, i32) 1341 1342define <vscale x 1 x i16> @test_vlseg2ff_nxv1i16_triscv.vector.tuple_nxv2i8_2t(ptr %base, i32 %vl, ptr %outvl) { 1343; CHECK-LABEL: test_vlseg2ff_nxv1i16_triscv.vector.tuple_nxv2i8_2t: 1344; CHECK: # %bb.0: # %entry 1345; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 1346; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 1347; CHECK-NEXT: csrr a0, vl 1348; CHECK-NEXT: sw a0, 0(a2) 1349; CHECK-NEXT: ret 1350entry: 1351 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 1352 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 0 1353 %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) 1354 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 1 1355 store i32 %3, ptr %outvl 1356 ret <vscale x 1 x i16> %2 1357} 1358 1359define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 1360; CHECK-LABEL: test_vlseg2ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_2t: 1361; CHECK: # %bb.0: # %entry 1362; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 1363; CHECK-NEXT: vmv1r.v v7, v8 1364; CHECK-NEXT: vmv1r.v v8, v9 1365; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 1366; CHECK-NEXT: csrr a0, vl 1367; CHECK-NEXT: sw a0, 0(a2) 1368; CHECK-NEXT: ret 1369entry: 1370 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 1371 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 0 1372 %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) 1373 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 1 1374 store i32 %3, ptr %outvl 1375 ret <vscale x 1 x i16> %2 1376} 1377 1378declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2), ptr, <vscale x 2 x i1>, i32, i32, i32) 1379 1380define <vscale x 2 x i16> @test_vlseg2ff_nxv2i16_triscv.vector.tuple_nxv4i8_2t(ptr %base, i32 %vl, ptr %outvl) { 1381; CHECK-LABEL: test_vlseg2ff_nxv2i16_triscv.vector.tuple_nxv4i8_2t: 1382; CHECK: # %bb.0: # %entry 1383; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 1384; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 1385; CHECK-NEXT: csrr a0, vl 1386; CHECK-NEXT: sw a0, 0(a2) 1387; CHECK-NEXT: ret 1388entry: 1389 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 1390 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 1391 %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) 1392 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 1393 store i32 %3, ptr %outvl 1394 ret <vscale x 2 x i16> %2 1395} 1396 1397define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 1398; CHECK-LABEL: test_vlseg2ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_2t: 1399; CHECK: # %bb.0: # %entry 1400; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 1401; CHECK-NEXT: vmv1r.v v7, v8 1402; CHECK-NEXT: vmv1r.v v8, v9 1403; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 1404; CHECK-NEXT: csrr a0, vl 1405; CHECK-NEXT: sw a0, 0(a2) 1406; CHECK-NEXT: ret 1407entry: 1408 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 1409 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 1410 %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) 1411 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 1412 store i32 %3, ptr %outvl 1413 ret <vscale x 2 x i16> %2 1414} 1415 1416declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2), ptr, <vscale x 4 x i1>, i32, i32, i32) 1417 1418define <vscale x 4 x i16> @test_vlseg2ff_nxv4i16_triscv.vector.tuple_nxv8i8_2t(ptr %base, i32 %vl, ptr %outvl) { 1419; CHECK-LABEL: test_vlseg2ff_nxv4i16_triscv.vector.tuple_nxv8i8_2t: 1420; CHECK: # %bb.0: # %entry 1421; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 1422; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 1423; CHECK-NEXT: csrr a0, vl 1424; CHECK-NEXT: sw a0, 0(a2) 1425; CHECK-NEXT: ret 1426entry: 1427 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 1428 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 1429 %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) 1430 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 1431 store i32 %3, ptr %outvl 1432 ret <vscale x 4 x i16> %2 1433} 1434 1435define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 1436; CHECK-LABEL: test_vlseg2ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_2t: 1437; CHECK: # %bb.0: # %entry 1438; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 1439; CHECK-NEXT: vmv1r.v v7, v8 1440; CHECK-NEXT: vmv1r.v v8, v9 1441; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 1442; CHECK-NEXT: csrr a0, vl 1443; CHECK-NEXT: sw a0, 0(a2) 1444; CHECK-NEXT: ret 1445entry: 1446 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 1447 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 1448 %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) 1449 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 1450 store i32 %3, ptr %outvl 1451 ret <vscale x 4 x i16> %2 1452} 1453 1454declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2), ptr, <vscale x 8 x i1>, i32, i32, i32) 1455 1456define <vscale x 8 x i16> @test_vlseg2ff_nxv8i16_triscv.vector.tuple_nxv16i8_2t(ptr %base, i32 %vl, ptr %outvl) { 1457; CHECK-LABEL: test_vlseg2ff_nxv8i16_triscv.vector.tuple_nxv16i8_2t: 1458; CHECK: # %bb.0: # %entry 1459; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 1460; CHECK-NEXT: vlseg2e16ff.v v6, (a0) 1461; CHECK-NEXT: csrr a0, vl 1462; CHECK-NEXT: sw a0, 0(a2) 1463; CHECK-NEXT: ret 1464entry: 1465 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 1466 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 1467 %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) 1468 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 1469 store i32 %3, ptr %outvl 1470 ret <vscale x 8 x i16> %2 1471} 1472 1473define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 1474; CHECK-LABEL: test_vlseg2ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_2t: 1475; CHECK: # %bb.0: # %entry 1476; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 1477; CHECK-NEXT: vmv2r.v v6, v8 1478; CHECK-NEXT: vmv2r.v v8, v10 1479; CHECK-NEXT: vlseg2e16ff.v v6, (a0), v0.t 1480; CHECK-NEXT: csrr a0, vl 1481; CHECK-NEXT: sw a0, 0(a2) 1482; CHECK-NEXT: ret 1483entry: 1484 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 1485 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 1486 %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) 1487 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 1488 store i32 %3, ptr %outvl 1489 ret <vscale x 8 x i16> %2 1490} 1491 1492declare {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv16i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2), ptr, <vscale x 16 x i1>, i32, i32, i32) 1493 1494define <vscale x 16 x i16> @test_vlseg2ff_nxv16i16_triscv.vector.tuple_nxv32i8_2t(ptr %base, i32 %vl, ptr %outvl) { 1495; CHECK-LABEL: test_vlseg2ff_nxv16i16_triscv.vector.tuple_nxv32i8_2t: 1496; CHECK: # %bb.0: # %entry 1497; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma 1498; CHECK-NEXT: vlseg2e16ff.v v4, (a0) 1499; CHECK-NEXT: csrr a0, vl 1500; CHECK-NEXT: sw a0, 0(a2) 1501; CHECK-NEXT: ret 1502entry: 1503 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 1504 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 1505 %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) 1506 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 1507 store i32 %3, ptr %outvl 1508 ret <vscale x 16 x i16> %2 1509} 1510 1511define <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, i32 %vl, <vscale x 16 x i1> %mask, ptr %outvl) { 1512; CHECK-LABEL: test_vlseg2ff_mask_nxv16i16_triscv.vector.tuple_nxv32i8_2t: 1513; CHECK: # %bb.0: # %entry 1514; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu 1515; CHECK-NEXT: vmv4r.v v4, v8 1516; CHECK-NEXT: vmv4r.v v8, v12 1517; CHECK-NEXT: vlseg2e16ff.v v4, (a0), v0.t 1518; CHECK-NEXT: csrr a0, vl 1519; CHECK-NEXT: sw a0, 0(a2) 1520; CHECK-NEXT: ret 1521entry: 1522 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 1523 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 1524 %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) 1525 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 1526 store i32 %3, ptr %outvl 1527 ret <vscale x 16 x i16> %2 1528} 1529 1530declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv2i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 3), ptr, <vscale x 1 x i1>, i32, i32, i32) 1531 1532define <vscale x 1 x i16> @test_vlseg3ff_nxv1i16_triscv.vector.tuple_nxv2i8_3t(ptr %base, i32 %vl, ptr %outvl) { 1533; CHECK-LABEL: test_vlseg3ff_nxv1i16_triscv.vector.tuple_nxv2i8_3t: 1534; CHECK: # %bb.0: # %entry 1535; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 1536; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 1537; CHECK-NEXT: csrr a0, vl 1538; CHECK-NEXT: sw a0, 0(a2) 1539; CHECK-NEXT: ret 1540entry: 1541 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 1542 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 0 1543 %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) 1544 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 1 1545 store i32 %3, ptr %outvl 1546 ret <vscale x 1 x i16> %2 1547} 1548 1549define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 1550; CHECK-LABEL: test_vlseg3ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_3t: 1551; CHECK: # %bb.0: # %entry 1552; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 1553; CHECK-NEXT: vmv1r.v v7, v8 1554; CHECK-NEXT: vmv1r.v v8, v9 1555; CHECK-NEXT: vmv1r.v v9, v10 1556; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 1557; CHECK-NEXT: csrr a0, vl 1558; CHECK-NEXT: sw a0, 0(a2) 1559; CHECK-NEXT: ret 1560entry: 1561 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 1562 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 0 1563 %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) 1564 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 1 1565 store i32 %3, ptr %outvl 1566 ret <vscale x 1 x i16> %2 1567} 1568 1569declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3), ptr, <vscale x 2 x i1>, i32, i32, i32) 1570 1571define <vscale x 2 x i16> @test_vlseg3ff_nxv2i16_triscv.vector.tuple_nxv4i8_3t(ptr %base, i32 %vl, ptr %outvl) { 1572; CHECK-LABEL: test_vlseg3ff_nxv2i16_triscv.vector.tuple_nxv4i8_3t: 1573; CHECK: # %bb.0: # %entry 1574; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 1575; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 1576; CHECK-NEXT: csrr a0, vl 1577; CHECK-NEXT: sw a0, 0(a2) 1578; CHECK-NEXT: ret 1579entry: 1580 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 1581 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 1582 %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) 1583 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 1584 store i32 %3, ptr %outvl 1585 ret <vscale x 2 x i16> %2 1586} 1587 1588define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 1589; CHECK-LABEL: test_vlseg3ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_3t: 1590; CHECK: # %bb.0: # %entry 1591; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 1592; CHECK-NEXT: vmv1r.v v7, v8 1593; CHECK-NEXT: vmv1r.v v8, v9 1594; CHECK-NEXT: vmv1r.v v9, v10 1595; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 1596; CHECK-NEXT: csrr a0, vl 1597; CHECK-NEXT: sw a0, 0(a2) 1598; CHECK-NEXT: ret 1599entry: 1600 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 1601 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 1602 %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) 1603 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 1604 store i32 %3, ptr %outvl 1605 ret <vscale x 2 x i16> %2 1606} 1607 1608declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3), ptr, <vscale x 4 x i1>, i32, i32, i32) 1609 1610define <vscale x 4 x i16> @test_vlseg3ff_nxv4i16_triscv.vector.tuple_nxv8i8_3t(ptr %base, i32 %vl, ptr %outvl) { 1611; CHECK-LABEL: test_vlseg3ff_nxv4i16_triscv.vector.tuple_nxv8i8_3t: 1612; CHECK: # %bb.0: # %entry 1613; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 1614; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 1615; CHECK-NEXT: csrr a0, vl 1616; CHECK-NEXT: sw a0, 0(a2) 1617; CHECK-NEXT: ret 1618entry: 1619 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 1620 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 1621 %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) 1622 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 1623 store i32 %3, ptr %outvl 1624 ret <vscale x 4 x i16> %2 1625} 1626 1627define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 1628; CHECK-LABEL: test_vlseg3ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_3t: 1629; CHECK: # %bb.0: # %entry 1630; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 1631; CHECK-NEXT: vmv1r.v v7, v8 1632; CHECK-NEXT: vmv1r.v v8, v9 1633; CHECK-NEXT: vmv1r.v v9, v10 1634; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 1635; CHECK-NEXT: csrr a0, vl 1636; CHECK-NEXT: sw a0, 0(a2) 1637; CHECK-NEXT: ret 1638entry: 1639 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 1640 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 1641 %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) 1642 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 1643 store i32 %3, ptr %outvl 1644 ret <vscale x 4 x i16> %2 1645} 1646 1647declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3), ptr, <vscale x 8 x i1>, i32, i32, i32) 1648 1649define <vscale x 8 x i16> @test_vlseg3ff_nxv8i16_triscv.vector.tuple_nxv16i8_3t(ptr %base, i32 %vl, ptr %outvl) { 1650; CHECK-LABEL: test_vlseg3ff_nxv8i16_triscv.vector.tuple_nxv16i8_3t: 1651; CHECK: # %bb.0: # %entry 1652; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 1653; CHECK-NEXT: vlseg3e16ff.v v6, (a0) 1654; CHECK-NEXT: csrr a0, vl 1655; CHECK-NEXT: sw a0, 0(a2) 1656; CHECK-NEXT: ret 1657entry: 1658 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 1659 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 1660 %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) 1661 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 1662 store i32 %3, ptr %outvl 1663 ret <vscale x 8 x i16> %2 1664} 1665 1666define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 1667; CHECK-LABEL: test_vlseg3ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_3t: 1668; CHECK: # %bb.0: # %entry 1669; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 1670; CHECK-NEXT: vmv2r.v v6, v8 1671; CHECK-NEXT: vmv2r.v v8, v10 1672; CHECK-NEXT: vmv2r.v v10, v12 1673; CHECK-NEXT: vlseg3e16ff.v v6, (a0), v0.t 1674; CHECK-NEXT: csrr a0, vl 1675; CHECK-NEXT: sw a0, 0(a2) 1676; CHECK-NEXT: ret 1677entry: 1678 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 1679 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 1680 %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) 1681 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 1682 store i32 %3, ptr %outvl 1683 ret <vscale x 8 x i16> %2 1684} 1685 1686declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv2i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 4), ptr, <vscale x 1 x i1>, i32, i32, i32) 1687 1688define <vscale x 1 x i16> @test_vlseg4ff_nxv1i16_triscv.vector.tuple_nxv2i8_4t(ptr %base, i32 %vl, ptr %outvl) { 1689; CHECK-LABEL: test_vlseg4ff_nxv1i16_triscv.vector.tuple_nxv2i8_4t: 1690; CHECK: # %bb.0: # %entry 1691; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 1692; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 1693; CHECK-NEXT: csrr a0, vl 1694; CHECK-NEXT: sw a0, 0(a2) 1695; CHECK-NEXT: ret 1696entry: 1697 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 1698 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 0 1699 %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) 1700 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 1 1701 store i32 %3, ptr %outvl 1702 ret <vscale x 1 x i16> %2 1703} 1704 1705define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 1706; CHECK-LABEL: test_vlseg4ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_4t: 1707; CHECK: # %bb.0: # %entry 1708; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 1709; CHECK-NEXT: vmv1r.v v7, v8 1710; CHECK-NEXT: vmv1r.v v8, v9 1711; CHECK-NEXT: vmv1r.v v9, v10 1712; CHECK-NEXT: vmv1r.v v10, v11 1713; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 1714; CHECK-NEXT: csrr a0, vl 1715; CHECK-NEXT: sw a0, 0(a2) 1716; CHECK-NEXT: ret 1717entry: 1718 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 1719 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 0 1720 %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) 1721 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 1 1722 store i32 %3, ptr %outvl 1723 ret <vscale x 1 x i16> %2 1724} 1725 1726declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4), ptr, <vscale x 2 x i1>, i32, i32, i32) 1727 1728define <vscale x 2 x i16> @test_vlseg4ff_nxv2i16_triscv.vector.tuple_nxv4i8_4t(ptr %base, i32 %vl, ptr %outvl) { 1729; CHECK-LABEL: test_vlseg4ff_nxv2i16_triscv.vector.tuple_nxv4i8_4t: 1730; CHECK: # %bb.0: # %entry 1731; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 1732; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 1733; CHECK-NEXT: csrr a0, vl 1734; CHECK-NEXT: sw a0, 0(a2) 1735; CHECK-NEXT: ret 1736entry: 1737 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 1738 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 1739 %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) 1740 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 1741 store i32 %3, ptr %outvl 1742 ret <vscale x 2 x i16> %2 1743} 1744 1745define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 1746; CHECK-LABEL: test_vlseg4ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_4t: 1747; CHECK: # %bb.0: # %entry 1748; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 1749; CHECK-NEXT: vmv1r.v v7, v8 1750; CHECK-NEXT: vmv1r.v v8, v9 1751; CHECK-NEXT: vmv1r.v v9, v10 1752; CHECK-NEXT: vmv1r.v v10, v11 1753; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 1754; CHECK-NEXT: csrr a0, vl 1755; CHECK-NEXT: sw a0, 0(a2) 1756; CHECK-NEXT: ret 1757entry: 1758 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 1759 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 1760 %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) 1761 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 1762 store i32 %3, ptr %outvl 1763 ret <vscale x 2 x i16> %2 1764} 1765 1766declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4), ptr, <vscale x 4 x i1>, i32, i32, i32) 1767 1768define <vscale x 4 x i16> @test_vlseg4ff_nxv4i16_triscv.vector.tuple_nxv8i8_4t(ptr %base, i32 %vl, ptr %outvl) { 1769; CHECK-LABEL: test_vlseg4ff_nxv4i16_triscv.vector.tuple_nxv8i8_4t: 1770; CHECK: # %bb.0: # %entry 1771; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 1772; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 1773; CHECK-NEXT: csrr a0, vl 1774; CHECK-NEXT: sw a0, 0(a2) 1775; CHECK-NEXT: ret 1776entry: 1777 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 1778 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 1779 %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) 1780 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 1781 store i32 %3, ptr %outvl 1782 ret <vscale x 4 x i16> %2 1783} 1784 1785define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 1786; CHECK-LABEL: test_vlseg4ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_4t: 1787; CHECK: # %bb.0: # %entry 1788; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 1789; CHECK-NEXT: vmv1r.v v7, v8 1790; CHECK-NEXT: vmv1r.v v8, v9 1791; CHECK-NEXT: vmv1r.v v9, v10 1792; CHECK-NEXT: vmv1r.v v10, v11 1793; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 1794; CHECK-NEXT: csrr a0, vl 1795; CHECK-NEXT: sw a0, 0(a2) 1796; CHECK-NEXT: ret 1797entry: 1798 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 1799 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 1800 %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) 1801 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 1802 store i32 %3, ptr %outvl 1803 ret <vscale x 4 x i16> %2 1804} 1805 1806declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv8i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4), ptr, <vscale x 8 x i1>, i32, i32, i32) 1807 1808define <vscale x 8 x i16> @test_vlseg4ff_nxv8i16_triscv.vector.tuple_nxv16i8_4t(ptr %base, i32 %vl, ptr %outvl) { 1809; CHECK-LABEL: test_vlseg4ff_nxv8i16_triscv.vector.tuple_nxv16i8_4t: 1810; CHECK: # %bb.0: # %entry 1811; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 1812; CHECK-NEXT: vlseg4e16ff.v v6, (a0) 1813; CHECK-NEXT: csrr a0, vl 1814; CHECK-NEXT: sw a0, 0(a2) 1815; CHECK-NEXT: ret 1816entry: 1817 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 1818 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 1819 %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) 1820 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 1821 store i32 %3, ptr %outvl 1822 ret <vscale x 8 x i16> %2 1823} 1824 1825define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 1826; CHECK-LABEL: test_vlseg4ff_mask_nxv8i16_triscv.vector.tuple_nxv16i8_4t: 1827; CHECK: # %bb.0: # %entry 1828; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 1829; CHECK-NEXT: vmv2r.v v6, v8 1830; CHECK-NEXT: vmv2r.v v8, v10 1831; CHECK-NEXT: vmv2r.v v10, v12 1832; CHECK-NEXT: vmv2r.v v12, v14 1833; CHECK-NEXT: vlseg4e16ff.v v6, (a0), v0.t 1834; CHECK-NEXT: csrr a0, vl 1835; CHECK-NEXT: sw a0, 0(a2) 1836; CHECK-NEXT: ret 1837entry: 1838 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 1839 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 1840 %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) 1841 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 1842 store i32 %3, ptr %outvl 1843 ret <vscale x 8 x i16> %2 1844} 1845 1846declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv2i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 5), ptr, <vscale x 1 x i1>, i32, i32, i32) 1847 1848define <vscale x 1 x i16> @test_vlseg5ff_nxv1i16_triscv.vector.tuple_nxv2i8_5t(ptr %base, i32 %vl, ptr %outvl) { 1849; CHECK-LABEL: test_vlseg5ff_nxv1i16_triscv.vector.tuple_nxv2i8_5t: 1850; CHECK: # %bb.0: # %entry 1851; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 1852; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 1853; CHECK-NEXT: csrr a0, vl 1854; CHECK-NEXT: sw a0, 0(a2) 1855; CHECK-NEXT: ret 1856entry: 1857 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 1858 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 0 1859 %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) 1860 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 1 1861 store i32 %3, ptr %outvl 1862 ret <vscale x 1 x i16> %2 1863} 1864 1865define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 1866; CHECK-LABEL: test_vlseg5ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_5t: 1867; CHECK: # %bb.0: # %entry 1868; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 1869; CHECK-NEXT: vmv1r.v v7, v8 1870; CHECK-NEXT: vmv1r.v v8, v9 1871; CHECK-NEXT: vmv1r.v v9, v10 1872; CHECK-NEXT: vmv1r.v v10, v11 1873; CHECK-NEXT: vmv1r.v v11, v12 1874; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 1875; CHECK-NEXT: csrr a0, vl 1876; CHECK-NEXT: sw a0, 0(a2) 1877; CHECK-NEXT: ret 1878entry: 1879 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 1880 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 0 1881 %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) 1882 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 1 1883 store i32 %3, ptr %outvl 1884 ret <vscale x 1 x i16> %2 1885} 1886 1887declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5), ptr, <vscale x 2 x i1>, i32, i32, i32) 1888 1889define <vscale x 2 x i16> @test_vlseg5ff_nxv2i16_triscv.vector.tuple_nxv4i8_5t(ptr %base, i32 %vl, ptr %outvl) { 1890; CHECK-LABEL: test_vlseg5ff_nxv2i16_triscv.vector.tuple_nxv4i8_5t: 1891; CHECK: # %bb.0: # %entry 1892; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 1893; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 1894; CHECK-NEXT: csrr a0, vl 1895; CHECK-NEXT: sw a0, 0(a2) 1896; CHECK-NEXT: ret 1897entry: 1898 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 1899 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 1900 %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) 1901 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 1902 store i32 %3, ptr %outvl 1903 ret <vscale x 2 x i16> %2 1904} 1905 1906define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 1907; CHECK-LABEL: test_vlseg5ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_5t: 1908; CHECK: # %bb.0: # %entry 1909; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 1910; CHECK-NEXT: vmv1r.v v7, v8 1911; CHECK-NEXT: vmv1r.v v8, v9 1912; CHECK-NEXT: vmv1r.v v9, v10 1913; CHECK-NEXT: vmv1r.v v10, v11 1914; CHECK-NEXT: vmv1r.v v11, v12 1915; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 1916; CHECK-NEXT: csrr a0, vl 1917; CHECK-NEXT: sw a0, 0(a2) 1918; CHECK-NEXT: ret 1919entry: 1920 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 1921 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 1922 %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) 1923 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 1924 store i32 %3, ptr %outvl 1925 ret <vscale x 2 x i16> %2 1926} 1927 1928declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5), ptr, <vscale x 4 x i1>, i32, i32, i32) 1929 1930define <vscale x 4 x i16> @test_vlseg5ff_nxv4i16_triscv.vector.tuple_nxv8i8_5t(ptr %base, i32 %vl, ptr %outvl) { 1931; CHECK-LABEL: test_vlseg5ff_nxv4i16_triscv.vector.tuple_nxv8i8_5t: 1932; CHECK: # %bb.0: # %entry 1933; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 1934; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 1935; CHECK-NEXT: csrr a0, vl 1936; CHECK-NEXT: sw a0, 0(a2) 1937; CHECK-NEXT: ret 1938entry: 1939 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 1940 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 1941 %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) 1942 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 1943 store i32 %3, ptr %outvl 1944 ret <vscale x 4 x i16> %2 1945} 1946 1947define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 1948; CHECK-LABEL: test_vlseg5ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_5t: 1949; CHECK: # %bb.0: # %entry 1950; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 1951; CHECK-NEXT: vmv1r.v v7, v8 1952; CHECK-NEXT: vmv1r.v v8, v9 1953; CHECK-NEXT: vmv1r.v v9, v10 1954; CHECK-NEXT: vmv1r.v v10, v11 1955; CHECK-NEXT: vmv1r.v v11, v12 1956; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 1957; CHECK-NEXT: csrr a0, vl 1958; CHECK-NEXT: sw a0, 0(a2) 1959; CHECK-NEXT: ret 1960entry: 1961 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 1962 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 1963 %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) 1964 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 1965 store i32 %3, ptr %outvl 1966 ret <vscale x 4 x i16> %2 1967} 1968 1969declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv2i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 6), ptr, <vscale x 1 x i1>, i32, i32, i32) 1970 1971define <vscale x 1 x i16> @test_vlseg6ff_nxv1i16_triscv.vector.tuple_nxv2i8_6t(ptr %base, i32 %vl, ptr %outvl) { 1972; CHECK-LABEL: test_vlseg6ff_nxv1i16_triscv.vector.tuple_nxv2i8_6t: 1973; CHECK: # %bb.0: # %entry 1974; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 1975; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 1976; CHECK-NEXT: csrr a0, vl 1977; CHECK-NEXT: sw a0, 0(a2) 1978; CHECK-NEXT: ret 1979entry: 1980 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 1981 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 0 1982 %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) 1983 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 1 1984 store i32 %3, ptr %outvl 1985 ret <vscale x 1 x i16> %2 1986} 1987 1988define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 1989; CHECK-LABEL: test_vlseg6ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_6t: 1990; CHECK: # %bb.0: # %entry 1991; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 1992; CHECK-NEXT: vmv1r.v v7, v8 1993; CHECK-NEXT: vmv1r.v v8, v9 1994; CHECK-NEXT: vmv1r.v v9, v10 1995; CHECK-NEXT: vmv1r.v v10, v11 1996; CHECK-NEXT: vmv1r.v v11, v12 1997; CHECK-NEXT: vmv1r.v v12, v13 1998; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 1999; CHECK-NEXT: csrr a0, vl 2000; CHECK-NEXT: sw a0, 0(a2) 2001; CHECK-NEXT: ret 2002entry: 2003 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 2004 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 0 2005 %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) 2006 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 1 2007 store i32 %3, ptr %outvl 2008 ret <vscale x 1 x i16> %2 2009} 2010 2011declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6), ptr, <vscale x 2 x i1>, i32, i32, i32) 2012 2013define <vscale x 2 x i16> @test_vlseg6ff_nxv2i16_triscv.vector.tuple_nxv4i8_6t(ptr %base, i32 %vl, ptr %outvl) { 2014; CHECK-LABEL: test_vlseg6ff_nxv2i16_triscv.vector.tuple_nxv4i8_6t: 2015; CHECK: # %bb.0: # %entry 2016; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 2017; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 2018; CHECK-NEXT: csrr a0, vl 2019; CHECK-NEXT: sw a0, 0(a2) 2020; CHECK-NEXT: ret 2021entry: 2022 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 2023 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 2024 %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) 2025 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 2026 store i32 %3, ptr %outvl 2027 ret <vscale x 2 x i16> %2 2028} 2029 2030define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2031; CHECK-LABEL: test_vlseg6ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_6t: 2032; CHECK: # %bb.0: # %entry 2033; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 2034; CHECK-NEXT: vmv1r.v v7, v8 2035; CHECK-NEXT: vmv1r.v v8, v9 2036; CHECK-NEXT: vmv1r.v v9, v10 2037; CHECK-NEXT: vmv1r.v v10, v11 2038; CHECK-NEXT: vmv1r.v v11, v12 2039; CHECK-NEXT: vmv1r.v v12, v13 2040; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 2041; CHECK-NEXT: csrr a0, vl 2042; CHECK-NEXT: sw a0, 0(a2) 2043; CHECK-NEXT: ret 2044entry: 2045 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 2046 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 2047 %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) 2048 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 2049 store i32 %3, ptr %outvl 2050 ret <vscale x 2 x i16> %2 2051} 2052 2053declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6), ptr, <vscale x 4 x i1>, i32, i32, i32) 2054 2055define <vscale x 4 x i16> @test_vlseg6ff_nxv4i16_triscv.vector.tuple_nxv8i8_6t(ptr %base, i32 %vl, ptr %outvl) { 2056; CHECK-LABEL: test_vlseg6ff_nxv4i16_triscv.vector.tuple_nxv8i8_6t: 2057; CHECK: # %bb.0: # %entry 2058; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 2059; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 2060; CHECK-NEXT: csrr a0, vl 2061; CHECK-NEXT: sw a0, 0(a2) 2062; CHECK-NEXT: ret 2063entry: 2064 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 2065 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 2066 %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) 2067 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 2068 store i32 %3, ptr %outvl 2069 ret <vscale x 4 x i16> %2 2070} 2071 2072define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 2073; CHECK-LABEL: test_vlseg6ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_6t: 2074; CHECK: # %bb.0: # %entry 2075; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 2076; CHECK-NEXT: vmv1r.v v7, v8 2077; CHECK-NEXT: vmv1r.v v8, v9 2078; CHECK-NEXT: vmv1r.v v9, v10 2079; CHECK-NEXT: vmv1r.v v10, v11 2080; CHECK-NEXT: vmv1r.v v11, v12 2081; CHECK-NEXT: vmv1r.v v12, v13 2082; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 2083; CHECK-NEXT: csrr a0, vl 2084; CHECK-NEXT: sw a0, 0(a2) 2085; CHECK-NEXT: ret 2086entry: 2087 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 2088 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 2089 %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) 2090 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 2091 store i32 %3, ptr %outvl 2092 ret <vscale x 4 x i16> %2 2093} 2094 2095declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv2i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 7), ptr, <vscale x 1 x i1>, i32, i32, i32) 2096 2097define <vscale x 1 x i16> @test_vlseg7ff_nxv1i16_triscv.vector.tuple_nxv2i8_7t(ptr %base, i32 %vl, ptr %outvl) { 2098; CHECK-LABEL: test_vlseg7ff_nxv1i16_triscv.vector.tuple_nxv2i8_7t: 2099; CHECK: # %bb.0: # %entry 2100; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 2101; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 2102; CHECK-NEXT: csrr a0, vl 2103; CHECK-NEXT: sw a0, 0(a2) 2104; CHECK-NEXT: ret 2105entry: 2106 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 2107 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 0 2108 %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) 2109 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 1 2110 store i32 %3, ptr %outvl 2111 ret <vscale x 1 x i16> %2 2112} 2113 2114define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 2115; CHECK-LABEL: test_vlseg7ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_7t: 2116; CHECK: # %bb.0: # %entry 2117; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 2118; CHECK-NEXT: vmv1r.v v7, v8 2119; CHECK-NEXT: vmv1r.v v8, v9 2120; CHECK-NEXT: vmv1r.v v9, v10 2121; CHECK-NEXT: vmv1r.v v10, v11 2122; CHECK-NEXT: vmv1r.v v11, v12 2123; CHECK-NEXT: vmv1r.v v12, v13 2124; CHECK-NEXT: vmv1r.v v13, v14 2125; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 2126; CHECK-NEXT: csrr a0, vl 2127; CHECK-NEXT: sw a0, 0(a2) 2128; CHECK-NEXT: ret 2129entry: 2130 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 2131 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 0 2132 %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) 2133 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 1 2134 store i32 %3, ptr %outvl 2135 ret <vscale x 1 x i16> %2 2136} 2137 2138declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7), ptr, <vscale x 2 x i1>, i32, i32, i32) 2139 2140define <vscale x 2 x i16> @test_vlseg7ff_nxv2i16_triscv.vector.tuple_nxv4i8_7t(ptr %base, i32 %vl, ptr %outvl) { 2141; CHECK-LABEL: test_vlseg7ff_nxv2i16_triscv.vector.tuple_nxv4i8_7t: 2142; CHECK: # %bb.0: # %entry 2143; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 2144; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 2145; CHECK-NEXT: csrr a0, vl 2146; CHECK-NEXT: sw a0, 0(a2) 2147; CHECK-NEXT: ret 2148entry: 2149 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 2150 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 2151 %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) 2152 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 2153 store i32 %3, ptr %outvl 2154 ret <vscale x 2 x i16> %2 2155} 2156 2157define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2158; CHECK-LABEL: test_vlseg7ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_7t: 2159; CHECK: # %bb.0: # %entry 2160; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 2161; CHECK-NEXT: vmv1r.v v7, v8 2162; CHECK-NEXT: vmv1r.v v8, v9 2163; CHECK-NEXT: vmv1r.v v9, v10 2164; CHECK-NEXT: vmv1r.v v10, v11 2165; CHECK-NEXT: vmv1r.v v11, v12 2166; CHECK-NEXT: vmv1r.v v12, v13 2167; CHECK-NEXT: vmv1r.v v13, v14 2168; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 2169; CHECK-NEXT: csrr a0, vl 2170; CHECK-NEXT: sw a0, 0(a2) 2171; CHECK-NEXT: ret 2172entry: 2173 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 2174 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 2175 %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) 2176 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 2177 store i32 %3, ptr %outvl 2178 ret <vscale x 2 x i16> %2 2179} 2180 2181declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7), ptr, <vscale x 4 x i1>, i32, i32, i32) 2182 2183define <vscale x 4 x i16> @test_vlseg7ff_nxv4i16_triscv.vector.tuple_nxv8i8_7t(ptr %base, i32 %vl, ptr %outvl) { 2184; CHECK-LABEL: test_vlseg7ff_nxv4i16_triscv.vector.tuple_nxv8i8_7t: 2185; CHECK: # %bb.0: # %entry 2186; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 2187; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 2188; CHECK-NEXT: csrr a0, vl 2189; CHECK-NEXT: sw a0, 0(a2) 2190; CHECK-NEXT: ret 2191entry: 2192 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 2193 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 2194 %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) 2195 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 2196 store i32 %3, ptr %outvl 2197 ret <vscale x 4 x i16> %2 2198} 2199 2200define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 2201; CHECK-LABEL: test_vlseg7ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_7t: 2202; CHECK: # %bb.0: # %entry 2203; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 2204; CHECK-NEXT: vmv1r.v v7, v8 2205; CHECK-NEXT: vmv1r.v v8, v9 2206; CHECK-NEXT: vmv1r.v v9, v10 2207; CHECK-NEXT: vmv1r.v v10, v11 2208; CHECK-NEXT: vmv1r.v v11, v12 2209; CHECK-NEXT: vmv1r.v v12, v13 2210; CHECK-NEXT: vmv1r.v v13, v14 2211; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 2212; CHECK-NEXT: csrr a0, vl 2213; CHECK-NEXT: sw a0, 0(a2) 2214; CHECK-NEXT: ret 2215entry: 2216 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 2217 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 2218 %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) 2219 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 2220 store i32 %3, ptr %outvl 2221 ret <vscale x 4 x i16> %2 2222} 2223 2224declare {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv2i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 2 x i8>, 8), ptr, <vscale x 1 x i1>, i32, i32, i32) 2225 2226define <vscale x 1 x i16> @test_vlseg8ff_nxv1i16_triscv.vector.tuple_nxv2i8_8t(ptr %base, i32 %vl, ptr %outvl) { 2227; CHECK-LABEL: test_vlseg8ff_nxv1i16_triscv.vector.tuple_nxv2i8_8t: 2228; CHECK: # %bb.0: # %entry 2229; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 2230; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 2231; CHECK-NEXT: csrr a0, vl 2232; CHECK-NEXT: sw a0, 0(a2) 2233; CHECK-NEXT: ret 2234entry: 2235 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 2236 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 0 2237 %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) 2238 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 1 2239 store i32 %3, ptr %outvl 2240 ret <vscale x 1 x i16> %2 2241} 2242 2243define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 2244; CHECK-LABEL: test_vlseg8ff_mask_nxv1i16_triscv.vector.tuple_nxv2i8_8t: 2245; CHECK: # %bb.0: # %entry 2246; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 2247; CHECK-NEXT: vmv1r.v v7, v8 2248; CHECK-NEXT: vmv1r.v v8, v9 2249; CHECK-NEXT: vmv1r.v v9, v10 2250; CHECK-NEXT: vmv1r.v v10, v11 2251; CHECK-NEXT: vmv1r.v v11, v12 2252; CHECK-NEXT: vmv1r.v v12, v13 2253; CHECK-NEXT: vmv1r.v v13, v14 2254; CHECK-NEXT: vmv1r.v v14, v15 2255; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 2256; CHECK-NEXT: csrr a0, vl 2257; CHECK-NEXT: sw a0, 0(a2) 2258; CHECK-NEXT: ret 2259entry: 2260 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 2261 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 0 2262 %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) 2263 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 1 2264 store i32 %3, ptr %outvl 2265 ret <vscale x 1 x i16> %2 2266} 2267 2268declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8), ptr, <vscale x 2 x i1>, i32, i32, i32) 2269 2270define <vscale x 2 x i16> @test_vlseg8ff_nxv2i16_triscv.vector.tuple_nxv4i8_8t(ptr %base, i32 %vl, ptr %outvl) { 2271; CHECK-LABEL: test_vlseg8ff_nxv2i16_triscv.vector.tuple_nxv4i8_8t: 2272; CHECK: # %bb.0: # %entry 2273; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 2274; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 2275; CHECK-NEXT: csrr a0, vl 2276; CHECK-NEXT: sw a0, 0(a2) 2277; CHECK-NEXT: ret 2278entry: 2279 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 2280 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 2281 %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) 2282 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 2283 store i32 %3, ptr %outvl 2284 ret <vscale x 2 x i16> %2 2285} 2286 2287define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2288; CHECK-LABEL: test_vlseg8ff_mask_nxv2i16_triscv.vector.tuple_nxv4i8_8t: 2289; CHECK: # %bb.0: # %entry 2290; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 2291; CHECK-NEXT: vmv1r.v v7, v8 2292; CHECK-NEXT: vmv1r.v v8, v9 2293; CHECK-NEXT: vmv1r.v v9, v10 2294; CHECK-NEXT: vmv1r.v v10, v11 2295; CHECK-NEXT: vmv1r.v v11, v12 2296; CHECK-NEXT: vmv1r.v v12, v13 2297; CHECK-NEXT: vmv1r.v v13, v14 2298; CHECK-NEXT: vmv1r.v v14, v15 2299; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 2300; CHECK-NEXT: csrr a0, vl 2301; CHECK-NEXT: sw a0, 0(a2) 2302; CHECK-NEXT: ret 2303entry: 2304 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 2305 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 2306 %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) 2307 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 2308 store i32 %3, ptr %outvl 2309 ret <vscale x 2 x i16> %2 2310} 2311 2312declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv4i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8), ptr, <vscale x 4 x i1>, i32, i32, i32) 2313 2314define <vscale x 4 x i16> @test_vlseg8ff_nxv4i16_triscv.vector.tuple_nxv8i8_8t(ptr %base, i32 %vl, ptr %outvl) { 2315; CHECK-LABEL: test_vlseg8ff_nxv4i16_triscv.vector.tuple_nxv8i8_8t: 2316; CHECK: # %bb.0: # %entry 2317; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 2318; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 2319; CHECK-NEXT: csrr a0, vl 2320; CHECK-NEXT: sw a0, 0(a2) 2321; CHECK-NEXT: ret 2322entry: 2323 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 2324 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 2325 %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) 2326 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 2327 store i32 %3, ptr %outvl 2328 ret <vscale x 4 x i16> %2 2329} 2330 2331define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 2332; CHECK-LABEL: test_vlseg8ff_mask_nxv4i16_triscv.vector.tuple_nxv8i8_8t: 2333; CHECK: # %bb.0: # %entry 2334; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 2335; CHECK-NEXT: vmv1r.v v7, v8 2336; CHECK-NEXT: vmv1r.v v8, v9 2337; CHECK-NEXT: vmv1r.v v9, v10 2338; CHECK-NEXT: vmv1r.v v10, v11 2339; CHECK-NEXT: vmv1r.v v11, v12 2340; CHECK-NEXT: vmv1r.v v12, v13 2341; CHECK-NEXT: vmv1r.v v13, v14 2342; CHECK-NEXT: vmv1r.v v14, v15 2343; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 2344; CHECK-NEXT: csrr a0, vl 2345; CHECK-NEXT: sw a0, 0(a2) 2346; CHECK-NEXT: ret 2347entry: 2348 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 2349 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 2350 %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) 2351 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 2352 store i32 %3, ptr %outvl 2353 ret <vscale x 4 x i16> %2 2354} 2355 2356declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv4i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 2), ptr, <vscale x 1 x i1>, i32, i32, i32) 2357 2358define <vscale x 1 x i32> @test_vlseg2ff_nxv1i32_triscv.vector.tuple_nxv4i8_2t(ptr %base, i32 %vl, ptr %outvl) { 2359; CHECK-LABEL: test_vlseg2ff_nxv1i32_triscv.vector.tuple_nxv4i8_2t: 2360; CHECK: # %bb.0: # %entry 2361; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 2362; CHECK-NEXT: vlseg2e32ff.v v7, (a0) 2363; CHECK-NEXT: csrr a0, vl 2364; CHECK-NEXT: sw a0, 0(a2) 2365; CHECK-NEXT: ret 2366entry: 2367 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) undef, ptr %base, i32 %vl, i32 5) 2368 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 2369 %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) 2370 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 2371 store i32 %3, ptr %outvl 2372 ret <vscale x 1 x i32> %2 2373} 2374 2375define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 2376; CHECK-LABEL: test_vlseg2ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_2t: 2377; CHECK: # %bb.0: # %entry 2378; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 2379; CHECK-NEXT: vmv1r.v v7, v8 2380; CHECK-NEXT: vmv1r.v v8, v9 2381; CHECK-NEXT: vlseg2e32ff.v v7, (a0), v0.t 2382; CHECK-NEXT: csrr a0, vl 2383; CHECK-NEXT: sw a0, 0(a2) 2384; CHECK-NEXT: ret 2385entry: 2386 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 5) 2387 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 2388 %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) 2389 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 2390 store i32 %3, ptr %outvl 2391 ret <vscale x 1 x i32> %2 2392} 2393 2394declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2), ptr, <vscale x 2 x i1>, i32, i32, i32) 2395 2396define <vscale x 2 x i32> @test_vlseg2ff_nxv2i32_triscv.vector.tuple_nxv8i8_2t(ptr %base, i32 %vl, ptr %outvl) { 2397; CHECK-LABEL: test_vlseg2ff_nxv2i32_triscv.vector.tuple_nxv8i8_2t: 2398; CHECK: # %bb.0: # %entry 2399; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 2400; CHECK-NEXT: vlseg2e32ff.v v7, (a0) 2401; CHECK-NEXT: csrr a0, vl 2402; CHECK-NEXT: sw a0, 0(a2) 2403; CHECK-NEXT: ret 2404entry: 2405 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) undef, ptr %base, i32 %vl, i32 5) 2406 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 2407 %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) 2408 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 2409 store i32 %3, ptr %outvl 2410 ret <vscale x 2 x i32> %2 2411} 2412 2413define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2414; CHECK-LABEL: test_vlseg2ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_2t: 2415; CHECK: # %bb.0: # %entry 2416; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 2417; CHECK-NEXT: vmv1r.v v7, v8 2418; CHECK-NEXT: vmv1r.v v8, v9 2419; CHECK-NEXT: vlseg2e32ff.v v7, (a0), v0.t 2420; CHECK-NEXT: csrr a0, vl 2421; CHECK-NEXT: sw a0, 0(a2) 2422; CHECK-NEXT: ret 2423entry: 2424 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 5) 2425 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 2426 %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) 2427 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 2428 store i32 %3, ptr %outvl 2429 ret <vscale x 2 x i32> %2 2430} 2431 2432declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2), ptr, <vscale x 4 x i1>, i32, i32, i32) 2433 2434define <vscale x 4 x i32> @test_vlseg2ff_nxv4i32_triscv.vector.tuple_nxv16i8_2t(ptr %base, i32 %vl, ptr %outvl) { 2435; CHECK-LABEL: test_vlseg2ff_nxv4i32_triscv.vector.tuple_nxv16i8_2t: 2436; CHECK: # %bb.0: # %entry 2437; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 2438; CHECK-NEXT: vlseg2e32ff.v v6, (a0) 2439; CHECK-NEXT: csrr a0, vl 2440; CHECK-NEXT: sw a0, 0(a2) 2441; CHECK-NEXT: ret 2442entry: 2443 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) undef, ptr %base, i32 %vl, i32 5) 2444 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 2445 %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) 2446 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 2447 store i32 %3, ptr %outvl 2448 ret <vscale x 4 x i32> %2 2449} 2450 2451define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 2452; CHECK-LABEL: test_vlseg2ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_2t: 2453; CHECK: # %bb.0: # %entry 2454; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu 2455; CHECK-NEXT: vmv2r.v v6, v8 2456; CHECK-NEXT: vmv2r.v v8, v10 2457; CHECK-NEXT: vlseg2e32ff.v v6, (a0), v0.t 2458; CHECK-NEXT: csrr a0, vl 2459; CHECK-NEXT: sw a0, 0(a2) 2460; CHECK-NEXT: ret 2461entry: 2462 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 5) 2463 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 2464 %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) 2465 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 2466 store i32 %3, ptr %outvl 2467 ret <vscale x 4 x i32> %2 2468} 2469 2470declare {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv8i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2), ptr, <vscale x 8 x i1>, i32, i32, i32) 2471 2472define <vscale x 8 x i32> @test_vlseg2ff_nxv8i32_triscv.vector.tuple_nxv32i8_2t(ptr %base, i32 %vl, ptr %outvl) { 2473; CHECK-LABEL: test_vlseg2ff_nxv8i32_triscv.vector.tuple_nxv32i8_2t: 2474; CHECK: # %bb.0: # %entry 2475; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 2476; CHECK-NEXT: vlseg2e32ff.v v4, (a0) 2477; CHECK-NEXT: csrr a0, vl 2478; CHECK-NEXT: sw a0, 0(a2) 2479; CHECK-NEXT: ret 2480entry: 2481 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) undef, ptr %base, i32 %vl, i32 5) 2482 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 2483 %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) 2484 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 2485 store i32 %3, ptr %outvl 2486 ret <vscale x 8 x i32> %2 2487} 2488 2489define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 2490; CHECK-LABEL: test_vlseg2ff_mask_nxv8i32_triscv.vector.tuple_nxv32i8_2t: 2491; CHECK: # %bb.0: # %entry 2492; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu 2493; CHECK-NEXT: vmv4r.v v4, v8 2494; CHECK-NEXT: vmv4r.v v8, v12 2495; CHECK-NEXT: vlseg2e32ff.v v4, (a0), v0.t 2496; CHECK-NEXT: csrr a0, vl 2497; CHECK-NEXT: sw a0, 0(a2) 2498; CHECK-NEXT: ret 2499entry: 2500 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 5) 2501 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 2502 %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) 2503 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 2504 store i32 %3, ptr %outvl 2505 ret <vscale x 8 x i32> %2 2506} 2507 2508declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv4i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 3), ptr, <vscale x 1 x i1>, i32, i32, i32) 2509 2510define <vscale x 1 x i32> @test_vlseg3ff_nxv1i32_triscv.vector.tuple_nxv4i8_3t(ptr %base, i32 %vl, ptr %outvl) { 2511; CHECK-LABEL: test_vlseg3ff_nxv1i32_triscv.vector.tuple_nxv4i8_3t: 2512; CHECK: # %bb.0: # %entry 2513; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 2514; CHECK-NEXT: vlseg3e32ff.v v7, (a0) 2515; CHECK-NEXT: csrr a0, vl 2516; CHECK-NEXT: sw a0, 0(a2) 2517; CHECK-NEXT: ret 2518entry: 2519 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) undef, ptr %base, i32 %vl, i32 5) 2520 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 2521 %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) 2522 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 2523 store i32 %3, ptr %outvl 2524 ret <vscale x 1 x i32> %2 2525} 2526 2527define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 2528; CHECK-LABEL: test_vlseg3ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_3t: 2529; CHECK: # %bb.0: # %entry 2530; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 2531; CHECK-NEXT: vmv1r.v v7, v8 2532; CHECK-NEXT: vmv1r.v v8, v9 2533; CHECK-NEXT: vmv1r.v v9, v10 2534; CHECK-NEXT: vlseg3e32ff.v v7, (a0), v0.t 2535; CHECK-NEXT: csrr a0, vl 2536; CHECK-NEXT: sw a0, 0(a2) 2537; CHECK-NEXT: ret 2538entry: 2539 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 5) 2540 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 2541 %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) 2542 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 2543 store i32 %3, ptr %outvl 2544 ret <vscale x 1 x i32> %2 2545} 2546 2547declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3), ptr, <vscale x 2 x i1>, i32, i32, i32) 2548 2549define <vscale x 2 x i32> @test_vlseg3ff_nxv2i32_triscv.vector.tuple_nxv8i8_3t(ptr %base, i32 %vl, ptr %outvl) { 2550; CHECK-LABEL: test_vlseg3ff_nxv2i32_triscv.vector.tuple_nxv8i8_3t: 2551; CHECK: # %bb.0: # %entry 2552; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 2553; CHECK-NEXT: vlseg3e32ff.v v7, (a0) 2554; CHECK-NEXT: csrr a0, vl 2555; CHECK-NEXT: sw a0, 0(a2) 2556; CHECK-NEXT: ret 2557entry: 2558 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) undef, ptr %base, i32 %vl, i32 5) 2559 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 2560 %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) 2561 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 2562 store i32 %3, ptr %outvl 2563 ret <vscale x 2 x i32> %2 2564} 2565 2566define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2567; CHECK-LABEL: test_vlseg3ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_3t: 2568; CHECK: # %bb.0: # %entry 2569; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 2570; CHECK-NEXT: vmv1r.v v7, v8 2571; CHECK-NEXT: vmv1r.v v8, v9 2572; CHECK-NEXT: vmv1r.v v9, v10 2573; CHECK-NEXT: vlseg3e32ff.v v7, (a0), v0.t 2574; CHECK-NEXT: csrr a0, vl 2575; CHECK-NEXT: sw a0, 0(a2) 2576; CHECK-NEXT: ret 2577entry: 2578 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 5) 2579 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 2580 %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) 2581 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 2582 store i32 %3, ptr %outvl 2583 ret <vscale x 2 x i32> %2 2584} 2585 2586declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3), ptr, <vscale x 4 x i1>, i32, i32, i32) 2587 2588define <vscale x 4 x i32> @test_vlseg3ff_nxv4i32_triscv.vector.tuple_nxv16i8_3t(ptr %base, i32 %vl, ptr %outvl) { 2589; CHECK-LABEL: test_vlseg3ff_nxv4i32_triscv.vector.tuple_nxv16i8_3t: 2590; CHECK: # %bb.0: # %entry 2591; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 2592; CHECK-NEXT: vlseg3e32ff.v v6, (a0) 2593; CHECK-NEXT: csrr a0, vl 2594; CHECK-NEXT: sw a0, 0(a2) 2595; CHECK-NEXT: ret 2596entry: 2597 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) undef, ptr %base, i32 %vl, i32 5) 2598 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 2599 %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) 2600 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 2601 store i32 %3, ptr %outvl 2602 ret <vscale x 4 x i32> %2 2603} 2604 2605define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 2606; CHECK-LABEL: test_vlseg3ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_3t: 2607; CHECK: # %bb.0: # %entry 2608; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu 2609; CHECK-NEXT: vmv2r.v v6, v8 2610; CHECK-NEXT: vmv2r.v v8, v10 2611; CHECK-NEXT: vmv2r.v v10, v12 2612; CHECK-NEXT: vlseg3e32ff.v v6, (a0), v0.t 2613; CHECK-NEXT: csrr a0, vl 2614; CHECK-NEXT: sw a0, 0(a2) 2615; CHECK-NEXT: ret 2616entry: 2617 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 5) 2618 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 2619 %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) 2620 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 2621 store i32 %3, ptr %outvl 2622 ret <vscale x 4 x i32> %2 2623} 2624 2625declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv4i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 4), ptr, <vscale x 1 x i1>, i32, i32, i32) 2626 2627define <vscale x 1 x i32> @test_vlseg4ff_nxv1i32_triscv.vector.tuple_nxv4i8_4t(ptr %base, i32 %vl, ptr %outvl) { 2628; CHECK-LABEL: test_vlseg4ff_nxv1i32_triscv.vector.tuple_nxv4i8_4t: 2629; CHECK: # %bb.0: # %entry 2630; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 2631; CHECK-NEXT: vlseg4e32ff.v v7, (a0) 2632; CHECK-NEXT: csrr a0, vl 2633; CHECK-NEXT: sw a0, 0(a2) 2634; CHECK-NEXT: ret 2635entry: 2636 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) undef, ptr %base, i32 %vl, i32 5) 2637 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 2638 %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) 2639 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 2640 store i32 %3, ptr %outvl 2641 ret <vscale x 1 x i32> %2 2642} 2643 2644define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 2645; CHECK-LABEL: test_vlseg4ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_4t: 2646; CHECK: # %bb.0: # %entry 2647; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 2648; CHECK-NEXT: vmv1r.v v7, v8 2649; CHECK-NEXT: vmv1r.v v8, v9 2650; CHECK-NEXT: vmv1r.v v9, v10 2651; CHECK-NEXT: vmv1r.v v10, v11 2652; CHECK-NEXT: vlseg4e32ff.v v7, (a0), v0.t 2653; CHECK-NEXT: csrr a0, vl 2654; CHECK-NEXT: sw a0, 0(a2) 2655; CHECK-NEXT: ret 2656entry: 2657 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 5) 2658 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 2659 %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) 2660 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 2661 store i32 %3, ptr %outvl 2662 ret <vscale x 1 x i32> %2 2663} 2664 2665declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4), ptr, <vscale x 2 x i1>, i32, i32, i32) 2666 2667define <vscale x 2 x i32> @test_vlseg4ff_nxv2i32_triscv.vector.tuple_nxv8i8_4t(ptr %base, i32 %vl, ptr %outvl) { 2668; CHECK-LABEL: test_vlseg4ff_nxv2i32_triscv.vector.tuple_nxv8i8_4t: 2669; CHECK: # %bb.0: # %entry 2670; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 2671; CHECK-NEXT: vlseg4e32ff.v v7, (a0) 2672; CHECK-NEXT: csrr a0, vl 2673; CHECK-NEXT: sw a0, 0(a2) 2674; CHECK-NEXT: ret 2675entry: 2676 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) undef, ptr %base, i32 %vl, i32 5) 2677 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 2678 %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) 2679 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 2680 store i32 %3, ptr %outvl 2681 ret <vscale x 2 x i32> %2 2682} 2683 2684define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2685; CHECK-LABEL: test_vlseg4ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_4t: 2686; CHECK: # %bb.0: # %entry 2687; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 2688; CHECK-NEXT: vmv1r.v v7, v8 2689; CHECK-NEXT: vmv1r.v v8, v9 2690; CHECK-NEXT: vmv1r.v v9, v10 2691; CHECK-NEXT: vmv1r.v v10, v11 2692; CHECK-NEXT: vlseg4e32ff.v v7, (a0), v0.t 2693; CHECK-NEXT: csrr a0, vl 2694; CHECK-NEXT: sw a0, 0(a2) 2695; CHECK-NEXT: ret 2696entry: 2697 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 5) 2698 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 2699 %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) 2700 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 2701 store i32 %3, ptr %outvl 2702 ret <vscale x 2 x i32> %2 2703} 2704 2705declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv4i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4), ptr, <vscale x 4 x i1>, i32, i32, i32) 2706 2707define <vscale x 4 x i32> @test_vlseg4ff_nxv4i32_triscv.vector.tuple_nxv16i8_4t(ptr %base, i32 %vl, ptr %outvl) { 2708; CHECK-LABEL: test_vlseg4ff_nxv4i32_triscv.vector.tuple_nxv16i8_4t: 2709; CHECK: # %bb.0: # %entry 2710; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 2711; CHECK-NEXT: vlseg4e32ff.v v6, (a0) 2712; CHECK-NEXT: csrr a0, vl 2713; CHECK-NEXT: sw a0, 0(a2) 2714; CHECK-NEXT: ret 2715entry: 2716 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) undef, ptr %base, i32 %vl, i32 5) 2717 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 2718 %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) 2719 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 2720 store i32 %3, ptr %outvl 2721 ret <vscale x 4 x i32> %2 2722} 2723 2724define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 2725; CHECK-LABEL: test_vlseg4ff_mask_nxv4i32_triscv.vector.tuple_nxv16i8_4t: 2726; CHECK: # %bb.0: # %entry 2727; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu 2728; CHECK-NEXT: vmv2r.v v6, v8 2729; CHECK-NEXT: vmv2r.v v8, v10 2730; CHECK-NEXT: vmv2r.v v10, v12 2731; CHECK-NEXT: vmv2r.v v12, v14 2732; CHECK-NEXT: vlseg4e32ff.v v6, (a0), v0.t 2733; CHECK-NEXT: csrr a0, vl 2734; CHECK-NEXT: sw a0, 0(a2) 2735; CHECK-NEXT: ret 2736entry: 2737 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 5) 2738 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 2739 %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) 2740 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 2741 store i32 %3, ptr %outvl 2742 ret <vscale x 4 x i32> %2 2743} 2744 2745declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv4i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 5), ptr, <vscale x 1 x i1>, i32, i32, i32) 2746 2747define <vscale x 1 x i32> @test_vlseg5ff_nxv1i32_triscv.vector.tuple_nxv4i8_5t(ptr %base, i32 %vl, ptr %outvl) { 2748; CHECK-LABEL: test_vlseg5ff_nxv1i32_triscv.vector.tuple_nxv4i8_5t: 2749; CHECK: # %bb.0: # %entry 2750; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 2751; CHECK-NEXT: vlseg5e32ff.v v7, (a0) 2752; CHECK-NEXT: csrr a0, vl 2753; CHECK-NEXT: sw a0, 0(a2) 2754; CHECK-NEXT: ret 2755entry: 2756 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) undef, ptr %base, i32 %vl, i32 5) 2757 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 2758 %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) 2759 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 2760 store i32 %3, ptr %outvl 2761 ret <vscale x 1 x i32> %2 2762} 2763 2764define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 2765; CHECK-LABEL: test_vlseg5ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_5t: 2766; CHECK: # %bb.0: # %entry 2767; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 2768; CHECK-NEXT: vmv1r.v v7, v8 2769; CHECK-NEXT: vmv1r.v v8, v9 2770; CHECK-NEXT: vmv1r.v v9, v10 2771; CHECK-NEXT: vmv1r.v v10, v11 2772; CHECK-NEXT: vmv1r.v v11, v12 2773; CHECK-NEXT: vlseg5e32ff.v v7, (a0), v0.t 2774; CHECK-NEXT: csrr a0, vl 2775; CHECK-NEXT: sw a0, 0(a2) 2776; CHECK-NEXT: ret 2777entry: 2778 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 5) 2779 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 2780 %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) 2781 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 2782 store i32 %3, ptr %outvl 2783 ret <vscale x 1 x i32> %2 2784} 2785 2786declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5), ptr, <vscale x 2 x i1>, i32, i32, i32) 2787 2788define <vscale x 2 x i32> @test_vlseg5ff_nxv2i32_triscv.vector.tuple_nxv8i8_5t(ptr %base, i32 %vl, ptr %outvl) { 2789; CHECK-LABEL: test_vlseg5ff_nxv2i32_triscv.vector.tuple_nxv8i8_5t: 2790; CHECK: # %bb.0: # %entry 2791; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 2792; CHECK-NEXT: vlseg5e32ff.v v7, (a0) 2793; CHECK-NEXT: csrr a0, vl 2794; CHECK-NEXT: sw a0, 0(a2) 2795; CHECK-NEXT: ret 2796entry: 2797 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) undef, ptr %base, i32 %vl, i32 5) 2798 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 2799 %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) 2800 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 2801 store i32 %3, ptr %outvl 2802 ret <vscale x 2 x i32> %2 2803} 2804 2805define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2806; CHECK-LABEL: test_vlseg5ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_5t: 2807; CHECK: # %bb.0: # %entry 2808; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 2809; CHECK-NEXT: vmv1r.v v7, v8 2810; CHECK-NEXT: vmv1r.v v8, v9 2811; CHECK-NEXT: vmv1r.v v9, v10 2812; CHECK-NEXT: vmv1r.v v10, v11 2813; CHECK-NEXT: vmv1r.v v11, v12 2814; CHECK-NEXT: vlseg5e32ff.v v7, (a0), v0.t 2815; CHECK-NEXT: csrr a0, vl 2816; CHECK-NEXT: sw a0, 0(a2) 2817; CHECK-NEXT: ret 2818entry: 2819 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 5) 2820 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 2821 %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) 2822 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 2823 store i32 %3, ptr %outvl 2824 ret <vscale x 2 x i32> %2 2825} 2826 2827declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv4i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 6), ptr, <vscale x 1 x i1>, i32, i32, i32) 2828 2829define <vscale x 1 x i32> @test_vlseg6ff_nxv1i32_triscv.vector.tuple_nxv4i8_6t(ptr %base, i32 %vl, ptr %outvl) { 2830; CHECK-LABEL: test_vlseg6ff_nxv1i32_triscv.vector.tuple_nxv4i8_6t: 2831; CHECK: # %bb.0: # %entry 2832; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 2833; CHECK-NEXT: vlseg6e32ff.v v7, (a0) 2834; CHECK-NEXT: csrr a0, vl 2835; CHECK-NEXT: sw a0, 0(a2) 2836; CHECK-NEXT: ret 2837entry: 2838 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) undef, ptr %base, i32 %vl, i32 5) 2839 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 2840 %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) 2841 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 2842 store i32 %3, ptr %outvl 2843 ret <vscale x 1 x i32> %2 2844} 2845 2846define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 2847; CHECK-LABEL: test_vlseg6ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_6t: 2848; CHECK: # %bb.0: # %entry 2849; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 2850; CHECK-NEXT: vmv1r.v v7, v8 2851; CHECK-NEXT: vmv1r.v v8, v9 2852; CHECK-NEXT: vmv1r.v v9, v10 2853; CHECK-NEXT: vmv1r.v v10, v11 2854; CHECK-NEXT: vmv1r.v v11, v12 2855; CHECK-NEXT: vmv1r.v v12, v13 2856; CHECK-NEXT: vlseg6e32ff.v v7, (a0), v0.t 2857; CHECK-NEXT: csrr a0, vl 2858; CHECK-NEXT: sw a0, 0(a2) 2859; CHECK-NEXT: ret 2860entry: 2861 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 5) 2862 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 2863 %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) 2864 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 2865 store i32 %3, ptr %outvl 2866 ret <vscale x 1 x i32> %2 2867} 2868 2869declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6), ptr, <vscale x 2 x i1>, i32, i32, i32) 2870 2871define <vscale x 2 x i32> @test_vlseg6ff_nxv2i32_triscv.vector.tuple_nxv8i8_6t(ptr %base, i32 %vl, ptr %outvl) { 2872; CHECK-LABEL: test_vlseg6ff_nxv2i32_triscv.vector.tuple_nxv8i8_6t: 2873; CHECK: # %bb.0: # %entry 2874; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 2875; CHECK-NEXT: vlseg6e32ff.v v7, (a0) 2876; CHECK-NEXT: csrr a0, vl 2877; CHECK-NEXT: sw a0, 0(a2) 2878; CHECK-NEXT: ret 2879entry: 2880 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) undef, ptr %base, i32 %vl, i32 5) 2881 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 2882 %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) 2883 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 2884 store i32 %3, ptr %outvl 2885 ret <vscale x 2 x i32> %2 2886} 2887 2888define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2889; CHECK-LABEL: test_vlseg6ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_6t: 2890; CHECK: # %bb.0: # %entry 2891; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 2892; CHECK-NEXT: vmv1r.v v7, v8 2893; CHECK-NEXT: vmv1r.v v8, v9 2894; CHECK-NEXT: vmv1r.v v9, v10 2895; CHECK-NEXT: vmv1r.v v10, v11 2896; CHECK-NEXT: vmv1r.v v11, v12 2897; CHECK-NEXT: vmv1r.v v12, v13 2898; CHECK-NEXT: vlseg6e32ff.v v7, (a0), v0.t 2899; CHECK-NEXT: csrr a0, vl 2900; CHECK-NEXT: sw a0, 0(a2) 2901; CHECK-NEXT: ret 2902entry: 2903 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 5) 2904 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 2905 %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) 2906 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 2907 store i32 %3, ptr %outvl 2908 ret <vscale x 2 x i32> %2 2909} 2910 2911declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv4i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 7), ptr, <vscale x 1 x i1>, i32, i32, i32) 2912 2913define <vscale x 1 x i32> @test_vlseg7ff_nxv1i32_triscv.vector.tuple_nxv4i8_7t(ptr %base, i32 %vl, ptr %outvl) { 2914; CHECK-LABEL: test_vlseg7ff_nxv1i32_triscv.vector.tuple_nxv4i8_7t: 2915; CHECK: # %bb.0: # %entry 2916; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 2917; CHECK-NEXT: vlseg7e32ff.v v7, (a0) 2918; CHECK-NEXT: csrr a0, vl 2919; CHECK-NEXT: sw a0, 0(a2) 2920; CHECK-NEXT: ret 2921entry: 2922 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) undef, ptr %base, i32 %vl, i32 5) 2923 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 2924 %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) 2925 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 2926 store i32 %3, ptr %outvl 2927 ret <vscale x 1 x i32> %2 2928} 2929 2930define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 2931; CHECK-LABEL: test_vlseg7ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_7t: 2932; CHECK: # %bb.0: # %entry 2933; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 2934; CHECK-NEXT: vmv1r.v v7, v8 2935; CHECK-NEXT: vmv1r.v v8, v9 2936; CHECK-NEXT: vmv1r.v v9, v10 2937; CHECK-NEXT: vmv1r.v v10, v11 2938; CHECK-NEXT: vmv1r.v v11, v12 2939; CHECK-NEXT: vmv1r.v v12, v13 2940; CHECK-NEXT: vmv1r.v v13, v14 2941; CHECK-NEXT: vlseg7e32ff.v v7, (a0), v0.t 2942; CHECK-NEXT: csrr a0, vl 2943; CHECK-NEXT: sw a0, 0(a2) 2944; CHECK-NEXT: ret 2945entry: 2946 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 5) 2947 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 2948 %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) 2949 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 2950 store i32 %3, ptr %outvl 2951 ret <vscale x 1 x i32> %2 2952} 2953 2954declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7), ptr, <vscale x 2 x i1>, i32, i32, i32) 2955 2956define <vscale x 2 x i32> @test_vlseg7ff_nxv2i32_triscv.vector.tuple_nxv8i8_7t(ptr %base, i32 %vl, ptr %outvl) { 2957; CHECK-LABEL: test_vlseg7ff_nxv2i32_triscv.vector.tuple_nxv8i8_7t: 2958; CHECK: # %bb.0: # %entry 2959; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 2960; CHECK-NEXT: vlseg7e32ff.v v7, (a0) 2961; CHECK-NEXT: csrr a0, vl 2962; CHECK-NEXT: sw a0, 0(a2) 2963; CHECK-NEXT: ret 2964entry: 2965 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) undef, ptr %base, i32 %vl, i32 5) 2966 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 2967 %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) 2968 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 2969 store i32 %3, ptr %outvl 2970 ret <vscale x 2 x i32> %2 2971} 2972 2973define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 2974; CHECK-LABEL: test_vlseg7ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_7t: 2975; CHECK: # %bb.0: # %entry 2976; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 2977; CHECK-NEXT: vmv1r.v v7, v8 2978; CHECK-NEXT: vmv1r.v v8, v9 2979; CHECK-NEXT: vmv1r.v v9, v10 2980; CHECK-NEXT: vmv1r.v v10, v11 2981; CHECK-NEXT: vmv1r.v v11, v12 2982; CHECK-NEXT: vmv1r.v v12, v13 2983; CHECK-NEXT: vmv1r.v v13, v14 2984; CHECK-NEXT: vlseg7e32ff.v v7, (a0), v0.t 2985; CHECK-NEXT: csrr a0, vl 2986; CHECK-NEXT: sw a0, 0(a2) 2987; CHECK-NEXT: ret 2988entry: 2989 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 5) 2990 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 2991 %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) 2992 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 2993 store i32 %3, ptr %outvl 2994 ret <vscale x 2 x i32> %2 2995} 2996 2997declare {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv4i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 4 x i8>, 8), ptr, <vscale x 1 x i1>, i32, i32, i32) 2998 2999define <vscale x 1 x i32> @test_vlseg8ff_nxv1i32_triscv.vector.tuple_nxv4i8_8t(ptr %base, i32 %vl, ptr %outvl) { 3000; CHECK-LABEL: test_vlseg8ff_nxv1i32_triscv.vector.tuple_nxv4i8_8t: 3001; CHECK: # %bb.0: # %entry 3002; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 3003; CHECK-NEXT: vlseg8e32ff.v v7, (a0) 3004; CHECK-NEXT: csrr a0, vl 3005; CHECK-NEXT: sw a0, 0(a2) 3006; CHECK-NEXT: ret 3007entry: 3008 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) undef, ptr %base, i32 %vl, i32 5) 3009 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 3010 %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) 3011 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 3012 store i32 %3, ptr %outvl 3013 ret <vscale x 1 x i32> %2 3014} 3015 3016define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3017; CHECK-LABEL: test_vlseg8ff_mask_nxv1i32_triscv.vector.tuple_nxv4i8_8t: 3018; CHECK: # %bb.0: # %entry 3019; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 3020; CHECK-NEXT: vmv1r.v v7, v8 3021; CHECK-NEXT: vmv1r.v v8, v9 3022; CHECK-NEXT: vmv1r.v v9, v10 3023; CHECK-NEXT: vmv1r.v v10, v11 3024; CHECK-NEXT: vmv1r.v v11, v12 3025; CHECK-NEXT: vmv1r.v v12, v13 3026; CHECK-NEXT: vmv1r.v v13, v14 3027; CHECK-NEXT: vmv1r.v v14, v15 3028; CHECK-NEXT: vlseg8e32ff.v v7, (a0), v0.t 3029; CHECK-NEXT: csrr a0, vl 3030; CHECK-NEXT: sw a0, 0(a2) 3031; CHECK-NEXT: ret 3032entry: 3033 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 5) 3034 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 3035 %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) 3036 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 3037 store i32 %3, ptr %outvl 3038 ret <vscale x 1 x i32> %2 3039} 3040 3041declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv2i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8), ptr, <vscale x 2 x i1>, i32, i32, i32) 3042 3043define <vscale x 2 x i32> @test_vlseg8ff_nxv2i32_triscv.vector.tuple_nxv8i8_8t(ptr %base, i32 %vl, ptr %outvl) { 3044; CHECK-LABEL: test_vlseg8ff_nxv2i32_triscv.vector.tuple_nxv8i8_8t: 3045; CHECK: # %bb.0: # %entry 3046; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 3047; CHECK-NEXT: vlseg8e32ff.v v7, (a0) 3048; CHECK-NEXT: csrr a0, vl 3049; CHECK-NEXT: sw a0, 0(a2) 3050; CHECK-NEXT: ret 3051entry: 3052 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) undef, ptr %base, i32 %vl, i32 5) 3053 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 3054 %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) 3055 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 3056 store i32 %3, ptr %outvl 3057 ret <vscale x 2 x i32> %2 3058} 3059 3060define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 3061; CHECK-LABEL: test_vlseg8ff_mask_nxv2i32_triscv.vector.tuple_nxv8i8_8t: 3062; CHECK: # %bb.0: # %entry 3063; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 3064; CHECK-NEXT: vmv1r.v v7, v8 3065; CHECK-NEXT: vmv1r.v v8, v9 3066; CHECK-NEXT: vmv1r.v v9, v10 3067; CHECK-NEXT: vmv1r.v v10, v11 3068; CHECK-NEXT: vmv1r.v v11, v12 3069; CHECK-NEXT: vmv1r.v v12, v13 3070; CHECK-NEXT: vmv1r.v v13, v14 3071; CHECK-NEXT: vmv1r.v v14, v15 3072; CHECK-NEXT: vlseg8e32ff.v v7, (a0), v0.t 3073; CHECK-NEXT: csrr a0, vl 3074; CHECK-NEXT: sw a0, 0(a2) 3075; CHECK-NEXT: ret 3076entry: 3077 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 5) 3078 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 3079 %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) 3080 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 3081 store i32 %3, ptr %outvl 3082 ret <vscale x 2 x i32> %2 3083} 3084 3085declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv8i8_2t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 2), ptr, <vscale x 1 x i1>, i32, i32, i32) 3086 3087define <vscale x 1 x i64> @test_vlseg2ff_nxv1i64_triscv.vector.tuple_nxv8i8_2t(ptr %base, i32 %vl, ptr %outvl) { 3088; CHECK-LABEL: test_vlseg2ff_nxv1i64_triscv.vector.tuple_nxv8i8_2t: 3089; CHECK: # %bb.0: # %entry 3090; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 3091; CHECK-NEXT: vlseg2e64ff.v v7, (a0) 3092; CHECK-NEXT: csrr a0, vl 3093; CHECK-NEXT: sw a0, 0(a2) 3094; CHECK-NEXT: ret 3095entry: 3096 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) undef, ptr %base, i32 %vl, i32 6) 3097 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 3098 %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) 3099 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 3100 store i32 %3, ptr %outvl 3101 ret <vscale x 1 x i64> %2 3102} 3103 3104define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3105; CHECK-LABEL: test_vlseg2ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_2t: 3106; CHECK: # %bb.0: # %entry 3107; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 3108; CHECK-NEXT: vmv1r.v v7, v8 3109; CHECK-NEXT: vmv1r.v v8, v9 3110; CHECK-NEXT: vlseg2e64ff.v v7, (a0), v0.t 3111; CHECK-NEXT: csrr a0, vl 3112; CHECK-NEXT: sw a0, 0(a2) 3113; CHECK-NEXT: ret 3114entry: 3115 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 6) 3116 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 3117 %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) 3118 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 3119 store i32 %3, ptr %outvl 3120 ret <vscale x 1 x i64> %2 3121} 3122 3123declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv16i8_2t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 2), ptr, <vscale x 2 x i1>, i32, i32, i32) 3124 3125define <vscale x 2 x i64> @test_vlseg2ff_nxv2i64_triscv.vector.tuple_nxv16i8_2t(ptr %base, i32 %vl, ptr %outvl) { 3126; CHECK-LABEL: test_vlseg2ff_nxv2i64_triscv.vector.tuple_nxv16i8_2t: 3127; CHECK: # %bb.0: # %entry 3128; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma 3129; CHECK-NEXT: vlseg2e64ff.v v6, (a0) 3130; CHECK-NEXT: csrr a0, vl 3131; CHECK-NEXT: sw a0, 0(a2) 3132; CHECK-NEXT: ret 3133entry: 3134 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) undef, ptr %base, i32 %vl, i32 6) 3135 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 3136 %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) 3137 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 3138 store i32 %3, ptr %outvl 3139 ret <vscale x 2 x i64> %2 3140} 3141 3142define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 3143; CHECK-LABEL: test_vlseg2ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_2t: 3144; CHECK: # %bb.0: # %entry 3145; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu 3146; CHECK-NEXT: vmv2r.v v6, v8 3147; CHECK-NEXT: vmv2r.v v8, v10 3148; CHECK-NEXT: vlseg2e64ff.v v6, (a0), v0.t 3149; CHECK-NEXT: csrr a0, vl 3150; CHECK-NEXT: sw a0, 0(a2) 3151; CHECK-NEXT: ret 3152entry: 3153 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 6) 3154 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 3155 %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) 3156 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 3157 store i32 %3, ptr %outvl 3158 ret <vscale x 2 x i64> %2 3159} 3160 3161declare {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.mask.triscv.vector.tuple_nxv32i8_2t.nxv4i1(target("riscv.vector.tuple", <vscale x 32 x i8>, 2), ptr, <vscale x 4 x i1>, i32, i32, i32) 3162 3163define <vscale x 4 x i64> @test_vlseg2ff_nxv4i64_triscv.vector.tuple_nxv32i8_2t(ptr %base, i32 %vl, ptr %outvl) { 3164; CHECK-LABEL: test_vlseg2ff_nxv4i64_triscv.vector.tuple_nxv32i8_2t: 3165; CHECK: # %bb.0: # %entry 3166; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, ma 3167; CHECK-NEXT: vlseg2e64ff.v v4, (a0) 3168; CHECK-NEXT: csrr a0, vl 3169; CHECK-NEXT: sw a0, 0(a2) 3170; CHECK-NEXT: ret 3171entry: 3172 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) undef, ptr %base, i32 %vl, i32 6) 3173 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 3174 %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) 3175 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 3176 store i32 %3, ptr %outvl 3177 ret <vscale x 4 x i64> %2 3178} 3179 3180define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 3181; CHECK-LABEL: test_vlseg2ff_mask_nxv4i64_triscv.vector.tuple_nxv32i8_2t: 3182; CHECK: # %bb.0: # %entry 3183; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, mu 3184; CHECK-NEXT: vmv4r.v v4, v8 3185; CHECK-NEXT: vmv4r.v v8, v12 3186; CHECK-NEXT: vlseg2e64ff.v v4, (a0), v0.t 3187; CHECK-NEXT: csrr a0, vl 3188; CHECK-NEXT: sw a0, 0(a2) 3189; CHECK-NEXT: ret 3190entry: 3191 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 6) 3192 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 3193 %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) 3194 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 3195 store i32 %3, ptr %outvl 3196 ret <vscale x 4 x i64> %2 3197} 3198 3199declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv8i8_3t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 3), ptr, <vscale x 1 x i1>, i32, i32, i32) 3200 3201define <vscale x 1 x i64> @test_vlseg3ff_nxv1i64_triscv.vector.tuple_nxv8i8_3t(ptr %base, i32 %vl, ptr %outvl) { 3202; CHECK-LABEL: test_vlseg3ff_nxv1i64_triscv.vector.tuple_nxv8i8_3t: 3203; CHECK: # %bb.0: # %entry 3204; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 3205; CHECK-NEXT: vlseg3e64ff.v v7, (a0) 3206; CHECK-NEXT: csrr a0, vl 3207; CHECK-NEXT: sw a0, 0(a2) 3208; CHECK-NEXT: ret 3209entry: 3210 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) undef, ptr %base, i32 %vl, i32 6) 3211 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 3212 %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) 3213 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 3214 store i32 %3, ptr %outvl 3215 ret <vscale x 1 x i64> %2 3216} 3217 3218define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3219; CHECK-LABEL: test_vlseg3ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_3t: 3220; CHECK: # %bb.0: # %entry 3221; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 3222; CHECK-NEXT: vmv1r.v v7, v8 3223; CHECK-NEXT: vmv1r.v v8, v9 3224; CHECK-NEXT: vmv1r.v v9, v10 3225; CHECK-NEXT: vlseg3e64ff.v v7, (a0), v0.t 3226; CHECK-NEXT: csrr a0, vl 3227; CHECK-NEXT: sw a0, 0(a2) 3228; CHECK-NEXT: ret 3229entry: 3230 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 6) 3231 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 3232 %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) 3233 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 3234 store i32 %3, ptr %outvl 3235 ret <vscale x 1 x i64> %2 3236} 3237 3238declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.mask.triscv.vector.tuple_nxv16i8_3t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 3), ptr, <vscale x 2 x i1>, i32, i32, i32) 3239 3240define <vscale x 2 x i64> @test_vlseg3ff_nxv2i64_triscv.vector.tuple_nxv16i8_3t(ptr %base, i32 %vl, ptr %outvl) { 3241; CHECK-LABEL: test_vlseg3ff_nxv2i64_triscv.vector.tuple_nxv16i8_3t: 3242; CHECK: # %bb.0: # %entry 3243; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma 3244; CHECK-NEXT: vlseg3e64ff.v v6, (a0) 3245; CHECK-NEXT: csrr a0, vl 3246; CHECK-NEXT: sw a0, 0(a2) 3247; CHECK-NEXT: ret 3248entry: 3249 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) undef, ptr %base, i32 %vl, i32 6) 3250 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 3251 %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) 3252 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 3253 store i32 %3, ptr %outvl 3254 ret <vscale x 2 x i64> %2 3255} 3256 3257define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 3258; CHECK-LABEL: test_vlseg3ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_3t: 3259; CHECK: # %bb.0: # %entry 3260; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu 3261; CHECK-NEXT: vmv2r.v v6, v8 3262; CHECK-NEXT: vmv2r.v v8, v10 3263; CHECK-NEXT: vmv2r.v v10, v12 3264; CHECK-NEXT: vlseg3e64ff.v v6, (a0), v0.t 3265; CHECK-NEXT: csrr a0, vl 3266; CHECK-NEXT: sw a0, 0(a2) 3267; CHECK-NEXT: ret 3268entry: 3269 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 6) 3270 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 3271 %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) 3272 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 3273 store i32 %3, ptr %outvl 3274 ret <vscale x 2 x i64> %2 3275} 3276 3277declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv8i8_4t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 4), ptr, <vscale x 1 x i1>, i32, i32, i32) 3278 3279define <vscale x 1 x i64> @test_vlseg4ff_nxv1i64_triscv.vector.tuple_nxv8i8_4t(ptr %base, i32 %vl, ptr %outvl) { 3280; CHECK-LABEL: test_vlseg4ff_nxv1i64_triscv.vector.tuple_nxv8i8_4t: 3281; CHECK: # %bb.0: # %entry 3282; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 3283; CHECK-NEXT: vlseg4e64ff.v v7, (a0) 3284; CHECK-NEXT: csrr a0, vl 3285; CHECK-NEXT: sw a0, 0(a2) 3286; CHECK-NEXT: ret 3287entry: 3288 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) undef, ptr %base, i32 %vl, i32 6) 3289 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 3290 %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) 3291 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 3292 store i32 %3, ptr %outvl 3293 ret <vscale x 1 x i64> %2 3294} 3295 3296define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3297; CHECK-LABEL: test_vlseg4ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_4t: 3298; CHECK: # %bb.0: # %entry 3299; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 3300; CHECK-NEXT: vmv1r.v v7, v8 3301; CHECK-NEXT: vmv1r.v v8, v9 3302; CHECK-NEXT: vmv1r.v v9, v10 3303; CHECK-NEXT: vmv1r.v v10, v11 3304; CHECK-NEXT: vlseg4e64ff.v v7, (a0), v0.t 3305; CHECK-NEXT: csrr a0, vl 3306; CHECK-NEXT: sw a0, 0(a2) 3307; CHECK-NEXT: ret 3308entry: 3309 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 6) 3310 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 3311 %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) 3312 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 3313 store i32 %3, ptr %outvl 3314 ret <vscale x 1 x i64> %2 3315} 3316 3317declare {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.mask.triscv.vector.tuple_nxv16i8_4t.nxv2i1(target("riscv.vector.tuple", <vscale x 16 x i8>, 4), ptr, <vscale x 2 x i1>, i32, i32, i32) 3318 3319define <vscale x 2 x i64> @test_vlseg4ff_nxv2i64_triscv.vector.tuple_nxv16i8_4t(ptr %base, i32 %vl, ptr %outvl) { 3320; CHECK-LABEL: test_vlseg4ff_nxv2i64_triscv.vector.tuple_nxv16i8_4t: 3321; CHECK: # %bb.0: # %entry 3322; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma 3323; CHECK-NEXT: vlseg4e64ff.v v6, (a0) 3324; CHECK-NEXT: csrr a0, vl 3325; CHECK-NEXT: sw a0, 0(a2) 3326; CHECK-NEXT: ret 3327entry: 3328 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) undef, ptr %base, i32 %vl, i32 6) 3329 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 3330 %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) 3331 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 3332 store i32 %3, ptr %outvl 3333 ret <vscale x 2 x i64> %2 3334} 3335 3336define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 3337; CHECK-LABEL: test_vlseg4ff_mask_nxv2i64_triscv.vector.tuple_nxv16i8_4t: 3338; CHECK: # %bb.0: # %entry 3339; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu 3340; CHECK-NEXT: vmv2r.v v6, v8 3341; CHECK-NEXT: vmv2r.v v8, v10 3342; CHECK-NEXT: vmv2r.v v10, v12 3343; CHECK-NEXT: vmv2r.v v12, v14 3344; CHECK-NEXT: vlseg4e64ff.v v6, (a0), v0.t 3345; CHECK-NEXT: csrr a0, vl 3346; CHECK-NEXT: sw a0, 0(a2) 3347; CHECK-NEXT: ret 3348entry: 3349 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 6) 3350 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 3351 %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) 3352 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 3353 store i32 %3, ptr %outvl 3354 ret <vscale x 2 x i64> %2 3355} 3356 3357declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.mask.triscv.vector.tuple_nxv8i8_5t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 5), ptr, <vscale x 1 x i1>, i32, i32, i32) 3358 3359define <vscale x 1 x i64> @test_vlseg5ff_nxv1i64_triscv.vector.tuple_nxv8i8_5t(ptr %base, i32 %vl, ptr %outvl) { 3360; CHECK-LABEL: test_vlseg5ff_nxv1i64_triscv.vector.tuple_nxv8i8_5t: 3361; CHECK: # %bb.0: # %entry 3362; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 3363; CHECK-NEXT: vlseg5e64ff.v v7, (a0) 3364; CHECK-NEXT: csrr a0, vl 3365; CHECK-NEXT: sw a0, 0(a2) 3366; CHECK-NEXT: ret 3367entry: 3368 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) undef, ptr %base, i32 %vl, i32 6) 3369 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 3370 %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) 3371 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 3372 store i32 %3, ptr %outvl 3373 ret <vscale x 1 x i64> %2 3374} 3375 3376define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3377; CHECK-LABEL: test_vlseg5ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_5t: 3378; CHECK: # %bb.0: # %entry 3379; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 3380; CHECK-NEXT: vmv1r.v v7, v8 3381; CHECK-NEXT: vmv1r.v v8, v9 3382; CHECK-NEXT: vmv1r.v v9, v10 3383; CHECK-NEXT: vmv1r.v v10, v11 3384; CHECK-NEXT: vmv1r.v v11, v12 3385; CHECK-NEXT: vlseg5e64ff.v v7, (a0), v0.t 3386; CHECK-NEXT: csrr a0, vl 3387; CHECK-NEXT: sw a0, 0(a2) 3388; CHECK-NEXT: ret 3389entry: 3390 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 6) 3391 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 3392 %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) 3393 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 3394 store i32 %3, ptr %outvl 3395 ret <vscale x 1 x i64> %2 3396} 3397 3398declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.mask.triscv.vector.tuple_nxv8i8_6t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 6), ptr, <vscale x 1 x i1>, i32, i32, i32) 3399 3400define <vscale x 1 x i64> @test_vlseg6ff_nxv1i64_triscv.vector.tuple_nxv8i8_6t(ptr %base, i32 %vl, ptr %outvl) { 3401; CHECK-LABEL: test_vlseg6ff_nxv1i64_triscv.vector.tuple_nxv8i8_6t: 3402; CHECK: # %bb.0: # %entry 3403; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 3404; CHECK-NEXT: vlseg6e64ff.v v7, (a0) 3405; CHECK-NEXT: csrr a0, vl 3406; CHECK-NEXT: sw a0, 0(a2) 3407; CHECK-NEXT: ret 3408entry: 3409 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) undef, ptr %base, i32 %vl, i32 6) 3410 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 3411 %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) 3412 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 3413 store i32 %3, ptr %outvl 3414 ret <vscale x 1 x i64> %2 3415} 3416 3417define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3418; CHECK-LABEL: test_vlseg6ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_6t: 3419; CHECK: # %bb.0: # %entry 3420; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 3421; CHECK-NEXT: vmv1r.v v7, v8 3422; CHECK-NEXT: vmv1r.v v8, v9 3423; CHECK-NEXT: vmv1r.v v9, v10 3424; CHECK-NEXT: vmv1r.v v10, v11 3425; CHECK-NEXT: vmv1r.v v11, v12 3426; CHECK-NEXT: vmv1r.v v12, v13 3427; CHECK-NEXT: vlseg6e64ff.v v7, (a0), v0.t 3428; CHECK-NEXT: csrr a0, vl 3429; CHECK-NEXT: sw a0, 0(a2) 3430; CHECK-NEXT: ret 3431entry: 3432 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 6) 3433 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 3434 %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) 3435 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 3436 store i32 %3, ptr %outvl 3437 ret <vscale x 1 x i64> %2 3438} 3439 3440declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.mask.triscv.vector.tuple_nxv8i8_7t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 7), ptr, <vscale x 1 x i1>, i32, i32, i32) 3441 3442define <vscale x 1 x i64> @test_vlseg7ff_nxv1i64_triscv.vector.tuple_nxv8i8_7t(ptr %base, i32 %vl, ptr %outvl) { 3443; CHECK-LABEL: test_vlseg7ff_nxv1i64_triscv.vector.tuple_nxv8i8_7t: 3444; CHECK: # %bb.0: # %entry 3445; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 3446; CHECK-NEXT: vlseg7e64ff.v v7, (a0) 3447; CHECK-NEXT: csrr a0, vl 3448; CHECK-NEXT: sw a0, 0(a2) 3449; CHECK-NEXT: ret 3450entry: 3451 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) undef, ptr %base, i32 %vl, i32 6) 3452 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 3453 %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) 3454 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 3455 store i32 %3, ptr %outvl 3456 ret <vscale x 1 x i64> %2 3457} 3458 3459define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3460; CHECK-LABEL: test_vlseg7ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_7t: 3461; CHECK: # %bb.0: # %entry 3462; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 3463; CHECK-NEXT: vmv1r.v v7, v8 3464; CHECK-NEXT: vmv1r.v v8, v9 3465; CHECK-NEXT: vmv1r.v v9, v10 3466; CHECK-NEXT: vmv1r.v v10, v11 3467; CHECK-NEXT: vmv1r.v v11, v12 3468; CHECK-NEXT: vmv1r.v v12, v13 3469; CHECK-NEXT: vmv1r.v v13, v14 3470; CHECK-NEXT: vlseg7e64ff.v v7, (a0), v0.t 3471; CHECK-NEXT: csrr a0, vl 3472; CHECK-NEXT: sw a0, 0(a2) 3473; CHECK-NEXT: ret 3474entry: 3475 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 6) 3476 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 3477 %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) 3478 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 3479 store i32 %3, ptr %outvl 3480 ret <vscale x 1 x i64> %2 3481} 3482 3483declare {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.mask.triscv.vector.tuple_nxv8i8_8t.nxv1i1(target("riscv.vector.tuple", <vscale x 8 x i8>, 8), ptr, <vscale x 1 x i1>, i32, i32, i32) 3484 3485define <vscale x 1 x i64> @test_vlseg8ff_nxv1i64_triscv.vector.tuple_nxv8i8_8t(ptr %base, i32 %vl, ptr %outvl) { 3486; CHECK-LABEL: test_vlseg8ff_nxv1i64_triscv.vector.tuple_nxv8i8_8t: 3487; CHECK: # %bb.0: # %entry 3488; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 3489; CHECK-NEXT: vlseg8e64ff.v v7, (a0) 3490; CHECK-NEXT: csrr a0, vl 3491; CHECK-NEXT: sw a0, 0(a2) 3492; CHECK-NEXT: ret 3493entry: 3494 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) undef, ptr %base, i32 %vl, i32 6) 3495 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 3496 %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) 3497 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 3498 store i32 %3, ptr %outvl 3499 ret <vscale x 1 x i64> %2 3500} 3501 3502define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3503; CHECK-LABEL: test_vlseg8ff_mask_nxv1i64_triscv.vector.tuple_nxv8i8_8t: 3504; CHECK: # %bb.0: # %entry 3505; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 3506; CHECK-NEXT: vmv1r.v v7, v8 3507; CHECK-NEXT: vmv1r.v v8, v9 3508; CHECK-NEXT: vmv1r.v v9, v10 3509; CHECK-NEXT: vmv1r.v v10, v11 3510; CHECK-NEXT: vmv1r.v v11, v12 3511; CHECK-NEXT: vmv1r.v v12, v13 3512; CHECK-NEXT: vmv1r.v v13, v14 3513; CHECK-NEXT: vmv1r.v v14, v15 3514; CHECK-NEXT: vlseg8e64ff.v v7, (a0), v0.t 3515; CHECK-NEXT: csrr a0, vl 3516; CHECK-NEXT: sw a0, 0(a2) 3517; CHECK-NEXT: ret 3518entry: 3519 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 6) 3520 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 3521 %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) 3522 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 3523 store i32 %3, ptr %outvl 3524 ret <vscale x 1 x i64> %2 3525} 3526 3527 3528define <vscale x 1 x half> @test_vlseg2ff_nxv1f16_triscv.vector.tuple_nxv2i8_2t(ptr %base, i32 %vl, ptr %outvl) { 3529; CHECK-LABEL: test_vlseg2ff_nxv1f16_triscv.vector.tuple_nxv2i8_2t: 3530; CHECK: # %bb.0: # %entry 3531; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 3532; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 3533; CHECK-NEXT: csrr a0, vl 3534; CHECK-NEXT: sw a0, 0(a2) 3535; CHECK-NEXT: ret 3536entry: 3537 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 3538 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 0 3539 %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) 3540 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 1 3541 store i32 %3, ptr %outvl 3542 ret <vscale x 1 x half> %2 3543} 3544 3545define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3546; CHECK-LABEL: test_vlseg2ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_2t: 3547; CHECK: # %bb.0: # %entry 3548; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 3549; CHECK-NEXT: vmv1r.v v7, v8 3550; CHECK-NEXT: vmv1r.v v8, v9 3551; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 3552; CHECK-NEXT: csrr a0, vl 3553; CHECK-NEXT: sw a0, 0(a2) 3554; CHECK-NEXT: ret 3555entry: 3556 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 3557 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 0 3558 %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) 3559 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 1 3560 store i32 %3, ptr %outvl 3561 ret <vscale x 1 x half> %2 3562} 3563 3564 3565define <vscale x 2 x half> @test_vlseg2ff_nxv2f16_triscv.vector.tuple_nxv4i8_2t(ptr %base, i32 %vl, ptr %outvl) { 3566; CHECK-LABEL: test_vlseg2ff_nxv2f16_triscv.vector.tuple_nxv4i8_2t: 3567; CHECK: # %bb.0: # %entry 3568; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 3569; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 3570; CHECK-NEXT: csrr a0, vl 3571; CHECK-NEXT: sw a0, 0(a2) 3572; CHECK-NEXT: ret 3573entry: 3574 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 3575 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 3576 %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) 3577 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 3578 store i32 %3, ptr %outvl 3579 ret <vscale x 2 x half> %2 3580} 3581 3582define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 3583; CHECK-LABEL: test_vlseg2ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_2t: 3584; CHECK: # %bb.0: # %entry 3585; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 3586; CHECK-NEXT: vmv1r.v v7, v8 3587; CHECK-NEXT: vmv1r.v v8, v9 3588; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 3589; CHECK-NEXT: csrr a0, vl 3590; CHECK-NEXT: sw a0, 0(a2) 3591; CHECK-NEXT: ret 3592entry: 3593 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 3594 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 3595 %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) 3596 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 3597 store i32 %3, ptr %outvl 3598 ret <vscale x 2 x half> %2 3599} 3600 3601 3602define <vscale x 4 x half> @test_vlseg2ff_nxv4f16_triscv.vector.tuple_nxv8i8_2t(ptr %base, i32 %vl, ptr %outvl) { 3603; CHECK-LABEL: test_vlseg2ff_nxv4f16_triscv.vector.tuple_nxv8i8_2t: 3604; CHECK: # %bb.0: # %entry 3605; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 3606; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 3607; CHECK-NEXT: csrr a0, vl 3608; CHECK-NEXT: sw a0, 0(a2) 3609; CHECK-NEXT: ret 3610entry: 3611 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 3612 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 3613 %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) 3614 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 3615 store i32 %3, ptr %outvl 3616 ret <vscale x 4 x half> %2 3617} 3618 3619define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 3620; CHECK-LABEL: test_vlseg2ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_2t: 3621; CHECK: # %bb.0: # %entry 3622; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 3623; CHECK-NEXT: vmv1r.v v7, v8 3624; CHECK-NEXT: vmv1r.v v8, v9 3625; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 3626; CHECK-NEXT: csrr a0, vl 3627; CHECK-NEXT: sw a0, 0(a2) 3628; CHECK-NEXT: ret 3629entry: 3630 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 3631 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 3632 %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) 3633 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 3634 store i32 %3, ptr %outvl 3635 ret <vscale x 4 x half> %2 3636} 3637 3638 3639define <vscale x 8 x half> @test_vlseg2ff_nxv8f16_triscv.vector.tuple_nxv16i8_2t(ptr %base, i32 %vl, ptr %outvl) { 3640; CHECK-LABEL: test_vlseg2ff_nxv8f16_triscv.vector.tuple_nxv16i8_2t: 3641; CHECK: # %bb.0: # %entry 3642; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 3643; CHECK-NEXT: vlseg2e16ff.v v6, (a0) 3644; CHECK-NEXT: csrr a0, vl 3645; CHECK-NEXT: sw a0, 0(a2) 3646; CHECK-NEXT: ret 3647entry: 3648 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 3649 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 3650 %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) 3651 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 3652 store i32 %3, ptr %outvl 3653 ret <vscale x 8 x half> %2 3654} 3655 3656define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 3657; CHECK-LABEL: test_vlseg2ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_2t: 3658; CHECK: # %bb.0: # %entry 3659; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 3660; CHECK-NEXT: vmv2r.v v6, v8 3661; CHECK-NEXT: vmv2r.v v8, v10 3662; CHECK-NEXT: vlseg2e16ff.v v6, (a0), v0.t 3663; CHECK-NEXT: csrr a0, vl 3664; CHECK-NEXT: sw a0, 0(a2) 3665; CHECK-NEXT: ret 3666entry: 3667 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 3668 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 3669 %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) 3670 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 3671 store i32 %3, ptr %outvl 3672 ret <vscale x 8 x half> %2 3673} 3674 3675 3676define <vscale x 16 x half> @test_vlseg2ff_nxv16f16_triscv.vector.tuple_nxv32i8_2t(ptr %base, i32 %vl, ptr %outvl) { 3677; CHECK-LABEL: test_vlseg2ff_nxv16f16_triscv.vector.tuple_nxv32i8_2t: 3678; CHECK: # %bb.0: # %entry 3679; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma 3680; CHECK-NEXT: vlseg2e16ff.v v4, (a0) 3681; CHECK-NEXT: csrr a0, vl 3682; CHECK-NEXT: sw a0, 0(a2) 3683; CHECK-NEXT: ret 3684entry: 3685 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 3686 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 3687 %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) 3688 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 3689 store i32 %3, ptr %outvl 3690 ret <vscale x 16 x half> %2 3691} 3692 3693define <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, i32 %vl, <vscale x 16 x i1> %mask, ptr %outvl) { 3694; CHECK-LABEL: test_vlseg2ff_mask_nxv16f16_triscv.vector.tuple_nxv32i8_2t: 3695; CHECK: # %bb.0: # %entry 3696; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu 3697; CHECK-NEXT: vmv4r.v v4, v8 3698; CHECK-NEXT: vmv4r.v v8, v12 3699; CHECK-NEXT: vlseg2e16ff.v v4, (a0), v0.t 3700; CHECK-NEXT: csrr a0, vl 3701; CHECK-NEXT: sw a0, 0(a2) 3702; CHECK-NEXT: ret 3703entry: 3704 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 3705 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 3706 %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) 3707 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 3708 store i32 %3, ptr %outvl 3709 ret <vscale x 16 x half> %2 3710} 3711 3712 3713define <vscale x 1 x half> @test_vlseg3ff_nxv1f16_triscv.vector.tuple_nxv2i8_3t(ptr %base, i32 %vl, ptr %outvl) { 3714; CHECK-LABEL: test_vlseg3ff_nxv1f16_triscv.vector.tuple_nxv2i8_3t: 3715; CHECK: # %bb.0: # %entry 3716; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 3717; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 3718; CHECK-NEXT: csrr a0, vl 3719; CHECK-NEXT: sw a0, 0(a2) 3720; CHECK-NEXT: ret 3721entry: 3722 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 3723 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 0 3724 %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) 3725 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 1 3726 store i32 %3, ptr %outvl 3727 ret <vscale x 1 x half> %2 3728} 3729 3730define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3731; CHECK-LABEL: test_vlseg3ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_3t: 3732; CHECK: # %bb.0: # %entry 3733; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 3734; CHECK-NEXT: vmv1r.v v7, v8 3735; CHECK-NEXT: vmv1r.v v8, v9 3736; CHECK-NEXT: vmv1r.v v9, v10 3737; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 3738; CHECK-NEXT: csrr a0, vl 3739; CHECK-NEXT: sw a0, 0(a2) 3740; CHECK-NEXT: ret 3741entry: 3742 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 3743 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 0 3744 %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) 3745 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 1 3746 store i32 %3, ptr %outvl 3747 ret <vscale x 1 x half> %2 3748} 3749 3750 3751define <vscale x 2 x half> @test_vlseg3ff_nxv2f16_triscv.vector.tuple_nxv4i8_3t(ptr %base, i32 %vl, ptr %outvl) { 3752; CHECK-LABEL: test_vlseg3ff_nxv2f16_triscv.vector.tuple_nxv4i8_3t: 3753; CHECK: # %bb.0: # %entry 3754; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 3755; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 3756; CHECK-NEXT: csrr a0, vl 3757; CHECK-NEXT: sw a0, 0(a2) 3758; CHECK-NEXT: ret 3759entry: 3760 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 3761 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 3762 %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) 3763 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 3764 store i32 %3, ptr %outvl 3765 ret <vscale x 2 x half> %2 3766} 3767 3768define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 3769; CHECK-LABEL: test_vlseg3ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_3t: 3770; CHECK: # %bb.0: # %entry 3771; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 3772; CHECK-NEXT: vmv1r.v v7, v8 3773; CHECK-NEXT: vmv1r.v v8, v9 3774; CHECK-NEXT: vmv1r.v v9, v10 3775; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 3776; CHECK-NEXT: csrr a0, vl 3777; CHECK-NEXT: sw a0, 0(a2) 3778; CHECK-NEXT: ret 3779entry: 3780 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 3781 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 3782 %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) 3783 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 3784 store i32 %3, ptr %outvl 3785 ret <vscale x 2 x half> %2 3786} 3787 3788 3789define <vscale x 4 x half> @test_vlseg3ff_nxv4f16_triscv.vector.tuple_nxv8i8_3t(ptr %base, i32 %vl, ptr %outvl) { 3790; CHECK-LABEL: test_vlseg3ff_nxv4f16_triscv.vector.tuple_nxv8i8_3t: 3791; CHECK: # %bb.0: # %entry 3792; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 3793; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 3794; CHECK-NEXT: csrr a0, vl 3795; CHECK-NEXT: sw a0, 0(a2) 3796; CHECK-NEXT: ret 3797entry: 3798 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 3799 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 3800 %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) 3801 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 3802 store i32 %3, ptr %outvl 3803 ret <vscale x 4 x half> %2 3804} 3805 3806define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 3807; CHECK-LABEL: test_vlseg3ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_3t: 3808; CHECK: # %bb.0: # %entry 3809; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 3810; CHECK-NEXT: vmv1r.v v7, v8 3811; CHECK-NEXT: vmv1r.v v8, v9 3812; CHECK-NEXT: vmv1r.v v9, v10 3813; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 3814; CHECK-NEXT: csrr a0, vl 3815; CHECK-NEXT: sw a0, 0(a2) 3816; CHECK-NEXT: ret 3817entry: 3818 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 3819 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 3820 %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) 3821 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 3822 store i32 %3, ptr %outvl 3823 ret <vscale x 4 x half> %2 3824} 3825 3826 3827define <vscale x 8 x half> @test_vlseg3ff_nxv8f16_triscv.vector.tuple_nxv16i8_3t(ptr %base, i32 %vl, ptr %outvl) { 3828; CHECK-LABEL: test_vlseg3ff_nxv8f16_triscv.vector.tuple_nxv16i8_3t: 3829; CHECK: # %bb.0: # %entry 3830; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 3831; CHECK-NEXT: vlseg3e16ff.v v6, (a0) 3832; CHECK-NEXT: csrr a0, vl 3833; CHECK-NEXT: sw a0, 0(a2) 3834; CHECK-NEXT: ret 3835entry: 3836 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 3837 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 3838 %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) 3839 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 3840 store i32 %3, ptr %outvl 3841 ret <vscale x 8 x half> %2 3842} 3843 3844define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 3845; CHECK-LABEL: test_vlseg3ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_3t: 3846; CHECK: # %bb.0: # %entry 3847; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 3848; CHECK-NEXT: vmv2r.v v6, v8 3849; CHECK-NEXT: vmv2r.v v8, v10 3850; CHECK-NEXT: vmv2r.v v10, v12 3851; CHECK-NEXT: vlseg3e16ff.v v6, (a0), v0.t 3852; CHECK-NEXT: csrr a0, vl 3853; CHECK-NEXT: sw a0, 0(a2) 3854; CHECK-NEXT: ret 3855entry: 3856 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 3857 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 3858 %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) 3859 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 3860 store i32 %3, ptr %outvl 3861 ret <vscale x 8 x half> %2 3862} 3863 3864 3865define <vscale x 1 x half> @test_vlseg4ff_nxv1f16_triscv.vector.tuple_nxv2i8_4t(ptr %base, i32 %vl, ptr %outvl) { 3866; CHECK-LABEL: test_vlseg4ff_nxv1f16_triscv.vector.tuple_nxv2i8_4t: 3867; CHECK: # %bb.0: # %entry 3868; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 3869; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 3870; CHECK-NEXT: csrr a0, vl 3871; CHECK-NEXT: sw a0, 0(a2) 3872; CHECK-NEXT: ret 3873entry: 3874 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 3875 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 0 3876 %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) 3877 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 1 3878 store i32 %3, ptr %outvl 3879 ret <vscale x 1 x half> %2 3880} 3881 3882define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 3883; CHECK-LABEL: test_vlseg4ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_4t: 3884; CHECK: # %bb.0: # %entry 3885; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 3886; CHECK-NEXT: vmv1r.v v7, v8 3887; CHECK-NEXT: vmv1r.v v8, v9 3888; CHECK-NEXT: vmv1r.v v9, v10 3889; CHECK-NEXT: vmv1r.v v10, v11 3890; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 3891; CHECK-NEXT: csrr a0, vl 3892; CHECK-NEXT: sw a0, 0(a2) 3893; CHECK-NEXT: ret 3894entry: 3895 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 3896 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 0 3897 %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) 3898 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 1 3899 store i32 %3, ptr %outvl 3900 ret <vscale x 1 x half> %2 3901} 3902 3903 3904define <vscale x 2 x half> @test_vlseg4ff_nxv2f16_triscv.vector.tuple_nxv4i8_4t(ptr %base, i32 %vl, ptr %outvl) { 3905; CHECK-LABEL: test_vlseg4ff_nxv2f16_triscv.vector.tuple_nxv4i8_4t: 3906; CHECK: # %bb.0: # %entry 3907; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 3908; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 3909; CHECK-NEXT: csrr a0, vl 3910; CHECK-NEXT: sw a0, 0(a2) 3911; CHECK-NEXT: ret 3912entry: 3913 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 3914 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 3915 %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) 3916 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 3917 store i32 %3, ptr %outvl 3918 ret <vscale x 2 x half> %2 3919} 3920 3921define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 3922; CHECK-LABEL: test_vlseg4ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_4t: 3923; CHECK: # %bb.0: # %entry 3924; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 3925; CHECK-NEXT: vmv1r.v v7, v8 3926; CHECK-NEXT: vmv1r.v v8, v9 3927; CHECK-NEXT: vmv1r.v v9, v10 3928; CHECK-NEXT: vmv1r.v v10, v11 3929; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 3930; CHECK-NEXT: csrr a0, vl 3931; CHECK-NEXT: sw a0, 0(a2) 3932; CHECK-NEXT: ret 3933entry: 3934 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 3935 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 3936 %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) 3937 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 3938 store i32 %3, ptr %outvl 3939 ret <vscale x 2 x half> %2 3940} 3941 3942 3943define <vscale x 4 x half> @test_vlseg4ff_nxv4f16_triscv.vector.tuple_nxv8i8_4t(ptr %base, i32 %vl, ptr %outvl) { 3944; CHECK-LABEL: test_vlseg4ff_nxv4f16_triscv.vector.tuple_nxv8i8_4t: 3945; CHECK: # %bb.0: # %entry 3946; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 3947; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 3948; CHECK-NEXT: csrr a0, vl 3949; CHECK-NEXT: sw a0, 0(a2) 3950; CHECK-NEXT: ret 3951entry: 3952 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 3953 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 3954 %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) 3955 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 3956 store i32 %3, ptr %outvl 3957 ret <vscale x 4 x half> %2 3958} 3959 3960define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 3961; CHECK-LABEL: test_vlseg4ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_4t: 3962; CHECK: # %bb.0: # %entry 3963; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 3964; CHECK-NEXT: vmv1r.v v7, v8 3965; CHECK-NEXT: vmv1r.v v8, v9 3966; CHECK-NEXT: vmv1r.v v9, v10 3967; CHECK-NEXT: vmv1r.v v10, v11 3968; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 3969; CHECK-NEXT: csrr a0, vl 3970; CHECK-NEXT: sw a0, 0(a2) 3971; CHECK-NEXT: ret 3972entry: 3973 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 3974 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 3975 %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) 3976 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 3977 store i32 %3, ptr %outvl 3978 ret <vscale x 4 x half> %2 3979} 3980 3981 3982define <vscale x 8 x half> @test_vlseg4ff_nxv8f16_triscv.vector.tuple_nxv16i8_4t(ptr %base, i32 %vl, ptr %outvl) { 3983; CHECK-LABEL: test_vlseg4ff_nxv8f16_triscv.vector.tuple_nxv16i8_4t: 3984; CHECK: # %bb.0: # %entry 3985; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 3986; CHECK-NEXT: vlseg4e16ff.v v6, (a0) 3987; CHECK-NEXT: csrr a0, vl 3988; CHECK-NEXT: sw a0, 0(a2) 3989; CHECK-NEXT: ret 3990entry: 3991 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 3992 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 3993 %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) 3994 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 3995 store i32 %3, ptr %outvl 3996 ret <vscale x 8 x half> %2 3997} 3998 3999define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 4000; CHECK-LABEL: test_vlseg4ff_mask_nxv8f16_triscv.vector.tuple_nxv16i8_4t: 4001; CHECK: # %bb.0: # %entry 4002; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 4003; CHECK-NEXT: vmv2r.v v6, v8 4004; CHECK-NEXT: vmv2r.v v8, v10 4005; CHECK-NEXT: vmv2r.v v10, v12 4006; CHECK-NEXT: vmv2r.v v12, v14 4007; CHECK-NEXT: vlseg4e16ff.v v6, (a0), v0.t 4008; CHECK-NEXT: csrr a0, vl 4009; CHECK-NEXT: sw a0, 0(a2) 4010; CHECK-NEXT: ret 4011entry: 4012 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 4013 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 4014 %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) 4015 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 4016 store i32 %3, ptr %outvl 4017 ret <vscale x 8 x half> %2 4018} 4019 4020 4021define <vscale x 1 x half> @test_vlseg5ff_nxv1f16_triscv.vector.tuple_nxv2i8_5t(ptr %base, i32 %vl, ptr %outvl) { 4022; CHECK-LABEL: test_vlseg5ff_nxv1f16_triscv.vector.tuple_nxv2i8_5t: 4023; CHECK: # %bb.0: # %entry 4024; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 4025; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 4026; CHECK-NEXT: csrr a0, vl 4027; CHECK-NEXT: sw a0, 0(a2) 4028; CHECK-NEXT: ret 4029entry: 4030 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 4031 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 0 4032 %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) 4033 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 1 4034 store i32 %3, ptr %outvl 4035 ret <vscale x 1 x half> %2 4036} 4037 4038define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4039; CHECK-LABEL: test_vlseg5ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_5t: 4040; CHECK: # %bb.0: # %entry 4041; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 4042; CHECK-NEXT: vmv1r.v v7, v8 4043; CHECK-NEXT: vmv1r.v v8, v9 4044; CHECK-NEXT: vmv1r.v v9, v10 4045; CHECK-NEXT: vmv1r.v v10, v11 4046; CHECK-NEXT: vmv1r.v v11, v12 4047; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 4048; CHECK-NEXT: csrr a0, vl 4049; CHECK-NEXT: sw a0, 0(a2) 4050; CHECK-NEXT: ret 4051entry: 4052 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 4053 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 0 4054 %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) 4055 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 1 4056 store i32 %3, ptr %outvl 4057 ret <vscale x 1 x half> %2 4058} 4059 4060 4061define <vscale x 2 x half> @test_vlseg5ff_nxv2f16_triscv.vector.tuple_nxv4i8_5t(ptr %base, i32 %vl, ptr %outvl) { 4062; CHECK-LABEL: test_vlseg5ff_nxv2f16_triscv.vector.tuple_nxv4i8_5t: 4063; CHECK: # %bb.0: # %entry 4064; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 4065; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 4066; CHECK-NEXT: csrr a0, vl 4067; CHECK-NEXT: sw a0, 0(a2) 4068; CHECK-NEXT: ret 4069entry: 4070 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 4071 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 4072 %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) 4073 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 4074 store i32 %3, ptr %outvl 4075 ret <vscale x 2 x half> %2 4076} 4077 4078define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 4079; CHECK-LABEL: test_vlseg5ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_5t: 4080; CHECK: # %bb.0: # %entry 4081; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 4082; CHECK-NEXT: vmv1r.v v7, v8 4083; CHECK-NEXT: vmv1r.v v8, v9 4084; CHECK-NEXT: vmv1r.v v9, v10 4085; CHECK-NEXT: vmv1r.v v10, v11 4086; CHECK-NEXT: vmv1r.v v11, v12 4087; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 4088; CHECK-NEXT: csrr a0, vl 4089; CHECK-NEXT: sw a0, 0(a2) 4090; CHECK-NEXT: ret 4091entry: 4092 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 4093 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 4094 %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) 4095 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 4096 store i32 %3, ptr %outvl 4097 ret <vscale x 2 x half> %2 4098} 4099 4100 4101define <vscale x 4 x half> @test_vlseg5ff_nxv4f16_triscv.vector.tuple_nxv8i8_5t(ptr %base, i32 %vl, ptr %outvl) { 4102; CHECK-LABEL: test_vlseg5ff_nxv4f16_triscv.vector.tuple_nxv8i8_5t: 4103; CHECK: # %bb.0: # %entry 4104; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 4105; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 4106; CHECK-NEXT: csrr a0, vl 4107; CHECK-NEXT: sw a0, 0(a2) 4108; CHECK-NEXT: ret 4109entry: 4110 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 4111 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 4112 %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) 4113 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 4114 store i32 %3, ptr %outvl 4115 ret <vscale x 4 x half> %2 4116} 4117 4118define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 4119; CHECK-LABEL: test_vlseg5ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_5t: 4120; CHECK: # %bb.0: # %entry 4121; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 4122; CHECK-NEXT: vmv1r.v v7, v8 4123; CHECK-NEXT: vmv1r.v v8, v9 4124; CHECK-NEXT: vmv1r.v v9, v10 4125; CHECK-NEXT: vmv1r.v v10, v11 4126; CHECK-NEXT: vmv1r.v v11, v12 4127; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 4128; CHECK-NEXT: csrr a0, vl 4129; CHECK-NEXT: sw a0, 0(a2) 4130; CHECK-NEXT: ret 4131entry: 4132 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 4133 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 4134 %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) 4135 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 4136 store i32 %3, ptr %outvl 4137 ret <vscale x 4 x half> %2 4138} 4139 4140 4141define <vscale x 1 x half> @test_vlseg6ff_nxv1f16_triscv.vector.tuple_nxv2i8_6t(ptr %base, i32 %vl, ptr %outvl) { 4142; CHECK-LABEL: test_vlseg6ff_nxv1f16_triscv.vector.tuple_nxv2i8_6t: 4143; CHECK: # %bb.0: # %entry 4144; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 4145; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 4146; CHECK-NEXT: csrr a0, vl 4147; CHECK-NEXT: sw a0, 0(a2) 4148; CHECK-NEXT: ret 4149entry: 4150 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 4151 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 0 4152 %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) 4153 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 1 4154 store i32 %3, ptr %outvl 4155 ret <vscale x 1 x half> %2 4156} 4157 4158define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4159; CHECK-LABEL: test_vlseg6ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_6t: 4160; CHECK: # %bb.0: # %entry 4161; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 4162; CHECK-NEXT: vmv1r.v v7, v8 4163; CHECK-NEXT: vmv1r.v v8, v9 4164; CHECK-NEXT: vmv1r.v v9, v10 4165; CHECK-NEXT: vmv1r.v v10, v11 4166; CHECK-NEXT: vmv1r.v v11, v12 4167; CHECK-NEXT: vmv1r.v v12, v13 4168; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 4169; CHECK-NEXT: csrr a0, vl 4170; CHECK-NEXT: sw a0, 0(a2) 4171; CHECK-NEXT: ret 4172entry: 4173 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 4174 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 0 4175 %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) 4176 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 1 4177 store i32 %3, ptr %outvl 4178 ret <vscale x 1 x half> %2 4179} 4180 4181 4182define <vscale x 2 x half> @test_vlseg6ff_nxv2f16_triscv.vector.tuple_nxv4i8_6t(ptr %base, i32 %vl, ptr %outvl) { 4183; CHECK-LABEL: test_vlseg6ff_nxv2f16_triscv.vector.tuple_nxv4i8_6t: 4184; CHECK: # %bb.0: # %entry 4185; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 4186; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 4187; CHECK-NEXT: csrr a0, vl 4188; CHECK-NEXT: sw a0, 0(a2) 4189; CHECK-NEXT: ret 4190entry: 4191 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 4192 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 4193 %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) 4194 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 4195 store i32 %3, ptr %outvl 4196 ret <vscale x 2 x half> %2 4197} 4198 4199define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 4200; CHECK-LABEL: test_vlseg6ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_6t: 4201; CHECK: # %bb.0: # %entry 4202; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 4203; CHECK-NEXT: vmv1r.v v7, v8 4204; CHECK-NEXT: vmv1r.v v8, v9 4205; CHECK-NEXT: vmv1r.v v9, v10 4206; CHECK-NEXT: vmv1r.v v10, v11 4207; CHECK-NEXT: vmv1r.v v11, v12 4208; CHECK-NEXT: vmv1r.v v12, v13 4209; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 4210; CHECK-NEXT: csrr a0, vl 4211; CHECK-NEXT: sw a0, 0(a2) 4212; CHECK-NEXT: ret 4213entry: 4214 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 4215 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 4216 %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) 4217 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 4218 store i32 %3, ptr %outvl 4219 ret <vscale x 2 x half> %2 4220} 4221 4222 4223define <vscale x 4 x half> @test_vlseg6ff_nxv4f16_triscv.vector.tuple_nxv8i8_6t(ptr %base, i32 %vl, ptr %outvl) { 4224; CHECK-LABEL: test_vlseg6ff_nxv4f16_triscv.vector.tuple_nxv8i8_6t: 4225; CHECK: # %bb.0: # %entry 4226; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 4227; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 4228; CHECK-NEXT: csrr a0, vl 4229; CHECK-NEXT: sw a0, 0(a2) 4230; CHECK-NEXT: ret 4231entry: 4232 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 4233 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 4234 %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) 4235 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 4236 store i32 %3, ptr %outvl 4237 ret <vscale x 4 x half> %2 4238} 4239 4240define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 4241; CHECK-LABEL: test_vlseg6ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_6t: 4242; CHECK: # %bb.0: # %entry 4243; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 4244; CHECK-NEXT: vmv1r.v v7, v8 4245; CHECK-NEXT: vmv1r.v v8, v9 4246; CHECK-NEXT: vmv1r.v v9, v10 4247; CHECK-NEXT: vmv1r.v v10, v11 4248; CHECK-NEXT: vmv1r.v v11, v12 4249; CHECK-NEXT: vmv1r.v v12, v13 4250; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 4251; CHECK-NEXT: csrr a0, vl 4252; CHECK-NEXT: sw a0, 0(a2) 4253; CHECK-NEXT: ret 4254entry: 4255 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 4256 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 4257 %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) 4258 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 4259 store i32 %3, ptr %outvl 4260 ret <vscale x 4 x half> %2 4261} 4262 4263 4264define <vscale x 1 x half> @test_vlseg7ff_nxv1f16_triscv.vector.tuple_nxv2i8_7t(ptr %base, i32 %vl, ptr %outvl) { 4265; CHECK-LABEL: test_vlseg7ff_nxv1f16_triscv.vector.tuple_nxv2i8_7t: 4266; CHECK: # %bb.0: # %entry 4267; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 4268; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 4269; CHECK-NEXT: csrr a0, vl 4270; CHECK-NEXT: sw a0, 0(a2) 4271; CHECK-NEXT: ret 4272entry: 4273 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 4274 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 0 4275 %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) 4276 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 1 4277 store i32 %3, ptr %outvl 4278 ret <vscale x 1 x half> %2 4279} 4280 4281define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4282; CHECK-LABEL: test_vlseg7ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_7t: 4283; CHECK: # %bb.0: # %entry 4284; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 4285; CHECK-NEXT: vmv1r.v v7, v8 4286; CHECK-NEXT: vmv1r.v v8, v9 4287; CHECK-NEXT: vmv1r.v v9, v10 4288; CHECK-NEXT: vmv1r.v v10, v11 4289; CHECK-NEXT: vmv1r.v v11, v12 4290; CHECK-NEXT: vmv1r.v v12, v13 4291; CHECK-NEXT: vmv1r.v v13, v14 4292; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 4293; CHECK-NEXT: csrr a0, vl 4294; CHECK-NEXT: sw a0, 0(a2) 4295; CHECK-NEXT: ret 4296entry: 4297 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 4298 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 0 4299 %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) 4300 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 1 4301 store i32 %3, ptr %outvl 4302 ret <vscale x 1 x half> %2 4303} 4304 4305 4306define <vscale x 2 x half> @test_vlseg7ff_nxv2f16_triscv.vector.tuple_nxv4i8_7t(ptr %base, i32 %vl, ptr %outvl) { 4307; CHECK-LABEL: test_vlseg7ff_nxv2f16_triscv.vector.tuple_nxv4i8_7t: 4308; CHECK: # %bb.0: # %entry 4309; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 4310; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 4311; CHECK-NEXT: csrr a0, vl 4312; CHECK-NEXT: sw a0, 0(a2) 4313; CHECK-NEXT: ret 4314entry: 4315 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 4316 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 4317 %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) 4318 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 4319 store i32 %3, ptr %outvl 4320 ret <vscale x 2 x half> %2 4321} 4322 4323define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 4324; CHECK-LABEL: test_vlseg7ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_7t: 4325; CHECK: # %bb.0: # %entry 4326; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 4327; CHECK-NEXT: vmv1r.v v7, v8 4328; CHECK-NEXT: vmv1r.v v8, v9 4329; CHECK-NEXT: vmv1r.v v9, v10 4330; CHECK-NEXT: vmv1r.v v10, v11 4331; CHECK-NEXT: vmv1r.v v11, v12 4332; CHECK-NEXT: vmv1r.v v12, v13 4333; CHECK-NEXT: vmv1r.v v13, v14 4334; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 4335; CHECK-NEXT: csrr a0, vl 4336; CHECK-NEXT: sw a0, 0(a2) 4337; CHECK-NEXT: ret 4338entry: 4339 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 4340 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 4341 %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) 4342 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 4343 store i32 %3, ptr %outvl 4344 ret <vscale x 2 x half> %2 4345} 4346 4347 4348define <vscale x 4 x half> @test_vlseg7ff_nxv4f16_triscv.vector.tuple_nxv8i8_7t(ptr %base, i32 %vl, ptr %outvl) { 4349; CHECK-LABEL: test_vlseg7ff_nxv4f16_triscv.vector.tuple_nxv8i8_7t: 4350; CHECK: # %bb.0: # %entry 4351; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 4352; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 4353; CHECK-NEXT: csrr a0, vl 4354; CHECK-NEXT: sw a0, 0(a2) 4355; CHECK-NEXT: ret 4356entry: 4357 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 4358 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 4359 %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) 4360 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 4361 store i32 %3, ptr %outvl 4362 ret <vscale x 4 x half> %2 4363} 4364 4365define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 4366; CHECK-LABEL: test_vlseg7ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_7t: 4367; CHECK: # %bb.0: # %entry 4368; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 4369; CHECK-NEXT: vmv1r.v v7, v8 4370; CHECK-NEXT: vmv1r.v v8, v9 4371; CHECK-NEXT: vmv1r.v v9, v10 4372; CHECK-NEXT: vmv1r.v v10, v11 4373; CHECK-NEXT: vmv1r.v v11, v12 4374; CHECK-NEXT: vmv1r.v v12, v13 4375; CHECK-NEXT: vmv1r.v v13, v14 4376; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 4377; CHECK-NEXT: csrr a0, vl 4378; CHECK-NEXT: sw a0, 0(a2) 4379; CHECK-NEXT: ret 4380entry: 4381 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 4382 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 4383 %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) 4384 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 4385 store i32 %3, ptr %outvl 4386 ret <vscale x 4 x half> %2 4387} 4388 4389 4390define <vscale x 1 x half> @test_vlseg8ff_nxv1f16_triscv.vector.tuple_nxv2i8_8t(ptr %base, i32 %vl, ptr %outvl) { 4391; CHECK-LABEL: test_vlseg8ff_nxv1f16_triscv.vector.tuple_nxv2i8_8t: 4392; CHECK: # %bb.0: # %entry 4393; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 4394; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 4395; CHECK-NEXT: csrr a0, vl 4396; CHECK-NEXT: sw a0, 0(a2) 4397; CHECK-NEXT: ret 4398entry: 4399 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 4400 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 0 4401 %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) 4402 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 1 4403 store i32 %3, ptr %outvl 4404 ret <vscale x 1 x half> %2 4405} 4406 4407define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4408; CHECK-LABEL: test_vlseg8ff_mask_nxv1f16_triscv.vector.tuple_nxv2i8_8t: 4409; CHECK: # %bb.0: # %entry 4410; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 4411; CHECK-NEXT: vmv1r.v v7, v8 4412; CHECK-NEXT: vmv1r.v v8, v9 4413; CHECK-NEXT: vmv1r.v v9, v10 4414; CHECK-NEXT: vmv1r.v v10, v11 4415; CHECK-NEXT: vmv1r.v v11, v12 4416; CHECK-NEXT: vmv1r.v v12, v13 4417; CHECK-NEXT: vmv1r.v v13, v14 4418; CHECK-NEXT: vmv1r.v v14, v15 4419; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 4420; CHECK-NEXT: csrr a0, vl 4421; CHECK-NEXT: sw a0, 0(a2) 4422; CHECK-NEXT: ret 4423entry: 4424 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 4425 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 0 4426 %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) 4427 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 1 4428 store i32 %3, ptr %outvl 4429 ret <vscale x 1 x half> %2 4430} 4431 4432 4433define <vscale x 2 x half> @test_vlseg8ff_nxv2f16_triscv.vector.tuple_nxv4i8_8t(ptr %base, i32 %vl, ptr %outvl) { 4434; CHECK-LABEL: test_vlseg8ff_nxv2f16_triscv.vector.tuple_nxv4i8_8t: 4435; CHECK: # %bb.0: # %entry 4436; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 4437; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 4438; CHECK-NEXT: csrr a0, vl 4439; CHECK-NEXT: sw a0, 0(a2) 4440; CHECK-NEXT: ret 4441entry: 4442 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 4443 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 4444 %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) 4445 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 4446 store i32 %3, ptr %outvl 4447 ret <vscale x 2 x half> %2 4448} 4449 4450define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 4451; CHECK-LABEL: test_vlseg8ff_mask_nxv2f16_triscv.vector.tuple_nxv4i8_8t: 4452; CHECK: # %bb.0: # %entry 4453; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 4454; CHECK-NEXT: vmv1r.v v7, v8 4455; CHECK-NEXT: vmv1r.v v8, v9 4456; CHECK-NEXT: vmv1r.v v9, v10 4457; CHECK-NEXT: vmv1r.v v10, v11 4458; CHECK-NEXT: vmv1r.v v11, v12 4459; CHECK-NEXT: vmv1r.v v12, v13 4460; CHECK-NEXT: vmv1r.v v13, v14 4461; CHECK-NEXT: vmv1r.v v14, v15 4462; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 4463; CHECK-NEXT: csrr a0, vl 4464; CHECK-NEXT: sw a0, 0(a2) 4465; CHECK-NEXT: ret 4466entry: 4467 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 4468 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 4469 %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) 4470 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 4471 store i32 %3, ptr %outvl 4472 ret <vscale x 2 x half> %2 4473} 4474 4475 4476define <vscale x 4 x half> @test_vlseg8ff_nxv4f16_triscv.vector.tuple_nxv8i8_8t(ptr %base, i32 %vl, ptr %outvl) { 4477; CHECK-LABEL: test_vlseg8ff_nxv4f16_triscv.vector.tuple_nxv8i8_8t: 4478; CHECK: # %bb.0: # %entry 4479; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 4480; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 4481; CHECK-NEXT: csrr a0, vl 4482; CHECK-NEXT: sw a0, 0(a2) 4483; CHECK-NEXT: ret 4484entry: 4485 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 4486 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 4487 %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) 4488 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 4489 store i32 %3, ptr %outvl 4490 ret <vscale x 4 x half> %2 4491} 4492 4493define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 4494; CHECK-LABEL: test_vlseg8ff_mask_nxv4f16_triscv.vector.tuple_nxv8i8_8t: 4495; CHECK: # %bb.0: # %entry 4496; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 4497; CHECK-NEXT: vmv1r.v v7, v8 4498; CHECK-NEXT: vmv1r.v v8, v9 4499; CHECK-NEXT: vmv1r.v v9, v10 4500; CHECK-NEXT: vmv1r.v v10, v11 4501; CHECK-NEXT: vmv1r.v v11, v12 4502; CHECK-NEXT: vmv1r.v v12, v13 4503; CHECK-NEXT: vmv1r.v v13, v14 4504; CHECK-NEXT: vmv1r.v v14, v15 4505; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 4506; CHECK-NEXT: csrr a0, vl 4507; CHECK-NEXT: sw a0, 0(a2) 4508; CHECK-NEXT: ret 4509entry: 4510 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 4511 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 4512 %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) 4513 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 4514 store i32 %3, ptr %outvl 4515 ret <vscale x 4 x half> %2 4516} 4517 4518 4519define <vscale x 1 x float> @test_vlseg2ff_nxv1f32_triscv.vector.tuple_nxv4i8_2t(ptr %base, i32 %vl, ptr %outvl) { 4520; CHECK-LABEL: test_vlseg2ff_nxv1f32_triscv.vector.tuple_nxv4i8_2t: 4521; CHECK: # %bb.0: # %entry 4522; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 4523; CHECK-NEXT: vlseg2e32ff.v v7, (a0) 4524; CHECK-NEXT: csrr a0, vl 4525; CHECK-NEXT: sw a0, 0(a2) 4526; CHECK-NEXT: ret 4527entry: 4528 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) undef, ptr %base, i32 %vl, i32 5) 4529 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 4530 %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) 4531 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 4532 store i32 %3, ptr %outvl 4533 ret <vscale x 1 x float> %2 4534} 4535 4536define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4537; CHECK-LABEL: test_vlseg2ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_2t: 4538; CHECK: # %bb.0: # %entry 4539; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 4540; CHECK-NEXT: vmv1r.v v7, v8 4541; CHECK-NEXT: vmv1r.v v8, v9 4542; CHECK-NEXT: vlseg2e32ff.v v7, (a0), v0.t 4543; CHECK-NEXT: csrr a0, vl 4544; CHECK-NEXT: sw a0, 0(a2) 4545; CHECK-NEXT: ret 4546entry: 4547 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 5) 4548 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 4549 %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) 4550 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 4551 store i32 %3, ptr %outvl 4552 ret <vscale x 1 x float> %2 4553} 4554 4555 4556define <vscale x 2 x float> @test_vlseg2ff_nxv2f32_triscv.vector.tuple_nxv8i8_2t(ptr %base, i32 %vl, ptr %outvl) { 4557; CHECK-LABEL: test_vlseg2ff_nxv2f32_triscv.vector.tuple_nxv8i8_2t: 4558; CHECK: # %bb.0: # %entry 4559; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 4560; CHECK-NEXT: vlseg2e32ff.v v7, (a0) 4561; CHECK-NEXT: csrr a0, vl 4562; CHECK-NEXT: sw a0, 0(a2) 4563; CHECK-NEXT: ret 4564entry: 4565 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) undef, ptr %base, i32 %vl, i32 5) 4566 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 4567 %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) 4568 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 4569 store i32 %3, ptr %outvl 4570 ret <vscale x 2 x float> %2 4571} 4572 4573define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 4574; CHECK-LABEL: test_vlseg2ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_2t: 4575; CHECK: # %bb.0: # %entry 4576; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 4577; CHECK-NEXT: vmv1r.v v7, v8 4578; CHECK-NEXT: vmv1r.v v8, v9 4579; CHECK-NEXT: vlseg2e32ff.v v7, (a0), v0.t 4580; CHECK-NEXT: csrr a0, vl 4581; CHECK-NEXT: sw a0, 0(a2) 4582; CHECK-NEXT: ret 4583entry: 4584 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 5) 4585 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 4586 %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) 4587 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 4588 store i32 %3, ptr %outvl 4589 ret <vscale x 2 x float> %2 4590} 4591 4592 4593define <vscale x 4 x float> @test_vlseg2ff_nxv4f32_triscv.vector.tuple_nxv16i8_2t(ptr %base, i32 %vl, ptr %outvl) { 4594; CHECK-LABEL: test_vlseg2ff_nxv4f32_triscv.vector.tuple_nxv16i8_2t: 4595; CHECK: # %bb.0: # %entry 4596; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 4597; CHECK-NEXT: vlseg2e32ff.v v6, (a0) 4598; CHECK-NEXT: csrr a0, vl 4599; CHECK-NEXT: sw a0, 0(a2) 4600; CHECK-NEXT: ret 4601entry: 4602 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) undef, ptr %base, i32 %vl, i32 5) 4603 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 4604 %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) 4605 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 4606 store i32 %3, ptr %outvl 4607 ret <vscale x 4 x float> %2 4608} 4609 4610define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 4611; CHECK-LABEL: test_vlseg2ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_2t: 4612; CHECK: # %bb.0: # %entry 4613; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu 4614; CHECK-NEXT: vmv2r.v v6, v8 4615; CHECK-NEXT: vmv2r.v v8, v10 4616; CHECK-NEXT: vlseg2e32ff.v v6, (a0), v0.t 4617; CHECK-NEXT: csrr a0, vl 4618; CHECK-NEXT: sw a0, 0(a2) 4619; CHECK-NEXT: ret 4620entry: 4621 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 5) 4622 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 4623 %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) 4624 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 4625 store i32 %3, ptr %outvl 4626 ret <vscale x 4 x float> %2 4627} 4628 4629 4630define <vscale x 8 x float> @test_vlseg2ff_nxv8f32_triscv.vector.tuple_nxv32i8_2t(ptr %base, i32 %vl, ptr %outvl) { 4631; CHECK-LABEL: test_vlseg2ff_nxv8f32_triscv.vector.tuple_nxv32i8_2t: 4632; CHECK: # %bb.0: # %entry 4633; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 4634; CHECK-NEXT: vlseg2e32ff.v v4, (a0) 4635; CHECK-NEXT: csrr a0, vl 4636; CHECK-NEXT: sw a0, 0(a2) 4637; CHECK-NEXT: ret 4638entry: 4639 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) undef, ptr %base, i32 %vl, i32 5) 4640 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 4641 %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) 4642 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 4643 store i32 %3, ptr %outvl 4644 ret <vscale x 8 x float> %2 4645} 4646 4647define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 4648; CHECK-LABEL: test_vlseg2ff_mask_nxv8f32_triscv.vector.tuple_nxv32i8_2t: 4649; CHECK: # %bb.0: # %entry 4650; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, mu 4651; CHECK-NEXT: vmv4r.v v4, v8 4652; CHECK-NEXT: vmv4r.v v8, v12 4653; CHECK-NEXT: vlseg2e32ff.v v4, (a0), v0.t 4654; CHECK-NEXT: csrr a0, vl 4655; CHECK-NEXT: sw a0, 0(a2) 4656; CHECK-NEXT: ret 4657entry: 4658 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 5) 4659 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 4660 %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) 4661 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 4662 store i32 %3, ptr %outvl 4663 ret <vscale x 8 x float> %2 4664} 4665 4666 4667define <vscale x 1 x float> @test_vlseg3ff_nxv1f32_triscv.vector.tuple_nxv4i8_3t(ptr %base, i32 %vl, ptr %outvl) { 4668; CHECK-LABEL: test_vlseg3ff_nxv1f32_triscv.vector.tuple_nxv4i8_3t: 4669; CHECK: # %bb.0: # %entry 4670; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 4671; CHECK-NEXT: vlseg3e32ff.v v7, (a0) 4672; CHECK-NEXT: csrr a0, vl 4673; CHECK-NEXT: sw a0, 0(a2) 4674; CHECK-NEXT: ret 4675entry: 4676 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) undef, ptr %base, i32 %vl, i32 5) 4677 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 4678 %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) 4679 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 4680 store i32 %3, ptr %outvl 4681 ret <vscale x 1 x float> %2 4682} 4683 4684define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4685; CHECK-LABEL: test_vlseg3ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_3t: 4686; CHECK: # %bb.0: # %entry 4687; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 4688; CHECK-NEXT: vmv1r.v v7, v8 4689; CHECK-NEXT: vmv1r.v v8, v9 4690; CHECK-NEXT: vmv1r.v v9, v10 4691; CHECK-NEXT: vlseg3e32ff.v v7, (a0), v0.t 4692; CHECK-NEXT: csrr a0, vl 4693; CHECK-NEXT: sw a0, 0(a2) 4694; CHECK-NEXT: ret 4695entry: 4696 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 5) 4697 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 4698 %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) 4699 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 4700 store i32 %3, ptr %outvl 4701 ret <vscale x 1 x float> %2 4702} 4703 4704 4705define <vscale x 2 x float> @test_vlseg3ff_nxv2f32_triscv.vector.tuple_nxv8i8_3t(ptr %base, i32 %vl, ptr %outvl) { 4706; CHECK-LABEL: test_vlseg3ff_nxv2f32_triscv.vector.tuple_nxv8i8_3t: 4707; CHECK: # %bb.0: # %entry 4708; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 4709; CHECK-NEXT: vlseg3e32ff.v v7, (a0) 4710; CHECK-NEXT: csrr a0, vl 4711; CHECK-NEXT: sw a0, 0(a2) 4712; CHECK-NEXT: ret 4713entry: 4714 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) undef, ptr %base, i32 %vl, i32 5) 4715 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 4716 %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) 4717 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 4718 store i32 %3, ptr %outvl 4719 ret <vscale x 2 x float> %2 4720} 4721 4722define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 4723; CHECK-LABEL: test_vlseg3ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_3t: 4724; CHECK: # %bb.0: # %entry 4725; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 4726; CHECK-NEXT: vmv1r.v v7, v8 4727; CHECK-NEXT: vmv1r.v v8, v9 4728; CHECK-NEXT: vmv1r.v v9, v10 4729; CHECK-NEXT: vlseg3e32ff.v v7, (a0), v0.t 4730; CHECK-NEXT: csrr a0, vl 4731; CHECK-NEXT: sw a0, 0(a2) 4732; CHECK-NEXT: ret 4733entry: 4734 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 5) 4735 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 4736 %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) 4737 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 4738 store i32 %3, ptr %outvl 4739 ret <vscale x 2 x float> %2 4740} 4741 4742 4743define <vscale x 4 x float> @test_vlseg3ff_nxv4f32_triscv.vector.tuple_nxv16i8_3t(ptr %base, i32 %vl, ptr %outvl) { 4744; CHECK-LABEL: test_vlseg3ff_nxv4f32_triscv.vector.tuple_nxv16i8_3t: 4745; CHECK: # %bb.0: # %entry 4746; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 4747; CHECK-NEXT: vlseg3e32ff.v v6, (a0) 4748; CHECK-NEXT: csrr a0, vl 4749; CHECK-NEXT: sw a0, 0(a2) 4750; CHECK-NEXT: ret 4751entry: 4752 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) undef, ptr %base, i32 %vl, i32 5) 4753 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 4754 %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) 4755 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 4756 store i32 %3, ptr %outvl 4757 ret <vscale x 4 x float> %2 4758} 4759 4760define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 4761; CHECK-LABEL: test_vlseg3ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_3t: 4762; CHECK: # %bb.0: # %entry 4763; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu 4764; CHECK-NEXT: vmv2r.v v6, v8 4765; CHECK-NEXT: vmv2r.v v8, v10 4766; CHECK-NEXT: vmv2r.v v10, v12 4767; CHECK-NEXT: vlseg3e32ff.v v6, (a0), v0.t 4768; CHECK-NEXT: csrr a0, vl 4769; CHECK-NEXT: sw a0, 0(a2) 4770; CHECK-NEXT: ret 4771entry: 4772 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 5) 4773 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 4774 %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) 4775 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 4776 store i32 %3, ptr %outvl 4777 ret <vscale x 4 x float> %2 4778} 4779 4780 4781define <vscale x 1 x float> @test_vlseg4ff_nxv1f32_triscv.vector.tuple_nxv4i8_4t(ptr %base, i32 %vl, ptr %outvl) { 4782; CHECK-LABEL: test_vlseg4ff_nxv1f32_triscv.vector.tuple_nxv4i8_4t: 4783; CHECK: # %bb.0: # %entry 4784; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 4785; CHECK-NEXT: vlseg4e32ff.v v7, (a0) 4786; CHECK-NEXT: csrr a0, vl 4787; CHECK-NEXT: sw a0, 0(a2) 4788; CHECK-NEXT: ret 4789entry: 4790 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) undef, ptr %base, i32 %vl, i32 5) 4791 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 4792 %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) 4793 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 4794 store i32 %3, ptr %outvl 4795 ret <vscale x 1 x float> %2 4796} 4797 4798define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4799; CHECK-LABEL: test_vlseg4ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_4t: 4800; CHECK: # %bb.0: # %entry 4801; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 4802; CHECK-NEXT: vmv1r.v v7, v8 4803; CHECK-NEXT: vmv1r.v v8, v9 4804; CHECK-NEXT: vmv1r.v v9, v10 4805; CHECK-NEXT: vmv1r.v v10, v11 4806; CHECK-NEXT: vlseg4e32ff.v v7, (a0), v0.t 4807; CHECK-NEXT: csrr a0, vl 4808; CHECK-NEXT: sw a0, 0(a2) 4809; CHECK-NEXT: ret 4810entry: 4811 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 5) 4812 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 4813 %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) 4814 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 4815 store i32 %3, ptr %outvl 4816 ret <vscale x 1 x float> %2 4817} 4818 4819 4820define <vscale x 2 x float> @test_vlseg4ff_nxv2f32_triscv.vector.tuple_nxv8i8_4t(ptr %base, i32 %vl, ptr %outvl) { 4821; CHECK-LABEL: test_vlseg4ff_nxv2f32_triscv.vector.tuple_nxv8i8_4t: 4822; CHECK: # %bb.0: # %entry 4823; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 4824; CHECK-NEXT: vlseg4e32ff.v v7, (a0) 4825; CHECK-NEXT: csrr a0, vl 4826; CHECK-NEXT: sw a0, 0(a2) 4827; CHECK-NEXT: ret 4828entry: 4829 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) undef, ptr %base, i32 %vl, i32 5) 4830 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 4831 %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) 4832 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 4833 store i32 %3, ptr %outvl 4834 ret <vscale x 2 x float> %2 4835} 4836 4837define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 4838; CHECK-LABEL: test_vlseg4ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_4t: 4839; CHECK: # %bb.0: # %entry 4840; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 4841; CHECK-NEXT: vmv1r.v v7, v8 4842; CHECK-NEXT: vmv1r.v v8, v9 4843; CHECK-NEXT: vmv1r.v v9, v10 4844; CHECK-NEXT: vmv1r.v v10, v11 4845; CHECK-NEXT: vlseg4e32ff.v v7, (a0), v0.t 4846; CHECK-NEXT: csrr a0, vl 4847; CHECK-NEXT: sw a0, 0(a2) 4848; CHECK-NEXT: ret 4849entry: 4850 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 5) 4851 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 4852 %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) 4853 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 4854 store i32 %3, ptr %outvl 4855 ret <vscale x 2 x float> %2 4856} 4857 4858 4859define <vscale x 4 x float> @test_vlseg4ff_nxv4f32_triscv.vector.tuple_nxv16i8_4t(ptr %base, i32 %vl, ptr %outvl) { 4860; CHECK-LABEL: test_vlseg4ff_nxv4f32_triscv.vector.tuple_nxv16i8_4t: 4861; CHECK: # %bb.0: # %entry 4862; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 4863; CHECK-NEXT: vlseg4e32ff.v v6, (a0) 4864; CHECK-NEXT: csrr a0, vl 4865; CHECK-NEXT: sw a0, 0(a2) 4866; CHECK-NEXT: ret 4867entry: 4868 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) undef, ptr %base, i32 %vl, i32 5) 4869 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 4870 %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) 4871 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 4872 store i32 %3, ptr %outvl 4873 ret <vscale x 4 x float> %2 4874} 4875 4876define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 4877; CHECK-LABEL: test_vlseg4ff_mask_nxv4f32_triscv.vector.tuple_nxv16i8_4t: 4878; CHECK: # %bb.0: # %entry 4879; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, mu 4880; CHECK-NEXT: vmv2r.v v6, v8 4881; CHECK-NEXT: vmv2r.v v8, v10 4882; CHECK-NEXT: vmv2r.v v10, v12 4883; CHECK-NEXT: vmv2r.v v12, v14 4884; CHECK-NEXT: vlseg4e32ff.v v6, (a0), v0.t 4885; CHECK-NEXT: csrr a0, vl 4886; CHECK-NEXT: sw a0, 0(a2) 4887; CHECK-NEXT: ret 4888entry: 4889 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 5) 4890 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 4891 %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) 4892 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 4893 store i32 %3, ptr %outvl 4894 ret <vscale x 4 x float> %2 4895} 4896 4897 4898define <vscale x 1 x float> @test_vlseg5ff_nxv1f32_triscv.vector.tuple_nxv4i8_5t(ptr %base, i32 %vl, ptr %outvl) { 4899; CHECK-LABEL: test_vlseg5ff_nxv1f32_triscv.vector.tuple_nxv4i8_5t: 4900; CHECK: # %bb.0: # %entry 4901; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 4902; CHECK-NEXT: vlseg5e32ff.v v7, (a0) 4903; CHECK-NEXT: csrr a0, vl 4904; CHECK-NEXT: sw a0, 0(a2) 4905; CHECK-NEXT: ret 4906entry: 4907 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) undef, ptr %base, i32 %vl, i32 5) 4908 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 4909 %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) 4910 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 4911 store i32 %3, ptr %outvl 4912 ret <vscale x 1 x float> %2 4913} 4914 4915define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4916; CHECK-LABEL: test_vlseg5ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_5t: 4917; CHECK: # %bb.0: # %entry 4918; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 4919; CHECK-NEXT: vmv1r.v v7, v8 4920; CHECK-NEXT: vmv1r.v v8, v9 4921; CHECK-NEXT: vmv1r.v v9, v10 4922; CHECK-NEXT: vmv1r.v v10, v11 4923; CHECK-NEXT: vmv1r.v v11, v12 4924; CHECK-NEXT: vlseg5e32ff.v v7, (a0), v0.t 4925; CHECK-NEXT: csrr a0, vl 4926; CHECK-NEXT: sw a0, 0(a2) 4927; CHECK-NEXT: ret 4928entry: 4929 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 5) 4930 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 4931 %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) 4932 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 4933 store i32 %3, ptr %outvl 4934 ret <vscale x 1 x float> %2 4935} 4936 4937 4938define <vscale x 2 x float> @test_vlseg5ff_nxv2f32_triscv.vector.tuple_nxv8i8_5t(ptr %base, i32 %vl, ptr %outvl) { 4939; CHECK-LABEL: test_vlseg5ff_nxv2f32_triscv.vector.tuple_nxv8i8_5t: 4940; CHECK: # %bb.0: # %entry 4941; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 4942; CHECK-NEXT: vlseg5e32ff.v v7, (a0) 4943; CHECK-NEXT: csrr a0, vl 4944; CHECK-NEXT: sw a0, 0(a2) 4945; CHECK-NEXT: ret 4946entry: 4947 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) undef, ptr %base, i32 %vl, i32 5) 4948 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 4949 %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) 4950 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 4951 store i32 %3, ptr %outvl 4952 ret <vscale x 2 x float> %2 4953} 4954 4955define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 4956; CHECK-LABEL: test_vlseg5ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_5t: 4957; CHECK: # %bb.0: # %entry 4958; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 4959; CHECK-NEXT: vmv1r.v v7, v8 4960; CHECK-NEXT: vmv1r.v v8, v9 4961; CHECK-NEXT: vmv1r.v v9, v10 4962; CHECK-NEXT: vmv1r.v v10, v11 4963; CHECK-NEXT: vmv1r.v v11, v12 4964; CHECK-NEXT: vlseg5e32ff.v v7, (a0), v0.t 4965; CHECK-NEXT: csrr a0, vl 4966; CHECK-NEXT: sw a0, 0(a2) 4967; CHECK-NEXT: ret 4968entry: 4969 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 5) 4970 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 4971 %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) 4972 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 4973 store i32 %3, ptr %outvl 4974 ret <vscale x 2 x float> %2 4975} 4976 4977 4978define <vscale x 1 x float> @test_vlseg6ff_nxv1f32_triscv.vector.tuple_nxv4i8_6t(ptr %base, i32 %vl, ptr %outvl) { 4979; CHECK-LABEL: test_vlseg6ff_nxv1f32_triscv.vector.tuple_nxv4i8_6t: 4980; CHECK: # %bb.0: # %entry 4981; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 4982; CHECK-NEXT: vlseg6e32ff.v v7, (a0) 4983; CHECK-NEXT: csrr a0, vl 4984; CHECK-NEXT: sw a0, 0(a2) 4985; CHECK-NEXT: ret 4986entry: 4987 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) undef, ptr %base, i32 %vl, i32 5) 4988 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 4989 %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) 4990 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 4991 store i32 %3, ptr %outvl 4992 ret <vscale x 1 x float> %2 4993} 4994 4995define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 4996; CHECK-LABEL: test_vlseg6ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_6t: 4997; CHECK: # %bb.0: # %entry 4998; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 4999; CHECK-NEXT: vmv1r.v v7, v8 5000; CHECK-NEXT: vmv1r.v v8, v9 5001; CHECK-NEXT: vmv1r.v v9, v10 5002; CHECK-NEXT: vmv1r.v v10, v11 5003; CHECK-NEXT: vmv1r.v v11, v12 5004; CHECK-NEXT: vmv1r.v v12, v13 5005; CHECK-NEXT: vlseg6e32ff.v v7, (a0), v0.t 5006; CHECK-NEXT: csrr a0, vl 5007; CHECK-NEXT: sw a0, 0(a2) 5008; CHECK-NEXT: ret 5009entry: 5010 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 5) 5011 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 5012 %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) 5013 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 5014 store i32 %3, ptr %outvl 5015 ret <vscale x 1 x float> %2 5016} 5017 5018 5019define <vscale x 2 x float> @test_vlseg6ff_nxv2f32_triscv.vector.tuple_nxv8i8_6t(ptr %base, i32 %vl, ptr %outvl) { 5020; CHECK-LABEL: test_vlseg6ff_nxv2f32_triscv.vector.tuple_nxv8i8_6t: 5021; CHECK: # %bb.0: # %entry 5022; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 5023; CHECK-NEXT: vlseg6e32ff.v v7, (a0) 5024; CHECK-NEXT: csrr a0, vl 5025; CHECK-NEXT: sw a0, 0(a2) 5026; CHECK-NEXT: ret 5027entry: 5028 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) undef, ptr %base, i32 %vl, i32 5) 5029 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 5030 %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) 5031 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 5032 store i32 %3, ptr %outvl 5033 ret <vscale x 2 x float> %2 5034} 5035 5036define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 5037; CHECK-LABEL: test_vlseg6ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_6t: 5038; CHECK: # %bb.0: # %entry 5039; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 5040; CHECK-NEXT: vmv1r.v v7, v8 5041; CHECK-NEXT: vmv1r.v v8, v9 5042; CHECK-NEXT: vmv1r.v v9, v10 5043; CHECK-NEXT: vmv1r.v v10, v11 5044; CHECK-NEXT: vmv1r.v v11, v12 5045; CHECK-NEXT: vmv1r.v v12, v13 5046; CHECK-NEXT: vlseg6e32ff.v v7, (a0), v0.t 5047; CHECK-NEXT: csrr a0, vl 5048; CHECK-NEXT: sw a0, 0(a2) 5049; CHECK-NEXT: ret 5050entry: 5051 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 5) 5052 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 5053 %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) 5054 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 5055 store i32 %3, ptr %outvl 5056 ret <vscale x 2 x float> %2 5057} 5058 5059 5060define <vscale x 1 x float> @test_vlseg7ff_nxv1f32_triscv.vector.tuple_nxv4i8_7t(ptr %base, i32 %vl, ptr %outvl) { 5061; CHECK-LABEL: test_vlseg7ff_nxv1f32_triscv.vector.tuple_nxv4i8_7t: 5062; CHECK: # %bb.0: # %entry 5063; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 5064; CHECK-NEXT: vlseg7e32ff.v v7, (a0) 5065; CHECK-NEXT: csrr a0, vl 5066; CHECK-NEXT: sw a0, 0(a2) 5067; CHECK-NEXT: ret 5068entry: 5069 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) undef, ptr %base, i32 %vl, i32 5) 5070 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 5071 %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) 5072 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 5073 store i32 %3, ptr %outvl 5074 ret <vscale x 1 x float> %2 5075} 5076 5077define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5078; CHECK-LABEL: test_vlseg7ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_7t: 5079; CHECK: # %bb.0: # %entry 5080; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 5081; CHECK-NEXT: vmv1r.v v7, v8 5082; CHECK-NEXT: vmv1r.v v8, v9 5083; CHECK-NEXT: vmv1r.v v9, v10 5084; CHECK-NEXT: vmv1r.v v10, v11 5085; CHECK-NEXT: vmv1r.v v11, v12 5086; CHECK-NEXT: vmv1r.v v12, v13 5087; CHECK-NEXT: vmv1r.v v13, v14 5088; CHECK-NEXT: vlseg7e32ff.v v7, (a0), v0.t 5089; CHECK-NEXT: csrr a0, vl 5090; CHECK-NEXT: sw a0, 0(a2) 5091; CHECK-NEXT: ret 5092entry: 5093 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 5) 5094 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 5095 %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) 5096 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 5097 store i32 %3, ptr %outvl 5098 ret <vscale x 1 x float> %2 5099} 5100 5101 5102define <vscale x 2 x float> @test_vlseg7ff_nxv2f32_triscv.vector.tuple_nxv8i8_7t(ptr %base, i32 %vl, ptr %outvl) { 5103; CHECK-LABEL: test_vlseg7ff_nxv2f32_triscv.vector.tuple_nxv8i8_7t: 5104; CHECK: # %bb.0: # %entry 5105; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 5106; CHECK-NEXT: vlseg7e32ff.v v7, (a0) 5107; CHECK-NEXT: csrr a0, vl 5108; CHECK-NEXT: sw a0, 0(a2) 5109; CHECK-NEXT: ret 5110entry: 5111 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) undef, ptr %base, i32 %vl, i32 5) 5112 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 5113 %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) 5114 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 5115 store i32 %3, ptr %outvl 5116 ret <vscale x 2 x float> %2 5117} 5118 5119define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 5120; CHECK-LABEL: test_vlseg7ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_7t: 5121; CHECK: # %bb.0: # %entry 5122; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 5123; CHECK-NEXT: vmv1r.v v7, v8 5124; CHECK-NEXT: vmv1r.v v8, v9 5125; CHECK-NEXT: vmv1r.v v9, v10 5126; CHECK-NEXT: vmv1r.v v10, v11 5127; CHECK-NEXT: vmv1r.v v11, v12 5128; CHECK-NEXT: vmv1r.v v12, v13 5129; CHECK-NEXT: vmv1r.v v13, v14 5130; CHECK-NEXT: vlseg7e32ff.v v7, (a0), v0.t 5131; CHECK-NEXT: csrr a0, vl 5132; CHECK-NEXT: sw a0, 0(a2) 5133; CHECK-NEXT: ret 5134entry: 5135 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 5) 5136 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 5137 %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) 5138 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 5139 store i32 %3, ptr %outvl 5140 ret <vscale x 2 x float> %2 5141} 5142 5143 5144define <vscale x 1 x float> @test_vlseg8ff_nxv1f32_triscv.vector.tuple_nxv4i8_8t(ptr %base, i32 %vl, ptr %outvl) { 5145; CHECK-LABEL: test_vlseg8ff_nxv1f32_triscv.vector.tuple_nxv4i8_8t: 5146; CHECK: # %bb.0: # %entry 5147; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 5148; CHECK-NEXT: vlseg8e32ff.v v7, (a0) 5149; CHECK-NEXT: csrr a0, vl 5150; CHECK-NEXT: sw a0, 0(a2) 5151; CHECK-NEXT: ret 5152entry: 5153 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) undef, ptr %base, i32 %vl, i32 5) 5154 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 5155 %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) 5156 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 5157 store i32 %3, ptr %outvl 5158 ret <vscale x 1 x float> %2 5159} 5160 5161define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5162; CHECK-LABEL: test_vlseg8ff_mask_nxv1f32_triscv.vector.tuple_nxv4i8_8t: 5163; CHECK: # %bb.0: # %entry 5164; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, mu 5165; CHECK-NEXT: vmv1r.v v7, v8 5166; CHECK-NEXT: vmv1r.v v8, v9 5167; CHECK-NEXT: vmv1r.v v9, v10 5168; CHECK-NEXT: vmv1r.v v10, v11 5169; CHECK-NEXT: vmv1r.v v11, v12 5170; CHECK-NEXT: vmv1r.v v12, v13 5171; CHECK-NEXT: vmv1r.v v13, v14 5172; CHECK-NEXT: vmv1r.v v14, v15 5173; CHECK-NEXT: vlseg8e32ff.v v7, (a0), v0.t 5174; CHECK-NEXT: csrr a0, vl 5175; CHECK-NEXT: sw a0, 0(a2) 5176; CHECK-NEXT: ret 5177entry: 5178 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 5) 5179 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 5180 %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) 5181 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 5182 store i32 %3, ptr %outvl 5183 ret <vscale x 1 x float> %2 5184} 5185 5186 5187define <vscale x 2 x float> @test_vlseg8ff_nxv2f32_triscv.vector.tuple_nxv8i8_8t(ptr %base, i32 %vl, ptr %outvl) { 5188; CHECK-LABEL: test_vlseg8ff_nxv2f32_triscv.vector.tuple_nxv8i8_8t: 5189; CHECK: # %bb.0: # %entry 5190; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 5191; CHECK-NEXT: vlseg8e32ff.v v7, (a0) 5192; CHECK-NEXT: csrr a0, vl 5193; CHECK-NEXT: sw a0, 0(a2) 5194; CHECK-NEXT: ret 5195entry: 5196 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) undef, ptr %base, i32 %vl, i32 5) 5197 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 5198 %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) 5199 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 5200 store i32 %3, ptr %outvl 5201 ret <vscale x 2 x float> %2 5202} 5203 5204define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 5205; CHECK-LABEL: test_vlseg8ff_mask_nxv2f32_triscv.vector.tuple_nxv8i8_8t: 5206; CHECK: # %bb.0: # %entry 5207; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, mu 5208; CHECK-NEXT: vmv1r.v v7, v8 5209; CHECK-NEXT: vmv1r.v v8, v9 5210; CHECK-NEXT: vmv1r.v v9, v10 5211; CHECK-NEXT: vmv1r.v v10, v11 5212; CHECK-NEXT: vmv1r.v v11, v12 5213; CHECK-NEXT: vmv1r.v v12, v13 5214; CHECK-NEXT: vmv1r.v v13, v14 5215; CHECK-NEXT: vmv1r.v v14, v15 5216; CHECK-NEXT: vlseg8e32ff.v v7, (a0), v0.t 5217; CHECK-NEXT: csrr a0, vl 5218; CHECK-NEXT: sw a0, 0(a2) 5219; CHECK-NEXT: ret 5220entry: 5221 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 5) 5222 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 5223 %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) 5224 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 5225 store i32 %3, ptr %outvl 5226 ret <vscale x 2 x float> %2 5227} 5228 5229 5230define <vscale x 1 x double> @test_vlseg2ff_nxv1f64_triscv.vector.tuple_nxv8i8_2t(ptr %base, i32 %vl, ptr %outvl) { 5231; CHECK-LABEL: test_vlseg2ff_nxv1f64_triscv.vector.tuple_nxv8i8_2t: 5232; CHECK: # %bb.0: # %entry 5233; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 5234; CHECK-NEXT: vlseg2e64ff.v v7, (a0) 5235; CHECK-NEXT: csrr a0, vl 5236; CHECK-NEXT: sw a0, 0(a2) 5237; CHECK-NEXT: ret 5238entry: 5239 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) undef, ptr %base, i32 %vl, i32 6) 5240 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 5241 %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) 5242 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 5243 store i32 %3, ptr %outvl 5244 ret <vscale x 1 x double> %2 5245} 5246 5247define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5248; CHECK-LABEL: test_vlseg2ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_2t: 5249; CHECK: # %bb.0: # %entry 5250; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 5251; CHECK-NEXT: vmv1r.v v7, v8 5252; CHECK-NEXT: vmv1r.v v8, v9 5253; CHECK-NEXT: vlseg2e64ff.v v7, (a0), v0.t 5254; CHECK-NEXT: csrr a0, vl 5255; CHECK-NEXT: sw a0, 0(a2) 5256; CHECK-NEXT: ret 5257entry: 5258 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 6) 5259 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 5260 %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) 5261 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 5262 store i32 %3, ptr %outvl 5263 ret <vscale x 1 x double> %2 5264} 5265 5266 5267define <vscale x 2 x double> @test_vlseg2ff_nxv2f64_triscv.vector.tuple_nxv16i8_2t(ptr %base, i32 %vl, ptr %outvl) { 5268; CHECK-LABEL: test_vlseg2ff_nxv2f64_triscv.vector.tuple_nxv16i8_2t: 5269; CHECK: # %bb.0: # %entry 5270; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma 5271; CHECK-NEXT: vlseg2e64ff.v v6, (a0) 5272; CHECK-NEXT: csrr a0, vl 5273; CHECK-NEXT: sw a0, 0(a2) 5274; CHECK-NEXT: ret 5275entry: 5276 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) undef, ptr %base, i32 %vl, i32 6) 5277 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 5278 %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) 5279 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 5280 store i32 %3, ptr %outvl 5281 ret <vscale x 2 x double> %2 5282} 5283 5284define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 5285; CHECK-LABEL: test_vlseg2ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_2t: 5286; CHECK: # %bb.0: # %entry 5287; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu 5288; CHECK-NEXT: vmv2r.v v6, v8 5289; CHECK-NEXT: vmv2r.v v8, v10 5290; CHECK-NEXT: vlseg2e64ff.v v6, (a0), v0.t 5291; CHECK-NEXT: csrr a0, vl 5292; CHECK-NEXT: sw a0, 0(a2) 5293; CHECK-NEXT: ret 5294entry: 5295 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 6) 5296 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 5297 %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) 5298 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 5299 store i32 %3, ptr %outvl 5300 ret <vscale x 2 x double> %2 5301} 5302 5303 5304define <vscale x 4 x double> @test_vlseg2ff_nxv4f64_triscv.vector.tuple_nxv32i8_2t(ptr %base, i32 %vl, ptr %outvl) { 5305; CHECK-LABEL: test_vlseg2ff_nxv4f64_triscv.vector.tuple_nxv32i8_2t: 5306; CHECK: # %bb.0: # %entry 5307; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, ma 5308; CHECK-NEXT: vlseg2e64ff.v v4, (a0) 5309; CHECK-NEXT: csrr a0, vl 5310; CHECK-NEXT: sw a0, 0(a2) 5311; CHECK-NEXT: ret 5312entry: 5313 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) undef, ptr %base, i32 %vl, i32 6) 5314 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 5315 %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) 5316 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 5317 store i32 %3, ptr %outvl 5318 ret <vscale x 4 x double> %2 5319} 5320 5321define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 5322; CHECK-LABEL: test_vlseg2ff_mask_nxv4f64_triscv.vector.tuple_nxv32i8_2t: 5323; CHECK: # %bb.0: # %entry 5324; CHECK-NEXT: vsetvli zero, a1, e64, m4, ta, mu 5325; CHECK-NEXT: vmv4r.v v4, v8 5326; CHECK-NEXT: vmv4r.v v8, v12 5327; CHECK-NEXT: vlseg2e64ff.v v4, (a0), v0.t 5328; CHECK-NEXT: csrr a0, vl 5329; CHECK-NEXT: sw a0, 0(a2) 5330; CHECK-NEXT: ret 5331entry: 5332 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 6) 5333 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 5334 %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) 5335 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 5336 store i32 %3, ptr %outvl 5337 ret <vscale x 4 x double> %2 5338} 5339 5340 5341define <vscale x 1 x double> @test_vlseg3ff_nxv1f64_triscv.vector.tuple_nxv8i8_3t(ptr %base, i32 %vl, ptr %outvl) { 5342; CHECK-LABEL: test_vlseg3ff_nxv1f64_triscv.vector.tuple_nxv8i8_3t: 5343; CHECK: # %bb.0: # %entry 5344; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 5345; CHECK-NEXT: vlseg3e64ff.v v7, (a0) 5346; CHECK-NEXT: csrr a0, vl 5347; CHECK-NEXT: sw a0, 0(a2) 5348; CHECK-NEXT: ret 5349entry: 5350 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) undef, ptr %base, i32 %vl, i32 6) 5351 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 5352 %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) 5353 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 5354 store i32 %3, ptr %outvl 5355 ret <vscale x 1 x double> %2 5356} 5357 5358define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5359; CHECK-LABEL: test_vlseg3ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_3t: 5360; CHECK: # %bb.0: # %entry 5361; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 5362; CHECK-NEXT: vmv1r.v v7, v8 5363; CHECK-NEXT: vmv1r.v v8, v9 5364; CHECK-NEXT: vmv1r.v v9, v10 5365; CHECK-NEXT: vlseg3e64ff.v v7, (a0), v0.t 5366; CHECK-NEXT: csrr a0, vl 5367; CHECK-NEXT: sw a0, 0(a2) 5368; CHECK-NEXT: ret 5369entry: 5370 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 6) 5371 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 5372 %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) 5373 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 5374 store i32 %3, ptr %outvl 5375 ret <vscale x 1 x double> %2 5376} 5377 5378 5379define <vscale x 2 x double> @test_vlseg3ff_nxv2f64_triscv.vector.tuple_nxv16i8_3t(ptr %base, i32 %vl, ptr %outvl) { 5380; CHECK-LABEL: test_vlseg3ff_nxv2f64_triscv.vector.tuple_nxv16i8_3t: 5381; CHECK: # %bb.0: # %entry 5382; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma 5383; CHECK-NEXT: vlseg3e64ff.v v6, (a0) 5384; CHECK-NEXT: csrr a0, vl 5385; CHECK-NEXT: sw a0, 0(a2) 5386; CHECK-NEXT: ret 5387entry: 5388 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) undef, ptr %base, i32 %vl, i32 6) 5389 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 5390 %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) 5391 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 5392 store i32 %3, ptr %outvl 5393 ret <vscale x 2 x double> %2 5394} 5395 5396define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 5397; CHECK-LABEL: test_vlseg3ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_3t: 5398; CHECK: # %bb.0: # %entry 5399; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu 5400; CHECK-NEXT: vmv2r.v v6, v8 5401; CHECK-NEXT: vmv2r.v v8, v10 5402; CHECK-NEXT: vmv2r.v v10, v12 5403; CHECK-NEXT: vlseg3e64ff.v v6, (a0), v0.t 5404; CHECK-NEXT: csrr a0, vl 5405; CHECK-NEXT: sw a0, 0(a2) 5406; CHECK-NEXT: ret 5407entry: 5408 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 6) 5409 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 5410 %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) 5411 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 5412 store i32 %3, ptr %outvl 5413 ret <vscale x 2 x double> %2 5414} 5415 5416 5417define <vscale x 1 x double> @test_vlseg4ff_nxv1f64_triscv.vector.tuple_nxv8i8_4t(ptr %base, i32 %vl, ptr %outvl) { 5418; CHECK-LABEL: test_vlseg4ff_nxv1f64_triscv.vector.tuple_nxv8i8_4t: 5419; CHECK: # %bb.0: # %entry 5420; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 5421; CHECK-NEXT: vlseg4e64ff.v v7, (a0) 5422; CHECK-NEXT: csrr a0, vl 5423; CHECK-NEXT: sw a0, 0(a2) 5424; CHECK-NEXT: ret 5425entry: 5426 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) undef, ptr %base, i32 %vl, i32 6) 5427 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 5428 %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) 5429 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 5430 store i32 %3, ptr %outvl 5431 ret <vscale x 1 x double> %2 5432} 5433 5434define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5435; CHECK-LABEL: test_vlseg4ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_4t: 5436; CHECK: # %bb.0: # %entry 5437; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 5438; CHECK-NEXT: vmv1r.v v7, v8 5439; CHECK-NEXT: vmv1r.v v8, v9 5440; CHECK-NEXT: vmv1r.v v9, v10 5441; CHECK-NEXT: vmv1r.v v10, v11 5442; CHECK-NEXT: vlseg4e64ff.v v7, (a0), v0.t 5443; CHECK-NEXT: csrr a0, vl 5444; CHECK-NEXT: sw a0, 0(a2) 5445; CHECK-NEXT: ret 5446entry: 5447 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 6) 5448 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 5449 %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) 5450 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 5451 store i32 %3, ptr %outvl 5452 ret <vscale x 1 x double> %2 5453} 5454 5455 5456define <vscale x 2 x double> @test_vlseg4ff_nxv2f64_triscv.vector.tuple_nxv16i8_4t(ptr %base, i32 %vl, ptr %outvl) { 5457; CHECK-LABEL: test_vlseg4ff_nxv2f64_triscv.vector.tuple_nxv16i8_4t: 5458; CHECK: # %bb.0: # %entry 5459; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, ma 5460; CHECK-NEXT: vlseg4e64ff.v v6, (a0) 5461; CHECK-NEXT: csrr a0, vl 5462; CHECK-NEXT: sw a0, 0(a2) 5463; CHECK-NEXT: ret 5464entry: 5465 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) undef, ptr %base, i32 %vl, i32 6) 5466 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 5467 %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) 5468 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 5469 store i32 %3, ptr %outvl 5470 ret <vscale x 2 x double> %2 5471} 5472 5473define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 5474; CHECK-LABEL: test_vlseg4ff_mask_nxv2f64_triscv.vector.tuple_nxv16i8_4t: 5475; CHECK: # %bb.0: # %entry 5476; CHECK-NEXT: vsetvli zero, a1, e64, m2, ta, mu 5477; CHECK-NEXT: vmv2r.v v6, v8 5478; CHECK-NEXT: vmv2r.v v8, v10 5479; CHECK-NEXT: vmv2r.v v10, v12 5480; CHECK-NEXT: vmv2r.v v12, v14 5481; CHECK-NEXT: vlseg4e64ff.v v6, (a0), v0.t 5482; CHECK-NEXT: csrr a0, vl 5483; CHECK-NEXT: sw a0, 0(a2) 5484; CHECK-NEXT: ret 5485entry: 5486 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 6) 5487 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 5488 %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) 5489 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 5490 store i32 %3, ptr %outvl 5491 ret <vscale x 2 x double> %2 5492} 5493 5494 5495define <vscale x 1 x double> @test_vlseg5ff_nxv1f64_triscv.vector.tuple_nxv8i8_5t(ptr %base, i32 %vl, ptr %outvl) { 5496; CHECK-LABEL: test_vlseg5ff_nxv1f64_triscv.vector.tuple_nxv8i8_5t: 5497; CHECK: # %bb.0: # %entry 5498; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 5499; CHECK-NEXT: vlseg5e64ff.v v7, (a0) 5500; CHECK-NEXT: csrr a0, vl 5501; CHECK-NEXT: sw a0, 0(a2) 5502; CHECK-NEXT: ret 5503entry: 5504 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) undef, ptr %base, i32 %vl, i32 6) 5505 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 5506 %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) 5507 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 5508 store i32 %3, ptr %outvl 5509 ret <vscale x 1 x double> %2 5510} 5511 5512define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5513; CHECK-LABEL: test_vlseg5ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_5t: 5514; CHECK: # %bb.0: # %entry 5515; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 5516; CHECK-NEXT: vmv1r.v v7, v8 5517; CHECK-NEXT: vmv1r.v v8, v9 5518; CHECK-NEXT: vmv1r.v v9, v10 5519; CHECK-NEXT: vmv1r.v v10, v11 5520; CHECK-NEXT: vmv1r.v v11, v12 5521; CHECK-NEXT: vlseg5e64ff.v v7, (a0), v0.t 5522; CHECK-NEXT: csrr a0, vl 5523; CHECK-NEXT: sw a0, 0(a2) 5524; CHECK-NEXT: ret 5525entry: 5526 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 6) 5527 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 5528 %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) 5529 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 5530 store i32 %3, ptr %outvl 5531 ret <vscale x 1 x double> %2 5532} 5533 5534 5535define <vscale x 1 x double> @test_vlseg6ff_nxv1f64_triscv.vector.tuple_nxv8i8_6t(ptr %base, i32 %vl, ptr %outvl) { 5536; CHECK-LABEL: test_vlseg6ff_nxv1f64_triscv.vector.tuple_nxv8i8_6t: 5537; CHECK: # %bb.0: # %entry 5538; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 5539; CHECK-NEXT: vlseg6e64ff.v v7, (a0) 5540; CHECK-NEXT: csrr a0, vl 5541; CHECK-NEXT: sw a0, 0(a2) 5542; CHECK-NEXT: ret 5543entry: 5544 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) undef, ptr %base, i32 %vl, i32 6) 5545 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 5546 %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) 5547 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 5548 store i32 %3, ptr %outvl 5549 ret <vscale x 1 x double> %2 5550} 5551 5552define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5553; CHECK-LABEL: test_vlseg6ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_6t: 5554; CHECK: # %bb.0: # %entry 5555; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 5556; CHECK-NEXT: vmv1r.v v7, v8 5557; CHECK-NEXT: vmv1r.v v8, v9 5558; CHECK-NEXT: vmv1r.v v9, v10 5559; CHECK-NEXT: vmv1r.v v10, v11 5560; CHECK-NEXT: vmv1r.v v11, v12 5561; CHECK-NEXT: vmv1r.v v12, v13 5562; CHECK-NEXT: vlseg6e64ff.v v7, (a0), v0.t 5563; CHECK-NEXT: csrr a0, vl 5564; CHECK-NEXT: sw a0, 0(a2) 5565; CHECK-NEXT: ret 5566entry: 5567 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 6) 5568 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 5569 %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) 5570 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 5571 store i32 %3, ptr %outvl 5572 ret <vscale x 1 x double> %2 5573} 5574 5575 5576define <vscale x 1 x double> @test_vlseg7ff_nxv1f64_triscv.vector.tuple_nxv8i8_7t(ptr %base, i32 %vl, ptr %outvl) { 5577; CHECK-LABEL: test_vlseg7ff_nxv1f64_triscv.vector.tuple_nxv8i8_7t: 5578; CHECK: # %bb.0: # %entry 5579; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 5580; CHECK-NEXT: vlseg7e64ff.v v7, (a0) 5581; CHECK-NEXT: csrr a0, vl 5582; CHECK-NEXT: sw a0, 0(a2) 5583; CHECK-NEXT: ret 5584entry: 5585 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) undef, ptr %base, i32 %vl, i32 6) 5586 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 5587 %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) 5588 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 5589 store i32 %3, ptr %outvl 5590 ret <vscale x 1 x double> %2 5591} 5592 5593define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5594; CHECK-LABEL: test_vlseg7ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_7t: 5595; CHECK: # %bb.0: # %entry 5596; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 5597; CHECK-NEXT: vmv1r.v v7, v8 5598; CHECK-NEXT: vmv1r.v v8, v9 5599; CHECK-NEXT: vmv1r.v v9, v10 5600; CHECK-NEXT: vmv1r.v v10, v11 5601; CHECK-NEXT: vmv1r.v v11, v12 5602; CHECK-NEXT: vmv1r.v v12, v13 5603; CHECK-NEXT: vmv1r.v v13, v14 5604; CHECK-NEXT: vlseg7e64ff.v v7, (a0), v0.t 5605; CHECK-NEXT: csrr a0, vl 5606; CHECK-NEXT: sw a0, 0(a2) 5607; CHECK-NEXT: ret 5608entry: 5609 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 6) 5610 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 5611 %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) 5612 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 5613 store i32 %3, ptr %outvl 5614 ret <vscale x 1 x double> %2 5615} 5616 5617 5618define <vscale x 1 x double> @test_vlseg8ff_nxv1f64_triscv.vector.tuple_nxv8i8_8t(ptr %base, i32 %vl, ptr %outvl) { 5619; CHECK-LABEL: test_vlseg8ff_nxv1f64_triscv.vector.tuple_nxv8i8_8t: 5620; CHECK: # %bb.0: # %entry 5621; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, ma 5622; CHECK-NEXT: vlseg8e64ff.v v7, (a0) 5623; CHECK-NEXT: csrr a0, vl 5624; CHECK-NEXT: sw a0, 0(a2) 5625; CHECK-NEXT: ret 5626entry: 5627 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) undef, ptr %base, i32 %vl, i32 6) 5628 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 5629 %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) 5630 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 5631 store i32 %3, ptr %outvl 5632 ret <vscale x 1 x double> %2 5633} 5634 5635define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5636; CHECK-LABEL: test_vlseg8ff_mask_nxv1f64_triscv.vector.tuple_nxv8i8_8t: 5637; CHECK: # %bb.0: # %entry 5638; CHECK-NEXT: vsetvli zero, a1, e64, m1, ta, mu 5639; CHECK-NEXT: vmv1r.v v7, v8 5640; CHECK-NEXT: vmv1r.v v8, v9 5641; CHECK-NEXT: vmv1r.v v9, v10 5642; CHECK-NEXT: vmv1r.v v10, v11 5643; CHECK-NEXT: vmv1r.v v11, v12 5644; CHECK-NEXT: vmv1r.v v12, v13 5645; CHECK-NEXT: vmv1r.v v13, v14 5646; CHECK-NEXT: vmv1r.v v14, v15 5647; CHECK-NEXT: vlseg8e64ff.v v7, (a0), v0.t 5648; CHECK-NEXT: csrr a0, vl 5649; CHECK-NEXT: sw a0, 0(a2) 5650; CHECK-NEXT: ret 5651entry: 5652 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 6) 5653 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 5654 %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) 5655 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 5656 store i32 %3, ptr %outvl 5657 ret <vscale x 1 x double> %2 5658} 5659 5660 5661define <vscale x 1 x bfloat> @test_vlseg2ff_nxv1bf16_triscv.vector.tuple_nxv2i8_2t(ptr %base, i32 %vl, ptr %outvl) { 5662; CHECK-LABEL: test_vlseg2ff_nxv1bf16_triscv.vector.tuple_nxv2i8_2t: 5663; CHECK: # %bb.0: # %entry 5664; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 5665; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 5666; CHECK-NEXT: csrr a0, vl 5667; CHECK-NEXT: sw a0, 0(a2) 5668; CHECK-NEXT: ret 5669entry: 5670 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv2i8_2t(target("riscv.vector.tuple", <vscale x 2 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 5671 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 0 5672 %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) 5673 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 1 5674 store i32 %3, ptr %outvl 5675 ret <vscale x 1 x bfloat> %2 5676} 5677 5678define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5679; CHECK-LABEL: test_vlseg2ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_2t: 5680; CHECK: # %bb.0: # %entry 5681; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 5682; CHECK-NEXT: vmv1r.v v7, v8 5683; CHECK-NEXT: vmv1r.v v8, v9 5684; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 5685; CHECK-NEXT: csrr a0, vl 5686; CHECK-NEXT: sw a0, 0(a2) 5687; CHECK-NEXT: ret 5688entry: 5689 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 5690 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 0 5691 %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) 5692 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 2), i32} %0, 1 5693 store i32 %3, ptr %outvl 5694 ret <vscale x 1 x bfloat> %2 5695} 5696 5697 5698define <vscale x 2 x bfloat> @test_vlseg2ff_nxv2bf16_triscv.vector.tuple_nxv4i8_2t(ptr %base, i32 %vl, ptr %outvl) { 5699; CHECK-LABEL: test_vlseg2ff_nxv2bf16_triscv.vector.tuple_nxv4i8_2t: 5700; CHECK: # %bb.0: # %entry 5701; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 5702; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 5703; CHECK-NEXT: csrr a0, vl 5704; CHECK-NEXT: sw a0, 0(a2) 5705; CHECK-NEXT: ret 5706entry: 5707 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv4i8_2t(target("riscv.vector.tuple", <vscale x 4 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 5708 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 5709 %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) 5710 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 5711 store i32 %3, ptr %outvl 5712 ret <vscale x 2 x bfloat> %2 5713} 5714 5715define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 5716; CHECK-LABEL: test_vlseg2ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_2t: 5717; CHECK: # %bb.0: # %entry 5718; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 5719; CHECK-NEXT: vmv1r.v v7, v8 5720; CHECK-NEXT: vmv1r.v v8, v9 5721; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 5722; CHECK-NEXT: csrr a0, vl 5723; CHECK-NEXT: sw a0, 0(a2) 5724; CHECK-NEXT: ret 5725entry: 5726 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 5727 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 0 5728 %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) 5729 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 2), i32} %0, 1 5730 store i32 %3, ptr %outvl 5731 ret <vscale x 2 x bfloat> %2 5732} 5733 5734 5735define <vscale x 4 x bfloat> @test_vlseg2ff_nxv4bf16_triscv.vector.tuple_nxv8i8_2t(ptr %base, i32 %vl, ptr %outvl) { 5736; CHECK-LABEL: test_vlseg2ff_nxv4bf16_triscv.vector.tuple_nxv8i8_2t: 5737; CHECK: # %bb.0: # %entry 5738; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 5739; CHECK-NEXT: vlseg2e16ff.v v7, (a0) 5740; CHECK-NEXT: csrr a0, vl 5741; CHECK-NEXT: sw a0, 0(a2) 5742; CHECK-NEXT: ret 5743entry: 5744 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv8i8_2t(target("riscv.vector.tuple", <vscale x 8 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 5745 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 5746 %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) 5747 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 5748 store i32 %3, ptr %outvl 5749 ret <vscale x 4 x bfloat> %2 5750} 5751 5752define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 5753; CHECK-LABEL: test_vlseg2ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_2t: 5754; CHECK: # %bb.0: # %entry 5755; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 5756; CHECK-NEXT: vmv1r.v v7, v8 5757; CHECK-NEXT: vmv1r.v v8, v9 5758; CHECK-NEXT: vlseg2e16ff.v v7, (a0), v0.t 5759; CHECK-NEXT: csrr a0, vl 5760; CHECK-NEXT: sw a0, 0(a2) 5761; CHECK-NEXT: ret 5762entry: 5763 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 5764 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 0 5765 %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) 5766 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 2), i32} %0, 1 5767 store i32 %3, ptr %outvl 5768 ret <vscale x 4 x bfloat> %2 5769} 5770 5771 5772define <vscale x 8 x bfloat> @test_vlseg2ff_nxv8bf16_triscv.vector.tuple_nxv16i8_2t(ptr %base, i32 %vl, ptr %outvl) { 5773; CHECK-LABEL: test_vlseg2ff_nxv8bf16_triscv.vector.tuple_nxv16i8_2t: 5774; CHECK: # %bb.0: # %entry 5775; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 5776; CHECK-NEXT: vlseg2e16ff.v v6, (a0) 5777; CHECK-NEXT: csrr a0, vl 5778; CHECK-NEXT: sw a0, 0(a2) 5779; CHECK-NEXT: ret 5780entry: 5781 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv16i8_2t(target("riscv.vector.tuple", <vscale x 16 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 5782 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 5783 %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) 5784 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 5785 store i32 %3, ptr %outvl 5786 ret <vscale x 8 x bfloat> %2 5787} 5788 5789define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 5790; CHECK-LABEL: test_vlseg2ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_2t: 5791; CHECK: # %bb.0: # %entry 5792; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 5793; CHECK-NEXT: vmv2r.v v6, v8 5794; CHECK-NEXT: vmv2r.v v8, v10 5795; CHECK-NEXT: vlseg2e16ff.v v6, (a0), v0.t 5796; CHECK-NEXT: csrr a0, vl 5797; CHECK-NEXT: sw a0, 0(a2) 5798; CHECK-NEXT: ret 5799entry: 5800 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 5801 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 0 5802 %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) 5803 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 2), i32} %0, 1 5804 store i32 %3, ptr %outvl 5805 ret <vscale x 8 x bfloat> %2 5806} 5807 5808 5809define <vscale x 16 x bfloat> @test_vlseg2ff_nxv16bf16_triscv.vector.tuple_nxv32i8_2t(ptr %base, i32 %vl, ptr %outvl) { 5810; CHECK-LABEL: test_vlseg2ff_nxv16bf16_triscv.vector.tuple_nxv32i8_2t: 5811; CHECK: # %bb.0: # %entry 5812; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma 5813; CHECK-NEXT: vlseg2e16ff.v v4, (a0) 5814; CHECK-NEXT: csrr a0, vl 5815; CHECK-NEXT: sw a0, 0(a2) 5816; CHECK-NEXT: ret 5817entry: 5818 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @llvm.riscv.vlseg2ff.triscv.vector.tuple_nxv32i8_2t(target("riscv.vector.tuple", <vscale x 32 x i8>, 2) undef, ptr %base, i32 %vl, i32 4) 5819 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 5820 %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) 5821 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 5822 store i32 %3, ptr %outvl 5823 ret <vscale x 16 x bfloat> %2 5824} 5825 5826define <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, i32 %vl, <vscale x 16 x i1> %mask, ptr %outvl) { 5827; CHECK-LABEL: test_vlseg2ff_mask_nxv16bf16_triscv.vector.tuple_nxv32i8_2t: 5828; CHECK: # %bb.0: # %entry 5829; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, mu 5830; CHECK-NEXT: vmv4r.v v4, v8 5831; CHECK-NEXT: vmv4r.v v8, v12 5832; CHECK-NEXT: vlseg2e16ff.v v4, (a0), v0.t 5833; CHECK-NEXT: csrr a0, vl 5834; CHECK-NEXT: sw a0, 0(a2) 5835; CHECK-NEXT: ret 5836entry: 5837 %0 = tail call {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} @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, i32 %vl, i32 1, i32 4) 5838 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 0 5839 %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) 5840 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 32 x i8>, 2), i32} %0, 1 5841 store i32 %3, ptr %outvl 5842 ret <vscale x 16 x bfloat> %2 5843} 5844 5845 5846define <vscale x 1 x bfloat> @test_vlseg3ff_nxv1bf16_triscv.vector.tuple_nxv2i8_3t(ptr %base, i32 %vl, ptr %outvl) { 5847; CHECK-LABEL: test_vlseg3ff_nxv1bf16_triscv.vector.tuple_nxv2i8_3t: 5848; CHECK: # %bb.0: # %entry 5849; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 5850; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 5851; CHECK-NEXT: csrr a0, vl 5852; CHECK-NEXT: sw a0, 0(a2) 5853; CHECK-NEXT: ret 5854entry: 5855 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv2i8_3t(target("riscv.vector.tuple", <vscale x 2 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 5856 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 0 5857 %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) 5858 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 1 5859 store i32 %3, ptr %outvl 5860 ret <vscale x 1 x bfloat> %2 5861} 5862 5863define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 5864; CHECK-LABEL: test_vlseg3ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_3t: 5865; CHECK: # %bb.0: # %entry 5866; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 5867; CHECK-NEXT: vmv1r.v v7, v8 5868; CHECK-NEXT: vmv1r.v v8, v9 5869; CHECK-NEXT: vmv1r.v v9, v10 5870; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 5871; CHECK-NEXT: csrr a0, vl 5872; CHECK-NEXT: sw a0, 0(a2) 5873; CHECK-NEXT: ret 5874entry: 5875 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 5876 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 0 5877 %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) 5878 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 3), i32} %0, 1 5879 store i32 %3, ptr %outvl 5880 ret <vscale x 1 x bfloat> %2 5881} 5882 5883 5884define <vscale x 2 x bfloat> @test_vlseg3ff_nxv2bf16_triscv.vector.tuple_nxv4i8_3t(ptr %base, i32 %vl, ptr %outvl) { 5885; CHECK-LABEL: test_vlseg3ff_nxv2bf16_triscv.vector.tuple_nxv4i8_3t: 5886; CHECK: # %bb.0: # %entry 5887; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 5888; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 5889; CHECK-NEXT: csrr a0, vl 5890; CHECK-NEXT: sw a0, 0(a2) 5891; CHECK-NEXT: ret 5892entry: 5893 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv4i8_3t(target("riscv.vector.tuple", <vscale x 4 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 5894 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 5895 %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) 5896 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 5897 store i32 %3, ptr %outvl 5898 ret <vscale x 2 x bfloat> %2 5899} 5900 5901define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 5902; CHECK-LABEL: test_vlseg3ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_3t: 5903; CHECK: # %bb.0: # %entry 5904; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 5905; CHECK-NEXT: vmv1r.v v7, v8 5906; CHECK-NEXT: vmv1r.v v8, v9 5907; CHECK-NEXT: vmv1r.v v9, v10 5908; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 5909; CHECK-NEXT: csrr a0, vl 5910; CHECK-NEXT: sw a0, 0(a2) 5911; CHECK-NEXT: ret 5912entry: 5913 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 5914 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 0 5915 %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) 5916 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 3), i32} %0, 1 5917 store i32 %3, ptr %outvl 5918 ret <vscale x 2 x bfloat> %2 5919} 5920 5921 5922define <vscale x 4 x bfloat> @test_vlseg3ff_nxv4bf16_triscv.vector.tuple_nxv8i8_3t(ptr %base, i32 %vl, ptr %outvl) { 5923; CHECK-LABEL: test_vlseg3ff_nxv4bf16_triscv.vector.tuple_nxv8i8_3t: 5924; CHECK: # %bb.0: # %entry 5925; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 5926; CHECK-NEXT: vlseg3e16ff.v v7, (a0) 5927; CHECK-NEXT: csrr a0, vl 5928; CHECK-NEXT: sw a0, 0(a2) 5929; CHECK-NEXT: ret 5930entry: 5931 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv8i8_3t(target("riscv.vector.tuple", <vscale x 8 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 5932 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 5933 %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) 5934 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 5935 store i32 %3, ptr %outvl 5936 ret <vscale x 4 x bfloat> %2 5937} 5938 5939define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 5940; CHECK-LABEL: test_vlseg3ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_3t: 5941; CHECK: # %bb.0: # %entry 5942; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 5943; CHECK-NEXT: vmv1r.v v7, v8 5944; CHECK-NEXT: vmv1r.v v8, v9 5945; CHECK-NEXT: vmv1r.v v9, v10 5946; CHECK-NEXT: vlseg3e16ff.v v7, (a0), v0.t 5947; CHECK-NEXT: csrr a0, vl 5948; CHECK-NEXT: sw a0, 0(a2) 5949; CHECK-NEXT: ret 5950entry: 5951 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 5952 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 0 5953 %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) 5954 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 3), i32} %0, 1 5955 store i32 %3, ptr %outvl 5956 ret <vscale x 4 x bfloat> %2 5957} 5958 5959 5960define <vscale x 8 x bfloat> @test_vlseg3ff_nxv8bf16_triscv.vector.tuple_nxv16i8_3t(ptr %base, i32 %vl, ptr %outvl) { 5961; CHECK-LABEL: test_vlseg3ff_nxv8bf16_triscv.vector.tuple_nxv16i8_3t: 5962; CHECK: # %bb.0: # %entry 5963; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 5964; CHECK-NEXT: vlseg3e16ff.v v6, (a0) 5965; CHECK-NEXT: csrr a0, vl 5966; CHECK-NEXT: sw a0, 0(a2) 5967; CHECK-NEXT: ret 5968entry: 5969 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @llvm.riscv.vlseg3ff.triscv.vector.tuple_nxv16i8_3t(target("riscv.vector.tuple", <vscale x 16 x i8>, 3) undef, ptr %base, i32 %vl, i32 4) 5970 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 5971 %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) 5972 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 5973 store i32 %3, ptr %outvl 5974 ret <vscale x 8 x bfloat> %2 5975} 5976 5977define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 5978; CHECK-LABEL: test_vlseg3ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_3t: 5979; CHECK: # %bb.0: # %entry 5980; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 5981; CHECK-NEXT: vmv2r.v v6, v8 5982; CHECK-NEXT: vmv2r.v v8, v10 5983; CHECK-NEXT: vmv2r.v v10, v12 5984; CHECK-NEXT: vlseg3e16ff.v v6, (a0), v0.t 5985; CHECK-NEXT: csrr a0, vl 5986; CHECK-NEXT: sw a0, 0(a2) 5987; CHECK-NEXT: ret 5988entry: 5989 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} @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, i32 %vl, i32 1, i32 4) 5990 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 0 5991 %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) 5992 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 3), i32} %0, 1 5993 store i32 %3, ptr %outvl 5994 ret <vscale x 8 x bfloat> %2 5995} 5996 5997 5998define <vscale x 1 x bfloat> @test_vlseg4ff_nxv1bf16_triscv.vector.tuple_nxv2i8_4t(ptr %base, i32 %vl, ptr %outvl) { 5999; CHECK-LABEL: test_vlseg4ff_nxv1bf16_triscv.vector.tuple_nxv2i8_4t: 6000; CHECK: # %bb.0: # %entry 6001; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 6002; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 6003; CHECK-NEXT: csrr a0, vl 6004; CHECK-NEXT: sw a0, 0(a2) 6005; CHECK-NEXT: ret 6006entry: 6007 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv2i8_4t(target("riscv.vector.tuple", <vscale x 2 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 6008 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 0 6009 %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) 6010 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 1 6011 store i32 %3, ptr %outvl 6012 ret <vscale x 1 x bfloat> %2 6013} 6014 6015define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 6016; CHECK-LABEL: test_vlseg4ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_4t: 6017; CHECK: # %bb.0: # %entry 6018; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 6019; CHECK-NEXT: vmv1r.v v7, v8 6020; CHECK-NEXT: vmv1r.v v8, v9 6021; CHECK-NEXT: vmv1r.v v9, v10 6022; CHECK-NEXT: vmv1r.v v10, v11 6023; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 6024; CHECK-NEXT: csrr a0, vl 6025; CHECK-NEXT: sw a0, 0(a2) 6026; CHECK-NEXT: ret 6027entry: 6028 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 6029 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 0 6030 %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) 6031 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 4), i32} %0, 1 6032 store i32 %3, ptr %outvl 6033 ret <vscale x 1 x bfloat> %2 6034} 6035 6036 6037define <vscale x 2 x bfloat> @test_vlseg4ff_nxv2bf16_triscv.vector.tuple_nxv4i8_4t(ptr %base, i32 %vl, ptr %outvl) { 6038; CHECK-LABEL: test_vlseg4ff_nxv2bf16_triscv.vector.tuple_nxv4i8_4t: 6039; CHECK: # %bb.0: # %entry 6040; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 6041; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 6042; CHECK-NEXT: csrr a0, vl 6043; CHECK-NEXT: sw a0, 0(a2) 6044; CHECK-NEXT: ret 6045entry: 6046 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv4i8_4t(target("riscv.vector.tuple", <vscale x 4 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 6047 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 6048 %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) 6049 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 6050 store i32 %3, ptr %outvl 6051 ret <vscale x 2 x bfloat> %2 6052} 6053 6054define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 6055; CHECK-LABEL: test_vlseg4ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_4t: 6056; CHECK: # %bb.0: # %entry 6057; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 6058; CHECK-NEXT: vmv1r.v v7, v8 6059; CHECK-NEXT: vmv1r.v v8, v9 6060; CHECK-NEXT: vmv1r.v v9, v10 6061; CHECK-NEXT: vmv1r.v v10, v11 6062; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 6063; CHECK-NEXT: csrr a0, vl 6064; CHECK-NEXT: sw a0, 0(a2) 6065; CHECK-NEXT: ret 6066entry: 6067 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 6068 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 0 6069 %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) 6070 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 4), i32} %0, 1 6071 store i32 %3, ptr %outvl 6072 ret <vscale x 2 x bfloat> %2 6073} 6074 6075 6076define <vscale x 4 x bfloat> @test_vlseg4ff_nxv4bf16_triscv.vector.tuple_nxv8i8_4t(ptr %base, i32 %vl, ptr %outvl) { 6077; CHECK-LABEL: test_vlseg4ff_nxv4bf16_triscv.vector.tuple_nxv8i8_4t: 6078; CHECK: # %bb.0: # %entry 6079; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 6080; CHECK-NEXT: vlseg4e16ff.v v7, (a0) 6081; CHECK-NEXT: csrr a0, vl 6082; CHECK-NEXT: sw a0, 0(a2) 6083; CHECK-NEXT: ret 6084entry: 6085 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv8i8_4t(target("riscv.vector.tuple", <vscale x 8 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 6086 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 6087 %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) 6088 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 6089 store i32 %3, ptr %outvl 6090 ret <vscale x 4 x bfloat> %2 6091} 6092 6093define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 6094; CHECK-LABEL: test_vlseg4ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_4t: 6095; CHECK: # %bb.0: # %entry 6096; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 6097; CHECK-NEXT: vmv1r.v v7, v8 6098; CHECK-NEXT: vmv1r.v v8, v9 6099; CHECK-NEXT: vmv1r.v v9, v10 6100; CHECK-NEXT: vmv1r.v v10, v11 6101; CHECK-NEXT: vlseg4e16ff.v v7, (a0), v0.t 6102; CHECK-NEXT: csrr a0, vl 6103; CHECK-NEXT: sw a0, 0(a2) 6104; CHECK-NEXT: ret 6105entry: 6106 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 6107 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 0 6108 %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) 6109 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 4), i32} %0, 1 6110 store i32 %3, ptr %outvl 6111 ret <vscale x 4 x bfloat> %2 6112} 6113 6114 6115define <vscale x 8 x bfloat> @test_vlseg4ff_nxv8bf16_triscv.vector.tuple_nxv16i8_4t(ptr %base, i32 %vl, ptr %outvl) { 6116; CHECK-LABEL: test_vlseg4ff_nxv8bf16_triscv.vector.tuple_nxv16i8_4t: 6117; CHECK: # %bb.0: # %entry 6118; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 6119; CHECK-NEXT: vlseg4e16ff.v v6, (a0) 6120; CHECK-NEXT: csrr a0, vl 6121; CHECK-NEXT: sw a0, 0(a2) 6122; CHECK-NEXT: ret 6123entry: 6124 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @llvm.riscv.vlseg4ff.triscv.vector.tuple_nxv16i8_4t(target("riscv.vector.tuple", <vscale x 16 x i8>, 4) undef, ptr %base, i32 %vl, i32 4) 6125 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 6126 %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) 6127 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 6128 store i32 %3, ptr %outvl 6129 ret <vscale x 8 x bfloat> %2 6130} 6131 6132define <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, i32 %vl, <vscale x 8 x i1> %mask, ptr %outvl) { 6133; CHECK-LABEL: test_vlseg4ff_mask_nxv8bf16_triscv.vector.tuple_nxv16i8_4t: 6134; CHECK: # %bb.0: # %entry 6135; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, mu 6136; CHECK-NEXT: vmv2r.v v6, v8 6137; CHECK-NEXT: vmv2r.v v8, v10 6138; CHECK-NEXT: vmv2r.v v10, v12 6139; CHECK-NEXT: vmv2r.v v12, v14 6140; CHECK-NEXT: vlseg4e16ff.v v6, (a0), v0.t 6141; CHECK-NEXT: csrr a0, vl 6142; CHECK-NEXT: sw a0, 0(a2) 6143; CHECK-NEXT: ret 6144entry: 6145 %0 = tail call {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} @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, i32 %vl, i32 1, i32 4) 6146 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 0 6147 %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) 6148 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 16 x i8>, 4), i32} %0, 1 6149 store i32 %3, ptr %outvl 6150 ret <vscale x 8 x bfloat> %2 6151} 6152 6153 6154define <vscale x 1 x bfloat> @test_vlseg5ff_nxv1bf16_triscv.vector.tuple_nxv2i8_5t(ptr %base, i32 %vl, ptr %outvl) { 6155; CHECK-LABEL: test_vlseg5ff_nxv1bf16_triscv.vector.tuple_nxv2i8_5t: 6156; CHECK: # %bb.0: # %entry 6157; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 6158; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 6159; CHECK-NEXT: csrr a0, vl 6160; CHECK-NEXT: sw a0, 0(a2) 6161; CHECK-NEXT: ret 6162entry: 6163 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv2i8_5t(target("riscv.vector.tuple", <vscale x 2 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 6164 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 0 6165 %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) 6166 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 1 6167 store i32 %3, ptr %outvl 6168 ret <vscale x 1 x bfloat> %2 6169} 6170 6171define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 6172; CHECK-LABEL: test_vlseg5ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_5t: 6173; CHECK: # %bb.0: # %entry 6174; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 6175; CHECK-NEXT: vmv1r.v v7, v8 6176; CHECK-NEXT: vmv1r.v v8, v9 6177; CHECK-NEXT: vmv1r.v v9, v10 6178; CHECK-NEXT: vmv1r.v v10, v11 6179; CHECK-NEXT: vmv1r.v v11, v12 6180; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 6181; CHECK-NEXT: csrr a0, vl 6182; CHECK-NEXT: sw a0, 0(a2) 6183; CHECK-NEXT: ret 6184entry: 6185 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 6186 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 0 6187 %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) 6188 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 5), i32} %0, 1 6189 store i32 %3, ptr %outvl 6190 ret <vscale x 1 x bfloat> %2 6191} 6192 6193 6194define <vscale x 2 x bfloat> @test_vlseg5ff_nxv2bf16_triscv.vector.tuple_nxv4i8_5t(ptr %base, i32 %vl, ptr %outvl) { 6195; CHECK-LABEL: test_vlseg5ff_nxv2bf16_triscv.vector.tuple_nxv4i8_5t: 6196; CHECK: # %bb.0: # %entry 6197; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 6198; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 6199; CHECK-NEXT: csrr a0, vl 6200; CHECK-NEXT: sw a0, 0(a2) 6201; CHECK-NEXT: ret 6202entry: 6203 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv4i8_5t(target("riscv.vector.tuple", <vscale x 4 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 6204 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 6205 %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) 6206 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 6207 store i32 %3, ptr %outvl 6208 ret <vscale x 2 x bfloat> %2 6209} 6210 6211define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 6212; CHECK-LABEL: test_vlseg5ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_5t: 6213; CHECK: # %bb.0: # %entry 6214; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 6215; CHECK-NEXT: vmv1r.v v7, v8 6216; CHECK-NEXT: vmv1r.v v8, v9 6217; CHECK-NEXT: vmv1r.v v9, v10 6218; CHECK-NEXT: vmv1r.v v10, v11 6219; CHECK-NEXT: vmv1r.v v11, v12 6220; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 6221; CHECK-NEXT: csrr a0, vl 6222; CHECK-NEXT: sw a0, 0(a2) 6223; CHECK-NEXT: ret 6224entry: 6225 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 6226 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 0 6227 %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) 6228 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 5), i32} %0, 1 6229 store i32 %3, ptr %outvl 6230 ret <vscale x 2 x bfloat> %2 6231} 6232 6233 6234define <vscale x 4 x bfloat> @test_vlseg5ff_nxv4bf16_triscv.vector.tuple_nxv8i8_5t(ptr %base, i32 %vl, ptr %outvl) { 6235; CHECK-LABEL: test_vlseg5ff_nxv4bf16_triscv.vector.tuple_nxv8i8_5t: 6236; CHECK: # %bb.0: # %entry 6237; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 6238; CHECK-NEXT: vlseg5e16ff.v v7, (a0) 6239; CHECK-NEXT: csrr a0, vl 6240; CHECK-NEXT: sw a0, 0(a2) 6241; CHECK-NEXT: ret 6242entry: 6243 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @llvm.riscv.vlseg5ff.triscv.vector.tuple_nxv8i8_5t(target("riscv.vector.tuple", <vscale x 8 x i8>, 5) undef, ptr %base, i32 %vl, i32 4) 6244 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 6245 %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) 6246 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 6247 store i32 %3, ptr %outvl 6248 ret <vscale x 4 x bfloat> %2 6249} 6250 6251define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 6252; CHECK-LABEL: test_vlseg5ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_5t: 6253; CHECK: # %bb.0: # %entry 6254; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 6255; CHECK-NEXT: vmv1r.v v7, v8 6256; CHECK-NEXT: vmv1r.v v8, v9 6257; CHECK-NEXT: vmv1r.v v9, v10 6258; CHECK-NEXT: vmv1r.v v10, v11 6259; CHECK-NEXT: vmv1r.v v11, v12 6260; CHECK-NEXT: vlseg5e16ff.v v7, (a0), v0.t 6261; CHECK-NEXT: csrr a0, vl 6262; CHECK-NEXT: sw a0, 0(a2) 6263; CHECK-NEXT: ret 6264entry: 6265 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} @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, i32 %vl, i32 1, i32 4) 6266 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 0 6267 %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) 6268 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 5), i32} %0, 1 6269 store i32 %3, ptr %outvl 6270 ret <vscale x 4 x bfloat> %2 6271} 6272 6273 6274define <vscale x 1 x bfloat> @test_vlseg6ff_nxv1bf16_triscv.vector.tuple_nxv2i8_6t(ptr %base, i32 %vl, ptr %outvl) { 6275; CHECK-LABEL: test_vlseg6ff_nxv1bf16_triscv.vector.tuple_nxv2i8_6t: 6276; CHECK: # %bb.0: # %entry 6277; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 6278; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 6279; CHECK-NEXT: csrr a0, vl 6280; CHECK-NEXT: sw a0, 0(a2) 6281; CHECK-NEXT: ret 6282entry: 6283 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv2i8_6t(target("riscv.vector.tuple", <vscale x 2 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 6284 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 0 6285 %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) 6286 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 1 6287 store i32 %3, ptr %outvl 6288 ret <vscale x 1 x bfloat> %2 6289} 6290 6291define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 6292; CHECK-LABEL: test_vlseg6ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_6t: 6293; CHECK: # %bb.0: # %entry 6294; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 6295; CHECK-NEXT: vmv1r.v v7, v8 6296; CHECK-NEXT: vmv1r.v v8, v9 6297; CHECK-NEXT: vmv1r.v v9, v10 6298; CHECK-NEXT: vmv1r.v v10, v11 6299; CHECK-NEXT: vmv1r.v v11, v12 6300; CHECK-NEXT: vmv1r.v v12, v13 6301; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 6302; CHECK-NEXT: csrr a0, vl 6303; CHECK-NEXT: sw a0, 0(a2) 6304; CHECK-NEXT: ret 6305entry: 6306 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 6307 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 0 6308 %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) 6309 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 6), i32} %0, 1 6310 store i32 %3, ptr %outvl 6311 ret <vscale x 1 x bfloat> %2 6312} 6313 6314 6315define <vscale x 2 x bfloat> @test_vlseg6ff_nxv2bf16_triscv.vector.tuple_nxv4i8_6t(ptr %base, i32 %vl, ptr %outvl) { 6316; CHECK-LABEL: test_vlseg6ff_nxv2bf16_triscv.vector.tuple_nxv4i8_6t: 6317; CHECK: # %bb.0: # %entry 6318; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 6319; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 6320; CHECK-NEXT: csrr a0, vl 6321; CHECK-NEXT: sw a0, 0(a2) 6322; CHECK-NEXT: ret 6323entry: 6324 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv4i8_6t(target("riscv.vector.tuple", <vscale x 4 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 6325 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 6326 %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) 6327 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 6328 store i32 %3, ptr %outvl 6329 ret <vscale x 2 x bfloat> %2 6330} 6331 6332define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 6333; CHECK-LABEL: test_vlseg6ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_6t: 6334; CHECK: # %bb.0: # %entry 6335; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 6336; CHECK-NEXT: vmv1r.v v7, v8 6337; CHECK-NEXT: vmv1r.v v8, v9 6338; CHECK-NEXT: vmv1r.v v9, v10 6339; CHECK-NEXT: vmv1r.v v10, v11 6340; CHECK-NEXT: vmv1r.v v11, v12 6341; CHECK-NEXT: vmv1r.v v12, v13 6342; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 6343; CHECK-NEXT: csrr a0, vl 6344; CHECK-NEXT: sw a0, 0(a2) 6345; CHECK-NEXT: ret 6346entry: 6347 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 6348 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 0 6349 %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) 6350 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 6), i32} %0, 1 6351 store i32 %3, ptr %outvl 6352 ret <vscale x 2 x bfloat> %2 6353} 6354 6355 6356define <vscale x 4 x bfloat> @test_vlseg6ff_nxv4bf16_triscv.vector.tuple_nxv8i8_6t(ptr %base, i32 %vl, ptr %outvl) { 6357; CHECK-LABEL: test_vlseg6ff_nxv4bf16_triscv.vector.tuple_nxv8i8_6t: 6358; CHECK: # %bb.0: # %entry 6359; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 6360; CHECK-NEXT: vlseg6e16ff.v v7, (a0) 6361; CHECK-NEXT: csrr a0, vl 6362; CHECK-NEXT: sw a0, 0(a2) 6363; CHECK-NEXT: ret 6364entry: 6365 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @llvm.riscv.vlseg6ff.triscv.vector.tuple_nxv8i8_6t(target("riscv.vector.tuple", <vscale x 8 x i8>, 6) undef, ptr %base, i32 %vl, i32 4) 6366 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 6367 %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) 6368 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 6369 store i32 %3, ptr %outvl 6370 ret <vscale x 4 x bfloat> %2 6371} 6372 6373define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 6374; CHECK-LABEL: test_vlseg6ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_6t: 6375; CHECK: # %bb.0: # %entry 6376; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 6377; CHECK-NEXT: vmv1r.v v7, v8 6378; CHECK-NEXT: vmv1r.v v8, v9 6379; CHECK-NEXT: vmv1r.v v9, v10 6380; CHECK-NEXT: vmv1r.v v10, v11 6381; CHECK-NEXT: vmv1r.v v11, v12 6382; CHECK-NEXT: vmv1r.v v12, v13 6383; CHECK-NEXT: vlseg6e16ff.v v7, (a0), v0.t 6384; CHECK-NEXT: csrr a0, vl 6385; CHECK-NEXT: sw a0, 0(a2) 6386; CHECK-NEXT: ret 6387entry: 6388 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} @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, i32 %vl, i32 1, i32 4) 6389 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 0 6390 %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) 6391 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 6), i32} %0, 1 6392 store i32 %3, ptr %outvl 6393 ret <vscale x 4 x bfloat> %2 6394} 6395 6396 6397define <vscale x 1 x bfloat> @test_vlseg7ff_nxv1bf16_triscv.vector.tuple_nxv2i8_7t(ptr %base, i32 %vl, ptr %outvl) { 6398; CHECK-LABEL: test_vlseg7ff_nxv1bf16_triscv.vector.tuple_nxv2i8_7t: 6399; CHECK: # %bb.0: # %entry 6400; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 6401; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 6402; CHECK-NEXT: csrr a0, vl 6403; CHECK-NEXT: sw a0, 0(a2) 6404; CHECK-NEXT: ret 6405entry: 6406 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv2i8_7t(target("riscv.vector.tuple", <vscale x 2 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 6407 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 0 6408 %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) 6409 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 1 6410 store i32 %3, ptr %outvl 6411 ret <vscale x 1 x bfloat> %2 6412} 6413 6414define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 6415; CHECK-LABEL: test_vlseg7ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_7t: 6416; CHECK: # %bb.0: # %entry 6417; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 6418; CHECK-NEXT: vmv1r.v v7, v8 6419; CHECK-NEXT: vmv1r.v v8, v9 6420; CHECK-NEXT: vmv1r.v v9, v10 6421; CHECK-NEXT: vmv1r.v v10, v11 6422; CHECK-NEXT: vmv1r.v v11, v12 6423; CHECK-NEXT: vmv1r.v v12, v13 6424; CHECK-NEXT: vmv1r.v v13, v14 6425; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 6426; CHECK-NEXT: csrr a0, vl 6427; CHECK-NEXT: sw a0, 0(a2) 6428; CHECK-NEXT: ret 6429entry: 6430 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 6431 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 0 6432 %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) 6433 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 7), i32} %0, 1 6434 store i32 %3, ptr %outvl 6435 ret <vscale x 1 x bfloat> %2 6436} 6437 6438 6439define <vscale x 2 x bfloat> @test_vlseg7ff_nxv2bf16_triscv.vector.tuple_nxv4i8_7t(ptr %base, i32 %vl, ptr %outvl) { 6440; CHECK-LABEL: test_vlseg7ff_nxv2bf16_triscv.vector.tuple_nxv4i8_7t: 6441; CHECK: # %bb.0: # %entry 6442; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 6443; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 6444; CHECK-NEXT: csrr a0, vl 6445; CHECK-NEXT: sw a0, 0(a2) 6446; CHECK-NEXT: ret 6447entry: 6448 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv4i8_7t(target("riscv.vector.tuple", <vscale x 4 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 6449 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 6450 %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) 6451 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 6452 store i32 %3, ptr %outvl 6453 ret <vscale x 2 x bfloat> %2 6454} 6455 6456define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 6457; CHECK-LABEL: test_vlseg7ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_7t: 6458; CHECK: # %bb.0: # %entry 6459; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 6460; CHECK-NEXT: vmv1r.v v7, v8 6461; CHECK-NEXT: vmv1r.v v8, v9 6462; CHECK-NEXT: vmv1r.v v9, v10 6463; CHECK-NEXT: vmv1r.v v10, v11 6464; CHECK-NEXT: vmv1r.v v11, v12 6465; CHECK-NEXT: vmv1r.v v12, v13 6466; CHECK-NEXT: vmv1r.v v13, v14 6467; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 6468; CHECK-NEXT: csrr a0, vl 6469; CHECK-NEXT: sw a0, 0(a2) 6470; CHECK-NEXT: ret 6471entry: 6472 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 6473 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 0 6474 %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) 6475 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 7), i32} %0, 1 6476 store i32 %3, ptr %outvl 6477 ret <vscale x 2 x bfloat> %2 6478} 6479 6480 6481define <vscale x 4 x bfloat> @test_vlseg7ff_nxv4bf16_triscv.vector.tuple_nxv8i8_7t(ptr %base, i32 %vl, ptr %outvl) { 6482; CHECK-LABEL: test_vlseg7ff_nxv4bf16_triscv.vector.tuple_nxv8i8_7t: 6483; CHECK: # %bb.0: # %entry 6484; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 6485; CHECK-NEXT: vlseg7e16ff.v v7, (a0) 6486; CHECK-NEXT: csrr a0, vl 6487; CHECK-NEXT: sw a0, 0(a2) 6488; CHECK-NEXT: ret 6489entry: 6490 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @llvm.riscv.vlseg7ff.triscv.vector.tuple_nxv8i8_7t(target("riscv.vector.tuple", <vscale x 8 x i8>, 7) undef, ptr %base, i32 %vl, i32 4) 6491 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 6492 %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) 6493 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 6494 store i32 %3, ptr %outvl 6495 ret <vscale x 4 x bfloat> %2 6496} 6497 6498define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 6499; CHECK-LABEL: test_vlseg7ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_7t: 6500; CHECK: # %bb.0: # %entry 6501; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 6502; CHECK-NEXT: vmv1r.v v7, v8 6503; CHECK-NEXT: vmv1r.v v8, v9 6504; CHECK-NEXT: vmv1r.v v9, v10 6505; CHECK-NEXT: vmv1r.v v10, v11 6506; CHECK-NEXT: vmv1r.v v11, v12 6507; CHECK-NEXT: vmv1r.v v12, v13 6508; CHECK-NEXT: vmv1r.v v13, v14 6509; CHECK-NEXT: vlseg7e16ff.v v7, (a0), v0.t 6510; CHECK-NEXT: csrr a0, vl 6511; CHECK-NEXT: sw a0, 0(a2) 6512; CHECK-NEXT: ret 6513entry: 6514 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} @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, i32 %vl, i32 1, i32 4) 6515 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 0 6516 %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) 6517 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 7), i32} %0, 1 6518 store i32 %3, ptr %outvl 6519 ret <vscale x 4 x bfloat> %2 6520} 6521 6522 6523define <vscale x 1 x bfloat> @test_vlseg8ff_nxv1bf16_triscv.vector.tuple_nxv2i8_8t(ptr %base, i32 %vl, ptr %outvl) { 6524; CHECK-LABEL: test_vlseg8ff_nxv1bf16_triscv.vector.tuple_nxv2i8_8t: 6525; CHECK: # %bb.0: # %entry 6526; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 6527; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 6528; CHECK-NEXT: csrr a0, vl 6529; CHECK-NEXT: sw a0, 0(a2) 6530; CHECK-NEXT: ret 6531entry: 6532 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv2i8_8t(target("riscv.vector.tuple", <vscale x 2 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 6533 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 0 6534 %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) 6535 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 1 6536 store i32 %3, ptr %outvl 6537 ret <vscale x 1 x bfloat> %2 6538} 6539 6540define <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, i32 %vl, <vscale x 1 x i1> %mask, ptr %outvl) { 6541; CHECK-LABEL: test_vlseg8ff_mask_nxv1bf16_triscv.vector.tuple_nxv2i8_8t: 6542; CHECK: # %bb.0: # %entry 6543; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, mu 6544; CHECK-NEXT: vmv1r.v v7, v8 6545; CHECK-NEXT: vmv1r.v v8, v9 6546; CHECK-NEXT: vmv1r.v v9, v10 6547; CHECK-NEXT: vmv1r.v v10, v11 6548; CHECK-NEXT: vmv1r.v v11, v12 6549; CHECK-NEXT: vmv1r.v v12, v13 6550; CHECK-NEXT: vmv1r.v v13, v14 6551; CHECK-NEXT: vmv1r.v v14, v15 6552; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 6553; CHECK-NEXT: csrr a0, vl 6554; CHECK-NEXT: sw a0, 0(a2) 6555; CHECK-NEXT: ret 6556entry: 6557 %0 = tail call {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 6558 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 0 6559 %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) 6560 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 2 x i8>, 8), i32} %0, 1 6561 store i32 %3, ptr %outvl 6562 ret <vscale x 1 x bfloat> %2 6563} 6564 6565 6566define <vscale x 2 x bfloat> @test_vlseg8ff_nxv2bf16_triscv.vector.tuple_nxv4i8_8t(ptr %base, i32 %vl, ptr %outvl) { 6567; CHECK-LABEL: test_vlseg8ff_nxv2bf16_triscv.vector.tuple_nxv4i8_8t: 6568; CHECK: # %bb.0: # %entry 6569; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 6570; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 6571; CHECK-NEXT: csrr a0, vl 6572; CHECK-NEXT: sw a0, 0(a2) 6573; CHECK-NEXT: ret 6574entry: 6575 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv4i8_8t(target("riscv.vector.tuple", <vscale x 4 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 6576 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 6577 %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) 6578 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 6579 store i32 %3, ptr %outvl 6580 ret <vscale x 2 x bfloat> %2 6581} 6582 6583define <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, i32 %vl, <vscale x 2 x i1> %mask, ptr %outvl) { 6584; CHECK-LABEL: test_vlseg8ff_mask_nxv2bf16_triscv.vector.tuple_nxv4i8_8t: 6585; CHECK: # %bb.0: # %entry 6586; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, mu 6587; CHECK-NEXT: vmv1r.v v7, v8 6588; CHECK-NEXT: vmv1r.v v8, v9 6589; CHECK-NEXT: vmv1r.v v9, v10 6590; CHECK-NEXT: vmv1r.v v10, v11 6591; CHECK-NEXT: vmv1r.v v11, v12 6592; CHECK-NEXT: vmv1r.v v12, v13 6593; CHECK-NEXT: vmv1r.v v13, v14 6594; CHECK-NEXT: vmv1r.v v14, v15 6595; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 6596; CHECK-NEXT: csrr a0, vl 6597; CHECK-NEXT: sw a0, 0(a2) 6598; CHECK-NEXT: ret 6599entry: 6600 %0 = tail call {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 6601 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 0 6602 %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) 6603 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 4 x i8>, 8), i32} %0, 1 6604 store i32 %3, ptr %outvl 6605 ret <vscale x 2 x bfloat> %2 6606} 6607 6608 6609define <vscale x 4 x bfloat> @test_vlseg8ff_nxv4bf16_triscv.vector.tuple_nxv8i8_8t(ptr %base, i32 %vl, ptr %outvl) { 6610; CHECK-LABEL: test_vlseg8ff_nxv4bf16_triscv.vector.tuple_nxv8i8_8t: 6611; CHECK: # %bb.0: # %entry 6612; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 6613; CHECK-NEXT: vlseg8e16ff.v v7, (a0) 6614; CHECK-NEXT: csrr a0, vl 6615; CHECK-NEXT: sw a0, 0(a2) 6616; CHECK-NEXT: ret 6617entry: 6618 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @llvm.riscv.vlseg8ff.triscv.vector.tuple_nxv8i8_8t(target("riscv.vector.tuple", <vscale x 8 x i8>, 8) undef, ptr %base, i32 %vl, i32 4) 6619 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 6620 %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) 6621 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 6622 store i32 %3, ptr %outvl 6623 ret <vscale x 4 x bfloat> %2 6624} 6625 6626define <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, i32 %vl, <vscale x 4 x i1> %mask, ptr %outvl) { 6627; CHECK-LABEL: test_vlseg8ff_mask_nxv4bf16_triscv.vector.tuple_nxv8i8_8t: 6628; CHECK: # %bb.0: # %entry 6629; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, mu 6630; CHECK-NEXT: vmv1r.v v7, v8 6631; CHECK-NEXT: vmv1r.v v8, v9 6632; CHECK-NEXT: vmv1r.v v9, v10 6633; CHECK-NEXT: vmv1r.v v10, v11 6634; CHECK-NEXT: vmv1r.v v11, v12 6635; CHECK-NEXT: vmv1r.v v12, v13 6636; CHECK-NEXT: vmv1r.v v13, v14 6637; CHECK-NEXT: vmv1r.v v14, v15 6638; CHECK-NEXT: vlseg8e16ff.v v7, (a0), v0.t 6639; CHECK-NEXT: csrr a0, vl 6640; CHECK-NEXT: sw a0, 0(a2) 6641; CHECK-NEXT: ret 6642entry: 6643 %0 = tail call {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} @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, i32 %vl, i32 1, i32 4) 6644 %1 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 0 6645 %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) 6646 %3 = extractvalue {target("riscv.vector.tuple", <vscale x 8 x i8>, 8), i32} %0, 1 6647 store i32 %3, ptr %outvl 6648 ret <vscale x 4 x bfloat> %2 6649} 6650 6651