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
5 declare {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)
6 declare {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)
8 define <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)
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
25 define <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)
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
44 declare {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)
45 declare {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)
47 define <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)
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
64 define <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)
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
83 declare {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)
84 declare {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)
86 define <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)
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
103 define <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)
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
122 declare {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)
123 declare {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)
125 define <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)
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
142 define <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)
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
161 declare {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)
162 declare {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)
164 define <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)
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
181 define <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)
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
200 declare {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)
201 declare {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)
203 define <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)
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
220 define <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)
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
239 declare {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)
240 declare {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)
242 define <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)
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
259 define <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)
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
279 declare {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)
280 declare {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)
282 define <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)
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
299 define <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)
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
319 declare {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)
320 declare {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)
322 define <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)
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
339 define <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)
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
359 declare {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)
360 declare {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)
362 define <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)
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
379 define <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)
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
399 declare {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)
400 declare {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)
402 define <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)
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
419 define <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)
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
439 declare {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)
440 declare {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)
442 define <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)
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
459 define <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)
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
480 declare {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)
481 declare {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)
483 define <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)
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
500 define <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)
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
521 declare {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)
522 declare {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)
524 define <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)
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
541 define <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)
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
562 declare {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)
563 declare {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)
565 define <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)
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
582 define <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)
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
603 declare {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)
604 declare {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)
606 define <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)
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
623 define <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)
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
644 declare {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)
645 declare {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)
647 define <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)
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
664 define <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)
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
686 declare {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)
687 declare {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)
689 define <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)
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
706 define <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)
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
728 declare {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)
729 declare {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)
731 define <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)
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
748 define <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)
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
770 declare {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)
771 declare {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)
773 define <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)
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
790 define <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)
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
812 declare {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)
813 declare {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)
815 define <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)
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
832 define <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)
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
855 declare {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)
856 declare {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)
858 define <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)
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
875 define <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)
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
898 declare {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)
899 declare {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)
901 define <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)
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
918 define <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)
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
941 declare {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)
942 declare {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)
944 define <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)
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
961 define <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)
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
984 declare {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)
985 declare {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)
987 define <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)
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
1004 define <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)
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
1028 declare {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)
1029 declare {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)
1031 define <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)
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
1048 define <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)
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
1072 declare {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)
1073 declare {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)
1075 define <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)
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
1092 define <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)
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
1116 declare {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)
1117 declare {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)
1119 define <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)
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
1136 define <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)
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
1160 declare {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)
1161 declare {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)
1163 define <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)
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
1180 define <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)
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
1205 declare {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)
1206 declare {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)
1208 define <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)
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
1225 define <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)
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
1250 declare {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)
1251 declare {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)
1253 define <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)
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
1270 define <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)
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
1295 declare {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)
1296 declare {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)
1298 define <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)
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
1315 define <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)
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
1340 declare {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)
1342 define <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)
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
1359 define <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)
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
1378 declare {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)
1380 define <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)
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
1397 define <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)
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
1416 declare {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)
1418 define <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)
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
1435 define <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)
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
1454 declare {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)
1456 define <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)
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
1473 define <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)
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
1492 declare {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)
1494 define <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)
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
1511 define <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)
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
1530 declare {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)
1532 define <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)
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
1549 define <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)
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
1569 declare {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)
1571 define <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)
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
1588 define <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)
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
1608 declare {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)
1610 define <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)
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
1627 define <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)
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
1647 declare {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)
1649 define <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)
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
1666 define <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)
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
1686 declare {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)
1688 define <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)
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
1705 define <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)
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
1726 declare {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)
1728 define <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)
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
1745 define <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)
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
1766 declare {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)
1768 define <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)
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
1785 define <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)
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
1806 declare {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)
1808 define <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)
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
1825 define <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)
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
1846 declare {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)
1848 define <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)
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
1865 define <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)
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
1887 declare {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)
1889 define <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)
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
1906 define <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)
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
1928 declare {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)
1930 define <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)
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
1947 define <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)
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
1969 declare {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)
1971 define <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)
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
1988 define <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)
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
2011 declare {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)
2013 define <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)
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
2030 define <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)
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
2053 declare {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)
2055 define <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)
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
2072 define <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)
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
2095 declare {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)
2097 define <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)
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
2114 define <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)
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
2138 declare {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)
2140 define <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)
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
2157 define <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)
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
2181 declare {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)
2183 define <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)
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
2200 define <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)
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
2224 declare {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)
2226 define <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)
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
2243 define <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)
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
2268 declare {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)
2270 define <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)
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
2287 define <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)
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
2312 declare {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)
2314 define <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)
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
2331 define <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)
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
2356 declare {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)
2358 define <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)
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
2375 define <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)
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
2394 declare {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)
2396 define <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)
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
2413 define <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)
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
2432 declare {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)
2434 define <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)
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
2451 define <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)
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
2470 declare {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)
2472 define <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)
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
2489 define <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)
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
2508 declare {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)
2510 define <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)
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
2527 define <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)
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
2547 declare {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)
2549 define <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)
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
2566 define <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)
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
2586 declare {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)
2588 define <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)
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
2605 define <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)
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
2625 declare {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)
2627 define <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)
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
2644 define <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)
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
2665 declare {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)
2667 define <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)
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
2684 define <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)
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
2705 declare {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)
2707 define <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)
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
2724 define <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)
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
2745 declare {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)
2747 define <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)
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
2764 define <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)
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
2786 declare {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)
2788 define <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)
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
2805 define <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)
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
2827 declare {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)
2829 define <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)
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
2846 define <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)
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
2869 declare {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)
2871 define <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)
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
2888 define <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)
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
2911 declare {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)
2913 define <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)
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
2930 define <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)
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
2954 declare {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)
2956 define <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)
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
2973 define <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)
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
2997 declare {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)
2999 define <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)
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
3016 define <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)
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
3041 declare {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)
3043 define <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)
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
3060 define <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)
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
3085 declare {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)
3087 define <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)
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
3104 define <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)
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
3123 declare {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)
3125 define <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)
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
3142 define <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)
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
3161 declare {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)
3163 define <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)
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
3180 define <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)
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
3199 declare {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)
3201 define <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)
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
3218 define <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)
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
3238 declare {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)
3240 define <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)
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
3257 define <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)
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
3277 declare {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)
3279 define <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)
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
3296 define <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)
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
3317 declare {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)
3319 define <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)
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
3336 define <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)
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
3357 declare {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)
3359 define <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)
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
3376 define <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)
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
3398 declare {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)
3400 define <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)
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
3417 define <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)
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
3440 declare {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)
3442 define <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)
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
3459 define <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)
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
3483 declare {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)
3485 define <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)
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
3502 define <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)
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
3528 define <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)
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
3545 define <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)
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
3565 define <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)
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
3582 define <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)
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
3602 define <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)
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
3619 define <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)
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
3639 define <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)
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
3656 define <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)
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
3676 define <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)
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
3693 define <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)
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
3713 define <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)
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
3730 define <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)
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
3751 define <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)
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
3768 define <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)
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
3789 define <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)
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
3806 define <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)
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
3827 define <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)
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
3844 define <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)
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
3865 define <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)
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
3882 define <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)
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
3904 define <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)
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
3921 define <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)
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
3943 define <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)
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
3960 define <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)
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
3982 define <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)
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
3999 define <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)
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
4021 define <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)
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
4038 define <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)
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
4061 define <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)
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
4078 define <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)
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
4101 define <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)
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
4118 define <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)
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
4141 define <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)
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
4158 define <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)
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
4182 define <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)
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
4199 define <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)
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
4223 define <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)
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
4240 define <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)
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
4264 define <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)
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
4281 define <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)
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
4306 define <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)
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
4323 define <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)
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
4348 define <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)
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
4365 define <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)
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
4390 define <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)
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
4407 define <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)
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
4433 define <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)
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
4450 define <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)
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
4476 define <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)
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
4493 define <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)
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
4519 define <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)
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
4536 define <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)
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
4556 define <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)
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
4573 define <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)
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
4593 define <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)
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
4610 define <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)
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
4630 define <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)
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
4647 define <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)
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
4667 define <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)
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
4684 define <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)
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
4705 define <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)
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
4722 define <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)
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
4743 define <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)
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
4760 define <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)
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
4781 define <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)
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
4798 define <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)
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
4820 define <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)
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
4837 define <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)
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
4859 define <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)
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
4876 define <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)
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
4898 define <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)
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
4915 define <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)
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
4938 define <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)
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
4955 define <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)
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
4978 define <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)
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
4995 define <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)
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
5019 define <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)
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
5036 define <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)
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
5060 define <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)
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
5077 define <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)
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
5102 define <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)
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
5119 define <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)
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
5144 define <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)
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
5161 define <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)
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
5187 define <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)
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
5204 define <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)
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
5230 define <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)
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
5247 define <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)
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
5267 define <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)
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
5284 define <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)
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
5304 define <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)
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
5321 define <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)
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
5341 define <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)
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
5358 define <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)
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
5379 define <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)
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
5396 define <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)
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
5417 define <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)
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
5434 define <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)
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
5456 define <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)
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
5473 define <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)
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
5495 define <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)
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
5512 define <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)
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
5535 define <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)
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
5552 define <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)
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
5576 define <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)
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
5593 define <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)
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
5618 define <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)
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
5635 define <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)
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
5661 define <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)
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
5678 define <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)
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
5698 define <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)
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
5715 define <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)
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
5735 define <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)
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
5752 define <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)
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
5772 define <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)
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
5789 define <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)
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
5809 define <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)
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
5826 define <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)
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
5846 define <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)
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
5863 define <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)
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
5884 define <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)
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
5901 define <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)
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
5922 define <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)
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
5939 define <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)
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
5960 define <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)
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
5977 define <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)
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
5998 define <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)
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
6015 define <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)
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
6037 define <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)
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
6054 define <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)
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
6076 define <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)
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
6093 define <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)
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
6115 define <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)
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
6132 define <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)
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
6154 define <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)
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
6171 define <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)
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
6194 define <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)
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
6211 define <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)
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
6234 define <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)
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
6251 define <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)
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
6274 define <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)
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
6291 define <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)
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
6315 define <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)
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
6332 define <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)
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
6356 define <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)
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
6373 define <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)
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
6397 define <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)
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
6414 define <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)
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
6439 define <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)
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
6456 define <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)
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
6481 define <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)
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
6498 define <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)
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
6523 define <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)
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
6540 define <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)
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
6566 define <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)
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
6583 define <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)
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
6609 define <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)
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
6626 define <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)
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