Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-interleaved-access.ll
blobbc3e135a588a6f08f165ae7718efdde88d7b2b6a
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=riscv32 -mattr=+v,m -O2 | FileCheck -check-prefixes=CHECK,RV32 %s
3 ; RUN: llc < %s -mtriple=riscv64 -mattr=+v,m -O2 | FileCheck -check-prefixes=CHECK,RV64 %s
5 ; ------------------------------------------------------------------------------
6 ; Loads
7 ; ------------------------------------------------------------------------------
9 ; FIXME: This should be widened to a vlseg2 of <4 x i32> with VL set to 3
10 define {<3 x i32>, <3 x i32>} @load_factor2_v3(ptr %ptr) {
11 ; RV32-LABEL: load_factor2_v3:
12 ; RV32:       # %bb.0:
13 ; RV32-NEXT:    vsetivli zero, 6, e32, m2, ta, ma
14 ; RV32-NEXT:    vle32.v v10, (a0)
15 ; RV32-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
16 ; RV32-NEXT:    vslidedown.vi v9, v10, 2
17 ; RV32-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
18 ; RV32-NEXT:    vwaddu.vv v8, v10, v9
19 ; RV32-NEXT:    li a0, -1
20 ; RV32-NEXT:    vwmaccu.vx v8, a0, v9
21 ; RV32-NEXT:    vmv.v.i v0, 4
22 ; RV32-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
23 ; RV32-NEXT:    vslidedown.vi v12, v10, 4
24 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
25 ; RV32-NEXT:    vrgather.vi v8, v12, 0, v0.t
26 ; RV32-NEXT:    vid.v v9
27 ; RV32-NEXT:    vadd.vv v9, v9, v9
28 ; RV32-NEXT:    vadd.vi v11, v9, 1
29 ; RV32-NEXT:    vrgather.vv v9, v10, v11
30 ; RV32-NEXT:    vrgather.vi v9, v12, 1, v0.t
31 ; RV32-NEXT:    ret
33 ; RV64-LABEL: load_factor2_v3:
34 ; RV64:       # %bb.0:
35 ; RV64-NEXT:    vsetivli zero, 6, e32, m2, ta, ma
36 ; RV64-NEXT:    vle32.v v10, (a0)
37 ; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
38 ; RV64-NEXT:    vid.v v8
39 ; RV64-NEXT:    vadd.vv v8, v8, v8
40 ; RV64-NEXT:    vadd.vi v8, v8, 1
41 ; RV64-NEXT:    vrgather.vv v9, v10, v8
42 ; RV64-NEXT:    vmv.v.i v0, 4
43 ; RV64-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
44 ; RV64-NEXT:    vslidedown.vi v12, v10, 4
45 ; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
46 ; RV64-NEXT:    vrgather.vi v9, v12, 1, v0.t
47 ; RV64-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
48 ; RV64-NEXT:    vslidedown.vi v11, v10, 2
49 ; RV64-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma
50 ; RV64-NEXT:    vwaddu.vv v8, v10, v11
51 ; RV64-NEXT:    li a0, -1
52 ; RV64-NEXT:    vwmaccu.vx v8, a0, v11
53 ; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
54 ; RV64-NEXT:    vrgather.vi v8, v12, 0, v0.t
55 ; RV64-NEXT:    ret
56   %interleaved.vec = load <6 x i32>, ptr %ptr
57   %v0 = shufflevector <6 x i32> %interleaved.vec, <6 x i32> poison, <3 x i32> <i32 0, i32 2, i32 4>
58   %v1 = shufflevector <6 x i32> %interleaved.vec, <6 x i32> poison, <3 x i32> <i32 1, i32 3, i32 5>
59   %res0 = insertvalue {<3 x i32>, <3 x i32>} undef, <3 x i32> %v0, 0
60   %res1 = insertvalue {<3 x i32>, <3 x i32>} %res0, <3 x i32> %v1, 1
61   ret {<3 x i32>, <3 x i32>} %res1
64 define {<4 x i32>, <4 x i32>} @load_factor2(ptr %ptr) {
65 ; CHECK-LABEL: load_factor2:
66 ; CHECK:       # %bb.0:
67 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
68 ; CHECK-NEXT:    vlseg2e32.v v8, (a0)
69 ; CHECK-NEXT:    ret
70   %interleaved.vec = load <8 x i32>, ptr %ptr
71   %v0 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 0, i32 2, i32 4, i32 6>
72   %v1 = shufflevector <8 x i32> %interleaved.vec, <8 x i32> poison, <4 x i32> <i32 1, i32 3, i32 5, i32 7>
73   %res0 = insertvalue {<4 x i32>, <4 x i32>} undef, <4 x i32> %v0, 0
74   %res1 = insertvalue {<4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1
75   ret {<4 x i32>, <4 x i32>} %res1
79 define {<4 x i32>, <4 x i32>, <4 x i32>} @load_factor3(ptr %ptr) {
80 ; CHECK-LABEL: load_factor3:
81 ; CHECK:       # %bb.0:
82 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
83 ; CHECK-NEXT:    vlseg3e32.v v8, (a0)
84 ; CHECK-NEXT:    ret
85   %interleaved.vec = load <12 x i32>, ptr %ptr
86   %v0 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 0, i32 3, i32 6, i32 9>
87   %v1 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 1, i32 4, i32 7, i32 10>
88   %v2 = shufflevector <12 x i32> %interleaved.vec, <12 x i32> poison, <4 x i32> <i32 2, i32 5, i32 8, i32 11>
89   %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} undef, <4 x i32> %v0, 0
90   %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1
91   %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2
92   ret {<4 x i32>, <4 x i32>, <4 x i32>} %res2
95 define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @load_factor4(ptr %ptr) {
96 ; CHECK-LABEL: load_factor4:
97 ; CHECK:       # %bb.0:
98 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
99 ; CHECK-NEXT:    vlseg4e32.v v8, (a0)
100 ; CHECK-NEXT:    ret
101   %interleaved.vec = load <16 x i32>, ptr %ptr
102   %v0 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 0, i32 4, i32 8, i32 12>
103   %v1 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 1, i32 5, i32 9, i32 13>
104   %v2 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 2, i32 6, i32 10, i32 14>
105   %v3 = shufflevector <16 x i32> %interleaved.vec, <16 x i32> poison, <4 x i32> <i32 3, i32 7, i32 11, i32 15>
106   %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} undef, <4 x i32> %v0, 0
107   %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1
108   %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2
109   %res3 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res2, <4 x i32> %v3, 3
110   ret {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res3
113 define {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} @load_factor5(ptr %ptr) {
114 ; CHECK-LABEL: load_factor5:
115 ; CHECK:       # %bb.0:
116 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
117 ; CHECK-NEXT:    vlseg5e32.v v8, (a0)
118 ; CHECK-NEXT:    ret
119   %interleaved.vec = load <20 x i32>, ptr %ptr
120   %v0 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 0, i32 5, i32 10, i32 15>
121   %v1 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 1, i32 6, i32 11, i32 16>
122   %v2 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 2, i32 7, i32 12, i32 17>
123   %v3 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 3, i32 8, i32 13, i32 18>
124   %v4 = shufflevector <20 x i32> %interleaved.vec, <20 x i32> poison, <4 x i32> <i32 4, i32 9, i32 14, i32 19>
125   %res0 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} undef, <4 x i32> %v0, 0
126   %res1 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res0, <4 x i32> %v1, 1
127   %res2 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res1, <4 x i32> %v2, 2
128   %res3 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res2, <4 x i32> %v3, 3
129   %res4 = insertvalue {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res3, <4 x i32> %v4, 4
130   ret {<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>} %res4
133 define {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} @load_factor6(ptr %ptr) {
134 ; CHECK-LABEL: load_factor6:
135 ; CHECK:       # %bb.0:
136 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
137 ; CHECK-NEXT:    vlseg6e16.v v8, (a0)
138 ; CHECK-NEXT:    ret
139   %interleaved.vec = load <12 x i16>, ptr %ptr
140   %v0 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 0, i32 6>
141   %v1 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 1, i32 7>
142   %v2 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 2, i32 8>
143   %v3 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 3, i32 9>
144   %v4 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 4, i32 10>
145   %v5 = shufflevector <12 x i16> %interleaved.vec, <12 x i16> poison, <2 x i32> <i32 5, i32 11>
146   %res0 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} undef, <2 x i16> %v0, 0
147   %res1 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res0, <2 x i16> %v1, 1
148   %res2 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res1, <2 x i16> %v2, 2
149   %res3 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res2, <2 x i16> %v3, 3
150   %res4 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res3, <2 x i16> %v4, 4
151   %res5 = insertvalue {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res4, <2 x i16> %v5, 5
152   ret {<2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>, <2 x i16>} %res5
155 ; LMUL * NF is > 8 here and so shouldn't be lowered to a vlseg
156 define {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} @load_factor6_too_big(ptr %ptr) {
157 ; RV32-LABEL: load_factor6_too_big:
158 ; RV32:       # %bb.0:
159 ; RV32-NEXT:    addi sp, sp, -16
160 ; RV32-NEXT:    .cfi_def_cfa_offset 16
161 ; RV32-NEXT:    csrr a2, vlenb
162 ; RV32-NEXT:    li a3, 80
163 ; RV32-NEXT:    mul a2, a2, a3
164 ; RV32-NEXT:    sub sp, sp, a2
165 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0xd0, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 80 * vlenb
166 ; RV32-NEXT:    addi a3, a1, 256
167 ; RV32-NEXT:    li a2, 32
168 ; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
169 ; RV32-NEXT:    vle32.v v16, (a3)
170 ; RV32-NEXT:    csrr a3, vlenb
171 ; RV32-NEXT:    slli a3, a3, 6
172 ; RV32-NEXT:    add a3, sp, a3
173 ; RV32-NEXT:    addi a3, a3, 16
174 ; RV32-NEXT:    vs8r.v v16, (a3) # Unknown-size Folded Spill
175 ; RV32-NEXT:    addi a3, a1, 128
176 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
177 ; RV32-NEXT:    vslideup.vi v8, v16, 4
178 ; RV32-NEXT:    csrr a4, vlenb
179 ; RV32-NEXT:    li a5, 40
180 ; RV32-NEXT:    mul a4, a4, a5
181 ; RV32-NEXT:    add a4, sp, a4
182 ; RV32-NEXT:    addi a4, a4, 16
183 ; RV32-NEXT:    vs4r.v v8, (a4) # Unknown-size Folded Spill
184 ; RV32-NEXT:    lui a4, 12
185 ; RV32-NEXT:    vmv.s.x v0, a4
186 ; RV32-NEXT:    vsetivli zero, 16, e32, m8, ta, ma
187 ; RV32-NEXT:    vslidedown.vi v16, v16, 16
188 ; RV32-NEXT:    csrr a4, vlenb
189 ; RV32-NEXT:    li a5, 56
190 ; RV32-NEXT:    mul a4, a4, a5
191 ; RV32-NEXT:    add a4, sp, a4
192 ; RV32-NEXT:    addi a4, a4, 16
193 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
194 ; RV32-NEXT:    vmv1r.v v3, v0
195 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
196 ; RV32-NEXT:    vslideup.vi v8, v16, 10, v0.t
197 ; RV32-NEXT:    csrr a4, vlenb
198 ; RV32-NEXT:    li a5, 44
199 ; RV32-NEXT:    mul a4, a4, a5
200 ; RV32-NEXT:    add a4, sp, a4
201 ; RV32-NEXT:    addi a4, a4, 16
202 ; RV32-NEXT:    vs4r.v v8, (a4) # Unknown-size Folded Spill
203 ; RV32-NEXT:    lui a4, %hi(.LCPI6_0)
204 ; RV32-NEXT:    addi a4, a4, %lo(.LCPI6_0)
205 ; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, mu
206 ; RV32-NEXT:    vle16.v v8, (a4)
207 ; RV32-NEXT:    csrr a4, vlenb
208 ; RV32-NEXT:    slli a4, a4, 5
209 ; RV32-NEXT:    add a4, sp, a4
210 ; RV32-NEXT:    addi a4, a4, 16
211 ; RV32-NEXT:    vs4r.v v8, (a4) # Unknown-size Folded Spill
212 ; RV32-NEXT:    lui a4, %hi(.LCPI6_1)
213 ; RV32-NEXT:    addi a4, a4, %lo(.LCPI6_1)
214 ; RV32-NEXT:    lui a5, 1
215 ; RV32-NEXT:    vle16.v v8, (a4)
216 ; RV32-NEXT:    csrr a4, vlenb
217 ; RV32-NEXT:    li a6, 24
218 ; RV32-NEXT:    mul a4, a4, a6
219 ; RV32-NEXT:    add a4, sp, a4
220 ; RV32-NEXT:    addi a4, a4, 16
221 ; RV32-NEXT:    vs4r.v v8, (a4) # Unknown-size Folded Spill
222 ; RV32-NEXT:    vle32.v v8, (a1)
223 ; RV32-NEXT:    csrr a1, vlenb
224 ; RV32-NEXT:    li a4, 72
225 ; RV32-NEXT:    mul a1, a1, a4
226 ; RV32-NEXT:    add a1, sp, a1
227 ; RV32-NEXT:    addi a1, a1, 16
228 ; RV32-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
229 ; RV32-NEXT:    vle32.v v24, (a3)
230 ; RV32-NEXT:    csrr a1, vlenb
231 ; RV32-NEXT:    li a3, 48
232 ; RV32-NEXT:    mul a1, a1, a3
233 ; RV32-NEXT:    add a1, sp, a1
234 ; RV32-NEXT:    addi a1, a1, 16
235 ; RV32-NEXT:    vs8r.v v24, (a1) # Unknown-size Folded Spill
236 ; RV32-NEXT:    addi a1, a5, -64
237 ; RV32-NEXT:    vmv.s.x v0, a1
238 ; RV32-NEXT:    csrr a1, vlenb
239 ; RV32-NEXT:    li a3, 36
240 ; RV32-NEXT:    mul a1, a1, a3
241 ; RV32-NEXT:    add a1, sp, a1
242 ; RV32-NEXT:    addi a1, a1, 16
243 ; RV32-NEXT:    vs1r.v v0, (a1) # Unknown-size Folded Spill
244 ; RV32-NEXT:    csrr a1, vlenb
245 ; RV32-NEXT:    slli a1, a1, 5
246 ; RV32-NEXT:    add a1, sp, a1
247 ; RV32-NEXT:    addi a1, a1, 16
248 ; RV32-NEXT:    vl4r.v v4, (a1) # Unknown-size Folded Reload
249 ; RV32-NEXT:    vrgatherei16.vv v16, v8, v4
250 ; RV32-NEXT:    csrr a1, vlenb
251 ; RV32-NEXT:    li a3, 24
252 ; RV32-NEXT:    mul a1, a1, a3
253 ; RV32-NEXT:    add a1, sp, a1
254 ; RV32-NEXT:    addi a1, a1, 16
255 ; RV32-NEXT:    vl4r.v v8, (a1) # Unknown-size Folded Reload
256 ; RV32-NEXT:    vrgatherei16.vv v16, v24, v8, v0.t
257 ; RV32-NEXT:    csrr a1, vlenb
258 ; RV32-NEXT:    li a3, 44
259 ; RV32-NEXT:    mul a1, a1, a3
260 ; RV32-NEXT:    add a1, sp, a1
261 ; RV32-NEXT:    addi a1, a1, 16
262 ; RV32-NEXT:    vl4r.v v8, (a1) # Unknown-size Folded Reload
263 ; RV32-NEXT:    vsetivli zero, 12, e32, m4, tu, ma
264 ; RV32-NEXT:    vmv.v.v v8, v16
265 ; RV32-NEXT:    csrr a1, vlenb
266 ; RV32-NEXT:    li a3, 44
267 ; RV32-NEXT:    mul a1, a1, a3
268 ; RV32-NEXT:    add a1, sp, a1
269 ; RV32-NEXT:    addi a1, a1, 16
270 ; RV32-NEXT:    vs4r.v v8, (a1) # Unknown-size Folded Spill
271 ; RV32-NEXT:    csrr a1, vlenb
272 ; RV32-NEXT:    slli a1, a1, 6
273 ; RV32-NEXT:    add a1, sp, a1
274 ; RV32-NEXT:    addi a1, a1, 16
275 ; RV32-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
276 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
277 ; RV32-NEXT:    vslideup.vi v12, v8, 2
278 ; RV32-NEXT:    vmv1r.v v8, v3
279 ; RV32-NEXT:    csrr a1, vlenb
280 ; RV32-NEXT:    slli a1, a1, 4
281 ; RV32-NEXT:    add a1, sp, a1
282 ; RV32-NEXT:    addi a1, a1, 16
283 ; RV32-NEXT:    vs1r.v v3, (a1) # Unknown-size Folded Spill
284 ; RV32-NEXT:    vmv1r.v v0, v3
285 ; RV32-NEXT:    csrr a1, vlenb
286 ; RV32-NEXT:    li a3, 56
287 ; RV32-NEXT:    mul a1, a1, a3
288 ; RV32-NEXT:    add a1, sp, a1
289 ; RV32-NEXT:    addi a1, a1, 16
290 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
291 ; RV32-NEXT:    vslideup.vi v12, v16, 8, v0.t
292 ; RV32-NEXT:    lui a1, %hi(.LCPI6_2)
293 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_2)
294 ; RV32-NEXT:    lui a3, %hi(.LCPI6_3)
295 ; RV32-NEXT:    addi a3, a3, %lo(.LCPI6_3)
296 ; RV32-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
297 ; RV32-NEXT:    vle16.v v0, (a1)
298 ; RV32-NEXT:    vle16.v v4, (a3)
299 ; RV32-NEXT:    lui a1, %hi(.LCPI6_4)
300 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_4)
301 ; RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
302 ; RV32-NEXT:    vle16.v v10, (a1)
303 ; RV32-NEXT:    csrr a1, vlenb
304 ; RV32-NEXT:    li a3, 72
305 ; RV32-NEXT:    mul a1, a1, a3
306 ; RV32-NEXT:    add a1, sp, a1
307 ; RV32-NEXT:    addi a1, a1, 16
308 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
309 ; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, mu
310 ; RV32-NEXT:    vrgatherei16.vv v24, v16, v0
311 ; RV32-NEXT:    csrr a1, vlenb
312 ; RV32-NEXT:    li a3, 36
313 ; RV32-NEXT:    mul a1, a1, a3
314 ; RV32-NEXT:    add a1, sp, a1
315 ; RV32-NEXT:    addi a1, a1, 16
316 ; RV32-NEXT:    vl1r.v v0, (a1) # Unknown-size Folded Reload
317 ; RV32-NEXT:    csrr a1, vlenb
318 ; RV32-NEXT:    li a3, 48
319 ; RV32-NEXT:    mul a1, a1, a3
320 ; RV32-NEXT:    add a1, sp, a1
321 ; RV32-NEXT:    addi a1, a1, 16
322 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
323 ; RV32-NEXT:    vrgatherei16.vv v24, v16, v4, v0.t
324 ; RV32-NEXT:    vsetivli zero, 12, e32, m4, tu, ma
325 ; RV32-NEXT:    vmv.v.v v12, v24
326 ; RV32-NEXT:    csrr a1, vlenb
327 ; RV32-NEXT:    li a3, 36
328 ; RV32-NEXT:    mul a1, a1, a3
329 ; RV32-NEXT:    add a1, sp, a1
330 ; RV32-NEXT:    addi a1, a1, 16
331 ; RV32-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
332 ; RV32-NEXT:    csrr a1, vlenb
333 ; RV32-NEXT:    slli a1, a1, 6
334 ; RV32-NEXT:    add a1, sp, a1
335 ; RV32-NEXT:    addi a1, a1, 16
336 ; RV32-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
337 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
338 ; RV32-NEXT:    vrgatherei16.vv v12, v24, v10
339 ; RV32-NEXT:    vmv1r.v v0, v8
340 ; RV32-NEXT:    csrr a1, vlenb
341 ; RV32-NEXT:    li a3, 56
342 ; RV32-NEXT:    mul a1, a1, a3
343 ; RV32-NEXT:    add a1, sp, a1
344 ; RV32-NEXT:    addi a1, a1, 16
345 ; RV32-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
346 ; RV32-NEXT:    vslideup.vi v12, v24, 6, v0.t
347 ; RV32-NEXT:    csrr a1, vlenb
348 ; RV32-NEXT:    slli a1, a1, 5
349 ; RV32-NEXT:    add a1, sp, a1
350 ; RV32-NEXT:    addi a1, a1, 16
351 ; RV32-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
352 ; RV32-NEXT:    lui a1, %hi(.LCPI6_5)
353 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_5)
354 ; RV32-NEXT:    lui a3, %hi(.LCPI6_6)
355 ; RV32-NEXT:    addi a3, a3, %lo(.LCPI6_6)
356 ; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, mu
357 ; RV32-NEXT:    vle16.v v12, (a1)
358 ; RV32-NEXT:    vle16.v v8, (a3)
359 ; RV32-NEXT:    csrr a1, vlenb
360 ; RV32-NEXT:    li a3, 12
361 ; RV32-NEXT:    mul a1, a1, a3
362 ; RV32-NEXT:    add a1, sp, a1
363 ; RV32-NEXT:    addi a1, a1, 16
364 ; RV32-NEXT:    vs4r.v v8, (a1) # Unknown-size Folded Spill
365 ; RV32-NEXT:    li a1, 960
366 ; RV32-NEXT:    vmv.s.x v8, a1
367 ; RV32-NEXT:    csrr a1, vlenb
368 ; RV32-NEXT:    li a3, 72
369 ; RV32-NEXT:    mul a1, a1, a3
370 ; RV32-NEXT:    add a1, sp, a1
371 ; RV32-NEXT:    addi a1, a1, 16
372 ; RV32-NEXT:    vl8r.v v0, (a1) # Unknown-size Folded Reload
373 ; RV32-NEXT:    vrgatherei16.vv v24, v0, v12
374 ; RV32-NEXT:    vmv1r.v v3, v8
375 ; RV32-NEXT:    vmv1r.v v0, v8
376 ; RV32-NEXT:    csrr a1, vlenb
377 ; RV32-NEXT:    li a3, 12
378 ; RV32-NEXT:    mul a1, a1, a3
379 ; RV32-NEXT:    add a1, sp, a1
380 ; RV32-NEXT:    addi a1, a1, 16
381 ; RV32-NEXT:    vl4r.v v8, (a1) # Unknown-size Folded Reload
382 ; RV32-NEXT:    vrgatherei16.vv v24, v16, v8, v0.t
383 ; RV32-NEXT:    csrr a1, vlenb
384 ; RV32-NEXT:    li a3, 24
385 ; RV32-NEXT:    mul a1, a1, a3
386 ; RV32-NEXT:    add a1, sp, a1
387 ; RV32-NEXT:    addi a1, a1, 16
388 ; RV32-NEXT:    vs8r.v v24, (a1) # Unknown-size Folded Spill
389 ; RV32-NEXT:    lui a1, %hi(.LCPI6_7)
390 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_7)
391 ; RV32-NEXT:    lui a3, %hi(.LCPI6_8)
392 ; RV32-NEXT:    addi a3, a3, %lo(.LCPI6_8)
393 ; RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
394 ; RV32-NEXT:    vle16.v v8, (a1)
395 ; RV32-NEXT:    lui a1, %hi(.LCPI6_9)
396 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_9)
397 ; RV32-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
398 ; RV32-NEXT:    vle16.v v4, (a3)
399 ; RV32-NEXT:    vle16.v v12, (a1)
400 ; RV32-NEXT:    csrr a1, vlenb
401 ; RV32-NEXT:    slli a1, a1, 3
402 ; RV32-NEXT:    add a1, sp, a1
403 ; RV32-NEXT:    addi a1, a1, 16
404 ; RV32-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
405 ; RV32-NEXT:    csrr a1, vlenb
406 ; RV32-NEXT:    slli a1, a1, 6
407 ; RV32-NEXT:    add a1, sp, a1
408 ; RV32-NEXT:    addi a1, a1, 16
409 ; RV32-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
410 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
411 ; RV32-NEXT:    vrgatherei16.vv v12, v24, v8
412 ; RV32-NEXT:    csrr a1, vlenb
413 ; RV32-NEXT:    slli a1, a1, 4
414 ; RV32-NEXT:    add a1, sp, a1
415 ; RV32-NEXT:    addi a1, a1, 16
416 ; RV32-NEXT:    vl1r.v v0, (a1) # Unknown-size Folded Reload
417 ; RV32-NEXT:    csrr a1, vlenb
418 ; RV32-NEXT:    li a3, 56
419 ; RV32-NEXT:    mul a1, a1, a3
420 ; RV32-NEXT:    add a1, sp, a1
421 ; RV32-NEXT:    addi a1, a1, 16
422 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
423 ; RV32-NEXT:    vmv4r.v v24, v16
424 ; RV32-NEXT:    vslideup.vi v12, v16, 4, v0.t
425 ; RV32-NEXT:    csrr a1, vlenb
426 ; RV32-NEXT:    li a3, 12
427 ; RV32-NEXT:    mul a1, a1, a3
428 ; RV32-NEXT:    add a1, sp, a1
429 ; RV32-NEXT:    addi a1, a1, 16
430 ; RV32-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
431 ; RV32-NEXT:    csrr a1, vlenb
432 ; RV32-NEXT:    li a3, 72
433 ; RV32-NEXT:    mul a1, a1, a3
434 ; RV32-NEXT:    add a1, sp, a1
435 ; RV32-NEXT:    addi a1, a1, 16
436 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
437 ; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, mu
438 ; RV32-NEXT:    vrgatherei16.vv v8, v16, v4
439 ; RV32-NEXT:    vmv1r.v v0, v3
440 ; RV32-NEXT:    csrr a1, vlenb
441 ; RV32-NEXT:    li a3, 48
442 ; RV32-NEXT:    mul a1, a1, a3
443 ; RV32-NEXT:    add a1, sp, a1
444 ; RV32-NEXT:    addi a1, a1, 16
445 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
446 ; RV32-NEXT:    csrr a1, vlenb
447 ; RV32-NEXT:    slli a1, a1, 3
448 ; RV32-NEXT:    add a1, sp, a1
449 ; RV32-NEXT:    addi a1, a1, 16
450 ; RV32-NEXT:    vl4r.v v28, (a1) # Unknown-size Folded Reload
451 ; RV32-NEXT:    vrgatherei16.vv v8, v16, v28, v0.t
452 ; RV32-NEXT:    csrr a1, vlenb
453 ; RV32-NEXT:    slli a1, a1, 4
454 ; RV32-NEXT:    add a1, sp, a1
455 ; RV32-NEXT:    addi a1, a1, 16
456 ; RV32-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
457 ; RV32-NEXT:    lui a1, %hi(.LCPI6_10)
458 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_10)
459 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
460 ; RV32-NEXT:    vle16.v v12, (a1)
461 ; RV32-NEXT:    lui a1, 15
462 ; RV32-NEXT:    vmv.s.x v3, a1
463 ; RV32-NEXT:    csrr a1, vlenb
464 ; RV32-NEXT:    slli a1, a1, 6
465 ; RV32-NEXT:    add a1, sp, a1
466 ; RV32-NEXT:    addi a1, a1, 16
467 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
468 ; RV32-NEXT:    vslideup.vi v8, v16, 6
469 ; RV32-NEXT:    vmv1r.v v0, v3
470 ; RV32-NEXT:    vrgatherei16.vv v8, v24, v12, v0.t
471 ; RV32-NEXT:    csrr a1, vlenb
472 ; RV32-NEXT:    slli a1, a1, 2
473 ; RV32-NEXT:    add a1, sp, a1
474 ; RV32-NEXT:    addi a1, a1, 16
475 ; RV32-NEXT:    vs4r.v v8, (a1) # Unknown-size Folded Spill
476 ; RV32-NEXT:    lui a1, %hi(.LCPI6_11)
477 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_11)
478 ; RV32-NEXT:    lui a3, %hi(.LCPI6_12)
479 ; RV32-NEXT:    addi a3, a3, %lo(.LCPI6_12)
480 ; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, mu
481 ; RV32-NEXT:    vle16.v v24, (a1)
482 ; RV32-NEXT:    vle16.v v4, (a3)
483 ; RV32-NEXT:    li a1, 1008
484 ; RV32-NEXT:    vmv.s.x v0, a1
485 ; RV32-NEXT:    csrr a1, vlenb
486 ; RV32-NEXT:    slli a1, a1, 3
487 ; RV32-NEXT:    add a1, sp, a1
488 ; RV32-NEXT:    addi a1, a1, 16
489 ; RV32-NEXT:    vs1r.v v0, (a1) # Unknown-size Folded Spill
490 ; RV32-NEXT:    csrr a1, vlenb
491 ; RV32-NEXT:    li a3, 72
492 ; RV32-NEXT:    mul a1, a1, a3
493 ; RV32-NEXT:    add a1, sp, a1
494 ; RV32-NEXT:    addi a1, a1, 16
495 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
496 ; RV32-NEXT:    vrgatherei16.vv v8, v16, v24
497 ; RV32-NEXT:    csrr a1, vlenb
498 ; RV32-NEXT:    li a3, 48
499 ; RV32-NEXT:    mul a1, a1, a3
500 ; RV32-NEXT:    add a1, sp, a1
501 ; RV32-NEXT:    addi a1, a1, 16
502 ; RV32-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
503 ; RV32-NEXT:    vrgatherei16.vv v8, v16, v4, v0.t
504 ; RV32-NEXT:    csrr a1, vlenb
505 ; RV32-NEXT:    slli a1, a1, 6
506 ; RV32-NEXT:    add a1, sp, a1
507 ; RV32-NEXT:    addi a1, a1, 16
508 ; RV32-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
509 ; RV32-NEXT:    lui a1, %hi(.LCPI6_13)
510 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_13)
511 ; RV32-NEXT:    lui a3, %hi(.LCPI6_14)
512 ; RV32-NEXT:    addi a3, a3, %lo(.LCPI6_14)
513 ; RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
514 ; RV32-NEXT:    vle16.v v20, (a1)
515 ; RV32-NEXT:    lui a1, %hi(.LCPI6_15)
516 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI6_15)
517 ; RV32-NEXT:    vsetvli zero, a2, e16, m4, ta, ma
518 ; RV32-NEXT:    vle16.v v24, (a3)
519 ; RV32-NEXT:    vle16.v v8, (a1)
520 ; RV32-NEXT:    addi a1, sp, 16
521 ; RV32-NEXT:    vs4r.v v8, (a1) # Unknown-size Folded Spill
522 ; RV32-NEXT:    vmv1r.v v0, v3
523 ; RV32-NEXT:    csrr a1, vlenb
524 ; RV32-NEXT:    li a3, 40
525 ; RV32-NEXT:    mul a1, a1, a3
526 ; RV32-NEXT:    add a1, sp, a1
527 ; RV32-NEXT:    addi a1, a1, 16
528 ; RV32-NEXT:    vl4r.v v16, (a1) # Unknown-size Folded Reload
529 ; RV32-NEXT:    csrr a1, vlenb
530 ; RV32-NEXT:    li a3, 56
531 ; RV32-NEXT:    mul a1, a1, a3
532 ; RV32-NEXT:    add a1, sp, a1
533 ; RV32-NEXT:    addi a1, a1, 16
534 ; RV32-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
535 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
536 ; RV32-NEXT:    vrgatherei16.vv v16, v8, v20, v0.t
537 ; RV32-NEXT:    csrr a1, vlenb
538 ; RV32-NEXT:    slli a1, a1, 5
539 ; RV32-NEXT:    add a1, sp, a1
540 ; RV32-NEXT:    addi a1, a1, 16
541 ; RV32-NEXT:    vl4r.v v20, (a1) # Unknown-size Folded Reload
542 ; RV32-NEXT:    csrr a1, vlenb
543 ; RV32-NEXT:    li a3, 24
544 ; RV32-NEXT:    mul a1, a1, a3
545 ; RV32-NEXT:    add a1, sp, a1
546 ; RV32-NEXT:    addi a1, a1, 16
547 ; RV32-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
548 ; RV32-NEXT:    vsetivli zero, 10, e32, m4, tu, ma
549 ; RV32-NEXT:    vmv.v.v v20, v8
550 ; RV32-NEXT:    csrr a1, vlenb
551 ; RV32-NEXT:    li a3, 72
552 ; RV32-NEXT:    mul a1, a1, a3
553 ; RV32-NEXT:    add a1, sp, a1
554 ; RV32-NEXT:    addi a1, a1, 16
555 ; RV32-NEXT:    vl8r.v v0, (a1) # Unknown-size Folded Reload
556 ; RV32-NEXT:    vsetvli zero, a2, e32, m8, ta, mu
557 ; RV32-NEXT:    vrgatherei16.vv v8, v0, v24
558 ; RV32-NEXT:    csrr a1, vlenb
559 ; RV32-NEXT:    slli a1, a1, 3
560 ; RV32-NEXT:    add a1, sp, a1
561 ; RV32-NEXT:    addi a1, a1, 16
562 ; RV32-NEXT:    vl1r.v v0, (a1) # Unknown-size Folded Reload
563 ; RV32-NEXT:    csrr a1, vlenb
564 ; RV32-NEXT:    li a2, 48
565 ; RV32-NEXT:    mul a1, a1, a2
566 ; RV32-NEXT:    add a1, sp, a1
567 ; RV32-NEXT:    addi a1, a1, 16
568 ; RV32-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
569 ; RV32-NEXT:    addi a1, sp, 16
570 ; RV32-NEXT:    vl4r.v v4, (a1) # Unknown-size Folded Reload
571 ; RV32-NEXT:    vrgatherei16.vv v8, v24, v4, v0.t
572 ; RV32-NEXT:    csrr a1, vlenb
573 ; RV32-NEXT:    slli a1, a1, 4
574 ; RV32-NEXT:    add a1, sp, a1
575 ; RV32-NEXT:    addi a1, a1, 16
576 ; RV32-NEXT:    vl8r.v v0, (a1) # Unknown-size Folded Reload
577 ; RV32-NEXT:    csrr a1, vlenb
578 ; RV32-NEXT:    li a2, 12
579 ; RV32-NEXT:    mul a1, a1, a2
580 ; RV32-NEXT:    add a1, sp, a1
581 ; RV32-NEXT:    addi a1, a1, 16
582 ; RV32-NEXT:    vl4r.v v24, (a1) # Unknown-size Folded Reload
583 ; RV32-NEXT:    vsetivli zero, 10, e32, m4, tu, ma
584 ; RV32-NEXT:    vmv.v.v v24, v0
585 ; RV32-NEXT:    csrr a1, vlenb
586 ; RV32-NEXT:    slli a1, a1, 6
587 ; RV32-NEXT:    add a1, sp, a1
588 ; RV32-NEXT:    addi a1, a1, 16
589 ; RV32-NEXT:    vl8r.v v0, (a1) # Unknown-size Folded Reload
590 ; RV32-NEXT:    csrr a1, vlenb
591 ; RV32-NEXT:    slli a1, a1, 2
592 ; RV32-NEXT:    add a1, sp, a1
593 ; RV32-NEXT:    addi a1, a1, 16
594 ; RV32-NEXT:    vl4r.v v28, (a1) # Unknown-size Folded Reload
595 ; RV32-NEXT:    vmv.v.v v28, v0
596 ; RV32-NEXT:    vmv.v.v v16, v8
597 ; RV32-NEXT:    addi a1, a0, 320
598 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
599 ; RV32-NEXT:    vse32.v v16, (a1)
600 ; RV32-NEXT:    addi a1, a0, 256
601 ; RV32-NEXT:    vse32.v v28, (a1)
602 ; RV32-NEXT:    addi a1, a0, 192
603 ; RV32-NEXT:    vse32.v v24, (a1)
604 ; RV32-NEXT:    addi a1, a0, 128
605 ; RV32-NEXT:    vse32.v v20, (a1)
606 ; RV32-NEXT:    addi a1, a0, 64
607 ; RV32-NEXT:    csrr a2, vlenb
608 ; RV32-NEXT:    li a3, 36
609 ; RV32-NEXT:    mul a2, a2, a3
610 ; RV32-NEXT:    add a2, sp, a2
611 ; RV32-NEXT:    addi a2, a2, 16
612 ; RV32-NEXT:    vl4r.v v8, (a2) # Unknown-size Folded Reload
613 ; RV32-NEXT:    vse32.v v8, (a1)
614 ; RV32-NEXT:    csrr a1, vlenb
615 ; RV32-NEXT:    li a2, 44
616 ; RV32-NEXT:    mul a1, a1, a2
617 ; RV32-NEXT:    add a1, sp, a1
618 ; RV32-NEXT:    addi a1, a1, 16
619 ; RV32-NEXT:    vl4r.v v8, (a1) # Unknown-size Folded Reload
620 ; RV32-NEXT:    vse32.v v8, (a0)
621 ; RV32-NEXT:    csrr a0, vlenb
622 ; RV32-NEXT:    li a1, 80
623 ; RV32-NEXT:    mul a0, a0, a1
624 ; RV32-NEXT:    add sp, sp, a0
625 ; RV32-NEXT:    addi sp, sp, 16
626 ; RV32-NEXT:    ret
628 ; RV64-LABEL: load_factor6_too_big:
629 ; RV64:       # %bb.0:
630 ; RV64-NEXT:    addi sp, sp, -16
631 ; RV64-NEXT:    .cfi_def_cfa_offset 16
632 ; RV64-NEXT:    csrr a2, vlenb
633 ; RV64-NEXT:    li a3, 74
634 ; RV64-NEXT:    mul a2, a2, a3
635 ; RV64-NEXT:    sub sp, sp, a2
636 ; RV64-NEXT:    .cfi_escape 0x0f, 0x0e, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0xca, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 74 * vlenb
637 ; RV64-NEXT:    addi a2, a1, 256
638 ; RV64-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
639 ; RV64-NEXT:    vle64.v v16, (a2)
640 ; RV64-NEXT:    csrr a2, vlenb
641 ; RV64-NEXT:    li a3, 25
642 ; RV64-NEXT:    mul a2, a2, a3
643 ; RV64-NEXT:    add a2, sp, a2
644 ; RV64-NEXT:    addi a2, a2, 16
645 ; RV64-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
646 ; RV64-NEXT:    addi a2, a1, 128
647 ; RV64-NEXT:    vle64.v v8, (a1)
648 ; RV64-NEXT:    csrr a1, vlenb
649 ; RV64-NEXT:    slli a3, a1, 6
650 ; RV64-NEXT:    add a1, a3, a1
651 ; RV64-NEXT:    add a1, sp, a1
652 ; RV64-NEXT:    addi a1, a1, 16
653 ; RV64-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
654 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
655 ; RV64-NEXT:    vrgather.vi v12, v16, 4
656 ; RV64-NEXT:    li a1, 128
657 ; RV64-NEXT:    vmv.s.x v8, a1
658 ; RV64-NEXT:    vsetivli zero, 8, e64, m8, ta, ma
659 ; RV64-NEXT:    vslidedown.vi v16, v16, 8
660 ; RV64-NEXT:    csrr a1, vlenb
661 ; RV64-NEXT:    li a3, 49
662 ; RV64-NEXT:    mul a1, a1, a3
663 ; RV64-NEXT:    add a1, sp, a1
664 ; RV64-NEXT:    addi a1, a1, 16
665 ; RV64-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
666 ; RV64-NEXT:    vmv1r.v v0, v8
667 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
668 ; RV64-NEXT:    vrgather.vi v12, v16, 2, v0.t
669 ; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
670 ; RV64-NEXT:    vid.v v10
671 ; RV64-NEXT:    li a1, 6
672 ; RV64-NEXT:    vmul.vx v2, v10, a1
673 ; RV64-NEXT:    li a1, 56
674 ; RV64-NEXT:    vle64.v v16, (a2)
675 ; RV64-NEXT:    csrr a2, vlenb
676 ; RV64-NEXT:    li a3, 57
677 ; RV64-NEXT:    mul a2, a2, a3
678 ; RV64-NEXT:    add a2, sp, a2
679 ; RV64-NEXT:    addi a2, a2, 16
680 ; RV64-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
681 ; RV64-NEXT:    vmv.s.x v7, a1
682 ; RV64-NEXT:    vadd.vi v10, v2, -16
683 ; RV64-NEXT:    csrr a1, vlenb
684 ; RV64-NEXT:    slli a2, a1, 6
685 ; RV64-NEXT:    add a1, a2, a1
686 ; RV64-NEXT:    add a1, sp, a1
687 ; RV64-NEXT:    addi a1, a1, 16
688 ; RV64-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
689 ; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
690 ; RV64-NEXT:    vrgatherei16.vv v16, v24, v2
691 ; RV64-NEXT:    vmv1r.v v0, v7
692 ; RV64-NEXT:    csrr a1, vlenb
693 ; RV64-NEXT:    li a2, 57
694 ; RV64-NEXT:    mul a1, a1, a2
695 ; RV64-NEXT:    add a1, sp, a1
696 ; RV64-NEXT:    addi a1, a1, 16
697 ; RV64-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
698 ; RV64-NEXT:    vrgatherei16.vv v16, v24, v10, v0.t
699 ; RV64-NEXT:    vsetivli zero, 6, e64, m4, tu, ma
700 ; RV64-NEXT:    vmv.v.v v12, v16
701 ; RV64-NEXT:    csrr a1, vlenb
702 ; RV64-NEXT:    li a2, 21
703 ; RV64-NEXT:    mul a1, a1, a2
704 ; RV64-NEXT:    add a1, sp, a1
705 ; RV64-NEXT:    addi a1, a1, 16
706 ; RV64-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
707 ; RV64-NEXT:    csrr a1, vlenb
708 ; RV64-NEXT:    li a2, 25
709 ; RV64-NEXT:    mul a1, a1, a2
710 ; RV64-NEXT:    add a1, sp, a1
711 ; RV64-NEXT:    addi a1, a1, 16
712 ; RV64-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
713 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
714 ; RV64-NEXT:    vrgather.vi v12, v16, 5
715 ; RV64-NEXT:    vmv1r.v v0, v8
716 ; RV64-NEXT:    vmv1r.v v6, v8
717 ; RV64-NEXT:    csrr a1, vlenb
718 ; RV64-NEXT:    li a2, 49
719 ; RV64-NEXT:    mul a1, a1, a2
720 ; RV64-NEXT:    add a1, sp, a1
721 ; RV64-NEXT:    addi a1, a1, 16
722 ; RV64-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
723 ; RV64-NEXT:    vrgather.vi v12, v16, 3, v0.t
724 ; RV64-NEXT:    vmv.v.v v28, v12
725 ; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
726 ; RV64-NEXT:    vadd.vi v24, v2, 1
727 ; RV64-NEXT:    vadd.vi v26, v2, -15
728 ; RV64-NEXT:    csrr a1, vlenb
729 ; RV64-NEXT:    slli a2, a1, 6
730 ; RV64-NEXT:    add a1, a2, a1
731 ; RV64-NEXT:    add a1, sp, a1
732 ; RV64-NEXT:    addi a1, a1, 16
733 ; RV64-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
734 ; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
735 ; RV64-NEXT:    vrgatherei16.vv v16, v8, v24
736 ; RV64-NEXT:    vmv1r.v v0, v7
737 ; RV64-NEXT:    csrr a1, vlenb
738 ; RV64-NEXT:    li a2, 57
739 ; RV64-NEXT:    mul a1, a1, a2
740 ; RV64-NEXT:    add a1, sp, a1
741 ; RV64-NEXT:    addi a1, a1, 16
742 ; RV64-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
743 ; RV64-NEXT:    vrgatherei16.vv v16, v8, v26, v0.t
744 ; RV64-NEXT:    vsetivli zero, 6, e64, m4, tu, ma
745 ; RV64-NEXT:    vmv.v.v v28, v16
746 ; RV64-NEXT:    csrr a1, vlenb
747 ; RV64-NEXT:    slli a2, a1, 4
748 ; RV64-NEXT:    add a1, a2, a1
749 ; RV64-NEXT:    add a1, sp, a1
750 ; RV64-NEXT:    addi a1, a1, 16
751 ; RV64-NEXT:    vs4r.v v28, (a1) # Unknown-size Folded Spill
752 ; RV64-NEXT:    lui a1, 16
753 ; RV64-NEXT:    addi a1, a1, 7
754 ; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
755 ; RV64-NEXT:    vmv.v.i v9, 6
756 ; RV64-NEXT:    vmv.v.x v10, a1
757 ; RV64-NEXT:    csrr a1, vlenb
758 ; RV64-NEXT:    li a2, 25
759 ; RV64-NEXT:    mul a1, a1, a2
760 ; RV64-NEXT:    add a1, sp, a1
761 ; RV64-NEXT:    addi a1, a1, 16
762 ; RV64-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
763 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
764 ; RV64-NEXT:    vrgatherei16.vv v12, v16, v9
765 ; RV64-NEXT:    csrr a1, vlenb
766 ; RV64-NEXT:    li a2, 45
767 ; RV64-NEXT:    mul a1, a1, a2
768 ; RV64-NEXT:    add a1, sp, a1
769 ; RV64-NEXT:    addi a1, a1, 16
770 ; RV64-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
771 ; RV64-NEXT:    vrgatherei16.vv v12, v16, v10
772 ; RV64-NEXT:    csrr a1, vlenb
773 ; RV64-NEXT:    li a2, 41
774 ; RV64-NEXT:    mul a1, a1, a2
775 ; RV64-NEXT:    add a1, sp, a1
776 ; RV64-NEXT:    addi a1, a1, 16
777 ; RV64-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
778 ; RV64-NEXT:    vmv4r.v v8, v16
779 ; RV64-NEXT:    vrgather.vi v12, v16, 2
780 ; RV64-NEXT:    csrr a1, vlenb
781 ; RV64-NEXT:    li a2, 37
782 ; RV64-NEXT:    mul a1, a1, a2
783 ; RV64-NEXT:    add a1, sp, a1
784 ; RV64-NEXT:    addi a1, a1, 16
785 ; RV64-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
786 ; RV64-NEXT:    vrgather.vi v12, v16, 3
787 ; RV64-NEXT:    csrr a1, vlenb
788 ; RV64-NEXT:    slli a2, a1, 5
789 ; RV64-NEXT:    add a1, a2, a1
790 ; RV64-NEXT:    add a1, sp, a1
791 ; RV64-NEXT:    addi a1, a1, 16
792 ; RV64-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
793 ; RV64-NEXT:    li a1, 24
794 ; RV64-NEXT:    vmv.s.x v1, a1
795 ; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
796 ; RV64-NEXT:    vadd.vi v24, v2, 2
797 ; RV64-NEXT:    vadd.vi v4, v2, -14
798 ; RV64-NEXT:    csrr a1, vlenb
799 ; RV64-NEXT:    slli a2, a1, 6
800 ; RV64-NEXT:    add a1, a2, a1
801 ; RV64-NEXT:    add a1, sp, a1
802 ; RV64-NEXT:    addi a1, a1, 16
803 ; RV64-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
804 ; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
805 ; RV64-NEXT:    vrgatherei16.vv v8, v16, v24
806 ; RV64-NEXT:    vmv1r.v v0, v1
807 ; RV64-NEXT:    csrr a1, vlenb
808 ; RV64-NEXT:    li a2, 57
809 ; RV64-NEXT:    mul a1, a1, a2
810 ; RV64-NEXT:    add a1, sp, a1
811 ; RV64-NEXT:    addi a1, a1, 16
812 ; RV64-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
813 ; RV64-NEXT:    vrgatherei16.vv v8, v24, v4, v0.t
814 ; RV64-NEXT:    csrr a1, vlenb
815 ; RV64-NEXT:    li a2, 25
816 ; RV64-NEXT:    mul a1, a1, a2
817 ; RV64-NEXT:    add a1, sp, a1
818 ; RV64-NEXT:    addi a1, a1, 16
819 ; RV64-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
820 ; RV64-NEXT:    vmv1r.v v0, v6
821 ; RV64-NEXT:    csrr a1, vlenb
822 ; RV64-NEXT:    li a2, 49
823 ; RV64-NEXT:    mul a1, a1, a2
824 ; RV64-NEXT:    add a1, sp, a1
825 ; RV64-NEXT:    addi a1, a1, 16
826 ; RV64-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
827 ; RV64-NEXT:    csrr a1, vlenb
828 ; RV64-NEXT:    li a2, 45
829 ; RV64-NEXT:    mul a1, a1, a2
830 ; RV64-NEXT:    add a1, sp, a1
831 ; RV64-NEXT:    addi a1, a1, 16
832 ; RV64-NEXT:    vl4r.v v20, (a1) # Unknown-size Folded Reload
833 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
834 ; RV64-NEXT:    vrgather.vi v20, v16, 4, v0.t
835 ; RV64-NEXT:    csrr a1, vlenb
836 ; RV64-NEXT:    li a2, 45
837 ; RV64-NEXT:    mul a1, a1, a2
838 ; RV64-NEXT:    add a1, sp, a1
839 ; RV64-NEXT:    addi a1, a1, 16
840 ; RV64-NEXT:    vs4r.v v20, (a1) # Unknown-size Folded Spill
841 ; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
842 ; RV64-NEXT:    vadd.vi v4, v2, 3
843 ; RV64-NEXT:    vadd.vi v8, v2, -13
844 ; RV64-NEXT:    csrr a1, vlenb
845 ; RV64-NEXT:    add a1, sp, a1
846 ; RV64-NEXT:    addi a1, a1, 16
847 ; RV64-NEXT:    vs2r.v v8, (a1) # Unknown-size Folded Spill
848 ; RV64-NEXT:    csrr a1, vlenb
849 ; RV64-NEXT:    slli a2, a1, 6
850 ; RV64-NEXT:    add a1, a2, a1
851 ; RV64-NEXT:    add a1, sp, a1
852 ; RV64-NEXT:    addi a1, a1, 16
853 ; RV64-NEXT:    vl8r.v v16, (a1) # Unknown-size Folded Reload
854 ; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
855 ; RV64-NEXT:    vrgatherei16.vv v8, v16, v4
856 ; RV64-NEXT:    vmv1r.v v0, v1
857 ; RV64-NEXT:    csrr a1, vlenb
858 ; RV64-NEXT:    add a1, sp, a1
859 ; RV64-NEXT:    addi a1, a1, 16
860 ; RV64-NEXT:    vl2r.v v16, (a1) # Unknown-size Folded Reload
861 ; RV64-NEXT:    vrgatherei16.vv v8, v24, v16, v0.t
862 ; RV64-NEXT:    csrr a1, vlenb
863 ; RV64-NEXT:    slli a2, a1, 3
864 ; RV64-NEXT:    add a1, a2, a1
865 ; RV64-NEXT:    add a1, sp, a1
866 ; RV64-NEXT:    addi a1, a1, 16
867 ; RV64-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
868 ; RV64-NEXT:    vmv1r.v v0, v6
869 ; RV64-NEXT:    csrr a1, vlenb
870 ; RV64-NEXT:    li a2, 49
871 ; RV64-NEXT:    mul a1, a1, a2
872 ; RV64-NEXT:    add a1, sp, a1
873 ; RV64-NEXT:    addi a1, a1, 16
874 ; RV64-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
875 ; RV64-NEXT:    csrr a1, vlenb
876 ; RV64-NEXT:    li a2, 41
877 ; RV64-NEXT:    mul a1, a1, a2
878 ; RV64-NEXT:    add a1, sp, a1
879 ; RV64-NEXT:    addi a1, a1, 16
880 ; RV64-NEXT:    vl4r.v v8, (a1) # Unknown-size Folded Reload
881 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
882 ; RV64-NEXT:    vrgather.vi v8, v24, 5, v0.t
883 ; RV64-NEXT:    csrr a1, vlenb
884 ; RV64-NEXT:    li a2, 41
885 ; RV64-NEXT:    mul a1, a1, a2
886 ; RV64-NEXT:    add a1, sp, a1
887 ; RV64-NEXT:    addi a1, a1, 16
888 ; RV64-NEXT:    vs4r.v v8, (a1) # Unknown-size Folded Spill
889 ; RV64-NEXT:    lui a1, 96
890 ; RV64-NEXT:    li a2, 192
891 ; RV64-NEXT:    vmv.s.x v28, a2
892 ; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
893 ; RV64-NEXT:    vmv.v.x v8, a1
894 ; RV64-NEXT:    vmv1r.v v0, v28
895 ; RV64-NEXT:    csrr a1, vlenb
896 ; RV64-NEXT:    li a2, 37
897 ; RV64-NEXT:    mul a1, a1, a2
898 ; RV64-NEXT:    add a1, sp, a1
899 ; RV64-NEXT:    addi a1, a1, 16
900 ; RV64-NEXT:    vl4r.v v12, (a1) # Unknown-size Folded Reload
901 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
902 ; RV64-NEXT:    vrgatherei16.vv v12, v24, v8, v0.t
903 ; RV64-NEXT:    csrr a1, vlenb
904 ; RV64-NEXT:    li a2, 37
905 ; RV64-NEXT:    mul a1, a1, a2
906 ; RV64-NEXT:    add a1, sp, a1
907 ; RV64-NEXT:    addi a1, a1, 16
908 ; RV64-NEXT:    vs4r.v v12, (a1) # Unknown-size Folded Spill
909 ; RV64-NEXT:    li a1, 28
910 ; RV64-NEXT:    vmv.s.x v0, a1
911 ; RV64-NEXT:    addi a1, sp, 16
912 ; RV64-NEXT:    vs1r.v v0, (a1) # Unknown-size Folded Spill
913 ; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
914 ; RV64-NEXT:    vadd.vi v30, v2, 4
915 ; RV64-NEXT:    vadd.vi v6, v2, -12
916 ; RV64-NEXT:    csrr a1, vlenb
917 ; RV64-NEXT:    slli a2, a1, 6
918 ; RV64-NEXT:    add a1, a2, a1
919 ; RV64-NEXT:    add a1, sp, a1
920 ; RV64-NEXT:    addi a1, a1, 16
921 ; RV64-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
922 ; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
923 ; RV64-NEXT:    vrgatherei16.vv v16, v8, v30
924 ; RV64-NEXT:    csrr a1, vlenb
925 ; RV64-NEXT:    li a2, 57
926 ; RV64-NEXT:    mul a1, a1, a2
927 ; RV64-NEXT:    add a1, sp, a1
928 ; RV64-NEXT:    addi a1, a1, 16
929 ; RV64-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
930 ; RV64-NEXT:    vrgatherei16.vv v16, v8, v6, v0.t
931 ; RV64-NEXT:    csrr a1, vlenb
932 ; RV64-NEXT:    add a1, sp, a1
933 ; RV64-NEXT:    addi a1, a1, 16
934 ; RV64-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
935 ; RV64-NEXT:    lui a1, 112
936 ; RV64-NEXT:    addi a1, a1, 1
937 ; RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
938 ; RV64-NEXT:    vmv.v.x v12, a1
939 ; RV64-NEXT:    vmv1r.v v0, v28
940 ; RV64-NEXT:    csrr a1, vlenb
941 ; RV64-NEXT:    slli a2, a1, 5
942 ; RV64-NEXT:    add a1, a2, a1
943 ; RV64-NEXT:    add a1, sp, a1
944 ; RV64-NEXT:    addi a1, a1, 16
945 ; RV64-NEXT:    vl4r.v v16, (a1) # Unknown-size Folded Reload
946 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
947 ; RV64-NEXT:    vrgatherei16.vv v16, v24, v12, v0.t
948 ; RV64-NEXT:    csrr a1, vlenb
949 ; RV64-NEXT:    slli a2, a1, 5
950 ; RV64-NEXT:    add a1, a2, a1
951 ; RV64-NEXT:    add a1, sp, a1
952 ; RV64-NEXT:    addi a1, a1, 16
953 ; RV64-NEXT:    vs4r.v v16, (a1) # Unknown-size Folded Spill
954 ; RV64-NEXT:    csrr a1, vlenb
955 ; RV64-NEXT:    li a2, 45
956 ; RV64-NEXT:    mul a1, a1, a2
957 ; RV64-NEXT:    add a1, sp, a1
958 ; RV64-NEXT:    addi a1, a1, 16
959 ; RV64-NEXT:    vl4r.v v16, (a1) # Unknown-size Folded Reload
960 ; RV64-NEXT:    csrr a1, vlenb
961 ; RV64-NEXT:    li a2, 25
962 ; RV64-NEXT:    mul a1, a1, a2
963 ; RV64-NEXT:    add a1, sp, a1
964 ; RV64-NEXT:    addi a1, a1, 16
965 ; RV64-NEXT:    vl8r.v v24, (a1) # Unknown-size Folded Reload
966 ; RV64-NEXT:    vsetivli zero, 5, e64, m4, tu, ma
967 ; RV64-NEXT:    vmv.v.v v16, v24
968 ; RV64-NEXT:    vmv2r.v v8, v2
969 ; RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
970 ; RV64-NEXT:    vadd.vi v12, v2, 5
971 ; RV64-NEXT:    csrr a1, vlenb
972 ; RV64-NEXT:    slli a2, a1, 6
973 ; RV64-NEXT:    add a1, a2, a1
974 ; RV64-NEXT:    add a1, sp, a1
975 ; RV64-NEXT:    addi a1, a1, 16
976 ; RV64-NEXT:    vl8r.v v0, (a1) # Unknown-size Folded Reload
977 ; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, ma
978 ; RV64-NEXT:    vrgatherei16.vv v24, v0, v12
979 ; RV64-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
980 ; RV64-NEXT:    vadd.vi v2, v8, -11
981 ; RV64-NEXT:    addi a1, sp, 16
982 ; RV64-NEXT:    vl1r.v v0, (a1) # Unknown-size Folded Reload
983 ; RV64-NEXT:    csrr a1, vlenb
984 ; RV64-NEXT:    li a2, 57
985 ; RV64-NEXT:    mul a1, a1, a2
986 ; RV64-NEXT:    add a1, sp, a1
987 ; RV64-NEXT:    addi a1, a1, 16
988 ; RV64-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
989 ; RV64-NEXT:    vsetvli zero, zero, e64, m8, ta, mu
990 ; RV64-NEXT:    vrgatherei16.vv v24, v8, v2, v0.t
991 ; RV64-NEXT:    csrr a1, vlenb
992 ; RV64-NEXT:    li a2, 41
993 ; RV64-NEXT:    mul a1, a1, a2
994 ; RV64-NEXT:    add a1, sp, a1
995 ; RV64-NEXT:    addi a1, a1, 16
996 ; RV64-NEXT:    vl4r.v v12, (a1) # Unknown-size Folded Reload
997 ; RV64-NEXT:    csrr a1, vlenb
998 ; RV64-NEXT:    slli a2, a1, 3
999 ; RV64-NEXT:    add a1, a2, a1
1000 ; RV64-NEXT:    add a1, sp, a1
1001 ; RV64-NEXT:    addi a1, a1, 16
1002 ; RV64-NEXT:    vl8r.v v0, (a1) # Unknown-size Folded Reload
1003 ; RV64-NEXT:    vsetivli zero, 5, e64, m4, tu, ma
1004 ; RV64-NEXT:    vmv.v.v v12, v0
1005 ; RV64-NEXT:    csrr a1, vlenb
1006 ; RV64-NEXT:    li a2, 37
1007 ; RV64-NEXT:    mul a1, a1, a2
1008 ; RV64-NEXT:    add a1, sp, a1
1009 ; RV64-NEXT:    addi a1, a1, 16
1010 ; RV64-NEXT:    vl4r.v v20, (a1) # Unknown-size Folded Reload
1011 ; RV64-NEXT:    csrr a1, vlenb
1012 ; RV64-NEXT:    add a1, sp, a1
1013 ; RV64-NEXT:    addi a1, a1, 16
1014 ; RV64-NEXT:    vl8r.v v0, (a1) # Unknown-size Folded Reload
1015 ; RV64-NEXT:    vmv.v.v v20, v0
1016 ; RV64-NEXT:    csrr a1, vlenb
1017 ; RV64-NEXT:    slli a2, a1, 5
1018 ; RV64-NEXT:    add a1, a2, a1
1019 ; RV64-NEXT:    add a1, sp, a1
1020 ; RV64-NEXT:    addi a1, a1, 16
1021 ; RV64-NEXT:    vl4r.v v8, (a1) # Unknown-size Folded Reload
1022 ; RV64-NEXT:    vmv.v.v v8, v24
1023 ; RV64-NEXT:    addi a1, a0, 320
1024 ; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1025 ; RV64-NEXT:    vse64.v v8, (a1)
1026 ; RV64-NEXT:    addi a1, a0, 256
1027 ; RV64-NEXT:    vse64.v v20, (a1)
1028 ; RV64-NEXT:    addi a1, a0, 192
1029 ; RV64-NEXT:    vse64.v v12, (a1)
1030 ; RV64-NEXT:    addi a1, a0, 128
1031 ; RV64-NEXT:    vse64.v v16, (a1)
1032 ; RV64-NEXT:    addi a1, a0, 64
1033 ; RV64-NEXT:    csrr a2, vlenb
1034 ; RV64-NEXT:    slli a3, a2, 4
1035 ; RV64-NEXT:    add a2, a3, a2
1036 ; RV64-NEXT:    add a2, sp, a2
1037 ; RV64-NEXT:    addi a2, a2, 16
1038 ; RV64-NEXT:    vl4r.v v8, (a2) # Unknown-size Folded Reload
1039 ; RV64-NEXT:    vse64.v v8, (a1)
1040 ; RV64-NEXT:    csrr a1, vlenb
1041 ; RV64-NEXT:    li a2, 21
1042 ; RV64-NEXT:    mul a1, a1, a2
1043 ; RV64-NEXT:    add a1, sp, a1
1044 ; RV64-NEXT:    addi a1, a1, 16
1045 ; RV64-NEXT:    vl4r.v v8, (a1) # Unknown-size Folded Reload
1046 ; RV64-NEXT:    vse64.v v8, (a0)
1047 ; RV64-NEXT:    csrr a0, vlenb
1048 ; RV64-NEXT:    li a1, 74
1049 ; RV64-NEXT:    mul a0, a0, a1
1050 ; RV64-NEXT:    add sp, sp, a0
1051 ; RV64-NEXT:    addi sp, sp, 16
1052 ; RV64-NEXT:    ret
1053   %interleaved.vec = load <48 x i64>, ptr %ptr
1054   %v0 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 0, i32 6, i32 12, i32 18, i32 24, i32 30, i32 36, i32 42>
1055   %v1 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 1, i32 7, i32 13, i32 19, i32 25, i32 31, i32 37, i32 43>
1056   %v2 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 2, i32 8, i32 14, i32 20, i32 26, i32 32, i32 38, i32 44>
1057   %v3 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 3, i32 9, i32 15, i32 21, i32 27, i32 33, i32 39, i32 45>
1058   %v4 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 4, i32 10, i32 16, i32 22, i32 28, i32 34, i32 40, i32 46>
1059   %v5 = shufflevector <48 x i64> %interleaved.vec, <48 x i64> poison, <8 x i32> <i32 5, i32 11, i32 17, i32 23, i32 29, i32 35, i32 41, i32 47>
1060   %res0 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} undef, <8 x i64> %v0, 0
1061   %res1 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res0, <8 x i64> %v1, 1
1062   %res2 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res1, <8 x i64> %v2, 2
1063   %res3 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res2, <8 x i64> %v3, 3
1064   %res4 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res3, <8 x i64> %v4, 4
1065   %res5 = insertvalue {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res4, <8 x i64> %v5, 5
1066   ret {<8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>, <8 x i64>} %res5
1070 ; ------------------------------------------------------------------------------
1071 ; Stores
1072 ; ------------------------------------------------------------------------------
1074 define void @store_factor2(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1) {
1075 ; CHECK-LABEL: store_factor2:
1076 ; CHECK:       # %bb.0:
1077 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1078 ; CHECK-NEXT:    vsseg2e32.v v8, (a0)
1079 ; CHECK-NEXT:    ret
1080   %interleaved.vec = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>
1081   store <8 x i32> %interleaved.vec, ptr %ptr
1082   ret void
1085 define void @store_factor3(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2) {
1086 ; CHECK-LABEL: store_factor3:
1087 ; CHECK:       # %bb.0:
1088 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1089 ; CHECK-NEXT:    vsseg3e32.v v8, (a0)
1090 ; CHECK-NEXT:    ret
1091   %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1092   %s1 = shufflevector <4 x i32> %v2, <4 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
1093   %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <12 x i32> <i32 0, i32 4, i32 8, i32 1, i32 5, i32 9, i32 2, i32 6, i32 10, i32 3, i32 7, i32 11>
1094   store <12 x i32> %interleaved.vec, ptr %ptr
1095   ret void
1098 define void @store_factor4(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {
1099 ; CHECK-LABEL: store_factor4:
1100 ; CHECK:       # %bb.0:
1101 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1102 ; CHECK-NEXT:    vsseg4e32.v v8, (a0)
1103 ; CHECK-NEXT:    ret
1104   %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1105   %s1 = shufflevector <4 x i32> %v2, <4 x i32> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1106   %interleaved.vec = shufflevector <8 x i32> %s0, <8 x i32> %s1, <16 x i32> <i32 0, i32 4, i32 8, i32 12, i32 1, i32 5, i32 9, i32 13, i32 2, i32 6, i32 10, i32 14, i32 3, i32 7, i32 11, i32 15>
1107   store <16 x i32> %interleaved.vec, ptr %ptr
1108   ret void
1111 define void @store_factor5(ptr %ptr, <4 x i32> %v0, <4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3, <4 x i32> %v4) {
1112 ; CHECK-LABEL: store_factor5:
1113 ; CHECK:       # %bb.0:
1114 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
1115 ; CHECK-NEXT:    vsseg5e32.v v8, (a0)
1116 ; CHECK-NEXT:    ret
1117   %s0 = shufflevector <4 x i32> %v0, <4 x i32> %v1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1118   %s1 = shufflevector <4 x i32> %v2, <4 x i32> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1119   %s2 = shufflevector <8 x i32> %s0, <8 x i32> %s1, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
1120   %s3 = shufflevector <4 x i32> %v4, <4 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>
1121   %interleaved.vec = shufflevector <16 x i32> %s2, <16 x i32> %s3, <20 x i32> <i32 0, i32 4, i32 8, i32 12, i32 16, i32 1, i32 5, i32 9, i32 13, i32 17, i32 2, i32 6, i32 10, i32 14, i32 18, i32 3, i32 7, i32 11, i32 15, i32 19>
1122   store <20 x i32> %interleaved.vec, ptr %ptr
1123   ret void
1126 define void @store_factor6(ptr %ptr, <2 x i16> %v0, <2 x i16> %v1, <2 x i16> %v2, <2 x i16> %v3, <2 x i16> %v4, <2 x i16> %v5) {
1127 ; CHECK-LABEL: store_factor6:
1128 ; CHECK:       # %bb.0:
1129 ; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma
1130 ; CHECK-NEXT:    vsseg6e16.v v8, (a0)
1131 ; CHECK-NEXT:    ret
1132   %s0 = shufflevector <2 x i16> %v0, <2 x i16> %v1, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1133   %s1 = shufflevector <2 x i16> %v2, <2 x i16> %v3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
1134   %s2 = shufflevector <4 x i16> %s0, <4 x i16> %s1, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1135   %s3 = shufflevector <2 x i16> %v4, <2 x i16> %v5, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
1136   %interleaved.vec = shufflevector <8 x i16> %s2, <8 x i16> %s3, <12 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 1, i32 3, i32 5, i32 7, i32 9, i32 11>
1137   store <12 x i16> %interleaved.vec, ptr %ptr
1138   ret void