Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-masked-gather.ll
blob14f4f44049c533d153c46b6dfedc072571ac6bbc
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32,RV32V
4 ; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64,RV64V
6 ; RUN: llc -mtriple=riscv32 -mattr=+m,+d,+zfh,+zvfh,+zve32f,+zvl128b -target-abi=ilp32d \
7 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32,RV32ZVE32F
8 ; RUN: llc -mtriple=riscv64 -mattr=+m,+d,+zfh,+zvfh,+zve32f,+zvl128b -target-abi=lp64d \
9 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64,RV64ZVE32F
11 declare <1 x i8> @llvm.masked.gather.v1i8.v1p0(<1 x ptr>, i32, <1 x i1>, <1 x i8>)
13 define <1 x i8> @mgather_v1i8(<1 x ptr> %ptrs, <1 x i1> %m, <1 x i8> %passthru) {
14 ; RV32V-LABEL: mgather_v1i8:
15 ; RV32V:       # %bb.0:
16 ; RV32V-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
17 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
18 ; RV32V-NEXT:    vmv1r.v v8, v9
19 ; RV32V-NEXT:    ret
21 ; RV64V-LABEL: mgather_v1i8:
22 ; RV64V:       # %bb.0:
23 ; RV64V-NEXT:    vsetivli zero, 1, e8, mf8, ta, mu
24 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
25 ; RV64V-NEXT:    vmv1r.v v8, v9
26 ; RV64V-NEXT:    ret
28 ; RV32ZVE32F-LABEL: mgather_v1i8:
29 ; RV32ZVE32F:       # %bb.0:
30 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, mu
31 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
32 ; RV32ZVE32F-NEXT:    vmv1r.v v8, v9
33 ; RV32ZVE32F-NEXT:    ret
35 ; RV64ZVE32F-LABEL: mgather_v1i8:
36 ; RV64ZVE32F:       # %bb.0:
37 ; RV64ZVE32F-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
38 ; RV64ZVE32F-NEXT:    vfirst.m a1, v0
39 ; RV64ZVE32F-NEXT:    bnez a1, .LBB0_2
40 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
41 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
42 ; RV64ZVE32F-NEXT:    vle8.v v8, (a0)
43 ; RV64ZVE32F-NEXT:  .LBB0_2: # %else
44 ; RV64ZVE32F-NEXT:    ret
45   %v = call <1 x i8> @llvm.masked.gather.v1i8.v1p0(<1 x ptr> %ptrs, i32 1, <1 x i1> %m, <1 x i8> %passthru)
46   ret <1 x i8> %v
49 declare <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr>, i32, <2 x i1>, <2 x i8>)
51 define <2 x i8> @mgather_v2i8(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i8> %passthru) {
52 ; RV32V-LABEL: mgather_v2i8:
53 ; RV32V:       # %bb.0:
54 ; RV32V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
55 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
56 ; RV32V-NEXT:    vmv1r.v v8, v9
57 ; RV32V-NEXT:    ret
59 ; RV64V-LABEL: mgather_v2i8:
60 ; RV64V:       # %bb.0:
61 ; RV64V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
62 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
63 ; RV64V-NEXT:    vmv1r.v v8, v9
64 ; RV64V-NEXT:    ret
66 ; RV32ZVE32F-LABEL: mgather_v2i8:
67 ; RV32ZVE32F:       # %bb.0:
68 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, mu
69 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
70 ; RV32ZVE32F-NEXT:    vmv1r.v v8, v9
71 ; RV32ZVE32F-NEXT:    ret
73 ; RV64ZVE32F-LABEL: mgather_v2i8:
74 ; RV64ZVE32F:       # %bb.0:
75 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
76 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
77 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
78 ; RV64ZVE32F-NEXT:    bnez a3, .LBB1_3
79 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
80 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
81 ; RV64ZVE32F-NEXT:    bnez a2, .LBB1_4
82 ; RV64ZVE32F-NEXT:  .LBB1_2: # %else2
83 ; RV64ZVE32F-NEXT:    ret
84 ; RV64ZVE32F-NEXT:  .LBB1_3: # %cond.load
85 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
86 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
87 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
88 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
89 ; RV64ZVE32F-NEXT:    beqz a2, .LBB1_2
90 ; RV64ZVE32F-NEXT:  .LBB1_4: # %cond.load1
91 ; RV64ZVE32F-NEXT:    lbu a0, 0(a1)
92 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
93 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
94 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
95 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
96 ; RV64ZVE32F-NEXT:    ret
97   %v = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %ptrs, i32 1, <2 x i1> %m, <2 x i8> %passthru)
98   ret <2 x i8> %v
101 define <2 x i16> @mgather_v2i8_sextload_v2i16(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i8> %passthru) {
102 ; RV32V-LABEL: mgather_v2i8_sextload_v2i16:
103 ; RV32V:       # %bb.0:
104 ; RV32V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
105 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
106 ; RV32V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
107 ; RV32V-NEXT:    vsext.vf2 v8, v9
108 ; RV32V-NEXT:    ret
110 ; RV64V-LABEL: mgather_v2i8_sextload_v2i16:
111 ; RV64V:       # %bb.0:
112 ; RV64V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
113 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
114 ; RV64V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
115 ; RV64V-NEXT:    vsext.vf2 v8, v9
116 ; RV64V-NEXT:    ret
118 ; RV32ZVE32F-LABEL: mgather_v2i8_sextload_v2i16:
119 ; RV32ZVE32F:       # %bb.0:
120 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, mu
121 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
122 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
123 ; RV32ZVE32F-NEXT:    vsext.vf2 v8, v9
124 ; RV32ZVE32F-NEXT:    ret
126 ; RV64ZVE32F-LABEL: mgather_v2i8_sextload_v2i16:
127 ; RV64ZVE32F:       # %bb.0:
128 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
129 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
130 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
131 ; RV64ZVE32F-NEXT:    beqz a3, .LBB2_2
132 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
133 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
134 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
135 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
136 ; RV64ZVE32F-NEXT:  .LBB2_2: # %else
137 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
138 ; RV64ZVE32F-NEXT:    beqz a2, .LBB2_4
139 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
140 ; RV64ZVE32F-NEXT:    lbu a0, 0(a1)
141 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
142 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
143 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
144 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
145 ; RV64ZVE32F-NEXT:  .LBB2_4: # %else2
146 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
147 ; RV64ZVE32F-NEXT:    vsext.vf2 v9, v8
148 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
149 ; RV64ZVE32F-NEXT:    ret
150   %v = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %ptrs, i32 1, <2 x i1> %m, <2 x i8> %passthru)
151   %ev = sext <2 x i8> %v to <2 x i16>
152   ret <2 x i16> %ev
155 define <2 x i16> @mgather_v2i8_zextload_v2i16(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i8> %passthru) {
156 ; RV32V-LABEL: mgather_v2i8_zextload_v2i16:
157 ; RV32V:       # %bb.0:
158 ; RV32V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
159 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
160 ; RV32V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
161 ; RV32V-NEXT:    vzext.vf2 v8, v9
162 ; RV32V-NEXT:    ret
164 ; RV64V-LABEL: mgather_v2i8_zextload_v2i16:
165 ; RV64V:       # %bb.0:
166 ; RV64V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
167 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
168 ; RV64V-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma
169 ; RV64V-NEXT:    vzext.vf2 v8, v9
170 ; RV64V-NEXT:    ret
172 ; RV32ZVE32F-LABEL: mgather_v2i8_zextload_v2i16:
173 ; RV32ZVE32F:       # %bb.0:
174 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, mu
175 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
176 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
177 ; RV32ZVE32F-NEXT:    vzext.vf2 v8, v9
178 ; RV32ZVE32F-NEXT:    ret
180 ; RV64ZVE32F-LABEL: mgather_v2i8_zextload_v2i16:
181 ; RV64ZVE32F:       # %bb.0:
182 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
183 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
184 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
185 ; RV64ZVE32F-NEXT:    beqz a3, .LBB3_2
186 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
187 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
188 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
189 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
190 ; RV64ZVE32F-NEXT:  .LBB3_2: # %else
191 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
192 ; RV64ZVE32F-NEXT:    beqz a2, .LBB3_4
193 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
194 ; RV64ZVE32F-NEXT:    lbu a0, 0(a1)
195 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
196 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
197 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
198 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
199 ; RV64ZVE32F-NEXT:  .LBB3_4: # %else2
200 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
201 ; RV64ZVE32F-NEXT:    vzext.vf2 v9, v8
202 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
203 ; RV64ZVE32F-NEXT:    ret
204   %v = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %ptrs, i32 1, <2 x i1> %m, <2 x i8> %passthru)
205   %ev = zext <2 x i8> %v to <2 x i16>
206   ret <2 x i16> %ev
209 define <2 x i32> @mgather_v2i8_sextload_v2i32(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i8> %passthru) {
210 ; RV32V-LABEL: mgather_v2i8_sextload_v2i32:
211 ; RV32V:       # %bb.0:
212 ; RV32V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
213 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
214 ; RV32V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
215 ; RV32V-NEXT:    vsext.vf4 v8, v9
216 ; RV32V-NEXT:    ret
218 ; RV64V-LABEL: mgather_v2i8_sextload_v2i32:
219 ; RV64V:       # %bb.0:
220 ; RV64V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
221 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
222 ; RV64V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
223 ; RV64V-NEXT:    vsext.vf4 v8, v9
224 ; RV64V-NEXT:    ret
226 ; RV32ZVE32F-LABEL: mgather_v2i8_sextload_v2i32:
227 ; RV32ZVE32F:       # %bb.0:
228 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, mu
229 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
230 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
231 ; RV32ZVE32F-NEXT:    vsext.vf4 v8, v9
232 ; RV32ZVE32F-NEXT:    ret
234 ; RV64ZVE32F-LABEL: mgather_v2i8_sextload_v2i32:
235 ; RV64ZVE32F:       # %bb.0:
236 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
237 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
238 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
239 ; RV64ZVE32F-NEXT:    beqz a3, .LBB4_2
240 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
241 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
242 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
243 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
244 ; RV64ZVE32F-NEXT:  .LBB4_2: # %else
245 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
246 ; RV64ZVE32F-NEXT:    beqz a2, .LBB4_4
247 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
248 ; RV64ZVE32F-NEXT:    lbu a0, 0(a1)
249 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
250 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
251 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
252 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
253 ; RV64ZVE32F-NEXT:  .LBB4_4: # %else2
254 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
255 ; RV64ZVE32F-NEXT:    vsext.vf4 v9, v8
256 ; RV64ZVE32F-NEXT:    vmv.v.v v8, v9
257 ; RV64ZVE32F-NEXT:    ret
258   %v = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %ptrs, i32 1, <2 x i1> %m, <2 x i8> %passthru)
259   %ev = sext <2 x i8> %v to <2 x i32>
260   ret <2 x i32> %ev
263 define <2 x i32> @mgather_v2i8_zextload_v2i32(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i8> %passthru) {
264 ; RV32V-LABEL: mgather_v2i8_zextload_v2i32:
265 ; RV32V:       # %bb.0:
266 ; RV32V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
267 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
268 ; RV32V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
269 ; RV32V-NEXT:    vzext.vf4 v8, v9
270 ; RV32V-NEXT:    ret
272 ; RV64V-LABEL: mgather_v2i8_zextload_v2i32:
273 ; RV64V:       # %bb.0:
274 ; RV64V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
275 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
276 ; RV64V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
277 ; RV64V-NEXT:    vzext.vf4 v8, v9
278 ; RV64V-NEXT:    ret
280 ; RV32ZVE32F-LABEL: mgather_v2i8_zextload_v2i32:
281 ; RV32ZVE32F:       # %bb.0:
282 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, mu
283 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
284 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
285 ; RV32ZVE32F-NEXT:    vzext.vf4 v8, v9
286 ; RV32ZVE32F-NEXT:    ret
288 ; RV64ZVE32F-LABEL: mgather_v2i8_zextload_v2i32:
289 ; RV64ZVE32F:       # %bb.0:
290 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
291 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
292 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
293 ; RV64ZVE32F-NEXT:    beqz a3, .LBB5_2
294 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
295 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
296 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
297 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
298 ; RV64ZVE32F-NEXT:  .LBB5_2: # %else
299 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
300 ; RV64ZVE32F-NEXT:    beqz a2, .LBB5_4
301 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
302 ; RV64ZVE32F-NEXT:    lbu a0, 0(a1)
303 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
304 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
305 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
306 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
307 ; RV64ZVE32F-NEXT:  .LBB5_4: # %else2
308 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
309 ; RV64ZVE32F-NEXT:    vzext.vf4 v9, v8
310 ; RV64ZVE32F-NEXT:    vmv.v.v v8, v9
311 ; RV64ZVE32F-NEXT:    ret
312   %v = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %ptrs, i32 1, <2 x i1> %m, <2 x i8> %passthru)
313   %ev = zext <2 x i8> %v to <2 x i32>
314   ret <2 x i32> %ev
317 define <2 x i64> @mgather_v2i8_sextload_v2i64(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i8> %passthru) {
318 ; RV32V-LABEL: mgather_v2i8_sextload_v2i64:
319 ; RV32V:       # %bb.0:
320 ; RV32V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
321 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
322 ; RV32V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
323 ; RV32V-NEXT:    vsext.vf8 v8, v9
324 ; RV32V-NEXT:    ret
326 ; RV64V-LABEL: mgather_v2i8_sextload_v2i64:
327 ; RV64V:       # %bb.0:
328 ; RV64V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
329 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
330 ; RV64V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
331 ; RV64V-NEXT:    vsext.vf8 v8, v9
332 ; RV64V-NEXT:    ret
334 ; RV32ZVE32F-LABEL: mgather_v2i8_sextload_v2i64:
335 ; RV32ZVE32F:       # %bb.0:
336 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, mu
337 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
338 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
339 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
340 ; RV32ZVE32F-NEXT:    srai a2, a1, 31
341 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v9
342 ; RV32ZVE32F-NEXT:    srai a4, a3, 31
343 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
344 ; RV32ZVE32F-NEXT:    sw a1, 8(a0)
345 ; RV32ZVE32F-NEXT:    sw a4, 4(a0)
346 ; RV32ZVE32F-NEXT:    sw a2, 12(a0)
347 ; RV32ZVE32F-NEXT:    ret
349 ; RV64ZVE32F-LABEL: mgather_v2i8_sextload_v2i64:
350 ; RV64ZVE32F:       # %bb.0:
351 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
352 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
353 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
354 ; RV64ZVE32F-NEXT:    beqz a3, .LBB6_2
355 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
356 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
357 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
358 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
359 ; RV64ZVE32F-NEXT:  .LBB6_2: # %else
360 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
361 ; RV64ZVE32F-NEXT:    beqz a2, .LBB6_4
362 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
363 ; RV64ZVE32F-NEXT:    lbu a0, 0(a1)
364 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
365 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
366 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
367 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
368 ; RV64ZVE32F-NEXT:  .LBB6_4: # %else2
369 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
370 ; RV64ZVE32F-NEXT:    vmv.x.s a0, v8
371 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
372 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
373 ; RV64ZVE32F-NEXT:    ret
374   %v = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %ptrs, i32 1, <2 x i1> %m, <2 x i8> %passthru)
375   %ev = sext <2 x i8> %v to <2 x i64>
376   ret <2 x i64> %ev
379 define <2 x i64> @mgather_v2i8_zextload_v2i64(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i8> %passthru) {
380 ; RV32V-LABEL: mgather_v2i8_zextload_v2i64:
381 ; RV32V:       # %bb.0:
382 ; RV32V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
383 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
384 ; RV32V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
385 ; RV32V-NEXT:    vzext.vf8 v8, v9
386 ; RV32V-NEXT:    ret
388 ; RV64V-LABEL: mgather_v2i8_zextload_v2i64:
389 ; RV64V:       # %bb.0:
390 ; RV64V-NEXT:    vsetivli zero, 2, e8, mf8, ta, mu
391 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
392 ; RV64V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
393 ; RV64V-NEXT:    vzext.vf8 v8, v9
394 ; RV64V-NEXT:    ret
396 ; RV32ZVE32F-LABEL: mgather_v2i8_zextload_v2i64:
397 ; RV32ZVE32F:       # %bb.0:
398 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, mu
399 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
400 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
401 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
402 ; RV32ZVE32F-NEXT:    andi a1, a1, 255
403 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v9
404 ; RV32ZVE32F-NEXT:    andi a2, a2, 255
405 ; RV32ZVE32F-NEXT:    sw zero, 12(a0)
406 ; RV32ZVE32F-NEXT:    sw zero, 4(a0)
407 ; RV32ZVE32F-NEXT:    sw a2, 0(a0)
408 ; RV32ZVE32F-NEXT:    sw a1, 8(a0)
409 ; RV32ZVE32F-NEXT:    ret
411 ; RV64ZVE32F-LABEL: mgather_v2i8_zextload_v2i64:
412 ; RV64ZVE32F:       # %bb.0:
413 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
414 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
415 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
416 ; RV64ZVE32F-NEXT:    beqz a3, .LBB7_2
417 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
418 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
419 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
420 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
421 ; RV64ZVE32F-NEXT:  .LBB7_2: # %else
422 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
423 ; RV64ZVE32F-NEXT:    beqz a2, .LBB7_4
424 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
425 ; RV64ZVE32F-NEXT:    lbu a0, 0(a1)
426 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
427 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
428 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
429 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
430 ; RV64ZVE32F-NEXT:  .LBB7_4: # %else2
431 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
432 ; RV64ZVE32F-NEXT:    vmv.x.s a0, v8
433 ; RV64ZVE32F-NEXT:    andi a0, a0, 255
434 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
435 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
436 ; RV64ZVE32F-NEXT:    andi a1, a1, 255
437 ; RV64ZVE32F-NEXT:    ret
438   %v = call <2 x i8> @llvm.masked.gather.v2i8.v2p0(<2 x ptr> %ptrs, i32 1, <2 x i1> %m, <2 x i8> %passthru)
439   %ev = zext <2 x i8> %v to <2 x i64>
440   ret <2 x i64> %ev
443 declare <4 x i8> @llvm.masked.gather.v4i8.v4p0(<4 x ptr>, i32, <4 x i1>, <4 x i8>)
445 define <4 x i8> @mgather_v4i8(<4 x ptr> %ptrs, <4 x i1> %m, <4 x i8> %passthru) {
446 ; RV32-LABEL: mgather_v4i8:
447 ; RV32:       # %bb.0:
448 ; RV32-NEXT:    vsetivli zero, 4, e8, mf4, ta, mu
449 ; RV32-NEXT:    vluxei32.v v9, (zero), v8, v0.t
450 ; RV32-NEXT:    vmv1r.v v8, v9
451 ; RV32-NEXT:    ret
453 ; RV64V-LABEL: mgather_v4i8:
454 ; RV64V:       # %bb.0:
455 ; RV64V-NEXT:    vsetivli zero, 4, e8, mf4, ta, mu
456 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8, v0.t
457 ; RV64V-NEXT:    vmv1r.v v8, v10
458 ; RV64V-NEXT:    ret
460 ; RV64ZVE32F-LABEL: mgather_v4i8:
461 ; RV64ZVE32F:       # %bb.0:
462 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
463 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
464 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
465 ; RV64ZVE32F-NEXT:    bnez a2, .LBB8_5
466 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
467 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
468 ; RV64ZVE32F-NEXT:    bnez a2, .LBB8_6
469 ; RV64ZVE32F-NEXT:  .LBB8_2: # %else2
470 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
471 ; RV64ZVE32F-NEXT:    bnez a2, .LBB8_7
472 ; RV64ZVE32F-NEXT:  .LBB8_3: # %else5
473 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
474 ; RV64ZVE32F-NEXT:    bnez a1, .LBB8_8
475 ; RV64ZVE32F-NEXT:  .LBB8_4: # %else8
476 ; RV64ZVE32F-NEXT:    ret
477 ; RV64ZVE32F-NEXT:  .LBB8_5: # %cond.load
478 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
479 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
480 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
481 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
482 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
483 ; RV64ZVE32F-NEXT:    beqz a2, .LBB8_2
484 ; RV64ZVE32F-NEXT:  .LBB8_6: # %cond.load1
485 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
486 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
487 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
488 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
489 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, tu, ma
490 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
491 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
492 ; RV64ZVE32F-NEXT:    beqz a2, .LBB8_3
493 ; RV64ZVE32F-NEXT:  .LBB8_7: # %cond.load4
494 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
495 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
496 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e8, mf4, tu, ma
497 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
498 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 2
499 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
500 ; RV64ZVE32F-NEXT:    beqz a1, .LBB8_4
501 ; RV64ZVE32F-NEXT:  .LBB8_8: # %cond.load7
502 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
503 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
504 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
505 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
506 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 3
507 ; RV64ZVE32F-NEXT:    ret
508   %v = call <4 x i8> @llvm.masked.gather.v4i8.v4p0(<4 x ptr> %ptrs, i32 1, <4 x i1> %m, <4 x i8> %passthru)
509   ret <4 x i8> %v
512 define <4 x i8> @mgather_truemask_v4i8(<4 x ptr> %ptrs, <4 x i8> %passthru) {
513 ; RV32-LABEL: mgather_truemask_v4i8:
514 ; RV32:       # %bb.0:
515 ; RV32-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
516 ; RV32-NEXT:    vluxei32.v v9, (zero), v8
517 ; RV32-NEXT:    vmv1r.v v8, v9
518 ; RV32-NEXT:    ret
520 ; RV64V-LABEL: mgather_truemask_v4i8:
521 ; RV64V:       # %bb.0:
522 ; RV64V-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
523 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8
524 ; RV64V-NEXT:    vmv1r.v v8, v10
525 ; RV64V-NEXT:    ret
527 ; RV64ZVE32F-LABEL: mgather_truemask_v4i8:
528 ; RV64ZVE32F:       # %bb.0:
529 ; RV64ZVE32F-NEXT:    ld a1, 0(a0)
530 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
531 ; RV64ZVE32F-NEXT:    ld a3, 16(a0)
532 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
533 ; RV64ZVE32F-NEXT:    lbu a1, 0(a1)
534 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
535 ; RV64ZVE32F-NEXT:    lbu a3, 0(a3)
536 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
537 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf4, ta, ma
538 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
539 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
540 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
541 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
542 ; RV64ZVE32F-NEXT:    ret
543   %v = call <4 x i8> @llvm.masked.gather.v4i8.v4p0(<4 x ptr> %ptrs, i32 1, <4 x i1> splat (i1 1), <4 x i8> %passthru)
544   ret <4 x i8> %v
547 define <4 x i8> @mgather_falsemask_v4i8(<4 x ptr> %ptrs, <4 x i8> %passthru) {
548 ; RV32-LABEL: mgather_falsemask_v4i8:
549 ; RV32:       # %bb.0:
550 ; RV32-NEXT:    vmv1r.v v8, v9
551 ; RV32-NEXT:    ret
553 ; RV64V-LABEL: mgather_falsemask_v4i8:
554 ; RV64V:       # %bb.0:
555 ; RV64V-NEXT:    vmv1r.v v8, v10
556 ; RV64V-NEXT:    ret
558 ; RV64ZVE32F-LABEL: mgather_falsemask_v4i8:
559 ; RV64ZVE32F:       # %bb.0:
560 ; RV64ZVE32F-NEXT:    ret
561   %v = call <4 x i8> @llvm.masked.gather.v4i8.v4p0(<4 x ptr> %ptrs, i32 1, <4 x i1> zeroinitializer, <4 x i8> %passthru)
562   ret <4 x i8> %v
565 declare <8 x i8> @llvm.masked.gather.v8i8.v8p0(<8 x ptr>, i32, <8 x i1>, <8 x i8>)
567 define <8 x i8> @mgather_v8i8(<8 x ptr> %ptrs, <8 x i1> %m, <8 x i8> %passthru) {
568 ; RV32-LABEL: mgather_v8i8:
569 ; RV32:       # %bb.0:
570 ; RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
571 ; RV32-NEXT:    vluxei32.v v10, (zero), v8, v0.t
572 ; RV32-NEXT:    vmv1r.v v8, v10
573 ; RV32-NEXT:    ret
575 ; RV64V-LABEL: mgather_v8i8:
576 ; RV64V:       # %bb.0:
577 ; RV64V-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
578 ; RV64V-NEXT:    vluxei64.v v12, (zero), v8, v0.t
579 ; RV64V-NEXT:    vmv1r.v v8, v12
580 ; RV64V-NEXT:    ret
582 ; RV64ZVE32F-LABEL: mgather_v8i8:
583 ; RV64ZVE32F:       # %bb.0:
584 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
585 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
586 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
587 ; RV64ZVE32F-NEXT:    bnez a2, .LBB11_9
588 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
589 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
590 ; RV64ZVE32F-NEXT:    bnez a2, .LBB11_10
591 ; RV64ZVE32F-NEXT:  .LBB11_2: # %else2
592 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
593 ; RV64ZVE32F-NEXT:    bnez a2, .LBB11_11
594 ; RV64ZVE32F-NEXT:  .LBB11_3: # %else5
595 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
596 ; RV64ZVE32F-NEXT:    bnez a2, .LBB11_12
597 ; RV64ZVE32F-NEXT:  .LBB11_4: # %else8
598 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
599 ; RV64ZVE32F-NEXT:    bnez a2, .LBB11_13
600 ; RV64ZVE32F-NEXT:  .LBB11_5: # %else11
601 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
602 ; RV64ZVE32F-NEXT:    bnez a2, .LBB11_14
603 ; RV64ZVE32F-NEXT:  .LBB11_6: # %else14
604 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
605 ; RV64ZVE32F-NEXT:    bnez a2, .LBB11_15
606 ; RV64ZVE32F-NEXT:  .LBB11_7: # %else17
607 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
608 ; RV64ZVE32F-NEXT:    bnez a1, .LBB11_16
609 ; RV64ZVE32F-NEXT:  .LBB11_8: # %else20
610 ; RV64ZVE32F-NEXT:    ret
611 ; RV64ZVE32F-NEXT:  .LBB11_9: # %cond.load
612 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
613 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
614 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
615 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
616 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
617 ; RV64ZVE32F-NEXT:    beqz a2, .LBB11_2
618 ; RV64ZVE32F-NEXT:  .LBB11_10: # %cond.load1
619 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
620 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
621 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, ta, ma
622 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
623 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf2, tu, ma
624 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
625 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
626 ; RV64ZVE32F-NEXT:    beqz a2, .LBB11_3
627 ; RV64ZVE32F-NEXT:  .LBB11_11: # %cond.load4
628 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
629 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
630 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e8, mf2, tu, ma
631 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
632 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 2
633 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
634 ; RV64ZVE32F-NEXT:    beqz a2, .LBB11_4
635 ; RV64ZVE32F-NEXT:  .LBB11_12: # %cond.load7
636 ; RV64ZVE32F-NEXT:    ld a2, 24(a0)
637 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
638 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
639 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
640 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 3
641 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
642 ; RV64ZVE32F-NEXT:    beqz a2, .LBB11_5
643 ; RV64ZVE32F-NEXT:  .LBB11_13: # %cond.load10
644 ; RV64ZVE32F-NEXT:    ld a2, 32(a0)
645 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
646 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e8, mf2, tu, ma
647 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
648 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 4
649 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
650 ; RV64ZVE32F-NEXT:    beqz a2, .LBB11_6
651 ; RV64ZVE32F-NEXT:  .LBB11_14: # %cond.load13
652 ; RV64ZVE32F-NEXT:    ld a2, 40(a0)
653 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
654 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
655 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
656 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 5
657 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
658 ; RV64ZVE32F-NEXT:    beqz a2, .LBB11_7
659 ; RV64ZVE32F-NEXT:  .LBB11_15: # %cond.load16
660 ; RV64ZVE32F-NEXT:    ld a2, 48(a0)
661 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
662 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e8, mf2, tu, ma
663 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
664 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 6
665 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
666 ; RV64ZVE32F-NEXT:    beqz a1, .LBB11_8
667 ; RV64ZVE32F-NEXT:  .LBB11_16: # %cond.load19
668 ; RV64ZVE32F-NEXT:    ld a0, 56(a0)
669 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
670 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
671 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
672 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 7
673 ; RV64ZVE32F-NEXT:    ret
674   %v = call <8 x i8> @llvm.masked.gather.v8i8.v8p0(<8 x ptr> %ptrs, i32 1, <8 x i1> %m, <8 x i8> %passthru)
675   ret <8 x i8> %v
678 define <8 x i8> @mgather_baseidx_v8i8(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i8> %passthru) {
679 ; RV32-LABEL: mgather_baseidx_v8i8:
680 ; RV32:       # %bb.0:
681 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
682 ; RV32-NEXT:    vsext.vf4 v10, v8
683 ; RV32-NEXT:    vsetvli zero, zero, e8, mf2, ta, mu
684 ; RV32-NEXT:    vluxei32.v v9, (a0), v10, v0.t
685 ; RV32-NEXT:    vmv1r.v v8, v9
686 ; RV32-NEXT:    ret
688 ; RV64V-LABEL: mgather_baseidx_v8i8:
689 ; RV64V:       # %bb.0:
690 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
691 ; RV64V-NEXT:    vsext.vf8 v12, v8
692 ; RV64V-NEXT:    vsetvli zero, zero, e8, mf2, ta, mu
693 ; RV64V-NEXT:    vluxei64.v v9, (a0), v12, v0.t
694 ; RV64V-NEXT:    vmv1r.v v8, v9
695 ; RV64V-NEXT:    ret
697 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8:
698 ; RV64ZVE32F:       # %bb.0:
699 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
700 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
701 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
702 ; RV64ZVE32F-NEXT:    beqz a2, .LBB12_2
703 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
704 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
705 ; RV64ZVE32F-NEXT:    add a2, a0, a2
706 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
707 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, m1, tu, ma
708 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
709 ; RV64ZVE32F-NEXT:  .LBB12_2: # %else
710 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
711 ; RV64ZVE32F-NEXT:    beqz a2, .LBB12_4
712 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
713 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
714 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
715 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
716 ; RV64ZVE32F-NEXT:    add a2, a0, a2
717 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
718 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
719 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf2, tu, ma
720 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
721 ; RV64ZVE32F-NEXT:  .LBB12_4: # %else2
722 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
723 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
724 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
725 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
726 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
727 ; RV64ZVE32F-NEXT:    bnez a2, .LBB12_12
728 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
729 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
730 ; RV64ZVE32F-NEXT:    bnez a2, .LBB12_13
731 ; RV64ZVE32F-NEXT:  .LBB12_6: # %else8
732 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
733 ; RV64ZVE32F-NEXT:    bnez a2, .LBB12_14
734 ; RV64ZVE32F-NEXT:  .LBB12_7: # %else11
735 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
736 ; RV64ZVE32F-NEXT:    beqz a2, .LBB12_9
737 ; RV64ZVE32F-NEXT:  .LBB12_8: # %cond.load13
738 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
739 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
740 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
741 ; RV64ZVE32F-NEXT:    add a2, a0, a2
742 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
743 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
744 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e8, mf2, tu, ma
745 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
746 ; RV64ZVE32F-NEXT:  .LBB12_9: # %else14
747 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
748 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
749 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
750 ; RV64ZVE32F-NEXT:    bnez a2, .LBB12_15
751 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
752 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
753 ; RV64ZVE32F-NEXT:    bnez a1, .LBB12_16
754 ; RV64ZVE32F-NEXT:  .LBB12_11: # %else20
755 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
756 ; RV64ZVE32F-NEXT:    ret
757 ; RV64ZVE32F-NEXT:  .LBB12_12: # %cond.load4
758 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
759 ; RV64ZVE32F-NEXT:    add a2, a0, a2
760 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
761 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
762 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e8, mf2, tu, ma
763 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
764 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
765 ; RV64ZVE32F-NEXT:    beqz a2, .LBB12_6
766 ; RV64ZVE32F-NEXT:  .LBB12_13: # %cond.load7
767 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
768 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
769 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
770 ; RV64ZVE32F-NEXT:    add a2, a0, a2
771 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
772 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
773 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, tu, ma
774 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
775 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
776 ; RV64ZVE32F-NEXT:    beqz a2, .LBB12_7
777 ; RV64ZVE32F-NEXT:  .LBB12_14: # %cond.load10
778 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e8, mf2, tu, ma
779 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
780 ; RV64ZVE32F-NEXT:    add a2, a0, a2
781 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
782 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
783 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
784 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
785 ; RV64ZVE32F-NEXT:    bnez a2, .LBB12_8
786 ; RV64ZVE32F-NEXT:    j .LBB12_9
787 ; RV64ZVE32F-NEXT:  .LBB12_15: # %cond.load16
788 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
789 ; RV64ZVE32F-NEXT:    add a2, a0, a2
790 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
791 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
792 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e8, mf2, tu, ma
793 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
794 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
795 ; RV64ZVE32F-NEXT:    beqz a1, .LBB12_11
796 ; RV64ZVE32F-NEXT:  .LBB12_16: # %cond.load19
797 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
798 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
799 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
800 ; RV64ZVE32F-NEXT:    add a0, a0, a1
801 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
802 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
803 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
804 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
805 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
806 ; RV64ZVE32F-NEXT:    ret
807   %ptrs = getelementptr inbounds i8, ptr %base, <8 x i8> %idxs
808   %v = call <8 x i8> @llvm.masked.gather.v8i8.v8p0(<8 x ptr> %ptrs, i32 1, <8 x i1> %m, <8 x i8> %passthru)
809   ret <8 x i8> %v
812 declare <1 x i16> @llvm.masked.gather.v1i16.v1p0(<1 x ptr>, i32, <1 x i1>, <1 x i16>)
814 define <1 x i16> @mgather_v1i16(<1 x ptr> %ptrs, <1 x i1> %m, <1 x i16> %passthru) {
815 ; RV32V-LABEL: mgather_v1i16:
816 ; RV32V:       # %bb.0:
817 ; RV32V-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
818 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
819 ; RV32V-NEXT:    vmv1r.v v8, v9
820 ; RV32V-NEXT:    ret
822 ; RV64V-LABEL: mgather_v1i16:
823 ; RV64V:       # %bb.0:
824 ; RV64V-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
825 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
826 ; RV64V-NEXT:    vmv1r.v v8, v9
827 ; RV64V-NEXT:    ret
829 ; RV32ZVE32F-LABEL: mgather_v1i16:
830 ; RV32ZVE32F:       # %bb.0:
831 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, mu
832 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
833 ; RV32ZVE32F-NEXT:    vmv1r.v v8, v9
834 ; RV32ZVE32F-NEXT:    ret
836 ; RV64ZVE32F-LABEL: mgather_v1i16:
837 ; RV64ZVE32F:       # %bb.0:
838 ; RV64ZVE32F-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
839 ; RV64ZVE32F-NEXT:    vfirst.m a1, v0
840 ; RV64ZVE32F-NEXT:    bnez a1, .LBB13_2
841 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
842 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
843 ; RV64ZVE32F-NEXT:    vle16.v v8, (a0)
844 ; RV64ZVE32F-NEXT:  .LBB13_2: # %else
845 ; RV64ZVE32F-NEXT:    ret
846   %v = call <1 x i16> @llvm.masked.gather.v1i16.v1p0(<1 x ptr> %ptrs, i32 2, <1 x i1> %m, <1 x i16> %passthru)
847   ret <1 x i16> %v
850 declare <2 x i16> @llvm.masked.gather.v2i16.v2p0(<2 x ptr>, i32, <2 x i1>, <2 x i16>)
852 define <2 x i16> @mgather_v2i16(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i16> %passthru) {
853 ; RV32V-LABEL: mgather_v2i16:
854 ; RV32V:       # %bb.0:
855 ; RV32V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
856 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
857 ; RV32V-NEXT:    vmv1r.v v8, v9
858 ; RV32V-NEXT:    ret
860 ; RV64V-LABEL: mgather_v2i16:
861 ; RV64V:       # %bb.0:
862 ; RV64V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
863 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
864 ; RV64V-NEXT:    vmv1r.v v8, v9
865 ; RV64V-NEXT:    ret
867 ; RV32ZVE32F-LABEL: mgather_v2i16:
868 ; RV32ZVE32F:       # %bb.0:
869 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, mu
870 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
871 ; RV32ZVE32F-NEXT:    vmv1r.v v8, v9
872 ; RV32ZVE32F-NEXT:    ret
874 ; RV64ZVE32F-LABEL: mgather_v2i16:
875 ; RV64ZVE32F:       # %bb.0:
876 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
877 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
878 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
879 ; RV64ZVE32F-NEXT:    bnez a3, .LBB14_3
880 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
881 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
882 ; RV64ZVE32F-NEXT:    bnez a2, .LBB14_4
883 ; RV64ZVE32F-NEXT:  .LBB14_2: # %else2
884 ; RV64ZVE32F-NEXT:    ret
885 ; RV64ZVE32F-NEXT:  .LBB14_3: # %cond.load
886 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
887 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
888 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
889 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
890 ; RV64ZVE32F-NEXT:    beqz a2, .LBB14_2
891 ; RV64ZVE32F-NEXT:  .LBB14_4: # %cond.load1
892 ; RV64ZVE32F-NEXT:    lh a0, 0(a1)
893 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
894 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
895 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
896 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
897 ; RV64ZVE32F-NEXT:    ret
898   %v = call <2 x i16> @llvm.masked.gather.v2i16.v2p0(<2 x ptr> %ptrs, i32 2, <2 x i1> %m, <2 x i16> %passthru)
899   ret <2 x i16> %v
902 define <2 x i32> @mgather_v2i16_sextload_v2i32(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i16> %passthru) {
903 ; RV32V-LABEL: mgather_v2i16_sextload_v2i32:
904 ; RV32V:       # %bb.0:
905 ; RV32V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
906 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
907 ; RV32V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
908 ; RV32V-NEXT:    vsext.vf2 v8, v9
909 ; RV32V-NEXT:    ret
911 ; RV64V-LABEL: mgather_v2i16_sextload_v2i32:
912 ; RV64V:       # %bb.0:
913 ; RV64V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
914 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
915 ; RV64V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
916 ; RV64V-NEXT:    vsext.vf2 v8, v9
917 ; RV64V-NEXT:    ret
919 ; RV32ZVE32F-LABEL: mgather_v2i16_sextload_v2i32:
920 ; RV32ZVE32F:       # %bb.0:
921 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, mu
922 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
923 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
924 ; RV32ZVE32F-NEXT:    vsext.vf2 v8, v9
925 ; RV32ZVE32F-NEXT:    ret
927 ; RV64ZVE32F-LABEL: mgather_v2i16_sextload_v2i32:
928 ; RV64ZVE32F:       # %bb.0:
929 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
930 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
931 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
932 ; RV64ZVE32F-NEXT:    beqz a3, .LBB15_2
933 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
934 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
935 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
936 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
937 ; RV64ZVE32F-NEXT:  .LBB15_2: # %else
938 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
939 ; RV64ZVE32F-NEXT:    beqz a2, .LBB15_4
940 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
941 ; RV64ZVE32F-NEXT:    lh a0, 0(a1)
942 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
943 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
944 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
945 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
946 ; RV64ZVE32F-NEXT:  .LBB15_4: # %else2
947 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
948 ; RV64ZVE32F-NEXT:    vsext.vf2 v9, v8
949 ; RV64ZVE32F-NEXT:    vmv.v.v v8, v9
950 ; RV64ZVE32F-NEXT:    ret
951   %v = call <2 x i16> @llvm.masked.gather.v2i16.v2p0(<2 x ptr> %ptrs, i32 2, <2 x i1> %m, <2 x i16> %passthru)
952   %ev = sext <2 x i16> %v to <2 x i32>
953   ret <2 x i32> %ev
956 define <2 x i32> @mgather_v2i16_zextload_v2i32(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i16> %passthru) {
957 ; RV32V-LABEL: mgather_v2i16_zextload_v2i32:
958 ; RV32V:       # %bb.0:
959 ; RV32V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
960 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
961 ; RV32V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
962 ; RV32V-NEXT:    vzext.vf2 v8, v9
963 ; RV32V-NEXT:    ret
965 ; RV64V-LABEL: mgather_v2i16_zextload_v2i32:
966 ; RV64V:       # %bb.0:
967 ; RV64V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
968 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
969 ; RV64V-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma
970 ; RV64V-NEXT:    vzext.vf2 v8, v9
971 ; RV64V-NEXT:    ret
973 ; RV32ZVE32F-LABEL: mgather_v2i16_zextload_v2i32:
974 ; RV32ZVE32F:       # %bb.0:
975 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, mu
976 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
977 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
978 ; RV32ZVE32F-NEXT:    vzext.vf2 v8, v9
979 ; RV32ZVE32F-NEXT:    ret
981 ; RV64ZVE32F-LABEL: mgather_v2i16_zextload_v2i32:
982 ; RV64ZVE32F:       # %bb.0:
983 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
984 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
985 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
986 ; RV64ZVE32F-NEXT:    beqz a3, .LBB16_2
987 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
988 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
989 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
990 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
991 ; RV64ZVE32F-NEXT:  .LBB16_2: # %else
992 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
993 ; RV64ZVE32F-NEXT:    beqz a2, .LBB16_4
994 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
995 ; RV64ZVE32F-NEXT:    lh a0, 0(a1)
996 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
997 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
998 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
999 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
1000 ; RV64ZVE32F-NEXT:  .LBB16_4: # %else2
1001 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
1002 ; RV64ZVE32F-NEXT:    vzext.vf2 v9, v8
1003 ; RV64ZVE32F-NEXT:    vmv.v.v v8, v9
1004 ; RV64ZVE32F-NEXT:    ret
1005   %v = call <2 x i16> @llvm.masked.gather.v2i16.v2p0(<2 x ptr> %ptrs, i32 2, <2 x i1> %m, <2 x i16> %passthru)
1006   %ev = zext <2 x i16> %v to <2 x i32>
1007   ret <2 x i32> %ev
1010 define <2 x i64> @mgather_v2i16_sextload_v2i64(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i16> %passthru) {
1011 ; RV32V-LABEL: mgather_v2i16_sextload_v2i64:
1012 ; RV32V:       # %bb.0:
1013 ; RV32V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1014 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
1015 ; RV32V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
1016 ; RV32V-NEXT:    vsext.vf4 v8, v9
1017 ; RV32V-NEXT:    ret
1019 ; RV64V-LABEL: mgather_v2i16_sextload_v2i64:
1020 ; RV64V:       # %bb.0:
1021 ; RV64V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1022 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
1023 ; RV64V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
1024 ; RV64V-NEXT:    vsext.vf4 v8, v9
1025 ; RV64V-NEXT:    ret
1027 ; RV32ZVE32F-LABEL: mgather_v2i16_sextload_v2i64:
1028 ; RV32ZVE32F:       # %bb.0:
1029 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, mu
1030 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
1031 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
1032 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
1033 ; RV32ZVE32F-NEXT:    srai a2, a1, 31
1034 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v9
1035 ; RV32ZVE32F-NEXT:    srai a4, a3, 31
1036 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
1037 ; RV32ZVE32F-NEXT:    sw a1, 8(a0)
1038 ; RV32ZVE32F-NEXT:    sw a4, 4(a0)
1039 ; RV32ZVE32F-NEXT:    sw a2, 12(a0)
1040 ; RV32ZVE32F-NEXT:    ret
1042 ; RV64ZVE32F-LABEL: mgather_v2i16_sextload_v2i64:
1043 ; RV64ZVE32F:       # %bb.0:
1044 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1045 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
1046 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
1047 ; RV64ZVE32F-NEXT:    beqz a3, .LBB17_2
1048 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
1049 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1050 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
1051 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
1052 ; RV64ZVE32F-NEXT:  .LBB17_2: # %else
1053 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
1054 ; RV64ZVE32F-NEXT:    beqz a2, .LBB17_4
1055 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
1056 ; RV64ZVE32F-NEXT:    lh a0, 0(a1)
1057 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1058 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
1059 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
1060 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
1061 ; RV64ZVE32F-NEXT:  .LBB17_4: # %else2
1062 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
1063 ; RV64ZVE32F-NEXT:    vmv.x.s a0, v8
1064 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1065 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
1066 ; RV64ZVE32F-NEXT:    ret
1067   %v = call <2 x i16> @llvm.masked.gather.v2i16.v2p0(<2 x ptr> %ptrs, i32 2, <2 x i1> %m, <2 x i16> %passthru)
1068   %ev = sext <2 x i16> %v to <2 x i64>
1069   ret <2 x i64> %ev
1072 define <2 x i64> @mgather_v2i16_zextload_v2i64(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i16> %passthru) {
1073 ; RV32V-LABEL: mgather_v2i16_zextload_v2i64:
1074 ; RV32V:       # %bb.0:
1075 ; RV32V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1076 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
1077 ; RV32V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
1078 ; RV32V-NEXT:    vzext.vf4 v8, v9
1079 ; RV32V-NEXT:    ret
1081 ; RV64V-LABEL: mgather_v2i16_zextload_v2i64:
1082 ; RV64V:       # %bb.0:
1083 ; RV64V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
1084 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
1085 ; RV64V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
1086 ; RV64V-NEXT:    vzext.vf4 v8, v9
1087 ; RV64V-NEXT:    ret
1089 ; RV32ZVE32F-LABEL: mgather_v2i16_zextload_v2i64:
1090 ; RV32ZVE32F:       # %bb.0:
1091 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, mu
1092 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
1093 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
1094 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
1095 ; RV32ZVE32F-NEXT:    lui a2, 16
1096 ; RV32ZVE32F-NEXT:    addi a2, a2, -1
1097 ; RV32ZVE32F-NEXT:    and a1, a1, a2
1098 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v9
1099 ; RV32ZVE32F-NEXT:    and a2, a3, a2
1100 ; RV32ZVE32F-NEXT:    sw zero, 12(a0)
1101 ; RV32ZVE32F-NEXT:    sw zero, 4(a0)
1102 ; RV32ZVE32F-NEXT:    sw a2, 0(a0)
1103 ; RV32ZVE32F-NEXT:    sw a1, 8(a0)
1104 ; RV32ZVE32F-NEXT:    ret
1106 ; RV64ZVE32F-LABEL: mgather_v2i16_zextload_v2i64:
1107 ; RV64ZVE32F:       # %bb.0:
1108 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1109 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
1110 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
1111 ; RV64ZVE32F-NEXT:    beqz a3, .LBB18_2
1112 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
1113 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1114 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
1115 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
1116 ; RV64ZVE32F-NEXT:  .LBB18_2: # %else
1117 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
1118 ; RV64ZVE32F-NEXT:    beqz a2, .LBB18_4
1119 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
1120 ; RV64ZVE32F-NEXT:    lh a0, 0(a1)
1121 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1122 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
1123 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
1124 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
1125 ; RV64ZVE32F-NEXT:  .LBB18_4: # %else2
1126 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
1127 ; RV64ZVE32F-NEXT:    vmv.x.s a0, v8
1128 ; RV64ZVE32F-NEXT:    lui a1, 16
1129 ; RV64ZVE32F-NEXT:    addiw a1, a1, -1
1130 ; RV64ZVE32F-NEXT:    and a0, a0, a1
1131 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1132 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1133 ; RV64ZVE32F-NEXT:    and a1, a2, a1
1134 ; RV64ZVE32F-NEXT:    ret
1135   %v = call <2 x i16> @llvm.masked.gather.v2i16.v2p0(<2 x ptr> %ptrs, i32 2, <2 x i1> %m, <2 x i16> %passthru)
1136   %ev = zext <2 x i16> %v to <2 x i64>
1137   ret <2 x i64> %ev
1140 declare <4 x i16> @llvm.masked.gather.v4i16.v4p0(<4 x ptr>, i32, <4 x i1>, <4 x i16>)
1142 define <4 x i16> @mgather_v4i16(<4 x ptr> %ptrs, <4 x i1> %m, <4 x i16> %passthru) {
1143 ; RV32-LABEL: mgather_v4i16:
1144 ; RV32:       # %bb.0:
1145 ; RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1146 ; RV32-NEXT:    vluxei32.v v9, (zero), v8, v0.t
1147 ; RV32-NEXT:    vmv1r.v v8, v9
1148 ; RV32-NEXT:    ret
1150 ; RV64V-LABEL: mgather_v4i16:
1151 ; RV64V:       # %bb.0:
1152 ; RV64V-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
1153 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8, v0.t
1154 ; RV64V-NEXT:    vmv1r.v v8, v10
1155 ; RV64V-NEXT:    ret
1157 ; RV64ZVE32F-LABEL: mgather_v4i16:
1158 ; RV64ZVE32F:       # %bb.0:
1159 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1160 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
1161 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
1162 ; RV64ZVE32F-NEXT:    bnez a2, .LBB19_5
1163 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
1164 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
1165 ; RV64ZVE32F-NEXT:    bnez a2, .LBB19_6
1166 ; RV64ZVE32F-NEXT:  .LBB19_2: # %else2
1167 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
1168 ; RV64ZVE32F-NEXT:    bnez a2, .LBB19_7
1169 ; RV64ZVE32F-NEXT:  .LBB19_3: # %else5
1170 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
1171 ; RV64ZVE32F-NEXT:    bnez a1, .LBB19_8
1172 ; RV64ZVE32F-NEXT:  .LBB19_4: # %else8
1173 ; RV64ZVE32F-NEXT:    ret
1174 ; RV64ZVE32F-NEXT:  .LBB19_5: # %cond.load
1175 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
1176 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1177 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
1178 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1179 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
1180 ; RV64ZVE32F-NEXT:    beqz a2, .LBB19_2
1181 ; RV64ZVE32F-NEXT:  .LBB19_6: # %cond.load1
1182 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
1183 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1184 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1185 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1186 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
1187 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
1188 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
1189 ; RV64ZVE32F-NEXT:    beqz a2, .LBB19_3
1190 ; RV64ZVE32F-NEXT:  .LBB19_7: # %cond.load4
1191 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
1192 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1193 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
1194 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1195 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 2
1196 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
1197 ; RV64ZVE32F-NEXT:    beqz a1, .LBB19_4
1198 ; RV64ZVE32F-NEXT:  .LBB19_8: # %cond.load7
1199 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
1200 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1201 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1202 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
1203 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 3
1204 ; RV64ZVE32F-NEXT:    ret
1205   %v = call <4 x i16> @llvm.masked.gather.v4i16.v4p0(<4 x ptr> %ptrs, i32 2, <4 x i1> %m, <4 x i16> %passthru)
1206   ret <4 x i16> %v
1209 define <4 x i16> @mgather_truemask_v4i16(<4 x ptr> %ptrs, <4 x i16> %passthru) {
1210 ; RV32-LABEL: mgather_truemask_v4i16:
1211 ; RV32:       # %bb.0:
1212 ; RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1213 ; RV32-NEXT:    vluxei32.v v9, (zero), v8
1214 ; RV32-NEXT:    vmv1r.v v8, v9
1215 ; RV32-NEXT:    ret
1217 ; RV64V-LABEL: mgather_truemask_v4i16:
1218 ; RV64V:       # %bb.0:
1219 ; RV64V-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1220 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8
1221 ; RV64V-NEXT:    vmv1r.v v8, v10
1222 ; RV64V-NEXT:    ret
1224 ; RV64ZVE32F-LABEL: mgather_truemask_v4i16:
1225 ; RV64ZVE32F:       # %bb.0:
1226 ; RV64ZVE32F-NEXT:    ld a1, 0(a0)
1227 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
1228 ; RV64ZVE32F-NEXT:    ld a3, 16(a0)
1229 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
1230 ; RV64ZVE32F-NEXT:    lh a1, 0(a1)
1231 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1232 ; RV64ZVE32F-NEXT:    lh a3, 0(a3)
1233 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1234 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
1235 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
1236 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
1237 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
1238 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
1239 ; RV64ZVE32F-NEXT:    ret
1240   %v = call <4 x i16> @llvm.masked.gather.v4i16.v4p0(<4 x ptr> %ptrs, i32 2, <4 x i1> splat (i1 1), <4 x i16> %passthru)
1241   ret <4 x i16> %v
1244 define <4 x i16> @mgather_falsemask_v4i16(<4 x ptr> %ptrs, <4 x i16> %passthru) {
1245 ; RV32-LABEL: mgather_falsemask_v4i16:
1246 ; RV32:       # %bb.0:
1247 ; RV32-NEXT:    vmv1r.v v8, v9
1248 ; RV32-NEXT:    ret
1250 ; RV64V-LABEL: mgather_falsemask_v4i16:
1251 ; RV64V:       # %bb.0:
1252 ; RV64V-NEXT:    vmv1r.v v8, v10
1253 ; RV64V-NEXT:    ret
1255 ; RV64ZVE32F-LABEL: mgather_falsemask_v4i16:
1256 ; RV64ZVE32F:       # %bb.0:
1257 ; RV64ZVE32F-NEXT:    ret
1258   %v = call <4 x i16> @llvm.masked.gather.v4i16.v4p0(<4 x ptr> %ptrs, i32 2, <4 x i1> zeroinitializer, <4 x i16> %passthru)
1259   ret <4 x i16> %v
1262 declare <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr>, i32, <8 x i1>, <8 x i16>)
1264 define <8 x i16> @mgather_v8i16(<8 x ptr> %ptrs, <8 x i1> %m, <8 x i16> %passthru) {
1265 ; RV32-LABEL: mgather_v8i16:
1266 ; RV32:       # %bb.0:
1267 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1268 ; RV32-NEXT:    vluxei32.v v10, (zero), v8, v0.t
1269 ; RV32-NEXT:    vmv.v.v v8, v10
1270 ; RV32-NEXT:    ret
1272 ; RV64V-LABEL: mgather_v8i16:
1273 ; RV64V:       # %bb.0:
1274 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1275 ; RV64V-NEXT:    vluxei64.v v12, (zero), v8, v0.t
1276 ; RV64V-NEXT:    vmv.v.v v8, v12
1277 ; RV64V-NEXT:    ret
1279 ; RV64ZVE32F-LABEL: mgather_v8i16:
1280 ; RV64ZVE32F:       # %bb.0:
1281 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1282 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
1283 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
1284 ; RV64ZVE32F-NEXT:    bnez a2, .LBB22_9
1285 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
1286 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
1287 ; RV64ZVE32F-NEXT:    bnez a2, .LBB22_10
1288 ; RV64ZVE32F-NEXT:  .LBB22_2: # %else2
1289 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
1290 ; RV64ZVE32F-NEXT:    bnez a2, .LBB22_11
1291 ; RV64ZVE32F-NEXT:  .LBB22_3: # %else5
1292 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1293 ; RV64ZVE32F-NEXT:    bnez a2, .LBB22_12
1294 ; RV64ZVE32F-NEXT:  .LBB22_4: # %else8
1295 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1296 ; RV64ZVE32F-NEXT:    bnez a2, .LBB22_13
1297 ; RV64ZVE32F-NEXT:  .LBB22_5: # %else11
1298 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1299 ; RV64ZVE32F-NEXT:    bnez a2, .LBB22_14
1300 ; RV64ZVE32F-NEXT:  .LBB22_6: # %else14
1301 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
1302 ; RV64ZVE32F-NEXT:    bnez a2, .LBB22_15
1303 ; RV64ZVE32F-NEXT:  .LBB22_7: # %else17
1304 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1305 ; RV64ZVE32F-NEXT:    bnez a1, .LBB22_16
1306 ; RV64ZVE32F-NEXT:  .LBB22_8: # %else20
1307 ; RV64ZVE32F-NEXT:    ret
1308 ; RV64ZVE32F-NEXT:  .LBB22_9: # %cond.load
1309 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
1310 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1311 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
1312 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1313 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
1314 ; RV64ZVE32F-NEXT:    beqz a2, .LBB22_2
1315 ; RV64ZVE32F-NEXT:  .LBB22_10: # %cond.load1
1316 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
1317 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1318 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1319 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1320 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
1321 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
1322 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
1323 ; RV64ZVE32F-NEXT:    beqz a2, .LBB22_3
1324 ; RV64ZVE32F-NEXT:  .LBB22_11: # %cond.load4
1325 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
1326 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1327 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
1328 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1329 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 2
1330 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1331 ; RV64ZVE32F-NEXT:    beqz a2, .LBB22_4
1332 ; RV64ZVE32F-NEXT:  .LBB22_12: # %cond.load7
1333 ; RV64ZVE32F-NEXT:    ld a2, 24(a0)
1334 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1335 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
1336 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1337 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 3
1338 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1339 ; RV64ZVE32F-NEXT:    beqz a2, .LBB22_5
1340 ; RV64ZVE32F-NEXT:  .LBB22_13: # %cond.load10
1341 ; RV64ZVE32F-NEXT:    ld a2, 32(a0)
1342 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1343 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
1344 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1345 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 4
1346 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1347 ; RV64ZVE32F-NEXT:    beqz a2, .LBB22_6
1348 ; RV64ZVE32F-NEXT:  .LBB22_14: # %cond.load13
1349 ; RV64ZVE32F-NEXT:    ld a2, 40(a0)
1350 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1351 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
1352 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1353 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 5
1354 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
1355 ; RV64ZVE32F-NEXT:    beqz a2, .LBB22_7
1356 ; RV64ZVE32F-NEXT:  .LBB22_15: # %cond.load16
1357 ; RV64ZVE32F-NEXT:    ld a2, 48(a0)
1358 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1359 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
1360 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1361 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 6
1362 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1363 ; RV64ZVE32F-NEXT:    beqz a1, .LBB22_8
1364 ; RV64ZVE32F-NEXT:  .LBB22_16: # %cond.load19
1365 ; RV64ZVE32F-NEXT:    ld a0, 56(a0)
1366 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1367 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1368 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
1369 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 7
1370 ; RV64ZVE32F-NEXT:    ret
1371   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x i16> %passthru)
1372   ret <8 x i16> %v
1375 define <8 x i16> @mgather_baseidx_v8i8_v8i16(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i16> %passthru) {
1376 ; RV32-LABEL: mgather_baseidx_v8i8_v8i16:
1377 ; RV32:       # %bb.0:
1378 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1379 ; RV32-NEXT:    vsext.vf4 v10, v8
1380 ; RV32-NEXT:    vadd.vv v10, v10, v10
1381 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1382 ; RV32-NEXT:    vluxei32.v v9, (a0), v10, v0.t
1383 ; RV32-NEXT:    vmv.v.v v8, v9
1384 ; RV32-NEXT:    ret
1386 ; RV64V-LABEL: mgather_baseidx_v8i8_v8i16:
1387 ; RV64V:       # %bb.0:
1388 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1389 ; RV64V-NEXT:    vsext.vf8 v12, v8
1390 ; RV64V-NEXT:    vadd.vv v12, v12, v12
1391 ; RV64V-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1392 ; RV64V-NEXT:    vluxei64.v v9, (a0), v12, v0.t
1393 ; RV64V-NEXT:    vmv.v.v v8, v9
1394 ; RV64V-NEXT:    ret
1396 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8_v8i16:
1397 ; RV64ZVE32F:       # %bb.0:
1398 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1399 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
1400 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
1401 ; RV64ZVE32F-NEXT:    beqz a2, .LBB23_2
1402 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
1403 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1404 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1405 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1406 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1407 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
1408 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1409 ; RV64ZVE32F-NEXT:  .LBB23_2: # %else
1410 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
1411 ; RV64ZVE32F-NEXT:    beqz a2, .LBB23_4
1412 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
1413 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1414 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
1415 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
1416 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1417 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1418 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1419 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1420 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
1421 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
1422 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
1423 ; RV64ZVE32F-NEXT:  .LBB23_4: # %else2
1424 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
1425 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
1426 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
1427 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1428 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
1429 ; RV64ZVE32F-NEXT:    bnez a2, .LBB23_12
1430 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
1431 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1432 ; RV64ZVE32F-NEXT:    bnez a2, .LBB23_13
1433 ; RV64ZVE32F-NEXT:  .LBB23_6: # %else8
1434 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1435 ; RV64ZVE32F-NEXT:    bnez a2, .LBB23_14
1436 ; RV64ZVE32F-NEXT:  .LBB23_7: # %else11
1437 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1438 ; RV64ZVE32F-NEXT:    beqz a2, .LBB23_9
1439 ; RV64ZVE32F-NEXT:  .LBB23_8: # %cond.load13
1440 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1441 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
1442 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1443 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1444 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1445 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1446 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1447 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1448 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
1449 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
1450 ; RV64ZVE32F-NEXT:  .LBB23_9: # %else14
1451 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
1452 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1453 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
1454 ; RV64ZVE32F-NEXT:    bnez a2, .LBB23_15
1455 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
1456 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1457 ; RV64ZVE32F-NEXT:    bnez a1, .LBB23_16
1458 ; RV64ZVE32F-NEXT:  .LBB23_11: # %else20
1459 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
1460 ; RV64ZVE32F-NEXT:    ret
1461 ; RV64ZVE32F-NEXT:  .LBB23_12: # %cond.load4
1462 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1463 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1464 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1465 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1466 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1467 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
1468 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
1469 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
1470 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1471 ; RV64ZVE32F-NEXT:    beqz a2, .LBB23_6
1472 ; RV64ZVE32F-NEXT:  .LBB23_13: # %cond.load7
1473 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1474 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1475 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1476 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1477 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1478 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1479 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1480 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1481 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
1482 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
1483 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1484 ; RV64ZVE32F-NEXT:    beqz a2, .LBB23_7
1485 ; RV64ZVE32F-NEXT:  .LBB23_14: # %cond.load10
1486 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1487 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
1488 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1489 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1490 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1491 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1492 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1493 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
1494 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
1495 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1496 ; RV64ZVE32F-NEXT:    bnez a2, .LBB23_8
1497 ; RV64ZVE32F-NEXT:    j .LBB23_9
1498 ; RV64ZVE32F-NEXT:  .LBB23_15: # %cond.load16
1499 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1500 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1501 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1502 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1503 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1504 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
1505 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
1506 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
1507 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1508 ; RV64ZVE32F-NEXT:    beqz a1, .LBB23_11
1509 ; RV64ZVE32F-NEXT:  .LBB23_16: # %cond.load19
1510 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1511 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1512 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
1513 ; RV64ZVE32F-NEXT:    slli a1, a1, 1
1514 ; RV64ZVE32F-NEXT:    add a0, a0, a1
1515 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1516 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1517 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
1518 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1519 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
1520 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
1521 ; RV64ZVE32F-NEXT:    ret
1522   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i8> %idxs
1523   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x i16> %passthru)
1524   ret <8 x i16> %v
1527 define <8 x i16> @mgather_baseidx_sext_v8i8_v8i16(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i16> %passthru) {
1528 ; RV32-LABEL: mgather_baseidx_sext_v8i8_v8i16:
1529 ; RV32:       # %bb.0:
1530 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
1531 ; RV32-NEXT:    vsext.vf4 v10, v8
1532 ; RV32-NEXT:    vadd.vv v10, v10, v10
1533 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1534 ; RV32-NEXT:    vluxei32.v v9, (a0), v10, v0.t
1535 ; RV32-NEXT:    vmv.v.v v8, v9
1536 ; RV32-NEXT:    ret
1538 ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8i16:
1539 ; RV64V:       # %bb.0:
1540 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1541 ; RV64V-NEXT:    vsext.vf8 v12, v8
1542 ; RV64V-NEXT:    vadd.vv v12, v12, v12
1543 ; RV64V-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1544 ; RV64V-NEXT:    vluxei64.v v9, (a0), v12, v0.t
1545 ; RV64V-NEXT:    vmv.v.v v8, v9
1546 ; RV64V-NEXT:    ret
1548 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8i16:
1549 ; RV64ZVE32F:       # %bb.0:
1550 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1551 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
1552 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
1553 ; RV64ZVE32F-NEXT:    beqz a2, .LBB24_2
1554 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
1555 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1556 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1557 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1558 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1559 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
1560 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1561 ; RV64ZVE32F-NEXT:  .LBB24_2: # %else
1562 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
1563 ; RV64ZVE32F-NEXT:    beqz a2, .LBB24_4
1564 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
1565 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1566 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
1567 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
1568 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1569 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1570 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1571 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1572 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
1573 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
1574 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
1575 ; RV64ZVE32F-NEXT:  .LBB24_4: # %else2
1576 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
1577 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
1578 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
1579 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1580 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
1581 ; RV64ZVE32F-NEXT:    bnez a2, .LBB24_12
1582 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
1583 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1584 ; RV64ZVE32F-NEXT:    bnez a2, .LBB24_13
1585 ; RV64ZVE32F-NEXT:  .LBB24_6: # %else8
1586 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1587 ; RV64ZVE32F-NEXT:    bnez a2, .LBB24_14
1588 ; RV64ZVE32F-NEXT:  .LBB24_7: # %else11
1589 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1590 ; RV64ZVE32F-NEXT:    beqz a2, .LBB24_9
1591 ; RV64ZVE32F-NEXT:  .LBB24_8: # %cond.load13
1592 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1593 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
1594 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1595 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1596 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1597 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1598 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1599 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1600 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
1601 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
1602 ; RV64ZVE32F-NEXT:  .LBB24_9: # %else14
1603 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
1604 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1605 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
1606 ; RV64ZVE32F-NEXT:    bnez a2, .LBB24_15
1607 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
1608 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1609 ; RV64ZVE32F-NEXT:    bnez a1, .LBB24_16
1610 ; RV64ZVE32F-NEXT:  .LBB24_11: # %else20
1611 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
1612 ; RV64ZVE32F-NEXT:    ret
1613 ; RV64ZVE32F-NEXT:  .LBB24_12: # %cond.load4
1614 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1615 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1616 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1617 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1618 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1619 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
1620 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
1621 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
1622 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1623 ; RV64ZVE32F-NEXT:    beqz a2, .LBB24_6
1624 ; RV64ZVE32F-NEXT:  .LBB24_13: # %cond.load7
1625 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1626 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1627 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1628 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1629 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1630 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1631 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1632 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1633 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
1634 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
1635 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1636 ; RV64ZVE32F-NEXT:    beqz a2, .LBB24_7
1637 ; RV64ZVE32F-NEXT:  .LBB24_14: # %cond.load10
1638 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1639 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
1640 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1641 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1642 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1643 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1644 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1645 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
1646 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
1647 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1648 ; RV64ZVE32F-NEXT:    bnez a2, .LBB24_8
1649 ; RV64ZVE32F-NEXT:    j .LBB24_9
1650 ; RV64ZVE32F-NEXT:  .LBB24_15: # %cond.load16
1651 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1652 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1653 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1654 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1655 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1656 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
1657 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
1658 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
1659 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1660 ; RV64ZVE32F-NEXT:    beqz a1, .LBB24_11
1661 ; RV64ZVE32F-NEXT:  .LBB24_16: # %cond.load19
1662 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1663 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1664 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
1665 ; RV64ZVE32F-NEXT:    slli a1, a1, 1
1666 ; RV64ZVE32F-NEXT:    add a0, a0, a1
1667 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1668 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1669 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
1670 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1671 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
1672 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
1673 ; RV64ZVE32F-NEXT:    ret
1674   %eidxs = sext <8 x i8> %idxs to <8 x i16>
1675   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i16> %eidxs
1676   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x i16> %passthru)
1677   ret <8 x i16> %v
1680 define <8 x i16> @mgather_baseidx_zext_v8i8_v8i16(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i16> %passthru) {
1681 ; RV32-LABEL: mgather_baseidx_zext_v8i8_v8i16:
1682 ; RV32:       # %bb.0:
1683 ; RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
1684 ; RV32-NEXT:    vwaddu.vv v10, v8, v8
1685 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1686 ; RV32-NEXT:    vluxei16.v v9, (a0), v10, v0.t
1687 ; RV32-NEXT:    vmv.v.v v8, v9
1688 ; RV32-NEXT:    ret
1690 ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8i16:
1691 ; RV64V:       # %bb.0:
1692 ; RV64V-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
1693 ; RV64V-NEXT:    vwaddu.vv v10, v8, v8
1694 ; RV64V-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1695 ; RV64V-NEXT:    vluxei16.v v9, (a0), v10, v0.t
1696 ; RV64V-NEXT:    vmv.v.v v8, v9
1697 ; RV64V-NEXT:    ret
1699 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8i16:
1700 ; RV64ZVE32F:       # %bb.0:
1701 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1702 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
1703 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
1704 ; RV64ZVE32F-NEXT:    beqz a2, .LBB25_2
1705 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
1706 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1707 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
1708 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1709 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1710 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1711 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
1712 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1713 ; RV64ZVE32F-NEXT:  .LBB25_2: # %else
1714 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
1715 ; RV64ZVE32F-NEXT:    beqz a2, .LBB25_4
1716 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
1717 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1718 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
1719 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
1720 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
1721 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1722 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1723 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1724 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1725 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
1726 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
1727 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
1728 ; RV64ZVE32F-NEXT:  .LBB25_4: # %else2
1729 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
1730 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
1731 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
1732 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1733 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
1734 ; RV64ZVE32F-NEXT:    bnez a2, .LBB25_12
1735 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
1736 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1737 ; RV64ZVE32F-NEXT:    bnez a2, .LBB25_13
1738 ; RV64ZVE32F-NEXT:  .LBB25_6: # %else8
1739 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1740 ; RV64ZVE32F-NEXT:    bnez a2, .LBB25_14
1741 ; RV64ZVE32F-NEXT:  .LBB25_7: # %else11
1742 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1743 ; RV64ZVE32F-NEXT:    beqz a2, .LBB25_9
1744 ; RV64ZVE32F-NEXT:  .LBB25_8: # %cond.load13
1745 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1746 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
1747 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1748 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
1749 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1750 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1751 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1752 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1753 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1754 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
1755 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
1756 ; RV64ZVE32F-NEXT:  .LBB25_9: # %else14
1757 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
1758 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
1759 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
1760 ; RV64ZVE32F-NEXT:    bnez a2, .LBB25_15
1761 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
1762 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1763 ; RV64ZVE32F-NEXT:    bnez a1, .LBB25_16
1764 ; RV64ZVE32F-NEXT:  .LBB25_11: # %else20
1765 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
1766 ; RV64ZVE32F-NEXT:    ret
1767 ; RV64ZVE32F-NEXT:  .LBB25_12: # %cond.load4
1768 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1769 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
1770 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1771 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1772 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1773 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1774 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
1775 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
1776 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
1777 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1778 ; RV64ZVE32F-NEXT:    beqz a2, .LBB25_6
1779 ; RV64ZVE32F-NEXT:  .LBB25_13: # %cond.load7
1780 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1781 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1782 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1783 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
1784 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1785 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1786 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1787 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1788 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1789 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
1790 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
1791 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1792 ; RV64ZVE32F-NEXT:    beqz a2, .LBB25_7
1793 ; RV64ZVE32F-NEXT:  .LBB25_14: # %cond.load10
1794 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1795 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
1796 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
1797 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1798 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1799 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1800 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
1801 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1802 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
1803 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
1804 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1805 ; RV64ZVE32F-NEXT:    bnez a2, .LBB25_8
1806 ; RV64ZVE32F-NEXT:    j .LBB25_9
1807 ; RV64ZVE32F-NEXT:  .LBB25_15: # %cond.load16
1808 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1809 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
1810 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1811 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1812 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1813 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1814 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
1815 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
1816 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
1817 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1818 ; RV64ZVE32F-NEXT:    beqz a1, .LBB25_11
1819 ; RV64ZVE32F-NEXT:  .LBB25_16: # %cond.load19
1820 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
1821 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1822 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
1823 ; RV64ZVE32F-NEXT:    andi a1, a1, 255
1824 ; RV64ZVE32F-NEXT:    slli a1, a1, 1
1825 ; RV64ZVE32F-NEXT:    add a0, a0, a1
1826 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1827 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
1828 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
1829 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1830 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
1831 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
1832 ; RV64ZVE32F-NEXT:    ret
1833   %eidxs = zext <8 x i8> %idxs to <8 x i16>
1834   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i16> %eidxs
1835   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x i16> %passthru)
1836   ret <8 x i16> %v
1839 define <8 x i16> @mgather_baseidx_v8i16(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x i16> %passthru) {
1840 ; RV32-LABEL: mgather_baseidx_v8i16:
1841 ; RV32:       # %bb.0:
1842 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1843 ; RV32-NEXT:    vwadd.vv v10, v8, v8
1844 ; RV32-NEXT:    vluxei32.v v9, (a0), v10, v0.t
1845 ; RV32-NEXT:    vmv.v.v v8, v9
1846 ; RV32-NEXT:    ret
1848 ; RV64V-LABEL: mgather_baseidx_v8i16:
1849 ; RV64V:       # %bb.0:
1850 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1851 ; RV64V-NEXT:    vsext.vf4 v12, v8
1852 ; RV64V-NEXT:    vadd.vv v12, v12, v12
1853 ; RV64V-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
1854 ; RV64V-NEXT:    vluxei64.v v9, (a0), v12, v0.t
1855 ; RV64V-NEXT:    vmv.v.v v8, v9
1856 ; RV64V-NEXT:    ret
1858 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i16:
1859 ; RV64ZVE32F:       # %bb.0:
1860 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
1861 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
1862 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
1863 ; RV64ZVE32F-NEXT:    beqz a2, .LBB26_2
1864 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
1865 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
1866 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1867 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1868 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1869 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1870 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
1871 ; RV64ZVE32F-NEXT:  .LBB26_2: # %else
1872 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
1873 ; RV64ZVE32F-NEXT:    beqz a2, .LBB26_4
1874 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
1875 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
1876 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
1877 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
1878 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1879 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1880 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1881 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
1882 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
1883 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
1884 ; RV64ZVE32F-NEXT:  .LBB26_4: # %else2
1885 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
1886 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
1887 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
1888 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
1889 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
1890 ; RV64ZVE32F-NEXT:    bnez a2, .LBB26_12
1891 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
1892 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1893 ; RV64ZVE32F-NEXT:    bnez a2, .LBB26_13
1894 ; RV64ZVE32F-NEXT:  .LBB26_6: # %else8
1895 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1896 ; RV64ZVE32F-NEXT:    bnez a2, .LBB26_14
1897 ; RV64ZVE32F-NEXT:  .LBB26_7: # %else11
1898 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1899 ; RV64ZVE32F-NEXT:    beqz a2, .LBB26_9
1900 ; RV64ZVE32F-NEXT:  .LBB26_8: # %cond.load13
1901 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
1902 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
1903 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1904 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1905 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1906 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1907 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1908 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
1909 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
1910 ; RV64ZVE32F-NEXT:  .LBB26_9: # %else14
1911 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
1912 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
1913 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
1914 ; RV64ZVE32F-NEXT:    bnez a2, .LBB26_15
1915 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
1916 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1917 ; RV64ZVE32F-NEXT:    bnez a1, .LBB26_16
1918 ; RV64ZVE32F-NEXT:  .LBB26_11: # %else20
1919 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
1920 ; RV64ZVE32F-NEXT:    ret
1921 ; RV64ZVE32F-NEXT:  .LBB26_12: # %cond.load4
1922 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1923 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1924 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1925 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1926 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
1927 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
1928 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
1929 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
1930 ; RV64ZVE32F-NEXT:    beqz a2, .LBB26_6
1931 ; RV64ZVE32F-NEXT:  .LBB26_13: # %cond.load7
1932 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
1933 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1934 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1935 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1936 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1937 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1938 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1939 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
1940 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
1941 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
1942 ; RV64ZVE32F-NEXT:    beqz a2, .LBB26_7
1943 ; RV64ZVE32F-NEXT:  .LBB26_14: # %cond.load10
1944 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
1945 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
1946 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1947 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1948 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1949 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
1950 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
1951 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
1952 ; RV64ZVE32F-NEXT:    bnez a2, .LBB26_8
1953 ; RV64ZVE32F-NEXT:    j .LBB26_9
1954 ; RV64ZVE32F-NEXT:  .LBB26_15: # %cond.load16
1955 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
1956 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
1957 ; RV64ZVE32F-NEXT:    add a2, a0, a2
1958 ; RV64ZVE32F-NEXT:    lh a2, 0(a2)
1959 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
1960 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
1961 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
1962 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
1963 ; RV64ZVE32F-NEXT:    beqz a1, .LBB26_11
1964 ; RV64ZVE32F-NEXT:  .LBB26_16: # %cond.load19
1965 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
1966 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
1967 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
1968 ; RV64ZVE32F-NEXT:    slli a1, a1, 1
1969 ; RV64ZVE32F-NEXT:    add a0, a0, a1
1970 ; RV64ZVE32F-NEXT:    lh a0, 0(a0)
1971 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
1972 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
1973 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
1974 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
1975 ; RV64ZVE32F-NEXT:    ret
1976   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i16> %idxs
1977   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x i16> %passthru)
1978   ret <8 x i16> %v
1981 declare <1 x i32> @llvm.masked.gather.v1i32.v1p0(<1 x ptr>, i32, <1 x i1>, <1 x i32>)
1983 define <1 x i32> @mgather_v1i32(<1 x ptr> %ptrs, <1 x i1> %m, <1 x i32> %passthru) {
1984 ; RV32V-LABEL: mgather_v1i32:
1985 ; RV32V:       # %bb.0:
1986 ; RV32V-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
1987 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
1988 ; RV32V-NEXT:    vmv1r.v v8, v9
1989 ; RV32V-NEXT:    ret
1991 ; RV64V-LABEL: mgather_v1i32:
1992 ; RV64V:       # %bb.0:
1993 ; RV64V-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
1994 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
1995 ; RV64V-NEXT:    vmv1r.v v8, v9
1996 ; RV64V-NEXT:    ret
1998 ; RV32ZVE32F-LABEL: mgather_v1i32:
1999 ; RV32ZVE32F:       # %bb.0:
2000 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, mu
2001 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
2002 ; RV32ZVE32F-NEXT:    vmv.v.v v8, v9
2003 ; RV32ZVE32F-NEXT:    ret
2005 ; RV64ZVE32F-LABEL: mgather_v1i32:
2006 ; RV64ZVE32F:       # %bb.0:
2007 ; RV64ZVE32F-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
2008 ; RV64ZVE32F-NEXT:    vfirst.m a1, v0
2009 ; RV64ZVE32F-NEXT:    bnez a1, .LBB27_2
2010 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
2011 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2012 ; RV64ZVE32F-NEXT:    vle32.v v8, (a0)
2013 ; RV64ZVE32F-NEXT:  .LBB27_2: # %else
2014 ; RV64ZVE32F-NEXT:    ret
2015   %v = call <1 x i32> @llvm.masked.gather.v1i32.v1p0(<1 x ptr> %ptrs, i32 4, <1 x i1> %m, <1 x i32> %passthru)
2016   ret <1 x i32> %v
2019 declare <2 x i32> @llvm.masked.gather.v2i32.v2p0(<2 x ptr>, i32, <2 x i1>, <2 x i32>)
2021 define <2 x i32> @mgather_v2i32(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i32> %passthru) {
2022 ; RV32V-LABEL: mgather_v2i32:
2023 ; RV32V:       # %bb.0:
2024 ; RV32V-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
2025 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
2026 ; RV32V-NEXT:    vmv1r.v v8, v9
2027 ; RV32V-NEXT:    ret
2029 ; RV64V-LABEL: mgather_v2i32:
2030 ; RV64V:       # %bb.0:
2031 ; RV64V-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
2032 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
2033 ; RV64V-NEXT:    vmv1r.v v8, v9
2034 ; RV64V-NEXT:    ret
2036 ; RV32ZVE32F-LABEL: mgather_v2i32:
2037 ; RV32ZVE32F:       # %bb.0:
2038 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, mu
2039 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
2040 ; RV32ZVE32F-NEXT:    vmv.v.v v8, v9
2041 ; RV32ZVE32F-NEXT:    ret
2043 ; RV64ZVE32F-LABEL: mgather_v2i32:
2044 ; RV64ZVE32F:       # %bb.0:
2045 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2046 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
2047 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
2048 ; RV64ZVE32F-NEXT:    bnez a3, .LBB28_3
2049 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
2050 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
2051 ; RV64ZVE32F-NEXT:    bnez a2, .LBB28_4
2052 ; RV64ZVE32F-NEXT:  .LBB28_2: # %else2
2053 ; RV64ZVE32F-NEXT:    ret
2054 ; RV64ZVE32F-NEXT:  .LBB28_3: # %cond.load
2055 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2056 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2057 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
2058 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
2059 ; RV64ZVE32F-NEXT:    beqz a2, .LBB28_2
2060 ; RV64ZVE32F-NEXT:  .LBB28_4: # %cond.load1
2061 ; RV64ZVE32F-NEXT:    lw a0, 0(a1)
2062 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2063 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
2064 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
2065 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
2066 ; RV64ZVE32F-NEXT:    ret
2067   %v = call <2 x i32> @llvm.masked.gather.v2i32.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %m, <2 x i32> %passthru)
2068   ret <2 x i32> %v
2071 define <2 x i64> @mgather_v2i32_sextload_v2i64(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i32> %passthru) {
2072 ; RV32V-LABEL: mgather_v2i32_sextload_v2i64:
2073 ; RV32V:       # %bb.0:
2074 ; RV32V-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
2075 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
2076 ; RV32V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
2077 ; RV32V-NEXT:    vsext.vf2 v8, v9
2078 ; RV32V-NEXT:    ret
2080 ; RV64V-LABEL: mgather_v2i32_sextload_v2i64:
2081 ; RV64V:       # %bb.0:
2082 ; RV64V-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
2083 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
2084 ; RV64V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
2085 ; RV64V-NEXT:    vsext.vf2 v8, v9
2086 ; RV64V-NEXT:    ret
2088 ; RV32ZVE32F-LABEL: mgather_v2i32_sextload_v2i64:
2089 ; RV32ZVE32F:       # %bb.0:
2090 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, mu
2091 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
2092 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
2093 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
2094 ; RV32ZVE32F-NEXT:    srai a1, a1, 31
2095 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v9
2096 ; RV32ZVE32F-NEXT:    srai a2, a2, 31
2097 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2098 ; RV32ZVE32F-NEXT:    vse32.v v9, (a0)
2099 ; RV32ZVE32F-NEXT:    addi a3, a0, 8
2100 ; RV32ZVE32F-NEXT:    vse32.v v8, (a3)
2101 ; RV32ZVE32F-NEXT:    sw a2, 4(a0)
2102 ; RV32ZVE32F-NEXT:    sw a1, 12(a0)
2103 ; RV32ZVE32F-NEXT:    ret
2105 ; RV64ZVE32F-LABEL: mgather_v2i32_sextload_v2i64:
2106 ; RV64ZVE32F:       # %bb.0:
2107 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2108 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
2109 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
2110 ; RV64ZVE32F-NEXT:    beqz a3, .LBB29_2
2111 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
2112 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2113 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2114 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
2115 ; RV64ZVE32F-NEXT:  .LBB29_2: # %else
2116 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
2117 ; RV64ZVE32F-NEXT:    beqz a2, .LBB29_4
2118 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
2119 ; RV64ZVE32F-NEXT:    lw a0, 0(a1)
2120 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2121 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
2122 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
2123 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
2124 ; RV64ZVE32F-NEXT:  .LBB29_4: # %else2
2125 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2126 ; RV64ZVE32F-NEXT:    vmv.x.s a0, v8
2127 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2128 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
2129 ; RV64ZVE32F-NEXT:    ret
2130   %v = call <2 x i32> @llvm.masked.gather.v2i32.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %m, <2 x i32> %passthru)
2131   %ev = sext <2 x i32> %v to <2 x i64>
2132   ret <2 x i64> %ev
2135 define <2 x i64> @mgather_v2i32_zextload_v2i64(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i32> %passthru) {
2136 ; RV32V-LABEL: mgather_v2i32_zextload_v2i64:
2137 ; RV32V:       # %bb.0:
2138 ; RV32V-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
2139 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
2140 ; RV32V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
2141 ; RV32V-NEXT:    vzext.vf2 v8, v9
2142 ; RV32V-NEXT:    ret
2144 ; RV64V-LABEL: mgather_v2i32_zextload_v2i64:
2145 ; RV64V:       # %bb.0:
2146 ; RV64V-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
2147 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
2148 ; RV64V-NEXT:    vsetvli zero, zero, e64, m1, ta, ma
2149 ; RV64V-NEXT:    vzext.vf2 v8, v9
2150 ; RV64V-NEXT:    ret
2152 ; RV32ZVE32F-LABEL: mgather_v2i32_zextload_v2i64:
2153 ; RV32ZVE32F:       # %bb.0:
2154 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, mu
2155 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
2156 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
2157 ; RV32ZVE32F-NEXT:    sw zero, 12(a0)
2158 ; RV32ZVE32F-NEXT:    sw zero, 4(a0)
2159 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2160 ; RV32ZVE32F-NEXT:    vse32.v v9, (a0)
2161 ; RV32ZVE32F-NEXT:    addi a0, a0, 8
2162 ; RV32ZVE32F-NEXT:    vse32.v v8, (a0)
2163 ; RV32ZVE32F-NEXT:    ret
2165 ; RV64ZVE32F-LABEL: mgather_v2i32_zextload_v2i64:
2166 ; RV64ZVE32F:       # %bb.0:
2167 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2168 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
2169 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
2170 ; RV64ZVE32F-NEXT:    beqz a3, .LBB30_2
2171 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
2172 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2173 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2174 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
2175 ; RV64ZVE32F-NEXT:  .LBB30_2: # %else
2176 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
2177 ; RV64ZVE32F-NEXT:    beqz a2, .LBB30_4
2178 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
2179 ; RV64ZVE32F-NEXT:    lw a0, 0(a1)
2180 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2181 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
2182 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
2183 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
2184 ; RV64ZVE32F-NEXT:  .LBB30_4: # %else2
2185 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
2186 ; RV64ZVE32F-NEXT:    vmv.x.s a0, v8
2187 ; RV64ZVE32F-NEXT:    slli a0, a0, 32
2188 ; RV64ZVE32F-NEXT:    srli a0, a0, 32
2189 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2190 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
2191 ; RV64ZVE32F-NEXT:    slli a1, a1, 32
2192 ; RV64ZVE32F-NEXT:    srli a1, a1, 32
2193 ; RV64ZVE32F-NEXT:    ret
2194   %v = call <2 x i32> @llvm.masked.gather.v2i32.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %m, <2 x i32> %passthru)
2195   %ev = zext <2 x i32> %v to <2 x i64>
2196   ret <2 x i64> %ev
2199 declare <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr>, i32, <4 x i1>, <4 x i32>)
2201 define <4 x i32> @mgather_v4i32(<4 x ptr> %ptrs, <4 x i1> %m, <4 x i32> %passthru) {
2202 ; RV32-LABEL: mgather_v4i32:
2203 ; RV32:       # %bb.0:
2204 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2205 ; RV32-NEXT:    vluxei32.v v9, (zero), v8, v0.t
2206 ; RV32-NEXT:    vmv.v.v v8, v9
2207 ; RV32-NEXT:    ret
2209 ; RV64V-LABEL: mgather_v4i32:
2210 ; RV64V:       # %bb.0:
2211 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2212 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8, v0.t
2213 ; RV64V-NEXT:    vmv.v.v v8, v10
2214 ; RV64V-NEXT:    ret
2216 ; RV64ZVE32F-LABEL: mgather_v4i32:
2217 ; RV64ZVE32F:       # %bb.0:
2218 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2219 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
2220 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
2221 ; RV64ZVE32F-NEXT:    bnez a2, .LBB31_5
2222 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
2223 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
2224 ; RV64ZVE32F-NEXT:    bnez a2, .LBB31_6
2225 ; RV64ZVE32F-NEXT:  .LBB31_2: # %else2
2226 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
2227 ; RV64ZVE32F-NEXT:    bnez a2, .LBB31_7
2228 ; RV64ZVE32F-NEXT:  .LBB31_3: # %else5
2229 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
2230 ; RV64ZVE32F-NEXT:    bnez a1, .LBB31_8
2231 ; RV64ZVE32F-NEXT:  .LBB31_4: # %else8
2232 ; RV64ZVE32F-NEXT:    ret
2233 ; RV64ZVE32F-NEXT:  .LBB31_5: # %cond.load
2234 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
2235 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2236 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2237 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2238 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
2239 ; RV64ZVE32F-NEXT:    beqz a2, .LBB31_2
2240 ; RV64ZVE32F-NEXT:  .LBB31_6: # %cond.load1
2241 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
2242 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2243 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2244 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
2245 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
2246 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
2247 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
2248 ; RV64ZVE32F-NEXT:    beqz a2, .LBB31_3
2249 ; RV64ZVE32F-NEXT:  .LBB31_7: # %cond.load4
2250 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
2251 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2252 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
2253 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
2254 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 2
2255 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
2256 ; RV64ZVE32F-NEXT:    beqz a1, .LBB31_4
2257 ; RV64ZVE32F-NEXT:  .LBB31_8: # %cond.load7
2258 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
2259 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2260 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
2261 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a0
2262 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 3
2263 ; RV64ZVE32F-NEXT:    ret
2264   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> %m, <4 x i32> %passthru)
2265   ret <4 x i32> %v
2268 define <4 x i32> @mgather_truemask_v4i32(<4 x ptr> %ptrs, <4 x i32> %passthru) {
2269 ; RV32-LABEL: mgather_truemask_v4i32:
2270 ; RV32:       # %bb.0:
2271 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
2272 ; RV32-NEXT:    vluxei32.v v8, (zero), v8
2273 ; RV32-NEXT:    ret
2275 ; RV64V-LABEL: mgather_truemask_v4i32:
2276 ; RV64V:       # %bb.0:
2277 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
2278 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8
2279 ; RV64V-NEXT:    vmv.v.v v8, v10
2280 ; RV64V-NEXT:    ret
2282 ; RV64ZVE32F-LABEL: mgather_truemask_v4i32:
2283 ; RV64ZVE32F:       # %bb.0:
2284 ; RV64ZVE32F-NEXT:    ld a1, 0(a0)
2285 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
2286 ; RV64ZVE32F-NEXT:    ld a3, 16(a0)
2287 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
2288 ; RV64ZVE32F-NEXT:    lw a1, 0(a1)
2289 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2290 ; RV64ZVE32F-NEXT:    lw a3, 0(a3)
2291 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2292 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
2293 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
2294 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
2295 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
2296 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
2297 ; RV64ZVE32F-NEXT:    ret
2298   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 1), <4 x i32> %passthru)
2299   ret <4 x i32> %v
2302 define <4 x i32> @mgather_falsemask_v4i32(<4 x ptr> %ptrs, <4 x i32> %passthru) {
2303 ; RV32-LABEL: mgather_falsemask_v4i32:
2304 ; RV32:       # %bb.0:
2305 ; RV32-NEXT:    vmv1r.v v8, v9
2306 ; RV32-NEXT:    ret
2308 ; RV64V-LABEL: mgather_falsemask_v4i32:
2309 ; RV64V:       # %bb.0:
2310 ; RV64V-NEXT:    vmv1r.v v8, v10
2311 ; RV64V-NEXT:    ret
2313 ; RV64ZVE32F-LABEL: mgather_falsemask_v4i32:
2314 ; RV64ZVE32F:       # %bb.0:
2315 ; RV64ZVE32F-NEXT:    ret
2316   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> zeroinitializer, <4 x i32> %passthru)
2317   ret <4 x i32> %v
2320 declare <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr>, i32, <8 x i1>, <8 x i32>)
2322 define <8 x i32> @mgather_v8i32(<8 x ptr> %ptrs, <8 x i1> %m, <8 x i32> %passthru) {
2323 ; RV32-LABEL: mgather_v8i32:
2324 ; RV32:       # %bb.0:
2325 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
2326 ; RV32-NEXT:    vluxei32.v v10, (zero), v8, v0.t
2327 ; RV32-NEXT:    vmv.v.v v8, v10
2328 ; RV32-NEXT:    ret
2330 ; RV64V-LABEL: mgather_v8i32:
2331 ; RV64V:       # %bb.0:
2332 ; RV64V-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
2333 ; RV64V-NEXT:    vluxei64.v v12, (zero), v8, v0.t
2334 ; RV64V-NEXT:    vmv.v.v v8, v12
2335 ; RV64V-NEXT:    ret
2337 ; RV64ZVE32F-LABEL: mgather_v8i32:
2338 ; RV64ZVE32F:       # %bb.0:
2339 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2340 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
2341 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
2342 ; RV64ZVE32F-NEXT:    bnez a2, .LBB34_9
2343 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
2344 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
2345 ; RV64ZVE32F-NEXT:    bnez a2, .LBB34_10
2346 ; RV64ZVE32F-NEXT:  .LBB34_2: # %else2
2347 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
2348 ; RV64ZVE32F-NEXT:    bnez a2, .LBB34_11
2349 ; RV64ZVE32F-NEXT:  .LBB34_3: # %else5
2350 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2351 ; RV64ZVE32F-NEXT:    bnez a2, .LBB34_12
2352 ; RV64ZVE32F-NEXT:  .LBB34_4: # %else8
2353 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2354 ; RV64ZVE32F-NEXT:    bnez a2, .LBB34_13
2355 ; RV64ZVE32F-NEXT:  .LBB34_5: # %else11
2356 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2357 ; RV64ZVE32F-NEXT:    bnez a2, .LBB34_14
2358 ; RV64ZVE32F-NEXT:  .LBB34_6: # %else14
2359 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
2360 ; RV64ZVE32F-NEXT:    bnez a2, .LBB34_15
2361 ; RV64ZVE32F-NEXT:  .LBB34_7: # %else17
2362 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2363 ; RV64ZVE32F-NEXT:    bnez a1, .LBB34_16
2364 ; RV64ZVE32F-NEXT:  .LBB34_8: # %else20
2365 ; RV64ZVE32F-NEXT:    ret
2366 ; RV64ZVE32F-NEXT:  .LBB34_9: # %cond.load
2367 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
2368 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2369 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2370 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2371 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
2372 ; RV64ZVE32F-NEXT:    beqz a2, .LBB34_2
2373 ; RV64ZVE32F-NEXT:  .LBB34_10: # %cond.load1
2374 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
2375 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2376 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2377 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2378 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
2379 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 1
2380 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
2381 ; RV64ZVE32F-NEXT:    beqz a2, .LBB34_3
2382 ; RV64ZVE32F-NEXT:  .LBB34_11: # %cond.load4
2383 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
2384 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2385 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
2386 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2387 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 2
2388 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2389 ; RV64ZVE32F-NEXT:    beqz a2, .LBB34_4
2390 ; RV64ZVE32F-NEXT:  .LBB34_12: # %cond.load7
2391 ; RV64ZVE32F-NEXT:    ld a2, 24(a0)
2392 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2393 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
2394 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2395 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 3
2396 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2397 ; RV64ZVE32F-NEXT:    beqz a2, .LBB34_5
2398 ; RV64ZVE32F-NEXT:  .LBB34_13: # %cond.load10
2399 ; RV64ZVE32F-NEXT:    ld a2, 32(a0)
2400 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2401 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
2402 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2403 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 4
2404 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2405 ; RV64ZVE32F-NEXT:    beqz a2, .LBB34_6
2406 ; RV64ZVE32F-NEXT:  .LBB34_14: # %cond.load13
2407 ; RV64ZVE32F-NEXT:    ld a2, 40(a0)
2408 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2409 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
2410 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2411 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 5
2412 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
2413 ; RV64ZVE32F-NEXT:    beqz a2, .LBB34_7
2414 ; RV64ZVE32F-NEXT:  .LBB34_15: # %cond.load16
2415 ; RV64ZVE32F-NEXT:    ld a2, 48(a0)
2416 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2417 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
2418 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2419 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 6
2420 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2421 ; RV64ZVE32F-NEXT:    beqz a1, .LBB34_8
2422 ; RV64ZVE32F-NEXT:  .LBB34_16: # %cond.load19
2423 ; RV64ZVE32F-NEXT:    ld a0, 56(a0)
2424 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2425 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
2426 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a0
2427 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 7
2428 ; RV64ZVE32F-NEXT:    ret
2429   %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru)
2430   ret <8 x i32> %v
2433 define <8 x i32> @mgather_baseidx_v8i8_v8i32(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i32> %passthru) {
2434 ; RV32-LABEL: mgather_baseidx_v8i8_v8i32:
2435 ; RV32:       # %bb.0:
2436 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
2437 ; RV32-NEXT:    vsext.vf4 v12, v8
2438 ; RV32-NEXT:    vsll.vi v8, v12, 2
2439 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
2440 ; RV32-NEXT:    vmv.v.v v8, v10
2441 ; RV32-NEXT:    ret
2443 ; RV64V-LABEL: mgather_baseidx_v8i8_v8i32:
2444 ; RV64V:       # %bb.0:
2445 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
2446 ; RV64V-NEXT:    vsext.vf8 v12, v8
2447 ; RV64V-NEXT:    vsll.vi v12, v12, 2
2448 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
2449 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
2450 ; RV64V-NEXT:    vmv.v.v v8, v10
2451 ; RV64V-NEXT:    ret
2453 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8_v8i32:
2454 ; RV64ZVE32F:       # %bb.0:
2455 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2456 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
2457 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
2458 ; RV64ZVE32F-NEXT:    beqz a2, .LBB35_2
2459 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
2460 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2461 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2462 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2463 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2464 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2465 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2466 ; RV64ZVE32F-NEXT:  .LBB35_2: # %else
2467 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
2468 ; RV64ZVE32F-NEXT:    beqz a2, .LBB35_4
2469 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
2470 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2471 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
2472 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
2473 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2474 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2475 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2476 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2477 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
2478 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
2479 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
2480 ; RV64ZVE32F-NEXT:  .LBB35_4: # %else2
2481 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
2482 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
2483 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
2484 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
2485 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
2486 ; RV64ZVE32F-NEXT:    bnez a2, .LBB35_12
2487 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
2488 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2489 ; RV64ZVE32F-NEXT:    bnez a2, .LBB35_13
2490 ; RV64ZVE32F-NEXT:  .LBB35_6: # %else8
2491 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2492 ; RV64ZVE32F-NEXT:    bnez a2, .LBB35_14
2493 ; RV64ZVE32F-NEXT:  .LBB35_7: # %else11
2494 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2495 ; RV64ZVE32F-NEXT:    beqz a2, .LBB35_9
2496 ; RV64ZVE32F-NEXT:  .LBB35_8: # %cond.load13
2497 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2498 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
2499 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2500 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2501 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2502 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2503 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2504 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2505 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
2506 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
2507 ; RV64ZVE32F-NEXT:  .LBB35_9: # %else14
2508 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
2509 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
2510 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
2511 ; RV64ZVE32F-NEXT:    bnez a2, .LBB35_15
2512 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
2513 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2514 ; RV64ZVE32F-NEXT:    bnez a1, .LBB35_16
2515 ; RV64ZVE32F-NEXT:  .LBB35_11: # %else20
2516 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
2517 ; RV64ZVE32F-NEXT:    ret
2518 ; RV64ZVE32F-NEXT:  .LBB35_12: # %cond.load4
2519 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2520 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2521 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2522 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2523 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2524 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
2525 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
2526 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
2527 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2528 ; RV64ZVE32F-NEXT:    beqz a2, .LBB35_6
2529 ; RV64ZVE32F-NEXT:  .LBB35_13: # %cond.load7
2530 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2531 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2532 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2533 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2534 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2535 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2536 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2537 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2538 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
2539 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
2540 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2541 ; RV64ZVE32F-NEXT:    beqz a2, .LBB35_7
2542 ; RV64ZVE32F-NEXT:  .LBB35_14: # %cond.load10
2543 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2544 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
2545 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2546 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2547 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2548 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2549 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2550 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
2551 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
2552 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2553 ; RV64ZVE32F-NEXT:    bnez a2, .LBB35_8
2554 ; RV64ZVE32F-NEXT:    j .LBB35_9
2555 ; RV64ZVE32F-NEXT:  .LBB35_15: # %cond.load16
2556 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2557 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2558 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2559 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2560 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2561 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
2562 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
2563 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
2564 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2565 ; RV64ZVE32F-NEXT:    beqz a1, .LBB35_11
2566 ; RV64ZVE32F-NEXT:  .LBB35_16: # %cond.load19
2567 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2568 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2569 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
2570 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
2571 ; RV64ZVE32F-NEXT:    add a0, a0, a1
2572 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2573 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2574 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
2575 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
2576 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
2577 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
2578 ; RV64ZVE32F-NEXT:    ret
2579   %ptrs = getelementptr inbounds i32, ptr %base, <8 x i8> %idxs
2580   %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru)
2581   ret <8 x i32> %v
2584 define <8 x i32> @mgather_baseidx_sext_v8i8_v8i32(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i32> %passthru) {
2585 ; RV32-LABEL: mgather_baseidx_sext_v8i8_v8i32:
2586 ; RV32:       # %bb.0:
2587 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
2588 ; RV32-NEXT:    vsext.vf4 v12, v8
2589 ; RV32-NEXT:    vsll.vi v8, v12, 2
2590 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
2591 ; RV32-NEXT:    vmv.v.v v8, v10
2592 ; RV32-NEXT:    ret
2594 ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8i32:
2595 ; RV64V:       # %bb.0:
2596 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
2597 ; RV64V-NEXT:    vsext.vf8 v12, v8
2598 ; RV64V-NEXT:    vsll.vi v12, v12, 2
2599 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
2600 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
2601 ; RV64V-NEXT:    vmv.v.v v8, v10
2602 ; RV64V-NEXT:    ret
2604 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8i32:
2605 ; RV64ZVE32F:       # %bb.0:
2606 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2607 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
2608 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
2609 ; RV64ZVE32F-NEXT:    beqz a2, .LBB36_2
2610 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
2611 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2612 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2613 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2614 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2615 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2616 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2617 ; RV64ZVE32F-NEXT:  .LBB36_2: # %else
2618 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
2619 ; RV64ZVE32F-NEXT:    beqz a2, .LBB36_4
2620 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
2621 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2622 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
2623 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
2624 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2625 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2626 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2627 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2628 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
2629 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
2630 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
2631 ; RV64ZVE32F-NEXT:  .LBB36_4: # %else2
2632 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
2633 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
2634 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
2635 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
2636 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
2637 ; RV64ZVE32F-NEXT:    bnez a2, .LBB36_12
2638 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
2639 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2640 ; RV64ZVE32F-NEXT:    bnez a2, .LBB36_13
2641 ; RV64ZVE32F-NEXT:  .LBB36_6: # %else8
2642 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2643 ; RV64ZVE32F-NEXT:    bnez a2, .LBB36_14
2644 ; RV64ZVE32F-NEXT:  .LBB36_7: # %else11
2645 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2646 ; RV64ZVE32F-NEXT:    beqz a2, .LBB36_9
2647 ; RV64ZVE32F-NEXT:  .LBB36_8: # %cond.load13
2648 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2649 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
2650 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2651 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2652 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2653 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2654 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2655 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2656 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
2657 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
2658 ; RV64ZVE32F-NEXT:  .LBB36_9: # %else14
2659 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
2660 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
2661 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
2662 ; RV64ZVE32F-NEXT:    bnez a2, .LBB36_15
2663 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
2664 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2665 ; RV64ZVE32F-NEXT:    bnez a1, .LBB36_16
2666 ; RV64ZVE32F-NEXT:  .LBB36_11: # %else20
2667 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
2668 ; RV64ZVE32F-NEXT:    ret
2669 ; RV64ZVE32F-NEXT:  .LBB36_12: # %cond.load4
2670 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2671 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2672 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2673 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2674 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2675 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
2676 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
2677 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
2678 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2679 ; RV64ZVE32F-NEXT:    beqz a2, .LBB36_6
2680 ; RV64ZVE32F-NEXT:  .LBB36_13: # %cond.load7
2681 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2682 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2683 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2684 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2685 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2686 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2687 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2688 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2689 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
2690 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
2691 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2692 ; RV64ZVE32F-NEXT:    beqz a2, .LBB36_7
2693 ; RV64ZVE32F-NEXT:  .LBB36_14: # %cond.load10
2694 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2695 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
2696 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2697 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2698 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2699 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2700 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2701 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
2702 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
2703 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2704 ; RV64ZVE32F-NEXT:    bnez a2, .LBB36_8
2705 ; RV64ZVE32F-NEXT:    j .LBB36_9
2706 ; RV64ZVE32F-NEXT:  .LBB36_15: # %cond.load16
2707 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2708 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2709 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2710 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2711 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2712 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
2713 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
2714 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
2715 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2716 ; RV64ZVE32F-NEXT:    beqz a1, .LBB36_11
2717 ; RV64ZVE32F-NEXT:  .LBB36_16: # %cond.load19
2718 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2719 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2720 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
2721 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
2722 ; RV64ZVE32F-NEXT:    add a0, a0, a1
2723 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2724 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2725 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
2726 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
2727 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
2728 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
2729 ; RV64ZVE32F-NEXT:    ret
2730   %eidxs = sext <8 x i8> %idxs to <8 x i32>
2731   %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %eidxs
2732   %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru)
2733   ret <8 x i32> %v
2736 define <8 x i32> @mgather_baseidx_zext_v8i8_v8i32(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i32> %passthru) {
2737 ; RV32-LABEL: mgather_baseidx_zext_v8i8_v8i32:
2738 ; RV32:       # %bb.0:
2739 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2740 ; RV32-NEXT:    vzext.vf2 v9, v8
2741 ; RV32-NEXT:    vsll.vi v8, v9, 2
2742 ; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
2743 ; RV32-NEXT:    vluxei16.v v10, (a0), v8, v0.t
2744 ; RV32-NEXT:    vmv.v.v v8, v10
2745 ; RV32-NEXT:    ret
2747 ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8i32:
2748 ; RV64V:       # %bb.0:
2749 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
2750 ; RV64V-NEXT:    vzext.vf2 v9, v8
2751 ; RV64V-NEXT:    vsll.vi v8, v9, 2
2752 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
2753 ; RV64V-NEXT:    vluxei16.v v10, (a0), v8, v0.t
2754 ; RV64V-NEXT:    vmv.v.v v8, v10
2755 ; RV64V-NEXT:    ret
2757 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8i32:
2758 ; RV64ZVE32F:       # %bb.0:
2759 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2760 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
2761 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
2762 ; RV64ZVE32F-NEXT:    beqz a2, .LBB37_2
2763 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
2764 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2765 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
2766 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2767 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2768 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2769 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2770 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2771 ; RV64ZVE32F-NEXT:  .LBB37_2: # %else
2772 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
2773 ; RV64ZVE32F-NEXT:    beqz a2, .LBB37_4
2774 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
2775 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2776 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
2777 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
2778 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
2779 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2780 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2781 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2782 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2783 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
2784 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
2785 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
2786 ; RV64ZVE32F-NEXT:  .LBB37_4: # %else2
2787 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
2788 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
2789 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
2790 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
2791 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
2792 ; RV64ZVE32F-NEXT:    bnez a2, .LBB37_12
2793 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
2794 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2795 ; RV64ZVE32F-NEXT:    bnez a2, .LBB37_13
2796 ; RV64ZVE32F-NEXT:  .LBB37_6: # %else8
2797 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2798 ; RV64ZVE32F-NEXT:    bnez a2, .LBB37_14
2799 ; RV64ZVE32F-NEXT:  .LBB37_7: # %else11
2800 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2801 ; RV64ZVE32F-NEXT:    beqz a2, .LBB37_9
2802 ; RV64ZVE32F-NEXT:  .LBB37_8: # %cond.load13
2803 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2804 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
2805 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2806 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
2807 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2808 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2809 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2810 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2811 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2812 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
2813 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
2814 ; RV64ZVE32F-NEXT:  .LBB37_9: # %else14
2815 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
2816 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
2817 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
2818 ; RV64ZVE32F-NEXT:    bnez a2, .LBB37_15
2819 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
2820 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2821 ; RV64ZVE32F-NEXT:    bnez a1, .LBB37_16
2822 ; RV64ZVE32F-NEXT:  .LBB37_11: # %else20
2823 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
2824 ; RV64ZVE32F-NEXT:    ret
2825 ; RV64ZVE32F-NEXT:  .LBB37_12: # %cond.load4
2826 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2827 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
2828 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2829 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2830 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2831 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2832 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
2833 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
2834 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
2835 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2836 ; RV64ZVE32F-NEXT:    beqz a2, .LBB37_6
2837 ; RV64ZVE32F-NEXT:  .LBB37_13: # %cond.load7
2838 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2839 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2840 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2841 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
2842 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2843 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2844 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2845 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2846 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2847 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
2848 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
2849 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2850 ; RV64ZVE32F-NEXT:    beqz a2, .LBB37_7
2851 ; RV64ZVE32F-NEXT:  .LBB37_14: # %cond.load10
2852 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2853 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
2854 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
2855 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2856 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2857 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2858 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
2859 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2860 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
2861 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
2862 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2863 ; RV64ZVE32F-NEXT:    bnez a2, .LBB37_8
2864 ; RV64ZVE32F-NEXT:    j .LBB37_9
2865 ; RV64ZVE32F-NEXT:  .LBB37_15: # %cond.load16
2866 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2867 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
2868 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2869 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2870 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2871 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2872 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
2873 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
2874 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
2875 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2876 ; RV64ZVE32F-NEXT:    beqz a1, .LBB37_11
2877 ; RV64ZVE32F-NEXT:  .LBB37_16: # %cond.load19
2878 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
2879 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2880 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
2881 ; RV64ZVE32F-NEXT:    andi a1, a1, 255
2882 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
2883 ; RV64ZVE32F-NEXT:    add a0, a0, a1
2884 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
2885 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2886 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
2887 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
2888 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
2889 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
2890 ; RV64ZVE32F-NEXT:    ret
2891   %eidxs = zext <8 x i8> %idxs to <8 x i32>
2892   %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %eidxs
2893   %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru)
2894   ret <8 x i32> %v
2897 define <8 x i32> @mgather_baseidx_v8i16_v8i32(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x i32> %passthru) {
2898 ; RV32-LABEL: mgather_baseidx_v8i16_v8i32:
2899 ; RV32:       # %bb.0:
2900 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
2901 ; RV32-NEXT:    vsext.vf2 v12, v8
2902 ; RV32-NEXT:    vsll.vi v8, v12, 2
2903 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
2904 ; RV32-NEXT:    vmv.v.v v8, v10
2905 ; RV32-NEXT:    ret
2907 ; RV64V-LABEL: mgather_baseidx_v8i16_v8i32:
2908 ; RV64V:       # %bb.0:
2909 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
2910 ; RV64V-NEXT:    vsext.vf4 v12, v8
2911 ; RV64V-NEXT:    vsll.vi v12, v12, 2
2912 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
2913 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
2914 ; RV64V-NEXT:    vmv.v.v v8, v10
2915 ; RV64V-NEXT:    ret
2917 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i16_v8i32:
2918 ; RV64ZVE32F:       # %bb.0:
2919 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
2920 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
2921 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
2922 ; RV64ZVE32F-NEXT:    beqz a2, .LBB38_2
2923 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
2924 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
2925 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2926 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2927 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2928 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2929 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
2930 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
2931 ; RV64ZVE32F-NEXT:  .LBB38_2: # %else
2932 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
2933 ; RV64ZVE32F-NEXT:    beqz a2, .LBB38_4
2934 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
2935 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
2936 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
2937 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
2938 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2939 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2940 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2941 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2942 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
2943 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
2944 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
2945 ; RV64ZVE32F-NEXT:  .LBB38_4: # %else2
2946 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
2947 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
2948 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
2949 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
2950 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
2951 ; RV64ZVE32F-NEXT:    bnez a2, .LBB38_12
2952 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
2953 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2954 ; RV64ZVE32F-NEXT:    bnez a2, .LBB38_13
2955 ; RV64ZVE32F-NEXT:  .LBB38_6: # %else8
2956 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
2957 ; RV64ZVE32F-NEXT:    bnez a2, .LBB38_14
2958 ; RV64ZVE32F-NEXT:  .LBB38_7: # %else11
2959 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
2960 ; RV64ZVE32F-NEXT:    beqz a2, .LBB38_9
2961 ; RV64ZVE32F-NEXT:  .LBB38_8: # %cond.load13
2962 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
2963 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
2964 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2965 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2966 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2967 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2968 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2969 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
2970 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
2971 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
2972 ; RV64ZVE32F-NEXT:  .LBB38_9: # %else14
2973 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
2974 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
2975 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
2976 ; RV64ZVE32F-NEXT:    bnez a2, .LBB38_15
2977 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
2978 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
2979 ; RV64ZVE32F-NEXT:    bnez a1, .LBB38_16
2980 ; RV64ZVE32F-NEXT:  .LBB38_11: # %else20
2981 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
2982 ; RV64ZVE32F-NEXT:    ret
2983 ; RV64ZVE32F-NEXT:  .LBB38_12: # %cond.load4
2984 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2985 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2986 ; RV64ZVE32F-NEXT:    add a2, a0, a2
2987 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
2988 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
2989 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
2990 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
2991 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
2992 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
2993 ; RV64ZVE32F-NEXT:    beqz a2, .LBB38_6
2994 ; RV64ZVE32F-NEXT:  .LBB38_13: # %cond.load7
2995 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
2996 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
2997 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
2998 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
2999 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3000 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3001 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3002 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
3003 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
3004 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
3005 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
3006 ; RV64ZVE32F-NEXT:    beqz a2, .LBB38_7
3007 ; RV64ZVE32F-NEXT:  .LBB38_14: # %cond.load10
3008 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
3009 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
3010 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3011 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3012 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3013 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
3014 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
3015 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
3016 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
3017 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
3018 ; RV64ZVE32F-NEXT:    bnez a2, .LBB38_8
3019 ; RV64ZVE32F-NEXT:    j .LBB38_9
3020 ; RV64ZVE32F-NEXT:  .LBB38_15: # %cond.load16
3021 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3022 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3023 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3024 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3025 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3026 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
3027 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
3028 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
3029 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
3030 ; RV64ZVE32F-NEXT:    beqz a1, .LBB38_11
3031 ; RV64ZVE32F-NEXT:  .LBB38_16: # %cond.load19
3032 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3033 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
3034 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
3035 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
3036 ; RV64ZVE32F-NEXT:    add a0, a0, a1
3037 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
3038 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3039 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
3040 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
3041 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
3042 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
3043 ; RV64ZVE32F-NEXT:    ret
3044   %ptrs = getelementptr inbounds i32, ptr %base, <8 x i16> %idxs
3045   %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru)
3046   ret <8 x i32> %v
3049 define <8 x i32> @mgather_baseidx_sext_v8i16_v8i32(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x i32> %passthru) {
3050 ; RV32-LABEL: mgather_baseidx_sext_v8i16_v8i32:
3051 ; RV32:       # %bb.0:
3052 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
3053 ; RV32-NEXT:    vsext.vf2 v12, v8
3054 ; RV32-NEXT:    vsll.vi v8, v12, 2
3055 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
3056 ; RV32-NEXT:    vmv.v.v v8, v10
3057 ; RV32-NEXT:    ret
3059 ; RV64V-LABEL: mgather_baseidx_sext_v8i16_v8i32:
3060 ; RV64V:       # %bb.0:
3061 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
3062 ; RV64V-NEXT:    vsext.vf4 v12, v8
3063 ; RV64V-NEXT:    vsll.vi v12, v12, 2
3064 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
3065 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
3066 ; RV64V-NEXT:    vmv.v.v v8, v10
3067 ; RV64V-NEXT:    ret
3069 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8i32:
3070 ; RV64ZVE32F:       # %bb.0:
3071 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
3072 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
3073 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
3074 ; RV64ZVE32F-NEXT:    beqz a2, .LBB39_2
3075 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
3076 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
3077 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3078 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3079 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3080 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3081 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
3082 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
3083 ; RV64ZVE32F-NEXT:  .LBB39_2: # %else
3084 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
3085 ; RV64ZVE32F-NEXT:    beqz a2, .LBB39_4
3086 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
3087 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3088 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
3089 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
3090 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3091 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3092 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3093 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3094 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
3095 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
3096 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
3097 ; RV64ZVE32F-NEXT:  .LBB39_4: # %else2
3098 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
3099 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
3100 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
3101 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
3102 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
3103 ; RV64ZVE32F-NEXT:    bnez a2, .LBB39_12
3104 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
3105 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
3106 ; RV64ZVE32F-NEXT:    bnez a2, .LBB39_13
3107 ; RV64ZVE32F-NEXT:  .LBB39_6: # %else8
3108 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
3109 ; RV64ZVE32F-NEXT:    bnez a2, .LBB39_14
3110 ; RV64ZVE32F-NEXT:  .LBB39_7: # %else11
3111 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
3112 ; RV64ZVE32F-NEXT:    beqz a2, .LBB39_9
3113 ; RV64ZVE32F-NEXT:  .LBB39_8: # %cond.load13
3114 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3115 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
3116 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3117 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3118 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3119 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3120 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3121 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
3122 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
3123 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
3124 ; RV64ZVE32F-NEXT:  .LBB39_9: # %else14
3125 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
3126 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
3127 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
3128 ; RV64ZVE32F-NEXT:    bnez a2, .LBB39_15
3129 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
3130 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
3131 ; RV64ZVE32F-NEXT:    bnez a1, .LBB39_16
3132 ; RV64ZVE32F-NEXT:  .LBB39_11: # %else20
3133 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
3134 ; RV64ZVE32F-NEXT:    ret
3135 ; RV64ZVE32F-NEXT:  .LBB39_12: # %cond.load4
3136 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3137 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3138 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3139 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3140 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3141 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
3142 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
3143 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
3144 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
3145 ; RV64ZVE32F-NEXT:    beqz a2, .LBB39_6
3146 ; RV64ZVE32F-NEXT:  .LBB39_13: # %cond.load7
3147 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3148 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
3149 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3150 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3151 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3152 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3153 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3154 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
3155 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
3156 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
3157 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
3158 ; RV64ZVE32F-NEXT:    beqz a2, .LBB39_7
3159 ; RV64ZVE32F-NEXT:  .LBB39_14: # %cond.load10
3160 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
3161 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
3162 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3163 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3164 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3165 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
3166 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
3167 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
3168 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
3169 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
3170 ; RV64ZVE32F-NEXT:    bnez a2, .LBB39_8
3171 ; RV64ZVE32F-NEXT:    j .LBB39_9
3172 ; RV64ZVE32F-NEXT:  .LBB39_15: # %cond.load16
3173 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3174 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3175 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3176 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3177 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3178 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
3179 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
3180 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
3181 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
3182 ; RV64ZVE32F-NEXT:    beqz a1, .LBB39_11
3183 ; RV64ZVE32F-NEXT:  .LBB39_16: # %cond.load19
3184 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3185 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
3186 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
3187 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
3188 ; RV64ZVE32F-NEXT:    add a0, a0, a1
3189 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
3190 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3191 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
3192 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
3193 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
3194 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
3195 ; RV64ZVE32F-NEXT:    ret
3196   %eidxs = sext <8 x i16> %idxs to <8 x i32>
3197   %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %eidxs
3198   %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru)
3199   ret <8 x i32> %v
3202 define <8 x i32> @mgather_baseidx_zext_v8i16_v8i32(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x i32> %passthru) {
3203 ; RV32-LABEL: mgather_baseidx_zext_v8i16_v8i32:
3204 ; RV32:       # %bb.0:
3205 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
3206 ; RV32-NEXT:    vzext.vf2 v12, v8
3207 ; RV32-NEXT:    vsll.vi v8, v12, 2
3208 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
3209 ; RV32-NEXT:    vmv.v.v v8, v10
3210 ; RV32-NEXT:    ret
3212 ; RV64V-LABEL: mgather_baseidx_zext_v8i16_v8i32:
3213 ; RV64V:       # %bb.0:
3214 ; RV64V-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
3215 ; RV64V-NEXT:    vzext.vf2 v12, v8
3216 ; RV64V-NEXT:    vsll.vi v8, v12, 2
3217 ; RV64V-NEXT:    vluxei32.v v10, (a0), v8, v0.t
3218 ; RV64V-NEXT:    vmv.v.v v8, v10
3219 ; RV64V-NEXT:    ret
3221 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8i32:
3222 ; RV64ZVE32F:       # %bb.0:
3223 ; RV64ZVE32F-NEXT:    lui a1, 16
3224 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
3225 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
3226 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
3227 ; RV64ZVE32F-NEXT:    addiw a1, a1, -1
3228 ; RV64ZVE32F-NEXT:    beqz a3, .LBB40_2
3229 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
3230 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
3231 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
3232 ; RV64ZVE32F-NEXT:    and a3, a3, a1
3233 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
3234 ; RV64ZVE32F-NEXT:    add a3, a0, a3
3235 ; RV64ZVE32F-NEXT:    lw a3, 0(a3)
3236 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
3237 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a3
3238 ; RV64ZVE32F-NEXT:  .LBB40_2: # %else
3239 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
3240 ; RV64ZVE32F-NEXT:    beqz a3, .LBB40_4
3241 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
3242 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3243 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
3244 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
3245 ; RV64ZVE32F-NEXT:    and a3, a3, a1
3246 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
3247 ; RV64ZVE32F-NEXT:    add a3, a0, a3
3248 ; RV64ZVE32F-NEXT:    lw a3, 0(a3)
3249 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3250 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a3
3251 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
3252 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
3253 ; RV64ZVE32F-NEXT:  .LBB40_4: # %else2
3254 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
3255 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
3256 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
3257 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
3258 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
3259 ; RV64ZVE32F-NEXT:    bnez a3, .LBB40_12
3260 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
3261 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
3262 ; RV64ZVE32F-NEXT:    bnez a3, .LBB40_13
3263 ; RV64ZVE32F-NEXT:  .LBB40_6: # %else8
3264 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
3265 ; RV64ZVE32F-NEXT:    bnez a3, .LBB40_14
3266 ; RV64ZVE32F-NEXT:  .LBB40_7: # %else11
3267 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
3268 ; RV64ZVE32F-NEXT:    beqz a3, .LBB40_9
3269 ; RV64ZVE32F-NEXT:  .LBB40_8: # %cond.load13
3270 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3271 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
3272 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
3273 ; RV64ZVE32F-NEXT:    and a3, a3, a1
3274 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
3275 ; RV64ZVE32F-NEXT:    add a3, a0, a3
3276 ; RV64ZVE32F-NEXT:    lw a3, 0(a3)
3277 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3278 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a3
3279 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
3280 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
3281 ; RV64ZVE32F-NEXT:  .LBB40_9: # %else14
3282 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
3283 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
3284 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
3285 ; RV64ZVE32F-NEXT:    bnez a3, .LBB40_15
3286 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
3287 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
3288 ; RV64ZVE32F-NEXT:    bnez a2, .LBB40_16
3289 ; RV64ZVE32F-NEXT:  .LBB40_11: # %else20
3290 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
3291 ; RV64ZVE32F-NEXT:    ret
3292 ; RV64ZVE32F-NEXT:  .LBB40_12: # %cond.load4
3293 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
3294 ; RV64ZVE32F-NEXT:    and a3, a3, a1
3295 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
3296 ; RV64ZVE32F-NEXT:    add a3, a0, a3
3297 ; RV64ZVE32F-NEXT:    lw a3, 0(a3)
3298 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3299 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a3
3300 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
3301 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
3302 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
3303 ; RV64ZVE32F-NEXT:    beqz a3, .LBB40_6
3304 ; RV64ZVE32F-NEXT:  .LBB40_13: # %cond.load7
3305 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3306 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
3307 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
3308 ; RV64ZVE32F-NEXT:    and a3, a3, a1
3309 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
3310 ; RV64ZVE32F-NEXT:    add a3, a0, a3
3311 ; RV64ZVE32F-NEXT:    lw a3, 0(a3)
3312 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3313 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a3
3314 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
3315 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
3316 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
3317 ; RV64ZVE32F-NEXT:    beqz a3, .LBB40_7
3318 ; RV64ZVE32F-NEXT:  .LBB40_14: # %cond.load10
3319 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
3320 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
3321 ; RV64ZVE32F-NEXT:    and a3, a3, a1
3322 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
3323 ; RV64ZVE32F-NEXT:    add a3, a0, a3
3324 ; RV64ZVE32F-NEXT:    lw a3, 0(a3)
3325 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
3326 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a3
3327 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
3328 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
3329 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
3330 ; RV64ZVE32F-NEXT:    bnez a3, .LBB40_8
3331 ; RV64ZVE32F-NEXT:    j .LBB40_9
3332 ; RV64ZVE32F-NEXT:  .LBB40_15: # %cond.load16
3333 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
3334 ; RV64ZVE32F-NEXT:    and a3, a3, a1
3335 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
3336 ; RV64ZVE32F-NEXT:    add a3, a0, a3
3337 ; RV64ZVE32F-NEXT:    lw a3, 0(a3)
3338 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3339 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a3
3340 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
3341 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
3342 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
3343 ; RV64ZVE32F-NEXT:    beqz a2, .LBB40_11
3344 ; RV64ZVE32F-NEXT:  .LBB40_16: # %cond.load19
3345 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
3346 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
3347 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3348 ; RV64ZVE32F-NEXT:    and a1, a2, a1
3349 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
3350 ; RV64ZVE32F-NEXT:    add a0, a0, a1
3351 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
3352 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3353 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
3354 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
3355 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
3356 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
3357 ; RV64ZVE32F-NEXT:    ret
3358   %eidxs = zext <8 x i16> %idxs to <8 x i32>
3359   %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %eidxs
3360   %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru)
3361   ret <8 x i32> %v
3364 define <8 x i32> @mgather_baseidx_v8i32(ptr %base, <8 x i32> %idxs, <8 x i1> %m, <8 x i32> %passthru) {
3365 ; RV32-LABEL: mgather_baseidx_v8i32:
3366 ; RV32:       # %bb.0:
3367 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
3368 ; RV32-NEXT:    vsll.vi v8, v8, 2
3369 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
3370 ; RV32-NEXT:    vmv.v.v v8, v10
3371 ; RV32-NEXT:    ret
3373 ; RV64V-LABEL: mgather_baseidx_v8i32:
3374 ; RV64V:       # %bb.0:
3375 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
3376 ; RV64V-NEXT:    vsext.vf2 v12, v8
3377 ; RV64V-NEXT:    vsll.vi v12, v12, 2
3378 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
3379 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
3380 ; RV64V-NEXT:    vmv.v.v v8, v10
3381 ; RV64V-NEXT:    ret
3383 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i32:
3384 ; RV64ZVE32F:       # %bb.0:
3385 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
3386 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
3387 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
3388 ; RV64ZVE32F-NEXT:    beqz a2, .LBB41_2
3389 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
3390 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
3391 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3392 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3393 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3394 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3395 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
3396 ; RV64ZVE32F-NEXT:  .LBB41_2: # %else
3397 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
3398 ; RV64ZVE32F-NEXT:    beqz a2, .LBB41_4
3399 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
3400 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
3401 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v8, 1
3402 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
3403 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3404 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3405 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3406 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
3407 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 1
3408 ; RV64ZVE32F-NEXT:  .LBB41_4: # %else2
3409 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
3410 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v8, 4
3411 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
3412 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
3413 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
3414 ; RV64ZVE32F-NEXT:    bnez a2, .LBB41_12
3415 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
3416 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
3417 ; RV64ZVE32F-NEXT:    bnez a2, .LBB41_13
3418 ; RV64ZVE32F-NEXT:  .LBB41_6: # %else8
3419 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
3420 ; RV64ZVE32F-NEXT:    bnez a2, .LBB41_14
3421 ; RV64ZVE32F-NEXT:  .LBB41_7: # %else11
3422 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
3423 ; RV64ZVE32F-NEXT:    beqz a2, .LBB41_9
3424 ; RV64ZVE32F-NEXT:  .LBB41_8: # %cond.load13
3425 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3426 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v12, 1
3427 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3428 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3429 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3430 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3431 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
3432 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
3433 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
3434 ; RV64ZVE32F-NEXT:  .LBB41_9: # %else14
3435 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
3436 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
3437 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v12, 2
3438 ; RV64ZVE32F-NEXT:    bnez a2, .LBB41_15
3439 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
3440 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
3441 ; RV64ZVE32F-NEXT:    bnez a1, .LBB41_16
3442 ; RV64ZVE32F-NEXT:  .LBB41_11: # %else20
3443 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
3444 ; RV64ZVE32F-NEXT:    ret
3445 ; RV64ZVE32F-NEXT:  .LBB41_12: # %cond.load4
3446 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3447 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3448 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3449 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3450 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
3451 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
3452 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 2
3453 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
3454 ; RV64ZVE32F-NEXT:    beqz a2, .LBB41_6
3455 ; RV64ZVE32F-NEXT:  .LBB41_13: # %cond.load7
3456 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
3457 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
3458 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3459 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3460 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3461 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3462 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
3463 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
3464 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
3465 ; RV64ZVE32F-NEXT:    beqz a2, .LBB41_7
3466 ; RV64ZVE32F-NEXT:  .LBB41_14: # %cond.load10
3467 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
3468 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
3469 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3470 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3471 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3472 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
3473 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
3474 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
3475 ; RV64ZVE32F-NEXT:    bnez a2, .LBB41_8
3476 ; RV64ZVE32F-NEXT:    j .LBB41_9
3477 ; RV64ZVE32F-NEXT:  .LBB41_15: # %cond.load16
3478 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
3479 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
3480 ; RV64ZVE32F-NEXT:    add a2, a0, a2
3481 ; RV64ZVE32F-NEXT:    lw a2, 0(a2)
3482 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
3483 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
3484 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
3485 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
3486 ; RV64ZVE32F-NEXT:    beqz a1, .LBB41_11
3487 ; RV64ZVE32F-NEXT:  .LBB41_16: # %cond.load19
3488 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3489 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
3490 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
3491 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
3492 ; RV64ZVE32F-NEXT:    add a0, a0, a1
3493 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
3494 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
3495 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
3496 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
3497 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
3498 ; RV64ZVE32F-NEXT:    ret
3499   %ptrs = getelementptr inbounds i32, ptr %base, <8 x i32> %idxs
3500   %v = call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x i32> %passthru)
3501   ret <8 x i32> %v
3504 declare <1 x i64> @llvm.masked.gather.v1i64.v1p0(<1 x ptr>, i32, <1 x i1>, <1 x i64>)
3506 define <1 x i64> @mgather_v1i64(<1 x ptr> %ptrs, <1 x i1> %m, <1 x i64> %passthru) {
3507 ; RV32V-LABEL: mgather_v1i64:
3508 ; RV32V:       # %bb.0:
3509 ; RV32V-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
3510 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
3511 ; RV32V-NEXT:    vmv.v.v v8, v9
3512 ; RV32V-NEXT:    ret
3514 ; RV64V-LABEL: mgather_v1i64:
3515 ; RV64V:       # %bb.0:
3516 ; RV64V-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
3517 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
3518 ; RV64V-NEXT:    vmv.v.v v8, v9
3519 ; RV64V-NEXT:    ret
3521 ; RV32ZVE32F-LABEL: mgather_v1i64:
3522 ; RV32ZVE32F:       # %bb.0:
3523 ; RV32ZVE32F-NEXT:    vsetvli a2, zero, e8, mf4, ta, ma
3524 ; RV32ZVE32F-NEXT:    vfirst.m a2, v0
3525 ; RV32ZVE32F-NEXT:    bnez a2, .LBB42_2
3526 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
3527 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
3528 ; RV32ZVE32F-NEXT:    vmv.x.s a0, v8
3529 ; RV32ZVE32F-NEXT:    lw a1, 4(a0)
3530 ; RV32ZVE32F-NEXT:    lw a0, 0(a0)
3531 ; RV32ZVE32F-NEXT:  .LBB42_2: # %else
3532 ; RV32ZVE32F-NEXT:    ret
3534 ; RV64ZVE32F-LABEL: mgather_v1i64:
3535 ; RV64ZVE32F:       # %bb.0:
3536 ; RV64ZVE32F-NEXT:    vsetvli a2, zero, e8, mf4, ta, ma
3537 ; RV64ZVE32F-NEXT:    vfirst.m a2, v0
3538 ; RV64ZVE32F-NEXT:    bnez a2, .LBB42_2
3539 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
3540 ; RV64ZVE32F-NEXT:    ld a1, 0(a0)
3541 ; RV64ZVE32F-NEXT:  .LBB42_2: # %else
3542 ; RV64ZVE32F-NEXT:    mv a0, a1
3543 ; RV64ZVE32F-NEXT:    ret
3544   %v = call <1 x i64> @llvm.masked.gather.v1i64.v1p0(<1 x ptr> %ptrs, i32 8, <1 x i1> %m, <1 x i64> %passthru)
3545   ret <1 x i64> %v
3548 declare <2 x i64> @llvm.masked.gather.v2i64.v2p0(<2 x ptr>, i32, <2 x i1>, <2 x i64>)
3550 define <2 x i64> @mgather_v2i64(<2 x ptr> %ptrs, <2 x i1> %m, <2 x i64> %passthru) {
3551 ; RV32V-LABEL: mgather_v2i64:
3552 ; RV32V:       # %bb.0:
3553 ; RV32V-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
3554 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
3555 ; RV32V-NEXT:    vmv.v.v v8, v9
3556 ; RV32V-NEXT:    ret
3558 ; RV64V-LABEL: mgather_v2i64:
3559 ; RV64V:       # %bb.0:
3560 ; RV64V-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
3561 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
3562 ; RV64V-NEXT:    vmv.v.v v8, v9
3563 ; RV64V-NEXT:    ret
3565 ; RV32ZVE32F-LABEL: mgather_v2i64:
3566 ; RV32ZVE32F:       # %bb.0:
3567 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
3568 ; RV32ZVE32F-NEXT:    vmv.x.s a4, v0
3569 ; RV32ZVE32F-NEXT:    andi a2, a4, 1
3570 ; RV32ZVE32F-NEXT:    beqz a2, .LBB43_3
3571 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
3572 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
3573 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
3574 ; RV32ZVE32F-NEXT:    lw a2, 4(a3)
3575 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
3576 ; RV32ZVE32F-NEXT:    andi a4, a4, 2
3577 ; RV32ZVE32F-NEXT:    bnez a4, .LBB43_4
3578 ; RV32ZVE32F-NEXT:  .LBB43_2:
3579 ; RV32ZVE32F-NEXT:    lw a4, 12(a1)
3580 ; RV32ZVE32F-NEXT:    lw a1, 8(a1)
3581 ; RV32ZVE32F-NEXT:    j .LBB43_5
3582 ; RV32ZVE32F-NEXT:  .LBB43_3:
3583 ; RV32ZVE32F-NEXT:    lw a2, 4(a1)
3584 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
3585 ; RV32ZVE32F-NEXT:    andi a4, a4, 2
3586 ; RV32ZVE32F-NEXT:    beqz a4, .LBB43_2
3587 ; RV32ZVE32F-NEXT:  .LBB43_4: # %cond.load1
3588 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3589 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
3590 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
3591 ; RV32ZVE32F-NEXT:    lw a4, 4(a1)
3592 ; RV32ZVE32F-NEXT:    lw a1, 0(a1)
3593 ; RV32ZVE32F-NEXT:  .LBB43_5: # %else2
3594 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
3595 ; RV32ZVE32F-NEXT:    sw a2, 4(a0)
3596 ; RV32ZVE32F-NEXT:    sw a1, 8(a0)
3597 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
3598 ; RV32ZVE32F-NEXT:    ret
3600 ; RV64ZVE32F-LABEL: mgather_v2i64:
3601 ; RV64ZVE32F:       # %bb.0:
3602 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
3603 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v0
3604 ; RV64ZVE32F-NEXT:    andi a5, a4, 1
3605 ; RV64ZVE32F-NEXT:    beqz a5, .LBB43_2
3606 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
3607 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
3608 ; RV64ZVE32F-NEXT:  .LBB43_2: # %else
3609 ; RV64ZVE32F-NEXT:    andi a4, a4, 2
3610 ; RV64ZVE32F-NEXT:    beqz a4, .LBB43_4
3611 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
3612 ; RV64ZVE32F-NEXT:    ld a3, 0(a1)
3613 ; RV64ZVE32F-NEXT:  .LBB43_4: # %else2
3614 ; RV64ZVE32F-NEXT:    mv a0, a2
3615 ; RV64ZVE32F-NEXT:    mv a1, a3
3616 ; RV64ZVE32F-NEXT:    ret
3617   %v = call <2 x i64> @llvm.masked.gather.v2i64.v2p0(<2 x ptr> %ptrs, i32 8, <2 x i1> %m, <2 x i64> %passthru)
3618   ret <2 x i64> %v
3621 declare <4 x i64> @llvm.masked.gather.v4i64.v4p0(<4 x ptr>, i32, <4 x i1>, <4 x i64>)
3623 define <4 x i64> @mgather_v4i64(<4 x ptr> %ptrs, <4 x i1> %m, <4 x i64> %passthru) {
3624 ; RV32V-LABEL: mgather_v4i64:
3625 ; RV32V:       # %bb.0:
3626 ; RV32V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
3627 ; RV32V-NEXT:    vluxei32.v v10, (zero), v8, v0.t
3628 ; RV32V-NEXT:    vmv.v.v v8, v10
3629 ; RV32V-NEXT:    ret
3631 ; RV64V-LABEL: mgather_v4i64:
3632 ; RV64V:       # %bb.0:
3633 ; RV64V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
3634 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8, v0.t
3635 ; RV64V-NEXT:    vmv.v.v v8, v10
3636 ; RV64V-NEXT:    ret
3638 ; RV32ZVE32F-LABEL: mgather_v4i64:
3639 ; RV32ZVE32F:       # %bb.0:
3640 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
3641 ; RV32ZVE32F-NEXT:    vmv.x.s a6, v0
3642 ; RV32ZVE32F-NEXT:    andi a2, a6, 1
3643 ; RV32ZVE32F-NEXT:    beqz a2, .LBB44_5
3644 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
3645 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
3646 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
3647 ; RV32ZVE32F-NEXT:    lw a2, 4(a3)
3648 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
3649 ; RV32ZVE32F-NEXT:    andi a4, a6, 2
3650 ; RV32ZVE32F-NEXT:    bnez a4, .LBB44_6
3651 ; RV32ZVE32F-NEXT:  .LBB44_2:
3652 ; RV32ZVE32F-NEXT:    lw a4, 12(a1)
3653 ; RV32ZVE32F-NEXT:    lw a5, 8(a1)
3654 ; RV32ZVE32F-NEXT:    andi a7, a6, 4
3655 ; RV32ZVE32F-NEXT:    bnez a7, .LBB44_7
3656 ; RV32ZVE32F-NEXT:  .LBB44_3:
3657 ; RV32ZVE32F-NEXT:    lw a7, 20(a1)
3658 ; RV32ZVE32F-NEXT:    lw t0, 16(a1)
3659 ; RV32ZVE32F-NEXT:    andi a6, a6, 8
3660 ; RV32ZVE32F-NEXT:    bnez a6, .LBB44_8
3661 ; RV32ZVE32F-NEXT:  .LBB44_4:
3662 ; RV32ZVE32F-NEXT:    lw a6, 28(a1)
3663 ; RV32ZVE32F-NEXT:    lw a1, 24(a1)
3664 ; RV32ZVE32F-NEXT:    j .LBB44_9
3665 ; RV32ZVE32F-NEXT:  .LBB44_5:
3666 ; RV32ZVE32F-NEXT:    lw a2, 4(a1)
3667 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
3668 ; RV32ZVE32F-NEXT:    andi a4, a6, 2
3669 ; RV32ZVE32F-NEXT:    beqz a4, .LBB44_2
3670 ; RV32ZVE32F-NEXT:  .LBB44_6: # %cond.load1
3671 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3672 ; RV32ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
3673 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v9
3674 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
3675 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
3676 ; RV32ZVE32F-NEXT:    andi a7, a6, 4
3677 ; RV32ZVE32F-NEXT:    beqz a7, .LBB44_3
3678 ; RV32ZVE32F-NEXT:  .LBB44_7: # %cond.load4
3679 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3680 ; RV32ZVE32F-NEXT:    vslidedown.vi v9, v8, 2
3681 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v9
3682 ; RV32ZVE32F-NEXT:    lw a7, 4(t0)
3683 ; RV32ZVE32F-NEXT:    lw t0, 0(t0)
3684 ; RV32ZVE32F-NEXT:    andi a6, a6, 8
3685 ; RV32ZVE32F-NEXT:    beqz a6, .LBB44_4
3686 ; RV32ZVE32F-NEXT:  .LBB44_8: # %cond.load7
3687 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3688 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 3
3689 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
3690 ; RV32ZVE32F-NEXT:    lw a6, 4(a1)
3691 ; RV32ZVE32F-NEXT:    lw a1, 0(a1)
3692 ; RV32ZVE32F-NEXT:  .LBB44_9: # %else8
3693 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
3694 ; RV32ZVE32F-NEXT:    sw a2, 4(a0)
3695 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
3696 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
3697 ; RV32ZVE32F-NEXT:    sw t0, 16(a0)
3698 ; RV32ZVE32F-NEXT:    sw a7, 20(a0)
3699 ; RV32ZVE32F-NEXT:    sw a1, 24(a0)
3700 ; RV32ZVE32F-NEXT:    sw a6, 28(a0)
3701 ; RV32ZVE32F-NEXT:    ret
3703 ; RV64ZVE32F-LABEL: mgather_v4i64:
3704 ; RV64ZVE32F:       # %bb.0:
3705 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
3706 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
3707 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
3708 ; RV64ZVE32F-NEXT:    beqz a3, .LBB44_5
3709 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
3710 ; RV64ZVE32F-NEXT:    ld a3, 0(a1)
3711 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
3712 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
3713 ; RV64ZVE32F-NEXT:    bnez a4, .LBB44_6
3714 ; RV64ZVE32F-NEXT:  .LBB44_2:
3715 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
3716 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
3717 ; RV64ZVE32F-NEXT:    bnez a6, .LBB44_7
3718 ; RV64ZVE32F-NEXT:  .LBB44_3:
3719 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
3720 ; RV64ZVE32F-NEXT:    andi a5, a5, 8
3721 ; RV64ZVE32F-NEXT:    bnez a5, .LBB44_8
3722 ; RV64ZVE32F-NEXT:  .LBB44_4:
3723 ; RV64ZVE32F-NEXT:    ld a1, 24(a2)
3724 ; RV64ZVE32F-NEXT:    j .LBB44_9
3725 ; RV64ZVE32F-NEXT:  .LBB44_5:
3726 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
3727 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
3728 ; RV64ZVE32F-NEXT:    beqz a4, .LBB44_2
3729 ; RV64ZVE32F-NEXT:  .LBB44_6: # %cond.load1
3730 ; RV64ZVE32F-NEXT:    ld a4, 8(a1)
3731 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
3732 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
3733 ; RV64ZVE32F-NEXT:    beqz a6, .LBB44_3
3734 ; RV64ZVE32F-NEXT:  .LBB44_7: # %cond.load4
3735 ; RV64ZVE32F-NEXT:    ld a6, 16(a1)
3736 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
3737 ; RV64ZVE32F-NEXT:    andi a5, a5, 8
3738 ; RV64ZVE32F-NEXT:    beqz a5, .LBB44_4
3739 ; RV64ZVE32F-NEXT:  .LBB44_8: # %cond.load7
3740 ; RV64ZVE32F-NEXT:    ld a1, 24(a1)
3741 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
3742 ; RV64ZVE32F-NEXT:  .LBB44_9: # %else8
3743 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
3744 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
3745 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
3746 ; RV64ZVE32F-NEXT:    sd a1, 24(a0)
3747 ; RV64ZVE32F-NEXT:    ret
3748   %v = call <4 x i64> @llvm.masked.gather.v4i64.v4p0(<4 x ptr> %ptrs, i32 8, <4 x i1> %m, <4 x i64> %passthru)
3749   ret <4 x i64> %v
3752 define <4 x i64> @mgather_truemask_v4i64(<4 x ptr> %ptrs, <4 x i64> %passthru) {
3753 ; RV32V-LABEL: mgather_truemask_v4i64:
3754 ; RV32V:       # %bb.0:
3755 ; RV32V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
3756 ; RV32V-NEXT:    vluxei32.v v10, (zero), v8
3757 ; RV32V-NEXT:    vmv.v.v v8, v10
3758 ; RV32V-NEXT:    ret
3760 ; RV64V-LABEL: mgather_truemask_v4i64:
3761 ; RV64V:       # %bb.0:
3762 ; RV64V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
3763 ; RV64V-NEXT:    vluxei64.v v8, (zero), v8
3764 ; RV64V-NEXT:    ret
3766 ; RV32ZVE32F-LABEL: mgather_truemask_v4i64:
3767 ; RV32ZVE32F:       # %bb.0:
3768 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3769 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
3770 ; RV32ZVE32F-NEXT:    lw a2, 0(a1)
3771 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
3772 ; RV32ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
3773 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v9
3774 ; RV32ZVE32F-NEXT:    lw a4, 0(a3)
3775 ; RV32ZVE32F-NEXT:    lw a3, 4(a3)
3776 ; RV32ZVE32F-NEXT:    vslidedown.vi v9, v8, 2
3777 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v9
3778 ; RV32ZVE32F-NEXT:    lw a6, 0(a5)
3779 ; RV32ZVE32F-NEXT:    lw a5, 4(a5)
3780 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 3
3781 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v8
3782 ; RV32ZVE32F-NEXT:    lw t0, 4(a7)
3783 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
3784 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
3785 ; RV32ZVE32F-NEXT:    sw a2, 0(a0)
3786 ; RV32ZVE32F-NEXT:    sw t0, 28(a0)
3787 ; RV32ZVE32F-NEXT:    sw a7, 24(a0)
3788 ; RV32ZVE32F-NEXT:    sw a5, 20(a0)
3789 ; RV32ZVE32F-NEXT:    sw a6, 16(a0)
3790 ; RV32ZVE32F-NEXT:    sw a3, 12(a0)
3791 ; RV32ZVE32F-NEXT:    sw a4, 8(a0)
3792 ; RV32ZVE32F-NEXT:    ret
3794 ; RV64ZVE32F-LABEL: mgather_truemask_v4i64:
3795 ; RV64ZVE32F:       # %bb.0:
3796 ; RV64ZVE32F-NEXT:    ld a2, 24(a1)
3797 ; RV64ZVE32F-NEXT:    ld a3, 16(a1)
3798 ; RV64ZVE32F-NEXT:    ld a4, 8(a1)
3799 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
3800 ; RV64ZVE32F-NEXT:    ld a2, 0(a2)
3801 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
3802 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
3803 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
3804 ; RV64ZVE32F-NEXT:    sd a2, 24(a0)
3805 ; RV64ZVE32F-NEXT:    sd a3, 16(a0)
3806 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
3807 ; RV64ZVE32F-NEXT:    sd a1, 0(a0)
3808 ; RV64ZVE32F-NEXT:    ret
3809   %v = call <4 x i64> @llvm.masked.gather.v4i64.v4p0(<4 x ptr> %ptrs, i32 8, <4 x i1> splat (i1 1), <4 x i64> %passthru)
3810   ret <4 x i64> %v
3813 define <4 x i64> @mgather_falsemask_v4i64(<4 x ptr> %ptrs, <4 x i64> %passthru) {
3814 ; RV32V-LABEL: mgather_falsemask_v4i64:
3815 ; RV32V:       # %bb.0:
3816 ; RV32V-NEXT:    vmv2r.v v8, v10
3817 ; RV32V-NEXT:    ret
3819 ; RV64V-LABEL: mgather_falsemask_v4i64:
3820 ; RV64V:       # %bb.0:
3821 ; RV64V-NEXT:    vmv2r.v v8, v10
3822 ; RV64V-NEXT:    ret
3824 ; RV32ZVE32F-LABEL: mgather_falsemask_v4i64:
3825 ; RV32ZVE32F:       # %bb.0:
3826 ; RV32ZVE32F-NEXT:    lw a2, 0(a1)
3827 ; RV32ZVE32F-NEXT:    lw a3, 4(a1)
3828 ; RV32ZVE32F-NEXT:    lw a4, 8(a1)
3829 ; RV32ZVE32F-NEXT:    lw a5, 12(a1)
3830 ; RV32ZVE32F-NEXT:    lw a6, 28(a1)
3831 ; RV32ZVE32F-NEXT:    lw a7, 24(a1)
3832 ; RV32ZVE32F-NEXT:    lw t0, 20(a1)
3833 ; RV32ZVE32F-NEXT:    lw a1, 16(a1)
3834 ; RV32ZVE32F-NEXT:    sw a6, 28(a0)
3835 ; RV32ZVE32F-NEXT:    sw a7, 24(a0)
3836 ; RV32ZVE32F-NEXT:    sw t0, 20(a0)
3837 ; RV32ZVE32F-NEXT:    sw a1, 16(a0)
3838 ; RV32ZVE32F-NEXT:    sw a5, 12(a0)
3839 ; RV32ZVE32F-NEXT:    sw a4, 8(a0)
3840 ; RV32ZVE32F-NEXT:    sw a3, 4(a0)
3841 ; RV32ZVE32F-NEXT:    sw a2, 0(a0)
3842 ; RV32ZVE32F-NEXT:    ret
3844 ; RV64ZVE32F-LABEL: mgather_falsemask_v4i64:
3845 ; RV64ZVE32F:       # %bb.0:
3846 ; RV64ZVE32F-NEXT:    ld a1, 24(a2)
3847 ; RV64ZVE32F-NEXT:    ld a3, 16(a2)
3848 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
3849 ; RV64ZVE32F-NEXT:    ld a2, 0(a2)
3850 ; RV64ZVE32F-NEXT:    sd a1, 24(a0)
3851 ; RV64ZVE32F-NEXT:    sd a3, 16(a0)
3852 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
3853 ; RV64ZVE32F-NEXT:    sd a2, 0(a0)
3854 ; RV64ZVE32F-NEXT:    ret
3855   %v = call <4 x i64> @llvm.masked.gather.v4i64.v4p0(<4 x ptr> %ptrs, i32 8, <4 x i1> zeroinitializer, <4 x i64> %passthru)
3856   ret <4 x i64> %v
3859 declare <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr>, i32, <8 x i1>, <8 x i64>)
3861 define <8 x i64> @mgather_v8i64(<8 x ptr> %ptrs, <8 x i1> %m, <8 x i64> %passthru) {
3862 ; RV32V-LABEL: mgather_v8i64:
3863 ; RV32V:       # %bb.0:
3864 ; RV32V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
3865 ; RV32V-NEXT:    vluxei32.v v12, (zero), v8, v0.t
3866 ; RV32V-NEXT:    vmv.v.v v8, v12
3867 ; RV32V-NEXT:    ret
3869 ; RV64V-LABEL: mgather_v8i64:
3870 ; RV64V:       # %bb.0:
3871 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
3872 ; RV64V-NEXT:    vluxei64.v v12, (zero), v8, v0.t
3873 ; RV64V-NEXT:    vmv.v.v v8, v12
3874 ; RV64V-NEXT:    ret
3876 ; RV32ZVE32F-LABEL: mgather_v8i64:
3877 ; RV32ZVE32F:       # %bb.0:
3878 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
3879 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
3880 ; RV32ZVE32F-NEXT:    andi a2, t0, 1
3881 ; RV32ZVE32F-NEXT:    beqz a2, .LBB47_7
3882 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
3883 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
3884 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
3885 ; RV32ZVE32F-NEXT:    lw a2, 4(a3)
3886 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
3887 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
3888 ; RV32ZVE32F-NEXT:    bnez a4, .LBB47_8
3889 ; RV32ZVE32F-NEXT:  .LBB47_2:
3890 ; RV32ZVE32F-NEXT:    lw a4, 12(a1)
3891 ; RV32ZVE32F-NEXT:    lw a5, 8(a1)
3892 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
3893 ; RV32ZVE32F-NEXT:    bnez a6, .LBB47_9
3894 ; RV32ZVE32F-NEXT:  .LBB47_3:
3895 ; RV32ZVE32F-NEXT:    lw a6, 20(a1)
3896 ; RV32ZVE32F-NEXT:    lw a7, 16(a1)
3897 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
3898 ; RV32ZVE32F-NEXT:    bnez t1, .LBB47_10
3899 ; RV32ZVE32F-NEXT:  .LBB47_4:
3900 ; RV32ZVE32F-NEXT:    lw t1, 28(a1)
3901 ; RV32ZVE32F-NEXT:    lw t2, 24(a1)
3902 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
3903 ; RV32ZVE32F-NEXT:    bnez t3, .LBB47_11
3904 ; RV32ZVE32F-NEXT:  .LBB47_5:
3905 ; RV32ZVE32F-NEXT:    lw t3, 36(a1)
3906 ; RV32ZVE32F-NEXT:    lw t4, 32(a1)
3907 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
3908 ; RV32ZVE32F-NEXT:    bnez t5, .LBB47_12
3909 ; RV32ZVE32F-NEXT:  .LBB47_6:
3910 ; RV32ZVE32F-NEXT:    lw t5, 44(a1)
3911 ; RV32ZVE32F-NEXT:    lw t6, 40(a1)
3912 ; RV32ZVE32F-NEXT:    j .LBB47_13
3913 ; RV32ZVE32F-NEXT:  .LBB47_7:
3914 ; RV32ZVE32F-NEXT:    lw a2, 4(a1)
3915 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
3916 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
3917 ; RV32ZVE32F-NEXT:    beqz a4, .LBB47_2
3918 ; RV32ZVE32F-NEXT:  .LBB47_8: # %cond.load1
3919 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3920 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
3921 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
3922 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
3923 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
3924 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
3925 ; RV32ZVE32F-NEXT:    beqz a6, .LBB47_3
3926 ; RV32ZVE32F-NEXT:  .LBB47_9: # %cond.load4
3927 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3928 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
3929 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
3930 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
3931 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
3932 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
3933 ; RV32ZVE32F-NEXT:    beqz t1, .LBB47_4
3934 ; RV32ZVE32F-NEXT:  .LBB47_10: # %cond.load7
3935 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
3936 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
3937 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
3938 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
3939 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
3940 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
3941 ; RV32ZVE32F-NEXT:    beqz t3, .LBB47_5
3942 ; RV32ZVE32F-NEXT:  .LBB47_11: # %cond.load10
3943 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
3944 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
3945 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
3946 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
3947 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
3948 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
3949 ; RV32ZVE32F-NEXT:    beqz t5, .LBB47_6
3950 ; RV32ZVE32F-NEXT:  .LBB47_12: # %cond.load13
3951 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
3952 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
3953 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
3954 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
3955 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
3956 ; RV32ZVE32F-NEXT:  .LBB47_13: # %else14
3957 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
3958 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
3959 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
3960 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
3961 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
3962 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
3963 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
3964 ; RV32ZVE32F-NEXT:    beqz s0, .LBB47_16
3965 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
3966 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
3967 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
3968 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
3969 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
3970 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
3971 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
3972 ; RV32ZVE32F-NEXT:    bnez t0, .LBB47_17
3973 ; RV32ZVE32F-NEXT:  .LBB47_15:
3974 ; RV32ZVE32F-NEXT:    lw t0, 60(a1)
3975 ; RV32ZVE32F-NEXT:    lw a1, 56(a1)
3976 ; RV32ZVE32F-NEXT:    j .LBB47_18
3977 ; RV32ZVE32F-NEXT:  .LBB47_16:
3978 ; RV32ZVE32F-NEXT:    lw s0, 52(a1)
3979 ; RV32ZVE32F-NEXT:    lw s1, 48(a1)
3980 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
3981 ; RV32ZVE32F-NEXT:    beqz t0, .LBB47_15
3982 ; RV32ZVE32F-NEXT:  .LBB47_17: # %cond.load19
3983 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
3984 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
3985 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
3986 ; RV32ZVE32F-NEXT:    lw t0, 4(a1)
3987 ; RV32ZVE32F-NEXT:    lw a1, 0(a1)
3988 ; RV32ZVE32F-NEXT:  .LBB47_18: # %else20
3989 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
3990 ; RV32ZVE32F-NEXT:    sw a2, 4(a0)
3991 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
3992 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
3993 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
3994 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
3995 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
3996 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
3997 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
3998 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
3999 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
4000 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
4001 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
4002 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
4003 ; RV32ZVE32F-NEXT:    sw a1, 56(a0)
4004 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
4005 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
4006 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
4007 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
4008 ; RV32ZVE32F-NEXT:    ret
4010 ; RV64ZVE32F-LABEL: mgather_v8i64:
4011 ; RV64ZVE32F:       # %bb.0:
4012 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
4013 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v0
4014 ; RV64ZVE32F-NEXT:    andi a3, a6, 1
4015 ; RV64ZVE32F-NEXT:    beqz a3, .LBB47_9
4016 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
4017 ; RV64ZVE32F-NEXT:    ld a3, 0(a1)
4018 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
4019 ; RV64ZVE32F-NEXT:    andi a4, a6, 2
4020 ; RV64ZVE32F-NEXT:    bnez a4, .LBB47_10
4021 ; RV64ZVE32F-NEXT:  .LBB47_2:
4022 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
4023 ; RV64ZVE32F-NEXT:    andi a5, a6, 4
4024 ; RV64ZVE32F-NEXT:    bnez a5, .LBB47_11
4025 ; RV64ZVE32F-NEXT:  .LBB47_3:
4026 ; RV64ZVE32F-NEXT:    ld a5, 16(a2)
4027 ; RV64ZVE32F-NEXT:    andi a7, a6, 8
4028 ; RV64ZVE32F-NEXT:    bnez a7, .LBB47_12
4029 ; RV64ZVE32F-NEXT:  .LBB47_4:
4030 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
4031 ; RV64ZVE32F-NEXT:    andi t0, a6, 16
4032 ; RV64ZVE32F-NEXT:    bnez t0, .LBB47_13
4033 ; RV64ZVE32F-NEXT:  .LBB47_5:
4034 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
4035 ; RV64ZVE32F-NEXT:    andi t1, a6, 32
4036 ; RV64ZVE32F-NEXT:    bnez t1, .LBB47_14
4037 ; RV64ZVE32F-NEXT:  .LBB47_6:
4038 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
4039 ; RV64ZVE32F-NEXT:    andi t2, a6, 64
4040 ; RV64ZVE32F-NEXT:    bnez t2, .LBB47_15
4041 ; RV64ZVE32F-NEXT:  .LBB47_7:
4042 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
4043 ; RV64ZVE32F-NEXT:    andi a6, a6, -128
4044 ; RV64ZVE32F-NEXT:    bnez a6, .LBB47_16
4045 ; RV64ZVE32F-NEXT:  .LBB47_8:
4046 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
4047 ; RV64ZVE32F-NEXT:    j .LBB47_17
4048 ; RV64ZVE32F-NEXT:  .LBB47_9:
4049 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
4050 ; RV64ZVE32F-NEXT:    andi a4, a6, 2
4051 ; RV64ZVE32F-NEXT:    beqz a4, .LBB47_2
4052 ; RV64ZVE32F-NEXT:  .LBB47_10: # %cond.load1
4053 ; RV64ZVE32F-NEXT:    ld a4, 8(a1)
4054 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
4055 ; RV64ZVE32F-NEXT:    andi a5, a6, 4
4056 ; RV64ZVE32F-NEXT:    beqz a5, .LBB47_3
4057 ; RV64ZVE32F-NEXT:  .LBB47_11: # %cond.load4
4058 ; RV64ZVE32F-NEXT:    ld a5, 16(a1)
4059 ; RV64ZVE32F-NEXT:    ld a5, 0(a5)
4060 ; RV64ZVE32F-NEXT:    andi a7, a6, 8
4061 ; RV64ZVE32F-NEXT:    beqz a7, .LBB47_4
4062 ; RV64ZVE32F-NEXT:  .LBB47_12: # %cond.load7
4063 ; RV64ZVE32F-NEXT:    ld a7, 24(a1)
4064 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
4065 ; RV64ZVE32F-NEXT:    andi t0, a6, 16
4066 ; RV64ZVE32F-NEXT:    beqz t0, .LBB47_5
4067 ; RV64ZVE32F-NEXT:  .LBB47_13: # %cond.load10
4068 ; RV64ZVE32F-NEXT:    ld t0, 32(a1)
4069 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
4070 ; RV64ZVE32F-NEXT:    andi t1, a6, 32
4071 ; RV64ZVE32F-NEXT:    beqz t1, .LBB47_6
4072 ; RV64ZVE32F-NEXT:  .LBB47_14: # %cond.load13
4073 ; RV64ZVE32F-NEXT:    ld t1, 40(a1)
4074 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
4075 ; RV64ZVE32F-NEXT:    andi t2, a6, 64
4076 ; RV64ZVE32F-NEXT:    beqz t2, .LBB47_7
4077 ; RV64ZVE32F-NEXT:  .LBB47_15: # %cond.load16
4078 ; RV64ZVE32F-NEXT:    ld t2, 48(a1)
4079 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
4080 ; RV64ZVE32F-NEXT:    andi a6, a6, -128
4081 ; RV64ZVE32F-NEXT:    beqz a6, .LBB47_8
4082 ; RV64ZVE32F-NEXT:  .LBB47_16: # %cond.load19
4083 ; RV64ZVE32F-NEXT:    ld a1, 56(a1)
4084 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
4085 ; RV64ZVE32F-NEXT:  .LBB47_17: # %else20
4086 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
4087 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
4088 ; RV64ZVE32F-NEXT:    sd a5, 16(a0)
4089 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
4090 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
4091 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
4092 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
4093 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
4094 ; RV64ZVE32F-NEXT:    ret
4095   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
4096   ret <8 x i64> %v
4099 define <8 x i64> @mgather_baseidx_v8i8_v8i64(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
4100 ; RV32V-LABEL: mgather_baseidx_v8i8_v8i64:
4101 ; RV32V:       # %bb.0:
4102 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
4103 ; RV32V-NEXT:    vsext.vf4 v10, v8
4104 ; RV32V-NEXT:    vsll.vi v8, v10, 3
4105 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
4106 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
4107 ; RV32V-NEXT:    vmv.v.v v8, v12
4108 ; RV32V-NEXT:    ret
4110 ; RV64V-LABEL: mgather_baseidx_v8i8_v8i64:
4111 ; RV64V:       # %bb.0:
4112 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
4113 ; RV64V-NEXT:    vsext.vf8 v16, v8
4114 ; RV64V-NEXT:    vsll.vi v8, v16, 3
4115 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
4116 ; RV64V-NEXT:    vmv.v.v v8, v12
4117 ; RV64V-NEXT:    ret
4119 ; RV32ZVE32F-LABEL: mgather_baseidx_v8i8_v8i64:
4120 ; RV32ZVE32F:       # %bb.0:
4121 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
4122 ; RV32ZVE32F-NEXT:    vsext.vf4 v10, v8
4123 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
4124 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
4125 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
4126 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
4127 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
4128 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
4129 ; RV32ZVE32F-NEXT:    beqz a3, .LBB48_7
4130 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
4131 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
4132 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
4133 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
4134 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
4135 ; RV32ZVE32F-NEXT:    bnez a4, .LBB48_8
4136 ; RV32ZVE32F-NEXT:  .LBB48_2:
4137 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
4138 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
4139 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
4140 ; RV32ZVE32F-NEXT:    bnez a6, .LBB48_9
4141 ; RV32ZVE32F-NEXT:  .LBB48_3:
4142 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
4143 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
4144 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
4145 ; RV32ZVE32F-NEXT:    bnez t1, .LBB48_10
4146 ; RV32ZVE32F-NEXT:  .LBB48_4:
4147 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
4148 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
4149 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
4150 ; RV32ZVE32F-NEXT:    bnez t3, .LBB48_11
4151 ; RV32ZVE32F-NEXT:  .LBB48_5:
4152 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
4153 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
4154 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
4155 ; RV32ZVE32F-NEXT:    bnez t5, .LBB48_12
4156 ; RV32ZVE32F-NEXT:  .LBB48_6:
4157 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
4158 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
4159 ; RV32ZVE32F-NEXT:    j .LBB48_13
4160 ; RV32ZVE32F-NEXT:  .LBB48_7:
4161 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
4162 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
4163 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
4164 ; RV32ZVE32F-NEXT:    beqz a4, .LBB48_2
4165 ; RV32ZVE32F-NEXT:  .LBB48_8: # %cond.load1
4166 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4167 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
4168 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
4169 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
4170 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
4171 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
4172 ; RV32ZVE32F-NEXT:    beqz a6, .LBB48_3
4173 ; RV32ZVE32F-NEXT:  .LBB48_9: # %cond.load4
4174 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4175 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
4176 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
4177 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
4178 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
4179 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
4180 ; RV32ZVE32F-NEXT:    beqz t1, .LBB48_4
4181 ; RV32ZVE32F-NEXT:  .LBB48_10: # %cond.load7
4182 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4183 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
4184 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
4185 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
4186 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
4187 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
4188 ; RV32ZVE32F-NEXT:    beqz t3, .LBB48_5
4189 ; RV32ZVE32F-NEXT:  .LBB48_11: # %cond.load10
4190 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4191 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
4192 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
4193 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
4194 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
4195 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
4196 ; RV32ZVE32F-NEXT:    beqz t5, .LBB48_6
4197 ; RV32ZVE32F-NEXT:  .LBB48_12: # %cond.load13
4198 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4199 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
4200 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
4201 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
4202 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
4203 ; RV32ZVE32F-NEXT:  .LBB48_13: # %else14
4204 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
4205 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
4206 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
4207 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
4208 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
4209 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
4210 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
4211 ; RV32ZVE32F-NEXT:    beqz s0, .LBB48_16
4212 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
4213 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4214 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
4215 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
4216 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
4217 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
4218 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
4219 ; RV32ZVE32F-NEXT:    bnez t0, .LBB48_17
4220 ; RV32ZVE32F-NEXT:  .LBB48_15:
4221 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
4222 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
4223 ; RV32ZVE32F-NEXT:    j .LBB48_18
4224 ; RV32ZVE32F-NEXT:  .LBB48_16:
4225 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
4226 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
4227 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
4228 ; RV32ZVE32F-NEXT:    beqz t0, .LBB48_15
4229 ; RV32ZVE32F-NEXT:  .LBB48_17: # %cond.load19
4230 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4231 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
4232 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
4233 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
4234 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
4235 ; RV32ZVE32F-NEXT:  .LBB48_18: # %else20
4236 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
4237 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
4238 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
4239 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
4240 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
4241 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
4242 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
4243 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
4244 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
4245 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
4246 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
4247 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
4248 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
4249 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
4250 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
4251 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
4252 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
4253 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
4254 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
4255 ; RV32ZVE32F-NEXT:    ret
4257 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8_v8i64:
4258 ; RV64ZVE32F:       # %bb.0:
4259 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
4260 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
4261 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
4262 ; RV64ZVE32F-NEXT:    beqz a3, .LBB48_3
4263 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
4264 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
4265 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
4266 ; RV64ZVE32F-NEXT:    add a3, a1, a3
4267 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
4268 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
4269 ; RV64ZVE32F-NEXT:    bnez a4, .LBB48_4
4270 ; RV64ZVE32F-NEXT:  .LBB48_2:
4271 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
4272 ; RV64ZVE32F-NEXT:    j .LBB48_5
4273 ; RV64ZVE32F-NEXT:  .LBB48_3:
4274 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
4275 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
4276 ; RV64ZVE32F-NEXT:    beqz a4, .LBB48_2
4277 ; RV64ZVE32F-NEXT:  .LBB48_4: # %cond.load1
4278 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
4279 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
4280 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v9
4281 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
4282 ; RV64ZVE32F-NEXT:    add a4, a1, a4
4283 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
4284 ; RV64ZVE32F-NEXT:  .LBB48_5: # %else2
4285 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
4286 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
4287 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
4288 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
4289 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
4290 ; RV64ZVE32F-NEXT:    beqz a6, .LBB48_10
4291 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
4292 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v8
4293 ; RV64ZVE32F-NEXT:    slli a6, a6, 3
4294 ; RV64ZVE32F-NEXT:    add a6, a1, a6
4295 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
4296 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
4297 ; RV64ZVE32F-NEXT:    bnez a7, .LBB48_11
4298 ; RV64ZVE32F-NEXT:  .LBB48_7:
4299 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
4300 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
4301 ; RV64ZVE32F-NEXT:    bnez t0, .LBB48_12
4302 ; RV64ZVE32F-NEXT:  .LBB48_8:
4303 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
4304 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
4305 ; RV64ZVE32F-NEXT:    bnez t1, .LBB48_13
4306 ; RV64ZVE32F-NEXT:  .LBB48_9:
4307 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
4308 ; RV64ZVE32F-NEXT:    j .LBB48_14
4309 ; RV64ZVE32F-NEXT:  .LBB48_10:
4310 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
4311 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
4312 ; RV64ZVE32F-NEXT:    beqz a7, .LBB48_7
4313 ; RV64ZVE32F-NEXT:  .LBB48_11: # %cond.load7
4314 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
4315 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
4316 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
4317 ; RV64ZVE32F-NEXT:    add a7, a1, a7
4318 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
4319 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
4320 ; RV64ZVE32F-NEXT:    beqz t0, .LBB48_8
4321 ; RV64ZVE32F-NEXT:  .LBB48_12: # %cond.load10
4322 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v9
4323 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
4324 ; RV64ZVE32F-NEXT:    add t0, a1, t0
4325 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
4326 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
4327 ; RV64ZVE32F-NEXT:    beqz t1, .LBB48_9
4328 ; RV64ZVE32F-NEXT:  .LBB48_13: # %cond.load13
4329 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
4330 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v8
4331 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
4332 ; RV64ZVE32F-NEXT:    add t1, a1, t1
4333 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
4334 ; RV64ZVE32F-NEXT:  .LBB48_14: # %else14
4335 ; RV64ZVE32F-NEXT:    andi t2, a5, 64
4336 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
4337 ; RV64ZVE32F-NEXT:    beqz t2, .LBB48_17
4338 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
4339 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
4340 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
4341 ; RV64ZVE32F-NEXT:    add t2, a1, t2
4342 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
4343 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
4344 ; RV64ZVE32F-NEXT:    bnez a5, .LBB48_18
4345 ; RV64ZVE32F-NEXT:  .LBB48_16:
4346 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
4347 ; RV64ZVE32F-NEXT:    j .LBB48_19
4348 ; RV64ZVE32F-NEXT:  .LBB48_17:
4349 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
4350 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
4351 ; RV64ZVE32F-NEXT:    beqz a5, .LBB48_16
4352 ; RV64ZVE32F-NEXT:  .LBB48_18: # %cond.load19
4353 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
4354 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
4355 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
4356 ; RV64ZVE32F-NEXT:    add a1, a1, a2
4357 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
4358 ; RV64ZVE32F-NEXT:  .LBB48_19: # %else20
4359 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
4360 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
4361 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
4362 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
4363 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
4364 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
4365 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
4366 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
4367 ; RV64ZVE32F-NEXT:    ret
4368   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i8> %idxs
4369   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
4370   ret <8 x i64> %v
4373 define <8 x i64> @mgather_baseidx_sext_v8i8_v8i64(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
4374 ; RV32V-LABEL: mgather_baseidx_sext_v8i8_v8i64:
4375 ; RV32V:       # %bb.0:
4376 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
4377 ; RV32V-NEXT:    vsext.vf4 v10, v8
4378 ; RV32V-NEXT:    vsll.vi v8, v10, 3
4379 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
4380 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
4381 ; RV32V-NEXT:    vmv.v.v v8, v12
4382 ; RV32V-NEXT:    ret
4384 ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8i64:
4385 ; RV64V:       # %bb.0:
4386 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
4387 ; RV64V-NEXT:    vsext.vf8 v16, v8
4388 ; RV64V-NEXT:    vsll.vi v8, v16, 3
4389 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
4390 ; RV64V-NEXT:    vmv.v.v v8, v12
4391 ; RV64V-NEXT:    ret
4393 ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8i64:
4394 ; RV32ZVE32F:       # %bb.0:
4395 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
4396 ; RV32ZVE32F-NEXT:    vsext.vf4 v10, v8
4397 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
4398 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
4399 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
4400 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
4401 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
4402 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
4403 ; RV32ZVE32F-NEXT:    beqz a3, .LBB49_7
4404 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
4405 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
4406 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
4407 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
4408 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
4409 ; RV32ZVE32F-NEXT:    bnez a4, .LBB49_8
4410 ; RV32ZVE32F-NEXT:  .LBB49_2:
4411 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
4412 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
4413 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
4414 ; RV32ZVE32F-NEXT:    bnez a6, .LBB49_9
4415 ; RV32ZVE32F-NEXT:  .LBB49_3:
4416 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
4417 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
4418 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
4419 ; RV32ZVE32F-NEXT:    bnez t1, .LBB49_10
4420 ; RV32ZVE32F-NEXT:  .LBB49_4:
4421 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
4422 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
4423 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
4424 ; RV32ZVE32F-NEXT:    bnez t3, .LBB49_11
4425 ; RV32ZVE32F-NEXT:  .LBB49_5:
4426 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
4427 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
4428 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
4429 ; RV32ZVE32F-NEXT:    bnez t5, .LBB49_12
4430 ; RV32ZVE32F-NEXT:  .LBB49_6:
4431 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
4432 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
4433 ; RV32ZVE32F-NEXT:    j .LBB49_13
4434 ; RV32ZVE32F-NEXT:  .LBB49_7:
4435 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
4436 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
4437 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
4438 ; RV32ZVE32F-NEXT:    beqz a4, .LBB49_2
4439 ; RV32ZVE32F-NEXT:  .LBB49_8: # %cond.load1
4440 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4441 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
4442 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
4443 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
4444 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
4445 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
4446 ; RV32ZVE32F-NEXT:    beqz a6, .LBB49_3
4447 ; RV32ZVE32F-NEXT:  .LBB49_9: # %cond.load4
4448 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4449 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
4450 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
4451 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
4452 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
4453 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
4454 ; RV32ZVE32F-NEXT:    beqz t1, .LBB49_4
4455 ; RV32ZVE32F-NEXT:  .LBB49_10: # %cond.load7
4456 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4457 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
4458 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
4459 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
4460 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
4461 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
4462 ; RV32ZVE32F-NEXT:    beqz t3, .LBB49_5
4463 ; RV32ZVE32F-NEXT:  .LBB49_11: # %cond.load10
4464 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4465 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
4466 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
4467 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
4468 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
4469 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
4470 ; RV32ZVE32F-NEXT:    beqz t5, .LBB49_6
4471 ; RV32ZVE32F-NEXT:  .LBB49_12: # %cond.load13
4472 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4473 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
4474 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
4475 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
4476 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
4477 ; RV32ZVE32F-NEXT:  .LBB49_13: # %else14
4478 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
4479 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
4480 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
4481 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
4482 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
4483 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
4484 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
4485 ; RV32ZVE32F-NEXT:    beqz s0, .LBB49_16
4486 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
4487 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4488 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
4489 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
4490 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
4491 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
4492 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
4493 ; RV32ZVE32F-NEXT:    bnez t0, .LBB49_17
4494 ; RV32ZVE32F-NEXT:  .LBB49_15:
4495 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
4496 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
4497 ; RV32ZVE32F-NEXT:    j .LBB49_18
4498 ; RV32ZVE32F-NEXT:  .LBB49_16:
4499 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
4500 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
4501 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
4502 ; RV32ZVE32F-NEXT:    beqz t0, .LBB49_15
4503 ; RV32ZVE32F-NEXT:  .LBB49_17: # %cond.load19
4504 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4505 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
4506 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
4507 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
4508 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
4509 ; RV32ZVE32F-NEXT:  .LBB49_18: # %else20
4510 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
4511 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
4512 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
4513 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
4514 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
4515 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
4516 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
4517 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
4518 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
4519 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
4520 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
4521 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
4522 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
4523 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
4524 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
4525 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
4526 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
4527 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
4528 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
4529 ; RV32ZVE32F-NEXT:    ret
4531 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8i64:
4532 ; RV64ZVE32F:       # %bb.0:
4533 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
4534 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
4535 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
4536 ; RV64ZVE32F-NEXT:    beqz a3, .LBB49_3
4537 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
4538 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
4539 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
4540 ; RV64ZVE32F-NEXT:    add a3, a1, a3
4541 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
4542 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
4543 ; RV64ZVE32F-NEXT:    bnez a4, .LBB49_4
4544 ; RV64ZVE32F-NEXT:  .LBB49_2:
4545 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
4546 ; RV64ZVE32F-NEXT:    j .LBB49_5
4547 ; RV64ZVE32F-NEXT:  .LBB49_3:
4548 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
4549 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
4550 ; RV64ZVE32F-NEXT:    beqz a4, .LBB49_2
4551 ; RV64ZVE32F-NEXT:  .LBB49_4: # %cond.load1
4552 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
4553 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
4554 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v9
4555 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
4556 ; RV64ZVE32F-NEXT:    add a4, a1, a4
4557 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
4558 ; RV64ZVE32F-NEXT:  .LBB49_5: # %else2
4559 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
4560 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
4561 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
4562 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
4563 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
4564 ; RV64ZVE32F-NEXT:    beqz a6, .LBB49_10
4565 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
4566 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v8
4567 ; RV64ZVE32F-NEXT:    slli a6, a6, 3
4568 ; RV64ZVE32F-NEXT:    add a6, a1, a6
4569 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
4570 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
4571 ; RV64ZVE32F-NEXT:    bnez a7, .LBB49_11
4572 ; RV64ZVE32F-NEXT:  .LBB49_7:
4573 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
4574 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
4575 ; RV64ZVE32F-NEXT:    bnez t0, .LBB49_12
4576 ; RV64ZVE32F-NEXT:  .LBB49_8:
4577 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
4578 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
4579 ; RV64ZVE32F-NEXT:    bnez t1, .LBB49_13
4580 ; RV64ZVE32F-NEXT:  .LBB49_9:
4581 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
4582 ; RV64ZVE32F-NEXT:    j .LBB49_14
4583 ; RV64ZVE32F-NEXT:  .LBB49_10:
4584 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
4585 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
4586 ; RV64ZVE32F-NEXT:    beqz a7, .LBB49_7
4587 ; RV64ZVE32F-NEXT:  .LBB49_11: # %cond.load7
4588 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
4589 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
4590 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
4591 ; RV64ZVE32F-NEXT:    add a7, a1, a7
4592 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
4593 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
4594 ; RV64ZVE32F-NEXT:    beqz t0, .LBB49_8
4595 ; RV64ZVE32F-NEXT:  .LBB49_12: # %cond.load10
4596 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v9
4597 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
4598 ; RV64ZVE32F-NEXT:    add t0, a1, t0
4599 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
4600 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
4601 ; RV64ZVE32F-NEXT:    beqz t1, .LBB49_9
4602 ; RV64ZVE32F-NEXT:  .LBB49_13: # %cond.load13
4603 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
4604 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v8
4605 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
4606 ; RV64ZVE32F-NEXT:    add t1, a1, t1
4607 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
4608 ; RV64ZVE32F-NEXT:  .LBB49_14: # %else14
4609 ; RV64ZVE32F-NEXT:    andi t2, a5, 64
4610 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
4611 ; RV64ZVE32F-NEXT:    beqz t2, .LBB49_17
4612 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
4613 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
4614 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
4615 ; RV64ZVE32F-NEXT:    add t2, a1, t2
4616 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
4617 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
4618 ; RV64ZVE32F-NEXT:    bnez a5, .LBB49_18
4619 ; RV64ZVE32F-NEXT:  .LBB49_16:
4620 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
4621 ; RV64ZVE32F-NEXT:    j .LBB49_19
4622 ; RV64ZVE32F-NEXT:  .LBB49_17:
4623 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
4624 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
4625 ; RV64ZVE32F-NEXT:    beqz a5, .LBB49_16
4626 ; RV64ZVE32F-NEXT:  .LBB49_18: # %cond.load19
4627 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
4628 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
4629 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
4630 ; RV64ZVE32F-NEXT:    add a1, a1, a2
4631 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
4632 ; RV64ZVE32F-NEXT:  .LBB49_19: # %else20
4633 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
4634 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
4635 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
4636 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
4637 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
4638 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
4639 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
4640 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
4641 ; RV64ZVE32F-NEXT:    ret
4642   %eidxs = sext <8 x i8> %idxs to <8 x i64>
4643   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i64> %eidxs
4644   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
4645   ret <8 x i64> %v
4648 define <8 x i64> @mgather_baseidx_zext_v8i8_v8i64(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
4649 ; RV32V-LABEL: mgather_baseidx_zext_v8i8_v8i64:
4650 ; RV32V:       # %bb.0:
4651 ; RV32V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
4652 ; RV32V-NEXT:    vzext.vf2 v9, v8
4653 ; RV32V-NEXT:    vsll.vi v8, v9, 3
4654 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
4655 ; RV32V-NEXT:    vluxei16.v v12, (a0), v8, v0.t
4656 ; RV32V-NEXT:    vmv.v.v v8, v12
4657 ; RV32V-NEXT:    ret
4659 ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8i64:
4660 ; RV64V:       # %bb.0:
4661 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
4662 ; RV64V-NEXT:    vzext.vf2 v9, v8
4663 ; RV64V-NEXT:    vsll.vi v8, v9, 3
4664 ; RV64V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
4665 ; RV64V-NEXT:    vluxei16.v v12, (a0), v8, v0.t
4666 ; RV64V-NEXT:    vmv.v.v v8, v12
4667 ; RV64V-NEXT:    ret
4669 ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8i64:
4670 ; RV32ZVE32F:       # %bb.0:
4671 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
4672 ; RV32ZVE32F-NEXT:    vzext.vf4 v10, v8
4673 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
4674 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
4675 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
4676 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
4677 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
4678 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
4679 ; RV32ZVE32F-NEXT:    beqz a3, .LBB50_7
4680 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
4681 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
4682 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
4683 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
4684 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
4685 ; RV32ZVE32F-NEXT:    bnez a4, .LBB50_8
4686 ; RV32ZVE32F-NEXT:  .LBB50_2:
4687 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
4688 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
4689 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
4690 ; RV32ZVE32F-NEXT:    bnez a6, .LBB50_9
4691 ; RV32ZVE32F-NEXT:  .LBB50_3:
4692 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
4693 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
4694 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
4695 ; RV32ZVE32F-NEXT:    bnez t1, .LBB50_10
4696 ; RV32ZVE32F-NEXT:  .LBB50_4:
4697 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
4698 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
4699 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
4700 ; RV32ZVE32F-NEXT:    bnez t3, .LBB50_11
4701 ; RV32ZVE32F-NEXT:  .LBB50_5:
4702 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
4703 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
4704 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
4705 ; RV32ZVE32F-NEXT:    bnez t5, .LBB50_12
4706 ; RV32ZVE32F-NEXT:  .LBB50_6:
4707 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
4708 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
4709 ; RV32ZVE32F-NEXT:    j .LBB50_13
4710 ; RV32ZVE32F-NEXT:  .LBB50_7:
4711 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
4712 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
4713 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
4714 ; RV32ZVE32F-NEXT:    beqz a4, .LBB50_2
4715 ; RV32ZVE32F-NEXT:  .LBB50_8: # %cond.load1
4716 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4717 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
4718 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
4719 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
4720 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
4721 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
4722 ; RV32ZVE32F-NEXT:    beqz a6, .LBB50_3
4723 ; RV32ZVE32F-NEXT:  .LBB50_9: # %cond.load4
4724 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4725 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
4726 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
4727 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
4728 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
4729 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
4730 ; RV32ZVE32F-NEXT:    beqz t1, .LBB50_4
4731 ; RV32ZVE32F-NEXT:  .LBB50_10: # %cond.load7
4732 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
4733 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
4734 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
4735 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
4736 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
4737 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
4738 ; RV32ZVE32F-NEXT:    beqz t3, .LBB50_5
4739 ; RV32ZVE32F-NEXT:  .LBB50_11: # %cond.load10
4740 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4741 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
4742 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
4743 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
4744 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
4745 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
4746 ; RV32ZVE32F-NEXT:    beqz t5, .LBB50_6
4747 ; RV32ZVE32F-NEXT:  .LBB50_12: # %cond.load13
4748 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4749 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
4750 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
4751 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
4752 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
4753 ; RV32ZVE32F-NEXT:  .LBB50_13: # %else14
4754 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
4755 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
4756 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
4757 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
4758 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
4759 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
4760 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
4761 ; RV32ZVE32F-NEXT:    beqz s0, .LBB50_16
4762 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
4763 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4764 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
4765 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
4766 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
4767 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
4768 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
4769 ; RV32ZVE32F-NEXT:    bnez t0, .LBB50_17
4770 ; RV32ZVE32F-NEXT:  .LBB50_15:
4771 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
4772 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
4773 ; RV32ZVE32F-NEXT:    j .LBB50_18
4774 ; RV32ZVE32F-NEXT:  .LBB50_16:
4775 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
4776 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
4777 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
4778 ; RV32ZVE32F-NEXT:    beqz t0, .LBB50_15
4779 ; RV32ZVE32F-NEXT:  .LBB50_17: # %cond.load19
4780 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
4781 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
4782 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
4783 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
4784 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
4785 ; RV32ZVE32F-NEXT:  .LBB50_18: # %else20
4786 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
4787 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
4788 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
4789 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
4790 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
4791 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
4792 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
4793 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
4794 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
4795 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
4796 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
4797 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
4798 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
4799 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
4800 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
4801 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
4802 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
4803 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
4804 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
4805 ; RV32ZVE32F-NEXT:    ret
4807 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8i64:
4808 ; RV64ZVE32F:       # %bb.0:
4809 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
4810 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
4811 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
4812 ; RV64ZVE32F-NEXT:    beqz a3, .LBB50_3
4813 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
4814 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
4815 ; RV64ZVE32F-NEXT:    andi a3, a3, 255
4816 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
4817 ; RV64ZVE32F-NEXT:    add a3, a1, a3
4818 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
4819 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
4820 ; RV64ZVE32F-NEXT:    bnez a4, .LBB50_4
4821 ; RV64ZVE32F-NEXT:  .LBB50_2:
4822 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
4823 ; RV64ZVE32F-NEXT:    j .LBB50_5
4824 ; RV64ZVE32F-NEXT:  .LBB50_3:
4825 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
4826 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
4827 ; RV64ZVE32F-NEXT:    beqz a4, .LBB50_2
4828 ; RV64ZVE32F-NEXT:  .LBB50_4: # %cond.load1
4829 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
4830 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
4831 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v9
4832 ; RV64ZVE32F-NEXT:    andi a4, a4, 255
4833 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
4834 ; RV64ZVE32F-NEXT:    add a4, a1, a4
4835 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
4836 ; RV64ZVE32F-NEXT:  .LBB50_5: # %else2
4837 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
4838 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
4839 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
4840 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
4841 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
4842 ; RV64ZVE32F-NEXT:    beqz a6, .LBB50_10
4843 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
4844 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v8
4845 ; RV64ZVE32F-NEXT:    andi a6, a6, 255
4846 ; RV64ZVE32F-NEXT:    slli a6, a6, 3
4847 ; RV64ZVE32F-NEXT:    add a6, a1, a6
4848 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
4849 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
4850 ; RV64ZVE32F-NEXT:    bnez a7, .LBB50_11
4851 ; RV64ZVE32F-NEXT:  .LBB50_7:
4852 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
4853 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
4854 ; RV64ZVE32F-NEXT:    bnez t0, .LBB50_12
4855 ; RV64ZVE32F-NEXT:  .LBB50_8:
4856 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
4857 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
4858 ; RV64ZVE32F-NEXT:    bnez t1, .LBB50_13
4859 ; RV64ZVE32F-NEXT:  .LBB50_9:
4860 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
4861 ; RV64ZVE32F-NEXT:    j .LBB50_14
4862 ; RV64ZVE32F-NEXT:  .LBB50_10:
4863 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
4864 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
4865 ; RV64ZVE32F-NEXT:    beqz a7, .LBB50_7
4866 ; RV64ZVE32F-NEXT:  .LBB50_11: # %cond.load7
4867 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
4868 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
4869 ; RV64ZVE32F-NEXT:    andi a7, a7, 255
4870 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
4871 ; RV64ZVE32F-NEXT:    add a7, a1, a7
4872 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
4873 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
4874 ; RV64ZVE32F-NEXT:    beqz t0, .LBB50_8
4875 ; RV64ZVE32F-NEXT:  .LBB50_12: # %cond.load10
4876 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v9
4877 ; RV64ZVE32F-NEXT:    andi t0, t0, 255
4878 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
4879 ; RV64ZVE32F-NEXT:    add t0, a1, t0
4880 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
4881 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
4882 ; RV64ZVE32F-NEXT:    beqz t1, .LBB50_9
4883 ; RV64ZVE32F-NEXT:  .LBB50_13: # %cond.load13
4884 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
4885 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v8
4886 ; RV64ZVE32F-NEXT:    andi t1, t1, 255
4887 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
4888 ; RV64ZVE32F-NEXT:    add t1, a1, t1
4889 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
4890 ; RV64ZVE32F-NEXT:  .LBB50_14: # %else14
4891 ; RV64ZVE32F-NEXT:    andi t2, a5, 64
4892 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
4893 ; RV64ZVE32F-NEXT:    beqz t2, .LBB50_17
4894 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
4895 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
4896 ; RV64ZVE32F-NEXT:    andi t2, t2, 255
4897 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
4898 ; RV64ZVE32F-NEXT:    add t2, a1, t2
4899 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
4900 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
4901 ; RV64ZVE32F-NEXT:    bnez a5, .LBB50_18
4902 ; RV64ZVE32F-NEXT:  .LBB50_16:
4903 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
4904 ; RV64ZVE32F-NEXT:    j .LBB50_19
4905 ; RV64ZVE32F-NEXT:  .LBB50_17:
4906 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
4907 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
4908 ; RV64ZVE32F-NEXT:    beqz a5, .LBB50_16
4909 ; RV64ZVE32F-NEXT:  .LBB50_18: # %cond.load19
4910 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
4911 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
4912 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
4913 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
4914 ; RV64ZVE32F-NEXT:    add a1, a1, a2
4915 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
4916 ; RV64ZVE32F-NEXT:  .LBB50_19: # %else20
4917 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
4918 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
4919 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
4920 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
4921 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
4922 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
4923 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
4924 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
4925 ; RV64ZVE32F-NEXT:    ret
4926   %eidxs = zext <8 x i8> %idxs to <8 x i64>
4927   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i64> %eidxs
4928   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
4929   ret <8 x i64> %v
4932 define <8 x i64> @mgather_baseidx_v8i16_v8i64(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
4933 ; RV32V-LABEL: mgather_baseidx_v8i16_v8i64:
4934 ; RV32V:       # %bb.0:
4935 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
4936 ; RV32V-NEXT:    vsext.vf2 v10, v8
4937 ; RV32V-NEXT:    vsll.vi v8, v10, 3
4938 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
4939 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
4940 ; RV32V-NEXT:    vmv.v.v v8, v12
4941 ; RV32V-NEXT:    ret
4943 ; RV64V-LABEL: mgather_baseidx_v8i16_v8i64:
4944 ; RV64V:       # %bb.0:
4945 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
4946 ; RV64V-NEXT:    vsext.vf4 v16, v8
4947 ; RV64V-NEXT:    vsll.vi v8, v16, 3
4948 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
4949 ; RV64V-NEXT:    vmv.v.v v8, v12
4950 ; RV64V-NEXT:    ret
4952 ; RV32ZVE32F-LABEL: mgather_baseidx_v8i16_v8i64:
4953 ; RV32ZVE32F:       # %bb.0:
4954 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
4955 ; RV32ZVE32F-NEXT:    vsext.vf2 v10, v8
4956 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
4957 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
4958 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
4959 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
4960 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
4961 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
4962 ; RV32ZVE32F-NEXT:    beqz a3, .LBB51_7
4963 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
4964 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
4965 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
4966 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
4967 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
4968 ; RV32ZVE32F-NEXT:    bnez a4, .LBB51_8
4969 ; RV32ZVE32F-NEXT:  .LBB51_2:
4970 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
4971 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
4972 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
4973 ; RV32ZVE32F-NEXT:    bnez a6, .LBB51_9
4974 ; RV32ZVE32F-NEXT:  .LBB51_3:
4975 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
4976 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
4977 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
4978 ; RV32ZVE32F-NEXT:    bnez t1, .LBB51_10
4979 ; RV32ZVE32F-NEXT:  .LBB51_4:
4980 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
4981 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
4982 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
4983 ; RV32ZVE32F-NEXT:    bnez t3, .LBB51_11
4984 ; RV32ZVE32F-NEXT:  .LBB51_5:
4985 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
4986 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
4987 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
4988 ; RV32ZVE32F-NEXT:    bnez t5, .LBB51_12
4989 ; RV32ZVE32F-NEXT:  .LBB51_6:
4990 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
4991 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
4992 ; RV32ZVE32F-NEXT:    j .LBB51_13
4993 ; RV32ZVE32F-NEXT:  .LBB51_7:
4994 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
4995 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
4996 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
4997 ; RV32ZVE32F-NEXT:    beqz a4, .LBB51_2
4998 ; RV32ZVE32F-NEXT:  .LBB51_8: # %cond.load1
4999 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5000 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
5001 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
5002 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
5003 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
5004 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
5005 ; RV32ZVE32F-NEXT:    beqz a6, .LBB51_3
5006 ; RV32ZVE32F-NEXT:  .LBB51_9: # %cond.load4
5007 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5008 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
5009 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
5010 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
5011 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
5012 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
5013 ; RV32ZVE32F-NEXT:    beqz t1, .LBB51_4
5014 ; RV32ZVE32F-NEXT:  .LBB51_10: # %cond.load7
5015 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5016 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
5017 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
5018 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
5019 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
5020 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
5021 ; RV32ZVE32F-NEXT:    beqz t3, .LBB51_5
5022 ; RV32ZVE32F-NEXT:  .LBB51_11: # %cond.load10
5023 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5024 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
5025 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
5026 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
5027 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
5028 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
5029 ; RV32ZVE32F-NEXT:    beqz t5, .LBB51_6
5030 ; RV32ZVE32F-NEXT:  .LBB51_12: # %cond.load13
5031 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5032 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
5033 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
5034 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
5035 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
5036 ; RV32ZVE32F-NEXT:  .LBB51_13: # %else14
5037 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
5038 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
5039 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
5040 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
5041 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
5042 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
5043 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
5044 ; RV32ZVE32F-NEXT:    beqz s0, .LBB51_16
5045 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
5046 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5047 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
5048 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
5049 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
5050 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
5051 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
5052 ; RV32ZVE32F-NEXT:    bnez t0, .LBB51_17
5053 ; RV32ZVE32F-NEXT:  .LBB51_15:
5054 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
5055 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
5056 ; RV32ZVE32F-NEXT:    j .LBB51_18
5057 ; RV32ZVE32F-NEXT:  .LBB51_16:
5058 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
5059 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
5060 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
5061 ; RV32ZVE32F-NEXT:    beqz t0, .LBB51_15
5062 ; RV32ZVE32F-NEXT:  .LBB51_17: # %cond.load19
5063 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5064 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
5065 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
5066 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
5067 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
5068 ; RV32ZVE32F-NEXT:  .LBB51_18: # %else20
5069 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
5070 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
5071 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
5072 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
5073 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
5074 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
5075 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
5076 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
5077 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
5078 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
5079 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
5080 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
5081 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
5082 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
5083 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
5084 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
5085 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
5086 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
5087 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
5088 ; RV32ZVE32F-NEXT:    ret
5090 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i16_v8i64:
5091 ; RV64ZVE32F:       # %bb.0:
5092 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
5093 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
5094 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
5095 ; RV64ZVE32F-NEXT:    beqz a3, .LBB51_3
5096 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
5097 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
5098 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
5099 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
5100 ; RV64ZVE32F-NEXT:    add a3, a1, a3
5101 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
5102 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
5103 ; RV64ZVE32F-NEXT:    bnez a4, .LBB51_4
5104 ; RV64ZVE32F-NEXT:  .LBB51_2:
5105 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
5106 ; RV64ZVE32F-NEXT:    j .LBB51_5
5107 ; RV64ZVE32F-NEXT:  .LBB51_3:
5108 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
5109 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
5110 ; RV64ZVE32F-NEXT:    beqz a4, .LBB51_2
5111 ; RV64ZVE32F-NEXT:  .LBB51_4: # %cond.load1
5112 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
5113 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
5114 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v9
5115 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
5116 ; RV64ZVE32F-NEXT:    add a4, a1, a4
5117 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
5118 ; RV64ZVE32F-NEXT:  .LBB51_5: # %else2
5119 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
5120 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
5121 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
5122 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
5123 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
5124 ; RV64ZVE32F-NEXT:    beqz a6, .LBB51_10
5125 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
5126 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v8
5127 ; RV64ZVE32F-NEXT:    slli a6, a6, 3
5128 ; RV64ZVE32F-NEXT:    add a6, a1, a6
5129 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
5130 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
5131 ; RV64ZVE32F-NEXT:    bnez a7, .LBB51_11
5132 ; RV64ZVE32F-NEXT:  .LBB51_7:
5133 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
5134 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
5135 ; RV64ZVE32F-NEXT:    bnez t0, .LBB51_12
5136 ; RV64ZVE32F-NEXT:  .LBB51_8:
5137 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
5138 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
5139 ; RV64ZVE32F-NEXT:    bnez t1, .LBB51_13
5140 ; RV64ZVE32F-NEXT:  .LBB51_9:
5141 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
5142 ; RV64ZVE32F-NEXT:    j .LBB51_14
5143 ; RV64ZVE32F-NEXT:  .LBB51_10:
5144 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
5145 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
5146 ; RV64ZVE32F-NEXT:    beqz a7, .LBB51_7
5147 ; RV64ZVE32F-NEXT:  .LBB51_11: # %cond.load7
5148 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
5149 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
5150 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
5151 ; RV64ZVE32F-NEXT:    add a7, a1, a7
5152 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
5153 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
5154 ; RV64ZVE32F-NEXT:    beqz t0, .LBB51_8
5155 ; RV64ZVE32F-NEXT:  .LBB51_12: # %cond.load10
5156 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v9
5157 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
5158 ; RV64ZVE32F-NEXT:    add t0, a1, t0
5159 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
5160 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
5161 ; RV64ZVE32F-NEXT:    beqz t1, .LBB51_9
5162 ; RV64ZVE32F-NEXT:  .LBB51_13: # %cond.load13
5163 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
5164 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v8
5165 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
5166 ; RV64ZVE32F-NEXT:    add t1, a1, t1
5167 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
5168 ; RV64ZVE32F-NEXT:  .LBB51_14: # %else14
5169 ; RV64ZVE32F-NEXT:    andi t2, a5, 64
5170 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
5171 ; RV64ZVE32F-NEXT:    beqz t2, .LBB51_17
5172 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
5173 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
5174 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
5175 ; RV64ZVE32F-NEXT:    add t2, a1, t2
5176 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
5177 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
5178 ; RV64ZVE32F-NEXT:    bnez a5, .LBB51_18
5179 ; RV64ZVE32F-NEXT:  .LBB51_16:
5180 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
5181 ; RV64ZVE32F-NEXT:    j .LBB51_19
5182 ; RV64ZVE32F-NEXT:  .LBB51_17:
5183 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
5184 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
5185 ; RV64ZVE32F-NEXT:    beqz a5, .LBB51_16
5186 ; RV64ZVE32F-NEXT:  .LBB51_18: # %cond.load19
5187 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
5188 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
5189 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
5190 ; RV64ZVE32F-NEXT:    add a1, a1, a2
5191 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
5192 ; RV64ZVE32F-NEXT:  .LBB51_19: # %else20
5193 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
5194 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
5195 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
5196 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
5197 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
5198 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
5199 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
5200 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
5201 ; RV64ZVE32F-NEXT:    ret
5202   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i16> %idxs
5203   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
5204   ret <8 x i64> %v
5207 define <8 x i64> @mgather_baseidx_sext_v8i16_v8i64(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
5208 ; RV32V-LABEL: mgather_baseidx_sext_v8i16_v8i64:
5209 ; RV32V:       # %bb.0:
5210 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5211 ; RV32V-NEXT:    vsext.vf2 v10, v8
5212 ; RV32V-NEXT:    vsll.vi v8, v10, 3
5213 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
5214 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
5215 ; RV32V-NEXT:    vmv.v.v v8, v12
5216 ; RV32V-NEXT:    ret
5218 ; RV64V-LABEL: mgather_baseidx_sext_v8i16_v8i64:
5219 ; RV64V:       # %bb.0:
5220 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
5221 ; RV64V-NEXT:    vsext.vf4 v16, v8
5222 ; RV64V-NEXT:    vsll.vi v8, v16, 3
5223 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
5224 ; RV64V-NEXT:    vmv.v.v v8, v12
5225 ; RV64V-NEXT:    ret
5227 ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8i64:
5228 ; RV32ZVE32F:       # %bb.0:
5229 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5230 ; RV32ZVE32F-NEXT:    vsext.vf2 v10, v8
5231 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
5232 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
5233 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
5234 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
5235 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5236 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
5237 ; RV32ZVE32F-NEXT:    beqz a3, .LBB52_7
5238 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
5239 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
5240 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
5241 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
5242 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
5243 ; RV32ZVE32F-NEXT:    bnez a4, .LBB52_8
5244 ; RV32ZVE32F-NEXT:  .LBB52_2:
5245 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
5246 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
5247 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
5248 ; RV32ZVE32F-NEXT:    bnez a6, .LBB52_9
5249 ; RV32ZVE32F-NEXT:  .LBB52_3:
5250 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
5251 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
5252 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
5253 ; RV32ZVE32F-NEXT:    bnez t1, .LBB52_10
5254 ; RV32ZVE32F-NEXT:  .LBB52_4:
5255 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
5256 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
5257 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
5258 ; RV32ZVE32F-NEXT:    bnez t3, .LBB52_11
5259 ; RV32ZVE32F-NEXT:  .LBB52_5:
5260 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
5261 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
5262 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
5263 ; RV32ZVE32F-NEXT:    bnez t5, .LBB52_12
5264 ; RV32ZVE32F-NEXT:  .LBB52_6:
5265 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
5266 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
5267 ; RV32ZVE32F-NEXT:    j .LBB52_13
5268 ; RV32ZVE32F-NEXT:  .LBB52_7:
5269 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
5270 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
5271 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
5272 ; RV32ZVE32F-NEXT:    beqz a4, .LBB52_2
5273 ; RV32ZVE32F-NEXT:  .LBB52_8: # %cond.load1
5274 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5275 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
5276 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
5277 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
5278 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
5279 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
5280 ; RV32ZVE32F-NEXT:    beqz a6, .LBB52_3
5281 ; RV32ZVE32F-NEXT:  .LBB52_9: # %cond.load4
5282 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5283 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
5284 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
5285 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
5286 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
5287 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
5288 ; RV32ZVE32F-NEXT:    beqz t1, .LBB52_4
5289 ; RV32ZVE32F-NEXT:  .LBB52_10: # %cond.load7
5290 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5291 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
5292 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
5293 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
5294 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
5295 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
5296 ; RV32ZVE32F-NEXT:    beqz t3, .LBB52_5
5297 ; RV32ZVE32F-NEXT:  .LBB52_11: # %cond.load10
5298 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5299 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
5300 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
5301 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
5302 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
5303 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
5304 ; RV32ZVE32F-NEXT:    beqz t5, .LBB52_6
5305 ; RV32ZVE32F-NEXT:  .LBB52_12: # %cond.load13
5306 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5307 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
5308 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
5309 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
5310 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
5311 ; RV32ZVE32F-NEXT:  .LBB52_13: # %else14
5312 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
5313 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
5314 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
5315 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
5316 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
5317 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
5318 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
5319 ; RV32ZVE32F-NEXT:    beqz s0, .LBB52_16
5320 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
5321 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5322 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
5323 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
5324 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
5325 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
5326 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
5327 ; RV32ZVE32F-NEXT:    bnez t0, .LBB52_17
5328 ; RV32ZVE32F-NEXT:  .LBB52_15:
5329 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
5330 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
5331 ; RV32ZVE32F-NEXT:    j .LBB52_18
5332 ; RV32ZVE32F-NEXT:  .LBB52_16:
5333 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
5334 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
5335 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
5336 ; RV32ZVE32F-NEXT:    beqz t0, .LBB52_15
5337 ; RV32ZVE32F-NEXT:  .LBB52_17: # %cond.load19
5338 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5339 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
5340 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
5341 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
5342 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
5343 ; RV32ZVE32F-NEXT:  .LBB52_18: # %else20
5344 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
5345 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
5346 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
5347 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
5348 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
5349 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
5350 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
5351 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
5352 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
5353 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
5354 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
5355 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
5356 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
5357 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
5358 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
5359 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
5360 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
5361 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
5362 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
5363 ; RV32ZVE32F-NEXT:    ret
5365 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8i64:
5366 ; RV64ZVE32F:       # %bb.0:
5367 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
5368 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
5369 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
5370 ; RV64ZVE32F-NEXT:    beqz a3, .LBB52_3
5371 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
5372 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
5373 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
5374 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
5375 ; RV64ZVE32F-NEXT:    add a3, a1, a3
5376 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
5377 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
5378 ; RV64ZVE32F-NEXT:    bnez a4, .LBB52_4
5379 ; RV64ZVE32F-NEXT:  .LBB52_2:
5380 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
5381 ; RV64ZVE32F-NEXT:    j .LBB52_5
5382 ; RV64ZVE32F-NEXT:  .LBB52_3:
5383 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
5384 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
5385 ; RV64ZVE32F-NEXT:    beqz a4, .LBB52_2
5386 ; RV64ZVE32F-NEXT:  .LBB52_4: # %cond.load1
5387 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
5388 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
5389 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v9
5390 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
5391 ; RV64ZVE32F-NEXT:    add a4, a1, a4
5392 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
5393 ; RV64ZVE32F-NEXT:  .LBB52_5: # %else2
5394 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
5395 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
5396 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
5397 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
5398 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
5399 ; RV64ZVE32F-NEXT:    beqz a6, .LBB52_10
5400 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
5401 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v8
5402 ; RV64ZVE32F-NEXT:    slli a6, a6, 3
5403 ; RV64ZVE32F-NEXT:    add a6, a1, a6
5404 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
5405 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
5406 ; RV64ZVE32F-NEXT:    bnez a7, .LBB52_11
5407 ; RV64ZVE32F-NEXT:  .LBB52_7:
5408 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
5409 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
5410 ; RV64ZVE32F-NEXT:    bnez t0, .LBB52_12
5411 ; RV64ZVE32F-NEXT:  .LBB52_8:
5412 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
5413 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
5414 ; RV64ZVE32F-NEXT:    bnez t1, .LBB52_13
5415 ; RV64ZVE32F-NEXT:  .LBB52_9:
5416 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
5417 ; RV64ZVE32F-NEXT:    j .LBB52_14
5418 ; RV64ZVE32F-NEXT:  .LBB52_10:
5419 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
5420 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
5421 ; RV64ZVE32F-NEXT:    beqz a7, .LBB52_7
5422 ; RV64ZVE32F-NEXT:  .LBB52_11: # %cond.load7
5423 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
5424 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
5425 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
5426 ; RV64ZVE32F-NEXT:    add a7, a1, a7
5427 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
5428 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
5429 ; RV64ZVE32F-NEXT:    beqz t0, .LBB52_8
5430 ; RV64ZVE32F-NEXT:  .LBB52_12: # %cond.load10
5431 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v9
5432 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
5433 ; RV64ZVE32F-NEXT:    add t0, a1, t0
5434 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
5435 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
5436 ; RV64ZVE32F-NEXT:    beqz t1, .LBB52_9
5437 ; RV64ZVE32F-NEXT:  .LBB52_13: # %cond.load13
5438 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
5439 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v8
5440 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
5441 ; RV64ZVE32F-NEXT:    add t1, a1, t1
5442 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
5443 ; RV64ZVE32F-NEXT:  .LBB52_14: # %else14
5444 ; RV64ZVE32F-NEXT:    andi t2, a5, 64
5445 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
5446 ; RV64ZVE32F-NEXT:    beqz t2, .LBB52_17
5447 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
5448 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
5449 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
5450 ; RV64ZVE32F-NEXT:    add t2, a1, t2
5451 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
5452 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
5453 ; RV64ZVE32F-NEXT:    bnez a5, .LBB52_18
5454 ; RV64ZVE32F-NEXT:  .LBB52_16:
5455 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
5456 ; RV64ZVE32F-NEXT:    j .LBB52_19
5457 ; RV64ZVE32F-NEXT:  .LBB52_17:
5458 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
5459 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
5460 ; RV64ZVE32F-NEXT:    beqz a5, .LBB52_16
5461 ; RV64ZVE32F-NEXT:  .LBB52_18: # %cond.load19
5462 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
5463 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
5464 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
5465 ; RV64ZVE32F-NEXT:    add a1, a1, a2
5466 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
5467 ; RV64ZVE32F-NEXT:  .LBB52_19: # %else20
5468 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
5469 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
5470 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
5471 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
5472 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
5473 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
5474 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
5475 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
5476 ; RV64ZVE32F-NEXT:    ret
5477   %eidxs = sext <8 x i16> %idxs to <8 x i64>
5478   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i64> %eidxs
5479   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
5480   ret <8 x i64> %v
5483 define <8 x i64> @mgather_baseidx_zext_v8i16_v8i64(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
5484 ; RV32V-LABEL: mgather_baseidx_zext_v8i16_v8i64:
5485 ; RV32V:       # %bb.0:
5486 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5487 ; RV32V-NEXT:    vzext.vf2 v10, v8
5488 ; RV32V-NEXT:    vsll.vi v8, v10, 3
5489 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
5490 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
5491 ; RV32V-NEXT:    vmv.v.v v8, v12
5492 ; RV32V-NEXT:    ret
5494 ; RV64V-LABEL: mgather_baseidx_zext_v8i16_v8i64:
5495 ; RV64V:       # %bb.0:
5496 ; RV64V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5497 ; RV64V-NEXT:    vzext.vf2 v10, v8
5498 ; RV64V-NEXT:    vsll.vi v8, v10, 3
5499 ; RV64V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
5500 ; RV64V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
5501 ; RV64V-NEXT:    vmv.v.v v8, v12
5502 ; RV64V-NEXT:    ret
5504 ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8i64:
5505 ; RV32ZVE32F:       # %bb.0:
5506 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5507 ; RV32ZVE32F-NEXT:    vzext.vf2 v10, v8
5508 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
5509 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
5510 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
5511 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
5512 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5513 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
5514 ; RV32ZVE32F-NEXT:    beqz a3, .LBB53_7
5515 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
5516 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
5517 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
5518 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
5519 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
5520 ; RV32ZVE32F-NEXT:    bnez a4, .LBB53_8
5521 ; RV32ZVE32F-NEXT:  .LBB53_2:
5522 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
5523 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
5524 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
5525 ; RV32ZVE32F-NEXT:    bnez a6, .LBB53_9
5526 ; RV32ZVE32F-NEXT:  .LBB53_3:
5527 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
5528 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
5529 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
5530 ; RV32ZVE32F-NEXT:    bnez t1, .LBB53_10
5531 ; RV32ZVE32F-NEXT:  .LBB53_4:
5532 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
5533 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
5534 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
5535 ; RV32ZVE32F-NEXT:    bnez t3, .LBB53_11
5536 ; RV32ZVE32F-NEXT:  .LBB53_5:
5537 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
5538 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
5539 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
5540 ; RV32ZVE32F-NEXT:    bnez t5, .LBB53_12
5541 ; RV32ZVE32F-NEXT:  .LBB53_6:
5542 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
5543 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
5544 ; RV32ZVE32F-NEXT:    j .LBB53_13
5545 ; RV32ZVE32F-NEXT:  .LBB53_7:
5546 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
5547 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
5548 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
5549 ; RV32ZVE32F-NEXT:    beqz a4, .LBB53_2
5550 ; RV32ZVE32F-NEXT:  .LBB53_8: # %cond.load1
5551 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5552 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
5553 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
5554 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
5555 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
5556 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
5557 ; RV32ZVE32F-NEXT:    beqz a6, .LBB53_3
5558 ; RV32ZVE32F-NEXT:  .LBB53_9: # %cond.load4
5559 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5560 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
5561 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
5562 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
5563 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
5564 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
5565 ; RV32ZVE32F-NEXT:    beqz t1, .LBB53_4
5566 ; RV32ZVE32F-NEXT:  .LBB53_10: # %cond.load7
5567 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5568 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
5569 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
5570 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
5571 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
5572 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
5573 ; RV32ZVE32F-NEXT:    beqz t3, .LBB53_5
5574 ; RV32ZVE32F-NEXT:  .LBB53_11: # %cond.load10
5575 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5576 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
5577 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
5578 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
5579 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
5580 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
5581 ; RV32ZVE32F-NEXT:    beqz t5, .LBB53_6
5582 ; RV32ZVE32F-NEXT:  .LBB53_12: # %cond.load13
5583 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5584 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
5585 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
5586 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
5587 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
5588 ; RV32ZVE32F-NEXT:  .LBB53_13: # %else14
5589 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
5590 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
5591 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
5592 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
5593 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
5594 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
5595 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
5596 ; RV32ZVE32F-NEXT:    beqz s0, .LBB53_16
5597 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
5598 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5599 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
5600 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
5601 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
5602 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
5603 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
5604 ; RV32ZVE32F-NEXT:    bnez t0, .LBB53_17
5605 ; RV32ZVE32F-NEXT:  .LBB53_15:
5606 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
5607 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
5608 ; RV32ZVE32F-NEXT:    j .LBB53_18
5609 ; RV32ZVE32F-NEXT:  .LBB53_16:
5610 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
5611 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
5612 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
5613 ; RV32ZVE32F-NEXT:    beqz t0, .LBB53_15
5614 ; RV32ZVE32F-NEXT:  .LBB53_17: # %cond.load19
5615 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5616 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
5617 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
5618 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
5619 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
5620 ; RV32ZVE32F-NEXT:  .LBB53_18: # %else20
5621 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
5622 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
5623 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
5624 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
5625 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
5626 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
5627 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
5628 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
5629 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
5630 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
5631 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
5632 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
5633 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
5634 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
5635 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
5636 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
5637 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
5638 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
5639 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
5640 ; RV32ZVE32F-NEXT:    ret
5642 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8i64:
5643 ; RV64ZVE32F:       # %bb.0:
5644 ; RV64ZVE32F-NEXT:    lui a5, 16
5645 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
5646 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v0
5647 ; RV64ZVE32F-NEXT:    andi a3, a6, 1
5648 ; RV64ZVE32F-NEXT:    addiw a5, a5, -1
5649 ; RV64ZVE32F-NEXT:    beqz a3, .LBB53_3
5650 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
5651 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
5652 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
5653 ; RV64ZVE32F-NEXT:    and a3, a3, a5
5654 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
5655 ; RV64ZVE32F-NEXT:    add a3, a1, a3
5656 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
5657 ; RV64ZVE32F-NEXT:    andi a4, a6, 2
5658 ; RV64ZVE32F-NEXT:    bnez a4, .LBB53_4
5659 ; RV64ZVE32F-NEXT:  .LBB53_2:
5660 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
5661 ; RV64ZVE32F-NEXT:    j .LBB53_5
5662 ; RV64ZVE32F-NEXT:  .LBB53_3:
5663 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
5664 ; RV64ZVE32F-NEXT:    andi a4, a6, 2
5665 ; RV64ZVE32F-NEXT:    beqz a4, .LBB53_2
5666 ; RV64ZVE32F-NEXT:  .LBB53_4: # %cond.load1
5667 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
5668 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
5669 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v9
5670 ; RV64ZVE32F-NEXT:    and a4, a4, a5
5671 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
5672 ; RV64ZVE32F-NEXT:    add a4, a1, a4
5673 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
5674 ; RV64ZVE32F-NEXT:  .LBB53_5: # %else2
5675 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
5676 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
5677 ; RV64ZVE32F-NEXT:    andi a7, a6, 4
5678 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
5679 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
5680 ; RV64ZVE32F-NEXT:    beqz a7, .LBB53_10
5681 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
5682 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
5683 ; RV64ZVE32F-NEXT:    and a7, a7, a5
5684 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
5685 ; RV64ZVE32F-NEXT:    add a7, a1, a7
5686 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
5687 ; RV64ZVE32F-NEXT:    andi t0, a6, 8
5688 ; RV64ZVE32F-NEXT:    bnez t0, .LBB53_11
5689 ; RV64ZVE32F-NEXT:  .LBB53_7:
5690 ; RV64ZVE32F-NEXT:    ld t0, 24(a2)
5691 ; RV64ZVE32F-NEXT:    andi t1, a6, 16
5692 ; RV64ZVE32F-NEXT:    bnez t1, .LBB53_12
5693 ; RV64ZVE32F-NEXT:  .LBB53_8:
5694 ; RV64ZVE32F-NEXT:    ld t1, 32(a2)
5695 ; RV64ZVE32F-NEXT:    andi t2, a6, 32
5696 ; RV64ZVE32F-NEXT:    bnez t2, .LBB53_13
5697 ; RV64ZVE32F-NEXT:  .LBB53_9:
5698 ; RV64ZVE32F-NEXT:    ld t2, 40(a2)
5699 ; RV64ZVE32F-NEXT:    j .LBB53_14
5700 ; RV64ZVE32F-NEXT:  .LBB53_10:
5701 ; RV64ZVE32F-NEXT:    ld a7, 16(a2)
5702 ; RV64ZVE32F-NEXT:    andi t0, a6, 8
5703 ; RV64ZVE32F-NEXT:    beqz t0, .LBB53_7
5704 ; RV64ZVE32F-NEXT:  .LBB53_11: # %cond.load7
5705 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
5706 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v8
5707 ; RV64ZVE32F-NEXT:    and t0, t0, a5
5708 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
5709 ; RV64ZVE32F-NEXT:    add t0, a1, t0
5710 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
5711 ; RV64ZVE32F-NEXT:    andi t1, a6, 16
5712 ; RV64ZVE32F-NEXT:    beqz t1, .LBB53_8
5713 ; RV64ZVE32F-NEXT:  .LBB53_12: # %cond.load10
5714 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v9
5715 ; RV64ZVE32F-NEXT:    and t1, t1, a5
5716 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
5717 ; RV64ZVE32F-NEXT:    add t1, a1, t1
5718 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
5719 ; RV64ZVE32F-NEXT:    andi t2, a6, 32
5720 ; RV64ZVE32F-NEXT:    beqz t2, .LBB53_9
5721 ; RV64ZVE32F-NEXT:  .LBB53_13: # %cond.load13
5722 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
5723 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
5724 ; RV64ZVE32F-NEXT:    and t2, t2, a5
5725 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
5726 ; RV64ZVE32F-NEXT:    add t2, a1, t2
5727 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
5728 ; RV64ZVE32F-NEXT:  .LBB53_14: # %else14
5729 ; RV64ZVE32F-NEXT:    andi t3, a6, 64
5730 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
5731 ; RV64ZVE32F-NEXT:    beqz t3, .LBB53_17
5732 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
5733 ; RV64ZVE32F-NEXT:    vmv.x.s t3, v8
5734 ; RV64ZVE32F-NEXT:    and t3, t3, a5
5735 ; RV64ZVE32F-NEXT:    slli t3, t3, 3
5736 ; RV64ZVE32F-NEXT:    add t3, a1, t3
5737 ; RV64ZVE32F-NEXT:    ld t3, 0(t3)
5738 ; RV64ZVE32F-NEXT:    andi a6, a6, -128
5739 ; RV64ZVE32F-NEXT:    bnez a6, .LBB53_18
5740 ; RV64ZVE32F-NEXT:  .LBB53_16:
5741 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
5742 ; RV64ZVE32F-NEXT:    j .LBB53_19
5743 ; RV64ZVE32F-NEXT:  .LBB53_17:
5744 ; RV64ZVE32F-NEXT:    ld t3, 48(a2)
5745 ; RV64ZVE32F-NEXT:    andi a6, a6, -128
5746 ; RV64ZVE32F-NEXT:    beqz a6, .LBB53_16
5747 ; RV64ZVE32F-NEXT:  .LBB53_18: # %cond.load19
5748 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
5749 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
5750 ; RV64ZVE32F-NEXT:    and a2, a2, a5
5751 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
5752 ; RV64ZVE32F-NEXT:    add a1, a1, a2
5753 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
5754 ; RV64ZVE32F-NEXT:  .LBB53_19: # %else20
5755 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
5756 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
5757 ; RV64ZVE32F-NEXT:    sd a7, 16(a0)
5758 ; RV64ZVE32F-NEXT:    sd t0, 24(a0)
5759 ; RV64ZVE32F-NEXT:    sd t1, 32(a0)
5760 ; RV64ZVE32F-NEXT:    sd t2, 40(a0)
5761 ; RV64ZVE32F-NEXT:    sd t3, 48(a0)
5762 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
5763 ; RV64ZVE32F-NEXT:    ret
5764   %eidxs = zext <8 x i16> %idxs to <8 x i64>
5765   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i64> %eidxs
5766   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
5767   ret <8 x i64> %v
5770 define <8 x i64> @mgather_baseidx_v8i32_v8i64(ptr %base, <8 x i32> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
5771 ; RV32V-LABEL: mgather_baseidx_v8i32_v8i64:
5772 ; RV32V:       # %bb.0:
5773 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5774 ; RV32V-NEXT:    vsll.vi v8, v8, 3
5775 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
5776 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
5777 ; RV32V-NEXT:    vmv.v.v v8, v12
5778 ; RV32V-NEXT:    ret
5780 ; RV64V-LABEL: mgather_baseidx_v8i32_v8i64:
5781 ; RV64V:       # %bb.0:
5782 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
5783 ; RV64V-NEXT:    vsext.vf2 v16, v8
5784 ; RV64V-NEXT:    vsll.vi v8, v16, 3
5785 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
5786 ; RV64V-NEXT:    vmv.v.v v8, v12
5787 ; RV64V-NEXT:    ret
5789 ; RV32ZVE32F-LABEL: mgather_baseidx_v8i32_v8i64:
5790 ; RV32ZVE32F:       # %bb.0:
5791 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
5792 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 3
5793 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
5794 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
5795 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
5796 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
5797 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
5798 ; RV32ZVE32F-NEXT:    beqz a3, .LBB54_7
5799 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
5800 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
5801 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
5802 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
5803 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
5804 ; RV32ZVE32F-NEXT:    bnez a4, .LBB54_8
5805 ; RV32ZVE32F-NEXT:  .LBB54_2:
5806 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
5807 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
5808 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
5809 ; RV32ZVE32F-NEXT:    bnez a6, .LBB54_9
5810 ; RV32ZVE32F-NEXT:  .LBB54_3:
5811 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
5812 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
5813 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
5814 ; RV32ZVE32F-NEXT:    bnez t1, .LBB54_10
5815 ; RV32ZVE32F-NEXT:  .LBB54_4:
5816 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
5817 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
5818 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
5819 ; RV32ZVE32F-NEXT:    bnez t3, .LBB54_11
5820 ; RV32ZVE32F-NEXT:  .LBB54_5:
5821 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
5822 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
5823 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
5824 ; RV32ZVE32F-NEXT:    bnez t5, .LBB54_12
5825 ; RV32ZVE32F-NEXT:  .LBB54_6:
5826 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
5827 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
5828 ; RV32ZVE32F-NEXT:    j .LBB54_13
5829 ; RV32ZVE32F-NEXT:  .LBB54_7:
5830 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
5831 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
5832 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
5833 ; RV32ZVE32F-NEXT:    beqz a4, .LBB54_2
5834 ; RV32ZVE32F-NEXT:  .LBB54_8: # %cond.load1
5835 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5836 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
5837 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
5838 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
5839 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
5840 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
5841 ; RV32ZVE32F-NEXT:    beqz a6, .LBB54_3
5842 ; RV32ZVE32F-NEXT:  .LBB54_9: # %cond.load4
5843 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5844 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
5845 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
5846 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
5847 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
5848 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
5849 ; RV32ZVE32F-NEXT:    beqz t1, .LBB54_4
5850 ; RV32ZVE32F-NEXT:  .LBB54_10: # %cond.load7
5851 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5852 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
5853 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
5854 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
5855 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
5856 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
5857 ; RV32ZVE32F-NEXT:    beqz t3, .LBB54_5
5858 ; RV32ZVE32F-NEXT:  .LBB54_11: # %cond.load10
5859 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5860 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
5861 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
5862 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
5863 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
5864 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
5865 ; RV32ZVE32F-NEXT:    beqz t5, .LBB54_6
5866 ; RV32ZVE32F-NEXT:  .LBB54_12: # %cond.load13
5867 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5868 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
5869 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
5870 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
5871 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
5872 ; RV32ZVE32F-NEXT:  .LBB54_13: # %else14
5873 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
5874 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
5875 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
5876 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
5877 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
5878 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
5879 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
5880 ; RV32ZVE32F-NEXT:    beqz s0, .LBB54_16
5881 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
5882 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5883 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
5884 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
5885 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
5886 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
5887 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
5888 ; RV32ZVE32F-NEXT:    bnez t0, .LBB54_17
5889 ; RV32ZVE32F-NEXT:  .LBB54_15:
5890 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
5891 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
5892 ; RV32ZVE32F-NEXT:    j .LBB54_18
5893 ; RV32ZVE32F-NEXT:  .LBB54_16:
5894 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
5895 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
5896 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
5897 ; RV32ZVE32F-NEXT:    beqz t0, .LBB54_15
5898 ; RV32ZVE32F-NEXT:  .LBB54_17: # %cond.load19
5899 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
5900 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
5901 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
5902 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
5903 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
5904 ; RV32ZVE32F-NEXT:  .LBB54_18: # %else20
5905 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
5906 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
5907 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
5908 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
5909 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
5910 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
5911 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
5912 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
5913 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
5914 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
5915 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
5916 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
5917 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
5918 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
5919 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
5920 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
5921 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
5922 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
5923 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
5924 ; RV32ZVE32F-NEXT:    ret
5926 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i32_v8i64:
5927 ; RV64ZVE32F:       # %bb.0:
5928 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
5929 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
5930 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
5931 ; RV64ZVE32F-NEXT:    beqz a3, .LBB54_3
5932 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
5933 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
5934 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
5935 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
5936 ; RV64ZVE32F-NEXT:    add a3, a1, a3
5937 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
5938 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
5939 ; RV64ZVE32F-NEXT:    bnez a4, .LBB54_4
5940 ; RV64ZVE32F-NEXT:  .LBB54_2:
5941 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
5942 ; RV64ZVE32F-NEXT:    j .LBB54_5
5943 ; RV64ZVE32F-NEXT:  .LBB54_3:
5944 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
5945 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
5946 ; RV64ZVE32F-NEXT:    beqz a4, .LBB54_2
5947 ; RV64ZVE32F-NEXT:  .LBB54_4: # %cond.load1
5948 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
5949 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
5950 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v10
5951 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
5952 ; RV64ZVE32F-NEXT:    add a4, a1, a4
5953 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
5954 ; RV64ZVE32F-NEXT:  .LBB54_5: # %else2
5955 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
5956 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
5957 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
5958 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
5959 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
5960 ; RV64ZVE32F-NEXT:    beqz a6, .LBB54_10
5961 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
5962 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v8
5963 ; RV64ZVE32F-NEXT:    slli a6, a6, 3
5964 ; RV64ZVE32F-NEXT:    add a6, a1, a6
5965 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
5966 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
5967 ; RV64ZVE32F-NEXT:    bnez a7, .LBB54_11
5968 ; RV64ZVE32F-NEXT:  .LBB54_7:
5969 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
5970 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
5971 ; RV64ZVE32F-NEXT:    bnez t0, .LBB54_12
5972 ; RV64ZVE32F-NEXT:  .LBB54_8:
5973 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
5974 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
5975 ; RV64ZVE32F-NEXT:    bnez t1, .LBB54_13
5976 ; RV64ZVE32F-NEXT:  .LBB54_9:
5977 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
5978 ; RV64ZVE32F-NEXT:    j .LBB54_14
5979 ; RV64ZVE32F-NEXT:  .LBB54_10:
5980 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
5981 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
5982 ; RV64ZVE32F-NEXT:    beqz a7, .LBB54_7
5983 ; RV64ZVE32F-NEXT:  .LBB54_11: # %cond.load7
5984 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
5985 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
5986 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
5987 ; RV64ZVE32F-NEXT:    add a7, a1, a7
5988 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
5989 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
5990 ; RV64ZVE32F-NEXT:    beqz t0, .LBB54_8
5991 ; RV64ZVE32F-NEXT:  .LBB54_12: # %cond.load10
5992 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v10
5993 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
5994 ; RV64ZVE32F-NEXT:    add t0, a1, t0
5995 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
5996 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
5997 ; RV64ZVE32F-NEXT:    beqz t1, .LBB54_9
5998 ; RV64ZVE32F-NEXT:  .LBB54_13: # %cond.load13
5999 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
6000 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v8
6001 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
6002 ; RV64ZVE32F-NEXT:    add t1, a1, t1
6003 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
6004 ; RV64ZVE32F-NEXT:  .LBB54_14: # %else14
6005 ; RV64ZVE32F-NEXT:    andi t2, a5, 64
6006 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
6007 ; RV64ZVE32F-NEXT:    beqz t2, .LBB54_17
6008 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
6009 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
6010 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
6011 ; RV64ZVE32F-NEXT:    add t2, a1, t2
6012 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
6013 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
6014 ; RV64ZVE32F-NEXT:    bnez a5, .LBB54_18
6015 ; RV64ZVE32F-NEXT:  .LBB54_16:
6016 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
6017 ; RV64ZVE32F-NEXT:    j .LBB54_19
6018 ; RV64ZVE32F-NEXT:  .LBB54_17:
6019 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
6020 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
6021 ; RV64ZVE32F-NEXT:    beqz a5, .LBB54_16
6022 ; RV64ZVE32F-NEXT:  .LBB54_18: # %cond.load19
6023 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
6024 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
6025 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
6026 ; RV64ZVE32F-NEXT:    add a1, a1, a2
6027 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
6028 ; RV64ZVE32F-NEXT:  .LBB54_19: # %else20
6029 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
6030 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
6031 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
6032 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
6033 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
6034 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
6035 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
6036 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
6037 ; RV64ZVE32F-NEXT:    ret
6038   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i32> %idxs
6039   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
6040   ret <8 x i64> %v
6043 define <8 x i64> @mgather_baseidx_sext_v8i32_v8i64(ptr %base, <8 x i32> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
6044 ; RV32V-LABEL: mgather_baseidx_sext_v8i32_v8i64:
6045 ; RV32V:       # %bb.0:
6046 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6047 ; RV32V-NEXT:    vsll.vi v8, v8, 3
6048 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
6049 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
6050 ; RV32V-NEXT:    vmv.v.v v8, v12
6051 ; RV32V-NEXT:    ret
6053 ; RV64V-LABEL: mgather_baseidx_sext_v8i32_v8i64:
6054 ; RV64V:       # %bb.0:
6055 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
6056 ; RV64V-NEXT:    vsext.vf2 v16, v8
6057 ; RV64V-NEXT:    vsll.vi v8, v16, 3
6058 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
6059 ; RV64V-NEXT:    vmv.v.v v8, v12
6060 ; RV64V-NEXT:    ret
6062 ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i32_v8i64:
6063 ; RV32ZVE32F:       # %bb.0:
6064 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6065 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 3
6066 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
6067 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
6068 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
6069 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6070 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
6071 ; RV32ZVE32F-NEXT:    beqz a3, .LBB55_7
6072 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
6073 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
6074 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
6075 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
6076 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
6077 ; RV32ZVE32F-NEXT:    bnez a4, .LBB55_8
6078 ; RV32ZVE32F-NEXT:  .LBB55_2:
6079 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
6080 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
6081 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
6082 ; RV32ZVE32F-NEXT:    bnez a6, .LBB55_9
6083 ; RV32ZVE32F-NEXT:  .LBB55_3:
6084 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
6085 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
6086 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
6087 ; RV32ZVE32F-NEXT:    bnez t1, .LBB55_10
6088 ; RV32ZVE32F-NEXT:  .LBB55_4:
6089 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
6090 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
6091 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
6092 ; RV32ZVE32F-NEXT:    bnez t3, .LBB55_11
6093 ; RV32ZVE32F-NEXT:  .LBB55_5:
6094 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
6095 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
6096 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
6097 ; RV32ZVE32F-NEXT:    bnez t5, .LBB55_12
6098 ; RV32ZVE32F-NEXT:  .LBB55_6:
6099 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
6100 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
6101 ; RV32ZVE32F-NEXT:    j .LBB55_13
6102 ; RV32ZVE32F-NEXT:  .LBB55_7:
6103 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
6104 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
6105 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
6106 ; RV32ZVE32F-NEXT:    beqz a4, .LBB55_2
6107 ; RV32ZVE32F-NEXT:  .LBB55_8: # %cond.load1
6108 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6109 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
6110 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
6111 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
6112 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
6113 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
6114 ; RV32ZVE32F-NEXT:    beqz a6, .LBB55_3
6115 ; RV32ZVE32F-NEXT:  .LBB55_9: # %cond.load4
6116 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6117 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
6118 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
6119 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
6120 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
6121 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
6122 ; RV32ZVE32F-NEXT:    beqz t1, .LBB55_4
6123 ; RV32ZVE32F-NEXT:  .LBB55_10: # %cond.load7
6124 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6125 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
6126 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
6127 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
6128 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
6129 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
6130 ; RV32ZVE32F-NEXT:    beqz t3, .LBB55_5
6131 ; RV32ZVE32F-NEXT:  .LBB55_11: # %cond.load10
6132 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6133 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
6134 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
6135 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
6136 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
6137 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
6138 ; RV32ZVE32F-NEXT:    beqz t5, .LBB55_6
6139 ; RV32ZVE32F-NEXT:  .LBB55_12: # %cond.load13
6140 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6141 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
6142 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
6143 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
6144 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
6145 ; RV32ZVE32F-NEXT:  .LBB55_13: # %else14
6146 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
6147 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
6148 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
6149 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
6150 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
6151 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
6152 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
6153 ; RV32ZVE32F-NEXT:    beqz s0, .LBB55_16
6154 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
6155 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6156 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
6157 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
6158 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
6159 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
6160 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
6161 ; RV32ZVE32F-NEXT:    bnez t0, .LBB55_17
6162 ; RV32ZVE32F-NEXT:  .LBB55_15:
6163 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
6164 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
6165 ; RV32ZVE32F-NEXT:    j .LBB55_18
6166 ; RV32ZVE32F-NEXT:  .LBB55_16:
6167 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
6168 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
6169 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
6170 ; RV32ZVE32F-NEXT:    beqz t0, .LBB55_15
6171 ; RV32ZVE32F-NEXT:  .LBB55_17: # %cond.load19
6172 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6173 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
6174 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
6175 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
6176 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
6177 ; RV32ZVE32F-NEXT:  .LBB55_18: # %else20
6178 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
6179 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
6180 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
6181 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
6182 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
6183 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
6184 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
6185 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
6186 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
6187 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
6188 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
6189 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
6190 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
6191 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
6192 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
6193 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
6194 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
6195 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
6196 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
6197 ; RV32ZVE32F-NEXT:    ret
6199 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i32_v8i64:
6200 ; RV64ZVE32F:       # %bb.0:
6201 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
6202 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
6203 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
6204 ; RV64ZVE32F-NEXT:    beqz a3, .LBB55_3
6205 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
6206 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6207 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
6208 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
6209 ; RV64ZVE32F-NEXT:    add a3, a1, a3
6210 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
6211 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
6212 ; RV64ZVE32F-NEXT:    bnez a4, .LBB55_4
6213 ; RV64ZVE32F-NEXT:  .LBB55_2:
6214 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
6215 ; RV64ZVE32F-NEXT:    j .LBB55_5
6216 ; RV64ZVE32F-NEXT:  .LBB55_3:
6217 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
6218 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
6219 ; RV64ZVE32F-NEXT:    beqz a4, .LBB55_2
6220 ; RV64ZVE32F-NEXT:  .LBB55_4: # %cond.load1
6221 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6222 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
6223 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v10
6224 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
6225 ; RV64ZVE32F-NEXT:    add a4, a1, a4
6226 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
6227 ; RV64ZVE32F-NEXT:  .LBB55_5: # %else2
6228 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
6229 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
6230 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
6231 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
6232 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
6233 ; RV64ZVE32F-NEXT:    beqz a6, .LBB55_10
6234 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
6235 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v8
6236 ; RV64ZVE32F-NEXT:    slli a6, a6, 3
6237 ; RV64ZVE32F-NEXT:    add a6, a1, a6
6238 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
6239 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
6240 ; RV64ZVE32F-NEXT:    bnez a7, .LBB55_11
6241 ; RV64ZVE32F-NEXT:  .LBB55_7:
6242 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
6243 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
6244 ; RV64ZVE32F-NEXT:    bnez t0, .LBB55_12
6245 ; RV64ZVE32F-NEXT:  .LBB55_8:
6246 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
6247 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
6248 ; RV64ZVE32F-NEXT:    bnez t1, .LBB55_13
6249 ; RV64ZVE32F-NEXT:  .LBB55_9:
6250 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
6251 ; RV64ZVE32F-NEXT:    j .LBB55_14
6252 ; RV64ZVE32F-NEXT:  .LBB55_10:
6253 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
6254 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
6255 ; RV64ZVE32F-NEXT:    beqz a7, .LBB55_7
6256 ; RV64ZVE32F-NEXT:  .LBB55_11: # %cond.load7
6257 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
6258 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
6259 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
6260 ; RV64ZVE32F-NEXT:    add a7, a1, a7
6261 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
6262 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
6263 ; RV64ZVE32F-NEXT:    beqz t0, .LBB55_8
6264 ; RV64ZVE32F-NEXT:  .LBB55_12: # %cond.load10
6265 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v10
6266 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
6267 ; RV64ZVE32F-NEXT:    add t0, a1, t0
6268 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
6269 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
6270 ; RV64ZVE32F-NEXT:    beqz t1, .LBB55_9
6271 ; RV64ZVE32F-NEXT:  .LBB55_13: # %cond.load13
6272 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
6273 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v8
6274 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
6275 ; RV64ZVE32F-NEXT:    add t1, a1, t1
6276 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
6277 ; RV64ZVE32F-NEXT:  .LBB55_14: # %else14
6278 ; RV64ZVE32F-NEXT:    andi t2, a5, 64
6279 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
6280 ; RV64ZVE32F-NEXT:    beqz t2, .LBB55_17
6281 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
6282 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
6283 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
6284 ; RV64ZVE32F-NEXT:    add t2, a1, t2
6285 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
6286 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
6287 ; RV64ZVE32F-NEXT:    bnez a5, .LBB55_18
6288 ; RV64ZVE32F-NEXT:  .LBB55_16:
6289 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
6290 ; RV64ZVE32F-NEXT:    j .LBB55_19
6291 ; RV64ZVE32F-NEXT:  .LBB55_17:
6292 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
6293 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
6294 ; RV64ZVE32F-NEXT:    beqz a5, .LBB55_16
6295 ; RV64ZVE32F-NEXT:  .LBB55_18: # %cond.load19
6296 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
6297 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
6298 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
6299 ; RV64ZVE32F-NEXT:    add a1, a1, a2
6300 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
6301 ; RV64ZVE32F-NEXT:  .LBB55_19: # %else20
6302 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
6303 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
6304 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
6305 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
6306 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
6307 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
6308 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
6309 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
6310 ; RV64ZVE32F-NEXT:    ret
6311   %eidxs = sext <8 x i32> %idxs to <8 x i64>
6312   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i64> %eidxs
6313   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
6314   ret <8 x i64> %v
6317 define <8 x i64> @mgather_baseidx_zext_v8i32_v8i64(ptr %base, <8 x i32> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
6318 ; RV32V-LABEL: mgather_baseidx_zext_v8i32_v8i64:
6319 ; RV32V:       # %bb.0:
6320 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6321 ; RV32V-NEXT:    vsll.vi v8, v8, 3
6322 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
6323 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
6324 ; RV32V-NEXT:    vmv.v.v v8, v12
6325 ; RV32V-NEXT:    ret
6327 ; RV64V-LABEL: mgather_baseidx_zext_v8i32_v8i64:
6328 ; RV64V:       # %bb.0:
6329 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
6330 ; RV64V-NEXT:    vzext.vf2 v16, v8
6331 ; RV64V-NEXT:    vsll.vi v8, v16, 3
6332 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
6333 ; RV64V-NEXT:    vmv.v.v v8, v12
6334 ; RV64V-NEXT:    ret
6336 ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i32_v8i64:
6337 ; RV32ZVE32F:       # %bb.0:
6338 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6339 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 3
6340 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
6341 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
6342 ; RV32ZVE32F-NEXT:    andi a3, t0, 1
6343 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6344 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
6345 ; RV32ZVE32F-NEXT:    beqz a3, .LBB56_7
6346 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
6347 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
6348 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
6349 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
6350 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
6351 ; RV32ZVE32F-NEXT:    bnez a4, .LBB56_8
6352 ; RV32ZVE32F-NEXT:  .LBB56_2:
6353 ; RV32ZVE32F-NEXT:    lw a4, 12(a2)
6354 ; RV32ZVE32F-NEXT:    lw a5, 8(a2)
6355 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
6356 ; RV32ZVE32F-NEXT:    bnez a6, .LBB56_9
6357 ; RV32ZVE32F-NEXT:  .LBB56_3:
6358 ; RV32ZVE32F-NEXT:    lw a6, 20(a2)
6359 ; RV32ZVE32F-NEXT:    lw a7, 16(a2)
6360 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
6361 ; RV32ZVE32F-NEXT:    bnez t1, .LBB56_10
6362 ; RV32ZVE32F-NEXT:  .LBB56_4:
6363 ; RV32ZVE32F-NEXT:    lw t1, 28(a2)
6364 ; RV32ZVE32F-NEXT:    lw t2, 24(a2)
6365 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
6366 ; RV32ZVE32F-NEXT:    bnez t3, .LBB56_11
6367 ; RV32ZVE32F-NEXT:  .LBB56_5:
6368 ; RV32ZVE32F-NEXT:    lw t3, 36(a2)
6369 ; RV32ZVE32F-NEXT:    lw t4, 32(a2)
6370 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
6371 ; RV32ZVE32F-NEXT:    bnez t5, .LBB56_12
6372 ; RV32ZVE32F-NEXT:  .LBB56_6:
6373 ; RV32ZVE32F-NEXT:    lw t5, 44(a2)
6374 ; RV32ZVE32F-NEXT:    lw t6, 40(a2)
6375 ; RV32ZVE32F-NEXT:    j .LBB56_13
6376 ; RV32ZVE32F-NEXT:  .LBB56_7:
6377 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
6378 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
6379 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
6380 ; RV32ZVE32F-NEXT:    beqz a4, .LBB56_2
6381 ; RV32ZVE32F-NEXT:  .LBB56_8: # %cond.load1
6382 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6383 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
6384 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
6385 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
6386 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
6387 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
6388 ; RV32ZVE32F-NEXT:    beqz a6, .LBB56_3
6389 ; RV32ZVE32F-NEXT:  .LBB56_9: # %cond.load4
6390 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6391 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
6392 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
6393 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
6394 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
6395 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
6396 ; RV32ZVE32F-NEXT:    beqz t1, .LBB56_4
6397 ; RV32ZVE32F-NEXT:  .LBB56_10: # %cond.load7
6398 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6399 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
6400 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
6401 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
6402 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
6403 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
6404 ; RV32ZVE32F-NEXT:    beqz t3, .LBB56_5
6405 ; RV32ZVE32F-NEXT:  .LBB56_11: # %cond.load10
6406 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6407 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
6408 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
6409 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
6410 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
6411 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
6412 ; RV32ZVE32F-NEXT:    beqz t5, .LBB56_6
6413 ; RV32ZVE32F-NEXT:  .LBB56_12: # %cond.load13
6414 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6415 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
6416 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
6417 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
6418 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
6419 ; RV32ZVE32F-NEXT:  .LBB56_13: # %else14
6420 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
6421 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
6422 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
6423 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
6424 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
6425 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
6426 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
6427 ; RV32ZVE32F-NEXT:    beqz s0, .LBB56_16
6428 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
6429 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6430 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
6431 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
6432 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
6433 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
6434 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
6435 ; RV32ZVE32F-NEXT:    bnez t0, .LBB56_17
6436 ; RV32ZVE32F-NEXT:  .LBB56_15:
6437 ; RV32ZVE32F-NEXT:    lw t0, 60(a2)
6438 ; RV32ZVE32F-NEXT:    lw a2, 56(a2)
6439 ; RV32ZVE32F-NEXT:    j .LBB56_18
6440 ; RV32ZVE32F-NEXT:  .LBB56_16:
6441 ; RV32ZVE32F-NEXT:    lw s0, 52(a2)
6442 ; RV32ZVE32F-NEXT:    lw s1, 48(a2)
6443 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
6444 ; RV32ZVE32F-NEXT:    beqz t0, .LBB56_15
6445 ; RV32ZVE32F-NEXT:  .LBB56_17: # %cond.load19
6446 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6447 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
6448 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
6449 ; RV32ZVE32F-NEXT:    lw t0, 4(a2)
6450 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
6451 ; RV32ZVE32F-NEXT:  .LBB56_18: # %else20
6452 ; RV32ZVE32F-NEXT:    sw a3, 0(a0)
6453 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
6454 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
6455 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
6456 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
6457 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
6458 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
6459 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
6460 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
6461 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
6462 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
6463 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
6464 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
6465 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
6466 ; RV32ZVE32F-NEXT:    sw a2, 56(a0)
6467 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
6468 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
6469 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
6470 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
6471 ; RV32ZVE32F-NEXT:    ret
6473 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i32_v8i64:
6474 ; RV64ZVE32F:       # %bb.0:
6475 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
6476 ; RV64ZVE32F-NEXT:    vmv.x.s a5, v0
6477 ; RV64ZVE32F-NEXT:    andi a3, a5, 1
6478 ; RV64ZVE32F-NEXT:    beqz a3, .LBB56_3
6479 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
6480 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
6481 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
6482 ; RV64ZVE32F-NEXT:    slli a3, a3, 32
6483 ; RV64ZVE32F-NEXT:    srli a3, a3, 29
6484 ; RV64ZVE32F-NEXT:    add a3, a1, a3
6485 ; RV64ZVE32F-NEXT:    ld a3, 0(a3)
6486 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
6487 ; RV64ZVE32F-NEXT:    bnez a4, .LBB56_4
6488 ; RV64ZVE32F-NEXT:  .LBB56_2:
6489 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
6490 ; RV64ZVE32F-NEXT:    j .LBB56_5
6491 ; RV64ZVE32F-NEXT:  .LBB56_3:
6492 ; RV64ZVE32F-NEXT:    ld a3, 0(a2)
6493 ; RV64ZVE32F-NEXT:    andi a4, a5, 2
6494 ; RV64ZVE32F-NEXT:    beqz a4, .LBB56_2
6495 ; RV64ZVE32F-NEXT:  .LBB56_4: # %cond.load1
6496 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6497 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
6498 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v10
6499 ; RV64ZVE32F-NEXT:    slli a4, a4, 32
6500 ; RV64ZVE32F-NEXT:    srli a4, a4, 29
6501 ; RV64ZVE32F-NEXT:    add a4, a1, a4
6502 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
6503 ; RV64ZVE32F-NEXT:  .LBB56_5: # %else2
6504 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
6505 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
6506 ; RV64ZVE32F-NEXT:    andi a6, a5, 4
6507 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
6508 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
6509 ; RV64ZVE32F-NEXT:    beqz a6, .LBB56_10
6510 ; RV64ZVE32F-NEXT:  # %bb.6: # %cond.load4
6511 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v8
6512 ; RV64ZVE32F-NEXT:    slli a6, a6, 32
6513 ; RV64ZVE32F-NEXT:    srli a6, a6, 29
6514 ; RV64ZVE32F-NEXT:    add a6, a1, a6
6515 ; RV64ZVE32F-NEXT:    ld a6, 0(a6)
6516 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
6517 ; RV64ZVE32F-NEXT:    bnez a7, .LBB56_11
6518 ; RV64ZVE32F-NEXT:  .LBB56_7:
6519 ; RV64ZVE32F-NEXT:    ld a7, 24(a2)
6520 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
6521 ; RV64ZVE32F-NEXT:    bnez t0, .LBB56_12
6522 ; RV64ZVE32F-NEXT:  .LBB56_8:
6523 ; RV64ZVE32F-NEXT:    ld t0, 32(a2)
6524 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
6525 ; RV64ZVE32F-NEXT:    bnez t1, .LBB56_13
6526 ; RV64ZVE32F-NEXT:  .LBB56_9:
6527 ; RV64ZVE32F-NEXT:    ld t1, 40(a2)
6528 ; RV64ZVE32F-NEXT:    j .LBB56_14
6529 ; RV64ZVE32F-NEXT:  .LBB56_10:
6530 ; RV64ZVE32F-NEXT:    ld a6, 16(a2)
6531 ; RV64ZVE32F-NEXT:    andi a7, a5, 8
6532 ; RV64ZVE32F-NEXT:    beqz a7, .LBB56_7
6533 ; RV64ZVE32F-NEXT:  .LBB56_11: # %cond.load7
6534 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
6535 ; RV64ZVE32F-NEXT:    vmv.x.s a7, v8
6536 ; RV64ZVE32F-NEXT:    slli a7, a7, 32
6537 ; RV64ZVE32F-NEXT:    srli a7, a7, 29
6538 ; RV64ZVE32F-NEXT:    add a7, a1, a7
6539 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
6540 ; RV64ZVE32F-NEXT:    andi t0, a5, 16
6541 ; RV64ZVE32F-NEXT:    beqz t0, .LBB56_8
6542 ; RV64ZVE32F-NEXT:  .LBB56_12: # %cond.load10
6543 ; RV64ZVE32F-NEXT:    vmv.x.s t0, v10
6544 ; RV64ZVE32F-NEXT:    slli t0, t0, 32
6545 ; RV64ZVE32F-NEXT:    srli t0, t0, 29
6546 ; RV64ZVE32F-NEXT:    add t0, a1, t0
6547 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
6548 ; RV64ZVE32F-NEXT:    andi t1, a5, 32
6549 ; RV64ZVE32F-NEXT:    beqz t1, .LBB56_9
6550 ; RV64ZVE32F-NEXT:  .LBB56_13: # %cond.load13
6551 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
6552 ; RV64ZVE32F-NEXT:    vmv.x.s t1, v8
6553 ; RV64ZVE32F-NEXT:    slli t1, t1, 32
6554 ; RV64ZVE32F-NEXT:    srli t1, t1, 29
6555 ; RV64ZVE32F-NEXT:    add t1, a1, t1
6556 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
6557 ; RV64ZVE32F-NEXT:  .LBB56_14: # %else14
6558 ; RV64ZVE32F-NEXT:    andi t2, a5, 64
6559 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
6560 ; RV64ZVE32F-NEXT:    beqz t2, .LBB56_17
6561 ; RV64ZVE32F-NEXT:  # %bb.15: # %cond.load16
6562 ; RV64ZVE32F-NEXT:    vmv.x.s t2, v8
6563 ; RV64ZVE32F-NEXT:    slli t2, t2, 32
6564 ; RV64ZVE32F-NEXT:    srli t2, t2, 29
6565 ; RV64ZVE32F-NEXT:    add t2, a1, t2
6566 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
6567 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
6568 ; RV64ZVE32F-NEXT:    bnez a5, .LBB56_18
6569 ; RV64ZVE32F-NEXT:  .LBB56_16:
6570 ; RV64ZVE32F-NEXT:    ld a1, 56(a2)
6571 ; RV64ZVE32F-NEXT:    j .LBB56_19
6572 ; RV64ZVE32F-NEXT:  .LBB56_17:
6573 ; RV64ZVE32F-NEXT:    ld t2, 48(a2)
6574 ; RV64ZVE32F-NEXT:    andi a5, a5, -128
6575 ; RV64ZVE32F-NEXT:    beqz a5, .LBB56_16
6576 ; RV64ZVE32F-NEXT:  .LBB56_18: # %cond.load19
6577 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
6578 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
6579 ; RV64ZVE32F-NEXT:    slli a2, a2, 32
6580 ; RV64ZVE32F-NEXT:    srli a2, a2, 29
6581 ; RV64ZVE32F-NEXT:    add a1, a1, a2
6582 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
6583 ; RV64ZVE32F-NEXT:  .LBB56_19: # %else20
6584 ; RV64ZVE32F-NEXT:    sd a3, 0(a0)
6585 ; RV64ZVE32F-NEXT:    sd a4, 8(a0)
6586 ; RV64ZVE32F-NEXT:    sd a6, 16(a0)
6587 ; RV64ZVE32F-NEXT:    sd a7, 24(a0)
6588 ; RV64ZVE32F-NEXT:    sd t0, 32(a0)
6589 ; RV64ZVE32F-NEXT:    sd t1, 40(a0)
6590 ; RV64ZVE32F-NEXT:    sd t2, 48(a0)
6591 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
6592 ; RV64ZVE32F-NEXT:    ret
6593   %eidxs = zext <8 x i32> %idxs to <8 x i64>
6594   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i64> %eidxs
6595   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
6596   ret <8 x i64> %v
6599 define <8 x i64> @mgather_baseidx_v8i64(ptr %base, <8 x i64> %idxs, <8 x i1> %m, <8 x i64> %passthru) {
6600 ; RV32V-LABEL: mgather_baseidx_v8i64:
6601 ; RV32V:       # %bb.0:
6602 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6603 ; RV32V-NEXT:    vnsrl.wi v16, v8, 0
6604 ; RV32V-NEXT:    vsll.vi v8, v16, 3
6605 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
6606 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
6607 ; RV32V-NEXT:    vmv.v.v v8, v12
6608 ; RV32V-NEXT:    ret
6610 ; RV64V-LABEL: mgather_baseidx_v8i64:
6611 ; RV64V:       # %bb.0:
6612 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
6613 ; RV64V-NEXT:    vsll.vi v8, v8, 3
6614 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
6615 ; RV64V-NEXT:    vmv.v.v v8, v12
6616 ; RV64V-NEXT:    ret
6618 ; RV32ZVE32F-LABEL: mgather_baseidx_v8i64:
6619 ; RV32ZVE32F:       # %bb.0:
6620 ; RV32ZVE32F-NEXT:    lw a4, 56(a2)
6621 ; RV32ZVE32F-NEXT:    lw a5, 48(a2)
6622 ; RV32ZVE32F-NEXT:    lw a6, 40(a2)
6623 ; RV32ZVE32F-NEXT:    lw a7, 32(a2)
6624 ; RV32ZVE32F-NEXT:    lw t0, 0(a2)
6625 ; RV32ZVE32F-NEXT:    lw t1, 8(a2)
6626 ; RV32ZVE32F-NEXT:    lw t2, 16(a2)
6627 ; RV32ZVE32F-NEXT:    lw a2, 24(a2)
6628 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
6629 ; RV32ZVE32F-NEXT:    vmv.v.x v8, t0
6630 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, t1
6631 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, t2
6632 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
6633 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
6634 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
6635 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a5
6636 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a4
6637 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 3
6638 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
6639 ; RV32ZVE32F-NEXT:    vmv.x.s t0, v0
6640 ; RV32ZVE32F-NEXT:    andi a2, t0, 1
6641 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
6642 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
6643 ; RV32ZVE32F-NEXT:    beqz a2, .LBB57_7
6644 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
6645 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
6646 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
6647 ; RV32ZVE32F-NEXT:    lw a2, 0(a2)
6648 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
6649 ; RV32ZVE32F-NEXT:    bnez a4, .LBB57_8
6650 ; RV32ZVE32F-NEXT:  .LBB57_2:
6651 ; RV32ZVE32F-NEXT:    lw a4, 12(a3)
6652 ; RV32ZVE32F-NEXT:    lw a5, 8(a3)
6653 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
6654 ; RV32ZVE32F-NEXT:    bnez a6, .LBB57_9
6655 ; RV32ZVE32F-NEXT:  .LBB57_3:
6656 ; RV32ZVE32F-NEXT:    lw a6, 20(a3)
6657 ; RV32ZVE32F-NEXT:    lw a7, 16(a3)
6658 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
6659 ; RV32ZVE32F-NEXT:    bnez t1, .LBB57_10
6660 ; RV32ZVE32F-NEXT:  .LBB57_4:
6661 ; RV32ZVE32F-NEXT:    lw t1, 28(a3)
6662 ; RV32ZVE32F-NEXT:    lw t2, 24(a3)
6663 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
6664 ; RV32ZVE32F-NEXT:    bnez t3, .LBB57_11
6665 ; RV32ZVE32F-NEXT:  .LBB57_5:
6666 ; RV32ZVE32F-NEXT:    lw t3, 36(a3)
6667 ; RV32ZVE32F-NEXT:    lw t4, 32(a3)
6668 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
6669 ; RV32ZVE32F-NEXT:    bnez t5, .LBB57_12
6670 ; RV32ZVE32F-NEXT:  .LBB57_6:
6671 ; RV32ZVE32F-NEXT:    lw t5, 44(a3)
6672 ; RV32ZVE32F-NEXT:    lw t6, 40(a3)
6673 ; RV32ZVE32F-NEXT:    j .LBB57_13
6674 ; RV32ZVE32F-NEXT:  .LBB57_7:
6675 ; RV32ZVE32F-NEXT:    lw a1, 4(a3)
6676 ; RV32ZVE32F-NEXT:    lw a2, 0(a3)
6677 ; RV32ZVE32F-NEXT:    andi a4, t0, 2
6678 ; RV32ZVE32F-NEXT:    beqz a4, .LBB57_2
6679 ; RV32ZVE32F-NEXT:  .LBB57_8: # %cond.load1
6680 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6681 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
6682 ; RV32ZVE32F-NEXT:    vmv.x.s a5, v10
6683 ; RV32ZVE32F-NEXT:    lw a4, 4(a5)
6684 ; RV32ZVE32F-NEXT:    lw a5, 0(a5)
6685 ; RV32ZVE32F-NEXT:    andi a6, t0, 4
6686 ; RV32ZVE32F-NEXT:    beqz a6, .LBB57_3
6687 ; RV32ZVE32F-NEXT:  .LBB57_9: # %cond.load4
6688 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6689 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
6690 ; RV32ZVE32F-NEXT:    vmv.x.s a7, v10
6691 ; RV32ZVE32F-NEXT:    lw a6, 4(a7)
6692 ; RV32ZVE32F-NEXT:    lw a7, 0(a7)
6693 ; RV32ZVE32F-NEXT:    andi t1, t0, 8
6694 ; RV32ZVE32F-NEXT:    beqz t1, .LBB57_4
6695 ; RV32ZVE32F-NEXT:  .LBB57_10: # %cond.load7
6696 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
6697 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
6698 ; RV32ZVE32F-NEXT:    vmv.x.s t2, v10
6699 ; RV32ZVE32F-NEXT:    lw t1, 4(t2)
6700 ; RV32ZVE32F-NEXT:    lw t2, 0(t2)
6701 ; RV32ZVE32F-NEXT:    andi t3, t0, 16
6702 ; RV32ZVE32F-NEXT:    beqz t3, .LBB57_5
6703 ; RV32ZVE32F-NEXT:  .LBB57_11: # %cond.load10
6704 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6705 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
6706 ; RV32ZVE32F-NEXT:    vmv.x.s t4, v10
6707 ; RV32ZVE32F-NEXT:    lw t3, 4(t4)
6708 ; RV32ZVE32F-NEXT:    lw t4, 0(t4)
6709 ; RV32ZVE32F-NEXT:    andi t5, t0, 32
6710 ; RV32ZVE32F-NEXT:    beqz t5, .LBB57_6
6711 ; RV32ZVE32F-NEXT:  .LBB57_12: # %cond.load13
6712 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6713 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
6714 ; RV32ZVE32F-NEXT:    vmv.x.s t6, v10
6715 ; RV32ZVE32F-NEXT:    lw t5, 4(t6)
6716 ; RV32ZVE32F-NEXT:    lw t6, 0(t6)
6717 ; RV32ZVE32F-NEXT:  .LBB57_13: # %else14
6718 ; RV32ZVE32F-NEXT:    addi sp, sp, -16
6719 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 16
6720 ; RV32ZVE32F-NEXT:    sw s0, 12(sp) # 4-byte Folded Spill
6721 ; RV32ZVE32F-NEXT:    sw s1, 8(sp) # 4-byte Folded Spill
6722 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -4
6723 ; RV32ZVE32F-NEXT:    .cfi_offset s1, -8
6724 ; RV32ZVE32F-NEXT:    andi s0, t0, 64
6725 ; RV32ZVE32F-NEXT:    beqz s0, .LBB57_16
6726 ; RV32ZVE32F-NEXT:  # %bb.14: # %cond.load16
6727 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6728 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
6729 ; RV32ZVE32F-NEXT:    vmv.x.s s1, v10
6730 ; RV32ZVE32F-NEXT:    lw s0, 4(s1)
6731 ; RV32ZVE32F-NEXT:    lw s1, 0(s1)
6732 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
6733 ; RV32ZVE32F-NEXT:    bnez t0, .LBB57_17
6734 ; RV32ZVE32F-NEXT:  .LBB57_15:
6735 ; RV32ZVE32F-NEXT:    lw t0, 60(a3)
6736 ; RV32ZVE32F-NEXT:    lw a3, 56(a3)
6737 ; RV32ZVE32F-NEXT:    j .LBB57_18
6738 ; RV32ZVE32F-NEXT:  .LBB57_16:
6739 ; RV32ZVE32F-NEXT:    lw s0, 52(a3)
6740 ; RV32ZVE32F-NEXT:    lw s1, 48(a3)
6741 ; RV32ZVE32F-NEXT:    andi t0, t0, -128
6742 ; RV32ZVE32F-NEXT:    beqz t0, .LBB57_15
6743 ; RV32ZVE32F-NEXT:  .LBB57_17: # %cond.load19
6744 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
6745 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
6746 ; RV32ZVE32F-NEXT:    vmv.x.s a3, v8
6747 ; RV32ZVE32F-NEXT:    lw t0, 4(a3)
6748 ; RV32ZVE32F-NEXT:    lw a3, 0(a3)
6749 ; RV32ZVE32F-NEXT:  .LBB57_18: # %else20
6750 ; RV32ZVE32F-NEXT:    sw a2, 0(a0)
6751 ; RV32ZVE32F-NEXT:    sw a1, 4(a0)
6752 ; RV32ZVE32F-NEXT:    sw a5, 8(a0)
6753 ; RV32ZVE32F-NEXT:    sw a4, 12(a0)
6754 ; RV32ZVE32F-NEXT:    sw a7, 16(a0)
6755 ; RV32ZVE32F-NEXT:    sw a6, 20(a0)
6756 ; RV32ZVE32F-NEXT:    sw t2, 24(a0)
6757 ; RV32ZVE32F-NEXT:    sw t1, 28(a0)
6758 ; RV32ZVE32F-NEXT:    sw t4, 32(a0)
6759 ; RV32ZVE32F-NEXT:    sw t3, 36(a0)
6760 ; RV32ZVE32F-NEXT:    sw t6, 40(a0)
6761 ; RV32ZVE32F-NEXT:    sw t5, 44(a0)
6762 ; RV32ZVE32F-NEXT:    sw s1, 48(a0)
6763 ; RV32ZVE32F-NEXT:    sw s0, 52(a0)
6764 ; RV32ZVE32F-NEXT:    sw a3, 56(a0)
6765 ; RV32ZVE32F-NEXT:    sw t0, 60(a0)
6766 ; RV32ZVE32F-NEXT:    lw s0, 12(sp) # 4-byte Folded Reload
6767 ; RV32ZVE32F-NEXT:    lw s1, 8(sp) # 4-byte Folded Reload
6768 ; RV32ZVE32F-NEXT:    addi sp, sp, 16
6769 ; RV32ZVE32F-NEXT:    ret
6771 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i64:
6772 ; RV64ZVE32F:       # %bb.0:
6773 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
6774 ; RV64ZVE32F-NEXT:    vmv.x.s a6, v0
6775 ; RV64ZVE32F-NEXT:    andi a4, a6, 1
6776 ; RV64ZVE32F-NEXT:    beqz a4, .LBB57_9
6777 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
6778 ; RV64ZVE32F-NEXT:    ld a4, 0(a2)
6779 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
6780 ; RV64ZVE32F-NEXT:    add a4, a1, a4
6781 ; RV64ZVE32F-NEXT:    ld a4, 0(a4)
6782 ; RV64ZVE32F-NEXT:    andi a5, a6, 2
6783 ; RV64ZVE32F-NEXT:    bnez a5, .LBB57_10
6784 ; RV64ZVE32F-NEXT:  .LBB57_2:
6785 ; RV64ZVE32F-NEXT:    ld a5, 8(a3)
6786 ; RV64ZVE32F-NEXT:    andi a7, a6, 4
6787 ; RV64ZVE32F-NEXT:    bnez a7, .LBB57_11
6788 ; RV64ZVE32F-NEXT:  .LBB57_3:
6789 ; RV64ZVE32F-NEXT:    ld a7, 16(a3)
6790 ; RV64ZVE32F-NEXT:    andi t0, a6, 8
6791 ; RV64ZVE32F-NEXT:    bnez t0, .LBB57_12
6792 ; RV64ZVE32F-NEXT:  .LBB57_4:
6793 ; RV64ZVE32F-NEXT:    ld t0, 24(a3)
6794 ; RV64ZVE32F-NEXT:    andi t1, a6, 16
6795 ; RV64ZVE32F-NEXT:    bnez t1, .LBB57_13
6796 ; RV64ZVE32F-NEXT:  .LBB57_5:
6797 ; RV64ZVE32F-NEXT:    ld t1, 32(a3)
6798 ; RV64ZVE32F-NEXT:    andi t2, a6, 32
6799 ; RV64ZVE32F-NEXT:    bnez t2, .LBB57_14
6800 ; RV64ZVE32F-NEXT:  .LBB57_6:
6801 ; RV64ZVE32F-NEXT:    ld t2, 40(a3)
6802 ; RV64ZVE32F-NEXT:    andi t3, a6, 64
6803 ; RV64ZVE32F-NEXT:    bnez t3, .LBB57_15
6804 ; RV64ZVE32F-NEXT:  .LBB57_7:
6805 ; RV64ZVE32F-NEXT:    ld t3, 48(a3)
6806 ; RV64ZVE32F-NEXT:    andi a6, a6, -128
6807 ; RV64ZVE32F-NEXT:    bnez a6, .LBB57_16
6808 ; RV64ZVE32F-NEXT:  .LBB57_8:
6809 ; RV64ZVE32F-NEXT:    ld a1, 56(a3)
6810 ; RV64ZVE32F-NEXT:    j .LBB57_17
6811 ; RV64ZVE32F-NEXT:  .LBB57_9:
6812 ; RV64ZVE32F-NEXT:    ld a4, 0(a3)
6813 ; RV64ZVE32F-NEXT:    andi a5, a6, 2
6814 ; RV64ZVE32F-NEXT:    beqz a5, .LBB57_2
6815 ; RV64ZVE32F-NEXT:  .LBB57_10: # %cond.load1
6816 ; RV64ZVE32F-NEXT:    ld a5, 8(a2)
6817 ; RV64ZVE32F-NEXT:    slli a5, a5, 3
6818 ; RV64ZVE32F-NEXT:    add a5, a1, a5
6819 ; RV64ZVE32F-NEXT:    ld a5, 0(a5)
6820 ; RV64ZVE32F-NEXT:    andi a7, a6, 4
6821 ; RV64ZVE32F-NEXT:    beqz a7, .LBB57_3
6822 ; RV64ZVE32F-NEXT:  .LBB57_11: # %cond.load4
6823 ; RV64ZVE32F-NEXT:    ld a7, 16(a2)
6824 ; RV64ZVE32F-NEXT:    slli a7, a7, 3
6825 ; RV64ZVE32F-NEXT:    add a7, a1, a7
6826 ; RV64ZVE32F-NEXT:    ld a7, 0(a7)
6827 ; RV64ZVE32F-NEXT:    andi t0, a6, 8
6828 ; RV64ZVE32F-NEXT:    beqz t0, .LBB57_4
6829 ; RV64ZVE32F-NEXT:  .LBB57_12: # %cond.load7
6830 ; RV64ZVE32F-NEXT:    ld t0, 24(a2)
6831 ; RV64ZVE32F-NEXT:    slli t0, t0, 3
6832 ; RV64ZVE32F-NEXT:    add t0, a1, t0
6833 ; RV64ZVE32F-NEXT:    ld t0, 0(t0)
6834 ; RV64ZVE32F-NEXT:    andi t1, a6, 16
6835 ; RV64ZVE32F-NEXT:    beqz t1, .LBB57_5
6836 ; RV64ZVE32F-NEXT:  .LBB57_13: # %cond.load10
6837 ; RV64ZVE32F-NEXT:    ld t1, 32(a2)
6838 ; RV64ZVE32F-NEXT:    slli t1, t1, 3
6839 ; RV64ZVE32F-NEXT:    add t1, a1, t1
6840 ; RV64ZVE32F-NEXT:    ld t1, 0(t1)
6841 ; RV64ZVE32F-NEXT:    andi t2, a6, 32
6842 ; RV64ZVE32F-NEXT:    beqz t2, .LBB57_6
6843 ; RV64ZVE32F-NEXT:  .LBB57_14: # %cond.load13
6844 ; RV64ZVE32F-NEXT:    ld t2, 40(a2)
6845 ; RV64ZVE32F-NEXT:    slli t2, t2, 3
6846 ; RV64ZVE32F-NEXT:    add t2, a1, t2
6847 ; RV64ZVE32F-NEXT:    ld t2, 0(t2)
6848 ; RV64ZVE32F-NEXT:    andi t3, a6, 64
6849 ; RV64ZVE32F-NEXT:    beqz t3, .LBB57_7
6850 ; RV64ZVE32F-NEXT:  .LBB57_15: # %cond.load16
6851 ; RV64ZVE32F-NEXT:    ld t3, 48(a2)
6852 ; RV64ZVE32F-NEXT:    slli t3, t3, 3
6853 ; RV64ZVE32F-NEXT:    add t3, a1, t3
6854 ; RV64ZVE32F-NEXT:    ld t3, 0(t3)
6855 ; RV64ZVE32F-NEXT:    andi a6, a6, -128
6856 ; RV64ZVE32F-NEXT:    beqz a6, .LBB57_8
6857 ; RV64ZVE32F-NEXT:  .LBB57_16: # %cond.load19
6858 ; RV64ZVE32F-NEXT:    ld a2, 56(a2)
6859 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
6860 ; RV64ZVE32F-NEXT:    add a1, a1, a2
6861 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
6862 ; RV64ZVE32F-NEXT:  .LBB57_17: # %else20
6863 ; RV64ZVE32F-NEXT:    sd a4, 0(a0)
6864 ; RV64ZVE32F-NEXT:    sd a5, 8(a0)
6865 ; RV64ZVE32F-NEXT:    sd a7, 16(a0)
6866 ; RV64ZVE32F-NEXT:    sd t0, 24(a0)
6867 ; RV64ZVE32F-NEXT:    sd t1, 32(a0)
6868 ; RV64ZVE32F-NEXT:    sd t2, 40(a0)
6869 ; RV64ZVE32F-NEXT:    sd t3, 48(a0)
6870 ; RV64ZVE32F-NEXT:    sd a1, 56(a0)
6871 ; RV64ZVE32F-NEXT:    ret
6872   %ptrs = getelementptr inbounds i64, ptr %base, <8 x i64> %idxs
6873   %v = call <8 x i64> @llvm.masked.gather.v8i64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x i64> %passthru)
6874   ret <8 x i64> %v
6877 declare <1 x half> @llvm.masked.gather.v1f16.v1p0(<1 x ptr>, i32, <1 x i1>, <1 x half>)
6879 define <1 x half> @mgather_v1f16(<1 x ptr> %ptrs, <1 x i1> %m, <1 x half> %passthru) {
6880 ; RV32V-LABEL: mgather_v1f16:
6881 ; RV32V:       # %bb.0:
6882 ; RV32V-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
6883 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
6884 ; RV32V-NEXT:    vmv1r.v v8, v9
6885 ; RV32V-NEXT:    ret
6887 ; RV64V-LABEL: mgather_v1f16:
6888 ; RV64V:       # %bb.0:
6889 ; RV64V-NEXT:    vsetivli zero, 1, e16, mf4, ta, mu
6890 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
6891 ; RV64V-NEXT:    vmv1r.v v8, v9
6892 ; RV64V-NEXT:    ret
6894 ; RV32ZVE32F-LABEL: mgather_v1f16:
6895 ; RV32ZVE32F:       # %bb.0:
6896 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, mu
6897 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
6898 ; RV32ZVE32F-NEXT:    vmv1r.v v8, v9
6899 ; RV32ZVE32F-NEXT:    ret
6901 ; RV64ZVE32F-LABEL: mgather_v1f16:
6902 ; RV64ZVE32F:       # %bb.0:
6903 ; RV64ZVE32F-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
6904 ; RV64ZVE32F-NEXT:    vfirst.m a1, v0
6905 ; RV64ZVE32F-NEXT:    bnez a1, .LBB58_2
6906 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
6907 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
6908 ; RV64ZVE32F-NEXT:    vle16.v v8, (a0)
6909 ; RV64ZVE32F-NEXT:  .LBB58_2: # %else
6910 ; RV64ZVE32F-NEXT:    ret
6911   %v = call <1 x half> @llvm.masked.gather.v1f16.v1p0(<1 x ptr> %ptrs, i32 2, <1 x i1> %m, <1 x half> %passthru)
6912   ret <1 x half> %v
6915 declare <2 x half> @llvm.masked.gather.v2f16.v2p0(<2 x ptr>, i32, <2 x i1>, <2 x half>)
6917 define <2 x half> @mgather_v2f16(<2 x ptr> %ptrs, <2 x i1> %m, <2 x half> %passthru) {
6918 ; RV32V-LABEL: mgather_v2f16:
6919 ; RV32V:       # %bb.0:
6920 ; RV32V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
6921 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
6922 ; RV32V-NEXT:    vmv1r.v v8, v9
6923 ; RV32V-NEXT:    ret
6925 ; RV64V-LABEL: mgather_v2f16:
6926 ; RV64V:       # %bb.0:
6927 ; RV64V-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu
6928 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
6929 ; RV64V-NEXT:    vmv1r.v v8, v9
6930 ; RV64V-NEXT:    ret
6932 ; RV32ZVE32F-LABEL: mgather_v2f16:
6933 ; RV32ZVE32F:       # %bb.0:
6934 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, mu
6935 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
6936 ; RV32ZVE32F-NEXT:    vmv1r.v v8, v9
6937 ; RV32ZVE32F-NEXT:    ret
6939 ; RV64ZVE32F-LABEL: mgather_v2f16:
6940 ; RV64ZVE32F:       # %bb.0:
6941 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
6942 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
6943 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
6944 ; RV64ZVE32F-NEXT:    bnez a3, .LBB59_3
6945 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
6946 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
6947 ; RV64ZVE32F-NEXT:    bnez a2, .LBB59_4
6948 ; RV64ZVE32F-NEXT:  .LBB59_2: # %else2
6949 ; RV64ZVE32F-NEXT:    ret
6950 ; RV64ZVE32F-NEXT:  .LBB59_3: # %cond.load
6951 ; RV64ZVE32F-NEXT:    flh fa5, 0(a0)
6952 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
6953 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
6954 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
6955 ; RV64ZVE32F-NEXT:    beqz a2, .LBB59_2
6956 ; RV64ZVE32F-NEXT:  .LBB59_4: # %cond.load1
6957 ; RV64ZVE32F-NEXT:    flh fa5, 0(a1)
6958 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
6959 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
6960 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
6961 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
6962 ; RV64ZVE32F-NEXT:    ret
6963   %v = call <2 x half> @llvm.masked.gather.v2f16.v2p0(<2 x ptr> %ptrs, i32 2, <2 x i1> %m, <2 x half> %passthru)
6964   ret <2 x half> %v
6967 declare <4 x half> @llvm.masked.gather.v4f16.v4p0(<4 x ptr>, i32, <4 x i1>, <4 x half>)
6969 define <4 x half> @mgather_v4f16(<4 x ptr> %ptrs, <4 x i1> %m, <4 x half> %passthru) {
6970 ; RV32-LABEL: mgather_v4f16:
6971 ; RV32:       # %bb.0:
6972 ; RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
6973 ; RV32-NEXT:    vluxei32.v v9, (zero), v8, v0.t
6974 ; RV32-NEXT:    vmv1r.v v8, v9
6975 ; RV32-NEXT:    ret
6977 ; RV64V-LABEL: mgather_v4f16:
6978 ; RV64V:       # %bb.0:
6979 ; RV64V-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu
6980 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8, v0.t
6981 ; RV64V-NEXT:    vmv1r.v v8, v10
6982 ; RV64V-NEXT:    ret
6984 ; RV64ZVE32F-LABEL: mgather_v4f16:
6985 ; RV64ZVE32F:       # %bb.0:
6986 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
6987 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
6988 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
6989 ; RV64ZVE32F-NEXT:    bnez a2, .LBB60_5
6990 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
6991 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
6992 ; RV64ZVE32F-NEXT:    bnez a2, .LBB60_6
6993 ; RV64ZVE32F-NEXT:  .LBB60_2: # %else2
6994 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
6995 ; RV64ZVE32F-NEXT:    bnez a2, .LBB60_7
6996 ; RV64ZVE32F-NEXT:  .LBB60_3: # %else5
6997 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
6998 ; RV64ZVE32F-NEXT:    bnez a1, .LBB60_8
6999 ; RV64ZVE32F-NEXT:  .LBB60_4: # %else8
7000 ; RV64ZVE32F-NEXT:    ret
7001 ; RV64ZVE32F-NEXT:  .LBB60_5: # %cond.load
7002 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
7003 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7004 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
7005 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7006 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7007 ; RV64ZVE32F-NEXT:    beqz a2, .LBB60_2
7008 ; RV64ZVE32F-NEXT:  .LBB60_6: # %cond.load1
7009 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
7010 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7011 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7012 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7013 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, tu, ma
7014 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
7015 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7016 ; RV64ZVE32F-NEXT:    beqz a2, .LBB60_3
7017 ; RV64ZVE32F-NEXT:  .LBB60_7: # %cond.load4
7018 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
7019 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7020 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, mf2, tu, ma
7021 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7022 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 2
7023 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
7024 ; RV64ZVE32F-NEXT:    beqz a1, .LBB60_4
7025 ; RV64ZVE32F-NEXT:  .LBB60_8: # %cond.load7
7026 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
7027 ; RV64ZVE32F-NEXT:    flh fa5, 0(a0)
7028 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
7029 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7030 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 3
7031 ; RV64ZVE32F-NEXT:    ret
7032   %v = call <4 x half> @llvm.masked.gather.v4f16.v4p0(<4 x ptr> %ptrs, i32 2, <4 x i1> %m, <4 x half> %passthru)
7033   ret <4 x half> %v
7036 define <4 x half> @mgather_truemask_v4f16(<4 x ptr> %ptrs, <4 x half> %passthru) {
7037 ; RV32-LABEL: mgather_truemask_v4f16:
7038 ; RV32:       # %bb.0:
7039 ; RV32-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
7040 ; RV32-NEXT:    vluxei32.v v9, (zero), v8
7041 ; RV32-NEXT:    vmv1r.v v8, v9
7042 ; RV32-NEXT:    ret
7044 ; RV64V-LABEL: mgather_truemask_v4f16:
7045 ; RV64V:       # %bb.0:
7046 ; RV64V-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
7047 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8
7048 ; RV64V-NEXT:    vmv1r.v v8, v10
7049 ; RV64V-NEXT:    ret
7051 ; RV64ZVE32F-LABEL: mgather_truemask_v4f16:
7052 ; RV64ZVE32F:       # %bb.0:
7053 ; RV64ZVE32F-NEXT:    ld a1, 0(a0)
7054 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
7055 ; RV64ZVE32F-NEXT:    ld a3, 16(a0)
7056 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
7057 ; RV64ZVE32F-NEXT:    flh fa5, 0(a1)
7058 ; RV64ZVE32F-NEXT:    flh fa4, 0(a2)
7059 ; RV64ZVE32F-NEXT:    flh fa3, 0(a3)
7060 ; RV64ZVE32F-NEXT:    flh fa2, 0(a0)
7061 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma
7062 ; RV64ZVE32F-NEXT:    vfmv.v.f v8, fa5
7063 ; RV64ZVE32F-NEXT:    vfslide1down.vf v8, v8, fa4
7064 ; RV64ZVE32F-NEXT:    vfslide1down.vf v8, v8, fa3
7065 ; RV64ZVE32F-NEXT:    vfslide1down.vf v8, v8, fa2
7066 ; RV64ZVE32F-NEXT:    ret
7067   %v = call <4 x half> @llvm.masked.gather.v4f16.v4p0(<4 x ptr> %ptrs, i32 2, <4 x i1> splat (i1 1), <4 x half> %passthru)
7068   ret <4 x half> %v
7071 define <4 x half> @mgather_falsemask_v4f16(<4 x ptr> %ptrs, <4 x half> %passthru) {
7072 ; RV32-LABEL: mgather_falsemask_v4f16:
7073 ; RV32:       # %bb.0:
7074 ; RV32-NEXT:    vmv1r.v v8, v9
7075 ; RV32-NEXT:    ret
7077 ; RV64V-LABEL: mgather_falsemask_v4f16:
7078 ; RV64V:       # %bb.0:
7079 ; RV64V-NEXT:    vmv1r.v v8, v10
7080 ; RV64V-NEXT:    ret
7082 ; RV64ZVE32F-LABEL: mgather_falsemask_v4f16:
7083 ; RV64ZVE32F:       # %bb.0:
7084 ; RV64ZVE32F-NEXT:    ret
7085   %v = call <4 x half> @llvm.masked.gather.v4f16.v4p0(<4 x ptr> %ptrs, i32 2, <4 x i1> zeroinitializer, <4 x half> %passthru)
7086   ret <4 x half> %v
7089 declare <8 x half> @llvm.masked.gather.v8f16.v8p0(<8 x ptr>, i32, <8 x i1>, <8 x half>)
7091 define <8 x half> @mgather_v8f16(<8 x ptr> %ptrs, <8 x i1> %m, <8 x half> %passthru) {
7092 ; RV32-LABEL: mgather_v8f16:
7093 ; RV32:       # %bb.0:
7094 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
7095 ; RV32-NEXT:    vluxei32.v v10, (zero), v8, v0.t
7096 ; RV32-NEXT:    vmv.v.v v8, v10
7097 ; RV32-NEXT:    ret
7099 ; RV64V-LABEL: mgather_v8f16:
7100 ; RV64V:       # %bb.0:
7101 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
7102 ; RV64V-NEXT:    vluxei64.v v12, (zero), v8, v0.t
7103 ; RV64V-NEXT:    vmv.v.v v8, v12
7104 ; RV64V-NEXT:    ret
7106 ; RV64ZVE32F-LABEL: mgather_v8f16:
7107 ; RV64ZVE32F:       # %bb.0:
7108 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7109 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
7110 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
7111 ; RV64ZVE32F-NEXT:    bnez a2, .LBB63_9
7112 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
7113 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7114 ; RV64ZVE32F-NEXT:    bnez a2, .LBB63_10
7115 ; RV64ZVE32F-NEXT:  .LBB63_2: # %else2
7116 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7117 ; RV64ZVE32F-NEXT:    bnez a2, .LBB63_11
7118 ; RV64ZVE32F-NEXT:  .LBB63_3: # %else5
7119 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7120 ; RV64ZVE32F-NEXT:    bnez a2, .LBB63_12
7121 ; RV64ZVE32F-NEXT:  .LBB63_4: # %else8
7122 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7123 ; RV64ZVE32F-NEXT:    bnez a2, .LBB63_13
7124 ; RV64ZVE32F-NEXT:  .LBB63_5: # %else11
7125 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7126 ; RV64ZVE32F-NEXT:    bnez a2, .LBB63_14
7127 ; RV64ZVE32F-NEXT:  .LBB63_6: # %else14
7128 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
7129 ; RV64ZVE32F-NEXT:    bnez a2, .LBB63_15
7130 ; RV64ZVE32F-NEXT:  .LBB63_7: # %else17
7131 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7132 ; RV64ZVE32F-NEXT:    bnez a1, .LBB63_16
7133 ; RV64ZVE32F-NEXT:  .LBB63_8: # %else20
7134 ; RV64ZVE32F-NEXT:    ret
7135 ; RV64ZVE32F-NEXT:  .LBB63_9: # %cond.load
7136 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
7137 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7138 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
7139 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7140 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7141 ; RV64ZVE32F-NEXT:    beqz a2, .LBB63_2
7142 ; RV64ZVE32F-NEXT:  .LBB63_10: # %cond.load1
7143 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
7144 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7145 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7146 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7147 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
7148 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
7149 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7150 ; RV64ZVE32F-NEXT:    beqz a2, .LBB63_3
7151 ; RV64ZVE32F-NEXT:  .LBB63_11: # %cond.load4
7152 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
7153 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7154 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
7155 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7156 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 2
7157 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7158 ; RV64ZVE32F-NEXT:    beqz a2, .LBB63_4
7159 ; RV64ZVE32F-NEXT:  .LBB63_12: # %cond.load7
7160 ; RV64ZVE32F-NEXT:    ld a2, 24(a0)
7161 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7162 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
7163 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7164 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 3
7165 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7166 ; RV64ZVE32F-NEXT:    beqz a2, .LBB63_5
7167 ; RV64ZVE32F-NEXT:  .LBB63_13: # %cond.load10
7168 ; RV64ZVE32F-NEXT:    ld a2, 32(a0)
7169 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7170 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
7171 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7172 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 4
7173 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7174 ; RV64ZVE32F-NEXT:    beqz a2, .LBB63_6
7175 ; RV64ZVE32F-NEXT:  .LBB63_14: # %cond.load13
7176 ; RV64ZVE32F-NEXT:    ld a2, 40(a0)
7177 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7178 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
7179 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7180 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 5
7181 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
7182 ; RV64ZVE32F-NEXT:    beqz a2, .LBB63_7
7183 ; RV64ZVE32F-NEXT:  .LBB63_15: # %cond.load16
7184 ; RV64ZVE32F-NEXT:    ld a2, 48(a0)
7185 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7186 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
7187 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7188 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 6
7189 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7190 ; RV64ZVE32F-NEXT:    beqz a1, .LBB63_8
7191 ; RV64ZVE32F-NEXT:  .LBB63_16: # %cond.load19
7192 ; RV64ZVE32F-NEXT:    ld a0, 56(a0)
7193 ; RV64ZVE32F-NEXT:    flh fa5, 0(a0)
7194 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
7195 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7196 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 7
7197 ; RV64ZVE32F-NEXT:    ret
7198   %v = call <8 x half> @llvm.masked.gather.v8f16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x half> %passthru)
7199   ret <8 x half> %v
7202 define <8 x half> @mgather_baseidx_v8i8_v8f16(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x half> %passthru) {
7203 ; RV32-LABEL: mgather_baseidx_v8i8_v8f16:
7204 ; RV32:       # %bb.0:
7205 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
7206 ; RV32-NEXT:    vsext.vf4 v10, v8
7207 ; RV32-NEXT:    vadd.vv v10, v10, v10
7208 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
7209 ; RV32-NEXT:    vluxei32.v v9, (a0), v10, v0.t
7210 ; RV32-NEXT:    vmv.v.v v8, v9
7211 ; RV32-NEXT:    ret
7213 ; RV64V-LABEL: mgather_baseidx_v8i8_v8f16:
7214 ; RV64V:       # %bb.0:
7215 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
7216 ; RV64V-NEXT:    vsext.vf8 v12, v8
7217 ; RV64V-NEXT:    vadd.vv v12, v12, v12
7218 ; RV64V-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
7219 ; RV64V-NEXT:    vluxei64.v v9, (a0), v12, v0.t
7220 ; RV64V-NEXT:    vmv.v.v v8, v9
7221 ; RV64V-NEXT:    ret
7223 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8_v8f16:
7224 ; RV64ZVE32F:       # %bb.0:
7225 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7226 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
7227 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
7228 ; RV64ZVE32F-NEXT:    beqz a2, .LBB64_2
7229 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
7230 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7231 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7232 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7233 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7234 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
7235 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7236 ; RV64ZVE32F-NEXT:  .LBB64_2: # %else
7237 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7238 ; RV64ZVE32F-NEXT:    beqz a2, .LBB64_4
7239 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
7240 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7241 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
7242 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
7243 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7244 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7245 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7246 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7247 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
7248 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
7249 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
7250 ; RV64ZVE32F-NEXT:  .LBB64_4: # %else2
7251 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
7252 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
7253 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7254 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
7255 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
7256 ; RV64ZVE32F-NEXT:    bnez a2, .LBB64_12
7257 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
7258 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7259 ; RV64ZVE32F-NEXT:    bnez a2, .LBB64_13
7260 ; RV64ZVE32F-NEXT:  .LBB64_6: # %else8
7261 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7262 ; RV64ZVE32F-NEXT:    bnez a2, .LBB64_14
7263 ; RV64ZVE32F-NEXT:  .LBB64_7: # %else11
7264 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7265 ; RV64ZVE32F-NEXT:    beqz a2, .LBB64_9
7266 ; RV64ZVE32F-NEXT:  .LBB64_8: # %cond.load13
7267 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7268 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
7269 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7270 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7271 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7272 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7273 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7274 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7275 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
7276 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
7277 ; RV64ZVE32F-NEXT:  .LBB64_9: # %else14
7278 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
7279 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
7280 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
7281 ; RV64ZVE32F-NEXT:    bnez a2, .LBB64_15
7282 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
7283 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7284 ; RV64ZVE32F-NEXT:    bnez a1, .LBB64_16
7285 ; RV64ZVE32F-NEXT:  .LBB64_11: # %else20
7286 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
7287 ; RV64ZVE32F-NEXT:    ret
7288 ; RV64ZVE32F-NEXT:  .LBB64_12: # %cond.load4
7289 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7290 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7291 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7292 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7293 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7294 ; RV64ZVE32F-NEXT:    vfmv.s.f v11, fa5
7295 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
7296 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
7297 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7298 ; RV64ZVE32F-NEXT:    beqz a2, .LBB64_6
7299 ; RV64ZVE32F-NEXT:  .LBB64_13: # %cond.load7
7300 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7301 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
7302 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7303 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7304 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7305 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7306 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7307 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7308 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
7309 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
7310 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7311 ; RV64ZVE32F-NEXT:    beqz a2, .LBB64_7
7312 ; RV64ZVE32F-NEXT:  .LBB64_14: # %cond.load10
7313 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7314 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
7315 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7316 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7317 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7318 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7319 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7320 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
7321 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
7322 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7323 ; RV64ZVE32F-NEXT:    bnez a2, .LBB64_8
7324 ; RV64ZVE32F-NEXT:    j .LBB64_9
7325 ; RV64ZVE32F-NEXT:  .LBB64_15: # %cond.load16
7326 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7327 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7328 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7329 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7330 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7331 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
7332 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
7333 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
7334 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7335 ; RV64ZVE32F-NEXT:    beqz a1, .LBB64_11
7336 ; RV64ZVE32F-NEXT:  .LBB64_16: # %cond.load19
7337 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7338 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
7339 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
7340 ; RV64ZVE32F-NEXT:    slli a1, a1, 1
7341 ; RV64ZVE32F-NEXT:    add a0, a0, a1
7342 ; RV64ZVE32F-NEXT:    flh fa5, 0(a0)
7343 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7344 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7345 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
7346 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
7347 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
7348 ; RV64ZVE32F-NEXT:    ret
7349   %ptrs = getelementptr inbounds half, ptr %base, <8 x i8> %idxs
7350   %v = call <8 x half> @llvm.masked.gather.v8f16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x half> %passthru)
7351   ret <8 x half> %v
7354 define <8 x half> @mgather_baseidx_sext_v8i8_v8f16(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x half> %passthru) {
7355 ; RV32-LABEL: mgather_baseidx_sext_v8i8_v8f16:
7356 ; RV32:       # %bb.0:
7357 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
7358 ; RV32-NEXT:    vsext.vf4 v10, v8
7359 ; RV32-NEXT:    vadd.vv v10, v10, v10
7360 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
7361 ; RV32-NEXT:    vluxei32.v v9, (a0), v10, v0.t
7362 ; RV32-NEXT:    vmv.v.v v8, v9
7363 ; RV32-NEXT:    ret
7365 ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8f16:
7366 ; RV64V:       # %bb.0:
7367 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
7368 ; RV64V-NEXT:    vsext.vf8 v12, v8
7369 ; RV64V-NEXT:    vadd.vv v12, v12, v12
7370 ; RV64V-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
7371 ; RV64V-NEXT:    vluxei64.v v9, (a0), v12, v0.t
7372 ; RV64V-NEXT:    vmv.v.v v8, v9
7373 ; RV64V-NEXT:    ret
7375 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8f16:
7376 ; RV64ZVE32F:       # %bb.0:
7377 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7378 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
7379 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
7380 ; RV64ZVE32F-NEXT:    beqz a2, .LBB65_2
7381 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
7382 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7383 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7384 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7385 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7386 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
7387 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7388 ; RV64ZVE32F-NEXT:  .LBB65_2: # %else
7389 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7390 ; RV64ZVE32F-NEXT:    beqz a2, .LBB65_4
7391 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
7392 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7393 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
7394 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
7395 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7396 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7397 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7398 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7399 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
7400 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
7401 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
7402 ; RV64ZVE32F-NEXT:  .LBB65_4: # %else2
7403 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
7404 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
7405 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7406 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
7407 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
7408 ; RV64ZVE32F-NEXT:    bnez a2, .LBB65_12
7409 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
7410 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7411 ; RV64ZVE32F-NEXT:    bnez a2, .LBB65_13
7412 ; RV64ZVE32F-NEXT:  .LBB65_6: # %else8
7413 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7414 ; RV64ZVE32F-NEXT:    bnez a2, .LBB65_14
7415 ; RV64ZVE32F-NEXT:  .LBB65_7: # %else11
7416 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7417 ; RV64ZVE32F-NEXT:    beqz a2, .LBB65_9
7418 ; RV64ZVE32F-NEXT:  .LBB65_8: # %cond.load13
7419 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7420 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
7421 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7422 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7423 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7424 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7425 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7426 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7427 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
7428 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
7429 ; RV64ZVE32F-NEXT:  .LBB65_9: # %else14
7430 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
7431 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
7432 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
7433 ; RV64ZVE32F-NEXT:    bnez a2, .LBB65_15
7434 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
7435 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7436 ; RV64ZVE32F-NEXT:    bnez a1, .LBB65_16
7437 ; RV64ZVE32F-NEXT:  .LBB65_11: # %else20
7438 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
7439 ; RV64ZVE32F-NEXT:    ret
7440 ; RV64ZVE32F-NEXT:  .LBB65_12: # %cond.load4
7441 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7442 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7443 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7444 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7445 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7446 ; RV64ZVE32F-NEXT:    vfmv.s.f v11, fa5
7447 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
7448 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
7449 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7450 ; RV64ZVE32F-NEXT:    beqz a2, .LBB65_6
7451 ; RV64ZVE32F-NEXT:  .LBB65_13: # %cond.load7
7452 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7453 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
7454 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7455 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7456 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7457 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7458 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7459 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7460 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
7461 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
7462 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7463 ; RV64ZVE32F-NEXT:    beqz a2, .LBB65_7
7464 ; RV64ZVE32F-NEXT:  .LBB65_14: # %cond.load10
7465 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7466 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
7467 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7468 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7469 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7470 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7471 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7472 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
7473 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
7474 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7475 ; RV64ZVE32F-NEXT:    bnez a2, .LBB65_8
7476 ; RV64ZVE32F-NEXT:    j .LBB65_9
7477 ; RV64ZVE32F-NEXT:  .LBB65_15: # %cond.load16
7478 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7479 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7480 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7481 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7482 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7483 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
7484 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
7485 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
7486 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7487 ; RV64ZVE32F-NEXT:    beqz a1, .LBB65_11
7488 ; RV64ZVE32F-NEXT:  .LBB65_16: # %cond.load19
7489 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7490 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
7491 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
7492 ; RV64ZVE32F-NEXT:    slli a1, a1, 1
7493 ; RV64ZVE32F-NEXT:    add a0, a0, a1
7494 ; RV64ZVE32F-NEXT:    flh fa5, 0(a0)
7495 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7496 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7497 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
7498 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
7499 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
7500 ; RV64ZVE32F-NEXT:    ret
7501   %eidxs = sext <8 x i8> %idxs to <8 x i16>
7502   %ptrs = getelementptr inbounds half, ptr %base, <8 x i16> %eidxs
7503   %v = call <8 x half> @llvm.masked.gather.v8f16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x half> %passthru)
7504   ret <8 x half> %v
7507 define <8 x half> @mgather_baseidx_zext_v8i8_v8f16(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x half> %passthru) {
7508 ; RV32-LABEL: mgather_baseidx_zext_v8i8_v8f16:
7509 ; RV32:       # %bb.0:
7510 ; RV32-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
7511 ; RV32-NEXT:    vwaddu.vv v10, v8, v8
7512 ; RV32-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
7513 ; RV32-NEXT:    vluxei16.v v9, (a0), v10, v0.t
7514 ; RV32-NEXT:    vmv.v.v v8, v9
7515 ; RV32-NEXT:    ret
7517 ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8f16:
7518 ; RV64V:       # %bb.0:
7519 ; RV64V-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
7520 ; RV64V-NEXT:    vwaddu.vv v10, v8, v8
7521 ; RV64V-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
7522 ; RV64V-NEXT:    vluxei16.v v9, (a0), v10, v0.t
7523 ; RV64V-NEXT:    vmv.v.v v8, v9
7524 ; RV64V-NEXT:    ret
7526 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8f16:
7527 ; RV64ZVE32F:       # %bb.0:
7528 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7529 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
7530 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
7531 ; RV64ZVE32F-NEXT:    beqz a2, .LBB66_2
7532 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
7533 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7534 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
7535 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7536 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7537 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7538 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
7539 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7540 ; RV64ZVE32F-NEXT:  .LBB66_2: # %else
7541 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7542 ; RV64ZVE32F-NEXT:    beqz a2, .LBB66_4
7543 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
7544 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7545 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
7546 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
7547 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
7548 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7549 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7550 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7551 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7552 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
7553 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
7554 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
7555 ; RV64ZVE32F-NEXT:  .LBB66_4: # %else2
7556 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
7557 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
7558 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7559 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
7560 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
7561 ; RV64ZVE32F-NEXT:    bnez a2, .LBB66_12
7562 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
7563 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7564 ; RV64ZVE32F-NEXT:    bnez a2, .LBB66_13
7565 ; RV64ZVE32F-NEXT:  .LBB66_6: # %else8
7566 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7567 ; RV64ZVE32F-NEXT:    bnez a2, .LBB66_14
7568 ; RV64ZVE32F-NEXT:  .LBB66_7: # %else11
7569 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7570 ; RV64ZVE32F-NEXT:    beqz a2, .LBB66_9
7571 ; RV64ZVE32F-NEXT:  .LBB66_8: # %cond.load13
7572 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7573 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
7574 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7575 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
7576 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7577 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7578 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7579 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7580 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7581 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
7582 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
7583 ; RV64ZVE32F-NEXT:  .LBB66_9: # %else14
7584 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
7585 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
7586 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
7587 ; RV64ZVE32F-NEXT:    bnez a2, .LBB66_15
7588 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
7589 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7590 ; RV64ZVE32F-NEXT:    bnez a1, .LBB66_16
7591 ; RV64ZVE32F-NEXT:  .LBB66_11: # %else20
7592 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
7593 ; RV64ZVE32F-NEXT:    ret
7594 ; RV64ZVE32F-NEXT:  .LBB66_12: # %cond.load4
7595 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7596 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
7597 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7598 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7599 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7600 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7601 ; RV64ZVE32F-NEXT:    vfmv.s.f v11, fa5
7602 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
7603 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
7604 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7605 ; RV64ZVE32F-NEXT:    beqz a2, .LBB66_6
7606 ; RV64ZVE32F-NEXT:  .LBB66_13: # %cond.load7
7607 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7608 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
7609 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7610 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
7611 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7612 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7613 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7614 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7615 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7616 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
7617 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
7618 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7619 ; RV64ZVE32F-NEXT:    beqz a2, .LBB66_7
7620 ; RV64ZVE32F-NEXT:  .LBB66_14: # %cond.load10
7621 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7622 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
7623 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
7624 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7625 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7626 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7627 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
7628 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7629 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
7630 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
7631 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7632 ; RV64ZVE32F-NEXT:    bnez a2, .LBB66_8
7633 ; RV64ZVE32F-NEXT:    j .LBB66_9
7634 ; RV64ZVE32F-NEXT:  .LBB66_15: # %cond.load16
7635 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7636 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
7637 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7638 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7639 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7640 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7641 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
7642 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
7643 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
7644 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7645 ; RV64ZVE32F-NEXT:    beqz a1, .LBB66_11
7646 ; RV64ZVE32F-NEXT:  .LBB66_16: # %cond.load19
7647 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
7648 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
7649 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
7650 ; RV64ZVE32F-NEXT:    andi a1, a1, 255
7651 ; RV64ZVE32F-NEXT:    slli a1, a1, 1
7652 ; RV64ZVE32F-NEXT:    add a0, a0, a1
7653 ; RV64ZVE32F-NEXT:    flh fa5, 0(a0)
7654 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma
7655 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7656 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
7657 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
7658 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
7659 ; RV64ZVE32F-NEXT:    ret
7660   %eidxs = zext <8 x i8> %idxs to <8 x i16>
7661   %ptrs = getelementptr inbounds half, ptr %base, <8 x i16> %eidxs
7662   %v = call <8 x half> @llvm.masked.gather.v8f16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x half> %passthru)
7663   ret <8 x half> %v
7666 define <8 x half> @mgather_baseidx_v8f16(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x half> %passthru) {
7667 ; RV32-LABEL: mgather_baseidx_v8f16:
7668 ; RV32:       # %bb.0:
7669 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
7670 ; RV32-NEXT:    vwadd.vv v10, v8, v8
7671 ; RV32-NEXT:    vluxei32.v v9, (a0), v10, v0.t
7672 ; RV32-NEXT:    vmv.v.v v8, v9
7673 ; RV32-NEXT:    ret
7675 ; RV64V-LABEL: mgather_baseidx_v8f16:
7676 ; RV64V:       # %bb.0:
7677 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
7678 ; RV64V-NEXT:    vsext.vf4 v12, v8
7679 ; RV64V-NEXT:    vadd.vv v12, v12, v12
7680 ; RV64V-NEXT:    vsetvli zero, zero, e16, m1, ta, mu
7681 ; RV64V-NEXT:    vluxei64.v v9, (a0), v12, v0.t
7682 ; RV64V-NEXT:    vmv.v.v v8, v9
7683 ; RV64V-NEXT:    ret
7685 ; RV64ZVE32F-LABEL: mgather_baseidx_v8f16:
7686 ; RV64ZVE32F:       # %bb.0:
7687 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7688 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
7689 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
7690 ; RV64ZVE32F-NEXT:    beqz a2, .LBB67_2
7691 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
7692 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, tu, ma
7693 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7694 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7695 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7696 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7697 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7698 ; RV64ZVE32F-NEXT:  .LBB67_2: # %else
7699 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7700 ; RV64ZVE32F-NEXT:    beqz a2, .LBB67_4
7701 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
7702 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
7703 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
7704 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
7705 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7706 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7707 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7708 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
7709 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, m1, tu, ma
7710 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
7711 ; RV64ZVE32F-NEXT:  .LBB67_4: # %else2
7712 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
7713 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
7714 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7715 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
7716 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
7717 ; RV64ZVE32F-NEXT:    bnez a2, .LBB67_12
7718 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
7719 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7720 ; RV64ZVE32F-NEXT:    bnez a2, .LBB67_13
7721 ; RV64ZVE32F-NEXT:  .LBB67_6: # %else8
7722 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7723 ; RV64ZVE32F-NEXT:    bnez a2, .LBB67_14
7724 ; RV64ZVE32F-NEXT:  .LBB67_7: # %else11
7725 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7726 ; RV64ZVE32F-NEXT:    beqz a2, .LBB67_9
7727 ; RV64ZVE32F-NEXT:  .LBB67_8: # %cond.load13
7728 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
7729 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
7730 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7731 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7732 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7733 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7734 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7735 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e16, m1, tu, ma
7736 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 5
7737 ; RV64ZVE32F-NEXT:  .LBB67_9: # %else14
7738 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
7739 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
7740 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
7741 ; RV64ZVE32F-NEXT:    bnez a2, .LBB67_15
7742 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
7743 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7744 ; RV64ZVE32F-NEXT:    bnez a1, .LBB67_16
7745 ; RV64ZVE32F-NEXT:  .LBB67_11: # %else20
7746 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
7747 ; RV64ZVE32F-NEXT:    ret
7748 ; RV64ZVE32F-NEXT:  .LBB67_12: # %cond.load4
7749 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7750 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7751 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7752 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7753 ; RV64ZVE32F-NEXT:    vfmv.s.f v11, fa5
7754 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e16, m1, tu, ma
7755 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 2
7756 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
7757 ; RV64ZVE32F-NEXT:    beqz a2, .LBB67_6
7758 ; RV64ZVE32F-NEXT:  .LBB67_13: # %cond.load7
7759 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
7760 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
7761 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7762 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7763 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7764 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7765 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7766 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, tu, ma
7767 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 3
7768 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
7769 ; RV64ZVE32F-NEXT:    beqz a2, .LBB67_7
7770 ; RV64ZVE32F-NEXT:  .LBB67_14: # %cond.load10
7771 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e16, m1, tu, ma
7772 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
7773 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7774 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7775 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7776 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7777 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 4
7778 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
7779 ; RV64ZVE32F-NEXT:    bnez a2, .LBB67_8
7780 ; RV64ZVE32F-NEXT:    j .LBB67_9
7781 ; RV64ZVE32F-NEXT:  .LBB67_15: # %cond.load16
7782 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
7783 ; RV64ZVE32F-NEXT:    slli a2, a2, 1
7784 ; RV64ZVE32F-NEXT:    add a2, a0, a2
7785 ; RV64ZVE32F-NEXT:    flh fa5, 0(a2)
7786 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
7787 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e16, m1, tu, ma
7788 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 6
7789 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
7790 ; RV64ZVE32F-NEXT:    beqz a1, .LBB67_11
7791 ; RV64ZVE32F-NEXT:  .LBB67_16: # %cond.load19
7792 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
7793 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
7794 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
7795 ; RV64ZVE32F-NEXT:    slli a1, a1, 1
7796 ; RV64ZVE32F-NEXT:    add a0, a0, a1
7797 ; RV64ZVE32F-NEXT:    flh fa5, 0(a0)
7798 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7799 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
7800 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 7
7801 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
7802 ; RV64ZVE32F-NEXT:    ret
7803   %ptrs = getelementptr inbounds half, ptr %base, <8 x i16> %idxs
7804   %v = call <8 x half> @llvm.masked.gather.v8f16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> %m, <8 x half> %passthru)
7805   ret <8 x half> %v
7808 declare <1 x float> @llvm.masked.gather.v1f32.v1p0(<1 x ptr>, i32, <1 x i1>, <1 x float>)
7810 define <1 x float> @mgather_v1f32(<1 x ptr> %ptrs, <1 x i1> %m, <1 x float> %passthru) {
7811 ; RV32V-LABEL: mgather_v1f32:
7812 ; RV32V:       # %bb.0:
7813 ; RV32V-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
7814 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
7815 ; RV32V-NEXT:    vmv1r.v v8, v9
7816 ; RV32V-NEXT:    ret
7818 ; RV64V-LABEL: mgather_v1f32:
7819 ; RV64V:       # %bb.0:
7820 ; RV64V-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
7821 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
7822 ; RV64V-NEXT:    vmv1r.v v8, v9
7823 ; RV64V-NEXT:    ret
7825 ; RV32ZVE32F-LABEL: mgather_v1f32:
7826 ; RV32ZVE32F:       # %bb.0:
7827 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, mu
7828 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
7829 ; RV32ZVE32F-NEXT:    vmv.v.v v8, v9
7830 ; RV32ZVE32F-NEXT:    ret
7832 ; RV64ZVE32F-LABEL: mgather_v1f32:
7833 ; RV64ZVE32F:       # %bb.0:
7834 ; RV64ZVE32F-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
7835 ; RV64ZVE32F-NEXT:    vfirst.m a1, v0
7836 ; RV64ZVE32F-NEXT:    bnez a1, .LBB68_2
7837 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
7838 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
7839 ; RV64ZVE32F-NEXT:    vle32.v v8, (a0)
7840 ; RV64ZVE32F-NEXT:  .LBB68_2: # %else
7841 ; RV64ZVE32F-NEXT:    ret
7842   %v = call <1 x float> @llvm.masked.gather.v1f32.v1p0(<1 x ptr> %ptrs, i32 4, <1 x i1> %m, <1 x float> %passthru)
7843   ret <1 x float> %v
7846 declare <2 x float> @llvm.masked.gather.v2f32.v2p0(<2 x ptr>, i32, <2 x i1>, <2 x float>)
7848 define <2 x float> @mgather_v2f32(<2 x ptr> %ptrs, <2 x i1> %m, <2 x float> %passthru) {
7849 ; RV32V-LABEL: mgather_v2f32:
7850 ; RV32V:       # %bb.0:
7851 ; RV32V-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
7852 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
7853 ; RV32V-NEXT:    vmv1r.v v8, v9
7854 ; RV32V-NEXT:    ret
7856 ; RV64V-LABEL: mgather_v2f32:
7857 ; RV64V:       # %bb.0:
7858 ; RV64V-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
7859 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
7860 ; RV64V-NEXT:    vmv1r.v v8, v9
7861 ; RV64V-NEXT:    ret
7863 ; RV32ZVE32F-LABEL: mgather_v2f32:
7864 ; RV32ZVE32F:       # %bb.0:
7865 ; RV32ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, mu
7866 ; RV32ZVE32F-NEXT:    vluxei32.v v9, (zero), v8, v0.t
7867 ; RV32ZVE32F-NEXT:    vmv.v.v v8, v9
7868 ; RV32ZVE32F-NEXT:    ret
7870 ; RV64ZVE32F-LABEL: mgather_v2f32:
7871 ; RV64ZVE32F:       # %bb.0:
7872 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7873 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
7874 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
7875 ; RV64ZVE32F-NEXT:    bnez a3, .LBB69_3
7876 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
7877 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
7878 ; RV64ZVE32F-NEXT:    bnez a2, .LBB69_4
7879 ; RV64ZVE32F-NEXT:  .LBB69_2: # %else2
7880 ; RV64ZVE32F-NEXT:    ret
7881 ; RV64ZVE32F-NEXT:  .LBB69_3: # %cond.load
7882 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
7883 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
7884 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7885 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
7886 ; RV64ZVE32F-NEXT:    beqz a2, .LBB69_2
7887 ; RV64ZVE32F-NEXT:  .LBB69_4: # %cond.load1
7888 ; RV64ZVE32F-NEXT:    flw fa5, 0(a1)
7889 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7890 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7891 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
7892 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
7893 ; RV64ZVE32F-NEXT:    ret
7894   %v = call <2 x float> @llvm.masked.gather.v2f32.v2p0(<2 x ptr> %ptrs, i32 4, <2 x i1> %m, <2 x float> %passthru)
7895   ret <2 x float> %v
7898 declare <4 x float> @llvm.masked.gather.v4f32.v4p0(<4 x ptr>, i32, <4 x i1>, <4 x float>)
7900 define <4 x float> @mgather_v4f32(<4 x ptr> %ptrs, <4 x i1> %m, <4 x float> %passthru) {
7901 ; RV32-LABEL: mgather_v4f32:
7902 ; RV32:       # %bb.0:
7903 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
7904 ; RV32-NEXT:    vluxei32.v v9, (zero), v8, v0.t
7905 ; RV32-NEXT:    vmv.v.v v8, v9
7906 ; RV32-NEXT:    ret
7908 ; RV64V-LABEL: mgather_v4f32:
7909 ; RV64V:       # %bb.0:
7910 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
7911 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8, v0.t
7912 ; RV64V-NEXT:    vmv.v.v v8, v10
7913 ; RV64V-NEXT:    ret
7915 ; RV64ZVE32F-LABEL: mgather_v4f32:
7916 ; RV64ZVE32F:       # %bb.0:
7917 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
7918 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
7919 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
7920 ; RV64ZVE32F-NEXT:    bnez a2, .LBB70_5
7921 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
7922 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7923 ; RV64ZVE32F-NEXT:    bnez a2, .LBB70_6
7924 ; RV64ZVE32F-NEXT:  .LBB70_2: # %else2
7925 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7926 ; RV64ZVE32F-NEXT:    bnez a2, .LBB70_7
7927 ; RV64ZVE32F-NEXT:  .LBB70_3: # %else5
7928 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
7929 ; RV64ZVE32F-NEXT:    bnez a1, .LBB70_8
7930 ; RV64ZVE32F-NEXT:  .LBB70_4: # %else8
7931 ; RV64ZVE32F-NEXT:    ret
7932 ; RV64ZVE32F-NEXT:  .LBB70_5: # %cond.load
7933 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
7934 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
7935 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
7936 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
7937 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
7938 ; RV64ZVE32F-NEXT:    beqz a2, .LBB70_2
7939 ; RV64ZVE32F-NEXT:  .LBB70_6: # %cond.load1
7940 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
7941 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
7942 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
7943 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7944 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
7945 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 1
7946 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
7947 ; RV64ZVE32F-NEXT:    beqz a2, .LBB70_3
7948 ; RV64ZVE32F-NEXT:  .LBB70_7: # %cond.load4
7949 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
7950 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
7951 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
7952 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7953 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 2
7954 ; RV64ZVE32F-NEXT:    andi a1, a1, 8
7955 ; RV64ZVE32F-NEXT:    beqz a1, .LBB70_4
7956 ; RV64ZVE32F-NEXT:  .LBB70_8: # %cond.load7
7957 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
7958 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
7959 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
7960 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
7961 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v9, 3
7962 ; RV64ZVE32F-NEXT:    ret
7963   %v = call <4 x float> @llvm.masked.gather.v4f32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> %m, <4 x float> %passthru)
7964   ret <4 x float> %v
7967 define <4 x float> @mgather_truemask_v4f32(<4 x ptr> %ptrs, <4 x float> %passthru) {
7968 ; RV32-LABEL: mgather_truemask_v4f32:
7969 ; RV32:       # %bb.0:
7970 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
7971 ; RV32-NEXT:    vluxei32.v v8, (zero), v8
7972 ; RV32-NEXT:    ret
7974 ; RV64V-LABEL: mgather_truemask_v4f32:
7975 ; RV64V:       # %bb.0:
7976 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
7977 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8
7978 ; RV64V-NEXT:    vmv.v.v v8, v10
7979 ; RV64V-NEXT:    ret
7981 ; RV64ZVE32F-LABEL: mgather_truemask_v4f32:
7982 ; RV64ZVE32F:       # %bb.0:
7983 ; RV64ZVE32F-NEXT:    ld a1, 0(a0)
7984 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
7985 ; RV64ZVE32F-NEXT:    ld a3, 16(a0)
7986 ; RV64ZVE32F-NEXT:    ld a0, 24(a0)
7987 ; RV64ZVE32F-NEXT:    flw fa5, 0(a1)
7988 ; RV64ZVE32F-NEXT:    flw fa4, 0(a2)
7989 ; RV64ZVE32F-NEXT:    flw fa3, 0(a3)
7990 ; RV64ZVE32F-NEXT:    flw fa2, 0(a0)
7991 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
7992 ; RV64ZVE32F-NEXT:    vfmv.v.f v8, fa5
7993 ; RV64ZVE32F-NEXT:    vfslide1down.vf v8, v8, fa4
7994 ; RV64ZVE32F-NEXT:    vfslide1down.vf v8, v8, fa3
7995 ; RV64ZVE32F-NEXT:    vfslide1down.vf v8, v8, fa2
7996 ; RV64ZVE32F-NEXT:    ret
7997   %v = call <4 x float> @llvm.masked.gather.v4f32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 1), <4 x float> %passthru)
7998   ret <4 x float> %v
8001 define <4 x float> @mgather_falsemask_v4f32(<4 x ptr> %ptrs, <4 x float> %passthru) {
8002 ; RV32-LABEL: mgather_falsemask_v4f32:
8003 ; RV32:       # %bb.0:
8004 ; RV32-NEXT:    vmv1r.v v8, v9
8005 ; RV32-NEXT:    ret
8007 ; RV64V-LABEL: mgather_falsemask_v4f32:
8008 ; RV64V:       # %bb.0:
8009 ; RV64V-NEXT:    vmv1r.v v8, v10
8010 ; RV64V-NEXT:    ret
8012 ; RV64ZVE32F-LABEL: mgather_falsemask_v4f32:
8013 ; RV64ZVE32F:       # %bb.0:
8014 ; RV64ZVE32F-NEXT:    ret
8015   %v = call <4 x float> @llvm.masked.gather.v4f32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> zeroinitializer, <4 x float> %passthru)
8016   ret <4 x float> %v
8019 declare <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr>, i32, <8 x i1>, <8 x float>)
8021 define <8 x float> @mgather_v8f32(<8 x ptr> %ptrs, <8 x i1> %m, <8 x float> %passthru) {
8022 ; RV32-LABEL: mgather_v8f32:
8023 ; RV32:       # %bb.0:
8024 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
8025 ; RV32-NEXT:    vluxei32.v v10, (zero), v8, v0.t
8026 ; RV32-NEXT:    vmv.v.v v8, v10
8027 ; RV32-NEXT:    ret
8029 ; RV64V-LABEL: mgather_v8f32:
8030 ; RV64V:       # %bb.0:
8031 ; RV64V-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
8032 ; RV64V-NEXT:    vluxei64.v v12, (zero), v8, v0.t
8033 ; RV64V-NEXT:    vmv.v.v v8, v12
8034 ; RV64V-NEXT:    ret
8036 ; RV64ZVE32F-LABEL: mgather_v8f32:
8037 ; RV64ZVE32F:       # %bb.0:
8038 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8039 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
8040 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
8041 ; RV64ZVE32F-NEXT:    bnez a2, .LBB73_9
8042 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
8043 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
8044 ; RV64ZVE32F-NEXT:    bnez a2, .LBB73_10
8045 ; RV64ZVE32F-NEXT:  .LBB73_2: # %else2
8046 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
8047 ; RV64ZVE32F-NEXT:    bnez a2, .LBB73_11
8048 ; RV64ZVE32F-NEXT:  .LBB73_3: # %else5
8049 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8050 ; RV64ZVE32F-NEXT:    bnez a2, .LBB73_12
8051 ; RV64ZVE32F-NEXT:  .LBB73_4: # %else8
8052 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8053 ; RV64ZVE32F-NEXT:    bnez a2, .LBB73_13
8054 ; RV64ZVE32F-NEXT:  .LBB73_5: # %else11
8055 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8056 ; RV64ZVE32F-NEXT:    bnez a2, .LBB73_14
8057 ; RV64ZVE32F-NEXT:  .LBB73_6: # %else14
8058 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
8059 ; RV64ZVE32F-NEXT:    bnez a2, .LBB73_15
8060 ; RV64ZVE32F-NEXT:  .LBB73_7: # %else17
8061 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8062 ; RV64ZVE32F-NEXT:    bnez a1, .LBB73_16
8063 ; RV64ZVE32F-NEXT:  .LBB73_8: # %else20
8064 ; RV64ZVE32F-NEXT:    ret
8065 ; RV64ZVE32F-NEXT:  .LBB73_9: # %cond.load
8066 ; RV64ZVE32F-NEXT:    ld a2, 0(a0)
8067 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8068 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
8069 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8070 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
8071 ; RV64ZVE32F-NEXT:    beqz a2, .LBB73_2
8072 ; RV64ZVE32F-NEXT:  .LBB73_10: # %cond.load1
8073 ; RV64ZVE32F-NEXT:    ld a2, 8(a0)
8074 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8075 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
8076 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8077 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
8078 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 1
8079 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
8080 ; RV64ZVE32F-NEXT:    beqz a2, .LBB73_3
8081 ; RV64ZVE32F-NEXT:  .LBB73_11: # %cond.load4
8082 ; RV64ZVE32F-NEXT:    ld a2, 16(a0)
8083 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8084 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
8085 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8086 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 2
8087 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8088 ; RV64ZVE32F-NEXT:    beqz a2, .LBB73_4
8089 ; RV64ZVE32F-NEXT:  .LBB73_12: # %cond.load7
8090 ; RV64ZVE32F-NEXT:    ld a2, 24(a0)
8091 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8092 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
8093 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8094 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 3
8095 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8096 ; RV64ZVE32F-NEXT:    beqz a2, .LBB73_5
8097 ; RV64ZVE32F-NEXT:  .LBB73_13: # %cond.load10
8098 ; RV64ZVE32F-NEXT:    ld a2, 32(a0)
8099 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8100 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
8101 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8102 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 4
8103 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8104 ; RV64ZVE32F-NEXT:    beqz a2, .LBB73_6
8105 ; RV64ZVE32F-NEXT:  .LBB73_14: # %cond.load13
8106 ; RV64ZVE32F-NEXT:    ld a2, 40(a0)
8107 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8108 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
8109 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8110 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 5
8111 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
8112 ; RV64ZVE32F-NEXT:    beqz a2, .LBB73_7
8113 ; RV64ZVE32F-NEXT:  .LBB73_15: # %cond.load16
8114 ; RV64ZVE32F-NEXT:    ld a2, 48(a0)
8115 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8116 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
8117 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8118 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 6
8119 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8120 ; RV64ZVE32F-NEXT:    beqz a1, .LBB73_8
8121 ; RV64ZVE32F-NEXT:  .LBB73_16: # %cond.load19
8122 ; RV64ZVE32F-NEXT:    ld a0, 56(a0)
8123 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
8124 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
8125 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8126 ; RV64ZVE32F-NEXT:    vslideup.vi v8, v10, 7
8127 ; RV64ZVE32F-NEXT:    ret
8128   %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru)
8129   ret <8 x float> %v
8132 define <8 x float> @mgather_baseidx_v8i8_v8f32(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x float> %passthru) {
8133 ; RV32-LABEL: mgather_baseidx_v8i8_v8f32:
8134 ; RV32:       # %bb.0:
8135 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
8136 ; RV32-NEXT:    vsext.vf4 v12, v8
8137 ; RV32-NEXT:    vsll.vi v8, v12, 2
8138 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
8139 ; RV32-NEXT:    vmv.v.v v8, v10
8140 ; RV32-NEXT:    ret
8142 ; RV64V-LABEL: mgather_baseidx_v8i8_v8f32:
8143 ; RV64V:       # %bb.0:
8144 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
8145 ; RV64V-NEXT:    vsext.vf8 v12, v8
8146 ; RV64V-NEXT:    vsll.vi v12, v12, 2
8147 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
8148 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
8149 ; RV64V-NEXT:    vmv.v.v v8, v10
8150 ; RV64V-NEXT:    ret
8152 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8_v8f32:
8153 ; RV64ZVE32F:       # %bb.0:
8154 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8155 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
8156 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
8157 ; RV64ZVE32F-NEXT:    beqz a2, .LBB74_2
8158 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
8159 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8160 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8161 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8162 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8163 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
8164 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8165 ; RV64ZVE32F-NEXT:  .LBB74_2: # %else
8166 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
8167 ; RV64ZVE32F-NEXT:    beqz a2, .LBB74_4
8168 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
8169 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8170 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
8171 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8172 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8173 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8174 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8175 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8176 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
8177 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
8178 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
8179 ; RV64ZVE32F-NEXT:  .LBB74_4: # %else2
8180 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
8181 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
8182 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
8183 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
8184 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
8185 ; RV64ZVE32F-NEXT:    bnez a2, .LBB74_12
8186 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
8187 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8188 ; RV64ZVE32F-NEXT:    bnez a2, .LBB74_13
8189 ; RV64ZVE32F-NEXT:  .LBB74_6: # %else8
8190 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8191 ; RV64ZVE32F-NEXT:    bnez a2, .LBB74_14
8192 ; RV64ZVE32F-NEXT:  .LBB74_7: # %else11
8193 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8194 ; RV64ZVE32F-NEXT:    beqz a2, .LBB74_9
8195 ; RV64ZVE32F-NEXT:  .LBB74_8: # %cond.load13
8196 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8197 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
8198 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8199 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8200 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8201 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8202 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8203 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8204 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
8205 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
8206 ; RV64ZVE32F-NEXT:  .LBB74_9: # %else14
8207 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
8208 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
8209 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
8210 ; RV64ZVE32F-NEXT:    bnez a2, .LBB74_15
8211 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
8212 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8213 ; RV64ZVE32F-NEXT:    bnez a1, .LBB74_16
8214 ; RV64ZVE32F-NEXT:  .LBB74_11: # %else20
8215 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8216 ; RV64ZVE32F-NEXT:    ret
8217 ; RV64ZVE32F-NEXT:  .LBB74_12: # %cond.load4
8218 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8219 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8220 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8221 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8222 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8223 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8224 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
8225 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
8226 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8227 ; RV64ZVE32F-NEXT:    beqz a2, .LBB74_6
8228 ; RV64ZVE32F-NEXT:  .LBB74_13: # %cond.load7
8229 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8230 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8231 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8232 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8233 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8234 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8235 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8236 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8237 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
8238 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
8239 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8240 ; RV64ZVE32F-NEXT:    beqz a2, .LBB74_7
8241 ; RV64ZVE32F-NEXT:  .LBB74_14: # %cond.load10
8242 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8243 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8244 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8245 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8246 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8247 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
8248 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8249 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
8250 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
8251 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8252 ; RV64ZVE32F-NEXT:    bnez a2, .LBB74_8
8253 ; RV64ZVE32F-NEXT:    j .LBB74_9
8254 ; RV64ZVE32F-NEXT:  .LBB74_15: # %cond.load16
8255 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8256 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8257 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8258 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8259 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8260 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8261 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
8262 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
8263 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8264 ; RV64ZVE32F-NEXT:    beqz a1, .LBB74_11
8265 ; RV64ZVE32F-NEXT:  .LBB74_16: # %cond.load19
8266 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8267 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8268 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
8269 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
8270 ; RV64ZVE32F-NEXT:    add a0, a0, a1
8271 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
8272 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8273 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8274 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
8275 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
8276 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8277 ; RV64ZVE32F-NEXT:    ret
8278   %ptrs = getelementptr inbounds float, ptr %base, <8 x i8> %idxs
8279   %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru)
8280   ret <8 x float> %v
8283 define <8 x float> @mgather_baseidx_sext_v8i8_v8f32(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x float> %passthru) {
8284 ; RV32-LABEL: mgather_baseidx_sext_v8i8_v8f32:
8285 ; RV32:       # %bb.0:
8286 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
8287 ; RV32-NEXT:    vsext.vf4 v12, v8
8288 ; RV32-NEXT:    vsll.vi v8, v12, 2
8289 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
8290 ; RV32-NEXT:    vmv.v.v v8, v10
8291 ; RV32-NEXT:    ret
8293 ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8f32:
8294 ; RV64V:       # %bb.0:
8295 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
8296 ; RV64V-NEXT:    vsext.vf8 v12, v8
8297 ; RV64V-NEXT:    vsll.vi v12, v12, 2
8298 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
8299 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
8300 ; RV64V-NEXT:    vmv.v.v v8, v10
8301 ; RV64V-NEXT:    ret
8303 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8f32:
8304 ; RV64ZVE32F:       # %bb.0:
8305 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8306 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
8307 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
8308 ; RV64ZVE32F-NEXT:    beqz a2, .LBB75_2
8309 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
8310 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8311 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8312 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8313 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8314 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
8315 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8316 ; RV64ZVE32F-NEXT:  .LBB75_2: # %else
8317 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
8318 ; RV64ZVE32F-NEXT:    beqz a2, .LBB75_4
8319 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
8320 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8321 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
8322 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8323 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8324 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8325 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8326 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8327 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
8328 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
8329 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
8330 ; RV64ZVE32F-NEXT:  .LBB75_4: # %else2
8331 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
8332 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
8333 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
8334 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
8335 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
8336 ; RV64ZVE32F-NEXT:    bnez a2, .LBB75_12
8337 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
8338 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8339 ; RV64ZVE32F-NEXT:    bnez a2, .LBB75_13
8340 ; RV64ZVE32F-NEXT:  .LBB75_6: # %else8
8341 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8342 ; RV64ZVE32F-NEXT:    bnez a2, .LBB75_14
8343 ; RV64ZVE32F-NEXT:  .LBB75_7: # %else11
8344 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8345 ; RV64ZVE32F-NEXT:    beqz a2, .LBB75_9
8346 ; RV64ZVE32F-NEXT:  .LBB75_8: # %cond.load13
8347 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8348 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
8349 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8350 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8351 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8352 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8353 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8354 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8355 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
8356 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
8357 ; RV64ZVE32F-NEXT:  .LBB75_9: # %else14
8358 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
8359 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
8360 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
8361 ; RV64ZVE32F-NEXT:    bnez a2, .LBB75_15
8362 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
8363 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8364 ; RV64ZVE32F-NEXT:    bnez a1, .LBB75_16
8365 ; RV64ZVE32F-NEXT:  .LBB75_11: # %else20
8366 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8367 ; RV64ZVE32F-NEXT:    ret
8368 ; RV64ZVE32F-NEXT:  .LBB75_12: # %cond.load4
8369 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8370 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8371 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8372 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8373 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8374 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8375 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
8376 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
8377 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8378 ; RV64ZVE32F-NEXT:    beqz a2, .LBB75_6
8379 ; RV64ZVE32F-NEXT:  .LBB75_13: # %cond.load7
8380 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8381 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8382 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8383 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8384 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8385 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8386 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8387 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8388 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
8389 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
8390 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8391 ; RV64ZVE32F-NEXT:    beqz a2, .LBB75_7
8392 ; RV64ZVE32F-NEXT:  .LBB75_14: # %cond.load10
8393 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8394 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8395 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8396 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8397 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8398 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
8399 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8400 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
8401 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
8402 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8403 ; RV64ZVE32F-NEXT:    bnez a2, .LBB75_8
8404 ; RV64ZVE32F-NEXT:    j .LBB75_9
8405 ; RV64ZVE32F-NEXT:  .LBB75_15: # %cond.load16
8406 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8407 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8408 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8409 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8410 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8411 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8412 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
8413 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
8414 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8415 ; RV64ZVE32F-NEXT:    beqz a1, .LBB75_11
8416 ; RV64ZVE32F-NEXT:  .LBB75_16: # %cond.load19
8417 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8418 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8419 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
8420 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
8421 ; RV64ZVE32F-NEXT:    add a0, a0, a1
8422 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
8423 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8424 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8425 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
8426 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
8427 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8428 ; RV64ZVE32F-NEXT:    ret
8429   %eidxs = sext <8 x i8> %idxs to <8 x i32>
8430   %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %eidxs
8431   %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru)
8432   ret <8 x float> %v
8435 define <8 x float> @mgather_baseidx_zext_v8i8_v8f32(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x float> %passthru) {
8436 ; RV32-LABEL: mgather_baseidx_zext_v8i8_v8f32:
8437 ; RV32:       # %bb.0:
8438 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
8439 ; RV32-NEXT:    vzext.vf2 v9, v8
8440 ; RV32-NEXT:    vsll.vi v8, v9, 2
8441 ; RV32-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
8442 ; RV32-NEXT:    vluxei16.v v10, (a0), v8, v0.t
8443 ; RV32-NEXT:    vmv.v.v v8, v10
8444 ; RV32-NEXT:    ret
8446 ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8f32:
8447 ; RV64V:       # %bb.0:
8448 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
8449 ; RV64V-NEXT:    vzext.vf2 v9, v8
8450 ; RV64V-NEXT:    vsll.vi v8, v9, 2
8451 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
8452 ; RV64V-NEXT:    vluxei16.v v10, (a0), v8, v0.t
8453 ; RV64V-NEXT:    vmv.v.v v8, v10
8454 ; RV64V-NEXT:    ret
8456 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8f32:
8457 ; RV64ZVE32F:       # %bb.0:
8458 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8459 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
8460 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
8461 ; RV64ZVE32F-NEXT:    beqz a2, .LBB76_2
8462 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
8463 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8464 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
8465 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8466 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8467 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8468 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
8469 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8470 ; RV64ZVE32F-NEXT:  .LBB76_2: # %else
8471 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
8472 ; RV64ZVE32F-NEXT:    beqz a2, .LBB76_4
8473 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
8474 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8475 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
8476 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8477 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
8478 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8479 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8480 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8481 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8482 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
8483 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
8484 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
8485 ; RV64ZVE32F-NEXT:  .LBB76_4: # %else2
8486 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
8487 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
8488 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
8489 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
8490 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
8491 ; RV64ZVE32F-NEXT:    bnez a2, .LBB76_12
8492 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
8493 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8494 ; RV64ZVE32F-NEXT:    bnez a2, .LBB76_13
8495 ; RV64ZVE32F-NEXT:  .LBB76_6: # %else8
8496 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8497 ; RV64ZVE32F-NEXT:    bnez a2, .LBB76_14
8498 ; RV64ZVE32F-NEXT:  .LBB76_7: # %else11
8499 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8500 ; RV64ZVE32F-NEXT:    beqz a2, .LBB76_9
8501 ; RV64ZVE32F-NEXT:  .LBB76_8: # %cond.load13
8502 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8503 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
8504 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8505 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
8506 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8507 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8508 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8509 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8510 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8511 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
8512 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
8513 ; RV64ZVE32F-NEXT:  .LBB76_9: # %else14
8514 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
8515 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
8516 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
8517 ; RV64ZVE32F-NEXT:    bnez a2, .LBB76_15
8518 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
8519 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8520 ; RV64ZVE32F-NEXT:    bnez a1, .LBB76_16
8521 ; RV64ZVE32F-NEXT:  .LBB76_11: # %else20
8522 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8523 ; RV64ZVE32F-NEXT:    ret
8524 ; RV64ZVE32F-NEXT:  .LBB76_12: # %cond.load4
8525 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8526 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
8527 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8528 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8529 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8530 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8531 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8532 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
8533 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
8534 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8535 ; RV64ZVE32F-NEXT:    beqz a2, .LBB76_6
8536 ; RV64ZVE32F-NEXT:  .LBB76_13: # %cond.load7
8537 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8538 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8539 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8540 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
8541 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8542 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8543 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8544 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8545 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8546 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
8547 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
8548 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8549 ; RV64ZVE32F-NEXT:    beqz a2, .LBB76_7
8550 ; RV64ZVE32F-NEXT:  .LBB76_14: # %cond.load10
8551 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8552 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8553 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
8554 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8555 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8556 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8557 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
8558 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8559 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
8560 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
8561 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8562 ; RV64ZVE32F-NEXT:    bnez a2, .LBB76_8
8563 ; RV64ZVE32F-NEXT:    j .LBB76_9
8564 ; RV64ZVE32F-NEXT:  .LBB76_15: # %cond.load16
8565 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8566 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
8567 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8568 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8569 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8570 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8571 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8572 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
8573 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
8574 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8575 ; RV64ZVE32F-NEXT:    beqz a1, .LBB76_11
8576 ; RV64ZVE32F-NEXT:  .LBB76_16: # %cond.load19
8577 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
8578 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8579 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
8580 ; RV64ZVE32F-NEXT:    andi a1, a1, 255
8581 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
8582 ; RV64ZVE32F-NEXT:    add a0, a0, a1
8583 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
8584 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8585 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8586 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
8587 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
8588 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8589 ; RV64ZVE32F-NEXT:    ret
8590   %eidxs = zext <8 x i8> %idxs to <8 x i32>
8591   %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %eidxs
8592   %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru)
8593   ret <8 x float> %v
8596 define <8 x float> @mgather_baseidx_v8i16_v8f32(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x float> %passthru) {
8597 ; RV32-LABEL: mgather_baseidx_v8i16_v8f32:
8598 ; RV32:       # %bb.0:
8599 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
8600 ; RV32-NEXT:    vsext.vf2 v12, v8
8601 ; RV32-NEXT:    vsll.vi v8, v12, 2
8602 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
8603 ; RV32-NEXT:    vmv.v.v v8, v10
8604 ; RV32-NEXT:    ret
8606 ; RV64V-LABEL: mgather_baseidx_v8i16_v8f32:
8607 ; RV64V:       # %bb.0:
8608 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
8609 ; RV64V-NEXT:    vsext.vf4 v12, v8
8610 ; RV64V-NEXT:    vsll.vi v12, v12, 2
8611 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
8612 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
8613 ; RV64V-NEXT:    vmv.v.v v8, v10
8614 ; RV64V-NEXT:    ret
8616 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i16_v8f32:
8617 ; RV64ZVE32F:       # %bb.0:
8618 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8619 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
8620 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
8621 ; RV64ZVE32F-NEXT:    beqz a2, .LBB77_2
8622 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
8623 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
8624 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8625 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8626 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8627 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8628 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
8629 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8630 ; RV64ZVE32F-NEXT:  .LBB77_2: # %else
8631 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
8632 ; RV64ZVE32F-NEXT:    beqz a2, .LBB77_4
8633 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
8634 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8635 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
8636 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8637 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8638 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8639 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8640 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8641 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
8642 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
8643 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
8644 ; RV64ZVE32F-NEXT:  .LBB77_4: # %else2
8645 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
8646 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
8647 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
8648 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
8649 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
8650 ; RV64ZVE32F-NEXT:    bnez a2, .LBB77_12
8651 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
8652 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8653 ; RV64ZVE32F-NEXT:    bnez a2, .LBB77_13
8654 ; RV64ZVE32F-NEXT:  .LBB77_6: # %else8
8655 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8656 ; RV64ZVE32F-NEXT:    bnez a2, .LBB77_14
8657 ; RV64ZVE32F-NEXT:  .LBB77_7: # %else11
8658 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8659 ; RV64ZVE32F-NEXT:    beqz a2, .LBB77_9
8660 ; RV64ZVE32F-NEXT:  .LBB77_8: # %cond.load13
8661 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8662 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
8663 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8664 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8665 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8666 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8667 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8668 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8669 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
8670 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
8671 ; RV64ZVE32F-NEXT:  .LBB77_9: # %else14
8672 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
8673 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
8674 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
8675 ; RV64ZVE32F-NEXT:    bnez a2, .LBB77_15
8676 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
8677 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8678 ; RV64ZVE32F-NEXT:    bnez a1, .LBB77_16
8679 ; RV64ZVE32F-NEXT:  .LBB77_11: # %else20
8680 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8681 ; RV64ZVE32F-NEXT:    ret
8682 ; RV64ZVE32F-NEXT:  .LBB77_12: # %cond.load4
8683 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8684 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8685 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8686 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8687 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8688 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8689 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
8690 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
8691 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8692 ; RV64ZVE32F-NEXT:    beqz a2, .LBB77_6
8693 ; RV64ZVE32F-NEXT:  .LBB77_13: # %cond.load7
8694 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8695 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8696 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8697 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8698 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8699 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8700 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8701 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8702 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
8703 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
8704 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8705 ; RV64ZVE32F-NEXT:    beqz a2, .LBB77_7
8706 ; RV64ZVE32F-NEXT:  .LBB77_14: # %cond.load10
8707 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
8708 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8709 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8710 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8711 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8712 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
8713 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8714 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
8715 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
8716 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8717 ; RV64ZVE32F-NEXT:    bnez a2, .LBB77_8
8718 ; RV64ZVE32F-NEXT:    j .LBB77_9
8719 ; RV64ZVE32F-NEXT:  .LBB77_15: # %cond.load16
8720 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8721 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8722 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8723 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8724 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8725 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8726 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
8727 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
8728 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8729 ; RV64ZVE32F-NEXT:    beqz a1, .LBB77_11
8730 ; RV64ZVE32F-NEXT:  .LBB77_16: # %cond.load19
8731 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8732 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8733 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
8734 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
8735 ; RV64ZVE32F-NEXT:    add a0, a0, a1
8736 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
8737 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8738 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8739 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
8740 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
8741 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8742 ; RV64ZVE32F-NEXT:    ret
8743   %ptrs = getelementptr inbounds float, ptr %base, <8 x i16> %idxs
8744   %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru)
8745   ret <8 x float> %v
8748 define <8 x float> @mgather_baseidx_sext_v8i16_v8f32(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x float> %passthru) {
8749 ; RV32-LABEL: mgather_baseidx_sext_v8i16_v8f32:
8750 ; RV32:       # %bb.0:
8751 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
8752 ; RV32-NEXT:    vsext.vf2 v12, v8
8753 ; RV32-NEXT:    vsll.vi v8, v12, 2
8754 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
8755 ; RV32-NEXT:    vmv.v.v v8, v10
8756 ; RV32-NEXT:    ret
8758 ; RV64V-LABEL: mgather_baseidx_sext_v8i16_v8f32:
8759 ; RV64V:       # %bb.0:
8760 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
8761 ; RV64V-NEXT:    vsext.vf4 v12, v8
8762 ; RV64V-NEXT:    vsll.vi v12, v12, 2
8763 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
8764 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
8765 ; RV64V-NEXT:    vmv.v.v v8, v10
8766 ; RV64V-NEXT:    ret
8768 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8f32:
8769 ; RV64ZVE32F:       # %bb.0:
8770 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8771 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
8772 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
8773 ; RV64ZVE32F-NEXT:    beqz a2, .LBB78_2
8774 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
8775 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
8776 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8777 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8778 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8779 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8780 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
8781 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8782 ; RV64ZVE32F-NEXT:  .LBB78_2: # %else
8783 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
8784 ; RV64ZVE32F-NEXT:    beqz a2, .LBB78_4
8785 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
8786 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8787 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
8788 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8789 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8790 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8791 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8792 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8793 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
8794 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
8795 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
8796 ; RV64ZVE32F-NEXT:  .LBB78_4: # %else2
8797 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
8798 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
8799 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
8800 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
8801 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
8802 ; RV64ZVE32F-NEXT:    bnez a2, .LBB78_12
8803 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
8804 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8805 ; RV64ZVE32F-NEXT:    bnez a2, .LBB78_13
8806 ; RV64ZVE32F-NEXT:  .LBB78_6: # %else8
8807 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8808 ; RV64ZVE32F-NEXT:    bnez a2, .LBB78_14
8809 ; RV64ZVE32F-NEXT:  .LBB78_7: # %else11
8810 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8811 ; RV64ZVE32F-NEXT:    beqz a2, .LBB78_9
8812 ; RV64ZVE32F-NEXT:  .LBB78_8: # %cond.load13
8813 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8814 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
8815 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8816 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8817 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8818 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8819 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8820 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8821 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
8822 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
8823 ; RV64ZVE32F-NEXT:  .LBB78_9: # %else14
8824 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
8825 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
8826 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
8827 ; RV64ZVE32F-NEXT:    bnez a2, .LBB78_15
8828 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
8829 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8830 ; RV64ZVE32F-NEXT:    bnez a1, .LBB78_16
8831 ; RV64ZVE32F-NEXT:  .LBB78_11: # %else20
8832 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8833 ; RV64ZVE32F-NEXT:    ret
8834 ; RV64ZVE32F-NEXT:  .LBB78_12: # %cond.load4
8835 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8836 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8837 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8838 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8839 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8840 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8841 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
8842 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
8843 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
8844 ; RV64ZVE32F-NEXT:    beqz a2, .LBB78_6
8845 ; RV64ZVE32F-NEXT:  .LBB78_13: # %cond.load7
8846 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8847 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8848 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8849 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8850 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8851 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8852 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8853 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8854 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
8855 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
8856 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
8857 ; RV64ZVE32F-NEXT:    beqz a2, .LBB78_7
8858 ; RV64ZVE32F-NEXT:  .LBB78_14: # %cond.load10
8859 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
8860 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
8861 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8862 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8863 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8864 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
8865 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8866 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
8867 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
8868 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
8869 ; RV64ZVE32F-NEXT:    bnez a2, .LBB78_8
8870 ; RV64ZVE32F-NEXT:    j .LBB78_9
8871 ; RV64ZVE32F-NEXT:  .LBB78_15: # %cond.load16
8872 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
8873 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
8874 ; RV64ZVE32F-NEXT:    add a2, a0, a2
8875 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
8876 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8877 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8878 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
8879 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
8880 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
8881 ; RV64ZVE32F-NEXT:    beqz a1, .LBB78_11
8882 ; RV64ZVE32F-NEXT:  .LBB78_16: # %cond.load19
8883 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8884 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
8885 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
8886 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
8887 ; RV64ZVE32F-NEXT:    add a0, a0, a1
8888 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
8889 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8890 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8891 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
8892 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
8893 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8894 ; RV64ZVE32F-NEXT:    ret
8895   %eidxs = sext <8 x i16> %idxs to <8 x i32>
8896   %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %eidxs
8897   %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru)
8898   ret <8 x float> %v
8901 define <8 x float> @mgather_baseidx_zext_v8i16_v8f32(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x float> %passthru) {
8902 ; RV32-LABEL: mgather_baseidx_zext_v8i16_v8f32:
8903 ; RV32:       # %bb.0:
8904 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
8905 ; RV32-NEXT:    vzext.vf2 v12, v8
8906 ; RV32-NEXT:    vsll.vi v8, v12, 2
8907 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
8908 ; RV32-NEXT:    vmv.v.v v8, v10
8909 ; RV32-NEXT:    ret
8911 ; RV64V-LABEL: mgather_baseidx_zext_v8i16_v8f32:
8912 ; RV64V:       # %bb.0:
8913 ; RV64V-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
8914 ; RV64V-NEXT:    vzext.vf2 v12, v8
8915 ; RV64V-NEXT:    vsll.vi v8, v12, 2
8916 ; RV64V-NEXT:    vluxei32.v v10, (a0), v8, v0.t
8917 ; RV64V-NEXT:    vmv.v.v v8, v10
8918 ; RV64V-NEXT:    ret
8920 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8f32:
8921 ; RV64ZVE32F:       # %bb.0:
8922 ; RV64ZVE32F-NEXT:    lui a1, 16
8923 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
8924 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
8925 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
8926 ; RV64ZVE32F-NEXT:    addiw a1, a1, -1
8927 ; RV64ZVE32F-NEXT:    beqz a3, .LBB79_2
8928 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
8929 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
8930 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
8931 ; RV64ZVE32F-NEXT:    and a3, a3, a1
8932 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
8933 ; RV64ZVE32F-NEXT:    add a3, a0, a3
8934 ; RV64ZVE32F-NEXT:    flw fa5, 0(a3)
8935 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
8936 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
8937 ; RV64ZVE32F-NEXT:  .LBB79_2: # %else
8938 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
8939 ; RV64ZVE32F-NEXT:    beqz a3, .LBB79_4
8940 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
8941 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8942 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
8943 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
8944 ; RV64ZVE32F-NEXT:    and a3, a3, a1
8945 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
8946 ; RV64ZVE32F-NEXT:    add a3, a0, a3
8947 ; RV64ZVE32F-NEXT:    flw fa5, 0(a3)
8948 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8949 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
8950 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
8951 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 1
8952 ; RV64ZVE32F-NEXT:  .LBB79_4: # %else2
8953 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
8954 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
8955 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
8956 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
8957 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
8958 ; RV64ZVE32F-NEXT:    bnez a3, .LBB79_12
8959 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
8960 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
8961 ; RV64ZVE32F-NEXT:    bnez a3, .LBB79_13
8962 ; RV64ZVE32F-NEXT:  .LBB79_6: # %else8
8963 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
8964 ; RV64ZVE32F-NEXT:    bnez a3, .LBB79_14
8965 ; RV64ZVE32F-NEXT:  .LBB79_7: # %else11
8966 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
8967 ; RV64ZVE32F-NEXT:    beqz a3, .LBB79_9
8968 ; RV64ZVE32F-NEXT:  .LBB79_8: # %cond.load13
8969 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
8970 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
8971 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
8972 ; RV64ZVE32F-NEXT:    and a3, a3, a1
8973 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
8974 ; RV64ZVE32F-NEXT:    add a3, a0, a3
8975 ; RV64ZVE32F-NEXT:    flw fa5, 0(a3)
8976 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8977 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
8978 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
8979 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
8980 ; RV64ZVE32F-NEXT:  .LBB79_9: # %else14
8981 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
8982 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
8983 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
8984 ; RV64ZVE32F-NEXT:    bnez a3, .LBB79_15
8985 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
8986 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
8987 ; RV64ZVE32F-NEXT:    bnez a2, .LBB79_16
8988 ; RV64ZVE32F-NEXT:  .LBB79_11: # %else20
8989 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
8990 ; RV64ZVE32F-NEXT:    ret
8991 ; RV64ZVE32F-NEXT:  .LBB79_12: # %cond.load4
8992 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
8993 ; RV64ZVE32F-NEXT:    and a3, a3, a1
8994 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
8995 ; RV64ZVE32F-NEXT:    add a3, a0, a3
8996 ; RV64ZVE32F-NEXT:    flw fa5, 0(a3)
8997 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
8998 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
8999 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
9000 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 2
9001 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
9002 ; RV64ZVE32F-NEXT:    beqz a3, .LBB79_6
9003 ; RV64ZVE32F-NEXT:  .LBB79_13: # %cond.load7
9004 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
9005 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
9006 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
9007 ; RV64ZVE32F-NEXT:    and a3, a3, a1
9008 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
9009 ; RV64ZVE32F-NEXT:    add a3, a0, a3
9010 ; RV64ZVE32F-NEXT:    flw fa5, 0(a3)
9011 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
9012 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
9013 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
9014 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
9015 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
9016 ; RV64ZVE32F-NEXT:    beqz a3, .LBB79_7
9017 ; RV64ZVE32F-NEXT:  .LBB79_14: # %cond.load10
9018 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
9019 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
9020 ; RV64ZVE32F-NEXT:    and a3, a3, a1
9021 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
9022 ; RV64ZVE32F-NEXT:    add a3, a0, a3
9023 ; RV64ZVE32F-NEXT:    flw fa5, 0(a3)
9024 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
9025 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
9026 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
9027 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
9028 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
9029 ; RV64ZVE32F-NEXT:    bnez a3, .LBB79_8
9030 ; RV64ZVE32F-NEXT:    j .LBB79_9
9031 ; RV64ZVE32F-NEXT:  .LBB79_15: # %cond.load16
9032 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
9033 ; RV64ZVE32F-NEXT:    and a3, a3, a1
9034 ; RV64ZVE32F-NEXT:    slli a3, a3, 2
9035 ; RV64ZVE32F-NEXT:    add a3, a0, a3
9036 ; RV64ZVE32F-NEXT:    flw fa5, 0(a3)
9037 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
9038 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
9039 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
9040 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
9041 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
9042 ; RV64ZVE32F-NEXT:    beqz a2, .LBB79_11
9043 ; RV64ZVE32F-NEXT:  .LBB79_16: # %cond.load19
9044 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
9045 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
9046 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
9047 ; RV64ZVE32F-NEXT:    and a1, a2, a1
9048 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
9049 ; RV64ZVE32F-NEXT:    add a0, a0, a1
9050 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
9051 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
9052 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
9053 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
9054 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
9055 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
9056 ; RV64ZVE32F-NEXT:    ret
9057   %eidxs = zext <8 x i16> %idxs to <8 x i32>
9058   %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %eidxs
9059   %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru)
9060   ret <8 x float> %v
9063 define <8 x float> @mgather_baseidx_v8f32(ptr %base, <8 x i32> %idxs, <8 x i1> %m, <8 x float> %passthru) {
9064 ; RV32-LABEL: mgather_baseidx_v8f32:
9065 ; RV32:       # %bb.0:
9066 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
9067 ; RV32-NEXT:    vsll.vi v8, v8, 2
9068 ; RV32-NEXT:    vluxei32.v v10, (a0), v8, v0.t
9069 ; RV32-NEXT:    vmv.v.v v8, v10
9070 ; RV32-NEXT:    ret
9072 ; RV64V-LABEL: mgather_baseidx_v8f32:
9073 ; RV64V:       # %bb.0:
9074 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
9075 ; RV64V-NEXT:    vsext.vf2 v12, v8
9076 ; RV64V-NEXT:    vsll.vi v12, v12, 2
9077 ; RV64V-NEXT:    vsetvli zero, zero, e32, m2, ta, mu
9078 ; RV64V-NEXT:    vluxei64.v v10, (a0), v12, v0.t
9079 ; RV64V-NEXT:    vmv.v.v v8, v10
9080 ; RV64V-NEXT:    ret
9082 ; RV64ZVE32F-LABEL: mgather_baseidx_v8f32:
9083 ; RV64ZVE32F:       # %bb.0:
9084 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
9085 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
9086 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
9087 ; RV64ZVE32F-NEXT:    beqz a2, .LBB80_2
9088 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
9089 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, tu, ma
9090 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
9091 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
9092 ; RV64ZVE32F-NEXT:    add a2, a0, a2
9093 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
9094 ; RV64ZVE32F-NEXT:    vfmv.s.f v10, fa5
9095 ; RV64ZVE32F-NEXT:  .LBB80_2: # %else
9096 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
9097 ; RV64ZVE32F-NEXT:    beqz a2, .LBB80_4
9098 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
9099 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
9100 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v8, 1
9101 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
9102 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
9103 ; RV64ZVE32F-NEXT:    add a2, a0, a2
9104 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
9105 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
9106 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 1
9107 ; RV64ZVE32F-NEXT:  .LBB80_4: # %else2
9108 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
9109 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v8, 4
9110 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
9111 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
9112 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
9113 ; RV64ZVE32F-NEXT:    bnez a2, .LBB80_12
9114 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
9115 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
9116 ; RV64ZVE32F-NEXT:    bnez a2, .LBB80_13
9117 ; RV64ZVE32F-NEXT:  .LBB80_6: # %else8
9118 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
9119 ; RV64ZVE32F-NEXT:    bnez a2, .LBB80_14
9120 ; RV64ZVE32F-NEXT:  .LBB80_7: # %else11
9121 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
9122 ; RV64ZVE32F-NEXT:    beqz a2, .LBB80_9
9123 ; RV64ZVE32F-NEXT:  .LBB80_8: # %cond.load13
9124 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9125 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v12, 1
9126 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
9127 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
9128 ; RV64ZVE32F-NEXT:    add a2, a0, a2
9129 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
9130 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
9131 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e32, m2, tu, ma
9132 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 5
9133 ; RV64ZVE32F-NEXT:  .LBB80_9: # %else14
9134 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
9135 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
9136 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v12, 2
9137 ; RV64ZVE32F-NEXT:    bnez a2, .LBB80_15
9138 ; RV64ZVE32F-NEXT:  # %bb.10: # %else17
9139 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
9140 ; RV64ZVE32F-NEXT:    bnez a1, .LBB80_16
9141 ; RV64ZVE32F-NEXT:  .LBB80_11: # %else20
9142 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
9143 ; RV64ZVE32F-NEXT:    ret
9144 ; RV64ZVE32F-NEXT:  .LBB80_12: # %cond.load4
9145 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
9146 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
9147 ; RV64ZVE32F-NEXT:    add a2, a0, a2
9148 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
9149 ; RV64ZVE32F-NEXT:    vfmv.s.f v9, fa5
9150 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
9151 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 2
9152 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
9153 ; RV64ZVE32F-NEXT:    beqz a2, .LBB80_6
9154 ; RV64ZVE32F-NEXT:  .LBB80_13: # %cond.load7
9155 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, tu, ma
9156 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
9157 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
9158 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
9159 ; RV64ZVE32F-NEXT:    add a2, a0, a2
9160 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
9161 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
9162 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 3
9163 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
9164 ; RV64ZVE32F-NEXT:    beqz a2, .LBB80_7
9165 ; RV64ZVE32F-NEXT:  .LBB80_14: # %cond.load10
9166 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e32, m2, tu, ma
9167 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
9168 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
9169 ; RV64ZVE32F-NEXT:    add a2, a0, a2
9170 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
9171 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
9172 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 4
9173 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
9174 ; RV64ZVE32F-NEXT:    bnez a2, .LBB80_8
9175 ; RV64ZVE32F-NEXT:    j .LBB80_9
9176 ; RV64ZVE32F-NEXT:  .LBB80_15: # %cond.load16
9177 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
9178 ; RV64ZVE32F-NEXT:    slli a2, a2, 2
9179 ; RV64ZVE32F-NEXT:    add a2, a0, a2
9180 ; RV64ZVE32F-NEXT:    flw fa5, 0(a2)
9181 ; RV64ZVE32F-NEXT:    vfmv.s.f v12, fa5
9182 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e32, m2, tu, ma
9183 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 6
9184 ; RV64ZVE32F-NEXT:    andi a1, a1, -128
9185 ; RV64ZVE32F-NEXT:    beqz a1, .LBB80_11
9186 ; RV64ZVE32F-NEXT:  .LBB80_16: # %cond.load19
9187 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9188 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
9189 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
9190 ; RV64ZVE32F-NEXT:    slli a1, a1, 2
9191 ; RV64ZVE32F-NEXT:    add a0, a0, a1
9192 ; RV64ZVE32F-NEXT:    flw fa5, 0(a0)
9193 ; RV64ZVE32F-NEXT:    vfmv.s.f v8, fa5
9194 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
9195 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 7
9196 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
9197 ; RV64ZVE32F-NEXT:    ret
9198   %ptrs = getelementptr inbounds float, ptr %base, <8 x i32> %idxs
9199   %v = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> %m, <8 x float> %passthru)
9200   ret <8 x float> %v
9203 declare <1 x double> @llvm.masked.gather.v1f64.v1p0(<1 x ptr>, i32, <1 x i1>, <1 x double>)
9205 define <1 x double> @mgather_v1f64(<1 x ptr> %ptrs, <1 x i1> %m, <1 x double> %passthru) {
9206 ; RV32V-LABEL: mgather_v1f64:
9207 ; RV32V:       # %bb.0:
9208 ; RV32V-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
9209 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
9210 ; RV32V-NEXT:    vmv.v.v v8, v9
9211 ; RV32V-NEXT:    ret
9213 ; RV64V-LABEL: mgather_v1f64:
9214 ; RV64V:       # %bb.0:
9215 ; RV64V-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
9216 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
9217 ; RV64V-NEXT:    vmv.v.v v8, v9
9218 ; RV64V-NEXT:    ret
9220 ; RV32ZVE32F-LABEL: mgather_v1f64:
9221 ; RV32ZVE32F:       # %bb.0:
9222 ; RV32ZVE32F-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
9223 ; RV32ZVE32F-NEXT:    vfirst.m a0, v0
9224 ; RV32ZVE32F-NEXT:    bnez a0, .LBB81_2
9225 ; RV32ZVE32F-NEXT:  # %bb.1: # %cond.load
9226 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
9227 ; RV32ZVE32F-NEXT:    vmv.x.s a0, v8
9228 ; RV32ZVE32F-NEXT:    fld fa0, 0(a0)
9229 ; RV32ZVE32F-NEXT:  .LBB81_2: # %else
9230 ; RV32ZVE32F-NEXT:    ret
9232 ; RV64ZVE32F-LABEL: mgather_v1f64:
9233 ; RV64ZVE32F:       # %bb.0:
9234 ; RV64ZVE32F-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
9235 ; RV64ZVE32F-NEXT:    vfirst.m a1, v0
9236 ; RV64ZVE32F-NEXT:    bnez a1, .LBB81_2
9237 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
9238 ; RV64ZVE32F-NEXT:    fld fa0, 0(a0)
9239 ; RV64ZVE32F-NEXT:  .LBB81_2: # %else
9240 ; RV64ZVE32F-NEXT:    ret
9241   %v = call <1 x double> @llvm.masked.gather.v1f64.v1p0(<1 x ptr> %ptrs, i32 8, <1 x i1> %m, <1 x double> %passthru)
9242   ret <1 x double> %v
9245 declare <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr>, i32, <2 x i1>, <2 x double>)
9247 define <2 x double> @mgather_v2f64(<2 x ptr> %ptrs, <2 x i1> %m, <2 x double> %passthru) {
9248 ; RV32V-LABEL: mgather_v2f64:
9249 ; RV32V:       # %bb.0:
9250 ; RV32V-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
9251 ; RV32V-NEXT:    vluxei32.v v9, (zero), v8, v0.t
9252 ; RV32V-NEXT:    vmv.v.v v8, v9
9253 ; RV32V-NEXT:    ret
9255 ; RV64V-LABEL: mgather_v2f64:
9256 ; RV64V:       # %bb.0:
9257 ; RV64V-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
9258 ; RV64V-NEXT:    vluxei64.v v9, (zero), v8, v0.t
9259 ; RV64V-NEXT:    vmv.v.v v8, v9
9260 ; RV64V-NEXT:    ret
9262 ; RV32ZVE32F-LABEL: mgather_v2f64:
9263 ; RV32ZVE32F:       # %bb.0:
9264 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
9265 ; RV32ZVE32F-NEXT:    vmv.x.s a0, v0
9266 ; RV32ZVE32F-NEXT:    andi a1, a0, 1
9267 ; RV32ZVE32F-NEXT:    bnez a1, .LBB82_3
9268 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
9269 ; RV32ZVE32F-NEXT:    andi a0, a0, 2
9270 ; RV32ZVE32F-NEXT:    bnez a0, .LBB82_4
9271 ; RV32ZVE32F-NEXT:  .LBB82_2: # %else2
9272 ; RV32ZVE32F-NEXT:    ret
9273 ; RV32ZVE32F-NEXT:  .LBB82_3: # %cond.load
9274 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
9275 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9276 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
9277 ; RV32ZVE32F-NEXT:    andi a0, a0, 2
9278 ; RV32ZVE32F-NEXT:    beqz a0, .LBB82_2
9279 ; RV32ZVE32F-NEXT:  .LBB82_4: # %cond.load1
9280 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9281 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
9282 ; RV32ZVE32F-NEXT:    vmv.x.s a0, v8
9283 ; RV32ZVE32F-NEXT:    fld fa1, 0(a0)
9284 ; RV32ZVE32F-NEXT:    ret
9286 ; RV64ZVE32F-LABEL: mgather_v2f64:
9287 ; RV64ZVE32F:       # %bb.0:
9288 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
9289 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
9290 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
9291 ; RV64ZVE32F-NEXT:    bnez a3, .LBB82_3
9292 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
9293 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
9294 ; RV64ZVE32F-NEXT:    bnez a2, .LBB82_4
9295 ; RV64ZVE32F-NEXT:  .LBB82_2: # %else2
9296 ; RV64ZVE32F-NEXT:    ret
9297 ; RV64ZVE32F-NEXT:  .LBB82_3: # %cond.load
9298 ; RV64ZVE32F-NEXT:    fld fa0, 0(a0)
9299 ; RV64ZVE32F-NEXT:    andi a2, a2, 2
9300 ; RV64ZVE32F-NEXT:    beqz a2, .LBB82_2
9301 ; RV64ZVE32F-NEXT:  .LBB82_4: # %cond.load1
9302 ; RV64ZVE32F-NEXT:    fld fa1, 0(a1)
9303 ; RV64ZVE32F-NEXT:    ret
9304   %v = call <2 x double> @llvm.masked.gather.v2f64.v2p0(<2 x ptr> %ptrs, i32 8, <2 x i1> %m, <2 x double> %passthru)
9305   ret <2 x double> %v
9308 declare <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr>, i32, <4 x i1>, <4 x double>)
9310 define <4 x double> @mgather_v4f64(<4 x ptr> %ptrs, <4 x i1> %m, <4 x double> %passthru) {
9311 ; RV32V-LABEL: mgather_v4f64:
9312 ; RV32V:       # %bb.0:
9313 ; RV32V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
9314 ; RV32V-NEXT:    vluxei32.v v10, (zero), v8, v0.t
9315 ; RV32V-NEXT:    vmv.v.v v8, v10
9316 ; RV32V-NEXT:    ret
9318 ; RV64V-LABEL: mgather_v4f64:
9319 ; RV64V:       # %bb.0:
9320 ; RV64V-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
9321 ; RV64V-NEXT:    vluxei64.v v10, (zero), v8, v0.t
9322 ; RV64V-NEXT:    vmv.v.v v8, v10
9323 ; RV64V-NEXT:    ret
9325 ; RV32ZVE32F-LABEL: mgather_v4f64:
9326 ; RV32ZVE32F:       # %bb.0:
9327 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
9328 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v0
9329 ; RV32ZVE32F-NEXT:    andi a2, a1, 1
9330 ; RV32ZVE32F-NEXT:    bnez a2, .LBB83_6
9331 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
9332 ; RV32ZVE32F-NEXT:    andi a2, a1, 2
9333 ; RV32ZVE32F-NEXT:    bnez a2, .LBB83_7
9334 ; RV32ZVE32F-NEXT:  .LBB83_2: # %else2
9335 ; RV32ZVE32F-NEXT:    andi a2, a1, 4
9336 ; RV32ZVE32F-NEXT:    bnez a2, .LBB83_8
9337 ; RV32ZVE32F-NEXT:  .LBB83_3: # %else5
9338 ; RV32ZVE32F-NEXT:    andi a1, a1, 8
9339 ; RV32ZVE32F-NEXT:    beqz a1, .LBB83_5
9340 ; RV32ZVE32F-NEXT:  .LBB83_4: # %cond.load7
9341 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9342 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 3
9343 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9344 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
9345 ; RV32ZVE32F-NEXT:  .LBB83_5: # %else8
9346 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
9347 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
9348 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
9349 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
9350 ; RV32ZVE32F-NEXT:    ret
9351 ; RV32ZVE32F-NEXT:  .LBB83_6: # %cond.load
9352 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
9353 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
9354 ; RV32ZVE32F-NEXT:    fld fa0, 0(a2)
9355 ; RV32ZVE32F-NEXT:    andi a2, a1, 2
9356 ; RV32ZVE32F-NEXT:    beqz a2, .LBB83_2
9357 ; RV32ZVE32F-NEXT:  .LBB83_7: # %cond.load1
9358 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9359 ; RV32ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
9360 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v9
9361 ; RV32ZVE32F-NEXT:    fld fa1, 0(a2)
9362 ; RV32ZVE32F-NEXT:    andi a2, a1, 4
9363 ; RV32ZVE32F-NEXT:    beqz a2, .LBB83_3
9364 ; RV32ZVE32F-NEXT:  .LBB83_8: # %cond.load4
9365 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9366 ; RV32ZVE32F-NEXT:    vslidedown.vi v9, v8, 2
9367 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v9
9368 ; RV32ZVE32F-NEXT:    fld fa2, 0(a2)
9369 ; RV32ZVE32F-NEXT:    andi a1, a1, 8
9370 ; RV32ZVE32F-NEXT:    bnez a1, .LBB83_4
9371 ; RV32ZVE32F-NEXT:    j .LBB83_5
9373 ; RV64ZVE32F-LABEL: mgather_v4f64:
9374 ; RV64ZVE32F:       # %bb.0:
9375 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
9376 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
9377 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
9378 ; RV64ZVE32F-NEXT:    bnez a3, .LBB83_6
9379 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
9380 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
9381 ; RV64ZVE32F-NEXT:    bnez a3, .LBB83_7
9382 ; RV64ZVE32F-NEXT:  .LBB83_2: # %else2
9383 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
9384 ; RV64ZVE32F-NEXT:    bnez a3, .LBB83_8
9385 ; RV64ZVE32F-NEXT:  .LBB83_3: # %else5
9386 ; RV64ZVE32F-NEXT:    andi a2, a2, 8
9387 ; RV64ZVE32F-NEXT:    beqz a2, .LBB83_5
9388 ; RV64ZVE32F-NEXT:  .LBB83_4: # %cond.load7
9389 ; RV64ZVE32F-NEXT:    ld a1, 24(a1)
9390 ; RV64ZVE32F-NEXT:    fld fa3, 0(a1)
9391 ; RV64ZVE32F-NEXT:  .LBB83_5: # %else8
9392 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
9393 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
9394 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
9395 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
9396 ; RV64ZVE32F-NEXT:    ret
9397 ; RV64ZVE32F-NEXT:  .LBB83_6: # %cond.load
9398 ; RV64ZVE32F-NEXT:    ld a3, 0(a1)
9399 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
9400 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
9401 ; RV64ZVE32F-NEXT:    beqz a3, .LBB83_2
9402 ; RV64ZVE32F-NEXT:  .LBB83_7: # %cond.load1
9403 ; RV64ZVE32F-NEXT:    ld a3, 8(a1)
9404 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
9405 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
9406 ; RV64ZVE32F-NEXT:    beqz a3, .LBB83_3
9407 ; RV64ZVE32F-NEXT:  .LBB83_8: # %cond.load4
9408 ; RV64ZVE32F-NEXT:    ld a3, 16(a1)
9409 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
9410 ; RV64ZVE32F-NEXT:    andi a2, a2, 8
9411 ; RV64ZVE32F-NEXT:    bnez a2, .LBB83_4
9412 ; RV64ZVE32F-NEXT:    j .LBB83_5
9413   %v = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32 8, <4 x i1> %m, <4 x double> %passthru)
9414   ret <4 x double> %v
9417 define <4 x double> @mgather_truemask_v4f64(<4 x ptr> %ptrs, <4 x double> %passthru) {
9418 ; RV32V-LABEL: mgather_truemask_v4f64:
9419 ; RV32V:       # %bb.0:
9420 ; RV32V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9421 ; RV32V-NEXT:    vluxei32.v v10, (zero), v8
9422 ; RV32V-NEXT:    vmv.v.v v8, v10
9423 ; RV32V-NEXT:    ret
9425 ; RV64V-LABEL: mgather_truemask_v4f64:
9426 ; RV64V:       # %bb.0:
9427 ; RV64V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
9428 ; RV64V-NEXT:    vluxei64.v v8, (zero), v8
9429 ; RV64V-NEXT:    ret
9431 ; RV32ZVE32F-LABEL: mgather_truemask_v4f64:
9432 ; RV32ZVE32F:       # %bb.0:
9433 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9434 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9435 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
9436 ; RV32ZVE32F-NEXT:    vslidedown.vi v9, v8, 2
9437 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v9
9438 ; RV32ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
9439 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
9440 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 3
9441 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9442 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
9443 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v9
9444 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
9445 ; RV32ZVE32F-NEXT:    fsd fa5, 0(a0)
9446 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
9447 ; RV32ZVE32F-NEXT:    fsd fa4, 16(a0)
9448 ; RV32ZVE32F-NEXT:    fsd fa2, 8(a0)
9449 ; RV32ZVE32F-NEXT:    ret
9451 ; RV64ZVE32F-LABEL: mgather_truemask_v4f64:
9452 ; RV64ZVE32F:       # %bb.0:
9453 ; RV64ZVE32F-NEXT:    ld a2, 24(a1)
9454 ; RV64ZVE32F-NEXT:    ld a3, 16(a1)
9455 ; RV64ZVE32F-NEXT:    ld a4, 8(a1)
9456 ; RV64ZVE32F-NEXT:    ld a1, 0(a1)
9457 ; RV64ZVE32F-NEXT:    fld fa5, 0(a2)
9458 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
9459 ; RV64ZVE32F-NEXT:    fld fa3, 0(a4)
9460 ; RV64ZVE32F-NEXT:    fld fa2, 0(a1)
9461 ; RV64ZVE32F-NEXT:    fsd fa5, 24(a0)
9462 ; RV64ZVE32F-NEXT:    fsd fa4, 16(a0)
9463 ; RV64ZVE32F-NEXT:    fsd fa3, 8(a0)
9464 ; RV64ZVE32F-NEXT:    fsd fa2, 0(a0)
9465 ; RV64ZVE32F-NEXT:    ret
9466   %v = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32 8, <4 x i1> splat (i1 1), <4 x double> %passthru)
9467   ret <4 x double> %v
9470 define <4 x double> @mgather_falsemask_v4f64(<4 x ptr> %ptrs, <4 x double> %passthru) {
9471 ; RV32V-LABEL: mgather_falsemask_v4f64:
9472 ; RV32V:       # %bb.0:
9473 ; RV32V-NEXT:    vmv2r.v v8, v10
9474 ; RV32V-NEXT:    ret
9476 ; RV64V-LABEL: mgather_falsemask_v4f64:
9477 ; RV64V:       # %bb.0:
9478 ; RV64V-NEXT:    vmv2r.v v8, v10
9479 ; RV64V-NEXT:    ret
9481 ; RV32ZVE32F-LABEL: mgather_falsemask_v4f64:
9482 ; RV32ZVE32F:       # %bb.0:
9483 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
9484 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
9485 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
9486 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
9487 ; RV32ZVE32F-NEXT:    ret
9489 ; RV64ZVE32F-LABEL: mgather_falsemask_v4f64:
9490 ; RV64ZVE32F:       # %bb.0:
9491 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
9492 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
9493 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
9494 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
9495 ; RV64ZVE32F-NEXT:    ret
9496   %v = call <4 x double> @llvm.masked.gather.v4f64.v4p0(<4 x ptr> %ptrs, i32 8, <4 x i1> zeroinitializer, <4 x double> %passthru)
9497   ret <4 x double> %v
9500 declare <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr>, i32, <8 x i1>, <8 x double>)
9502 define <8 x double> @mgather_v8f64(<8 x ptr> %ptrs, <8 x i1> %m, <8 x double> %passthru) {
9503 ; RV32V-LABEL: mgather_v8f64:
9504 ; RV32V:       # %bb.0:
9505 ; RV32V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9506 ; RV32V-NEXT:    vluxei32.v v12, (zero), v8, v0.t
9507 ; RV32V-NEXT:    vmv.v.v v8, v12
9508 ; RV32V-NEXT:    ret
9510 ; RV64V-LABEL: mgather_v8f64:
9511 ; RV64V:       # %bb.0:
9512 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9513 ; RV64V-NEXT:    vluxei64.v v12, (zero), v8, v0.t
9514 ; RV64V-NEXT:    vmv.v.v v8, v12
9515 ; RV64V-NEXT:    ret
9517 ; RV32ZVE32F-LABEL: mgather_v8f64:
9518 ; RV32ZVE32F:       # %bb.0:
9519 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
9520 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v0
9521 ; RV32ZVE32F-NEXT:    andi a2, a1, 1
9522 ; RV32ZVE32F-NEXT:    bnez a2, .LBB86_10
9523 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
9524 ; RV32ZVE32F-NEXT:    andi a2, a1, 2
9525 ; RV32ZVE32F-NEXT:    bnez a2, .LBB86_11
9526 ; RV32ZVE32F-NEXT:  .LBB86_2: # %else2
9527 ; RV32ZVE32F-NEXT:    andi a2, a1, 4
9528 ; RV32ZVE32F-NEXT:    bnez a2, .LBB86_12
9529 ; RV32ZVE32F-NEXT:  .LBB86_3: # %else5
9530 ; RV32ZVE32F-NEXT:    andi a2, a1, 8
9531 ; RV32ZVE32F-NEXT:    bnez a2, .LBB86_13
9532 ; RV32ZVE32F-NEXT:  .LBB86_4: # %else8
9533 ; RV32ZVE32F-NEXT:    andi a2, a1, 16
9534 ; RV32ZVE32F-NEXT:    bnez a2, .LBB86_14
9535 ; RV32ZVE32F-NEXT:  .LBB86_5: # %else11
9536 ; RV32ZVE32F-NEXT:    andi a2, a1, 32
9537 ; RV32ZVE32F-NEXT:    bnez a2, .LBB86_15
9538 ; RV32ZVE32F-NEXT:  .LBB86_6: # %else14
9539 ; RV32ZVE32F-NEXT:    andi a2, a1, 64
9540 ; RV32ZVE32F-NEXT:    bnez a2, .LBB86_16
9541 ; RV32ZVE32F-NEXT:  .LBB86_7: # %else17
9542 ; RV32ZVE32F-NEXT:    andi a1, a1, -128
9543 ; RV32ZVE32F-NEXT:    beqz a1, .LBB86_9
9544 ; RV32ZVE32F-NEXT:  .LBB86_8: # %cond.load19
9545 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9546 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
9547 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9548 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
9549 ; RV32ZVE32F-NEXT:  .LBB86_9: # %else20
9550 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
9551 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
9552 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
9553 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
9554 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
9555 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
9556 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
9557 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
9558 ; RV32ZVE32F-NEXT:    ret
9559 ; RV32ZVE32F-NEXT:  .LBB86_10: # %cond.load
9560 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
9561 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v8
9562 ; RV32ZVE32F-NEXT:    fld fa0, 0(a2)
9563 ; RV32ZVE32F-NEXT:    andi a2, a1, 2
9564 ; RV32ZVE32F-NEXT:    beqz a2, .LBB86_2
9565 ; RV32ZVE32F-NEXT:  .LBB86_11: # %cond.load1
9566 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9567 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
9568 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v10
9569 ; RV32ZVE32F-NEXT:    fld fa1, 0(a2)
9570 ; RV32ZVE32F-NEXT:    andi a2, a1, 4
9571 ; RV32ZVE32F-NEXT:    beqz a2, .LBB86_3
9572 ; RV32ZVE32F-NEXT:  .LBB86_12: # %cond.load4
9573 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9574 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
9575 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v10
9576 ; RV32ZVE32F-NEXT:    fld fa2, 0(a2)
9577 ; RV32ZVE32F-NEXT:    andi a2, a1, 8
9578 ; RV32ZVE32F-NEXT:    beqz a2, .LBB86_4
9579 ; RV32ZVE32F-NEXT:  .LBB86_13: # %cond.load7
9580 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9581 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
9582 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v10
9583 ; RV32ZVE32F-NEXT:    fld fa3, 0(a2)
9584 ; RV32ZVE32F-NEXT:    andi a2, a1, 16
9585 ; RV32ZVE32F-NEXT:    beqz a2, .LBB86_5
9586 ; RV32ZVE32F-NEXT:  .LBB86_14: # %cond.load10
9587 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9588 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
9589 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v10
9590 ; RV32ZVE32F-NEXT:    fld fa4, 0(a2)
9591 ; RV32ZVE32F-NEXT:    andi a2, a1, 32
9592 ; RV32ZVE32F-NEXT:    beqz a2, .LBB86_6
9593 ; RV32ZVE32F-NEXT:  .LBB86_15: # %cond.load13
9594 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9595 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
9596 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v10
9597 ; RV32ZVE32F-NEXT:    fld fa5, 0(a2)
9598 ; RV32ZVE32F-NEXT:    andi a2, a1, 64
9599 ; RV32ZVE32F-NEXT:    beqz a2, .LBB86_7
9600 ; RV32ZVE32F-NEXT:  .LBB86_16: # %cond.load16
9601 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9602 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
9603 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v10
9604 ; RV32ZVE32F-NEXT:    fld fa6, 0(a2)
9605 ; RV32ZVE32F-NEXT:    andi a1, a1, -128
9606 ; RV32ZVE32F-NEXT:    bnez a1, .LBB86_8
9607 ; RV32ZVE32F-NEXT:    j .LBB86_9
9609 ; RV64ZVE32F-LABEL: mgather_v8f64:
9610 ; RV64ZVE32F:       # %bb.0:
9611 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
9612 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
9613 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
9614 ; RV64ZVE32F-NEXT:    bnez a3, .LBB86_10
9615 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
9616 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
9617 ; RV64ZVE32F-NEXT:    bnez a3, .LBB86_11
9618 ; RV64ZVE32F-NEXT:  .LBB86_2: # %else2
9619 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
9620 ; RV64ZVE32F-NEXT:    bnez a3, .LBB86_12
9621 ; RV64ZVE32F-NEXT:  .LBB86_3: # %else5
9622 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
9623 ; RV64ZVE32F-NEXT:    bnez a3, .LBB86_13
9624 ; RV64ZVE32F-NEXT:  .LBB86_4: # %else8
9625 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
9626 ; RV64ZVE32F-NEXT:    bnez a3, .LBB86_14
9627 ; RV64ZVE32F-NEXT:  .LBB86_5: # %else11
9628 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
9629 ; RV64ZVE32F-NEXT:    bnez a3, .LBB86_15
9630 ; RV64ZVE32F-NEXT:  .LBB86_6: # %else14
9631 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
9632 ; RV64ZVE32F-NEXT:    bnez a3, .LBB86_16
9633 ; RV64ZVE32F-NEXT:  .LBB86_7: # %else17
9634 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
9635 ; RV64ZVE32F-NEXT:    beqz a2, .LBB86_9
9636 ; RV64ZVE32F-NEXT:  .LBB86_8: # %cond.load19
9637 ; RV64ZVE32F-NEXT:    ld a1, 56(a1)
9638 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
9639 ; RV64ZVE32F-NEXT:  .LBB86_9: # %else20
9640 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
9641 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
9642 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
9643 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
9644 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
9645 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
9646 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
9647 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
9648 ; RV64ZVE32F-NEXT:    ret
9649 ; RV64ZVE32F-NEXT:  .LBB86_10: # %cond.load
9650 ; RV64ZVE32F-NEXT:    ld a3, 0(a1)
9651 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
9652 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
9653 ; RV64ZVE32F-NEXT:    beqz a3, .LBB86_2
9654 ; RV64ZVE32F-NEXT:  .LBB86_11: # %cond.load1
9655 ; RV64ZVE32F-NEXT:    ld a3, 8(a1)
9656 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
9657 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
9658 ; RV64ZVE32F-NEXT:    beqz a3, .LBB86_3
9659 ; RV64ZVE32F-NEXT:  .LBB86_12: # %cond.load4
9660 ; RV64ZVE32F-NEXT:    ld a3, 16(a1)
9661 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
9662 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
9663 ; RV64ZVE32F-NEXT:    beqz a3, .LBB86_4
9664 ; RV64ZVE32F-NEXT:  .LBB86_13: # %cond.load7
9665 ; RV64ZVE32F-NEXT:    ld a3, 24(a1)
9666 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
9667 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
9668 ; RV64ZVE32F-NEXT:    beqz a3, .LBB86_5
9669 ; RV64ZVE32F-NEXT:  .LBB86_14: # %cond.load10
9670 ; RV64ZVE32F-NEXT:    ld a3, 32(a1)
9671 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
9672 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
9673 ; RV64ZVE32F-NEXT:    beqz a3, .LBB86_6
9674 ; RV64ZVE32F-NEXT:  .LBB86_15: # %cond.load13
9675 ; RV64ZVE32F-NEXT:    ld a3, 40(a1)
9676 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
9677 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
9678 ; RV64ZVE32F-NEXT:    beqz a3, .LBB86_7
9679 ; RV64ZVE32F-NEXT:  .LBB86_16: # %cond.load16
9680 ; RV64ZVE32F-NEXT:    ld a3, 48(a1)
9681 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
9682 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
9683 ; RV64ZVE32F-NEXT:    bnez a2, .LBB86_8
9684 ; RV64ZVE32F-NEXT:    j .LBB86_9
9685   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
9686   ret <8 x double> %v
9689 define <8 x double> @mgather_baseidx_v8i8_v8f64(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x double> %passthru) {
9690 ; RV32V-LABEL: mgather_baseidx_v8i8_v8f64:
9691 ; RV32V:       # %bb.0:
9692 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
9693 ; RV32V-NEXT:    vsext.vf4 v10, v8
9694 ; RV32V-NEXT:    vsll.vi v8, v10, 3
9695 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
9696 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
9697 ; RV32V-NEXT:    vmv.v.v v8, v12
9698 ; RV32V-NEXT:    ret
9700 ; RV64V-LABEL: mgather_baseidx_v8i8_v8f64:
9701 ; RV64V:       # %bb.0:
9702 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9703 ; RV64V-NEXT:    vsext.vf8 v16, v8
9704 ; RV64V-NEXT:    vsll.vi v8, v16, 3
9705 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
9706 ; RV64V-NEXT:    vmv.v.v v8, v12
9707 ; RV64V-NEXT:    ret
9709 ; RV32ZVE32F-LABEL: mgather_baseidx_v8i8_v8f64:
9710 ; RV32ZVE32F:       # %bb.0:
9711 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
9712 ; RV32ZVE32F-NEXT:    vsext.vf4 v10, v8
9713 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
9714 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
9715 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
9716 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
9717 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
9718 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
9719 ; RV32ZVE32F-NEXT:    bnez a3, .LBB87_10
9720 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
9721 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
9722 ; RV32ZVE32F-NEXT:    bnez a1, .LBB87_11
9723 ; RV32ZVE32F-NEXT:  .LBB87_2: # %else2
9724 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
9725 ; RV32ZVE32F-NEXT:    bnez a1, .LBB87_12
9726 ; RV32ZVE32F-NEXT:  .LBB87_3: # %else5
9727 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
9728 ; RV32ZVE32F-NEXT:    bnez a1, .LBB87_13
9729 ; RV32ZVE32F-NEXT:  .LBB87_4: # %else8
9730 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
9731 ; RV32ZVE32F-NEXT:    bnez a1, .LBB87_14
9732 ; RV32ZVE32F-NEXT:  .LBB87_5: # %else11
9733 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
9734 ; RV32ZVE32F-NEXT:    bnez a1, .LBB87_15
9735 ; RV32ZVE32F-NEXT:  .LBB87_6: # %else14
9736 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
9737 ; RV32ZVE32F-NEXT:    bnez a1, .LBB87_16
9738 ; RV32ZVE32F-NEXT:  .LBB87_7: # %else17
9739 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
9740 ; RV32ZVE32F-NEXT:    beqz a1, .LBB87_9
9741 ; RV32ZVE32F-NEXT:  .LBB87_8: # %cond.load19
9742 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9743 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
9744 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9745 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
9746 ; RV32ZVE32F-NEXT:  .LBB87_9: # %else20
9747 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
9748 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
9749 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
9750 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
9751 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
9752 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
9753 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
9754 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
9755 ; RV32ZVE32F-NEXT:    ret
9756 ; RV32ZVE32F-NEXT:  .LBB87_10: # %cond.load
9757 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9758 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
9759 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
9760 ; RV32ZVE32F-NEXT:    beqz a1, .LBB87_2
9761 ; RV32ZVE32F-NEXT:  .LBB87_11: # %cond.load1
9762 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9763 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
9764 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9765 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
9766 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
9767 ; RV32ZVE32F-NEXT:    beqz a1, .LBB87_3
9768 ; RV32ZVE32F-NEXT:  .LBB87_12: # %cond.load4
9769 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9770 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
9771 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9772 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
9773 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
9774 ; RV32ZVE32F-NEXT:    beqz a1, .LBB87_4
9775 ; RV32ZVE32F-NEXT:  .LBB87_13: # %cond.load7
9776 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9777 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
9778 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9779 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
9780 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
9781 ; RV32ZVE32F-NEXT:    beqz a1, .LBB87_5
9782 ; RV32ZVE32F-NEXT:  .LBB87_14: # %cond.load10
9783 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9784 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
9785 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9786 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
9787 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
9788 ; RV32ZVE32F-NEXT:    beqz a1, .LBB87_6
9789 ; RV32ZVE32F-NEXT:  .LBB87_15: # %cond.load13
9790 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9791 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
9792 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9793 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
9794 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
9795 ; RV32ZVE32F-NEXT:    beqz a1, .LBB87_7
9796 ; RV32ZVE32F-NEXT:  .LBB87_16: # %cond.load16
9797 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9798 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
9799 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9800 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
9801 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
9802 ; RV32ZVE32F-NEXT:    bnez a1, .LBB87_8
9803 ; RV32ZVE32F-NEXT:    j .LBB87_9
9805 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i8_v8f64:
9806 ; RV64ZVE32F:       # %bb.0:
9807 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
9808 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
9809 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
9810 ; RV64ZVE32F-NEXT:    beqz a3, .LBB87_2
9811 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
9812 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
9813 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
9814 ; RV64ZVE32F-NEXT:    add a3, a1, a3
9815 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
9816 ; RV64ZVE32F-NEXT:  .LBB87_2: # %else
9817 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
9818 ; RV64ZVE32F-NEXT:    beqz a3, .LBB87_4
9819 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
9820 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
9821 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
9822 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
9823 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
9824 ; RV64ZVE32F-NEXT:    add a3, a1, a3
9825 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
9826 ; RV64ZVE32F-NEXT:  .LBB87_4: # %else2
9827 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
9828 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
9829 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
9830 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
9831 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
9832 ; RV64ZVE32F-NEXT:    bnez a3, .LBB87_14
9833 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
9834 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
9835 ; RV64ZVE32F-NEXT:    bnez a3, .LBB87_15
9836 ; RV64ZVE32F-NEXT:  .LBB87_6: # %else8
9837 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
9838 ; RV64ZVE32F-NEXT:    bnez a3, .LBB87_16
9839 ; RV64ZVE32F-NEXT:  .LBB87_7: # %else11
9840 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
9841 ; RV64ZVE32F-NEXT:    beqz a3, .LBB87_9
9842 ; RV64ZVE32F-NEXT:  .LBB87_8: # %cond.load13
9843 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
9844 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
9845 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
9846 ; RV64ZVE32F-NEXT:    add a3, a1, a3
9847 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
9848 ; RV64ZVE32F-NEXT:  .LBB87_9: # %else14
9849 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
9850 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
9851 ; RV64ZVE32F-NEXT:    beqz a3, .LBB87_11
9852 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
9853 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
9854 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
9855 ; RV64ZVE32F-NEXT:    add a3, a1, a3
9856 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
9857 ; RV64ZVE32F-NEXT:  .LBB87_11: # %else17
9858 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
9859 ; RV64ZVE32F-NEXT:    beqz a2, .LBB87_13
9860 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
9861 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
9862 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
9863 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
9864 ; RV64ZVE32F-NEXT:    add a1, a1, a2
9865 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
9866 ; RV64ZVE32F-NEXT:  .LBB87_13: # %else20
9867 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
9868 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
9869 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
9870 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
9871 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
9872 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
9873 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
9874 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
9875 ; RV64ZVE32F-NEXT:    ret
9876 ; RV64ZVE32F-NEXT:  .LBB87_14: # %cond.load4
9877 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
9878 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
9879 ; RV64ZVE32F-NEXT:    add a3, a1, a3
9880 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
9881 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
9882 ; RV64ZVE32F-NEXT:    beqz a3, .LBB87_6
9883 ; RV64ZVE32F-NEXT:  .LBB87_15: # %cond.load7
9884 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
9885 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
9886 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
9887 ; RV64ZVE32F-NEXT:    add a3, a1, a3
9888 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
9889 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
9890 ; RV64ZVE32F-NEXT:    beqz a3, .LBB87_7
9891 ; RV64ZVE32F-NEXT:  .LBB87_16: # %cond.load10
9892 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
9893 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
9894 ; RV64ZVE32F-NEXT:    add a3, a1, a3
9895 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
9896 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
9897 ; RV64ZVE32F-NEXT:    bnez a3, .LBB87_8
9898 ; RV64ZVE32F-NEXT:    j .LBB87_9
9899   %ptrs = getelementptr inbounds double, ptr %base, <8 x i8> %idxs
9900   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
9901   ret <8 x double> %v
9904 define <8 x double> @mgather_baseidx_sext_v8i8_v8f64(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x double> %passthru) {
9905 ; RV32V-LABEL: mgather_baseidx_sext_v8i8_v8f64:
9906 ; RV32V:       # %bb.0:
9907 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
9908 ; RV32V-NEXT:    vsext.vf4 v10, v8
9909 ; RV32V-NEXT:    vsll.vi v8, v10, 3
9910 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
9911 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
9912 ; RV32V-NEXT:    vmv.v.v v8, v12
9913 ; RV32V-NEXT:    ret
9915 ; RV64V-LABEL: mgather_baseidx_sext_v8i8_v8f64:
9916 ; RV64V:       # %bb.0:
9917 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
9918 ; RV64V-NEXT:    vsext.vf8 v16, v8
9919 ; RV64V-NEXT:    vsll.vi v8, v16, 3
9920 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
9921 ; RV64V-NEXT:    vmv.v.v v8, v12
9922 ; RV64V-NEXT:    ret
9924 ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8f64:
9925 ; RV32ZVE32F:       # %bb.0:
9926 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
9927 ; RV32ZVE32F-NEXT:    vsext.vf4 v10, v8
9928 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
9929 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
9930 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
9931 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
9932 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
9933 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
9934 ; RV32ZVE32F-NEXT:    bnez a3, .LBB88_10
9935 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
9936 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
9937 ; RV32ZVE32F-NEXT:    bnez a1, .LBB88_11
9938 ; RV32ZVE32F-NEXT:  .LBB88_2: # %else2
9939 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
9940 ; RV32ZVE32F-NEXT:    bnez a1, .LBB88_12
9941 ; RV32ZVE32F-NEXT:  .LBB88_3: # %else5
9942 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
9943 ; RV32ZVE32F-NEXT:    bnez a1, .LBB88_13
9944 ; RV32ZVE32F-NEXT:  .LBB88_4: # %else8
9945 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
9946 ; RV32ZVE32F-NEXT:    bnez a1, .LBB88_14
9947 ; RV32ZVE32F-NEXT:  .LBB88_5: # %else11
9948 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
9949 ; RV32ZVE32F-NEXT:    bnez a1, .LBB88_15
9950 ; RV32ZVE32F-NEXT:  .LBB88_6: # %else14
9951 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
9952 ; RV32ZVE32F-NEXT:    bnez a1, .LBB88_16
9953 ; RV32ZVE32F-NEXT:  .LBB88_7: # %else17
9954 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
9955 ; RV32ZVE32F-NEXT:    beqz a1, .LBB88_9
9956 ; RV32ZVE32F-NEXT:  .LBB88_8: # %cond.load19
9957 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9958 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
9959 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9960 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
9961 ; RV32ZVE32F-NEXT:  .LBB88_9: # %else20
9962 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
9963 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
9964 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
9965 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
9966 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
9967 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
9968 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
9969 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
9970 ; RV32ZVE32F-NEXT:    ret
9971 ; RV32ZVE32F-NEXT:  .LBB88_10: # %cond.load
9972 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
9973 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
9974 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
9975 ; RV32ZVE32F-NEXT:    beqz a1, .LBB88_2
9976 ; RV32ZVE32F-NEXT:  .LBB88_11: # %cond.load1
9977 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9978 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
9979 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9980 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
9981 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
9982 ; RV32ZVE32F-NEXT:    beqz a1, .LBB88_3
9983 ; RV32ZVE32F-NEXT:  .LBB88_12: # %cond.load4
9984 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9985 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
9986 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9987 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
9988 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
9989 ; RV32ZVE32F-NEXT:    beqz a1, .LBB88_4
9990 ; RV32ZVE32F-NEXT:  .LBB88_13: # %cond.load7
9991 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
9992 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
9993 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
9994 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
9995 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
9996 ; RV32ZVE32F-NEXT:    beqz a1, .LBB88_5
9997 ; RV32ZVE32F-NEXT:  .LBB88_14: # %cond.load10
9998 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
9999 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
10000 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10001 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
10002 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10003 ; RV32ZVE32F-NEXT:    beqz a1, .LBB88_6
10004 ; RV32ZVE32F-NEXT:  .LBB88_15: # %cond.load13
10005 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10006 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
10007 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10008 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
10009 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10010 ; RV32ZVE32F-NEXT:    beqz a1, .LBB88_7
10011 ; RV32ZVE32F-NEXT:  .LBB88_16: # %cond.load16
10012 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10013 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
10014 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10015 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
10016 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10017 ; RV32ZVE32F-NEXT:    bnez a1, .LBB88_8
10018 ; RV32ZVE32F-NEXT:    j .LBB88_9
10020 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i8_v8f64:
10021 ; RV64ZVE32F:       # %bb.0:
10022 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
10023 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
10024 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
10025 ; RV64ZVE32F-NEXT:    beqz a3, .LBB88_2
10026 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
10027 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10028 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10029 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10030 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
10031 ; RV64ZVE32F-NEXT:  .LBB88_2: # %else
10032 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
10033 ; RV64ZVE32F-NEXT:    beqz a3, .LBB88_4
10034 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
10035 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
10036 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
10037 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
10038 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10039 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10040 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
10041 ; RV64ZVE32F-NEXT:  .LBB88_4: # %else2
10042 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
10043 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
10044 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
10045 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
10046 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
10047 ; RV64ZVE32F-NEXT:    bnez a3, .LBB88_14
10048 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
10049 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
10050 ; RV64ZVE32F-NEXT:    bnez a3, .LBB88_15
10051 ; RV64ZVE32F-NEXT:  .LBB88_6: # %else8
10052 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
10053 ; RV64ZVE32F-NEXT:    bnez a3, .LBB88_16
10054 ; RV64ZVE32F-NEXT:  .LBB88_7: # %else11
10055 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
10056 ; RV64ZVE32F-NEXT:    beqz a3, .LBB88_9
10057 ; RV64ZVE32F-NEXT:  .LBB88_8: # %cond.load13
10058 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
10059 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10060 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10061 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10062 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
10063 ; RV64ZVE32F-NEXT:  .LBB88_9: # %else14
10064 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
10065 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
10066 ; RV64ZVE32F-NEXT:    beqz a3, .LBB88_11
10067 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
10068 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10069 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10070 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10071 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
10072 ; RV64ZVE32F-NEXT:  .LBB88_11: # %else17
10073 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
10074 ; RV64ZVE32F-NEXT:    beqz a2, .LBB88_13
10075 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
10076 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10077 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
10078 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
10079 ; RV64ZVE32F-NEXT:    add a1, a1, a2
10080 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
10081 ; RV64ZVE32F-NEXT:  .LBB88_13: # %else20
10082 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
10083 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
10084 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
10085 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
10086 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
10087 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
10088 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
10089 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
10090 ; RV64ZVE32F-NEXT:    ret
10091 ; RV64ZVE32F-NEXT:  .LBB88_14: # %cond.load4
10092 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10093 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10094 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10095 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
10096 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
10097 ; RV64ZVE32F-NEXT:    beqz a3, .LBB88_6
10098 ; RV64ZVE32F-NEXT:  .LBB88_15: # %cond.load7
10099 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10100 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10101 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10102 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10103 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
10104 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
10105 ; RV64ZVE32F-NEXT:    beqz a3, .LBB88_7
10106 ; RV64ZVE32F-NEXT:  .LBB88_16: # %cond.load10
10107 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
10108 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10109 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10110 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
10111 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
10112 ; RV64ZVE32F-NEXT:    bnez a3, .LBB88_8
10113 ; RV64ZVE32F-NEXT:    j .LBB88_9
10114   %eidxs = sext <8 x i8> %idxs to <8 x i64>
10115   %ptrs = getelementptr inbounds double, ptr %base, <8 x i64> %eidxs
10116   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
10117   ret <8 x double> %v
10120 define <8 x double> @mgather_baseidx_zext_v8i8_v8f64(ptr %base, <8 x i8> %idxs, <8 x i1> %m, <8 x double> %passthru) {
10121 ; RV32V-LABEL: mgather_baseidx_zext_v8i8_v8f64:
10122 ; RV32V:       # %bb.0:
10123 ; RV32V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
10124 ; RV32V-NEXT:    vzext.vf2 v9, v8
10125 ; RV32V-NEXT:    vsll.vi v8, v9, 3
10126 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
10127 ; RV32V-NEXT:    vluxei16.v v12, (a0), v8, v0.t
10128 ; RV32V-NEXT:    vmv.v.v v8, v12
10129 ; RV32V-NEXT:    ret
10131 ; RV64V-LABEL: mgather_baseidx_zext_v8i8_v8f64:
10132 ; RV64V:       # %bb.0:
10133 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
10134 ; RV64V-NEXT:    vzext.vf2 v9, v8
10135 ; RV64V-NEXT:    vsll.vi v8, v9, 3
10136 ; RV64V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
10137 ; RV64V-NEXT:    vluxei16.v v12, (a0), v8, v0.t
10138 ; RV64V-NEXT:    vmv.v.v v8, v12
10139 ; RV64V-NEXT:    ret
10141 ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8f64:
10142 ; RV32ZVE32F:       # %bb.0:
10143 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
10144 ; RV32ZVE32F-NEXT:    vzext.vf4 v10, v8
10145 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
10146 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
10147 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
10148 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
10149 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
10150 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
10151 ; RV32ZVE32F-NEXT:    bnez a3, .LBB89_10
10152 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
10153 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
10154 ; RV32ZVE32F-NEXT:    bnez a1, .LBB89_11
10155 ; RV32ZVE32F-NEXT:  .LBB89_2: # %else2
10156 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
10157 ; RV32ZVE32F-NEXT:    bnez a1, .LBB89_12
10158 ; RV32ZVE32F-NEXT:  .LBB89_3: # %else5
10159 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
10160 ; RV32ZVE32F-NEXT:    bnez a1, .LBB89_13
10161 ; RV32ZVE32F-NEXT:  .LBB89_4: # %else8
10162 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
10163 ; RV32ZVE32F-NEXT:    bnez a1, .LBB89_14
10164 ; RV32ZVE32F-NEXT:  .LBB89_5: # %else11
10165 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10166 ; RV32ZVE32F-NEXT:    bnez a1, .LBB89_15
10167 ; RV32ZVE32F-NEXT:  .LBB89_6: # %else14
10168 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10169 ; RV32ZVE32F-NEXT:    bnez a1, .LBB89_16
10170 ; RV32ZVE32F-NEXT:  .LBB89_7: # %else17
10171 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10172 ; RV32ZVE32F-NEXT:    beqz a1, .LBB89_9
10173 ; RV32ZVE32F-NEXT:  .LBB89_8: # %cond.load19
10174 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10175 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
10176 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
10177 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
10178 ; RV32ZVE32F-NEXT:  .LBB89_9: # %else20
10179 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
10180 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
10181 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
10182 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
10183 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
10184 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
10185 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
10186 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
10187 ; RV32ZVE32F-NEXT:    ret
10188 ; RV32ZVE32F-NEXT:  .LBB89_10: # %cond.load
10189 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
10190 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
10191 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
10192 ; RV32ZVE32F-NEXT:    beqz a1, .LBB89_2
10193 ; RV32ZVE32F-NEXT:  .LBB89_11: # %cond.load1
10194 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10195 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
10196 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10197 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
10198 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
10199 ; RV32ZVE32F-NEXT:    beqz a1, .LBB89_3
10200 ; RV32ZVE32F-NEXT:  .LBB89_12: # %cond.load4
10201 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10202 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
10203 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10204 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
10205 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
10206 ; RV32ZVE32F-NEXT:    beqz a1, .LBB89_4
10207 ; RV32ZVE32F-NEXT:  .LBB89_13: # %cond.load7
10208 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10209 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
10210 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10211 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
10212 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
10213 ; RV32ZVE32F-NEXT:    beqz a1, .LBB89_5
10214 ; RV32ZVE32F-NEXT:  .LBB89_14: # %cond.load10
10215 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10216 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
10217 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10218 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
10219 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10220 ; RV32ZVE32F-NEXT:    beqz a1, .LBB89_6
10221 ; RV32ZVE32F-NEXT:  .LBB89_15: # %cond.load13
10222 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10223 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
10224 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10225 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
10226 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10227 ; RV32ZVE32F-NEXT:    beqz a1, .LBB89_7
10228 ; RV32ZVE32F-NEXT:  .LBB89_16: # %cond.load16
10229 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10230 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
10231 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10232 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
10233 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10234 ; RV32ZVE32F-NEXT:    bnez a1, .LBB89_8
10235 ; RV32ZVE32F-NEXT:    j .LBB89_9
10237 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i8_v8f64:
10238 ; RV64ZVE32F:       # %bb.0:
10239 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
10240 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
10241 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
10242 ; RV64ZVE32F-NEXT:    beqz a3, .LBB89_2
10243 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
10244 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10245 ; RV64ZVE32F-NEXT:    andi a3, a3, 255
10246 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10247 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10248 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
10249 ; RV64ZVE32F-NEXT:  .LBB89_2: # %else
10250 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
10251 ; RV64ZVE32F-NEXT:    beqz a3, .LBB89_4
10252 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
10253 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
10254 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
10255 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
10256 ; RV64ZVE32F-NEXT:    andi a3, a3, 255
10257 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10258 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10259 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
10260 ; RV64ZVE32F-NEXT:  .LBB89_4: # %else2
10261 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
10262 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
10263 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
10264 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
10265 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
10266 ; RV64ZVE32F-NEXT:    bnez a3, .LBB89_14
10267 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
10268 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
10269 ; RV64ZVE32F-NEXT:    bnez a3, .LBB89_15
10270 ; RV64ZVE32F-NEXT:  .LBB89_6: # %else8
10271 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
10272 ; RV64ZVE32F-NEXT:    bnez a3, .LBB89_16
10273 ; RV64ZVE32F-NEXT:  .LBB89_7: # %else11
10274 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
10275 ; RV64ZVE32F-NEXT:    beqz a3, .LBB89_9
10276 ; RV64ZVE32F-NEXT:  .LBB89_8: # %cond.load13
10277 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
10278 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10279 ; RV64ZVE32F-NEXT:    andi a3, a3, 255
10280 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10281 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10282 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
10283 ; RV64ZVE32F-NEXT:  .LBB89_9: # %else14
10284 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
10285 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
10286 ; RV64ZVE32F-NEXT:    beqz a3, .LBB89_11
10287 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
10288 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10289 ; RV64ZVE32F-NEXT:    andi a3, a3, 255
10290 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10291 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10292 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
10293 ; RV64ZVE32F-NEXT:  .LBB89_11: # %else17
10294 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
10295 ; RV64ZVE32F-NEXT:    beqz a2, .LBB89_13
10296 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
10297 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10298 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
10299 ; RV64ZVE32F-NEXT:    andi a2, a2, 255
10300 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
10301 ; RV64ZVE32F-NEXT:    add a1, a1, a2
10302 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
10303 ; RV64ZVE32F-NEXT:  .LBB89_13: # %else20
10304 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
10305 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
10306 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
10307 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
10308 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
10309 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
10310 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
10311 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
10312 ; RV64ZVE32F-NEXT:    ret
10313 ; RV64ZVE32F-NEXT:  .LBB89_14: # %cond.load4
10314 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10315 ; RV64ZVE32F-NEXT:    andi a3, a3, 255
10316 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10317 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10318 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
10319 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
10320 ; RV64ZVE32F-NEXT:    beqz a3, .LBB89_6
10321 ; RV64ZVE32F-NEXT:  .LBB89_15: # %cond.load7
10322 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10323 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10324 ; RV64ZVE32F-NEXT:    andi a3, a3, 255
10325 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10326 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10327 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
10328 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
10329 ; RV64ZVE32F-NEXT:    beqz a3, .LBB89_7
10330 ; RV64ZVE32F-NEXT:  .LBB89_16: # %cond.load10
10331 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
10332 ; RV64ZVE32F-NEXT:    andi a3, a3, 255
10333 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10334 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10335 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
10336 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
10337 ; RV64ZVE32F-NEXT:    bnez a3, .LBB89_8
10338 ; RV64ZVE32F-NEXT:    j .LBB89_9
10339   %eidxs = zext <8 x i8> %idxs to <8 x i64>
10340   %ptrs = getelementptr inbounds double, ptr %base, <8 x i64> %eidxs
10341   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
10342   ret <8 x double> %v
10345 define <8 x double> @mgather_baseidx_v8i16_v8f64(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x double> %passthru) {
10346 ; RV32V-LABEL: mgather_baseidx_v8i16_v8f64:
10347 ; RV32V:       # %bb.0:
10348 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
10349 ; RV32V-NEXT:    vsext.vf2 v10, v8
10350 ; RV32V-NEXT:    vsll.vi v8, v10, 3
10351 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
10352 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
10353 ; RV32V-NEXT:    vmv.v.v v8, v12
10354 ; RV32V-NEXT:    ret
10356 ; RV64V-LABEL: mgather_baseidx_v8i16_v8f64:
10357 ; RV64V:       # %bb.0:
10358 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
10359 ; RV64V-NEXT:    vsext.vf4 v16, v8
10360 ; RV64V-NEXT:    vsll.vi v8, v16, 3
10361 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
10362 ; RV64V-NEXT:    vmv.v.v v8, v12
10363 ; RV64V-NEXT:    ret
10365 ; RV32ZVE32F-LABEL: mgather_baseidx_v8i16_v8f64:
10366 ; RV32ZVE32F:       # %bb.0:
10367 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
10368 ; RV32ZVE32F-NEXT:    vsext.vf2 v10, v8
10369 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
10370 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
10371 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
10372 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
10373 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
10374 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
10375 ; RV32ZVE32F-NEXT:    bnez a3, .LBB90_10
10376 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
10377 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
10378 ; RV32ZVE32F-NEXT:    bnez a1, .LBB90_11
10379 ; RV32ZVE32F-NEXT:  .LBB90_2: # %else2
10380 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
10381 ; RV32ZVE32F-NEXT:    bnez a1, .LBB90_12
10382 ; RV32ZVE32F-NEXT:  .LBB90_3: # %else5
10383 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
10384 ; RV32ZVE32F-NEXT:    bnez a1, .LBB90_13
10385 ; RV32ZVE32F-NEXT:  .LBB90_4: # %else8
10386 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
10387 ; RV32ZVE32F-NEXT:    bnez a1, .LBB90_14
10388 ; RV32ZVE32F-NEXT:  .LBB90_5: # %else11
10389 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10390 ; RV32ZVE32F-NEXT:    bnez a1, .LBB90_15
10391 ; RV32ZVE32F-NEXT:  .LBB90_6: # %else14
10392 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10393 ; RV32ZVE32F-NEXT:    bnez a1, .LBB90_16
10394 ; RV32ZVE32F-NEXT:  .LBB90_7: # %else17
10395 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10396 ; RV32ZVE32F-NEXT:    beqz a1, .LBB90_9
10397 ; RV32ZVE32F-NEXT:  .LBB90_8: # %cond.load19
10398 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10399 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
10400 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
10401 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
10402 ; RV32ZVE32F-NEXT:  .LBB90_9: # %else20
10403 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
10404 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
10405 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
10406 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
10407 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
10408 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
10409 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
10410 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
10411 ; RV32ZVE32F-NEXT:    ret
10412 ; RV32ZVE32F-NEXT:  .LBB90_10: # %cond.load
10413 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
10414 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
10415 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
10416 ; RV32ZVE32F-NEXT:    beqz a1, .LBB90_2
10417 ; RV32ZVE32F-NEXT:  .LBB90_11: # %cond.load1
10418 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10419 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
10420 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10421 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
10422 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
10423 ; RV32ZVE32F-NEXT:    beqz a1, .LBB90_3
10424 ; RV32ZVE32F-NEXT:  .LBB90_12: # %cond.load4
10425 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10426 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
10427 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10428 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
10429 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
10430 ; RV32ZVE32F-NEXT:    beqz a1, .LBB90_4
10431 ; RV32ZVE32F-NEXT:  .LBB90_13: # %cond.load7
10432 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10433 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
10434 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10435 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
10436 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
10437 ; RV32ZVE32F-NEXT:    beqz a1, .LBB90_5
10438 ; RV32ZVE32F-NEXT:  .LBB90_14: # %cond.load10
10439 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10440 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
10441 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10442 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
10443 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10444 ; RV32ZVE32F-NEXT:    beqz a1, .LBB90_6
10445 ; RV32ZVE32F-NEXT:  .LBB90_15: # %cond.load13
10446 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10447 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
10448 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10449 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
10450 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10451 ; RV32ZVE32F-NEXT:    beqz a1, .LBB90_7
10452 ; RV32ZVE32F-NEXT:  .LBB90_16: # %cond.load16
10453 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10454 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
10455 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10456 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
10457 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10458 ; RV32ZVE32F-NEXT:    bnez a1, .LBB90_8
10459 ; RV32ZVE32F-NEXT:    j .LBB90_9
10461 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i16_v8f64:
10462 ; RV64ZVE32F:       # %bb.0:
10463 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
10464 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
10465 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
10466 ; RV64ZVE32F-NEXT:    beqz a3, .LBB90_2
10467 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
10468 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
10469 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10470 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10471 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10472 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
10473 ; RV64ZVE32F-NEXT:  .LBB90_2: # %else
10474 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
10475 ; RV64ZVE32F-NEXT:    beqz a3, .LBB90_4
10476 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
10477 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
10478 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
10479 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
10480 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10481 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10482 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
10483 ; RV64ZVE32F-NEXT:  .LBB90_4: # %else2
10484 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
10485 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
10486 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
10487 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
10488 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
10489 ; RV64ZVE32F-NEXT:    bnez a3, .LBB90_14
10490 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
10491 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
10492 ; RV64ZVE32F-NEXT:    bnez a3, .LBB90_15
10493 ; RV64ZVE32F-NEXT:  .LBB90_6: # %else8
10494 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
10495 ; RV64ZVE32F-NEXT:    bnez a3, .LBB90_16
10496 ; RV64ZVE32F-NEXT:  .LBB90_7: # %else11
10497 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
10498 ; RV64ZVE32F-NEXT:    beqz a3, .LBB90_9
10499 ; RV64ZVE32F-NEXT:  .LBB90_8: # %cond.load13
10500 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
10501 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10502 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10503 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10504 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
10505 ; RV64ZVE32F-NEXT:  .LBB90_9: # %else14
10506 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
10507 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
10508 ; RV64ZVE32F-NEXT:    beqz a3, .LBB90_11
10509 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
10510 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10511 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10512 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10513 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
10514 ; RV64ZVE32F-NEXT:  .LBB90_11: # %else17
10515 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
10516 ; RV64ZVE32F-NEXT:    beqz a2, .LBB90_13
10517 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
10518 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10519 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
10520 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
10521 ; RV64ZVE32F-NEXT:    add a1, a1, a2
10522 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
10523 ; RV64ZVE32F-NEXT:  .LBB90_13: # %else20
10524 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
10525 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
10526 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
10527 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
10528 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
10529 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
10530 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
10531 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
10532 ; RV64ZVE32F-NEXT:    ret
10533 ; RV64ZVE32F-NEXT:  .LBB90_14: # %cond.load4
10534 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10535 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10536 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10537 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
10538 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
10539 ; RV64ZVE32F-NEXT:    beqz a3, .LBB90_6
10540 ; RV64ZVE32F-NEXT:  .LBB90_15: # %cond.load7
10541 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10542 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10543 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10544 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10545 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
10546 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
10547 ; RV64ZVE32F-NEXT:    beqz a3, .LBB90_7
10548 ; RV64ZVE32F-NEXT:  .LBB90_16: # %cond.load10
10549 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
10550 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10551 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10552 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
10553 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
10554 ; RV64ZVE32F-NEXT:    bnez a3, .LBB90_8
10555 ; RV64ZVE32F-NEXT:    j .LBB90_9
10556   %ptrs = getelementptr inbounds double, ptr %base, <8 x i16> %idxs
10557   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
10558   ret <8 x double> %v
10561 define <8 x double> @mgather_baseidx_sext_v8i16_v8f64(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x double> %passthru) {
10562 ; RV32V-LABEL: mgather_baseidx_sext_v8i16_v8f64:
10563 ; RV32V:       # %bb.0:
10564 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
10565 ; RV32V-NEXT:    vsext.vf2 v10, v8
10566 ; RV32V-NEXT:    vsll.vi v8, v10, 3
10567 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
10568 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
10569 ; RV32V-NEXT:    vmv.v.v v8, v12
10570 ; RV32V-NEXT:    ret
10572 ; RV64V-LABEL: mgather_baseidx_sext_v8i16_v8f64:
10573 ; RV64V:       # %bb.0:
10574 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
10575 ; RV64V-NEXT:    vsext.vf4 v16, v8
10576 ; RV64V-NEXT:    vsll.vi v8, v16, 3
10577 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
10578 ; RV64V-NEXT:    vmv.v.v v8, v12
10579 ; RV64V-NEXT:    ret
10581 ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8f64:
10582 ; RV32ZVE32F:       # %bb.0:
10583 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
10584 ; RV32ZVE32F-NEXT:    vsext.vf2 v10, v8
10585 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
10586 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
10587 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
10588 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
10589 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
10590 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
10591 ; RV32ZVE32F-NEXT:    bnez a3, .LBB91_10
10592 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
10593 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
10594 ; RV32ZVE32F-NEXT:    bnez a1, .LBB91_11
10595 ; RV32ZVE32F-NEXT:  .LBB91_2: # %else2
10596 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
10597 ; RV32ZVE32F-NEXT:    bnez a1, .LBB91_12
10598 ; RV32ZVE32F-NEXT:  .LBB91_3: # %else5
10599 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
10600 ; RV32ZVE32F-NEXT:    bnez a1, .LBB91_13
10601 ; RV32ZVE32F-NEXT:  .LBB91_4: # %else8
10602 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
10603 ; RV32ZVE32F-NEXT:    bnez a1, .LBB91_14
10604 ; RV32ZVE32F-NEXT:  .LBB91_5: # %else11
10605 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10606 ; RV32ZVE32F-NEXT:    bnez a1, .LBB91_15
10607 ; RV32ZVE32F-NEXT:  .LBB91_6: # %else14
10608 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10609 ; RV32ZVE32F-NEXT:    bnez a1, .LBB91_16
10610 ; RV32ZVE32F-NEXT:  .LBB91_7: # %else17
10611 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10612 ; RV32ZVE32F-NEXT:    beqz a1, .LBB91_9
10613 ; RV32ZVE32F-NEXT:  .LBB91_8: # %cond.load19
10614 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10615 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
10616 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
10617 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
10618 ; RV32ZVE32F-NEXT:  .LBB91_9: # %else20
10619 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
10620 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
10621 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
10622 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
10623 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
10624 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
10625 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
10626 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
10627 ; RV32ZVE32F-NEXT:    ret
10628 ; RV32ZVE32F-NEXT:  .LBB91_10: # %cond.load
10629 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
10630 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
10631 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
10632 ; RV32ZVE32F-NEXT:    beqz a1, .LBB91_2
10633 ; RV32ZVE32F-NEXT:  .LBB91_11: # %cond.load1
10634 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10635 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
10636 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10637 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
10638 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
10639 ; RV32ZVE32F-NEXT:    beqz a1, .LBB91_3
10640 ; RV32ZVE32F-NEXT:  .LBB91_12: # %cond.load4
10641 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10642 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
10643 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10644 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
10645 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
10646 ; RV32ZVE32F-NEXT:    beqz a1, .LBB91_4
10647 ; RV32ZVE32F-NEXT:  .LBB91_13: # %cond.load7
10648 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10649 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
10650 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10651 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
10652 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
10653 ; RV32ZVE32F-NEXT:    beqz a1, .LBB91_5
10654 ; RV32ZVE32F-NEXT:  .LBB91_14: # %cond.load10
10655 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10656 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
10657 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10658 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
10659 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10660 ; RV32ZVE32F-NEXT:    beqz a1, .LBB91_6
10661 ; RV32ZVE32F-NEXT:  .LBB91_15: # %cond.load13
10662 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10663 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
10664 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10665 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
10666 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10667 ; RV32ZVE32F-NEXT:    beqz a1, .LBB91_7
10668 ; RV32ZVE32F-NEXT:  .LBB91_16: # %cond.load16
10669 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10670 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
10671 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10672 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
10673 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10674 ; RV32ZVE32F-NEXT:    bnez a1, .LBB91_8
10675 ; RV32ZVE32F-NEXT:    j .LBB91_9
10677 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i16_v8f64:
10678 ; RV64ZVE32F:       # %bb.0:
10679 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
10680 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
10681 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
10682 ; RV64ZVE32F-NEXT:    beqz a3, .LBB91_2
10683 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
10684 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
10685 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10686 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10687 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10688 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
10689 ; RV64ZVE32F-NEXT:  .LBB91_2: # %else
10690 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
10691 ; RV64ZVE32F-NEXT:    beqz a3, .LBB91_4
10692 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
10693 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
10694 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
10695 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
10696 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10697 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10698 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
10699 ; RV64ZVE32F-NEXT:  .LBB91_4: # %else2
10700 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
10701 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
10702 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
10703 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
10704 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
10705 ; RV64ZVE32F-NEXT:    bnez a3, .LBB91_14
10706 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
10707 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
10708 ; RV64ZVE32F-NEXT:    bnez a3, .LBB91_15
10709 ; RV64ZVE32F-NEXT:  .LBB91_6: # %else8
10710 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
10711 ; RV64ZVE32F-NEXT:    bnez a3, .LBB91_16
10712 ; RV64ZVE32F-NEXT:  .LBB91_7: # %else11
10713 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
10714 ; RV64ZVE32F-NEXT:    beqz a3, .LBB91_9
10715 ; RV64ZVE32F-NEXT:  .LBB91_8: # %cond.load13
10716 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
10717 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10718 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10719 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10720 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
10721 ; RV64ZVE32F-NEXT:  .LBB91_9: # %else14
10722 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
10723 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
10724 ; RV64ZVE32F-NEXT:    beqz a3, .LBB91_11
10725 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
10726 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10727 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10728 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10729 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
10730 ; RV64ZVE32F-NEXT:  .LBB91_11: # %else17
10731 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
10732 ; RV64ZVE32F-NEXT:    beqz a2, .LBB91_13
10733 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
10734 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10735 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
10736 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
10737 ; RV64ZVE32F-NEXT:    add a1, a1, a2
10738 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
10739 ; RV64ZVE32F-NEXT:  .LBB91_13: # %else20
10740 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
10741 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
10742 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
10743 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
10744 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
10745 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
10746 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
10747 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
10748 ; RV64ZVE32F-NEXT:    ret
10749 ; RV64ZVE32F-NEXT:  .LBB91_14: # %cond.load4
10750 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10751 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10752 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10753 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
10754 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
10755 ; RV64ZVE32F-NEXT:    beqz a3, .LBB91_6
10756 ; RV64ZVE32F-NEXT:  .LBB91_15: # %cond.load7
10757 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10758 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10759 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10760 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10761 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
10762 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
10763 ; RV64ZVE32F-NEXT:    beqz a3, .LBB91_7
10764 ; RV64ZVE32F-NEXT:  .LBB91_16: # %cond.load10
10765 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v9
10766 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
10767 ; RV64ZVE32F-NEXT:    add a3, a1, a3
10768 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
10769 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
10770 ; RV64ZVE32F-NEXT:    bnez a3, .LBB91_8
10771 ; RV64ZVE32F-NEXT:    j .LBB91_9
10772   %eidxs = sext <8 x i16> %idxs to <8 x i64>
10773   %ptrs = getelementptr inbounds double, ptr %base, <8 x i64> %eidxs
10774   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
10775   ret <8 x double> %v
10778 define <8 x double> @mgather_baseidx_zext_v8i16_v8f64(ptr %base, <8 x i16> %idxs, <8 x i1> %m, <8 x double> %passthru) {
10779 ; RV32V-LABEL: mgather_baseidx_zext_v8i16_v8f64:
10780 ; RV32V:       # %bb.0:
10781 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
10782 ; RV32V-NEXT:    vzext.vf2 v10, v8
10783 ; RV32V-NEXT:    vsll.vi v8, v10, 3
10784 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
10785 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
10786 ; RV32V-NEXT:    vmv.v.v v8, v12
10787 ; RV32V-NEXT:    ret
10789 ; RV64V-LABEL: mgather_baseidx_zext_v8i16_v8f64:
10790 ; RV64V:       # %bb.0:
10791 ; RV64V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
10792 ; RV64V-NEXT:    vzext.vf2 v10, v8
10793 ; RV64V-NEXT:    vsll.vi v8, v10, 3
10794 ; RV64V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
10795 ; RV64V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
10796 ; RV64V-NEXT:    vmv.v.v v8, v12
10797 ; RV64V-NEXT:    ret
10799 ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8f64:
10800 ; RV32ZVE32F:       # %bb.0:
10801 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
10802 ; RV32ZVE32F-NEXT:    vzext.vf2 v10, v8
10803 ; RV32ZVE32F-NEXT:    vsll.vi v8, v10, 3
10804 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
10805 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
10806 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
10807 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
10808 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
10809 ; RV32ZVE32F-NEXT:    bnez a3, .LBB92_10
10810 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
10811 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
10812 ; RV32ZVE32F-NEXT:    bnez a1, .LBB92_11
10813 ; RV32ZVE32F-NEXT:  .LBB92_2: # %else2
10814 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
10815 ; RV32ZVE32F-NEXT:    bnez a1, .LBB92_12
10816 ; RV32ZVE32F-NEXT:  .LBB92_3: # %else5
10817 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
10818 ; RV32ZVE32F-NEXT:    bnez a1, .LBB92_13
10819 ; RV32ZVE32F-NEXT:  .LBB92_4: # %else8
10820 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
10821 ; RV32ZVE32F-NEXT:    bnez a1, .LBB92_14
10822 ; RV32ZVE32F-NEXT:  .LBB92_5: # %else11
10823 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10824 ; RV32ZVE32F-NEXT:    bnez a1, .LBB92_15
10825 ; RV32ZVE32F-NEXT:  .LBB92_6: # %else14
10826 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10827 ; RV32ZVE32F-NEXT:    bnez a1, .LBB92_16
10828 ; RV32ZVE32F-NEXT:  .LBB92_7: # %else17
10829 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10830 ; RV32ZVE32F-NEXT:    beqz a1, .LBB92_9
10831 ; RV32ZVE32F-NEXT:  .LBB92_8: # %cond.load19
10832 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10833 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
10834 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
10835 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
10836 ; RV32ZVE32F-NEXT:  .LBB92_9: # %else20
10837 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
10838 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
10839 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
10840 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
10841 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
10842 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
10843 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
10844 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
10845 ; RV32ZVE32F-NEXT:    ret
10846 ; RV32ZVE32F-NEXT:  .LBB92_10: # %cond.load
10847 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
10848 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
10849 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
10850 ; RV32ZVE32F-NEXT:    beqz a1, .LBB92_2
10851 ; RV32ZVE32F-NEXT:  .LBB92_11: # %cond.load1
10852 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10853 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
10854 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10855 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
10856 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
10857 ; RV32ZVE32F-NEXT:    beqz a1, .LBB92_3
10858 ; RV32ZVE32F-NEXT:  .LBB92_12: # %cond.load4
10859 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10860 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
10861 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10862 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
10863 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
10864 ; RV32ZVE32F-NEXT:    beqz a1, .LBB92_4
10865 ; RV32ZVE32F-NEXT:  .LBB92_13: # %cond.load7
10866 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
10867 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
10868 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10869 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
10870 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
10871 ; RV32ZVE32F-NEXT:    beqz a1, .LBB92_5
10872 ; RV32ZVE32F-NEXT:  .LBB92_14: # %cond.load10
10873 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10874 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
10875 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10876 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
10877 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
10878 ; RV32ZVE32F-NEXT:    beqz a1, .LBB92_6
10879 ; RV32ZVE32F-NEXT:  .LBB92_15: # %cond.load13
10880 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10881 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
10882 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10883 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
10884 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
10885 ; RV32ZVE32F-NEXT:    beqz a1, .LBB92_7
10886 ; RV32ZVE32F-NEXT:  .LBB92_16: # %cond.load16
10887 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
10888 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
10889 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
10890 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
10891 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
10892 ; RV32ZVE32F-NEXT:    bnez a1, .LBB92_8
10893 ; RV32ZVE32F-NEXT:    j .LBB92_9
10895 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i16_v8f64:
10896 ; RV64ZVE32F:       # %bb.0:
10897 ; RV64ZVE32F-NEXT:    lui a2, 16
10898 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
10899 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v0
10900 ; RV64ZVE32F-NEXT:    andi a4, a3, 1
10901 ; RV64ZVE32F-NEXT:    addiw a2, a2, -1
10902 ; RV64ZVE32F-NEXT:    beqz a4, .LBB92_2
10903 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
10904 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e16, m2, ta, ma
10905 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v8
10906 ; RV64ZVE32F-NEXT:    and a4, a4, a2
10907 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
10908 ; RV64ZVE32F-NEXT:    add a4, a1, a4
10909 ; RV64ZVE32F-NEXT:    fld fa0, 0(a4)
10910 ; RV64ZVE32F-NEXT:  .LBB92_2: # %else
10911 ; RV64ZVE32F-NEXT:    andi a4, a3, 2
10912 ; RV64ZVE32F-NEXT:    beqz a4, .LBB92_4
10913 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
10914 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, mf2, ta, ma
10915 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
10916 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v9
10917 ; RV64ZVE32F-NEXT:    and a4, a4, a2
10918 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
10919 ; RV64ZVE32F-NEXT:    add a4, a1, a4
10920 ; RV64ZVE32F-NEXT:    fld fa1, 0(a4)
10921 ; RV64ZVE32F-NEXT:  .LBB92_4: # %else2
10922 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e16, m1, ta, ma
10923 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
10924 ; RV64ZVE32F-NEXT:    andi a4, a3, 4
10925 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e16, mf2, ta, ma
10926 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
10927 ; RV64ZVE32F-NEXT:    bnez a4, .LBB92_14
10928 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
10929 ; RV64ZVE32F-NEXT:    andi a4, a3, 8
10930 ; RV64ZVE32F-NEXT:    bnez a4, .LBB92_15
10931 ; RV64ZVE32F-NEXT:  .LBB92_6: # %else8
10932 ; RV64ZVE32F-NEXT:    andi a4, a3, 16
10933 ; RV64ZVE32F-NEXT:    bnez a4, .LBB92_16
10934 ; RV64ZVE32F-NEXT:  .LBB92_7: # %else11
10935 ; RV64ZVE32F-NEXT:    andi a4, a3, 32
10936 ; RV64ZVE32F-NEXT:    beqz a4, .LBB92_9
10937 ; RV64ZVE32F-NEXT:  .LBB92_8: # %cond.load13
10938 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
10939 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v8
10940 ; RV64ZVE32F-NEXT:    and a4, a4, a2
10941 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
10942 ; RV64ZVE32F-NEXT:    add a4, a1, a4
10943 ; RV64ZVE32F-NEXT:    fld fa5, 0(a4)
10944 ; RV64ZVE32F-NEXT:  .LBB92_9: # %else14
10945 ; RV64ZVE32F-NEXT:    andi a4, a3, 64
10946 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
10947 ; RV64ZVE32F-NEXT:    beqz a4, .LBB92_11
10948 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
10949 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v8
10950 ; RV64ZVE32F-NEXT:    and a4, a4, a2
10951 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
10952 ; RV64ZVE32F-NEXT:    add a4, a1, a4
10953 ; RV64ZVE32F-NEXT:    fld fa6, 0(a4)
10954 ; RV64ZVE32F-NEXT:  .LBB92_11: # %else17
10955 ; RV64ZVE32F-NEXT:    andi a3, a3, -128
10956 ; RV64ZVE32F-NEXT:    beqz a3, .LBB92_13
10957 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
10958 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10959 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
10960 ; RV64ZVE32F-NEXT:    and a2, a3, a2
10961 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
10962 ; RV64ZVE32F-NEXT:    add a1, a1, a2
10963 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
10964 ; RV64ZVE32F-NEXT:  .LBB92_13: # %else20
10965 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
10966 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
10967 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
10968 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
10969 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
10970 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
10971 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
10972 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
10973 ; RV64ZVE32F-NEXT:    ret
10974 ; RV64ZVE32F-NEXT:  .LBB92_14: # %cond.load4
10975 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v8
10976 ; RV64ZVE32F-NEXT:    and a4, a4, a2
10977 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
10978 ; RV64ZVE32F-NEXT:    add a4, a1, a4
10979 ; RV64ZVE32F-NEXT:    fld fa2, 0(a4)
10980 ; RV64ZVE32F-NEXT:    andi a4, a3, 8
10981 ; RV64ZVE32F-NEXT:    beqz a4, .LBB92_6
10982 ; RV64ZVE32F-NEXT:  .LBB92_15: # %cond.load7
10983 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
10984 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v8
10985 ; RV64ZVE32F-NEXT:    and a4, a4, a2
10986 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
10987 ; RV64ZVE32F-NEXT:    add a4, a1, a4
10988 ; RV64ZVE32F-NEXT:    fld fa3, 0(a4)
10989 ; RV64ZVE32F-NEXT:    andi a4, a3, 16
10990 ; RV64ZVE32F-NEXT:    beqz a4, .LBB92_7
10991 ; RV64ZVE32F-NEXT:  .LBB92_16: # %cond.load10
10992 ; RV64ZVE32F-NEXT:    vmv.x.s a4, v9
10993 ; RV64ZVE32F-NEXT:    and a4, a4, a2
10994 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
10995 ; RV64ZVE32F-NEXT:    add a4, a1, a4
10996 ; RV64ZVE32F-NEXT:    fld fa4, 0(a4)
10997 ; RV64ZVE32F-NEXT:    andi a4, a3, 32
10998 ; RV64ZVE32F-NEXT:    bnez a4, .LBB92_8
10999 ; RV64ZVE32F-NEXT:    j .LBB92_9
11000   %eidxs = zext <8 x i16> %idxs to <8 x i64>
11001   %ptrs = getelementptr inbounds double, ptr %base, <8 x i64> %eidxs
11002   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
11003   ret <8 x double> %v
11006 define <8 x double> @mgather_baseidx_v8i32_v8f64(ptr %base, <8 x i32> %idxs, <8 x i1> %m, <8 x double> %passthru) {
11007 ; RV32V-LABEL: mgather_baseidx_v8i32_v8f64:
11008 ; RV32V:       # %bb.0:
11009 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
11010 ; RV32V-NEXT:    vsll.vi v8, v8, 3
11011 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
11012 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
11013 ; RV32V-NEXT:    vmv.v.v v8, v12
11014 ; RV32V-NEXT:    ret
11016 ; RV64V-LABEL: mgather_baseidx_v8i32_v8f64:
11017 ; RV64V:       # %bb.0:
11018 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
11019 ; RV64V-NEXT:    vsext.vf2 v16, v8
11020 ; RV64V-NEXT:    vsll.vi v8, v16, 3
11021 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
11022 ; RV64V-NEXT:    vmv.v.v v8, v12
11023 ; RV64V-NEXT:    ret
11025 ; RV32ZVE32F-LABEL: mgather_baseidx_v8i32_v8f64:
11026 ; RV32ZVE32F:       # %bb.0:
11027 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
11028 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 3
11029 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
11030 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
11031 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
11032 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
11033 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
11034 ; RV32ZVE32F-NEXT:    bnez a3, .LBB93_10
11035 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
11036 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
11037 ; RV32ZVE32F-NEXT:    bnez a1, .LBB93_11
11038 ; RV32ZVE32F-NEXT:  .LBB93_2: # %else2
11039 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
11040 ; RV32ZVE32F-NEXT:    bnez a1, .LBB93_12
11041 ; RV32ZVE32F-NEXT:  .LBB93_3: # %else5
11042 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
11043 ; RV32ZVE32F-NEXT:    bnez a1, .LBB93_13
11044 ; RV32ZVE32F-NEXT:  .LBB93_4: # %else8
11045 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
11046 ; RV32ZVE32F-NEXT:    bnez a1, .LBB93_14
11047 ; RV32ZVE32F-NEXT:  .LBB93_5: # %else11
11048 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
11049 ; RV32ZVE32F-NEXT:    bnez a1, .LBB93_15
11050 ; RV32ZVE32F-NEXT:  .LBB93_6: # %else14
11051 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
11052 ; RV32ZVE32F-NEXT:    bnez a1, .LBB93_16
11053 ; RV32ZVE32F-NEXT:  .LBB93_7: # %else17
11054 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
11055 ; RV32ZVE32F-NEXT:    beqz a1, .LBB93_9
11056 ; RV32ZVE32F-NEXT:  .LBB93_8: # %cond.load19
11057 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11058 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
11059 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
11060 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
11061 ; RV32ZVE32F-NEXT:  .LBB93_9: # %else20
11062 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
11063 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
11064 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
11065 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
11066 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
11067 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
11068 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
11069 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
11070 ; RV32ZVE32F-NEXT:    ret
11071 ; RV32ZVE32F-NEXT:  .LBB93_10: # %cond.load
11072 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
11073 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
11074 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
11075 ; RV32ZVE32F-NEXT:    beqz a1, .LBB93_2
11076 ; RV32ZVE32F-NEXT:  .LBB93_11: # %cond.load1
11077 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11078 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11079 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11080 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
11081 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
11082 ; RV32ZVE32F-NEXT:    beqz a1, .LBB93_3
11083 ; RV32ZVE32F-NEXT:  .LBB93_12: # %cond.load4
11084 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11085 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
11086 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11087 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
11088 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
11089 ; RV32ZVE32F-NEXT:    beqz a1, .LBB93_4
11090 ; RV32ZVE32F-NEXT:  .LBB93_13: # %cond.load7
11091 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11092 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
11093 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11094 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
11095 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
11096 ; RV32ZVE32F-NEXT:    beqz a1, .LBB93_5
11097 ; RV32ZVE32F-NEXT:  .LBB93_14: # %cond.load10
11098 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11099 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11100 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11101 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
11102 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
11103 ; RV32ZVE32F-NEXT:    beqz a1, .LBB93_6
11104 ; RV32ZVE32F-NEXT:  .LBB93_15: # %cond.load13
11105 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11106 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
11107 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11108 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
11109 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
11110 ; RV32ZVE32F-NEXT:    beqz a1, .LBB93_7
11111 ; RV32ZVE32F-NEXT:  .LBB93_16: # %cond.load16
11112 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11113 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
11114 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11115 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
11116 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
11117 ; RV32ZVE32F-NEXT:    bnez a1, .LBB93_8
11118 ; RV32ZVE32F-NEXT:    j .LBB93_9
11120 ; RV64ZVE32F-LABEL: mgather_baseidx_v8i32_v8f64:
11121 ; RV64ZVE32F:       # %bb.0:
11122 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
11123 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
11124 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
11125 ; RV64ZVE32F-NEXT:    beqz a3, .LBB93_2
11126 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
11127 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
11128 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11129 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11130 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11131 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
11132 ; RV64ZVE32F-NEXT:  .LBB93_2: # %else
11133 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
11134 ; RV64ZVE32F-NEXT:    beqz a3, .LBB93_4
11135 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
11136 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11137 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11138 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v10
11139 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11140 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11141 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
11142 ; RV64ZVE32F-NEXT:  .LBB93_4: # %else2
11143 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
11144 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11145 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
11146 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
11147 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
11148 ; RV64ZVE32F-NEXT:    bnez a3, .LBB93_14
11149 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
11150 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
11151 ; RV64ZVE32F-NEXT:    bnez a3, .LBB93_15
11152 ; RV64ZVE32F-NEXT:  .LBB93_6: # %else8
11153 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
11154 ; RV64ZVE32F-NEXT:    bnez a3, .LBB93_16
11155 ; RV64ZVE32F-NEXT:  .LBB93_7: # %else11
11156 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
11157 ; RV64ZVE32F-NEXT:    beqz a3, .LBB93_9
11158 ; RV64ZVE32F-NEXT:  .LBB93_8: # %cond.load13
11159 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
11160 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11161 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11162 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11163 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
11164 ; RV64ZVE32F-NEXT:  .LBB93_9: # %else14
11165 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
11166 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
11167 ; RV64ZVE32F-NEXT:    beqz a3, .LBB93_11
11168 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
11169 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11170 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11171 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11172 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
11173 ; RV64ZVE32F-NEXT:  .LBB93_11: # %else17
11174 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
11175 ; RV64ZVE32F-NEXT:    beqz a2, .LBB93_13
11176 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
11177 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
11178 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
11179 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
11180 ; RV64ZVE32F-NEXT:    add a1, a1, a2
11181 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
11182 ; RV64ZVE32F-NEXT:  .LBB93_13: # %else20
11183 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
11184 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
11185 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
11186 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
11187 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
11188 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
11189 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
11190 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
11191 ; RV64ZVE32F-NEXT:    ret
11192 ; RV64ZVE32F-NEXT:  .LBB93_14: # %cond.load4
11193 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11194 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11195 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11196 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
11197 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
11198 ; RV64ZVE32F-NEXT:    beqz a3, .LBB93_6
11199 ; RV64ZVE32F-NEXT:  .LBB93_15: # %cond.load7
11200 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
11201 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11202 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11203 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11204 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
11205 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
11206 ; RV64ZVE32F-NEXT:    beqz a3, .LBB93_7
11207 ; RV64ZVE32F-NEXT:  .LBB93_16: # %cond.load10
11208 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v10
11209 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11210 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11211 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
11212 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
11213 ; RV64ZVE32F-NEXT:    bnez a3, .LBB93_8
11214 ; RV64ZVE32F-NEXT:    j .LBB93_9
11215   %ptrs = getelementptr inbounds double, ptr %base, <8 x i32> %idxs
11216   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
11217   ret <8 x double> %v
11220 define <8 x double> @mgather_baseidx_sext_v8i32_v8f64(ptr %base, <8 x i32> %idxs, <8 x i1> %m, <8 x double> %passthru) {
11221 ; RV32V-LABEL: mgather_baseidx_sext_v8i32_v8f64:
11222 ; RV32V:       # %bb.0:
11223 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
11224 ; RV32V-NEXT:    vsll.vi v8, v8, 3
11225 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
11226 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
11227 ; RV32V-NEXT:    vmv.v.v v8, v12
11228 ; RV32V-NEXT:    ret
11230 ; RV64V-LABEL: mgather_baseidx_sext_v8i32_v8f64:
11231 ; RV64V:       # %bb.0:
11232 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
11233 ; RV64V-NEXT:    vsext.vf2 v16, v8
11234 ; RV64V-NEXT:    vsll.vi v8, v16, 3
11235 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
11236 ; RV64V-NEXT:    vmv.v.v v8, v12
11237 ; RV64V-NEXT:    ret
11239 ; RV32ZVE32F-LABEL: mgather_baseidx_sext_v8i32_v8f64:
11240 ; RV32ZVE32F:       # %bb.0:
11241 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
11242 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 3
11243 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
11244 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
11245 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
11246 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
11247 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
11248 ; RV32ZVE32F-NEXT:    bnez a3, .LBB94_10
11249 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
11250 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
11251 ; RV32ZVE32F-NEXT:    bnez a1, .LBB94_11
11252 ; RV32ZVE32F-NEXT:  .LBB94_2: # %else2
11253 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
11254 ; RV32ZVE32F-NEXT:    bnez a1, .LBB94_12
11255 ; RV32ZVE32F-NEXT:  .LBB94_3: # %else5
11256 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
11257 ; RV32ZVE32F-NEXT:    bnez a1, .LBB94_13
11258 ; RV32ZVE32F-NEXT:  .LBB94_4: # %else8
11259 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
11260 ; RV32ZVE32F-NEXT:    bnez a1, .LBB94_14
11261 ; RV32ZVE32F-NEXT:  .LBB94_5: # %else11
11262 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
11263 ; RV32ZVE32F-NEXT:    bnez a1, .LBB94_15
11264 ; RV32ZVE32F-NEXT:  .LBB94_6: # %else14
11265 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
11266 ; RV32ZVE32F-NEXT:    bnez a1, .LBB94_16
11267 ; RV32ZVE32F-NEXT:  .LBB94_7: # %else17
11268 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
11269 ; RV32ZVE32F-NEXT:    beqz a1, .LBB94_9
11270 ; RV32ZVE32F-NEXT:  .LBB94_8: # %cond.load19
11271 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11272 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
11273 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
11274 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
11275 ; RV32ZVE32F-NEXT:  .LBB94_9: # %else20
11276 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
11277 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
11278 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
11279 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
11280 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
11281 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
11282 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
11283 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
11284 ; RV32ZVE32F-NEXT:    ret
11285 ; RV32ZVE32F-NEXT:  .LBB94_10: # %cond.load
11286 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
11287 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
11288 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
11289 ; RV32ZVE32F-NEXT:    beqz a1, .LBB94_2
11290 ; RV32ZVE32F-NEXT:  .LBB94_11: # %cond.load1
11291 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11292 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11293 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11294 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
11295 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
11296 ; RV32ZVE32F-NEXT:    beqz a1, .LBB94_3
11297 ; RV32ZVE32F-NEXT:  .LBB94_12: # %cond.load4
11298 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11299 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
11300 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11301 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
11302 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
11303 ; RV32ZVE32F-NEXT:    beqz a1, .LBB94_4
11304 ; RV32ZVE32F-NEXT:  .LBB94_13: # %cond.load7
11305 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11306 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
11307 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11308 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
11309 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
11310 ; RV32ZVE32F-NEXT:    beqz a1, .LBB94_5
11311 ; RV32ZVE32F-NEXT:  .LBB94_14: # %cond.load10
11312 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11313 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11314 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11315 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
11316 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
11317 ; RV32ZVE32F-NEXT:    beqz a1, .LBB94_6
11318 ; RV32ZVE32F-NEXT:  .LBB94_15: # %cond.load13
11319 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11320 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
11321 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11322 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
11323 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
11324 ; RV32ZVE32F-NEXT:    beqz a1, .LBB94_7
11325 ; RV32ZVE32F-NEXT:  .LBB94_16: # %cond.load16
11326 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11327 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
11328 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11329 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
11330 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
11331 ; RV32ZVE32F-NEXT:    bnez a1, .LBB94_8
11332 ; RV32ZVE32F-NEXT:    j .LBB94_9
11334 ; RV64ZVE32F-LABEL: mgather_baseidx_sext_v8i32_v8f64:
11335 ; RV64ZVE32F:       # %bb.0:
11336 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
11337 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
11338 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
11339 ; RV64ZVE32F-NEXT:    beqz a3, .LBB94_2
11340 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
11341 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
11342 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11343 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11344 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11345 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
11346 ; RV64ZVE32F-NEXT:  .LBB94_2: # %else
11347 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
11348 ; RV64ZVE32F-NEXT:    beqz a3, .LBB94_4
11349 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
11350 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11351 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11352 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v10
11353 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11354 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11355 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
11356 ; RV64ZVE32F-NEXT:  .LBB94_4: # %else2
11357 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
11358 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11359 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
11360 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
11361 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
11362 ; RV64ZVE32F-NEXT:    bnez a3, .LBB94_14
11363 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
11364 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
11365 ; RV64ZVE32F-NEXT:    bnez a3, .LBB94_15
11366 ; RV64ZVE32F-NEXT:  .LBB94_6: # %else8
11367 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
11368 ; RV64ZVE32F-NEXT:    bnez a3, .LBB94_16
11369 ; RV64ZVE32F-NEXT:  .LBB94_7: # %else11
11370 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
11371 ; RV64ZVE32F-NEXT:    beqz a3, .LBB94_9
11372 ; RV64ZVE32F-NEXT:  .LBB94_8: # %cond.load13
11373 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
11374 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11375 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11376 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11377 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
11378 ; RV64ZVE32F-NEXT:  .LBB94_9: # %else14
11379 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
11380 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
11381 ; RV64ZVE32F-NEXT:    beqz a3, .LBB94_11
11382 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
11383 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11384 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11385 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11386 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
11387 ; RV64ZVE32F-NEXT:  .LBB94_11: # %else17
11388 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
11389 ; RV64ZVE32F-NEXT:    beqz a2, .LBB94_13
11390 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
11391 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
11392 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
11393 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
11394 ; RV64ZVE32F-NEXT:    add a1, a1, a2
11395 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
11396 ; RV64ZVE32F-NEXT:  .LBB94_13: # %else20
11397 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
11398 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
11399 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
11400 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
11401 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
11402 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
11403 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
11404 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
11405 ; RV64ZVE32F-NEXT:    ret
11406 ; RV64ZVE32F-NEXT:  .LBB94_14: # %cond.load4
11407 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11408 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11409 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11410 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
11411 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
11412 ; RV64ZVE32F-NEXT:    beqz a3, .LBB94_6
11413 ; RV64ZVE32F-NEXT:  .LBB94_15: # %cond.load7
11414 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
11415 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11416 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11417 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11418 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
11419 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
11420 ; RV64ZVE32F-NEXT:    beqz a3, .LBB94_7
11421 ; RV64ZVE32F-NEXT:  .LBB94_16: # %cond.load10
11422 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v10
11423 ; RV64ZVE32F-NEXT:    slli a3, a3, 3
11424 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11425 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
11426 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
11427 ; RV64ZVE32F-NEXT:    bnez a3, .LBB94_8
11428 ; RV64ZVE32F-NEXT:    j .LBB94_9
11429   %eidxs = sext <8 x i32> %idxs to <8 x i64>
11430   %ptrs = getelementptr inbounds double, ptr %base, <8 x i64> %eidxs
11431   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
11432   ret <8 x double> %v
11435 define <8 x double> @mgather_baseidx_zext_v8i32_v8f64(ptr %base, <8 x i32> %idxs, <8 x i1> %m, <8 x double> %passthru) {
11436 ; RV32V-LABEL: mgather_baseidx_zext_v8i32_v8f64:
11437 ; RV32V:       # %bb.0:
11438 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
11439 ; RV32V-NEXT:    vsll.vi v8, v8, 3
11440 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
11441 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
11442 ; RV32V-NEXT:    vmv.v.v v8, v12
11443 ; RV32V-NEXT:    ret
11445 ; RV64V-LABEL: mgather_baseidx_zext_v8i32_v8f64:
11446 ; RV64V:       # %bb.0:
11447 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
11448 ; RV64V-NEXT:    vzext.vf2 v16, v8
11449 ; RV64V-NEXT:    vsll.vi v8, v16, 3
11450 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
11451 ; RV64V-NEXT:    vmv.v.v v8, v12
11452 ; RV64V-NEXT:    ret
11454 ; RV32ZVE32F-LABEL: mgather_baseidx_zext_v8i32_v8f64:
11455 ; RV32ZVE32F:       # %bb.0:
11456 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
11457 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 3
11458 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
11459 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
11460 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
11461 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
11462 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
11463 ; RV32ZVE32F-NEXT:    bnez a3, .LBB95_10
11464 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
11465 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
11466 ; RV32ZVE32F-NEXT:    bnez a1, .LBB95_11
11467 ; RV32ZVE32F-NEXT:  .LBB95_2: # %else2
11468 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
11469 ; RV32ZVE32F-NEXT:    bnez a1, .LBB95_12
11470 ; RV32ZVE32F-NEXT:  .LBB95_3: # %else5
11471 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
11472 ; RV32ZVE32F-NEXT:    bnez a1, .LBB95_13
11473 ; RV32ZVE32F-NEXT:  .LBB95_4: # %else8
11474 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
11475 ; RV32ZVE32F-NEXT:    bnez a1, .LBB95_14
11476 ; RV32ZVE32F-NEXT:  .LBB95_5: # %else11
11477 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
11478 ; RV32ZVE32F-NEXT:    bnez a1, .LBB95_15
11479 ; RV32ZVE32F-NEXT:  .LBB95_6: # %else14
11480 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
11481 ; RV32ZVE32F-NEXT:    bnez a1, .LBB95_16
11482 ; RV32ZVE32F-NEXT:  .LBB95_7: # %else17
11483 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
11484 ; RV32ZVE32F-NEXT:    beqz a1, .LBB95_9
11485 ; RV32ZVE32F-NEXT:  .LBB95_8: # %cond.load19
11486 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11487 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
11488 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
11489 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
11490 ; RV32ZVE32F-NEXT:  .LBB95_9: # %else20
11491 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
11492 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
11493 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
11494 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
11495 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
11496 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
11497 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
11498 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
11499 ; RV32ZVE32F-NEXT:    ret
11500 ; RV32ZVE32F-NEXT:  .LBB95_10: # %cond.load
11501 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
11502 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
11503 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
11504 ; RV32ZVE32F-NEXT:    beqz a1, .LBB95_2
11505 ; RV32ZVE32F-NEXT:  .LBB95_11: # %cond.load1
11506 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11507 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11508 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11509 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
11510 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
11511 ; RV32ZVE32F-NEXT:    beqz a1, .LBB95_3
11512 ; RV32ZVE32F-NEXT:  .LBB95_12: # %cond.load4
11513 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11514 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
11515 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11516 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
11517 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
11518 ; RV32ZVE32F-NEXT:    beqz a1, .LBB95_4
11519 ; RV32ZVE32F-NEXT:  .LBB95_13: # %cond.load7
11520 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11521 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
11522 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11523 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
11524 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
11525 ; RV32ZVE32F-NEXT:    beqz a1, .LBB95_5
11526 ; RV32ZVE32F-NEXT:  .LBB95_14: # %cond.load10
11527 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11528 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11529 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11530 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
11531 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
11532 ; RV32ZVE32F-NEXT:    beqz a1, .LBB95_6
11533 ; RV32ZVE32F-NEXT:  .LBB95_15: # %cond.load13
11534 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11535 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
11536 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11537 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
11538 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
11539 ; RV32ZVE32F-NEXT:    beqz a1, .LBB95_7
11540 ; RV32ZVE32F-NEXT:  .LBB95_16: # %cond.load16
11541 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11542 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
11543 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11544 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
11545 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
11546 ; RV32ZVE32F-NEXT:    bnez a1, .LBB95_8
11547 ; RV32ZVE32F-NEXT:    j .LBB95_9
11549 ; RV64ZVE32F-LABEL: mgather_baseidx_zext_v8i32_v8f64:
11550 ; RV64ZVE32F:       # %bb.0:
11551 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
11552 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v0
11553 ; RV64ZVE32F-NEXT:    andi a3, a2, 1
11554 ; RV64ZVE32F-NEXT:    beqz a3, .LBB95_2
11555 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
11556 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e32, m4, ta, ma
11557 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11558 ; RV64ZVE32F-NEXT:    slli a3, a3, 32
11559 ; RV64ZVE32F-NEXT:    srli a3, a3, 29
11560 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11561 ; RV64ZVE32F-NEXT:    fld fa0, 0(a3)
11562 ; RV64ZVE32F-NEXT:  .LBB95_2: # %else
11563 ; RV64ZVE32F-NEXT:    andi a3, a2, 2
11564 ; RV64ZVE32F-NEXT:    beqz a3, .LBB95_4
11565 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
11566 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11567 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11568 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v10
11569 ; RV64ZVE32F-NEXT:    slli a3, a3, 32
11570 ; RV64ZVE32F-NEXT:    srli a3, a3, 29
11571 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11572 ; RV64ZVE32F-NEXT:    fld fa1, 0(a3)
11573 ; RV64ZVE32F-NEXT:  .LBB95_4: # %else2
11574 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m2, ta, ma
11575 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11576 ; RV64ZVE32F-NEXT:    andi a3, a2, 4
11577 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e32, m1, ta, ma
11578 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
11579 ; RV64ZVE32F-NEXT:    bnez a3, .LBB95_14
11580 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
11581 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
11582 ; RV64ZVE32F-NEXT:    bnez a3, .LBB95_15
11583 ; RV64ZVE32F-NEXT:  .LBB95_6: # %else8
11584 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
11585 ; RV64ZVE32F-NEXT:    bnez a3, .LBB95_16
11586 ; RV64ZVE32F-NEXT:  .LBB95_7: # %else11
11587 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
11588 ; RV64ZVE32F-NEXT:    beqz a3, .LBB95_9
11589 ; RV64ZVE32F-NEXT:  .LBB95_8: # %cond.load13
11590 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
11591 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11592 ; RV64ZVE32F-NEXT:    slli a3, a3, 32
11593 ; RV64ZVE32F-NEXT:    srli a3, a3, 29
11594 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11595 ; RV64ZVE32F-NEXT:    fld fa5, 0(a3)
11596 ; RV64ZVE32F-NEXT:  .LBB95_9: # %else14
11597 ; RV64ZVE32F-NEXT:    andi a3, a2, 64
11598 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
11599 ; RV64ZVE32F-NEXT:    beqz a3, .LBB95_11
11600 ; RV64ZVE32F-NEXT:  # %bb.10: # %cond.load16
11601 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11602 ; RV64ZVE32F-NEXT:    slli a3, a3, 32
11603 ; RV64ZVE32F-NEXT:    srli a3, a3, 29
11604 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11605 ; RV64ZVE32F-NEXT:    fld fa6, 0(a3)
11606 ; RV64ZVE32F-NEXT:  .LBB95_11: # %else17
11607 ; RV64ZVE32F-NEXT:    andi a2, a2, -128
11608 ; RV64ZVE32F-NEXT:    beqz a2, .LBB95_13
11609 ; RV64ZVE32F-NEXT:  # %bb.12: # %cond.load19
11610 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
11611 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
11612 ; RV64ZVE32F-NEXT:    slli a2, a2, 32
11613 ; RV64ZVE32F-NEXT:    srli a2, a2, 29
11614 ; RV64ZVE32F-NEXT:    add a1, a1, a2
11615 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
11616 ; RV64ZVE32F-NEXT:  .LBB95_13: # %else20
11617 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
11618 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
11619 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
11620 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
11621 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
11622 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
11623 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
11624 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
11625 ; RV64ZVE32F-NEXT:    ret
11626 ; RV64ZVE32F-NEXT:  .LBB95_14: # %cond.load4
11627 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11628 ; RV64ZVE32F-NEXT:    slli a3, a3, 32
11629 ; RV64ZVE32F-NEXT:    srli a3, a3, 29
11630 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11631 ; RV64ZVE32F-NEXT:    fld fa2, 0(a3)
11632 ; RV64ZVE32F-NEXT:    andi a3, a2, 8
11633 ; RV64ZVE32F-NEXT:    beqz a3, .LBB95_6
11634 ; RV64ZVE32F-NEXT:  .LBB95_15: # %cond.load7
11635 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
11636 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v8
11637 ; RV64ZVE32F-NEXT:    slli a3, a3, 32
11638 ; RV64ZVE32F-NEXT:    srli a3, a3, 29
11639 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11640 ; RV64ZVE32F-NEXT:    fld fa3, 0(a3)
11641 ; RV64ZVE32F-NEXT:    andi a3, a2, 16
11642 ; RV64ZVE32F-NEXT:    beqz a3, .LBB95_7
11643 ; RV64ZVE32F-NEXT:  .LBB95_16: # %cond.load10
11644 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v10
11645 ; RV64ZVE32F-NEXT:    slli a3, a3, 32
11646 ; RV64ZVE32F-NEXT:    srli a3, a3, 29
11647 ; RV64ZVE32F-NEXT:    add a3, a1, a3
11648 ; RV64ZVE32F-NEXT:    fld fa4, 0(a3)
11649 ; RV64ZVE32F-NEXT:    andi a3, a2, 32
11650 ; RV64ZVE32F-NEXT:    bnez a3, .LBB95_8
11651 ; RV64ZVE32F-NEXT:    j .LBB95_9
11652   %eidxs = zext <8 x i32> %idxs to <8 x i64>
11653   %ptrs = getelementptr inbounds double, ptr %base, <8 x i64> %eidxs
11654   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
11655   ret <8 x double> %v
11658 define <8 x double> @mgather_baseidx_v8f64(ptr %base, <8 x i64> %idxs, <8 x i1> %m, <8 x double> %passthru) {
11659 ; RV32V-LABEL: mgather_baseidx_v8f64:
11660 ; RV32V:       # %bb.0:
11661 ; RV32V-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
11662 ; RV32V-NEXT:    vnsrl.wi v16, v8, 0
11663 ; RV32V-NEXT:    vsll.vi v8, v16, 3
11664 ; RV32V-NEXT:    vsetvli zero, zero, e64, m4, ta, mu
11665 ; RV32V-NEXT:    vluxei32.v v12, (a0), v8, v0.t
11666 ; RV32V-NEXT:    vmv.v.v v8, v12
11667 ; RV32V-NEXT:    ret
11669 ; RV64V-LABEL: mgather_baseidx_v8f64:
11670 ; RV64V:       # %bb.0:
11671 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
11672 ; RV64V-NEXT:    vsll.vi v8, v8, 3
11673 ; RV64V-NEXT:    vluxei64.v v12, (a0), v8, v0.t
11674 ; RV64V-NEXT:    vmv.v.v v8, v12
11675 ; RV64V-NEXT:    ret
11677 ; RV32ZVE32F-LABEL: mgather_baseidx_v8f64:
11678 ; RV32ZVE32F:       # %bb.0:
11679 ; RV32ZVE32F-NEXT:    lw a3, 56(a2)
11680 ; RV32ZVE32F-NEXT:    lw a4, 48(a2)
11681 ; RV32ZVE32F-NEXT:    lw a5, 40(a2)
11682 ; RV32ZVE32F-NEXT:    lw a6, 32(a2)
11683 ; RV32ZVE32F-NEXT:    lw a7, 0(a2)
11684 ; RV32ZVE32F-NEXT:    lw t0, 8(a2)
11685 ; RV32ZVE32F-NEXT:    lw t1, 16(a2)
11686 ; RV32ZVE32F-NEXT:    lw a2, 24(a2)
11687 ; RV32ZVE32F-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
11688 ; RV32ZVE32F-NEXT:    vmv.v.x v8, a7
11689 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, t0
11690 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, t1
11691 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
11692 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
11693 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a5
11694 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a4
11695 ; RV32ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
11696 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 3
11697 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, ta, ma
11698 ; RV32ZVE32F-NEXT:    vmv.x.s a2, v0
11699 ; RV32ZVE32F-NEXT:    andi a3, a2, 1
11700 ; RV32ZVE32F-NEXT:    vsetvli zero, zero, e32, m2, ta, ma
11701 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
11702 ; RV32ZVE32F-NEXT:    bnez a3, .LBB96_10
11703 ; RV32ZVE32F-NEXT:  # %bb.1: # %else
11704 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
11705 ; RV32ZVE32F-NEXT:    bnez a1, .LBB96_11
11706 ; RV32ZVE32F-NEXT:  .LBB96_2: # %else2
11707 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
11708 ; RV32ZVE32F-NEXT:    bnez a1, .LBB96_12
11709 ; RV32ZVE32F-NEXT:  .LBB96_3: # %else5
11710 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
11711 ; RV32ZVE32F-NEXT:    bnez a1, .LBB96_13
11712 ; RV32ZVE32F-NEXT:  .LBB96_4: # %else8
11713 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
11714 ; RV32ZVE32F-NEXT:    bnez a1, .LBB96_14
11715 ; RV32ZVE32F-NEXT:  .LBB96_5: # %else11
11716 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
11717 ; RV32ZVE32F-NEXT:    bnez a1, .LBB96_15
11718 ; RV32ZVE32F-NEXT:  .LBB96_6: # %else14
11719 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
11720 ; RV32ZVE32F-NEXT:    bnez a1, .LBB96_16
11721 ; RV32ZVE32F-NEXT:  .LBB96_7: # %else17
11722 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
11723 ; RV32ZVE32F-NEXT:    beqz a1, .LBB96_9
11724 ; RV32ZVE32F-NEXT:  .LBB96_8: # %cond.load19
11725 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11726 ; RV32ZVE32F-NEXT:    vslidedown.vi v8, v8, 7
11727 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
11728 ; RV32ZVE32F-NEXT:    fld fa7, 0(a1)
11729 ; RV32ZVE32F-NEXT:  .LBB96_9: # %else20
11730 ; RV32ZVE32F-NEXT:    fsd fa0, 0(a0)
11731 ; RV32ZVE32F-NEXT:    fsd fa1, 8(a0)
11732 ; RV32ZVE32F-NEXT:    fsd fa2, 16(a0)
11733 ; RV32ZVE32F-NEXT:    fsd fa3, 24(a0)
11734 ; RV32ZVE32F-NEXT:    fsd fa4, 32(a0)
11735 ; RV32ZVE32F-NEXT:    fsd fa5, 40(a0)
11736 ; RV32ZVE32F-NEXT:    fsd fa6, 48(a0)
11737 ; RV32ZVE32F-NEXT:    fsd fa7, 56(a0)
11738 ; RV32ZVE32F-NEXT:    ret
11739 ; RV32ZVE32F-NEXT:  .LBB96_10: # %cond.load
11740 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
11741 ; RV32ZVE32F-NEXT:    fld fa0, 0(a1)
11742 ; RV32ZVE32F-NEXT:    andi a1, a2, 2
11743 ; RV32ZVE32F-NEXT:    beqz a1, .LBB96_2
11744 ; RV32ZVE32F-NEXT:  .LBB96_11: # %cond.load1
11745 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11746 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11747 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11748 ; RV32ZVE32F-NEXT:    fld fa1, 0(a1)
11749 ; RV32ZVE32F-NEXT:    andi a1, a2, 4
11750 ; RV32ZVE32F-NEXT:    beqz a1, .LBB96_3
11751 ; RV32ZVE32F-NEXT:  .LBB96_12: # %cond.load4
11752 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11753 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 2
11754 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11755 ; RV32ZVE32F-NEXT:    fld fa2, 0(a1)
11756 ; RV32ZVE32F-NEXT:    andi a1, a2, 8
11757 ; RV32ZVE32F-NEXT:    beqz a1, .LBB96_4
11758 ; RV32ZVE32F-NEXT:  .LBB96_13: # %cond.load7
11759 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
11760 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 3
11761 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11762 ; RV32ZVE32F-NEXT:    fld fa3, 0(a1)
11763 ; RV32ZVE32F-NEXT:    andi a1, a2, 16
11764 ; RV32ZVE32F-NEXT:    beqz a1, .LBB96_5
11765 ; RV32ZVE32F-NEXT:  .LBB96_14: # %cond.load10
11766 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11767 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11768 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11769 ; RV32ZVE32F-NEXT:    fld fa4, 0(a1)
11770 ; RV32ZVE32F-NEXT:    andi a1, a2, 32
11771 ; RV32ZVE32F-NEXT:    beqz a1, .LBB96_6
11772 ; RV32ZVE32F-NEXT:  .LBB96_15: # %cond.load13
11773 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11774 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 5
11775 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11776 ; RV32ZVE32F-NEXT:    fld fa5, 0(a1)
11777 ; RV32ZVE32F-NEXT:    andi a1, a2, 64
11778 ; RV32ZVE32F-NEXT:    beqz a1, .LBB96_7
11779 ; RV32ZVE32F-NEXT:  .LBB96_16: # %cond.load16
11780 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
11781 ; RV32ZVE32F-NEXT:    vslidedown.vi v10, v8, 6
11782 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v10
11783 ; RV32ZVE32F-NEXT:    fld fa6, 0(a1)
11784 ; RV32ZVE32F-NEXT:    andi a1, a2, -128
11785 ; RV32ZVE32F-NEXT:    bnez a1, .LBB96_8
11786 ; RV32ZVE32F-NEXT:    j .LBB96_9
11788 ; RV64ZVE32F-LABEL: mgather_baseidx_v8f64:
11789 ; RV64ZVE32F:       # %bb.0:
11790 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
11791 ; RV64ZVE32F-NEXT:    vmv.x.s a3, v0
11792 ; RV64ZVE32F-NEXT:    andi a4, a3, 1
11793 ; RV64ZVE32F-NEXT:    bnez a4, .LBB96_10
11794 ; RV64ZVE32F-NEXT:  # %bb.1: # %else
11795 ; RV64ZVE32F-NEXT:    andi a4, a3, 2
11796 ; RV64ZVE32F-NEXT:    bnez a4, .LBB96_11
11797 ; RV64ZVE32F-NEXT:  .LBB96_2: # %else2
11798 ; RV64ZVE32F-NEXT:    andi a4, a3, 4
11799 ; RV64ZVE32F-NEXT:    bnez a4, .LBB96_12
11800 ; RV64ZVE32F-NEXT:  .LBB96_3: # %else5
11801 ; RV64ZVE32F-NEXT:    andi a4, a3, 8
11802 ; RV64ZVE32F-NEXT:    bnez a4, .LBB96_13
11803 ; RV64ZVE32F-NEXT:  .LBB96_4: # %else8
11804 ; RV64ZVE32F-NEXT:    andi a4, a3, 16
11805 ; RV64ZVE32F-NEXT:    bnez a4, .LBB96_14
11806 ; RV64ZVE32F-NEXT:  .LBB96_5: # %else11
11807 ; RV64ZVE32F-NEXT:    andi a4, a3, 32
11808 ; RV64ZVE32F-NEXT:    bnez a4, .LBB96_15
11809 ; RV64ZVE32F-NEXT:  .LBB96_6: # %else14
11810 ; RV64ZVE32F-NEXT:    andi a4, a3, 64
11811 ; RV64ZVE32F-NEXT:    bnez a4, .LBB96_16
11812 ; RV64ZVE32F-NEXT:  .LBB96_7: # %else17
11813 ; RV64ZVE32F-NEXT:    andi a3, a3, -128
11814 ; RV64ZVE32F-NEXT:    beqz a3, .LBB96_9
11815 ; RV64ZVE32F-NEXT:  .LBB96_8: # %cond.load19
11816 ; RV64ZVE32F-NEXT:    ld a2, 56(a2)
11817 ; RV64ZVE32F-NEXT:    slli a2, a2, 3
11818 ; RV64ZVE32F-NEXT:    add a1, a1, a2
11819 ; RV64ZVE32F-NEXT:    fld fa7, 0(a1)
11820 ; RV64ZVE32F-NEXT:  .LBB96_9: # %else20
11821 ; RV64ZVE32F-NEXT:    fsd fa0, 0(a0)
11822 ; RV64ZVE32F-NEXT:    fsd fa1, 8(a0)
11823 ; RV64ZVE32F-NEXT:    fsd fa2, 16(a0)
11824 ; RV64ZVE32F-NEXT:    fsd fa3, 24(a0)
11825 ; RV64ZVE32F-NEXT:    fsd fa4, 32(a0)
11826 ; RV64ZVE32F-NEXT:    fsd fa5, 40(a0)
11827 ; RV64ZVE32F-NEXT:    fsd fa6, 48(a0)
11828 ; RV64ZVE32F-NEXT:    fsd fa7, 56(a0)
11829 ; RV64ZVE32F-NEXT:    ret
11830 ; RV64ZVE32F-NEXT:  .LBB96_10: # %cond.load
11831 ; RV64ZVE32F-NEXT:    ld a4, 0(a2)
11832 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
11833 ; RV64ZVE32F-NEXT:    add a4, a1, a4
11834 ; RV64ZVE32F-NEXT:    fld fa0, 0(a4)
11835 ; RV64ZVE32F-NEXT:    andi a4, a3, 2
11836 ; RV64ZVE32F-NEXT:    beqz a4, .LBB96_2
11837 ; RV64ZVE32F-NEXT:  .LBB96_11: # %cond.load1
11838 ; RV64ZVE32F-NEXT:    ld a4, 8(a2)
11839 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
11840 ; RV64ZVE32F-NEXT:    add a4, a1, a4
11841 ; RV64ZVE32F-NEXT:    fld fa1, 0(a4)
11842 ; RV64ZVE32F-NEXT:    andi a4, a3, 4
11843 ; RV64ZVE32F-NEXT:    beqz a4, .LBB96_3
11844 ; RV64ZVE32F-NEXT:  .LBB96_12: # %cond.load4
11845 ; RV64ZVE32F-NEXT:    ld a4, 16(a2)
11846 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
11847 ; RV64ZVE32F-NEXT:    add a4, a1, a4
11848 ; RV64ZVE32F-NEXT:    fld fa2, 0(a4)
11849 ; RV64ZVE32F-NEXT:    andi a4, a3, 8
11850 ; RV64ZVE32F-NEXT:    beqz a4, .LBB96_4
11851 ; RV64ZVE32F-NEXT:  .LBB96_13: # %cond.load7
11852 ; RV64ZVE32F-NEXT:    ld a4, 24(a2)
11853 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
11854 ; RV64ZVE32F-NEXT:    add a4, a1, a4
11855 ; RV64ZVE32F-NEXT:    fld fa3, 0(a4)
11856 ; RV64ZVE32F-NEXT:    andi a4, a3, 16
11857 ; RV64ZVE32F-NEXT:    beqz a4, .LBB96_5
11858 ; RV64ZVE32F-NEXT:  .LBB96_14: # %cond.load10
11859 ; RV64ZVE32F-NEXT:    ld a4, 32(a2)
11860 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
11861 ; RV64ZVE32F-NEXT:    add a4, a1, a4
11862 ; RV64ZVE32F-NEXT:    fld fa4, 0(a4)
11863 ; RV64ZVE32F-NEXT:    andi a4, a3, 32
11864 ; RV64ZVE32F-NEXT:    beqz a4, .LBB96_6
11865 ; RV64ZVE32F-NEXT:  .LBB96_15: # %cond.load13
11866 ; RV64ZVE32F-NEXT:    ld a4, 40(a2)
11867 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
11868 ; RV64ZVE32F-NEXT:    add a4, a1, a4
11869 ; RV64ZVE32F-NEXT:    fld fa5, 0(a4)
11870 ; RV64ZVE32F-NEXT:    andi a4, a3, 64
11871 ; RV64ZVE32F-NEXT:    beqz a4, .LBB96_7
11872 ; RV64ZVE32F-NEXT:  .LBB96_16: # %cond.load16
11873 ; RV64ZVE32F-NEXT:    ld a4, 48(a2)
11874 ; RV64ZVE32F-NEXT:    slli a4, a4, 3
11875 ; RV64ZVE32F-NEXT:    add a4, a1, a4
11876 ; RV64ZVE32F-NEXT:    fld fa6, 0(a4)
11877 ; RV64ZVE32F-NEXT:    andi a3, a3, -128
11878 ; RV64ZVE32F-NEXT:    bnez a3, .LBB96_8
11879 ; RV64ZVE32F-NEXT:    j .LBB96_9
11880   %ptrs = getelementptr inbounds double, ptr %base, <8 x i64> %idxs
11881   %v = call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> %m, <8 x double> %passthru)
11882   ret <8 x double> %v
11885 declare <16 x i8> @llvm.masked.gather.v16i8.v16p0(<16 x ptr>, i32, <16 x i1>, <16 x i8>)
11887 define <16 x i8> @mgather_baseidx_v16i8(ptr %base, <16 x i8> %idxs, <16 x i1> %m, <16 x i8> %passthru) {
11888 ; RV32-LABEL: mgather_baseidx_v16i8:
11889 ; RV32:       # %bb.0:
11890 ; RV32-NEXT:    vsetivli zero, 16, e32, m4, ta, ma
11891 ; RV32-NEXT:    vsext.vf4 v12, v8
11892 ; RV32-NEXT:    vsetvli zero, zero, e8, m1, ta, mu
11893 ; RV32-NEXT:    vluxei32.v v9, (a0), v12, v0.t
11894 ; RV32-NEXT:    vmv.v.v v8, v9
11895 ; RV32-NEXT:    ret
11897 ; RV64V-LABEL: mgather_baseidx_v16i8:
11898 ; RV64V:       # %bb.0:
11899 ; RV64V-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
11900 ; RV64V-NEXT:    vsext.vf8 v16, v8
11901 ; RV64V-NEXT:    vsetvli zero, zero, e8, m1, ta, mu
11902 ; RV64V-NEXT:    vluxei64.v v9, (a0), v16, v0.t
11903 ; RV64V-NEXT:    vmv.v.v v8, v9
11904 ; RV64V-NEXT:    ret
11906 ; RV64ZVE32F-LABEL: mgather_baseidx_v16i8:
11907 ; RV64ZVE32F:       # %bb.0:
11908 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e16, m1, ta, ma
11909 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
11910 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
11911 ; RV64ZVE32F-NEXT:    beqz a2, .LBB97_2
11912 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
11913 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, mf2, tu, ma
11914 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
11915 ; RV64ZVE32F-NEXT:    add a2, a0, a2
11916 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
11917 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
11918 ; RV64ZVE32F-NEXT:  .LBB97_2: # %else
11919 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
11920 ; RV64ZVE32F-NEXT:    beqz a2, .LBB97_4
11921 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
11922 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
11923 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11924 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
11925 ; RV64ZVE32F-NEXT:    add a2, a0, a2
11926 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
11927 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
11928 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, m1, tu, ma
11929 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 1
11930 ; RV64ZVE32F-NEXT:  .LBB97_4: # %else2
11931 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
11932 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11933 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
11934 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
11935 ; RV64ZVE32F-NEXT:    vslidedown.vi v11, v8, 2
11936 ; RV64ZVE32F-NEXT:    bnez a2, .LBB97_25
11937 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
11938 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
11939 ; RV64ZVE32F-NEXT:    bnez a2, .LBB97_26
11940 ; RV64ZVE32F-NEXT:  .LBB97_6: # %else8
11941 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
11942 ; RV64ZVE32F-NEXT:    beqz a2, .LBB97_8
11943 ; RV64ZVE32F-NEXT:  .LBB97_7: # %cond.load10
11944 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e8, m1, tu, ma
11945 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
11946 ; RV64ZVE32F-NEXT:    add a2, a0, a2
11947 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
11948 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
11949 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 4
11950 ; RV64ZVE32F-NEXT:  .LBB97_8: # %else11
11951 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
11952 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
11953 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 8
11954 ; RV64ZVE32F-NEXT:    beqz a2, .LBB97_10
11955 ; RV64ZVE32F-NEXT:  # %bb.9: # %cond.load13
11956 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
11957 ; RV64ZVE32F-NEXT:    vslidedown.vi v11, v10, 1
11958 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v11
11959 ; RV64ZVE32F-NEXT:    add a2, a0, a2
11960 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
11961 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
11962 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e8, m1, tu, ma
11963 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 5
11964 ; RV64ZVE32F-NEXT:  .LBB97_10: # %else14
11965 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
11966 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
11967 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v10, 2
11968 ; RV64ZVE32F-NEXT:    bnez a2, .LBB97_27
11969 ; RV64ZVE32F-NEXT:  # %bb.11: # %else17
11970 ; RV64ZVE32F-NEXT:    andi a2, a1, 128
11971 ; RV64ZVE32F-NEXT:    bnez a2, .LBB97_28
11972 ; RV64ZVE32F-NEXT:  .LBB97_12: # %else20
11973 ; RV64ZVE32F-NEXT:    andi a2, a1, 256
11974 ; RV64ZVE32F-NEXT:    bnez a2, .LBB97_29
11975 ; RV64ZVE32F-NEXT:  .LBB97_13: # %else23
11976 ; RV64ZVE32F-NEXT:    andi a2, a1, 512
11977 ; RV64ZVE32F-NEXT:    beqz a2, .LBB97_15
11978 ; RV64ZVE32F-NEXT:  .LBB97_14: # %cond.load25
11979 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
11980 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 1
11981 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
11982 ; RV64ZVE32F-NEXT:    add a2, a0, a2
11983 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
11984 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
11985 ; RV64ZVE32F-NEXT:    vsetivli zero, 10, e8, m1, tu, ma
11986 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 9
11987 ; RV64ZVE32F-NEXT:  .LBB97_15: # %else26
11988 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
11989 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v8, 4
11990 ; RV64ZVE32F-NEXT:    andi a2, a1, 1024
11991 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
11992 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
11993 ; RV64ZVE32F-NEXT:    bnez a2, .LBB97_30
11994 ; RV64ZVE32F-NEXT:  # %bb.16: # %else29
11995 ; RV64ZVE32F-NEXT:    slli a2, a1, 52
11996 ; RV64ZVE32F-NEXT:    bltz a2, .LBB97_31
11997 ; RV64ZVE32F-NEXT:  .LBB97_17: # %else32
11998 ; RV64ZVE32F-NEXT:    slli a2, a1, 51
11999 ; RV64ZVE32F-NEXT:    bltz a2, .LBB97_32
12000 ; RV64ZVE32F-NEXT:  .LBB97_18: # %else35
12001 ; RV64ZVE32F-NEXT:    slli a2, a1, 50
12002 ; RV64ZVE32F-NEXT:    bgez a2, .LBB97_20
12003 ; RV64ZVE32F-NEXT:  .LBB97_19: # %cond.load37
12004 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12005 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 1
12006 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12007 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12008 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12009 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
12010 ; RV64ZVE32F-NEXT:    vsetivli zero, 14, e8, m1, tu, ma
12011 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 13
12012 ; RV64ZVE32F-NEXT:  .LBB97_20: # %else38
12013 ; RV64ZVE32F-NEXT:    slli a2, a1, 49
12014 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12015 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v10, 2
12016 ; RV64ZVE32F-NEXT:    bgez a2, .LBB97_22
12017 ; RV64ZVE32F-NEXT:  # %bb.21: # %cond.load40
12018 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12019 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12020 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12021 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
12022 ; RV64ZVE32F-NEXT:    vsetivli zero, 15, e8, m1, tu, ma
12023 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 14
12024 ; RV64ZVE32F-NEXT:  .LBB97_22: # %else41
12025 ; RV64ZVE32F-NEXT:    lui a2, 1048568
12026 ; RV64ZVE32F-NEXT:    and a1, a1, a2
12027 ; RV64ZVE32F-NEXT:    beqz a1, .LBB97_24
12028 ; RV64ZVE32F-NEXT:  # %bb.23: # %cond.load43
12029 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12030 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
12031 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
12032 ; RV64ZVE32F-NEXT:    add a0, a0, a1
12033 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
12034 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
12035 ; RV64ZVE32F-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
12036 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 15
12037 ; RV64ZVE32F-NEXT:  .LBB97_24: # %else44
12038 ; RV64ZVE32F-NEXT:    vmv1r.v v8, v9
12039 ; RV64ZVE32F-NEXT:    ret
12040 ; RV64ZVE32F-NEXT:  .LBB97_25: # %cond.load4
12041 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v11
12042 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12043 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12044 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12045 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e8, m1, tu, ma
12046 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v12, 2
12047 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
12048 ; RV64ZVE32F-NEXT:    beqz a2, .LBB97_6
12049 ; RV64ZVE32F-NEXT:  .LBB97_26: # %cond.load7
12050 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12051 ; RV64ZVE32F-NEXT:    vslidedown.vi v11, v11, 1
12052 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v11
12053 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12054 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12055 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
12056 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, m1, tu, ma
12057 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 3
12058 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
12059 ; RV64ZVE32F-NEXT:    bnez a2, .LBB97_7
12060 ; RV64ZVE32F-NEXT:    j .LBB97_8
12061 ; RV64ZVE32F-NEXT:  .LBB97_27: # %cond.load16
12062 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
12063 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12064 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12065 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
12066 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e8, m1, tu, ma
12067 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 6
12068 ; RV64ZVE32F-NEXT:    andi a2, a1, 128
12069 ; RV64ZVE32F-NEXT:    beqz a2, .LBB97_12
12070 ; RV64ZVE32F-NEXT:  .LBB97_28: # %cond.load19
12071 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12072 ; RV64ZVE32F-NEXT:    vslidedown.vi v10, v10, 1
12073 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
12074 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12075 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12076 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
12077 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e8, m1, tu, ma
12078 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 7
12079 ; RV64ZVE32F-NEXT:    andi a2, a1, 256
12080 ; RV64ZVE32F-NEXT:    beqz a2, .LBB97_13
12081 ; RV64ZVE32F-NEXT:  .LBB97_29: # %cond.load22
12082 ; RV64ZVE32F-NEXT:    vsetivli zero, 9, e8, m1, tu, ma
12083 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12084 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12085 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12086 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
12087 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v10, 8
12088 ; RV64ZVE32F-NEXT:    andi a2, a1, 512
12089 ; RV64ZVE32F-NEXT:    bnez a2, .LBB97_14
12090 ; RV64ZVE32F-NEXT:    j .LBB97_15
12091 ; RV64ZVE32F-NEXT:  .LBB97_30: # %cond.load28
12092 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12093 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12094 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12095 ; RV64ZVE32F-NEXT:    vmv.s.x v11, a2
12096 ; RV64ZVE32F-NEXT:    vsetivli zero, 11, e8, m1, tu, ma
12097 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v11, 10
12098 ; RV64ZVE32F-NEXT:    slli a2, a1, 52
12099 ; RV64ZVE32F-NEXT:    bgez a2, .LBB97_17
12100 ; RV64ZVE32F-NEXT:  .LBB97_31: # %cond.load31
12101 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12102 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
12103 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12104 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12105 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12106 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
12107 ; RV64ZVE32F-NEXT:    vsetivli zero, 12, e8, m1, tu, ma
12108 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 11
12109 ; RV64ZVE32F-NEXT:    slli a2, a1, 51
12110 ; RV64ZVE32F-NEXT:    bgez a2, .LBB97_18
12111 ; RV64ZVE32F-NEXT:  .LBB97_32: # %cond.load34
12112 ; RV64ZVE32F-NEXT:    vsetivli zero, 13, e8, m1, tu, ma
12113 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v10
12114 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12115 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12116 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a2
12117 ; RV64ZVE32F-NEXT:    vslideup.vi v9, v8, 12
12118 ; RV64ZVE32F-NEXT:    slli a2, a1, 50
12119 ; RV64ZVE32F-NEXT:    bltz a2, .LBB97_19
12120 ; RV64ZVE32F-NEXT:    j .LBB97_20
12121   %ptrs = getelementptr inbounds i8, ptr %base, <16 x i8> %idxs
12122   %v = call <16 x i8> @llvm.masked.gather.v16i8.v16p0(<16 x ptr> %ptrs, i32 2, <16 x i1> %m, <16 x i8> %passthru)
12123   ret <16 x i8> %v
12126 declare <32 x i8> @llvm.masked.gather.v32i8.v32p0(<32 x ptr>, i32, <32 x i1>, <32 x i8>)
12128 define <32 x i8> @mgather_baseidx_v32i8(ptr %base, <32 x i8> %idxs, <32 x i1> %m, <32 x i8> %passthru) {
12129 ; RV32-LABEL: mgather_baseidx_v32i8:
12130 ; RV32:       # %bb.0:
12131 ; RV32-NEXT:    li a1, 32
12132 ; RV32-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
12133 ; RV32-NEXT:    vsext.vf4 v16, v8
12134 ; RV32-NEXT:    vsetvli zero, zero, e8, m2, ta, mu
12135 ; RV32-NEXT:    vluxei32.v v10, (a0), v16, v0.t
12136 ; RV32-NEXT:    vmv.v.v v8, v10
12137 ; RV32-NEXT:    ret
12139 ; RV64V-LABEL: mgather_baseidx_v32i8:
12140 ; RV64V:       # %bb.0:
12141 ; RV64V-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
12142 ; RV64V-NEXT:    vsext.vf8 v16, v8
12143 ; RV64V-NEXT:    vsetivli zero, 16, e8, m2, ta, ma
12144 ; RV64V-NEXT:    vslidedown.vi v12, v10, 16
12145 ; RV64V-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
12146 ; RV64V-NEXT:    vluxei64.v v10, (a0), v16, v0.t
12147 ; RV64V-NEXT:    vsetivli zero, 16, e8, m2, ta, ma
12148 ; RV64V-NEXT:    vslidedown.vi v8, v8, 16
12149 ; RV64V-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12150 ; RV64V-NEXT:    vslidedown.vi v0, v0, 2
12151 ; RV64V-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
12152 ; RV64V-NEXT:    vsext.vf8 v16, v8
12153 ; RV64V-NEXT:    vsetvli zero, zero, e8, m1, ta, mu
12154 ; RV64V-NEXT:    vluxei64.v v12, (a0), v16, v0.t
12155 ; RV64V-NEXT:    li a0, 32
12156 ; RV64V-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
12157 ; RV64V-NEXT:    vslideup.vi v10, v12, 16
12158 ; RV64V-NEXT:    vmv.v.v v8, v10
12159 ; RV64V-NEXT:    ret
12161 ; RV64ZVE32F-LABEL: mgather_baseidx_v32i8:
12162 ; RV64ZVE32F:       # %bb.0:
12163 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
12164 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v0
12165 ; RV64ZVE32F-NEXT:    andi a2, a1, 1
12166 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_2
12167 ; RV64ZVE32F-NEXT:  # %bb.1: # %cond.load
12168 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, mf4, tu, ma
12169 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12170 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12171 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12172 ; RV64ZVE32F-NEXT:    vmv.s.x v10, a2
12173 ; RV64ZVE32F-NEXT:  .LBB98_2: # %else
12174 ; RV64ZVE32F-NEXT:    andi a2, a1, 2
12175 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_4
12176 ; RV64ZVE32F-NEXT:  # %bb.3: # %cond.load1
12177 ; RV64ZVE32F-NEXT:    vsetvli zero, zero, e8, mf4, ta, ma
12178 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v8, 1
12179 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12180 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12181 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12182 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12183 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, m1, tu, ma
12184 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 1
12185 ; RV64ZVE32F-NEXT:  .LBB98_4: # %else2
12186 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
12187 ; RV64ZVE32F-NEXT:    vslidedown.vi v13, v8, 4
12188 ; RV64ZVE32F-NEXT:    andi a2, a1, 4
12189 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12190 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v8, 2
12191 ; RV64ZVE32F-NEXT:    bnez a2, .LBB98_49
12192 ; RV64ZVE32F-NEXT:  # %bb.5: # %else5
12193 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
12194 ; RV64ZVE32F-NEXT:    bnez a2, .LBB98_50
12195 ; RV64ZVE32F-NEXT:  .LBB98_6: # %else8
12196 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
12197 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_8
12198 ; RV64ZVE32F-NEXT:  .LBB98_7: # %cond.load10
12199 ; RV64ZVE32F-NEXT:    vsetivli zero, 5, e8, m1, tu, ma
12200 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v13
12201 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12202 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12203 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12204 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 4
12205 ; RV64ZVE32F-NEXT:  .LBB98_8: # %else11
12206 ; RV64ZVE32F-NEXT:    andi a2, a1, 32
12207 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
12208 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v8, 8
12209 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_10
12210 ; RV64ZVE32F-NEXT:  # %bb.9: # %cond.load13
12211 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12212 ; RV64ZVE32F-NEXT:    vslidedown.vi v14, v13, 1
12213 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v14
12214 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12215 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12216 ; RV64ZVE32F-NEXT:    vmv.s.x v14, a2
12217 ; RV64ZVE32F-NEXT:    vsetivli zero, 6, e8, m1, tu, ma
12218 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v14, 5
12219 ; RV64ZVE32F-NEXT:  .LBB98_10: # %else14
12220 ; RV64ZVE32F-NEXT:    andi a2, a1, 64
12221 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12222 ; RV64ZVE32F-NEXT:    vslidedown.vi v13, v13, 2
12223 ; RV64ZVE32F-NEXT:    bnez a2, .LBB98_51
12224 ; RV64ZVE32F-NEXT:  # %bb.11: # %else17
12225 ; RV64ZVE32F-NEXT:    andi a2, a1, 128
12226 ; RV64ZVE32F-NEXT:    bnez a2, .LBB98_52
12227 ; RV64ZVE32F-NEXT:  .LBB98_12: # %else20
12228 ; RV64ZVE32F-NEXT:    andi a2, a1, 256
12229 ; RV64ZVE32F-NEXT:    bnez a2, .LBB98_53
12230 ; RV64ZVE32F-NEXT:  .LBB98_13: # %else23
12231 ; RV64ZVE32F-NEXT:    andi a2, a1, 512
12232 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_15
12233 ; RV64ZVE32F-NEXT:  .LBB98_14: # %cond.load25
12234 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12235 ; RV64ZVE32F-NEXT:    vslidedown.vi v13, v12, 1
12236 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v13
12237 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12238 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12239 ; RV64ZVE32F-NEXT:    vmv.s.x v13, a2
12240 ; RV64ZVE32F-NEXT:    vsetivli zero, 10, e8, m1, tu, ma
12241 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v13, 9
12242 ; RV64ZVE32F-NEXT:  .LBB98_15: # %else26
12243 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
12244 ; RV64ZVE32F-NEXT:    vslidedown.vi v13, v12, 4
12245 ; RV64ZVE32F-NEXT:    andi a2, a1, 1024
12246 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12247 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v12, 2
12248 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_17
12249 ; RV64ZVE32F-NEXT:  # %bb.16: # %cond.load28
12250 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12251 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12252 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12253 ; RV64ZVE32F-NEXT:    vmv.s.x v14, a2
12254 ; RV64ZVE32F-NEXT:    vsetivli zero, 11, e8, m1, tu, ma
12255 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v14, 10
12256 ; RV64ZVE32F-NEXT:  .LBB98_17: # %else29
12257 ; RV64ZVE32F-NEXT:    slli a2, a1, 52
12258 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_19
12259 ; RV64ZVE32F-NEXT:  # %bb.18: # %cond.load31
12260 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12261 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v12, 1
12262 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12263 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12264 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12265 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12266 ; RV64ZVE32F-NEXT:    vsetivli zero, 12, e8, m1, tu, ma
12267 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 11
12268 ; RV64ZVE32F-NEXT:  .LBB98_19: # %else32
12269 ; RV64ZVE32F-NEXT:    slli a2, a1, 51
12270 ; RV64ZVE32F-NEXT:    vsetivli zero, 16, e8, m2, ta, ma
12271 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 16
12272 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_21
12273 ; RV64ZVE32F-NEXT:  # %bb.20: # %cond.load34
12274 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v13
12275 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12276 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12277 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
12278 ; RV64ZVE32F-NEXT:    vsetivli zero, 13, e8, m1, tu, ma
12279 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 12
12280 ; RV64ZVE32F-NEXT:  .LBB98_21: # %else35
12281 ; RV64ZVE32F-NEXT:    slli a2, a1, 50
12282 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_23
12283 ; RV64ZVE32F-NEXT:  # %bb.22: # %cond.load37
12284 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12285 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v13, 1
12286 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12287 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12288 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12289 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
12290 ; RV64ZVE32F-NEXT:    vsetivli zero, 14, e8, m1, tu, ma
12291 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 13
12292 ; RV64ZVE32F-NEXT:  .LBB98_23: # %else38
12293 ; RV64ZVE32F-NEXT:    slli a2, a1, 49
12294 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12295 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v13, 2
12296 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_54
12297 ; RV64ZVE32F-NEXT:  # %bb.24: # %else41
12298 ; RV64ZVE32F-NEXT:    slli a2, a1, 48
12299 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_55
12300 ; RV64ZVE32F-NEXT:  .LBB98_25: # %else44
12301 ; RV64ZVE32F-NEXT:    slli a2, a1, 47
12302 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_56
12303 ; RV64ZVE32F-NEXT:  .LBB98_26: # %else47
12304 ; RV64ZVE32F-NEXT:    slli a2, a1, 46
12305 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_28
12306 ; RV64ZVE32F-NEXT:  .LBB98_27: # %cond.load49
12307 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12308 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
12309 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12310 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12311 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12312 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12313 ; RV64ZVE32F-NEXT:    vsetivli zero, 18, e8, m2, tu, ma
12314 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 17
12315 ; RV64ZVE32F-NEXT:  .LBB98_28: # %else50
12316 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
12317 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
12318 ; RV64ZVE32F-NEXT:    slli a2, a1, 45
12319 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12320 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v8, 2
12321 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_57
12322 ; RV64ZVE32F-NEXT:  # %bb.29: # %else53
12323 ; RV64ZVE32F-NEXT:    slli a2, a1, 44
12324 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_58
12325 ; RV64ZVE32F-NEXT:  .LBB98_30: # %else56
12326 ; RV64ZVE32F-NEXT:    slli a2, a1, 43
12327 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_32
12328 ; RV64ZVE32F-NEXT:  .LBB98_31: # %cond.load58
12329 ; RV64ZVE32F-NEXT:    vsetivli zero, 21, e8, m2, tu, ma
12330 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12331 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12332 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12333 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12334 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 20
12335 ; RV64ZVE32F-NEXT:  .LBB98_32: # %else59
12336 ; RV64ZVE32F-NEXT:    slli a2, a1, 42
12337 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
12338 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 8
12339 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_34
12340 ; RV64ZVE32F-NEXT:  # %bb.33: # %cond.load61
12341 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12342 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v9, 1
12343 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12344 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12345 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12346 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12347 ; RV64ZVE32F-NEXT:    vsetivli zero, 22, e8, m2, tu, ma
12348 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 21
12349 ; RV64ZVE32F-NEXT:  .LBB98_34: # %else62
12350 ; RV64ZVE32F-NEXT:    slli a2, a1, 41
12351 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12352 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v9, 2
12353 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_59
12354 ; RV64ZVE32F-NEXT:  # %bb.35: # %else65
12355 ; RV64ZVE32F-NEXT:    slli a2, a1, 40
12356 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_60
12357 ; RV64ZVE32F-NEXT:  .LBB98_36: # %else68
12358 ; RV64ZVE32F-NEXT:    slli a2, a1, 39
12359 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_61
12360 ; RV64ZVE32F-NEXT:  .LBB98_37: # %else71
12361 ; RV64ZVE32F-NEXT:    slli a2, a1, 38
12362 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_39
12363 ; RV64ZVE32F-NEXT:  .LBB98_38: # %cond.load73
12364 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12365 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 1
12366 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12367 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12368 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12369 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12370 ; RV64ZVE32F-NEXT:    vsetivli zero, 26, e8, m2, tu, ma
12371 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 25
12372 ; RV64ZVE32F-NEXT:  .LBB98_39: # %else74
12373 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
12374 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v8, 4
12375 ; RV64ZVE32F-NEXT:    slli a2, a1, 37
12376 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12377 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 2
12378 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_62
12379 ; RV64ZVE32F-NEXT:  # %bb.40: # %else77
12380 ; RV64ZVE32F-NEXT:    slli a2, a1, 36
12381 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_63
12382 ; RV64ZVE32F-NEXT:  .LBB98_41: # %else80
12383 ; RV64ZVE32F-NEXT:    slli a2, a1, 35
12384 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_64
12385 ; RV64ZVE32F-NEXT:  .LBB98_42: # %else83
12386 ; RV64ZVE32F-NEXT:    slli a2, a1, 34
12387 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_44
12388 ; RV64ZVE32F-NEXT:  .LBB98_43: # %cond.load85
12389 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12390 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 1
12391 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12392 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12393 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12394 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12395 ; RV64ZVE32F-NEXT:    vsetivli zero, 30, e8, m2, tu, ma
12396 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 29
12397 ; RV64ZVE32F-NEXT:  .LBB98_44: # %else86
12398 ; RV64ZVE32F-NEXT:    slli a2, a1, 33
12399 ; RV64ZVE32F-NEXT:    vsetivli zero, 2, e8, mf4, ta, ma
12400 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 2
12401 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_46
12402 ; RV64ZVE32F-NEXT:  # %bb.45: # %cond.load88
12403 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12404 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12405 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12406 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12407 ; RV64ZVE32F-NEXT:    vsetivli zero, 31, e8, m2, tu, ma
12408 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 30
12409 ; RV64ZVE32F-NEXT:  .LBB98_46: # %else89
12410 ; RV64ZVE32F-NEXT:    lui a2, 524288
12411 ; RV64ZVE32F-NEXT:    and a1, a1, a2
12412 ; RV64ZVE32F-NEXT:    beqz a1, .LBB98_48
12413 ; RV64ZVE32F-NEXT:  # %bb.47: # %cond.load91
12414 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12415 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
12416 ; RV64ZVE32F-NEXT:    vmv.x.s a1, v8
12417 ; RV64ZVE32F-NEXT:    add a0, a0, a1
12418 ; RV64ZVE32F-NEXT:    lbu a0, 0(a0)
12419 ; RV64ZVE32F-NEXT:    li a1, 32
12420 ; RV64ZVE32F-NEXT:    vmv.s.x v8, a0
12421 ; RV64ZVE32F-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
12422 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v8, 31
12423 ; RV64ZVE32F-NEXT:  .LBB98_48: # %else92
12424 ; RV64ZVE32F-NEXT:    vmv2r.v v8, v10
12425 ; RV64ZVE32F-NEXT:    ret
12426 ; RV64ZVE32F-NEXT:  .LBB98_49: # %cond.load4
12427 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12428 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12429 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12430 ; RV64ZVE32F-NEXT:    vmv.s.x v14, a2
12431 ; RV64ZVE32F-NEXT:    vsetivli zero, 3, e8, m1, tu, ma
12432 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v14, 2
12433 ; RV64ZVE32F-NEXT:    andi a2, a1, 8
12434 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_6
12435 ; RV64ZVE32F-NEXT:  .LBB98_50: # %cond.load7
12436 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12437 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v12, 1
12438 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12439 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12440 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12441 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12442 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e8, m1, tu, ma
12443 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 3
12444 ; RV64ZVE32F-NEXT:    andi a2, a1, 16
12445 ; RV64ZVE32F-NEXT:    bnez a2, .LBB98_7
12446 ; RV64ZVE32F-NEXT:    j .LBB98_8
12447 ; RV64ZVE32F-NEXT:  .LBB98_51: # %cond.load16
12448 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v13
12449 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12450 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12451 ; RV64ZVE32F-NEXT:    vmv.s.x v14, a2
12452 ; RV64ZVE32F-NEXT:    vsetivli zero, 7, e8, m1, tu, ma
12453 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v14, 6
12454 ; RV64ZVE32F-NEXT:    andi a2, a1, 128
12455 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_12
12456 ; RV64ZVE32F-NEXT:  .LBB98_52: # %cond.load19
12457 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12458 ; RV64ZVE32F-NEXT:    vslidedown.vi v13, v13, 1
12459 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v13
12460 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12461 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12462 ; RV64ZVE32F-NEXT:    vmv.s.x v13, a2
12463 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e8, m1, tu, ma
12464 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v13, 7
12465 ; RV64ZVE32F-NEXT:    andi a2, a1, 256
12466 ; RV64ZVE32F-NEXT:    beqz a2, .LBB98_13
12467 ; RV64ZVE32F-NEXT:  .LBB98_53: # %cond.load22
12468 ; RV64ZVE32F-NEXT:    vsetivli zero, 9, e8, m1, tu, ma
12469 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12470 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12471 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12472 ; RV64ZVE32F-NEXT:    vmv.s.x v13, a2
12473 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v13, 8
12474 ; RV64ZVE32F-NEXT:    andi a2, a1, 512
12475 ; RV64ZVE32F-NEXT:    bnez a2, .LBB98_14
12476 ; RV64ZVE32F-NEXT:    j .LBB98_15
12477 ; RV64ZVE32F-NEXT:  .LBB98_54: # %cond.load40
12478 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12479 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12480 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12481 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12482 ; RV64ZVE32F-NEXT:    vsetivli zero, 15, e8, m1, tu, ma
12483 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 14
12484 ; RV64ZVE32F-NEXT:    slli a2, a1, 48
12485 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_25
12486 ; RV64ZVE32F-NEXT:  .LBB98_55: # %cond.load43
12487 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12488 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v9, 1
12489 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12490 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12491 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12492 ; RV64ZVE32F-NEXT:    vmv.s.x v9, a2
12493 ; RV64ZVE32F-NEXT:    vsetivli zero, 16, e8, m1, tu, ma
12494 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v9, 15
12495 ; RV64ZVE32F-NEXT:    slli a2, a1, 47
12496 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_26
12497 ; RV64ZVE32F-NEXT:  .LBB98_56: # %cond.load46
12498 ; RV64ZVE32F-NEXT:    vsetivli zero, 17, e8, m2, tu, ma
12499 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12500 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12501 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12502 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12503 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 16
12504 ; RV64ZVE32F-NEXT:    slli a2, a1, 46
12505 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_27
12506 ; RV64ZVE32F-NEXT:    j .LBB98_28
12507 ; RV64ZVE32F-NEXT:  .LBB98_57: # %cond.load52
12508 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12509 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12510 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12511 ; RV64ZVE32F-NEXT:    vmv.s.x v14, a2
12512 ; RV64ZVE32F-NEXT:    vsetivli zero, 19, e8, m2, tu, ma
12513 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v14, 18
12514 ; RV64ZVE32F-NEXT:    slli a2, a1, 44
12515 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_30
12516 ; RV64ZVE32F-NEXT:  .LBB98_58: # %cond.load55
12517 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12518 ; RV64ZVE32F-NEXT:    vslidedown.vi v12, v12, 1
12519 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v12
12520 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12521 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12522 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12523 ; RV64ZVE32F-NEXT:    vsetivli zero, 20, e8, m2, tu, ma
12524 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 19
12525 ; RV64ZVE32F-NEXT:    slli a2, a1, 43
12526 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_31
12527 ; RV64ZVE32F-NEXT:    j .LBB98_32
12528 ; RV64ZVE32F-NEXT:  .LBB98_59: # %cond.load64
12529 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12530 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12531 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12532 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12533 ; RV64ZVE32F-NEXT:    vsetivli zero, 23, e8, m2, tu, ma
12534 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 22
12535 ; RV64ZVE32F-NEXT:    slli a2, a1, 40
12536 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_36
12537 ; RV64ZVE32F-NEXT:  .LBB98_60: # %cond.load67
12538 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12539 ; RV64ZVE32F-NEXT:    vslidedown.vi v9, v9, 1
12540 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12541 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12542 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12543 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12544 ; RV64ZVE32F-NEXT:    vsetivli zero, 24, e8, m2, tu, ma
12545 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 23
12546 ; RV64ZVE32F-NEXT:    slli a2, a1, 39
12547 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_37
12548 ; RV64ZVE32F-NEXT:  .LBB98_61: # %cond.load70
12549 ; RV64ZVE32F-NEXT:    vsetivli zero, 25, e8, m2, tu, ma
12550 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12551 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12552 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12553 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12554 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 24
12555 ; RV64ZVE32F-NEXT:    slli a2, a1, 38
12556 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_38
12557 ; RV64ZVE32F-NEXT:    j .LBB98_39
12558 ; RV64ZVE32F-NEXT:  .LBB98_62: # %cond.load76
12559 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12560 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12561 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12562 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12563 ; RV64ZVE32F-NEXT:    vsetivli zero, 27, e8, m2, tu, ma
12564 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 26
12565 ; RV64ZVE32F-NEXT:    slli a2, a1, 36
12566 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_41
12567 ; RV64ZVE32F-NEXT:  .LBB98_63: # %cond.load79
12568 ; RV64ZVE32F-NEXT:    vsetivli zero, 1, e8, mf4, ta, ma
12569 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v8, 1
12570 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v8
12571 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12572 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12573 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12574 ; RV64ZVE32F-NEXT:    vsetivli zero, 28, e8, m2, tu, ma
12575 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 27
12576 ; RV64ZVE32F-NEXT:    slli a2, a1, 35
12577 ; RV64ZVE32F-NEXT:    bgez a2, .LBB98_42
12578 ; RV64ZVE32F-NEXT:  .LBB98_64: # %cond.load82
12579 ; RV64ZVE32F-NEXT:    vsetivli zero, 29, e8, m2, tu, ma
12580 ; RV64ZVE32F-NEXT:    vmv.x.s a2, v9
12581 ; RV64ZVE32F-NEXT:    add a2, a0, a2
12582 ; RV64ZVE32F-NEXT:    lbu a2, 0(a2)
12583 ; RV64ZVE32F-NEXT:    vmv.s.x v12, a2
12584 ; RV64ZVE32F-NEXT:    vslideup.vi v10, v12, 28
12585 ; RV64ZVE32F-NEXT:    slli a2, a1, 34
12586 ; RV64ZVE32F-NEXT:    bltz a2, .LBB98_43
12587 ; RV64ZVE32F-NEXT:    j .LBB98_44
12588   %ptrs = getelementptr inbounds i8, ptr %base, <32 x i8> %idxs
12589   %v = call <32 x i8> @llvm.masked.gather.v32i8.v32p0(<32 x ptr> %ptrs, i32 2, <32 x i1> %m, <32 x i8> %passthru)
12590   ret <32 x i8> %v
12594 define <4 x i32> @mgather_broadcast_load_unmasked(ptr %base) {
12595 ; CHECK-LABEL: mgather_broadcast_load_unmasked:
12596 ; CHECK:       # %bb.0:
12597 ; CHECK-NEXT:    lw a0, 0(a0)
12598 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12599 ; CHECK-NEXT:    vmv.v.x v8, a0
12600 ; CHECK-NEXT:    ret
12601   %ptrs = getelementptr inbounds i8, ptr %base, <4 x i32> zeroinitializer
12602   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 true), <4 x i32> poison)
12603   ret <4 x i32> %v
12606 ; Same as previous, but use an explicit splat instead of splat-via-gep
12607 define <4 x i32> @mgather_broadcast_load_unmasked2(ptr %base) {
12608 ; CHECK-LABEL: mgather_broadcast_load_unmasked2:
12609 ; CHECK:       # %bb.0:
12610 ; CHECK-NEXT:    lw a0, 0(a0)
12611 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12612 ; CHECK-NEXT:    vmv.v.x v8, a0
12613 ; CHECK-NEXT:    ret
12614   %ptrhead = insertelement <4 x ptr> poison, ptr %base, i32 0
12615   %ptrs = shufflevector <4 x ptr> %ptrhead, <4 x ptr> poison, <4 x i32> zeroinitializer
12616   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 true), <4 x i32> poison)
12617   ret <4 x i32> %v
12620 define <4 x i32> @mgather_broadcast_load_masked(ptr %base, <4 x i1> %m) {
12621 ; CHECK-LABEL: mgather_broadcast_load_masked:
12622 ; CHECK:       # %bb.0:
12623 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12624 ; CHECK-NEXT:    vlse32.v v8, (a0), zero, v0.t
12625 ; CHECK-NEXT:    ret
12626   %ptrs = getelementptr inbounds i8, ptr %base, <4 x i32> zeroinitializer
12627   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> %m, <4 x i32> poison)
12628   ret <4 x i32> %v
12631 define <4 x i32> @mgather_unit_stride_load(ptr %base) {
12632 ; CHECK-LABEL: mgather_unit_stride_load:
12633 ; CHECK:       # %bb.0:
12634 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12635 ; CHECK-NEXT:    vle32.v v8, (a0)
12636 ; CHECK-NEXT:    ret
12637   %ptrs = getelementptr inbounds i32, ptr %base, <4 x i32>  <i32 0, i32 1, i32 2, i32 3>
12638   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 true), <4 x i32> poison)
12639   ret <4 x i32> %v
12642 define <4 x i32> @mgather_unit_stride_load_with_offset(ptr %base) {
12643 ; CHECK-LABEL: mgather_unit_stride_load_with_offset:
12644 ; CHECK:       # %bb.0:
12645 ; CHECK-NEXT:    addi a0, a0, 16
12646 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12647 ; CHECK-NEXT:    vle32.v v8, (a0)
12648 ; CHECK-NEXT:    ret
12649   %ptrs = getelementptr inbounds i32, ptr %base, <4 x i32>  <i32 4, i32 5, i32 6, i32 7>
12650   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 true), <4 x i32> poison)
12651   ret <4 x i32> %v
12654 define <4 x i32> @mgather_unit_stride_load_narrow_idx(ptr %base) {
12655 ; CHECK-LABEL: mgather_unit_stride_load_narrow_idx:
12656 ; CHECK:       # %bb.0:
12657 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12658 ; CHECK-NEXT:    vle32.v v8, (a0)
12659 ; CHECK-NEXT:    ret
12660   %ptrs = getelementptr inbounds i32, ptr %base, <4 x i8>  <i8 0, i8 1, i8 2, i8 3>
12661   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 true), <4 x i32> poison)
12662   ret <4 x i32> %v
12665 define <4 x i32> @mgather_unit_stride_load_wide_idx(ptr %base) {
12666 ; CHECK-LABEL: mgather_unit_stride_load_wide_idx:
12667 ; CHECK:       # %bb.0:
12668 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12669 ; CHECK-NEXT:    vle32.v v8, (a0)
12670 ; CHECK-NEXT:    ret
12671   %ptrs = getelementptr inbounds i32, ptr %base, <4 x i128>  <i128 0, i128 1, i128 2, i128 3>
12672   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 true), <4 x i32> poison)
12673   ret <4 x i32> %v
12676 ; This looks like a strided load (at i8), but isn't at index type.
12677 define <4 x i32> @mgather_narrow_edge_case(ptr %base) {
12678 ; RV32-LABEL: mgather_narrow_edge_case:
12679 ; RV32:       # %bb.0:
12680 ; RV32-NEXT:    li a1, -512
12681 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12682 ; RV32-NEXT:    vmv.v.i v0, 5
12683 ; RV32-NEXT:    vmv.v.x v8, a1
12684 ; RV32-NEXT:    vmerge.vim v8, v8, 0, v0
12685 ; RV32-NEXT:    vluxei32.v v8, (a0), v8
12686 ; RV32-NEXT:    ret
12688 ; RV64V-LABEL: mgather_narrow_edge_case:
12689 ; RV64V:       # %bb.0:
12690 ; RV64V-NEXT:    li a1, -512
12691 ; RV64V-NEXT:    vsetivli zero, 1, e8, mf8, ta, ma
12692 ; RV64V-NEXT:    vmv.v.i v0, 5
12693 ; RV64V-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
12694 ; RV64V-NEXT:    vmv.v.x v8, a1
12695 ; RV64V-NEXT:    vmerge.vim v10, v8, 0, v0
12696 ; RV64V-NEXT:    vsetvli zero, zero, e32, m1, ta, ma
12697 ; RV64V-NEXT:    vluxei64.v v8, (a0), v10
12698 ; RV64V-NEXT:    ret
12700 ; RV64ZVE32F-LABEL: mgather_narrow_edge_case:
12701 ; RV64ZVE32F:       # %bb.0:
12702 ; RV64ZVE32F-NEXT:    lw a1, -512(a0)
12703 ; RV64ZVE32F-NEXT:    lw a0, 0(a0)
12704 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12705 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 5
12706 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
12707 ; RV64ZVE32F-NEXT:    vmerge.vxm v8, v8, a0, v0
12708 ; RV64ZVE32F-NEXT:    ret
12709   %ptrs = getelementptr inbounds i32, ptr %base, <4 x i8>  <i8 0, i8 128, i8 0, i8 128>
12710   %v = call <4 x i32> @llvm.masked.gather.v4i32.v4p0(<4 x ptr> %ptrs, i32 4, <4 x i1> splat (i1 true), <4 x i32> poison)
12711   ret <4 x i32> %v
12714 define <8 x i16> @mgather_strided_unaligned(ptr %base) {
12715 ; RV32-LABEL: mgather_strided_unaligned:
12716 ; RV32:       # %bb.0:
12717 ; RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
12718 ; RV32-NEXT:    vid.v v8
12719 ; RV32-NEXT:    vsll.vi v8, v8, 2
12720 ; RV32-NEXT:    vadd.vx v8, v8, a0
12721 ; RV32-NEXT:    vmv.x.s a0, v8
12722 ; RV32-NEXT:    lbu a1, 0(a0)
12723 ; RV32-NEXT:    lbu a0, 1(a0)
12724 ; RV32-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
12725 ; RV32-NEXT:    vslidedown.vi v10, v8, 1
12726 ; RV32-NEXT:    vmv.x.s a2, v10
12727 ; RV32-NEXT:    lbu a3, 1(a2)
12728 ; RV32-NEXT:    lbu a2, 0(a2)
12729 ; RV32-NEXT:    slli a0, a0, 8
12730 ; RV32-NEXT:    or a0, a0, a1
12731 ; RV32-NEXT:    slli a3, a3, 8
12732 ; RV32-NEXT:    or a2, a3, a2
12733 ; RV32-NEXT:    vslidedown.vi v10, v8, 2
12734 ; RV32-NEXT:    vmv.x.s a1, v10
12735 ; RV32-NEXT:    lbu a3, 0(a1)
12736 ; RV32-NEXT:    lbu a1, 1(a1)
12737 ; RV32-NEXT:    vslidedown.vi v10, v8, 3
12738 ; RV32-NEXT:    vmv.x.s a4, v10
12739 ; RV32-NEXT:    lbu a5, 1(a4)
12740 ; RV32-NEXT:    lbu a4, 0(a4)
12741 ; RV32-NEXT:    slli a1, a1, 8
12742 ; RV32-NEXT:    or a1, a1, a3
12743 ; RV32-NEXT:    slli a5, a5, 8
12744 ; RV32-NEXT:    or a4, a5, a4
12745 ; RV32-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
12746 ; RV32-NEXT:    vslidedown.vi v10, v8, 4
12747 ; RV32-NEXT:    vmv.x.s a3, v10
12748 ; RV32-NEXT:    lbu a5, 0(a3)
12749 ; RV32-NEXT:    lbu a3, 1(a3)
12750 ; RV32-NEXT:    vslidedown.vi v10, v8, 5
12751 ; RV32-NEXT:    vmv.x.s a6, v10
12752 ; RV32-NEXT:    lbu a7, 1(a6)
12753 ; RV32-NEXT:    lbu a6, 0(a6)
12754 ; RV32-NEXT:    slli a3, a3, 8
12755 ; RV32-NEXT:    or a3, a3, a5
12756 ; RV32-NEXT:    slli a7, a7, 8
12757 ; RV32-NEXT:    or a5, a7, a6
12758 ; RV32-NEXT:    vslidedown.vi v10, v8, 6
12759 ; RV32-NEXT:    vmv.x.s a6, v10
12760 ; RV32-NEXT:    lbu a7, 0(a6)
12761 ; RV32-NEXT:    lbu a6, 1(a6)
12762 ; RV32-NEXT:    vslidedown.vi v8, v8, 7
12763 ; RV32-NEXT:    vmv.x.s t0, v8
12764 ; RV32-NEXT:    lbu t1, 1(t0)
12765 ; RV32-NEXT:    lbu t0, 0(t0)
12766 ; RV32-NEXT:    slli a6, a6, 8
12767 ; RV32-NEXT:    or a6, a6, a7
12768 ; RV32-NEXT:    slli t1, t1, 8
12769 ; RV32-NEXT:    or a7, t1, t0
12770 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
12771 ; RV32-NEXT:    vmv.v.x v8, a0
12772 ; RV32-NEXT:    vslide1down.vx v8, v8, a2
12773 ; RV32-NEXT:    vslide1down.vx v8, v8, a1
12774 ; RV32-NEXT:    vslide1down.vx v9, v8, a4
12775 ; RV32-NEXT:    vmv.v.x v8, a3
12776 ; RV32-NEXT:    vslide1down.vx v8, v8, a5
12777 ; RV32-NEXT:    vslide1down.vx v8, v8, a6
12778 ; RV32-NEXT:    vmv.v.i v0, 15
12779 ; RV32-NEXT:    vslide1down.vx v8, v8, a7
12780 ; RV32-NEXT:    vslidedown.vi v8, v9, 4, v0.t
12781 ; RV32-NEXT:    ret
12783 ; RV64V-LABEL: mgather_strided_unaligned:
12784 ; RV64V:       # %bb.0:
12785 ; RV64V-NEXT:    addi sp, sp, -128
12786 ; RV64V-NEXT:    .cfi_def_cfa_offset 128
12787 ; RV64V-NEXT:    sd ra, 120(sp) # 8-byte Folded Spill
12788 ; RV64V-NEXT:    sd s0, 112(sp) # 8-byte Folded Spill
12789 ; RV64V-NEXT:    .cfi_offset ra, -8
12790 ; RV64V-NEXT:    .cfi_offset s0, -16
12791 ; RV64V-NEXT:    addi s0, sp, 128
12792 ; RV64V-NEXT:    .cfi_def_cfa s0, 0
12793 ; RV64V-NEXT:    andi sp, sp, -64
12794 ; RV64V-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
12795 ; RV64V-NEXT:    vid.v v8
12796 ; RV64V-NEXT:    vsll.vi v8, v8, 2
12797 ; RV64V-NEXT:    vadd.vx v8, v8, a0
12798 ; RV64V-NEXT:    vmv.x.s a0, v8
12799 ; RV64V-NEXT:    lbu a1, 0(a0)
12800 ; RV64V-NEXT:    lbu a0, 1(a0)
12801 ; RV64V-NEXT:    vsetivli zero, 1, e64, m1, ta, ma
12802 ; RV64V-NEXT:    vslidedown.vi v12, v8, 1
12803 ; RV64V-NEXT:    vmv.x.s a2, v12
12804 ; RV64V-NEXT:    lbu a3, 1(a2)
12805 ; RV64V-NEXT:    lbu a2, 0(a2)
12806 ; RV64V-NEXT:    slli a0, a0, 8
12807 ; RV64V-NEXT:    or a0, a0, a1
12808 ; RV64V-NEXT:    slli a1, a3, 8
12809 ; RV64V-NEXT:    or a1, a1, a2
12810 ; RV64V-NEXT:    vsetivli zero, 1, e64, m2, ta, ma
12811 ; RV64V-NEXT:    vslidedown.vi v12, v8, 2
12812 ; RV64V-NEXT:    vmv.x.s a2, v12
12813 ; RV64V-NEXT:    lbu a3, 0(a2)
12814 ; RV64V-NEXT:    lbu a2, 1(a2)
12815 ; RV64V-NEXT:    vslidedown.vi v12, v8, 3
12816 ; RV64V-NEXT:    vmv.x.s a4, v12
12817 ; RV64V-NEXT:    lbu a5, 0(a4)
12818 ; RV64V-NEXT:    lbu a4, 1(a4)
12819 ; RV64V-NEXT:    mv a6, sp
12820 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
12821 ; RV64V-NEXT:    vse64.v v8, (a6)
12822 ; RV64V-NEXT:    ld a6, 32(sp)
12823 ; RV64V-NEXT:    slli a2, a2, 8
12824 ; RV64V-NEXT:    or a2, a2, a3
12825 ; RV64V-NEXT:    slli a4, a4, 8
12826 ; RV64V-NEXT:    lbu a3, 1(a6)
12827 ; RV64V-NEXT:    ld a7, 40(sp)
12828 ; RV64V-NEXT:    lbu a6, 0(a6)
12829 ; RV64V-NEXT:    or a4, a4, a5
12830 ; RV64V-NEXT:    slli a3, a3, 8
12831 ; RV64V-NEXT:    lbu a5, 1(a7)
12832 ; RV64V-NEXT:    or a3, a3, a6
12833 ; RV64V-NEXT:    lbu a6, 0(a7)
12834 ; RV64V-NEXT:    ld a7, 48(sp)
12835 ; RV64V-NEXT:    slli a5, a5, 8
12836 ; RV64V-NEXT:    ld t0, 56(sp)
12837 ; RV64V-NEXT:    or a5, a5, a6
12838 ; RV64V-NEXT:    lbu a6, 1(a7)
12839 ; RV64V-NEXT:    lbu a7, 0(a7)
12840 ; RV64V-NEXT:    lbu t1, 1(t0)
12841 ; RV64V-NEXT:    lbu t0, 0(t0)
12842 ; RV64V-NEXT:    slli a6, a6, 8
12843 ; RV64V-NEXT:    or a6, a6, a7
12844 ; RV64V-NEXT:    slli t1, t1, 8
12845 ; RV64V-NEXT:    or a7, t1, t0
12846 ; RV64V-NEXT:    vmv.v.x v8, a0
12847 ; RV64V-NEXT:    vslide1down.vx v8, v8, a1
12848 ; RV64V-NEXT:    vslide1down.vx v8, v8, a2
12849 ; RV64V-NEXT:    vslide1down.vx v9, v8, a4
12850 ; RV64V-NEXT:    vmv.v.x v8, a3
12851 ; RV64V-NEXT:    vslide1down.vx v8, v8, a5
12852 ; RV64V-NEXT:    vslide1down.vx v8, v8, a6
12853 ; RV64V-NEXT:    vmv.v.i v0, 15
12854 ; RV64V-NEXT:    vslide1down.vx v8, v8, a7
12855 ; RV64V-NEXT:    vslidedown.vi v8, v9, 4, v0.t
12856 ; RV64V-NEXT:    addi sp, s0, -128
12857 ; RV64V-NEXT:    ld ra, 120(sp) # 8-byte Folded Reload
12858 ; RV64V-NEXT:    ld s0, 112(sp) # 8-byte Folded Reload
12859 ; RV64V-NEXT:    addi sp, sp, 128
12860 ; RV64V-NEXT:    ret
12862 ; RV64ZVE32F-LABEL: mgather_strided_unaligned:
12863 ; RV64ZVE32F:       # %bb.0:
12864 ; RV64ZVE32F-NEXT:    lbu a1, 1(a0)
12865 ; RV64ZVE32F-NEXT:    lbu a2, 0(a0)
12866 ; RV64ZVE32F-NEXT:    lbu a3, 5(a0)
12867 ; RV64ZVE32F-NEXT:    lbu a4, 4(a0)
12868 ; RV64ZVE32F-NEXT:    slli a1, a1, 8
12869 ; RV64ZVE32F-NEXT:    or a1, a1, a2
12870 ; RV64ZVE32F-NEXT:    slli a3, a3, 8
12871 ; RV64ZVE32F-NEXT:    or a3, a3, a4
12872 ; RV64ZVE32F-NEXT:    lbu a2, 9(a0)
12873 ; RV64ZVE32F-NEXT:    lbu a4, 8(a0)
12874 ; RV64ZVE32F-NEXT:    lbu a5, 13(a0)
12875 ; RV64ZVE32F-NEXT:    lbu a6, 12(a0)
12876 ; RV64ZVE32F-NEXT:    slli a2, a2, 8
12877 ; RV64ZVE32F-NEXT:    or a2, a2, a4
12878 ; RV64ZVE32F-NEXT:    slli a5, a5, 8
12879 ; RV64ZVE32F-NEXT:    or a4, a5, a6
12880 ; RV64ZVE32F-NEXT:    lbu a5, 17(a0)
12881 ; RV64ZVE32F-NEXT:    lbu a6, 16(a0)
12882 ; RV64ZVE32F-NEXT:    lbu a7, 21(a0)
12883 ; RV64ZVE32F-NEXT:    lbu t0, 20(a0)
12884 ; RV64ZVE32F-NEXT:    slli a5, a5, 8
12885 ; RV64ZVE32F-NEXT:    or a5, a5, a6
12886 ; RV64ZVE32F-NEXT:    slli a7, a7, 8
12887 ; RV64ZVE32F-NEXT:    or a6, a7, t0
12888 ; RV64ZVE32F-NEXT:    lbu a7, 25(a0)
12889 ; RV64ZVE32F-NEXT:    lbu t0, 24(a0)
12890 ; RV64ZVE32F-NEXT:    lbu t1, 29(a0)
12891 ; RV64ZVE32F-NEXT:    lbu a0, 28(a0)
12892 ; RV64ZVE32F-NEXT:    slli a7, a7, 8
12893 ; RV64ZVE32F-NEXT:    or a7, a7, t0
12894 ; RV64ZVE32F-NEXT:    slli t1, t1, 8
12895 ; RV64ZVE32F-NEXT:    or a0, t1, a0
12896 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
12897 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
12898 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
12899 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
12900 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
12901 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
12902 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
12903 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
12904 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
12905 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
12906 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
12907 ; RV64ZVE32F-NEXT:    ret
12908   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i32>  <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14>
12909   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 1, <8 x i1> splat (i1 true), <8 x i16> poison)
12910   ret <8 x i16> %v
12913 ; TODO: Recognize as strided load with SEW=32
12914 define <8 x i16> @mgather_strided_2xSEW(ptr %base) {
12915 ; RV32-LABEL: mgather_strided_2xSEW:
12916 ; RV32:       # %bb.0:
12917 ; RV32-NEXT:    li a1, 8
12918 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12919 ; RV32-NEXT:    vlse32.v v8, (a0), a1
12920 ; RV32-NEXT:    ret
12922 ; RV64V-LABEL: mgather_strided_2xSEW:
12923 ; RV64V:       # %bb.0:
12924 ; RV64V-NEXT:    li a1, 8
12925 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12926 ; RV64V-NEXT:    vlse32.v v8, (a0), a1
12927 ; RV64V-NEXT:    ret
12929 ; RV64ZVE32F-LABEL: mgather_strided_2xSEW:
12930 ; RV64ZVE32F:       # %bb.0:
12931 ; RV64ZVE32F-NEXT:    lh a1, 0(a0)
12932 ; RV64ZVE32F-NEXT:    lh a2, 2(a0)
12933 ; RV64ZVE32F-NEXT:    lh a3, 8(a0)
12934 ; RV64ZVE32F-NEXT:    lh a4, 10(a0)
12935 ; RV64ZVE32F-NEXT:    lh a5, 16(a0)
12936 ; RV64ZVE32F-NEXT:    lh a6, 18(a0)
12937 ; RV64ZVE32F-NEXT:    lh a7, 24(a0)
12938 ; RV64ZVE32F-NEXT:    lh a0, 26(a0)
12939 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
12940 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
12941 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
12942 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
12943 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
12944 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
12945 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
12946 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
12947 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
12948 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
12949 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
12950 ; RV64ZVE32F-NEXT:    ret
12951   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i32>  <i32 0, i32 1, i32 4, i32 5, i32 8, i32 9, i32 12, i32 13>
12952   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
12953   ret <8 x i16> %v
12956 ; TODO: Recognize as strided load with SEW=32
12957 define <8 x i16> @mgather_strided_2xSEW_with_offset(ptr %base) {
12958 ; RV32-LABEL: mgather_strided_2xSEW_with_offset:
12959 ; RV32:       # %bb.0:
12960 ; RV32-NEXT:    addi a0, a0, 4
12961 ; RV32-NEXT:    li a1, 8
12962 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12963 ; RV32-NEXT:    vlse32.v v8, (a0), a1
12964 ; RV32-NEXT:    ret
12966 ; RV64V-LABEL: mgather_strided_2xSEW_with_offset:
12967 ; RV64V:       # %bb.0:
12968 ; RV64V-NEXT:    addi a0, a0, 4
12969 ; RV64V-NEXT:    li a1, 8
12970 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
12971 ; RV64V-NEXT:    vlse32.v v8, (a0), a1
12972 ; RV64V-NEXT:    ret
12974 ; RV64ZVE32F-LABEL: mgather_strided_2xSEW_with_offset:
12975 ; RV64ZVE32F:       # %bb.0:
12976 ; RV64ZVE32F-NEXT:    lh a1, 4(a0)
12977 ; RV64ZVE32F-NEXT:    lh a2, 6(a0)
12978 ; RV64ZVE32F-NEXT:    lh a3, 12(a0)
12979 ; RV64ZVE32F-NEXT:    lh a4, 14(a0)
12980 ; RV64ZVE32F-NEXT:    lh a5, 20(a0)
12981 ; RV64ZVE32F-NEXT:    lh a6, 22(a0)
12982 ; RV64ZVE32F-NEXT:    lh a7, 28(a0)
12983 ; RV64ZVE32F-NEXT:    lh a0, 30(a0)
12984 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
12985 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
12986 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
12987 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
12988 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
12989 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
12990 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
12991 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
12992 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
12993 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
12994 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
12995 ; RV64ZVE32F-NEXT:    ret
12996   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i64>  <i64 2, i64 3, i64 6, i64 7, i64 10, i64 11, i64 14, i64 15>
12997   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
12998   ret <8 x i16> %v
13001 ; TODO: Recognize as strided load with SEW=32
13002 define <8 x i16> @mgather_reverse_unit_strided_2xSEW(ptr %base) {
13003 ; RV32-LABEL: mgather_reverse_unit_strided_2xSEW:
13004 ; RV32:       # %bb.0:
13005 ; RV32-NEXT:    addi a0, a0, 28
13006 ; RV32-NEXT:    li a1, -4
13007 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13008 ; RV32-NEXT:    vlse32.v v8, (a0), a1
13009 ; RV32-NEXT:    ret
13011 ; RV64V-LABEL: mgather_reverse_unit_strided_2xSEW:
13012 ; RV64V:       # %bb.0:
13013 ; RV64V-NEXT:    addi a0, a0, 28
13014 ; RV64V-NEXT:    li a1, -4
13015 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13016 ; RV64V-NEXT:    vlse32.v v8, (a0), a1
13017 ; RV64V-NEXT:    ret
13019 ; RV64ZVE32F-LABEL: mgather_reverse_unit_strided_2xSEW:
13020 ; RV64ZVE32F:       # %bb.0:
13021 ; RV64ZVE32F-NEXT:    lh a1, 28(a0)
13022 ; RV64ZVE32F-NEXT:    lh a2, 30(a0)
13023 ; RV64ZVE32F-NEXT:    lh a3, 24(a0)
13024 ; RV64ZVE32F-NEXT:    lh a4, 26(a0)
13025 ; RV64ZVE32F-NEXT:    lh a5, 20(a0)
13026 ; RV64ZVE32F-NEXT:    lh a6, 22(a0)
13027 ; RV64ZVE32F-NEXT:    lh a7, 16(a0)
13028 ; RV64ZVE32F-NEXT:    lh a0, 18(a0)
13029 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13030 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13031 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13032 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13033 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13034 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13035 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13036 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
13037 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13038 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13039 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13040 ; RV64ZVE32F-NEXT:    ret
13041   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i64>  <i64 14, i64 15, i64 12, i64 13, i64 10, i64 11, i64 8, i64 9>
13042   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
13043   ret <8 x i16> %v
13046 ; TODO: Recognize as strided load with SEW=32
13047 define <8 x i16> @mgather_reverse_strided_2xSEW(ptr %base) {
13048 ; RV32-LABEL: mgather_reverse_strided_2xSEW:
13049 ; RV32:       # %bb.0:
13050 ; RV32-NEXT:    addi a0, a0, 28
13051 ; RV32-NEXT:    li a1, -8
13052 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13053 ; RV32-NEXT:    vlse32.v v8, (a0), a1
13054 ; RV32-NEXT:    ret
13056 ; RV64V-LABEL: mgather_reverse_strided_2xSEW:
13057 ; RV64V:       # %bb.0:
13058 ; RV64V-NEXT:    addi a0, a0, 28
13059 ; RV64V-NEXT:    li a1, -8
13060 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13061 ; RV64V-NEXT:    vlse32.v v8, (a0), a1
13062 ; RV64V-NEXT:    ret
13064 ; RV64ZVE32F-LABEL: mgather_reverse_strided_2xSEW:
13065 ; RV64ZVE32F:       # %bb.0:
13066 ; RV64ZVE32F-NEXT:    lh a1, 28(a0)
13067 ; RV64ZVE32F-NEXT:    lh a2, 30(a0)
13068 ; RV64ZVE32F-NEXT:    lh a3, 20(a0)
13069 ; RV64ZVE32F-NEXT:    lh a4, 22(a0)
13070 ; RV64ZVE32F-NEXT:    lh a5, 12(a0)
13071 ; RV64ZVE32F-NEXT:    lh a6, 14(a0)
13072 ; RV64ZVE32F-NEXT:    lh a7, 4(a0)
13073 ; RV64ZVE32F-NEXT:    lh a0, 6(a0)
13074 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13075 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13076 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13077 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13078 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13079 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13080 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13081 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
13082 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13083 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13084 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13085 ; RV64ZVE32F-NEXT:    ret
13086   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i64>  <i64 14, i64 15, i64 10, i64 11, i64 6, i64 7, i64 2, i64 3>
13087   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
13088   ret <8 x i16> %v
13091 define <8 x i16> @mgather_gather_2xSEW(ptr %base) {
13092 ; RV32-LABEL: mgather_gather_2xSEW:
13093 ; RV32:       # %bb.0:
13094 ; RV32-NEXT:    lui a1, 16513
13095 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13096 ; RV32-NEXT:    vmv.s.x v9, a1
13097 ; RV32-NEXT:    vluxei8.v v8, (a0), v9
13098 ; RV32-NEXT:    ret
13100 ; RV64V-LABEL: mgather_gather_2xSEW:
13101 ; RV64V:       # %bb.0:
13102 ; RV64V-NEXT:    lui a1, 16513
13103 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13104 ; RV64V-NEXT:    vmv.s.x v9, a1
13105 ; RV64V-NEXT:    vluxei8.v v8, (a0), v9
13106 ; RV64V-NEXT:    ret
13108 ; RV64ZVE32F-LABEL: mgather_gather_2xSEW:
13109 ; RV64ZVE32F:       # %bb.0:
13110 ; RV64ZVE32F-NEXT:    lh a1, 0(a0)
13111 ; RV64ZVE32F-NEXT:    lh a2, 2(a0)
13112 ; RV64ZVE32F-NEXT:    lh a3, 16(a0)
13113 ; RV64ZVE32F-NEXT:    lh a4, 18(a0)
13114 ; RV64ZVE32F-NEXT:    lh a5, 8(a0)
13115 ; RV64ZVE32F-NEXT:    lh a6, 10(a0)
13116 ; RV64ZVE32F-NEXT:    lh a7, 4(a0)
13117 ; RV64ZVE32F-NEXT:    lh a0, 6(a0)
13118 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13119 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13120 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13121 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13122 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13123 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13124 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13125 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
13126 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13127 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13128 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13129 ; RV64ZVE32F-NEXT:    ret
13130   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i32>  <i32 0, i32 1, i32 8, i32 9, i32 4, i32 5, i32 2, i32 3>
13131   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
13132   ret <8 x i16> %v
13135 ; Base pointer isn't sufficiently aligned to form gather with e32
13136 define <8 x i16> @mgather_gather_2xSEW_unaligned(ptr %base) {
13137 ; RV32-LABEL: mgather_gather_2xSEW_unaligned:
13138 ; RV32:       # %bb.0:
13139 ; RV32-NEXT:    lui a1, %hi(.LCPI113_0)
13140 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI113_0)
13141 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13142 ; RV32-NEXT:    vle8.v v9, (a1)
13143 ; RV32-NEXT:    vluxei8.v v8, (a0), v9
13144 ; RV32-NEXT:    ret
13146 ; RV64V-LABEL: mgather_gather_2xSEW_unaligned:
13147 ; RV64V:       # %bb.0:
13148 ; RV64V-NEXT:    lui a1, %hi(.LCPI113_0)
13149 ; RV64V-NEXT:    addi a1, a1, %lo(.LCPI113_0)
13150 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13151 ; RV64V-NEXT:    vle8.v v9, (a1)
13152 ; RV64V-NEXT:    vluxei8.v v8, (a0), v9
13153 ; RV64V-NEXT:    ret
13155 ; RV64ZVE32F-LABEL: mgather_gather_2xSEW_unaligned:
13156 ; RV64ZVE32F:       # %bb.0:
13157 ; RV64ZVE32F-NEXT:    lh a1, 0(a0)
13158 ; RV64ZVE32F-NEXT:    lh a2, 2(a0)
13159 ; RV64ZVE32F-NEXT:    lh a3, 18(a0)
13160 ; RV64ZVE32F-NEXT:    lh a4, 20(a0)
13161 ; RV64ZVE32F-NEXT:    lh a5, 8(a0)
13162 ; RV64ZVE32F-NEXT:    lh a6, 10(a0)
13163 ; RV64ZVE32F-NEXT:    lh a7, 4(a0)
13164 ; RV64ZVE32F-NEXT:    lh a0, 6(a0)
13165 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13166 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13167 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13168 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13169 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13170 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13171 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13172 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
13173 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13174 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13175 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13176 ; RV64ZVE32F-NEXT:    ret
13177   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i32>  <i32 0, i32 1, i32 9, i32 10, i32 4, i32 5, i32 2, i32 3>
13178   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 2, <8 x i1> splat (i1 true), <8 x i16> poison)
13179   ret <8 x i16> %v
13182 ; Despite sufficient starting alignment, the index values aren't properly
13183 ; aligned for e32.
13184 define <8 x i16> @mgather_gather_2xSEW_unaligned2(ptr %base) {
13185 ; RV32-LABEL: mgather_gather_2xSEW_unaligned2:
13186 ; RV32:       # %bb.0:
13187 ; RV32-NEXT:    lui a1, %hi(.LCPI114_0)
13188 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI114_0)
13189 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13190 ; RV32-NEXT:    vle8.v v9, (a1)
13191 ; RV32-NEXT:    vluxei8.v v8, (a0), v9
13192 ; RV32-NEXT:    ret
13194 ; RV64V-LABEL: mgather_gather_2xSEW_unaligned2:
13195 ; RV64V:       # %bb.0:
13196 ; RV64V-NEXT:    lui a1, %hi(.LCPI114_0)
13197 ; RV64V-NEXT:    addi a1, a1, %lo(.LCPI114_0)
13198 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13199 ; RV64V-NEXT:    vle8.v v9, (a1)
13200 ; RV64V-NEXT:    vluxei8.v v8, (a0), v9
13201 ; RV64V-NEXT:    ret
13203 ; RV64ZVE32F-LABEL: mgather_gather_2xSEW_unaligned2:
13204 ; RV64ZVE32F:       # %bb.0:
13205 ; RV64ZVE32F-NEXT:    lh a1, 2(a0)
13206 ; RV64ZVE32F-NEXT:    lh a2, 4(a0)
13207 ; RV64ZVE32F-NEXT:    lh a3, 18(a0)
13208 ; RV64ZVE32F-NEXT:    lh a4, 20(a0)
13209 ; RV64ZVE32F-NEXT:    lh a5, 8(a0)
13210 ; RV64ZVE32F-NEXT:    lh a6, 10(a0)
13211 ; RV64ZVE32F-NEXT:    lh a0, 6(a0)
13212 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13213 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13214 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13215 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13216 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13217 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13218 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13219 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13220 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13221 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13222 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13223 ; RV64ZVE32F-NEXT:    ret
13224   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i32>  <i32 1, i32 2, i32 9, i32 10, i32 4, i32 5, i32 2, i32 3>
13225   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
13226   ret <8 x i16> %v
13229 define <8 x i16> @mgather_gather_4xSEW(ptr %base) {
13230 ; RV32V-LABEL: mgather_gather_4xSEW:
13231 ; RV32V:       # %bb.0:
13232 ; RV32V-NEXT:    li a1, 16
13233 ; RV32V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
13234 ; RV32V-NEXT:    vlse64.v v8, (a0), a1
13235 ; RV32V-NEXT:    ret
13237 ; RV64V-LABEL: mgather_gather_4xSEW:
13238 ; RV64V:       # %bb.0:
13239 ; RV64V-NEXT:    li a1, 16
13240 ; RV64V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
13241 ; RV64V-NEXT:    vlse64.v v8, (a0), a1
13242 ; RV64V-NEXT:    ret
13244 ; RV32ZVE32F-LABEL: mgather_gather_4xSEW:
13245 ; RV32ZVE32F:       # %bb.0:
13246 ; RV32ZVE32F-NEXT:    lui a1, 82176
13247 ; RV32ZVE32F-NEXT:    addi a1, a1, 1024
13248 ; RV32ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13249 ; RV32ZVE32F-NEXT:    vmv.s.x v9, a1
13250 ; RV32ZVE32F-NEXT:    vluxei8.v v8, (a0), v9
13251 ; RV32ZVE32F-NEXT:    ret
13253 ; RV64ZVE32F-LABEL: mgather_gather_4xSEW:
13254 ; RV64ZVE32F:       # %bb.0:
13255 ; RV64ZVE32F-NEXT:    lh a1, 0(a0)
13256 ; RV64ZVE32F-NEXT:    lh a2, 2(a0)
13257 ; RV64ZVE32F-NEXT:    lh a3, 4(a0)
13258 ; RV64ZVE32F-NEXT:    lh a4, 6(a0)
13259 ; RV64ZVE32F-NEXT:    lh a5, 16(a0)
13260 ; RV64ZVE32F-NEXT:    lh a6, 18(a0)
13261 ; RV64ZVE32F-NEXT:    lh a7, 20(a0)
13262 ; RV64ZVE32F-NEXT:    lh a0, 22(a0)
13263 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13264 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13265 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13266 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13267 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13268 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13269 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13270 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
13271 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13272 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13273 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13274 ; RV64ZVE32F-NEXT:    ret
13275   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i32>  <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
13276   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 8, <8 x i1> splat (i1 true), <8 x i16> poison)
13277   ret <8 x i16> %v
13280 ; This is a case where we'd be able to do 4xSEW if we had proper alignment
13281 ; but we only have sufficient alignment for 2xSEW.
13282 define <8 x i16> @mgather_gather_4xSEW_partial_align(ptr %base) {
13283 ; RV32-LABEL: mgather_gather_4xSEW_partial_align:
13284 ; RV32:       # %bb.0:
13285 ; RV32-NEXT:    lui a1, 82176
13286 ; RV32-NEXT:    addi a1, a1, 1024
13287 ; RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13288 ; RV32-NEXT:    vmv.s.x v9, a1
13289 ; RV32-NEXT:    vluxei8.v v8, (a0), v9
13290 ; RV32-NEXT:    ret
13292 ; RV64V-LABEL: mgather_gather_4xSEW_partial_align:
13293 ; RV64V:       # %bb.0:
13294 ; RV64V-NEXT:    lui a1, 82176
13295 ; RV64V-NEXT:    addi a1, a1, 1024
13296 ; RV64V-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13297 ; RV64V-NEXT:    vmv.s.x v9, a1
13298 ; RV64V-NEXT:    vluxei8.v v8, (a0), v9
13299 ; RV64V-NEXT:    ret
13301 ; RV64ZVE32F-LABEL: mgather_gather_4xSEW_partial_align:
13302 ; RV64ZVE32F:       # %bb.0:
13303 ; RV64ZVE32F-NEXT:    lh a1, 0(a0)
13304 ; RV64ZVE32F-NEXT:    lh a2, 2(a0)
13305 ; RV64ZVE32F-NEXT:    lh a3, 4(a0)
13306 ; RV64ZVE32F-NEXT:    lh a4, 6(a0)
13307 ; RV64ZVE32F-NEXT:    lh a5, 16(a0)
13308 ; RV64ZVE32F-NEXT:    lh a6, 18(a0)
13309 ; RV64ZVE32F-NEXT:    lh a7, 20(a0)
13310 ; RV64ZVE32F-NEXT:    lh a0, 22(a0)
13311 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13312 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13313 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13314 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13315 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13316 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13317 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13318 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
13319 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13320 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13321 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13322 ; RV64ZVE32F-NEXT:    ret
13323   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i32>  <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
13324   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
13325   ret <8 x i16> %v
13328 define <8 x i16> @mgather_shuffle_reverse(ptr %base) {
13329 ; CHECK-LABEL: mgather_shuffle_reverse:
13330 ; CHECK:       # %bb.0:
13331 ; CHECK-NEXT:    addi a0, a0, 14
13332 ; CHECK-NEXT:    li a1, -2
13333 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13334 ; CHECK-NEXT:    vlse16.v v8, (a0), a1
13335 ; CHECK-NEXT:    ret
13336   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i64>  <i64 7, i64 6, i64 5, i64 4, i64 3, i64 2, i64 1, i64 0>
13337   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
13338   ret <8 x i16> %v
13341 define <8 x i16> @mgather_shuffle_rotate(ptr %base) {
13342 ; RV32-LABEL: mgather_shuffle_rotate:
13343 ; RV32:       # %bb.0:
13344 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13345 ; RV32-NEXT:    vle16.v v9, (a0)
13346 ; RV32-NEXT:    vslidedown.vi v8, v9, 4
13347 ; RV32-NEXT:    vslideup.vi v8, v9, 4
13348 ; RV32-NEXT:    ret
13350 ; RV64V-LABEL: mgather_shuffle_rotate:
13351 ; RV64V:       # %bb.0:
13352 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13353 ; RV64V-NEXT:    vle16.v v9, (a0)
13354 ; RV64V-NEXT:    vslidedown.vi v8, v9, 4
13355 ; RV64V-NEXT:    vslideup.vi v8, v9, 4
13356 ; RV64V-NEXT:    ret
13358 ; RV64ZVE32F-LABEL: mgather_shuffle_rotate:
13359 ; RV64ZVE32F:       # %bb.0:
13360 ; RV64ZVE32F-NEXT:    lh a1, 8(a0)
13361 ; RV64ZVE32F-NEXT:    lh a2, 10(a0)
13362 ; RV64ZVE32F-NEXT:    lh a3, 12(a0)
13363 ; RV64ZVE32F-NEXT:    lh a4, 14(a0)
13364 ; RV64ZVE32F-NEXT:    lh a5, 0(a0)
13365 ; RV64ZVE32F-NEXT:    lh a6, 2(a0)
13366 ; RV64ZVE32F-NEXT:    lh a7, 4(a0)
13367 ; RV64ZVE32F-NEXT:    lh a0, 6(a0)
13368 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13369 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13370 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13371 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13372 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13373 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13374 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13375 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
13376 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13377 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13378 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13379 ; RV64ZVE32F-NEXT:    ret
13380   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i64>  <i64 4, i64 5, i64 6, i64 7, i64 0, i64 1, i64 2, i64 3>
13381   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
13382   ret <8 x i16> %v
13385 define <8 x i16> @mgather_shuffle_vrgather(ptr %base) {
13386 ; RV32-LABEL: mgather_shuffle_vrgather:
13387 ; RV32:       # %bb.0:
13388 ; RV32-NEXT:    lui a1, %hi(.LCPI119_0)
13389 ; RV32-NEXT:    addi a1, a1, %lo(.LCPI119_0)
13390 ; RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13391 ; RV32-NEXT:    vle16.v v9, (a1)
13392 ; RV32-NEXT:    vle16.v v10, (a0)
13393 ; RV32-NEXT:    vrgather.vv v8, v10, v9
13394 ; RV32-NEXT:    ret
13396 ; RV64V-LABEL: mgather_shuffle_vrgather:
13397 ; RV64V:       # %bb.0:
13398 ; RV64V-NEXT:    lui a1, %hi(.LCPI119_0)
13399 ; RV64V-NEXT:    addi a1, a1, %lo(.LCPI119_0)
13400 ; RV64V-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
13401 ; RV64V-NEXT:    vle16.v v9, (a1)
13402 ; RV64V-NEXT:    vle16.v v10, (a0)
13403 ; RV64V-NEXT:    vrgather.vv v8, v10, v9
13404 ; RV64V-NEXT:    ret
13406 ; RV64ZVE32F-LABEL: mgather_shuffle_vrgather:
13407 ; RV64ZVE32F:       # %bb.0:
13408 ; RV64ZVE32F-NEXT:    lh a1, 0(a0)
13409 ; RV64ZVE32F-NEXT:    lh a2, 4(a0)
13410 ; RV64ZVE32F-NEXT:    lh a3, 6(a0)
13411 ; RV64ZVE32F-NEXT:    lh a4, 2(a0)
13412 ; RV64ZVE32F-NEXT:    lh a5, 8(a0)
13413 ; RV64ZVE32F-NEXT:    lh a6, 10(a0)
13414 ; RV64ZVE32F-NEXT:    lh a7, 12(a0)
13415 ; RV64ZVE32F-NEXT:    lh a0, 14(a0)
13416 ; RV64ZVE32F-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
13417 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13418 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13419 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13420 ; RV64ZVE32F-NEXT:    vslide1down.vx v9, v8, a4
13421 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a5
13422 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a6
13423 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a7
13424 ; RV64ZVE32F-NEXT:    vmv.v.i v0, 15
13425 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13426 ; RV64ZVE32F-NEXT:    vslidedown.vi v8, v9, 4, v0.t
13427 ; RV64ZVE32F-NEXT:    ret
13428   %ptrs = getelementptr inbounds i16, ptr %base, <8 x i64>  <i64 0, i64 2, i64 3, i64 1, i64 4, i64 5, i64 6, i64 7>
13429   %v = call <8 x i16> @llvm.masked.gather.v8i16.v8p0(<8 x ptr> %ptrs, i32 4, <8 x i1> splat (i1 true), <8 x i16> poison)
13430   ret <8 x i16> %v
13433 ; v32i64 is not a legal type, so make sure we don't try to combine the mgather
13434 ; to a vlse intrinsic until it is legalized and split.
13435 define <32 x i64> @mgather_strided_split(ptr %base) {
13436 ; RV32V-LABEL: mgather_strided_split:
13437 ; RV32V:       # %bb.0:
13438 ; RV32V-NEXT:    li a1, 16
13439 ; RV32V-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
13440 ; RV32V-NEXT:    vlse64.v v8, (a0), a1
13441 ; RV32V-NEXT:    addi a0, a0, 256
13442 ; RV32V-NEXT:    vlse64.v v16, (a0), a1
13443 ; RV32V-NEXT:    ret
13445 ; RV64V-LABEL: mgather_strided_split:
13446 ; RV64V:       # %bb.0:
13447 ; RV64V-NEXT:    li a1, 16
13448 ; RV64V-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
13449 ; RV64V-NEXT:    vlse64.v v8, (a0), a1
13450 ; RV64V-NEXT:    addi a0, a0, 256
13451 ; RV64V-NEXT:    vlse64.v v16, (a0), a1
13452 ; RV64V-NEXT:    ret
13454 ; RV32ZVE32F-LABEL: mgather_strided_split:
13455 ; RV32ZVE32F:       # %bb.0:
13456 ; RV32ZVE32F-NEXT:    addi sp, sp, -512
13457 ; RV32ZVE32F-NEXT:    .cfi_def_cfa_offset 512
13458 ; RV32ZVE32F-NEXT:    sw ra, 508(sp) # 4-byte Folded Spill
13459 ; RV32ZVE32F-NEXT:    sw s0, 504(sp) # 4-byte Folded Spill
13460 ; RV32ZVE32F-NEXT:    sw s2, 500(sp) # 4-byte Folded Spill
13461 ; RV32ZVE32F-NEXT:    sw s3, 496(sp) # 4-byte Folded Spill
13462 ; RV32ZVE32F-NEXT:    sw s4, 492(sp) # 4-byte Folded Spill
13463 ; RV32ZVE32F-NEXT:    sw s5, 488(sp) # 4-byte Folded Spill
13464 ; RV32ZVE32F-NEXT:    sw s6, 484(sp) # 4-byte Folded Spill
13465 ; RV32ZVE32F-NEXT:    sw s7, 480(sp) # 4-byte Folded Spill
13466 ; RV32ZVE32F-NEXT:    sw s8, 476(sp) # 4-byte Folded Spill
13467 ; RV32ZVE32F-NEXT:    sw s9, 472(sp) # 4-byte Folded Spill
13468 ; RV32ZVE32F-NEXT:    sw s10, 468(sp) # 4-byte Folded Spill
13469 ; RV32ZVE32F-NEXT:    sw s11, 464(sp) # 4-byte Folded Spill
13470 ; RV32ZVE32F-NEXT:    .cfi_offset ra, -4
13471 ; RV32ZVE32F-NEXT:    .cfi_offset s0, -8
13472 ; RV32ZVE32F-NEXT:    .cfi_offset s2, -12
13473 ; RV32ZVE32F-NEXT:    .cfi_offset s3, -16
13474 ; RV32ZVE32F-NEXT:    .cfi_offset s4, -20
13475 ; RV32ZVE32F-NEXT:    .cfi_offset s5, -24
13476 ; RV32ZVE32F-NEXT:    .cfi_offset s6, -28
13477 ; RV32ZVE32F-NEXT:    .cfi_offset s7, -32
13478 ; RV32ZVE32F-NEXT:    .cfi_offset s8, -36
13479 ; RV32ZVE32F-NEXT:    .cfi_offset s9, -40
13480 ; RV32ZVE32F-NEXT:    .cfi_offset s10, -44
13481 ; RV32ZVE32F-NEXT:    .cfi_offset s11, -48
13482 ; RV32ZVE32F-NEXT:    addi s0, sp, 512
13483 ; RV32ZVE32F-NEXT:    .cfi_def_cfa s0, 0
13484 ; RV32ZVE32F-NEXT:    andi sp, sp, -128
13485 ; RV32ZVE32F-NEXT:    li a2, 32
13486 ; RV32ZVE32F-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
13487 ; RV32ZVE32F-NEXT:    vid.v v8
13488 ; RV32ZVE32F-NEXT:    vsll.vi v8, v8, 4
13489 ; RV32ZVE32F-NEXT:    vadd.vx v8, v8, a1
13490 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v8
13491 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13492 ; RV32ZVE32F-NEXT:    sw a3, 216(sp) # 4-byte Folded Spill
13493 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13494 ; RV32ZVE32F-NEXT:    sw a1, 208(sp) # 4-byte Folded Spill
13495 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m1, ta, ma
13496 ; RV32ZVE32F-NEXT:    vslidedown.vi v16, v8, 1
13497 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v16
13498 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13499 ; RV32ZVE32F-NEXT:    sw a3, 252(sp) # 4-byte Folded Spill
13500 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13501 ; RV32ZVE32F-NEXT:    sw a1, 248(sp) # 4-byte Folded Spill
13502 ; RV32ZVE32F-NEXT:    vslidedown.vi v16, v8, 2
13503 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v16
13504 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13505 ; RV32ZVE32F-NEXT:    sw a3, 244(sp) # 4-byte Folded Spill
13506 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13507 ; RV32ZVE32F-NEXT:    sw a1, 236(sp) # 4-byte Folded Spill
13508 ; RV32ZVE32F-NEXT:    vslidedown.vi v16, v8, 3
13509 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v16
13510 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13511 ; RV32ZVE32F-NEXT:    sw a3, 228(sp) # 4-byte Folded Spill
13512 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13513 ; RV32ZVE32F-NEXT:    sw a1, 220(sp) # 4-byte Folded Spill
13514 ; RV32ZVE32F-NEXT:    vsetivli zero, 1, e32, m2, ta, ma
13515 ; RV32ZVE32F-NEXT:    vslidedown.vi v16, v8, 4
13516 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v16
13517 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13518 ; RV32ZVE32F-NEXT:    sw a3, 240(sp) # 4-byte Folded Spill
13519 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13520 ; RV32ZVE32F-NEXT:    sw a1, 232(sp) # 4-byte Folded Spill
13521 ; RV32ZVE32F-NEXT:    vslidedown.vi v16, v8, 5
13522 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v16
13523 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13524 ; RV32ZVE32F-NEXT:    sw a3, 224(sp) # 4-byte Folded Spill
13525 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13526 ; RV32ZVE32F-NEXT:    sw a1, 212(sp) # 4-byte Folded Spill
13527 ; RV32ZVE32F-NEXT:    vslidedown.vi v16, v8, 6
13528 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v16
13529 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13530 ; RV32ZVE32F-NEXT:    sw a3, 204(sp) # 4-byte Folded Spill
13531 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13532 ; RV32ZVE32F-NEXT:    sw a1, 200(sp) # 4-byte Folded Spill
13533 ; RV32ZVE32F-NEXT:    vslidedown.vi v16, v8, 7
13534 ; RV32ZVE32F-NEXT:    vmv.x.s a1, v16
13535 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13536 ; RV32ZVE32F-NEXT:    sw a3, 196(sp) # 4-byte Folded Spill
13537 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13538 ; RV32ZVE32F-NEXT:    sw a1, 192(sp) # 4-byte Folded Spill
13539 ; RV32ZVE32F-NEXT:    addi a1, sp, 256
13540 ; RV32ZVE32F-NEXT:    vsetvli zero, a2, e32, m8, ta, ma
13541 ; RV32ZVE32F-NEXT:    vse32.v v8, (a1)
13542 ; RV32ZVE32F-NEXT:    lw a1, 288(sp)
13543 ; RV32ZVE32F-NEXT:    lw a2, 292(sp)
13544 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13545 ; RV32ZVE32F-NEXT:    sw a3, 188(sp) # 4-byte Folded Spill
13546 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13547 ; RV32ZVE32F-NEXT:    sw a1, 184(sp) # 4-byte Folded Spill
13548 ; RV32ZVE32F-NEXT:    lw a1, 296(sp)
13549 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
13550 ; RV32ZVE32F-NEXT:    sw a3, 180(sp) # 4-byte Folded Spill
13551 ; RV32ZVE32F-NEXT:    lw a2, 4(a2)
13552 ; RV32ZVE32F-NEXT:    sw a2, 176(sp) # 4-byte Folded Spill
13553 ; RV32ZVE32F-NEXT:    lw a2, 300(sp)
13554 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13555 ; RV32ZVE32F-NEXT:    sw a3, 172(sp) # 4-byte Folded Spill
13556 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13557 ; RV32ZVE32F-NEXT:    sw a1, 168(sp) # 4-byte Folded Spill
13558 ; RV32ZVE32F-NEXT:    lw a1, 304(sp)
13559 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
13560 ; RV32ZVE32F-NEXT:    sw a3, 164(sp) # 4-byte Folded Spill
13561 ; RV32ZVE32F-NEXT:    lw a2, 4(a2)
13562 ; RV32ZVE32F-NEXT:    sw a2, 160(sp) # 4-byte Folded Spill
13563 ; RV32ZVE32F-NEXT:    lw a2, 308(sp)
13564 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13565 ; RV32ZVE32F-NEXT:    sw a3, 156(sp) # 4-byte Folded Spill
13566 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13567 ; RV32ZVE32F-NEXT:    sw a1, 152(sp) # 4-byte Folded Spill
13568 ; RV32ZVE32F-NEXT:    lw a1, 312(sp)
13569 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
13570 ; RV32ZVE32F-NEXT:    sw a3, 148(sp) # 4-byte Folded Spill
13571 ; RV32ZVE32F-NEXT:    lw a2, 4(a2)
13572 ; RV32ZVE32F-NEXT:    sw a2, 144(sp) # 4-byte Folded Spill
13573 ; RV32ZVE32F-NEXT:    lw a2, 316(sp)
13574 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13575 ; RV32ZVE32F-NEXT:    sw a3, 140(sp) # 4-byte Folded Spill
13576 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13577 ; RV32ZVE32F-NEXT:    sw a1, 136(sp) # 4-byte Folded Spill
13578 ; RV32ZVE32F-NEXT:    lw a1, 320(sp)
13579 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
13580 ; RV32ZVE32F-NEXT:    sw a3, 132(sp) # 4-byte Folded Spill
13581 ; RV32ZVE32F-NEXT:    lw a2, 4(a2)
13582 ; RV32ZVE32F-NEXT:    sw a2, 128(sp) # 4-byte Folded Spill
13583 ; RV32ZVE32F-NEXT:    lw a2, 324(sp)
13584 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13585 ; RV32ZVE32F-NEXT:    sw a3, 124(sp) # 4-byte Folded Spill
13586 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13587 ; RV32ZVE32F-NEXT:    sw a1, 120(sp) # 4-byte Folded Spill
13588 ; RV32ZVE32F-NEXT:    lw a1, 328(sp)
13589 ; RV32ZVE32F-NEXT:    lw a3, 0(a2)
13590 ; RV32ZVE32F-NEXT:    sw a3, 116(sp) # 4-byte Folded Spill
13591 ; RV32ZVE32F-NEXT:    lw a2, 4(a2)
13592 ; RV32ZVE32F-NEXT:    sw a2, 112(sp) # 4-byte Folded Spill
13593 ; RV32ZVE32F-NEXT:    lw a2, 332(sp)
13594 ; RV32ZVE32F-NEXT:    lw a3, 0(a1)
13595 ; RV32ZVE32F-NEXT:    sw a3, 104(sp) # 4-byte Folded Spill
13596 ; RV32ZVE32F-NEXT:    lw ra, 4(a1)
13597 ; RV32ZVE32F-NEXT:    lw a1, 336(sp)
13598 ; RV32ZVE32F-NEXT:    lw s10, 0(a2)
13599 ; RV32ZVE32F-NEXT:    lw s8, 4(a2)
13600 ; RV32ZVE32F-NEXT:    lw a2, 340(sp)
13601 ; RV32ZVE32F-NEXT:    lw s6, 0(a1)
13602 ; RV32ZVE32F-NEXT:    lw s4, 4(a1)
13603 ; RV32ZVE32F-NEXT:    lw a4, 344(sp)
13604 ; RV32ZVE32F-NEXT:    lw s2, 0(a2)
13605 ; RV32ZVE32F-NEXT:    lw t5, 4(a2)
13606 ; RV32ZVE32F-NEXT:    lw a2, 348(sp)
13607 ; RV32ZVE32F-NEXT:    lw t3, 0(a4)
13608 ; RV32ZVE32F-NEXT:    lw t2, 4(a4)
13609 ; RV32ZVE32F-NEXT:    lw a4, 352(sp)
13610 ; RV32ZVE32F-NEXT:    lw t0, 0(a2)
13611 ; RV32ZVE32F-NEXT:    lw a7, 4(a2)
13612 ; RV32ZVE32F-NEXT:    lw a2, 356(sp)
13613 ; RV32ZVE32F-NEXT:    lw a6, 0(a4)
13614 ; RV32ZVE32F-NEXT:    lw a5, 4(a4)
13615 ; RV32ZVE32F-NEXT:    lw a4, 360(sp)
13616 ; RV32ZVE32F-NEXT:    lw a1, 0(a2)
13617 ; RV32ZVE32F-NEXT:    sw a1, 108(sp) # 4-byte Folded Spill
13618 ; RV32ZVE32F-NEXT:    lw a1, 4(a2)
13619 ; RV32ZVE32F-NEXT:    sw a1, 100(sp) # 4-byte Folded Spill
13620 ; RV32ZVE32F-NEXT:    lw a2, 364(sp)
13621 ; RV32ZVE32F-NEXT:    lw s11, 0(a4)
13622 ; RV32ZVE32F-NEXT:    lw s9, 4(a4)
13623 ; RV32ZVE32F-NEXT:    lw a1, 368(sp)
13624 ; RV32ZVE32F-NEXT:    lw s7, 0(a2)
13625 ; RV32ZVE32F-NEXT:    lw s5, 4(a2)
13626 ; RV32ZVE32F-NEXT:    lw a3, 372(sp)
13627 ; RV32ZVE32F-NEXT:    lw s3, 0(a1)
13628 ; RV32ZVE32F-NEXT:    lw t6, 4(a1)
13629 ; RV32ZVE32F-NEXT:    lw a2, 376(sp)
13630 ; RV32ZVE32F-NEXT:    lw t4, 0(a3)
13631 ; RV32ZVE32F-NEXT:    lw a1, 380(sp)
13632 ; RV32ZVE32F-NEXT:    lw t1, 4(a3)
13633 ; RV32ZVE32F-NEXT:    lw a4, 0(a2)
13634 ; RV32ZVE32F-NEXT:    lw a3, 4(a2)
13635 ; RV32ZVE32F-NEXT:    lw a2, 0(a1)
13636 ; RV32ZVE32F-NEXT:    lw a1, 4(a1)
13637 ; RV32ZVE32F-NEXT:    sw a5, 196(a0)
13638 ; RV32ZVE32F-NEXT:    sw a6, 192(a0)
13639 ; RV32ZVE32F-NEXT:    sw a7, 188(a0)
13640 ; RV32ZVE32F-NEXT:    sw t0, 184(a0)
13641 ; RV32ZVE32F-NEXT:    sw t2, 180(a0)
13642 ; RV32ZVE32F-NEXT:    sw t3, 176(a0)
13643 ; RV32ZVE32F-NEXT:    sw t5, 172(a0)
13644 ; RV32ZVE32F-NEXT:    sw s2, 168(a0)
13645 ; RV32ZVE32F-NEXT:    sw s4, 164(a0)
13646 ; RV32ZVE32F-NEXT:    sw s6, 160(a0)
13647 ; RV32ZVE32F-NEXT:    sw s8, 156(a0)
13648 ; RV32ZVE32F-NEXT:    sw s10, 152(a0)
13649 ; RV32ZVE32F-NEXT:    sw ra, 148(a0)
13650 ; RV32ZVE32F-NEXT:    lw a5, 104(sp) # 4-byte Folded Reload
13651 ; RV32ZVE32F-NEXT:    sw a5, 144(a0)
13652 ; RV32ZVE32F-NEXT:    lw a5, 112(sp) # 4-byte Folded Reload
13653 ; RV32ZVE32F-NEXT:    sw a5, 140(a0)
13654 ; RV32ZVE32F-NEXT:    lw a5, 116(sp) # 4-byte Folded Reload
13655 ; RV32ZVE32F-NEXT:    sw a5, 136(a0)
13656 ; RV32ZVE32F-NEXT:    lw a5, 120(sp) # 4-byte Folded Reload
13657 ; RV32ZVE32F-NEXT:    sw a5, 132(a0)
13658 ; RV32ZVE32F-NEXT:    lw a5, 124(sp) # 4-byte Folded Reload
13659 ; RV32ZVE32F-NEXT:    sw a5, 128(a0)
13660 ; RV32ZVE32F-NEXT:    lw a5, 128(sp) # 4-byte Folded Reload
13661 ; RV32ZVE32F-NEXT:    sw a5, 124(a0)
13662 ; RV32ZVE32F-NEXT:    lw a5, 132(sp) # 4-byte Folded Reload
13663 ; RV32ZVE32F-NEXT:    sw a5, 120(a0)
13664 ; RV32ZVE32F-NEXT:    lw a5, 136(sp) # 4-byte Folded Reload
13665 ; RV32ZVE32F-NEXT:    sw a5, 116(a0)
13666 ; RV32ZVE32F-NEXT:    lw a5, 140(sp) # 4-byte Folded Reload
13667 ; RV32ZVE32F-NEXT:    sw a5, 112(a0)
13668 ; RV32ZVE32F-NEXT:    lw a5, 144(sp) # 4-byte Folded Reload
13669 ; RV32ZVE32F-NEXT:    sw a5, 108(a0)
13670 ; RV32ZVE32F-NEXT:    lw a5, 148(sp) # 4-byte Folded Reload
13671 ; RV32ZVE32F-NEXT:    sw a5, 104(a0)
13672 ; RV32ZVE32F-NEXT:    lw a5, 152(sp) # 4-byte Folded Reload
13673 ; RV32ZVE32F-NEXT:    sw a5, 100(a0)
13674 ; RV32ZVE32F-NEXT:    lw a5, 156(sp) # 4-byte Folded Reload
13675 ; RV32ZVE32F-NEXT:    sw a5, 96(a0)
13676 ; RV32ZVE32F-NEXT:    lw a5, 160(sp) # 4-byte Folded Reload
13677 ; RV32ZVE32F-NEXT:    sw a5, 92(a0)
13678 ; RV32ZVE32F-NEXT:    lw a5, 164(sp) # 4-byte Folded Reload
13679 ; RV32ZVE32F-NEXT:    sw a5, 88(a0)
13680 ; RV32ZVE32F-NEXT:    lw a5, 168(sp) # 4-byte Folded Reload
13681 ; RV32ZVE32F-NEXT:    sw a5, 84(a0)
13682 ; RV32ZVE32F-NEXT:    lw a5, 172(sp) # 4-byte Folded Reload
13683 ; RV32ZVE32F-NEXT:    sw a5, 80(a0)
13684 ; RV32ZVE32F-NEXT:    lw a5, 176(sp) # 4-byte Folded Reload
13685 ; RV32ZVE32F-NEXT:    sw a5, 76(a0)
13686 ; RV32ZVE32F-NEXT:    lw a5, 180(sp) # 4-byte Folded Reload
13687 ; RV32ZVE32F-NEXT:    sw a5, 72(a0)
13688 ; RV32ZVE32F-NEXT:    lw a5, 184(sp) # 4-byte Folded Reload
13689 ; RV32ZVE32F-NEXT:    sw a5, 68(a0)
13690 ; RV32ZVE32F-NEXT:    lw a5, 188(sp) # 4-byte Folded Reload
13691 ; RV32ZVE32F-NEXT:    sw a5, 64(a0)
13692 ; RV32ZVE32F-NEXT:    lw a5, 208(sp) # 4-byte Folded Reload
13693 ; RV32ZVE32F-NEXT:    sw a5, 4(a0)
13694 ; RV32ZVE32F-NEXT:    lw a5, 216(sp) # 4-byte Folded Reload
13695 ; RV32ZVE32F-NEXT:    sw a5, 0(a0)
13696 ; RV32ZVE32F-NEXT:    sw a1, 252(a0)
13697 ; RV32ZVE32F-NEXT:    sw a2, 248(a0)
13698 ; RV32ZVE32F-NEXT:    sw a3, 244(a0)
13699 ; RV32ZVE32F-NEXT:    sw a4, 240(a0)
13700 ; RV32ZVE32F-NEXT:    sw t1, 236(a0)
13701 ; RV32ZVE32F-NEXT:    sw t4, 232(a0)
13702 ; RV32ZVE32F-NEXT:    sw t6, 228(a0)
13703 ; RV32ZVE32F-NEXT:    sw s3, 224(a0)
13704 ; RV32ZVE32F-NEXT:    sw s5, 220(a0)
13705 ; RV32ZVE32F-NEXT:    sw s7, 216(a0)
13706 ; RV32ZVE32F-NEXT:    sw s9, 212(a0)
13707 ; RV32ZVE32F-NEXT:    sw s11, 208(a0)
13708 ; RV32ZVE32F-NEXT:    lw a1, 100(sp) # 4-byte Folded Reload
13709 ; RV32ZVE32F-NEXT:    sw a1, 204(a0)
13710 ; RV32ZVE32F-NEXT:    lw a1, 108(sp) # 4-byte Folded Reload
13711 ; RV32ZVE32F-NEXT:    sw a1, 200(a0)
13712 ; RV32ZVE32F-NEXT:    lw a1, 220(sp) # 4-byte Folded Reload
13713 ; RV32ZVE32F-NEXT:    sw a1, 28(a0)
13714 ; RV32ZVE32F-NEXT:    lw a1, 228(sp) # 4-byte Folded Reload
13715 ; RV32ZVE32F-NEXT:    sw a1, 24(a0)
13716 ; RV32ZVE32F-NEXT:    lw a1, 236(sp) # 4-byte Folded Reload
13717 ; RV32ZVE32F-NEXT:    sw a1, 20(a0)
13718 ; RV32ZVE32F-NEXT:    lw a1, 244(sp) # 4-byte Folded Reload
13719 ; RV32ZVE32F-NEXT:    sw a1, 16(a0)
13720 ; RV32ZVE32F-NEXT:    lw a1, 248(sp) # 4-byte Folded Reload
13721 ; RV32ZVE32F-NEXT:    sw a1, 12(a0)
13722 ; RV32ZVE32F-NEXT:    lw a1, 252(sp) # 4-byte Folded Reload
13723 ; RV32ZVE32F-NEXT:    sw a1, 8(a0)
13724 ; RV32ZVE32F-NEXT:    lw a1, 192(sp) # 4-byte Folded Reload
13725 ; RV32ZVE32F-NEXT:    sw a1, 60(a0)
13726 ; RV32ZVE32F-NEXT:    lw a1, 196(sp) # 4-byte Folded Reload
13727 ; RV32ZVE32F-NEXT:    sw a1, 56(a0)
13728 ; RV32ZVE32F-NEXT:    lw a1, 200(sp) # 4-byte Folded Reload
13729 ; RV32ZVE32F-NEXT:    sw a1, 52(a0)
13730 ; RV32ZVE32F-NEXT:    lw a1, 204(sp) # 4-byte Folded Reload
13731 ; RV32ZVE32F-NEXT:    sw a1, 48(a0)
13732 ; RV32ZVE32F-NEXT:    lw a1, 212(sp) # 4-byte Folded Reload
13733 ; RV32ZVE32F-NEXT:    sw a1, 44(a0)
13734 ; RV32ZVE32F-NEXT:    lw a1, 224(sp) # 4-byte Folded Reload
13735 ; RV32ZVE32F-NEXT:    sw a1, 40(a0)
13736 ; RV32ZVE32F-NEXT:    lw a1, 232(sp) # 4-byte Folded Reload
13737 ; RV32ZVE32F-NEXT:    sw a1, 36(a0)
13738 ; RV32ZVE32F-NEXT:    lw a1, 240(sp) # 4-byte Folded Reload
13739 ; RV32ZVE32F-NEXT:    sw a1, 32(a0)
13740 ; RV32ZVE32F-NEXT:    addi sp, s0, -512
13741 ; RV32ZVE32F-NEXT:    lw ra, 508(sp) # 4-byte Folded Reload
13742 ; RV32ZVE32F-NEXT:    lw s0, 504(sp) # 4-byte Folded Reload
13743 ; RV32ZVE32F-NEXT:    lw s2, 500(sp) # 4-byte Folded Reload
13744 ; RV32ZVE32F-NEXT:    lw s3, 496(sp) # 4-byte Folded Reload
13745 ; RV32ZVE32F-NEXT:    lw s4, 492(sp) # 4-byte Folded Reload
13746 ; RV32ZVE32F-NEXT:    lw s5, 488(sp) # 4-byte Folded Reload
13747 ; RV32ZVE32F-NEXT:    lw s6, 484(sp) # 4-byte Folded Reload
13748 ; RV32ZVE32F-NEXT:    lw s7, 480(sp) # 4-byte Folded Reload
13749 ; RV32ZVE32F-NEXT:    lw s8, 476(sp) # 4-byte Folded Reload
13750 ; RV32ZVE32F-NEXT:    lw s9, 472(sp) # 4-byte Folded Reload
13751 ; RV32ZVE32F-NEXT:    lw s10, 468(sp) # 4-byte Folded Reload
13752 ; RV32ZVE32F-NEXT:    lw s11, 464(sp) # 4-byte Folded Reload
13753 ; RV32ZVE32F-NEXT:    addi sp, sp, 512
13754 ; RV32ZVE32F-NEXT:    ret
13756 ; RV64ZVE32F-LABEL: mgather_strided_split:
13757 ; RV64ZVE32F:       # %bb.0:
13758 ; RV64ZVE32F-NEXT:    addi sp, sp, -144
13759 ; RV64ZVE32F-NEXT:    .cfi_def_cfa_offset 144
13760 ; RV64ZVE32F-NEXT:    sd ra, 136(sp) # 8-byte Folded Spill
13761 ; RV64ZVE32F-NEXT:    sd s0, 128(sp) # 8-byte Folded Spill
13762 ; RV64ZVE32F-NEXT:    sd s1, 120(sp) # 8-byte Folded Spill
13763 ; RV64ZVE32F-NEXT:    sd s2, 112(sp) # 8-byte Folded Spill
13764 ; RV64ZVE32F-NEXT:    sd s3, 104(sp) # 8-byte Folded Spill
13765 ; RV64ZVE32F-NEXT:    sd s4, 96(sp) # 8-byte Folded Spill
13766 ; RV64ZVE32F-NEXT:    sd s5, 88(sp) # 8-byte Folded Spill
13767 ; RV64ZVE32F-NEXT:    sd s6, 80(sp) # 8-byte Folded Spill
13768 ; RV64ZVE32F-NEXT:    sd s7, 72(sp) # 8-byte Folded Spill
13769 ; RV64ZVE32F-NEXT:    sd s8, 64(sp) # 8-byte Folded Spill
13770 ; RV64ZVE32F-NEXT:    sd s9, 56(sp) # 8-byte Folded Spill
13771 ; RV64ZVE32F-NEXT:    sd s10, 48(sp) # 8-byte Folded Spill
13772 ; RV64ZVE32F-NEXT:    sd s11, 40(sp) # 8-byte Folded Spill
13773 ; RV64ZVE32F-NEXT:    .cfi_offset ra, -8
13774 ; RV64ZVE32F-NEXT:    .cfi_offset s0, -16
13775 ; RV64ZVE32F-NEXT:    .cfi_offset s1, -24
13776 ; RV64ZVE32F-NEXT:    .cfi_offset s2, -32
13777 ; RV64ZVE32F-NEXT:    .cfi_offset s3, -40
13778 ; RV64ZVE32F-NEXT:    .cfi_offset s4, -48
13779 ; RV64ZVE32F-NEXT:    .cfi_offset s5, -56
13780 ; RV64ZVE32F-NEXT:    .cfi_offset s6, -64
13781 ; RV64ZVE32F-NEXT:    .cfi_offset s7, -72
13782 ; RV64ZVE32F-NEXT:    .cfi_offset s8, -80
13783 ; RV64ZVE32F-NEXT:    .cfi_offset s9, -88
13784 ; RV64ZVE32F-NEXT:    .cfi_offset s10, -96
13785 ; RV64ZVE32F-NEXT:    .cfi_offset s11, -104
13786 ; RV64ZVE32F-NEXT:    ld a2, 0(a1)
13787 ; RV64ZVE32F-NEXT:    sd a2, 32(sp) # 8-byte Folded Spill
13788 ; RV64ZVE32F-NEXT:    ld a2, 16(a1)
13789 ; RV64ZVE32F-NEXT:    sd a2, 24(sp) # 8-byte Folded Spill
13790 ; RV64ZVE32F-NEXT:    ld a2, 32(a1)
13791 ; RV64ZVE32F-NEXT:    sd a2, 16(sp) # 8-byte Folded Spill
13792 ; RV64ZVE32F-NEXT:    ld a2, 48(a1)
13793 ; RV64ZVE32F-NEXT:    sd a2, 8(sp) # 8-byte Folded Spill
13794 ; RV64ZVE32F-NEXT:    ld a2, 64(a1)
13795 ; RV64ZVE32F-NEXT:    sd a2, 0(sp) # 8-byte Folded Spill
13796 ; RV64ZVE32F-NEXT:    ld a7, 80(a1)
13797 ; RV64ZVE32F-NEXT:    ld t0, 96(a1)
13798 ; RV64ZVE32F-NEXT:    ld t1, 112(a1)
13799 ; RV64ZVE32F-NEXT:    ld t2, 128(a1)
13800 ; RV64ZVE32F-NEXT:    ld t3, 144(a1)
13801 ; RV64ZVE32F-NEXT:    ld t4, 160(a1)
13802 ; RV64ZVE32F-NEXT:    ld t5, 176(a1)
13803 ; RV64ZVE32F-NEXT:    ld t6, 192(a1)
13804 ; RV64ZVE32F-NEXT:    ld s0, 208(a1)
13805 ; RV64ZVE32F-NEXT:    ld s1, 224(a1)
13806 ; RV64ZVE32F-NEXT:    ld s2, 240(a1)
13807 ; RV64ZVE32F-NEXT:    ld s3, 256(a1)
13808 ; RV64ZVE32F-NEXT:    ld s4, 272(a1)
13809 ; RV64ZVE32F-NEXT:    ld s5, 288(a1)
13810 ; RV64ZVE32F-NEXT:    ld s6, 304(a1)
13811 ; RV64ZVE32F-NEXT:    ld s7, 320(a1)
13812 ; RV64ZVE32F-NEXT:    ld s8, 336(a1)
13813 ; RV64ZVE32F-NEXT:    ld s9, 352(a1)
13814 ; RV64ZVE32F-NEXT:    ld s10, 368(a1)
13815 ; RV64ZVE32F-NEXT:    ld s11, 384(a1)
13816 ; RV64ZVE32F-NEXT:    ld ra, 400(a1)
13817 ; RV64ZVE32F-NEXT:    ld a6, 416(a1)
13818 ; RV64ZVE32F-NEXT:    ld a5, 432(a1)
13819 ; RV64ZVE32F-NEXT:    ld a2, 496(a1)
13820 ; RV64ZVE32F-NEXT:    ld a3, 480(a1)
13821 ; RV64ZVE32F-NEXT:    ld a4, 464(a1)
13822 ; RV64ZVE32F-NEXT:    ld a1, 448(a1)
13823 ; RV64ZVE32F-NEXT:    sd a2, 248(a0)
13824 ; RV64ZVE32F-NEXT:    sd a3, 240(a0)
13825 ; RV64ZVE32F-NEXT:    sd a4, 232(a0)
13826 ; RV64ZVE32F-NEXT:    sd a1, 224(a0)
13827 ; RV64ZVE32F-NEXT:    sd a5, 216(a0)
13828 ; RV64ZVE32F-NEXT:    sd a6, 208(a0)
13829 ; RV64ZVE32F-NEXT:    sd ra, 200(a0)
13830 ; RV64ZVE32F-NEXT:    sd s11, 192(a0)
13831 ; RV64ZVE32F-NEXT:    sd s10, 184(a0)
13832 ; RV64ZVE32F-NEXT:    sd s9, 176(a0)
13833 ; RV64ZVE32F-NEXT:    sd s8, 168(a0)
13834 ; RV64ZVE32F-NEXT:    sd s7, 160(a0)
13835 ; RV64ZVE32F-NEXT:    sd s6, 152(a0)
13836 ; RV64ZVE32F-NEXT:    sd s5, 144(a0)
13837 ; RV64ZVE32F-NEXT:    sd s4, 136(a0)
13838 ; RV64ZVE32F-NEXT:    sd s3, 128(a0)
13839 ; RV64ZVE32F-NEXT:    sd s2, 120(a0)
13840 ; RV64ZVE32F-NEXT:    sd s1, 112(a0)
13841 ; RV64ZVE32F-NEXT:    sd s0, 104(a0)
13842 ; RV64ZVE32F-NEXT:    sd t6, 96(a0)
13843 ; RV64ZVE32F-NEXT:    sd t5, 88(a0)
13844 ; RV64ZVE32F-NEXT:    sd t4, 80(a0)
13845 ; RV64ZVE32F-NEXT:    sd t3, 72(a0)
13846 ; RV64ZVE32F-NEXT:    sd t2, 64(a0)
13847 ; RV64ZVE32F-NEXT:    sd t1, 56(a0)
13848 ; RV64ZVE32F-NEXT:    sd t0, 48(a0)
13849 ; RV64ZVE32F-NEXT:    sd a7, 40(a0)
13850 ; RV64ZVE32F-NEXT:    ld a1, 0(sp) # 8-byte Folded Reload
13851 ; RV64ZVE32F-NEXT:    sd a1, 32(a0)
13852 ; RV64ZVE32F-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
13853 ; RV64ZVE32F-NEXT:    sd a1, 24(a0)
13854 ; RV64ZVE32F-NEXT:    ld a1, 16(sp) # 8-byte Folded Reload
13855 ; RV64ZVE32F-NEXT:    sd a1, 16(a0)
13856 ; RV64ZVE32F-NEXT:    ld a1, 24(sp) # 8-byte Folded Reload
13857 ; RV64ZVE32F-NEXT:    sd a1, 8(a0)
13858 ; RV64ZVE32F-NEXT:    ld a1, 32(sp) # 8-byte Folded Reload
13859 ; RV64ZVE32F-NEXT:    sd a1, 0(a0)
13860 ; RV64ZVE32F-NEXT:    ld ra, 136(sp) # 8-byte Folded Reload
13861 ; RV64ZVE32F-NEXT:    ld s0, 128(sp) # 8-byte Folded Reload
13862 ; RV64ZVE32F-NEXT:    ld s1, 120(sp) # 8-byte Folded Reload
13863 ; RV64ZVE32F-NEXT:    ld s2, 112(sp) # 8-byte Folded Reload
13864 ; RV64ZVE32F-NEXT:    ld s3, 104(sp) # 8-byte Folded Reload
13865 ; RV64ZVE32F-NEXT:    ld s4, 96(sp) # 8-byte Folded Reload
13866 ; RV64ZVE32F-NEXT:    ld s5, 88(sp) # 8-byte Folded Reload
13867 ; RV64ZVE32F-NEXT:    ld s6, 80(sp) # 8-byte Folded Reload
13868 ; RV64ZVE32F-NEXT:    ld s7, 72(sp) # 8-byte Folded Reload
13869 ; RV64ZVE32F-NEXT:    ld s8, 64(sp) # 8-byte Folded Reload
13870 ; RV64ZVE32F-NEXT:    ld s9, 56(sp) # 8-byte Folded Reload
13871 ; RV64ZVE32F-NEXT:    ld s10, 48(sp) # 8-byte Folded Reload
13872 ; RV64ZVE32F-NEXT:    ld s11, 40(sp) # 8-byte Folded Reload
13873 ; RV64ZVE32F-NEXT:    addi sp, sp, 144
13874 ; RV64ZVE32F-NEXT:    ret
13875   %ptrs = getelementptr inbounds i64, ptr %base, <32 x i64> <i64 0, i64 2, i64 4, i64 6, i64 8, i64 10, i64 12, i64 14, i64 16, i64 18, i64 20, i64 22, i64 24, i64 26, i64 28, i64 30, i64 32, i64 34, i64 36, i64 38, i64 40, i64 42, i64 44, i64 46, i64 48, i64 50, i64 52, i64 54, i64 56, i64 58, i64 60, i64 62>
13876   %x = call <32 x i64> @llvm.masked.gather.v32i64.v32p0(<32 x ptr> %ptrs, i32 8, <32 x i1> splat (i1 true), <32 x i64> poison)
13877   ret <32 x i64> %x
13880 define <4 x i32> @masked_gather_widen_sew_negative_stride(ptr %base) {
13881 ; RV32V-LABEL: masked_gather_widen_sew_negative_stride:
13882 ; RV32V:       # %bb.0:
13883 ; RV32V-NEXT:    addi a0, a0, 136
13884 ; RV32V-NEXT:    li a1, -136
13885 ; RV32V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
13886 ; RV32V-NEXT:    vlse64.v v8, (a0), a1
13887 ; RV32V-NEXT:    ret
13889 ; RV64V-LABEL: masked_gather_widen_sew_negative_stride:
13890 ; RV64V:       # %bb.0:
13891 ; RV64V-NEXT:    addi a0, a0, 136
13892 ; RV64V-NEXT:    li a1, -136
13893 ; RV64V-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
13894 ; RV64V-NEXT:    vlse64.v v8, (a0), a1
13895 ; RV64V-NEXT:    ret
13897 ; RV32ZVE32F-LABEL: masked_gather_widen_sew_negative_stride:
13898 ; RV32ZVE32F:       # %bb.0:
13899 ; RV32ZVE32F-NEXT:    lui a1, 16393
13900 ; RV32ZVE32F-NEXT:    addi a1, a1, -888
13901 ; RV32ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13902 ; RV32ZVE32F-NEXT:    vmv.s.x v9, a1
13903 ; RV32ZVE32F-NEXT:    vluxei8.v v8, (a0), v9
13904 ; RV32ZVE32F-NEXT:    ret
13906 ; RV64ZVE32F-LABEL: masked_gather_widen_sew_negative_stride:
13907 ; RV64ZVE32F:       # %bb.0:
13908 ; RV64ZVE32F-NEXT:    lw a1, 136(a0)
13909 ; RV64ZVE32F-NEXT:    lw a2, 140(a0)
13910 ; RV64ZVE32F-NEXT:    lw a3, 0(a0)
13911 ; RV64ZVE32F-NEXT:    lw a0, 4(a0)
13912 ; RV64ZVE32F-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
13913 ; RV64ZVE32F-NEXT:    vmv.v.x v8, a1
13914 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a2
13915 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a3
13916 ; RV64ZVE32F-NEXT:    vslide1down.vx v8, v8, a0
13917 ; RV64ZVE32F-NEXT:    ret
13918   %ptrs = getelementptr i32, ptr %base, <4 x i64> <i64 34, i64 35, i64 0, i64 1>
13919   %x = call <4 x i32> @llvm.masked.gather.v4i32.v32p0(<4 x ptr> %ptrs, i32 8, <4 x i1> splat (i1 true), <4 x i32> poison)
13920   ret <4 x i32> %x
13923 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
13924 ; RV64: {{.*}}