1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=ilp32d \
3 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v,+m -target-abi=lp64d \
5 ; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <2 x i8> @llvm.vp.bitreverse.v2i8(<2 x i8>, <2 x i1>, i32)
9 define <2 x i8> @vp_bitreverse_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vp_bitreverse_v2i8:
12 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
13 ; CHECK-NEXT: vand.vi v9, v8, 15, v0.t
14 ; CHECK-NEXT: vsll.vi v9, v9, 4, v0.t
15 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
16 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
17 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
18 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
19 ; CHECK-NEXT: li a0, 51
20 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
21 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
22 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
23 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
24 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
25 ; CHECK-NEXT: li a0, 85
26 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
27 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
28 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
29 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
31 %v = call <2 x i8> @llvm.vp.bitreverse.v2i8(<2 x i8> %va, <2 x i1> %m, i32 %evl)
35 define <2 x i8> @vp_bitreverse_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
36 ; CHECK-LABEL: vp_bitreverse_v2i8_unmasked:
38 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT: vand.vi v9, v8, 15
40 ; CHECK-NEXT: vsll.vi v9, v9, 4
41 ; CHECK-NEXT: vsrl.vi v8, v8, 4
42 ; CHECK-NEXT: vand.vi v8, v8, 15
43 ; CHECK-NEXT: vor.vv v8, v8, v9
44 ; CHECK-NEXT: vsrl.vi v9, v8, 2
45 ; CHECK-NEXT: li a0, 51
46 ; CHECK-NEXT: vand.vx v9, v9, a0
47 ; CHECK-NEXT: vand.vx v8, v8, a0
48 ; CHECK-NEXT: vsll.vi v8, v8, 2
49 ; CHECK-NEXT: vor.vv v8, v9, v8
50 ; CHECK-NEXT: vsrl.vi v9, v8, 1
51 ; CHECK-NEXT: li a0, 85
52 ; CHECK-NEXT: vand.vx v9, v9, a0
53 ; CHECK-NEXT: vand.vx v8, v8, a0
54 ; CHECK-NEXT: vadd.vv v8, v8, v8
55 ; CHECK-NEXT: vor.vv v8, v9, v8
57 %v = call <2 x i8> @llvm.vp.bitreverse.v2i8(<2 x i8> %va, <2 x i1> splat (i1 true), i32 %evl)
61 declare <4 x i8> @llvm.vp.bitreverse.v4i8(<4 x i8>, <4 x i1>, i32)
63 define <4 x i8> @vp_bitreverse_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
64 ; CHECK-LABEL: vp_bitreverse_v4i8:
66 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
67 ; CHECK-NEXT: vand.vi v9, v8, 15, v0.t
68 ; CHECK-NEXT: vsll.vi v9, v9, 4, v0.t
69 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
70 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
71 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
72 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
73 ; CHECK-NEXT: li a0, 51
74 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
75 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
76 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
77 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
78 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
79 ; CHECK-NEXT: li a0, 85
80 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
81 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
82 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
83 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
85 %v = call <4 x i8> @llvm.vp.bitreverse.v4i8(<4 x i8> %va, <4 x i1> %m, i32 %evl)
89 define <4 x i8> @vp_bitreverse_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
90 ; CHECK-LABEL: vp_bitreverse_v4i8_unmasked:
92 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
93 ; CHECK-NEXT: vand.vi v9, v8, 15
94 ; CHECK-NEXT: vsll.vi v9, v9, 4
95 ; CHECK-NEXT: vsrl.vi v8, v8, 4
96 ; CHECK-NEXT: vand.vi v8, v8, 15
97 ; CHECK-NEXT: vor.vv v8, v8, v9
98 ; CHECK-NEXT: vsrl.vi v9, v8, 2
99 ; CHECK-NEXT: li a0, 51
100 ; CHECK-NEXT: vand.vx v9, v9, a0
101 ; CHECK-NEXT: vand.vx v8, v8, a0
102 ; CHECK-NEXT: vsll.vi v8, v8, 2
103 ; CHECK-NEXT: vor.vv v8, v9, v8
104 ; CHECK-NEXT: vsrl.vi v9, v8, 1
105 ; CHECK-NEXT: li a0, 85
106 ; CHECK-NEXT: vand.vx v9, v9, a0
107 ; CHECK-NEXT: vand.vx v8, v8, a0
108 ; CHECK-NEXT: vadd.vv v8, v8, v8
109 ; CHECK-NEXT: vor.vv v8, v9, v8
111 %v = call <4 x i8> @llvm.vp.bitreverse.v4i8(<4 x i8> %va, <4 x i1> splat (i1 true), i32 %evl)
115 declare <8 x i8> @llvm.vp.bitreverse.v8i8(<8 x i8>, <8 x i1>, i32)
117 define <8 x i8> @vp_bitreverse_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
118 ; CHECK-LABEL: vp_bitreverse_v8i8:
120 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
121 ; CHECK-NEXT: vand.vi v9, v8, 15, v0.t
122 ; CHECK-NEXT: vsll.vi v9, v9, 4, v0.t
123 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
124 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
125 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
126 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
127 ; CHECK-NEXT: li a0, 51
128 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
129 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
130 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
131 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
132 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
133 ; CHECK-NEXT: li a0, 85
134 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
135 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
136 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
137 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
139 %v = call <8 x i8> @llvm.vp.bitreverse.v8i8(<8 x i8> %va, <8 x i1> %m, i32 %evl)
143 define <8 x i8> @vp_bitreverse_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
144 ; CHECK-LABEL: vp_bitreverse_v8i8_unmasked:
146 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
147 ; CHECK-NEXT: vand.vi v9, v8, 15
148 ; CHECK-NEXT: vsll.vi v9, v9, 4
149 ; CHECK-NEXT: vsrl.vi v8, v8, 4
150 ; CHECK-NEXT: vand.vi v8, v8, 15
151 ; CHECK-NEXT: vor.vv v8, v8, v9
152 ; CHECK-NEXT: vsrl.vi v9, v8, 2
153 ; CHECK-NEXT: li a0, 51
154 ; CHECK-NEXT: vand.vx v9, v9, a0
155 ; CHECK-NEXT: vand.vx v8, v8, a0
156 ; CHECK-NEXT: vsll.vi v8, v8, 2
157 ; CHECK-NEXT: vor.vv v8, v9, v8
158 ; CHECK-NEXT: vsrl.vi v9, v8, 1
159 ; CHECK-NEXT: li a0, 85
160 ; CHECK-NEXT: vand.vx v9, v9, a0
161 ; CHECK-NEXT: vand.vx v8, v8, a0
162 ; CHECK-NEXT: vadd.vv v8, v8, v8
163 ; CHECK-NEXT: vor.vv v8, v9, v8
165 %v = call <8 x i8> @llvm.vp.bitreverse.v8i8(<8 x i8> %va, <8 x i1> splat (i1 true), i32 %evl)
169 declare <16 x i8> @llvm.vp.bitreverse.v16i8(<16 x i8>, <16 x i1>, i32)
171 define <16 x i8> @vp_bitreverse_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
172 ; CHECK-LABEL: vp_bitreverse_v16i8:
174 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
175 ; CHECK-NEXT: vand.vi v9, v8, 15, v0.t
176 ; CHECK-NEXT: vsll.vi v9, v9, 4, v0.t
177 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
178 ; CHECK-NEXT: vand.vi v8, v8, 15, v0.t
179 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
180 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
181 ; CHECK-NEXT: li a0, 51
182 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
183 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
184 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
185 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
186 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
187 ; CHECK-NEXT: li a0, 85
188 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
189 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
190 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
191 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
193 %v = call <16 x i8> @llvm.vp.bitreverse.v16i8(<16 x i8> %va, <16 x i1> %m, i32 %evl)
197 define <16 x i8> @vp_bitreverse_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
198 ; CHECK-LABEL: vp_bitreverse_v16i8_unmasked:
200 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
201 ; CHECK-NEXT: vand.vi v9, v8, 15
202 ; CHECK-NEXT: vsll.vi v9, v9, 4
203 ; CHECK-NEXT: vsrl.vi v8, v8, 4
204 ; CHECK-NEXT: vand.vi v8, v8, 15
205 ; CHECK-NEXT: vor.vv v8, v8, v9
206 ; CHECK-NEXT: vsrl.vi v9, v8, 2
207 ; CHECK-NEXT: li a0, 51
208 ; CHECK-NEXT: vand.vx v9, v9, a0
209 ; CHECK-NEXT: vand.vx v8, v8, a0
210 ; CHECK-NEXT: vsll.vi v8, v8, 2
211 ; CHECK-NEXT: vor.vv v8, v9, v8
212 ; CHECK-NEXT: vsrl.vi v9, v8, 1
213 ; CHECK-NEXT: li a0, 85
214 ; CHECK-NEXT: vand.vx v9, v9, a0
215 ; CHECK-NEXT: vand.vx v8, v8, a0
216 ; CHECK-NEXT: vadd.vv v8, v8, v8
217 ; CHECK-NEXT: vor.vv v8, v9, v8
219 %v = call <16 x i8> @llvm.vp.bitreverse.v16i8(<16 x i8> %va, <16 x i1> splat (i1 true), i32 %evl)
223 declare <2 x i16> @llvm.vp.bitreverse.v2i16(<2 x i16>, <2 x i1>, i32)
225 define <2 x i16> @vp_bitreverse_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
226 ; CHECK-LABEL: vp_bitreverse_v2i16:
228 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
229 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
230 ; CHECK-NEXT: vsll.vi v8, v8, 8, v0.t
231 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
232 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
233 ; CHECK-NEXT: lui a0, 1
234 ; CHECK-NEXT: addi a0, a0, -241
235 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
236 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
237 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
238 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
239 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
240 ; CHECK-NEXT: lui a0, 3
241 ; CHECK-NEXT: addi a0, a0, 819
242 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
243 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
244 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
245 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
246 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
247 ; CHECK-NEXT: lui a0, 5
248 ; CHECK-NEXT: addi a0, a0, 1365
249 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
250 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
251 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
252 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
254 %v = call <2 x i16> @llvm.vp.bitreverse.v2i16(<2 x i16> %va, <2 x i1> %m, i32 %evl)
258 define <2 x i16> @vp_bitreverse_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
259 ; CHECK-LABEL: vp_bitreverse_v2i16_unmasked:
261 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
262 ; CHECK-NEXT: vsrl.vi v9, v8, 8
263 ; CHECK-NEXT: vsll.vi v8, v8, 8
264 ; CHECK-NEXT: vor.vv v8, v8, v9
265 ; CHECK-NEXT: vsrl.vi v9, v8, 4
266 ; CHECK-NEXT: lui a0, 1
267 ; CHECK-NEXT: addi a0, a0, -241
268 ; CHECK-NEXT: vand.vx v9, v9, a0
269 ; CHECK-NEXT: vand.vx v8, v8, a0
270 ; CHECK-NEXT: vsll.vi v8, v8, 4
271 ; CHECK-NEXT: vor.vv v8, v9, v8
272 ; CHECK-NEXT: vsrl.vi v9, v8, 2
273 ; CHECK-NEXT: lui a0, 3
274 ; CHECK-NEXT: addi a0, a0, 819
275 ; CHECK-NEXT: vand.vx v9, v9, a0
276 ; CHECK-NEXT: vand.vx v8, v8, a0
277 ; CHECK-NEXT: vsll.vi v8, v8, 2
278 ; CHECK-NEXT: vor.vv v8, v9, v8
279 ; CHECK-NEXT: vsrl.vi v9, v8, 1
280 ; CHECK-NEXT: lui a0, 5
281 ; CHECK-NEXT: addi a0, a0, 1365
282 ; CHECK-NEXT: vand.vx v9, v9, a0
283 ; CHECK-NEXT: vand.vx v8, v8, a0
284 ; CHECK-NEXT: vadd.vv v8, v8, v8
285 ; CHECK-NEXT: vor.vv v8, v9, v8
287 %v = call <2 x i16> @llvm.vp.bitreverse.v2i16(<2 x i16> %va, <2 x i1> splat (i1 true), i32 %evl)
291 declare <4 x i16> @llvm.vp.bitreverse.v4i16(<4 x i16>, <4 x i1>, i32)
293 define <4 x i16> @vp_bitreverse_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
294 ; CHECK-LABEL: vp_bitreverse_v4i16:
296 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
297 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
298 ; CHECK-NEXT: vsll.vi v8, v8, 8, v0.t
299 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
300 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
301 ; CHECK-NEXT: lui a0, 1
302 ; CHECK-NEXT: addi a0, a0, -241
303 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
304 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
305 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
306 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
307 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
308 ; CHECK-NEXT: lui a0, 3
309 ; CHECK-NEXT: addi a0, a0, 819
310 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
311 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
312 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
313 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
314 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
315 ; CHECK-NEXT: lui a0, 5
316 ; CHECK-NEXT: addi a0, a0, 1365
317 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
318 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
319 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
320 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
322 %v = call <4 x i16> @llvm.vp.bitreverse.v4i16(<4 x i16> %va, <4 x i1> %m, i32 %evl)
326 define <4 x i16> @vp_bitreverse_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
327 ; CHECK-LABEL: vp_bitreverse_v4i16_unmasked:
329 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
330 ; CHECK-NEXT: vsrl.vi v9, v8, 8
331 ; CHECK-NEXT: vsll.vi v8, v8, 8
332 ; CHECK-NEXT: vor.vv v8, v8, v9
333 ; CHECK-NEXT: vsrl.vi v9, v8, 4
334 ; CHECK-NEXT: lui a0, 1
335 ; CHECK-NEXT: addi a0, a0, -241
336 ; CHECK-NEXT: vand.vx v9, v9, a0
337 ; CHECK-NEXT: vand.vx v8, v8, a0
338 ; CHECK-NEXT: vsll.vi v8, v8, 4
339 ; CHECK-NEXT: vor.vv v8, v9, v8
340 ; CHECK-NEXT: vsrl.vi v9, v8, 2
341 ; CHECK-NEXT: lui a0, 3
342 ; CHECK-NEXT: addi a0, a0, 819
343 ; CHECK-NEXT: vand.vx v9, v9, a0
344 ; CHECK-NEXT: vand.vx v8, v8, a0
345 ; CHECK-NEXT: vsll.vi v8, v8, 2
346 ; CHECK-NEXT: vor.vv v8, v9, v8
347 ; CHECK-NEXT: vsrl.vi v9, v8, 1
348 ; CHECK-NEXT: lui a0, 5
349 ; CHECK-NEXT: addi a0, a0, 1365
350 ; CHECK-NEXT: vand.vx v9, v9, a0
351 ; CHECK-NEXT: vand.vx v8, v8, a0
352 ; CHECK-NEXT: vadd.vv v8, v8, v8
353 ; CHECK-NEXT: vor.vv v8, v9, v8
355 %v = call <4 x i16> @llvm.vp.bitreverse.v4i16(<4 x i16> %va, <4 x i1> splat (i1 true), i32 %evl)
359 declare <8 x i16> @llvm.vp.bitreverse.v8i16(<8 x i16>, <8 x i1>, i32)
361 define <8 x i16> @vp_bitreverse_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
362 ; CHECK-LABEL: vp_bitreverse_v8i16:
364 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
365 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
366 ; CHECK-NEXT: vsll.vi v8, v8, 8, v0.t
367 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
368 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
369 ; CHECK-NEXT: lui a0, 1
370 ; CHECK-NEXT: addi a0, a0, -241
371 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
372 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
373 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
374 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
375 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
376 ; CHECK-NEXT: lui a0, 3
377 ; CHECK-NEXT: addi a0, a0, 819
378 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
379 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
380 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
381 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
382 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
383 ; CHECK-NEXT: lui a0, 5
384 ; CHECK-NEXT: addi a0, a0, 1365
385 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
386 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
387 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
388 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
390 %v = call <8 x i16> @llvm.vp.bitreverse.v8i16(<8 x i16> %va, <8 x i1> %m, i32 %evl)
394 define <8 x i16> @vp_bitreverse_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
395 ; CHECK-LABEL: vp_bitreverse_v8i16_unmasked:
397 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
398 ; CHECK-NEXT: vsrl.vi v9, v8, 8
399 ; CHECK-NEXT: vsll.vi v8, v8, 8
400 ; CHECK-NEXT: vor.vv v8, v8, v9
401 ; CHECK-NEXT: vsrl.vi v9, v8, 4
402 ; CHECK-NEXT: lui a0, 1
403 ; CHECK-NEXT: addi a0, a0, -241
404 ; CHECK-NEXT: vand.vx v9, v9, a0
405 ; CHECK-NEXT: vand.vx v8, v8, a0
406 ; CHECK-NEXT: vsll.vi v8, v8, 4
407 ; CHECK-NEXT: vor.vv v8, v9, v8
408 ; CHECK-NEXT: vsrl.vi v9, v8, 2
409 ; CHECK-NEXT: lui a0, 3
410 ; CHECK-NEXT: addi a0, a0, 819
411 ; CHECK-NEXT: vand.vx v9, v9, a0
412 ; CHECK-NEXT: vand.vx v8, v8, a0
413 ; CHECK-NEXT: vsll.vi v8, v8, 2
414 ; CHECK-NEXT: vor.vv v8, v9, v8
415 ; CHECK-NEXT: vsrl.vi v9, v8, 1
416 ; CHECK-NEXT: lui a0, 5
417 ; CHECK-NEXT: addi a0, a0, 1365
418 ; CHECK-NEXT: vand.vx v9, v9, a0
419 ; CHECK-NEXT: vand.vx v8, v8, a0
420 ; CHECK-NEXT: vadd.vv v8, v8, v8
421 ; CHECK-NEXT: vor.vv v8, v9, v8
423 %v = call <8 x i16> @llvm.vp.bitreverse.v8i16(<8 x i16> %va, <8 x i1> splat (i1 true), i32 %evl)
427 declare <16 x i16> @llvm.vp.bitreverse.v16i16(<16 x i16>, <16 x i1>, i32)
429 define <16 x i16> @vp_bitreverse_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
430 ; CHECK-LABEL: vp_bitreverse_v16i16:
432 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
433 ; CHECK-NEXT: vsrl.vi v10, v8, 8, v0.t
434 ; CHECK-NEXT: vsll.vi v8, v8, 8, v0.t
435 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
436 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
437 ; CHECK-NEXT: lui a0, 1
438 ; CHECK-NEXT: addi a0, a0, -241
439 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
440 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
441 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
442 ; CHECK-NEXT: vor.vv v8, v10, v8, v0.t
443 ; CHECK-NEXT: vsrl.vi v10, v8, 2, v0.t
444 ; CHECK-NEXT: lui a0, 3
445 ; CHECK-NEXT: addi a0, a0, 819
446 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
447 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
448 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
449 ; CHECK-NEXT: vor.vv v8, v10, v8, v0.t
450 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
451 ; CHECK-NEXT: lui a0, 5
452 ; CHECK-NEXT: addi a0, a0, 1365
453 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
454 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
455 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
456 ; CHECK-NEXT: vor.vv v8, v10, v8, v0.t
458 %v = call <16 x i16> @llvm.vp.bitreverse.v16i16(<16 x i16> %va, <16 x i1> %m, i32 %evl)
462 define <16 x i16> @vp_bitreverse_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
463 ; CHECK-LABEL: vp_bitreverse_v16i16_unmasked:
465 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
466 ; CHECK-NEXT: vsrl.vi v10, v8, 8
467 ; CHECK-NEXT: vsll.vi v8, v8, 8
468 ; CHECK-NEXT: vor.vv v8, v8, v10
469 ; CHECK-NEXT: vsrl.vi v10, v8, 4
470 ; CHECK-NEXT: lui a0, 1
471 ; CHECK-NEXT: addi a0, a0, -241
472 ; CHECK-NEXT: vand.vx v10, v10, a0
473 ; CHECK-NEXT: vand.vx v8, v8, a0
474 ; CHECK-NEXT: vsll.vi v8, v8, 4
475 ; CHECK-NEXT: vor.vv v8, v10, v8
476 ; CHECK-NEXT: vsrl.vi v10, v8, 2
477 ; CHECK-NEXT: lui a0, 3
478 ; CHECK-NEXT: addi a0, a0, 819
479 ; CHECK-NEXT: vand.vx v10, v10, a0
480 ; CHECK-NEXT: vand.vx v8, v8, a0
481 ; CHECK-NEXT: vsll.vi v8, v8, 2
482 ; CHECK-NEXT: vor.vv v8, v10, v8
483 ; CHECK-NEXT: vsrl.vi v10, v8, 1
484 ; CHECK-NEXT: lui a0, 5
485 ; CHECK-NEXT: addi a0, a0, 1365
486 ; CHECK-NEXT: vand.vx v10, v10, a0
487 ; CHECK-NEXT: vand.vx v8, v8, a0
488 ; CHECK-NEXT: vadd.vv v8, v8, v8
489 ; CHECK-NEXT: vor.vv v8, v10, v8
491 %v = call <16 x i16> @llvm.vp.bitreverse.v16i16(<16 x i16> %va, <16 x i1> splat (i1 true), i32 %evl)
495 declare <2 x i32> @llvm.vp.bitreverse.v2i32(<2 x i32>, <2 x i1>, i32)
497 define <2 x i32> @vp_bitreverse_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
498 ; CHECK-LABEL: vp_bitreverse_v2i32:
500 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
501 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
502 ; CHECK-NEXT: lui a0, 16
503 ; CHECK-NEXT: addi a0, a0, -256
504 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
505 ; CHECK-NEXT: vsrl.vi v10, v8, 24, v0.t
506 ; CHECK-NEXT: vor.vv v9, v9, v10, v0.t
507 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
508 ; CHECK-NEXT: vsll.vi v10, v10, 8, v0.t
509 ; CHECK-NEXT: vsll.vi v8, v8, 24, v0.t
510 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
511 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
512 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
513 ; CHECK-NEXT: lui a0, 61681
514 ; CHECK-NEXT: addi a0, a0, -241
515 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
516 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
517 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
518 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
519 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
520 ; CHECK-NEXT: lui a0, 209715
521 ; CHECK-NEXT: addi a0, a0, 819
522 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
523 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
524 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
525 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
526 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
527 ; CHECK-NEXT: lui a0, 349525
528 ; CHECK-NEXT: addi a0, a0, 1365
529 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
530 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
531 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
532 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
534 %v = call <2 x i32> @llvm.vp.bitreverse.v2i32(<2 x i32> %va, <2 x i1> %m, i32 %evl)
538 define <2 x i32> @vp_bitreverse_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
539 ; CHECK-LABEL: vp_bitreverse_v2i32_unmasked:
541 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
542 ; CHECK-NEXT: vsrl.vi v9, v8, 8
543 ; CHECK-NEXT: lui a0, 16
544 ; CHECK-NEXT: addi a0, a0, -256
545 ; CHECK-NEXT: vand.vx v9, v9, a0
546 ; CHECK-NEXT: vsrl.vi v10, v8, 24
547 ; CHECK-NEXT: vor.vv v9, v9, v10
548 ; CHECK-NEXT: vand.vx v10, v8, a0
549 ; CHECK-NEXT: vsll.vi v10, v10, 8
550 ; CHECK-NEXT: vsll.vi v8, v8, 24
551 ; CHECK-NEXT: vor.vv v8, v8, v10
552 ; CHECK-NEXT: vor.vv v8, v8, v9
553 ; CHECK-NEXT: vsrl.vi v9, v8, 4
554 ; CHECK-NEXT: lui a0, 61681
555 ; CHECK-NEXT: addi a0, a0, -241
556 ; CHECK-NEXT: vand.vx v9, v9, a0
557 ; CHECK-NEXT: vand.vx v8, v8, a0
558 ; CHECK-NEXT: vsll.vi v8, v8, 4
559 ; CHECK-NEXT: vor.vv v8, v9, v8
560 ; CHECK-NEXT: vsrl.vi v9, v8, 2
561 ; CHECK-NEXT: lui a0, 209715
562 ; CHECK-NEXT: addi a0, a0, 819
563 ; CHECK-NEXT: vand.vx v9, v9, a0
564 ; CHECK-NEXT: vand.vx v8, v8, a0
565 ; CHECK-NEXT: vsll.vi v8, v8, 2
566 ; CHECK-NEXT: vor.vv v8, v9, v8
567 ; CHECK-NEXT: vsrl.vi v9, v8, 1
568 ; CHECK-NEXT: lui a0, 349525
569 ; CHECK-NEXT: addi a0, a0, 1365
570 ; CHECK-NEXT: vand.vx v9, v9, a0
571 ; CHECK-NEXT: vand.vx v8, v8, a0
572 ; CHECK-NEXT: vadd.vv v8, v8, v8
573 ; CHECK-NEXT: vor.vv v8, v9, v8
575 %v = call <2 x i32> @llvm.vp.bitreverse.v2i32(<2 x i32> %va, <2 x i1> splat (i1 true), i32 %evl)
579 declare <4 x i32> @llvm.vp.bitreverse.v4i32(<4 x i32>, <4 x i1>, i32)
581 define <4 x i32> @vp_bitreverse_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
582 ; CHECK-LABEL: vp_bitreverse_v4i32:
584 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
585 ; CHECK-NEXT: vsrl.vi v9, v8, 8, v0.t
586 ; CHECK-NEXT: lui a0, 16
587 ; CHECK-NEXT: addi a0, a0, -256
588 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
589 ; CHECK-NEXT: vsrl.vi v10, v8, 24, v0.t
590 ; CHECK-NEXT: vor.vv v9, v9, v10, v0.t
591 ; CHECK-NEXT: vand.vx v10, v8, a0, v0.t
592 ; CHECK-NEXT: vsll.vi v10, v10, 8, v0.t
593 ; CHECK-NEXT: vsll.vi v8, v8, 24, v0.t
594 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
595 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
596 ; CHECK-NEXT: vsrl.vi v9, v8, 4, v0.t
597 ; CHECK-NEXT: lui a0, 61681
598 ; CHECK-NEXT: addi a0, a0, -241
599 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
600 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
601 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
602 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
603 ; CHECK-NEXT: vsrl.vi v9, v8, 2, v0.t
604 ; CHECK-NEXT: lui a0, 209715
605 ; CHECK-NEXT: addi a0, a0, 819
606 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
607 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
608 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
609 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
610 ; CHECK-NEXT: vsrl.vi v9, v8, 1, v0.t
611 ; CHECK-NEXT: lui a0, 349525
612 ; CHECK-NEXT: addi a0, a0, 1365
613 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
614 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
615 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
616 ; CHECK-NEXT: vor.vv v8, v9, v8, v0.t
618 %v = call <4 x i32> @llvm.vp.bitreverse.v4i32(<4 x i32> %va, <4 x i1> %m, i32 %evl)
622 define <4 x i32> @vp_bitreverse_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
623 ; CHECK-LABEL: vp_bitreverse_v4i32_unmasked:
625 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
626 ; CHECK-NEXT: vsrl.vi v9, v8, 8
627 ; CHECK-NEXT: lui a0, 16
628 ; CHECK-NEXT: addi a0, a0, -256
629 ; CHECK-NEXT: vand.vx v9, v9, a0
630 ; CHECK-NEXT: vsrl.vi v10, v8, 24
631 ; CHECK-NEXT: vor.vv v9, v9, v10
632 ; CHECK-NEXT: vand.vx v10, v8, a0
633 ; CHECK-NEXT: vsll.vi v10, v10, 8
634 ; CHECK-NEXT: vsll.vi v8, v8, 24
635 ; CHECK-NEXT: vor.vv v8, v8, v10
636 ; CHECK-NEXT: vor.vv v8, v8, v9
637 ; CHECK-NEXT: vsrl.vi v9, v8, 4
638 ; CHECK-NEXT: lui a0, 61681
639 ; CHECK-NEXT: addi a0, a0, -241
640 ; CHECK-NEXT: vand.vx v9, v9, a0
641 ; CHECK-NEXT: vand.vx v8, v8, a0
642 ; CHECK-NEXT: vsll.vi v8, v8, 4
643 ; CHECK-NEXT: vor.vv v8, v9, v8
644 ; CHECK-NEXT: vsrl.vi v9, v8, 2
645 ; CHECK-NEXT: lui a0, 209715
646 ; CHECK-NEXT: addi a0, a0, 819
647 ; CHECK-NEXT: vand.vx v9, v9, a0
648 ; CHECK-NEXT: vand.vx v8, v8, a0
649 ; CHECK-NEXT: vsll.vi v8, v8, 2
650 ; CHECK-NEXT: vor.vv v8, v9, v8
651 ; CHECK-NEXT: vsrl.vi v9, v8, 1
652 ; CHECK-NEXT: lui a0, 349525
653 ; CHECK-NEXT: addi a0, a0, 1365
654 ; CHECK-NEXT: vand.vx v9, v9, a0
655 ; CHECK-NEXT: vand.vx v8, v8, a0
656 ; CHECK-NEXT: vadd.vv v8, v8, v8
657 ; CHECK-NEXT: vor.vv v8, v9, v8
659 %v = call <4 x i32> @llvm.vp.bitreverse.v4i32(<4 x i32> %va, <4 x i1> splat (i1 true), i32 %evl)
663 declare <8 x i32> @llvm.vp.bitreverse.v8i32(<8 x i32>, <8 x i1>, i32)
665 define <8 x i32> @vp_bitreverse_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
666 ; CHECK-LABEL: vp_bitreverse_v8i32:
668 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
669 ; CHECK-NEXT: vsrl.vi v10, v8, 8, v0.t
670 ; CHECK-NEXT: lui a0, 16
671 ; CHECK-NEXT: addi a0, a0, -256
672 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
673 ; CHECK-NEXT: vsrl.vi v12, v8, 24, v0.t
674 ; CHECK-NEXT: vor.vv v10, v10, v12, v0.t
675 ; CHECK-NEXT: vand.vx v12, v8, a0, v0.t
676 ; CHECK-NEXT: vsll.vi v12, v12, 8, v0.t
677 ; CHECK-NEXT: vsll.vi v8, v8, 24, v0.t
678 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
679 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
680 ; CHECK-NEXT: vsrl.vi v10, v8, 4, v0.t
681 ; CHECK-NEXT: lui a0, 61681
682 ; CHECK-NEXT: addi a0, a0, -241
683 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
684 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
685 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
686 ; CHECK-NEXT: vor.vv v8, v10, v8, v0.t
687 ; CHECK-NEXT: vsrl.vi v10, v8, 2, v0.t
688 ; CHECK-NEXT: lui a0, 209715
689 ; CHECK-NEXT: addi a0, a0, 819
690 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
691 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
692 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
693 ; CHECK-NEXT: vor.vv v8, v10, v8, v0.t
694 ; CHECK-NEXT: vsrl.vi v10, v8, 1, v0.t
695 ; CHECK-NEXT: lui a0, 349525
696 ; CHECK-NEXT: addi a0, a0, 1365
697 ; CHECK-NEXT: vand.vx v10, v10, a0, v0.t
698 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
699 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
700 ; CHECK-NEXT: vor.vv v8, v10, v8, v0.t
702 %v = call <8 x i32> @llvm.vp.bitreverse.v8i32(<8 x i32> %va, <8 x i1> %m, i32 %evl)
706 define <8 x i32> @vp_bitreverse_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
707 ; CHECK-LABEL: vp_bitreverse_v8i32_unmasked:
709 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
710 ; CHECK-NEXT: vsrl.vi v10, v8, 8
711 ; CHECK-NEXT: lui a0, 16
712 ; CHECK-NEXT: addi a0, a0, -256
713 ; CHECK-NEXT: vand.vx v10, v10, a0
714 ; CHECK-NEXT: vsrl.vi v12, v8, 24
715 ; CHECK-NEXT: vor.vv v10, v10, v12
716 ; CHECK-NEXT: vand.vx v12, v8, a0
717 ; CHECK-NEXT: vsll.vi v12, v12, 8
718 ; CHECK-NEXT: vsll.vi v8, v8, 24
719 ; CHECK-NEXT: vor.vv v8, v8, v12
720 ; CHECK-NEXT: vor.vv v8, v8, v10
721 ; CHECK-NEXT: vsrl.vi v10, v8, 4
722 ; CHECK-NEXT: lui a0, 61681
723 ; CHECK-NEXT: addi a0, a0, -241
724 ; CHECK-NEXT: vand.vx v10, v10, a0
725 ; CHECK-NEXT: vand.vx v8, v8, a0
726 ; CHECK-NEXT: vsll.vi v8, v8, 4
727 ; CHECK-NEXT: vor.vv v8, v10, v8
728 ; CHECK-NEXT: vsrl.vi v10, v8, 2
729 ; CHECK-NEXT: lui a0, 209715
730 ; CHECK-NEXT: addi a0, a0, 819
731 ; CHECK-NEXT: vand.vx v10, v10, a0
732 ; CHECK-NEXT: vand.vx v8, v8, a0
733 ; CHECK-NEXT: vsll.vi v8, v8, 2
734 ; CHECK-NEXT: vor.vv v8, v10, v8
735 ; CHECK-NEXT: vsrl.vi v10, v8, 1
736 ; CHECK-NEXT: lui a0, 349525
737 ; CHECK-NEXT: addi a0, a0, 1365
738 ; CHECK-NEXT: vand.vx v10, v10, a0
739 ; CHECK-NEXT: vand.vx v8, v8, a0
740 ; CHECK-NEXT: vadd.vv v8, v8, v8
741 ; CHECK-NEXT: vor.vv v8, v10, v8
743 %v = call <8 x i32> @llvm.vp.bitreverse.v8i32(<8 x i32> %va, <8 x i1> splat (i1 true), i32 %evl)
747 declare <16 x i32> @llvm.vp.bitreverse.v16i32(<16 x i32>, <16 x i1>, i32)
749 define <16 x i32> @vp_bitreverse_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
750 ; CHECK-LABEL: vp_bitreverse_v16i32:
752 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
753 ; CHECK-NEXT: vsrl.vi v12, v8, 8, v0.t
754 ; CHECK-NEXT: lui a0, 16
755 ; CHECK-NEXT: addi a0, a0, -256
756 ; CHECK-NEXT: vand.vx v12, v12, a0, v0.t
757 ; CHECK-NEXT: vsrl.vi v16, v8, 24, v0.t
758 ; CHECK-NEXT: vor.vv v12, v12, v16, v0.t
759 ; CHECK-NEXT: vand.vx v16, v8, a0, v0.t
760 ; CHECK-NEXT: vsll.vi v16, v16, 8, v0.t
761 ; CHECK-NEXT: vsll.vi v8, v8, 24, v0.t
762 ; CHECK-NEXT: vor.vv v8, v8, v16, v0.t
763 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
764 ; CHECK-NEXT: vsrl.vi v12, v8, 4, v0.t
765 ; CHECK-NEXT: lui a0, 61681
766 ; CHECK-NEXT: addi a0, a0, -241
767 ; CHECK-NEXT: vand.vx v12, v12, a0, v0.t
768 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
769 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
770 ; CHECK-NEXT: vor.vv v8, v12, v8, v0.t
771 ; CHECK-NEXT: vsrl.vi v12, v8, 2, v0.t
772 ; CHECK-NEXT: lui a0, 209715
773 ; CHECK-NEXT: addi a0, a0, 819
774 ; CHECK-NEXT: vand.vx v12, v12, a0, v0.t
775 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
776 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
777 ; CHECK-NEXT: vor.vv v8, v12, v8, v0.t
778 ; CHECK-NEXT: vsrl.vi v12, v8, 1, v0.t
779 ; CHECK-NEXT: lui a0, 349525
780 ; CHECK-NEXT: addi a0, a0, 1365
781 ; CHECK-NEXT: vand.vx v12, v12, a0, v0.t
782 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
783 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
784 ; CHECK-NEXT: vor.vv v8, v12, v8, v0.t
786 %v = call <16 x i32> @llvm.vp.bitreverse.v16i32(<16 x i32> %va, <16 x i1> %m, i32 %evl)
790 define <16 x i32> @vp_bitreverse_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
791 ; CHECK-LABEL: vp_bitreverse_v16i32_unmasked:
793 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
794 ; CHECK-NEXT: vsrl.vi v12, v8, 8
795 ; CHECK-NEXT: lui a0, 16
796 ; CHECK-NEXT: addi a0, a0, -256
797 ; CHECK-NEXT: vand.vx v12, v12, a0
798 ; CHECK-NEXT: vsrl.vi v16, v8, 24
799 ; CHECK-NEXT: vor.vv v12, v12, v16
800 ; CHECK-NEXT: vand.vx v16, v8, a0
801 ; CHECK-NEXT: vsll.vi v16, v16, 8
802 ; CHECK-NEXT: vsll.vi v8, v8, 24
803 ; CHECK-NEXT: vor.vv v8, v8, v16
804 ; CHECK-NEXT: vor.vv v8, v8, v12
805 ; CHECK-NEXT: vsrl.vi v12, v8, 4
806 ; CHECK-NEXT: lui a0, 61681
807 ; CHECK-NEXT: addi a0, a0, -241
808 ; CHECK-NEXT: vand.vx v12, v12, a0
809 ; CHECK-NEXT: vand.vx v8, v8, a0
810 ; CHECK-NEXT: vsll.vi v8, v8, 4
811 ; CHECK-NEXT: vor.vv v8, v12, v8
812 ; CHECK-NEXT: vsrl.vi v12, v8, 2
813 ; CHECK-NEXT: lui a0, 209715
814 ; CHECK-NEXT: addi a0, a0, 819
815 ; CHECK-NEXT: vand.vx v12, v12, a0
816 ; CHECK-NEXT: vand.vx v8, v8, a0
817 ; CHECK-NEXT: vsll.vi v8, v8, 2
818 ; CHECK-NEXT: vor.vv v8, v12, v8
819 ; CHECK-NEXT: vsrl.vi v12, v8, 1
820 ; CHECK-NEXT: lui a0, 349525
821 ; CHECK-NEXT: addi a0, a0, 1365
822 ; CHECK-NEXT: vand.vx v12, v12, a0
823 ; CHECK-NEXT: vand.vx v8, v8, a0
824 ; CHECK-NEXT: vadd.vv v8, v8, v8
825 ; CHECK-NEXT: vor.vv v8, v12, v8
827 %v = call <16 x i32> @llvm.vp.bitreverse.v16i32(<16 x i32> %va, <16 x i1> splat (i1 true), i32 %evl)
831 declare <2 x i64> @llvm.vp.bitreverse.v2i64(<2 x i64>, <2 x i1>, i32)
833 define <2 x i64> @vp_bitreverse_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
834 ; RV32-LABEL: vp_bitreverse_v2i64:
836 ; RV32-NEXT: addi sp, sp, -16
837 ; RV32-NEXT: .cfi_def_cfa_offset 16
838 ; RV32-NEXT: sw zero, 12(sp)
839 ; RV32-NEXT: lui a1, 1044480
840 ; RV32-NEXT: sw a1, 8(sp)
841 ; RV32-NEXT: li a1, 56
842 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
843 ; RV32-NEXT: vsll.vx v9, v8, a1, v0.t
844 ; RV32-NEXT: lui a2, 16
845 ; RV32-NEXT: addi a2, a2, -256
846 ; RV32-NEXT: vand.vx v10, v8, a2, v0.t
847 ; RV32-NEXT: li a3, 40
848 ; RV32-NEXT: vsll.vx v10, v10, a3, v0.t
849 ; RV32-NEXT: vor.vv v9, v9, v10, v0.t
850 ; RV32-NEXT: addi a4, sp, 8
851 ; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
852 ; RV32-NEXT: vlse64.v v10, (a4), zero
853 ; RV32-NEXT: lui a4, 4080
854 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
855 ; RV32-NEXT: vand.vx v11, v8, a4, v0.t
856 ; RV32-NEXT: vsll.vi v11, v11, 24, v0.t
857 ; RV32-NEXT: vand.vv v12, v8, v10, v0.t
858 ; RV32-NEXT: vsll.vi v12, v12, 8, v0.t
859 ; RV32-NEXT: vor.vv v11, v11, v12, v0.t
860 ; RV32-NEXT: vor.vv v9, v9, v11, v0.t
861 ; RV32-NEXT: vsrl.vx v11, v8, a1, v0.t
862 ; RV32-NEXT: vsrl.vx v12, v8, a3, v0.t
863 ; RV32-NEXT: vand.vx v12, v12, a2, v0.t
864 ; RV32-NEXT: vor.vv v11, v12, v11, v0.t
865 ; RV32-NEXT: vsrl.vi v12, v8, 24, v0.t
866 ; RV32-NEXT: vand.vx v12, v12, a4, v0.t
867 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
868 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
869 ; RV32-NEXT: vor.vv v8, v8, v12, v0.t
870 ; RV32-NEXT: vor.vv v8, v8, v11, v0.t
871 ; RV32-NEXT: vor.vv v8, v9, v8, v0.t
872 ; RV32-NEXT: vsrl.vi v9, v8, 4, v0.t
873 ; RV32-NEXT: lui a1, 61681
874 ; RV32-NEXT: addi a1, a1, -241
875 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
876 ; RV32-NEXT: vmv.v.x v10, a1
877 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
878 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
879 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
880 ; RV32-NEXT: vsll.vi v8, v8, 4, v0.t
881 ; RV32-NEXT: vor.vv v8, v9, v8, v0.t
882 ; RV32-NEXT: vsrl.vi v9, v8, 2, v0.t
883 ; RV32-NEXT: lui a1, 209715
884 ; RV32-NEXT: addi a1, a1, 819
885 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
886 ; RV32-NEXT: vmv.v.x v10, a1
887 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
888 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
889 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
890 ; RV32-NEXT: vsll.vi v8, v8, 2, v0.t
891 ; RV32-NEXT: vor.vv v8, v9, v8, v0.t
892 ; RV32-NEXT: vsrl.vi v9, v8, 1, v0.t
893 ; RV32-NEXT: lui a1, 349525
894 ; RV32-NEXT: addi a1, a1, 1365
895 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
896 ; RV32-NEXT: vmv.v.x v10, a1
897 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
898 ; RV32-NEXT: vand.vv v9, v9, v10, v0.t
899 ; RV32-NEXT: vand.vv v8, v8, v10, v0.t
900 ; RV32-NEXT: vsll.vi v8, v8, 1, v0.t
901 ; RV32-NEXT: vor.vv v8, v9, v8, v0.t
902 ; RV32-NEXT: addi sp, sp, 16
905 ; RV64-LABEL: vp_bitreverse_v2i64:
907 ; RV64-NEXT: lui a1, 4080
908 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
909 ; RV64-NEXT: vand.vx v9, v8, a1, v0.t
910 ; RV64-NEXT: vsll.vi v9, v9, 24, v0.t
911 ; RV64-NEXT: li a0, 255
912 ; RV64-NEXT: slli a0, a0, 24
913 ; RV64-NEXT: vand.vx v10, v8, a0, v0.t
914 ; RV64-NEXT: vsll.vi v10, v10, 8, v0.t
915 ; RV64-NEXT: vor.vv v9, v9, v10, v0.t
916 ; RV64-NEXT: li a2, 56
917 ; RV64-NEXT: vsll.vx v10, v8, a2, v0.t
918 ; RV64-NEXT: lui a3, 16
919 ; RV64-NEXT: addiw a3, a3, -256
920 ; RV64-NEXT: vand.vx v11, v8, a3, v0.t
921 ; RV64-NEXT: li a4, 40
922 ; RV64-NEXT: vsll.vx v11, v11, a4, v0.t
923 ; RV64-NEXT: vor.vv v10, v10, v11, v0.t
924 ; RV64-NEXT: vor.vv v9, v10, v9, v0.t
925 ; RV64-NEXT: vsrl.vx v10, v8, a2, v0.t
926 ; RV64-NEXT: vsrl.vx v11, v8, a4, v0.t
927 ; RV64-NEXT: vand.vx v11, v11, a3, v0.t
928 ; RV64-NEXT: vor.vv v10, v11, v10, v0.t
929 ; RV64-NEXT: vsrl.vi v11, v8, 24, v0.t
930 ; RV64-NEXT: vand.vx v11, v11, a1, v0.t
931 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
932 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
933 ; RV64-NEXT: vor.vv v8, v8, v11, v0.t
934 ; RV64-NEXT: vor.vv v8, v8, v10, v0.t
935 ; RV64-NEXT: vor.vv v8, v9, v8, v0.t
936 ; RV64-NEXT: vsrl.vi v9, v8, 4, v0.t
937 ; RV64-NEXT: lui a0, 61681
938 ; RV64-NEXT: addiw a0, a0, -241
939 ; RV64-NEXT: slli a1, a0, 32
940 ; RV64-NEXT: add a0, a0, a1
941 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
942 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
943 ; RV64-NEXT: vsll.vi v8, v8, 4, v0.t
944 ; RV64-NEXT: vor.vv v8, v9, v8, v0.t
945 ; RV64-NEXT: vsrl.vi v9, v8, 2, v0.t
946 ; RV64-NEXT: lui a0, 209715
947 ; RV64-NEXT: addiw a0, a0, 819
948 ; RV64-NEXT: slli a1, a0, 32
949 ; RV64-NEXT: add a0, a0, a1
950 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
951 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
952 ; RV64-NEXT: vsll.vi v8, v8, 2, v0.t
953 ; RV64-NEXT: vor.vv v8, v9, v8, v0.t
954 ; RV64-NEXT: vsrl.vi v9, v8, 1, v0.t
955 ; RV64-NEXT: lui a0, 349525
956 ; RV64-NEXT: addiw a0, a0, 1365
957 ; RV64-NEXT: slli a1, a0, 32
958 ; RV64-NEXT: add a0, a0, a1
959 ; RV64-NEXT: vand.vx v9, v9, a0, v0.t
960 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
961 ; RV64-NEXT: vsll.vi v8, v8, 1, v0.t
962 ; RV64-NEXT: vor.vv v8, v9, v8, v0.t
964 %v = call <2 x i64> @llvm.vp.bitreverse.v2i64(<2 x i64> %va, <2 x i1> %m, i32 %evl)
968 define <2 x i64> @vp_bitreverse_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
969 ; RV32-LABEL: vp_bitreverse_v2i64_unmasked:
971 ; RV32-NEXT: addi sp, sp, -16
972 ; RV32-NEXT: .cfi_def_cfa_offset 16
973 ; RV32-NEXT: sw zero, 12(sp)
974 ; RV32-NEXT: lui a1, 1044480
975 ; RV32-NEXT: sw a1, 8(sp)
976 ; RV32-NEXT: li a1, 56
977 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
978 ; RV32-NEXT: vsll.vx v9, v8, a1
979 ; RV32-NEXT: lui a2, 16
980 ; RV32-NEXT: addi a2, a2, -256
981 ; RV32-NEXT: vand.vx v10, v8, a2
982 ; RV32-NEXT: li a3, 40
983 ; RV32-NEXT: vsll.vx v10, v10, a3
984 ; RV32-NEXT: vor.vv v9, v9, v10
985 ; RV32-NEXT: addi a4, sp, 8
986 ; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
987 ; RV32-NEXT: vlse64.v v10, (a4), zero
988 ; RV32-NEXT: lui a4, 4080
989 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
990 ; RV32-NEXT: vand.vx v11, v8, a4
991 ; RV32-NEXT: vsll.vi v11, v11, 24
992 ; RV32-NEXT: vand.vv v12, v8, v10
993 ; RV32-NEXT: vsll.vi v12, v12, 8
994 ; RV32-NEXT: vor.vv v11, v11, v12
995 ; RV32-NEXT: vor.vv v9, v9, v11
996 ; RV32-NEXT: vsrl.vx v11, v8, a1
997 ; RV32-NEXT: vsrl.vx v12, v8, a3
998 ; RV32-NEXT: vand.vx v12, v12, a2
999 ; RV32-NEXT: vor.vv v11, v12, v11
1000 ; RV32-NEXT: vsrl.vi v12, v8, 24
1001 ; RV32-NEXT: vand.vx v12, v12, a4
1002 ; RV32-NEXT: vsrl.vi v8, v8, 8
1003 ; RV32-NEXT: vand.vv v8, v8, v10
1004 ; RV32-NEXT: vor.vv v8, v8, v12
1005 ; RV32-NEXT: vor.vv v8, v8, v11
1006 ; RV32-NEXT: vor.vv v8, v9, v8
1007 ; RV32-NEXT: vsrl.vi v9, v8, 4
1008 ; RV32-NEXT: lui a1, 61681
1009 ; RV32-NEXT: addi a1, a1, -241
1010 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1011 ; RV32-NEXT: vmv.v.x v10, a1
1012 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1013 ; RV32-NEXT: vand.vv v9, v9, v10
1014 ; RV32-NEXT: vand.vv v8, v8, v10
1015 ; RV32-NEXT: vsll.vi v8, v8, 4
1016 ; RV32-NEXT: vor.vv v8, v9, v8
1017 ; RV32-NEXT: vsrl.vi v9, v8, 2
1018 ; RV32-NEXT: lui a1, 209715
1019 ; RV32-NEXT: addi a1, a1, 819
1020 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1021 ; RV32-NEXT: vmv.v.x v10, a1
1022 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1023 ; RV32-NEXT: vand.vv v9, v9, v10
1024 ; RV32-NEXT: vand.vv v8, v8, v10
1025 ; RV32-NEXT: vsll.vi v8, v8, 2
1026 ; RV32-NEXT: vor.vv v8, v9, v8
1027 ; RV32-NEXT: vsrl.vi v9, v8, 1
1028 ; RV32-NEXT: lui a1, 349525
1029 ; RV32-NEXT: addi a1, a1, 1365
1030 ; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
1031 ; RV32-NEXT: vmv.v.x v10, a1
1032 ; RV32-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1033 ; RV32-NEXT: vand.vv v9, v9, v10
1034 ; RV32-NEXT: vand.vv v8, v8, v10
1035 ; RV32-NEXT: vadd.vv v8, v8, v8
1036 ; RV32-NEXT: vor.vv v8, v9, v8
1037 ; RV32-NEXT: addi sp, sp, 16
1040 ; RV64-LABEL: vp_bitreverse_v2i64_unmasked:
1042 ; RV64-NEXT: lui a1, 4080
1043 ; RV64-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1044 ; RV64-NEXT: vand.vx v9, v8, a1
1045 ; RV64-NEXT: vsll.vi v9, v9, 24
1046 ; RV64-NEXT: li a0, 255
1047 ; RV64-NEXT: slli a0, a0, 24
1048 ; RV64-NEXT: vand.vx v10, v8, a0
1049 ; RV64-NEXT: vsll.vi v10, v10, 8
1050 ; RV64-NEXT: vor.vv v9, v9, v10
1051 ; RV64-NEXT: li a2, 56
1052 ; RV64-NEXT: vsll.vx v10, v8, a2
1053 ; RV64-NEXT: lui a3, 16
1054 ; RV64-NEXT: addiw a3, a3, -256
1055 ; RV64-NEXT: vand.vx v11, v8, a3
1056 ; RV64-NEXT: li a4, 40
1057 ; RV64-NEXT: vsll.vx v11, v11, a4
1058 ; RV64-NEXT: vor.vv v10, v10, v11
1059 ; RV64-NEXT: vor.vv v9, v10, v9
1060 ; RV64-NEXT: vsrl.vx v10, v8, a2
1061 ; RV64-NEXT: vsrl.vx v11, v8, a4
1062 ; RV64-NEXT: vand.vx v11, v11, a3
1063 ; RV64-NEXT: vor.vv v10, v11, v10
1064 ; RV64-NEXT: vsrl.vi v11, v8, 24
1065 ; RV64-NEXT: vand.vx v11, v11, a1
1066 ; RV64-NEXT: vsrl.vi v8, v8, 8
1067 ; RV64-NEXT: vand.vx v8, v8, a0
1068 ; RV64-NEXT: vor.vv v8, v8, v11
1069 ; RV64-NEXT: vor.vv v8, v8, v10
1070 ; RV64-NEXT: vor.vv v8, v9, v8
1071 ; RV64-NEXT: vsrl.vi v9, v8, 4
1072 ; RV64-NEXT: lui a0, 61681
1073 ; RV64-NEXT: addiw a0, a0, -241
1074 ; RV64-NEXT: slli a1, a0, 32
1075 ; RV64-NEXT: add a0, a0, a1
1076 ; RV64-NEXT: vand.vx v9, v9, a0
1077 ; RV64-NEXT: vand.vx v8, v8, a0
1078 ; RV64-NEXT: vsll.vi v8, v8, 4
1079 ; RV64-NEXT: vor.vv v8, v9, v8
1080 ; RV64-NEXT: vsrl.vi v9, v8, 2
1081 ; RV64-NEXT: lui a0, 209715
1082 ; RV64-NEXT: addiw a0, a0, 819
1083 ; RV64-NEXT: slli a1, a0, 32
1084 ; RV64-NEXT: add a0, a0, a1
1085 ; RV64-NEXT: vand.vx v9, v9, a0
1086 ; RV64-NEXT: vand.vx v8, v8, a0
1087 ; RV64-NEXT: vsll.vi v8, v8, 2
1088 ; RV64-NEXT: vor.vv v8, v9, v8
1089 ; RV64-NEXT: vsrl.vi v9, v8, 1
1090 ; RV64-NEXT: lui a0, 349525
1091 ; RV64-NEXT: addiw a0, a0, 1365
1092 ; RV64-NEXT: slli a1, a0, 32
1093 ; RV64-NEXT: add a0, a0, a1
1094 ; RV64-NEXT: vand.vx v9, v9, a0
1095 ; RV64-NEXT: vand.vx v8, v8, a0
1096 ; RV64-NEXT: vadd.vv v8, v8, v8
1097 ; RV64-NEXT: vor.vv v8, v9, v8
1099 %v = call <2 x i64> @llvm.vp.bitreverse.v2i64(<2 x i64> %va, <2 x i1> splat (i1 true), i32 %evl)
1103 declare <4 x i64> @llvm.vp.bitreverse.v4i64(<4 x i64>, <4 x i1>, i32)
1105 define <4 x i64> @vp_bitreverse_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1106 ; RV32-LABEL: vp_bitreverse_v4i64:
1108 ; RV32-NEXT: addi sp, sp, -16
1109 ; RV32-NEXT: .cfi_def_cfa_offset 16
1110 ; RV32-NEXT: sw zero, 12(sp)
1111 ; RV32-NEXT: lui a1, 1044480
1112 ; RV32-NEXT: sw a1, 8(sp)
1113 ; RV32-NEXT: li a1, 56
1114 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1115 ; RV32-NEXT: vsll.vx v10, v8, a1, v0.t
1116 ; RV32-NEXT: lui a2, 16
1117 ; RV32-NEXT: addi a2, a2, -256
1118 ; RV32-NEXT: vand.vx v12, v8, a2, v0.t
1119 ; RV32-NEXT: li a3, 40
1120 ; RV32-NEXT: vsll.vx v12, v12, a3, v0.t
1121 ; RV32-NEXT: vor.vv v10, v10, v12, v0.t
1122 ; RV32-NEXT: addi a4, sp, 8
1123 ; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
1124 ; RV32-NEXT: vlse64.v v12, (a4), zero
1125 ; RV32-NEXT: lui a4, 4080
1126 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1127 ; RV32-NEXT: vand.vx v14, v8, a4, v0.t
1128 ; RV32-NEXT: vsll.vi v14, v14, 24, v0.t
1129 ; RV32-NEXT: vand.vv v16, v8, v12, v0.t
1130 ; RV32-NEXT: vsll.vi v16, v16, 8, v0.t
1131 ; RV32-NEXT: vor.vv v14, v14, v16, v0.t
1132 ; RV32-NEXT: vor.vv v10, v10, v14, v0.t
1133 ; RV32-NEXT: vsrl.vx v14, v8, a1, v0.t
1134 ; RV32-NEXT: vsrl.vx v16, v8, a3, v0.t
1135 ; RV32-NEXT: vand.vx v16, v16, a2, v0.t
1136 ; RV32-NEXT: vor.vv v14, v16, v14, v0.t
1137 ; RV32-NEXT: vsrl.vi v16, v8, 24, v0.t
1138 ; RV32-NEXT: vand.vx v16, v16, a4, v0.t
1139 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
1140 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1141 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1142 ; RV32-NEXT: vor.vv v8, v8, v14, v0.t
1143 ; RV32-NEXT: vor.vv v8, v10, v8, v0.t
1144 ; RV32-NEXT: vsrl.vi v10, v8, 4, v0.t
1145 ; RV32-NEXT: lui a1, 61681
1146 ; RV32-NEXT: addi a1, a1, -241
1147 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1148 ; RV32-NEXT: vmv.v.x v12, a1
1149 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1150 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
1151 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1152 ; RV32-NEXT: vsll.vi v8, v8, 4, v0.t
1153 ; RV32-NEXT: vor.vv v8, v10, v8, v0.t
1154 ; RV32-NEXT: vsrl.vi v10, v8, 2, v0.t
1155 ; RV32-NEXT: lui a1, 209715
1156 ; RV32-NEXT: addi a1, a1, 819
1157 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1158 ; RV32-NEXT: vmv.v.x v12, a1
1159 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1160 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
1161 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1162 ; RV32-NEXT: vsll.vi v8, v8, 2, v0.t
1163 ; RV32-NEXT: vor.vv v8, v10, v8, v0.t
1164 ; RV32-NEXT: vsrl.vi v10, v8, 1, v0.t
1165 ; RV32-NEXT: lui a1, 349525
1166 ; RV32-NEXT: addi a1, a1, 1365
1167 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1168 ; RV32-NEXT: vmv.v.x v12, a1
1169 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1170 ; RV32-NEXT: vand.vv v10, v10, v12, v0.t
1171 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1172 ; RV32-NEXT: vsll.vi v8, v8, 1, v0.t
1173 ; RV32-NEXT: vor.vv v8, v10, v8, v0.t
1174 ; RV32-NEXT: addi sp, sp, 16
1177 ; RV64-LABEL: vp_bitreverse_v4i64:
1179 ; RV64-NEXT: lui a1, 4080
1180 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1181 ; RV64-NEXT: vand.vx v10, v8, a1, v0.t
1182 ; RV64-NEXT: vsll.vi v10, v10, 24, v0.t
1183 ; RV64-NEXT: li a0, 255
1184 ; RV64-NEXT: slli a0, a0, 24
1185 ; RV64-NEXT: vand.vx v12, v8, a0, v0.t
1186 ; RV64-NEXT: vsll.vi v12, v12, 8, v0.t
1187 ; RV64-NEXT: vor.vv v10, v10, v12, v0.t
1188 ; RV64-NEXT: li a2, 56
1189 ; RV64-NEXT: vsll.vx v12, v8, a2, v0.t
1190 ; RV64-NEXT: lui a3, 16
1191 ; RV64-NEXT: addiw a3, a3, -256
1192 ; RV64-NEXT: vand.vx v14, v8, a3, v0.t
1193 ; RV64-NEXT: li a4, 40
1194 ; RV64-NEXT: vsll.vx v14, v14, a4, v0.t
1195 ; RV64-NEXT: vor.vv v12, v12, v14, v0.t
1196 ; RV64-NEXT: vor.vv v10, v12, v10, v0.t
1197 ; RV64-NEXT: vsrl.vx v12, v8, a2, v0.t
1198 ; RV64-NEXT: vsrl.vx v14, v8, a4, v0.t
1199 ; RV64-NEXT: vand.vx v14, v14, a3, v0.t
1200 ; RV64-NEXT: vor.vv v12, v14, v12, v0.t
1201 ; RV64-NEXT: vsrl.vi v14, v8, 24, v0.t
1202 ; RV64-NEXT: vand.vx v14, v14, a1, v0.t
1203 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
1204 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1205 ; RV64-NEXT: vor.vv v8, v8, v14, v0.t
1206 ; RV64-NEXT: vor.vv v8, v8, v12, v0.t
1207 ; RV64-NEXT: vor.vv v8, v10, v8, v0.t
1208 ; RV64-NEXT: vsrl.vi v10, v8, 4, v0.t
1209 ; RV64-NEXT: lui a0, 61681
1210 ; RV64-NEXT: addiw a0, a0, -241
1211 ; RV64-NEXT: slli a1, a0, 32
1212 ; RV64-NEXT: add a0, a0, a1
1213 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
1214 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1215 ; RV64-NEXT: vsll.vi v8, v8, 4, v0.t
1216 ; RV64-NEXT: vor.vv v8, v10, v8, v0.t
1217 ; RV64-NEXT: vsrl.vi v10, v8, 2, v0.t
1218 ; RV64-NEXT: lui a0, 209715
1219 ; RV64-NEXT: addiw a0, a0, 819
1220 ; RV64-NEXT: slli a1, a0, 32
1221 ; RV64-NEXT: add a0, a0, a1
1222 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
1223 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1224 ; RV64-NEXT: vsll.vi v8, v8, 2, v0.t
1225 ; RV64-NEXT: vor.vv v8, v10, v8, v0.t
1226 ; RV64-NEXT: vsrl.vi v10, v8, 1, v0.t
1227 ; RV64-NEXT: lui a0, 349525
1228 ; RV64-NEXT: addiw a0, a0, 1365
1229 ; RV64-NEXT: slli a1, a0, 32
1230 ; RV64-NEXT: add a0, a0, a1
1231 ; RV64-NEXT: vand.vx v10, v10, a0, v0.t
1232 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1233 ; RV64-NEXT: vsll.vi v8, v8, 1, v0.t
1234 ; RV64-NEXT: vor.vv v8, v10, v8, v0.t
1236 %v = call <4 x i64> @llvm.vp.bitreverse.v4i64(<4 x i64> %va, <4 x i1> %m, i32 %evl)
1240 define <4 x i64> @vp_bitreverse_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1241 ; RV32-LABEL: vp_bitreverse_v4i64_unmasked:
1243 ; RV32-NEXT: addi sp, sp, -16
1244 ; RV32-NEXT: .cfi_def_cfa_offset 16
1245 ; RV32-NEXT: sw zero, 12(sp)
1246 ; RV32-NEXT: lui a1, 1044480
1247 ; RV32-NEXT: sw a1, 8(sp)
1248 ; RV32-NEXT: li a1, 56
1249 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1250 ; RV32-NEXT: vsll.vx v10, v8, a1
1251 ; RV32-NEXT: lui a2, 16
1252 ; RV32-NEXT: addi a2, a2, -256
1253 ; RV32-NEXT: vand.vx v12, v8, a2
1254 ; RV32-NEXT: li a3, 40
1255 ; RV32-NEXT: vsll.vx v12, v12, a3
1256 ; RV32-NEXT: vor.vv v10, v10, v12
1257 ; RV32-NEXT: addi a4, sp, 8
1258 ; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
1259 ; RV32-NEXT: vlse64.v v12, (a4), zero
1260 ; RV32-NEXT: lui a4, 4080
1261 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1262 ; RV32-NEXT: vand.vx v14, v8, a4
1263 ; RV32-NEXT: vsll.vi v14, v14, 24
1264 ; RV32-NEXT: vand.vv v16, v8, v12
1265 ; RV32-NEXT: vsll.vi v16, v16, 8
1266 ; RV32-NEXT: vor.vv v14, v14, v16
1267 ; RV32-NEXT: vor.vv v10, v10, v14
1268 ; RV32-NEXT: vsrl.vx v14, v8, a1
1269 ; RV32-NEXT: vsrl.vx v16, v8, a3
1270 ; RV32-NEXT: vand.vx v16, v16, a2
1271 ; RV32-NEXT: vor.vv v14, v16, v14
1272 ; RV32-NEXT: vsrl.vi v16, v8, 24
1273 ; RV32-NEXT: vand.vx v16, v16, a4
1274 ; RV32-NEXT: vsrl.vi v8, v8, 8
1275 ; RV32-NEXT: vand.vv v8, v8, v12
1276 ; RV32-NEXT: vor.vv v8, v8, v16
1277 ; RV32-NEXT: vor.vv v8, v8, v14
1278 ; RV32-NEXT: vor.vv v8, v10, v8
1279 ; RV32-NEXT: vsrl.vi v10, v8, 4
1280 ; RV32-NEXT: lui a1, 61681
1281 ; RV32-NEXT: addi a1, a1, -241
1282 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1283 ; RV32-NEXT: vmv.v.x v12, a1
1284 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1285 ; RV32-NEXT: vand.vv v10, v10, v12
1286 ; RV32-NEXT: vand.vv v8, v8, v12
1287 ; RV32-NEXT: vsll.vi v8, v8, 4
1288 ; RV32-NEXT: vor.vv v8, v10, v8
1289 ; RV32-NEXT: vsrl.vi v10, v8, 2
1290 ; RV32-NEXT: lui a1, 209715
1291 ; RV32-NEXT: addi a1, a1, 819
1292 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1293 ; RV32-NEXT: vmv.v.x v12, a1
1294 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1295 ; RV32-NEXT: vand.vv v10, v10, v12
1296 ; RV32-NEXT: vand.vv v8, v8, v12
1297 ; RV32-NEXT: vsll.vi v8, v8, 2
1298 ; RV32-NEXT: vor.vv v8, v10, v8
1299 ; RV32-NEXT: vsrl.vi v10, v8, 1
1300 ; RV32-NEXT: lui a1, 349525
1301 ; RV32-NEXT: addi a1, a1, 1365
1302 ; RV32-NEXT: vsetivli zero, 8, e32, m2, ta, ma
1303 ; RV32-NEXT: vmv.v.x v12, a1
1304 ; RV32-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1305 ; RV32-NEXT: vand.vv v10, v10, v12
1306 ; RV32-NEXT: vand.vv v8, v8, v12
1307 ; RV32-NEXT: vadd.vv v8, v8, v8
1308 ; RV32-NEXT: vor.vv v8, v10, v8
1309 ; RV32-NEXT: addi sp, sp, 16
1312 ; RV64-LABEL: vp_bitreverse_v4i64_unmasked:
1314 ; RV64-NEXT: lui a1, 4080
1315 ; RV64-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1316 ; RV64-NEXT: vand.vx v10, v8, a1
1317 ; RV64-NEXT: vsll.vi v10, v10, 24
1318 ; RV64-NEXT: li a0, 255
1319 ; RV64-NEXT: slli a0, a0, 24
1320 ; RV64-NEXT: vand.vx v12, v8, a0
1321 ; RV64-NEXT: vsll.vi v12, v12, 8
1322 ; RV64-NEXT: vor.vv v10, v10, v12
1323 ; RV64-NEXT: li a2, 56
1324 ; RV64-NEXT: vsll.vx v12, v8, a2
1325 ; RV64-NEXT: lui a3, 16
1326 ; RV64-NEXT: addiw a3, a3, -256
1327 ; RV64-NEXT: vand.vx v14, v8, a3
1328 ; RV64-NEXT: li a4, 40
1329 ; RV64-NEXT: vsll.vx v14, v14, a4
1330 ; RV64-NEXT: vor.vv v12, v12, v14
1331 ; RV64-NEXT: vor.vv v10, v12, v10
1332 ; RV64-NEXT: vsrl.vx v12, v8, a2
1333 ; RV64-NEXT: vsrl.vx v14, v8, a4
1334 ; RV64-NEXT: vand.vx v14, v14, a3
1335 ; RV64-NEXT: vor.vv v12, v14, v12
1336 ; RV64-NEXT: vsrl.vi v14, v8, 24
1337 ; RV64-NEXT: vand.vx v14, v14, a1
1338 ; RV64-NEXT: vsrl.vi v8, v8, 8
1339 ; RV64-NEXT: vand.vx v8, v8, a0
1340 ; RV64-NEXT: vor.vv v8, v8, v14
1341 ; RV64-NEXT: vor.vv v8, v8, v12
1342 ; RV64-NEXT: vor.vv v8, v10, v8
1343 ; RV64-NEXT: vsrl.vi v10, v8, 4
1344 ; RV64-NEXT: lui a0, 61681
1345 ; RV64-NEXT: addiw a0, a0, -241
1346 ; RV64-NEXT: slli a1, a0, 32
1347 ; RV64-NEXT: add a0, a0, a1
1348 ; RV64-NEXT: vand.vx v10, v10, a0
1349 ; RV64-NEXT: vand.vx v8, v8, a0
1350 ; RV64-NEXT: vsll.vi v8, v8, 4
1351 ; RV64-NEXT: vor.vv v8, v10, v8
1352 ; RV64-NEXT: vsrl.vi v10, v8, 2
1353 ; RV64-NEXT: lui a0, 209715
1354 ; RV64-NEXT: addiw a0, a0, 819
1355 ; RV64-NEXT: slli a1, a0, 32
1356 ; RV64-NEXT: add a0, a0, a1
1357 ; RV64-NEXT: vand.vx v10, v10, a0
1358 ; RV64-NEXT: vand.vx v8, v8, a0
1359 ; RV64-NEXT: vsll.vi v8, v8, 2
1360 ; RV64-NEXT: vor.vv v8, v10, v8
1361 ; RV64-NEXT: vsrl.vi v10, v8, 1
1362 ; RV64-NEXT: lui a0, 349525
1363 ; RV64-NEXT: addiw a0, a0, 1365
1364 ; RV64-NEXT: slli a1, a0, 32
1365 ; RV64-NEXT: add a0, a0, a1
1366 ; RV64-NEXT: vand.vx v10, v10, a0
1367 ; RV64-NEXT: vand.vx v8, v8, a0
1368 ; RV64-NEXT: vadd.vv v8, v8, v8
1369 ; RV64-NEXT: vor.vv v8, v10, v8
1371 %v = call <4 x i64> @llvm.vp.bitreverse.v4i64(<4 x i64> %va, <4 x i1> splat (i1 true), i32 %evl)
1375 declare <8 x i64> @llvm.vp.bitreverse.v8i64(<8 x i64>, <8 x i1>, i32)
1377 define <8 x i64> @vp_bitreverse_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1378 ; RV32-LABEL: vp_bitreverse_v8i64:
1380 ; RV32-NEXT: addi sp, sp, -16
1381 ; RV32-NEXT: .cfi_def_cfa_offset 16
1382 ; RV32-NEXT: sw zero, 12(sp)
1383 ; RV32-NEXT: lui a1, 1044480
1384 ; RV32-NEXT: sw a1, 8(sp)
1385 ; RV32-NEXT: li a1, 56
1386 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1387 ; RV32-NEXT: vsll.vx v12, v8, a1, v0.t
1388 ; RV32-NEXT: lui a2, 16
1389 ; RV32-NEXT: addi a2, a2, -256
1390 ; RV32-NEXT: vand.vx v16, v8, a2, v0.t
1391 ; RV32-NEXT: li a3, 40
1392 ; RV32-NEXT: vsll.vx v16, v16, a3, v0.t
1393 ; RV32-NEXT: vor.vv v16, v12, v16, v0.t
1394 ; RV32-NEXT: addi a4, sp, 8
1395 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
1396 ; RV32-NEXT: vlse64.v v12, (a4), zero
1397 ; RV32-NEXT: lui a4, 4080
1398 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1399 ; RV32-NEXT: vand.vx v20, v8, a4, v0.t
1400 ; RV32-NEXT: vsll.vi v20, v20, 24, v0.t
1401 ; RV32-NEXT: vand.vv v24, v8, v12, v0.t
1402 ; RV32-NEXT: vsll.vi v24, v24, 8, v0.t
1403 ; RV32-NEXT: vor.vv v20, v20, v24, v0.t
1404 ; RV32-NEXT: vor.vv v16, v16, v20, v0.t
1405 ; RV32-NEXT: vsrl.vx v20, v8, a1, v0.t
1406 ; RV32-NEXT: vsrl.vx v24, v8, a3, v0.t
1407 ; RV32-NEXT: vand.vx v24, v24, a2, v0.t
1408 ; RV32-NEXT: vor.vv v20, v24, v20, v0.t
1409 ; RV32-NEXT: vsrl.vi v24, v8, 24, v0.t
1410 ; RV32-NEXT: vand.vx v24, v24, a4, v0.t
1411 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
1412 ; RV32-NEXT: vand.vv v8, v8, v12, v0.t
1413 ; RV32-NEXT: vor.vv v8, v8, v24, v0.t
1414 ; RV32-NEXT: vor.vv v8, v8, v20, v0.t
1415 ; RV32-NEXT: vor.vv v8, v16, v8, v0.t
1416 ; RV32-NEXT: vsrl.vi v12, v8, 4, v0.t
1417 ; RV32-NEXT: lui a1, 61681
1418 ; RV32-NEXT: addi a1, a1, -241
1419 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1420 ; RV32-NEXT: vmv.v.x v16, a1
1421 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1422 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
1423 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1424 ; RV32-NEXT: vsll.vi v8, v8, 4, v0.t
1425 ; RV32-NEXT: vor.vv v8, v12, v8, v0.t
1426 ; RV32-NEXT: vsrl.vi v12, v8, 2, v0.t
1427 ; RV32-NEXT: lui a1, 209715
1428 ; RV32-NEXT: addi a1, a1, 819
1429 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1430 ; RV32-NEXT: vmv.v.x v16, a1
1431 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1432 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
1433 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1434 ; RV32-NEXT: vsll.vi v8, v8, 2, v0.t
1435 ; RV32-NEXT: vor.vv v8, v12, v8, v0.t
1436 ; RV32-NEXT: vsrl.vi v12, v8, 1, v0.t
1437 ; RV32-NEXT: lui a1, 349525
1438 ; RV32-NEXT: addi a1, a1, 1365
1439 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1440 ; RV32-NEXT: vmv.v.x v16, a1
1441 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1442 ; RV32-NEXT: vand.vv v12, v12, v16, v0.t
1443 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1444 ; RV32-NEXT: vsll.vi v8, v8, 1, v0.t
1445 ; RV32-NEXT: vor.vv v8, v12, v8, v0.t
1446 ; RV32-NEXT: addi sp, sp, 16
1449 ; RV64-LABEL: vp_bitreverse_v8i64:
1451 ; RV64-NEXT: lui a1, 4080
1452 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1453 ; RV64-NEXT: vand.vx v12, v8, a1, v0.t
1454 ; RV64-NEXT: vsll.vi v12, v12, 24, v0.t
1455 ; RV64-NEXT: li a0, 255
1456 ; RV64-NEXT: slli a0, a0, 24
1457 ; RV64-NEXT: vand.vx v16, v8, a0, v0.t
1458 ; RV64-NEXT: vsll.vi v16, v16, 8, v0.t
1459 ; RV64-NEXT: vor.vv v12, v12, v16, v0.t
1460 ; RV64-NEXT: li a2, 56
1461 ; RV64-NEXT: vsll.vx v16, v8, a2, v0.t
1462 ; RV64-NEXT: lui a3, 16
1463 ; RV64-NEXT: addiw a3, a3, -256
1464 ; RV64-NEXT: vand.vx v20, v8, a3, v0.t
1465 ; RV64-NEXT: li a4, 40
1466 ; RV64-NEXT: vsll.vx v20, v20, a4, v0.t
1467 ; RV64-NEXT: vor.vv v16, v16, v20, v0.t
1468 ; RV64-NEXT: vor.vv v12, v16, v12, v0.t
1469 ; RV64-NEXT: vsrl.vx v16, v8, a2, v0.t
1470 ; RV64-NEXT: vsrl.vx v20, v8, a4, v0.t
1471 ; RV64-NEXT: vand.vx v20, v20, a3, v0.t
1472 ; RV64-NEXT: vor.vv v16, v20, v16, v0.t
1473 ; RV64-NEXT: vsrl.vi v20, v8, 24, v0.t
1474 ; RV64-NEXT: vand.vx v20, v20, a1, v0.t
1475 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
1476 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1477 ; RV64-NEXT: vor.vv v8, v8, v20, v0.t
1478 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1479 ; RV64-NEXT: vor.vv v8, v12, v8, v0.t
1480 ; RV64-NEXT: vsrl.vi v12, v8, 4, v0.t
1481 ; RV64-NEXT: lui a0, 61681
1482 ; RV64-NEXT: addiw a0, a0, -241
1483 ; RV64-NEXT: slli a1, a0, 32
1484 ; RV64-NEXT: add a0, a0, a1
1485 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
1486 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1487 ; RV64-NEXT: vsll.vi v8, v8, 4, v0.t
1488 ; RV64-NEXT: vor.vv v8, v12, v8, v0.t
1489 ; RV64-NEXT: vsrl.vi v12, v8, 2, v0.t
1490 ; RV64-NEXT: lui a0, 209715
1491 ; RV64-NEXT: addiw a0, a0, 819
1492 ; RV64-NEXT: slli a1, a0, 32
1493 ; RV64-NEXT: add a0, a0, a1
1494 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
1495 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1496 ; RV64-NEXT: vsll.vi v8, v8, 2, v0.t
1497 ; RV64-NEXT: vor.vv v8, v12, v8, v0.t
1498 ; RV64-NEXT: vsrl.vi v12, v8, 1, v0.t
1499 ; RV64-NEXT: lui a0, 349525
1500 ; RV64-NEXT: addiw a0, a0, 1365
1501 ; RV64-NEXT: slli a1, a0, 32
1502 ; RV64-NEXT: add a0, a0, a1
1503 ; RV64-NEXT: vand.vx v12, v12, a0, v0.t
1504 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1505 ; RV64-NEXT: vsll.vi v8, v8, 1, v0.t
1506 ; RV64-NEXT: vor.vv v8, v12, v8, v0.t
1508 %v = call <8 x i64> @llvm.vp.bitreverse.v8i64(<8 x i64> %va, <8 x i1> %m, i32 %evl)
1512 define <8 x i64> @vp_bitreverse_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1513 ; RV32-LABEL: vp_bitreverse_v8i64_unmasked:
1515 ; RV32-NEXT: addi sp, sp, -16
1516 ; RV32-NEXT: .cfi_def_cfa_offset 16
1517 ; RV32-NEXT: sw zero, 12(sp)
1518 ; RV32-NEXT: lui a1, 1044480
1519 ; RV32-NEXT: sw a1, 8(sp)
1520 ; RV32-NEXT: li a1, 56
1521 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1522 ; RV32-NEXT: vsll.vx v12, v8, a1
1523 ; RV32-NEXT: lui a2, 16
1524 ; RV32-NEXT: addi a2, a2, -256
1525 ; RV32-NEXT: vand.vx v16, v8, a2
1526 ; RV32-NEXT: li a3, 40
1527 ; RV32-NEXT: vsll.vx v16, v16, a3
1528 ; RV32-NEXT: vor.vv v12, v12, v16
1529 ; RV32-NEXT: addi a4, sp, 8
1530 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
1531 ; RV32-NEXT: vlse64.v v16, (a4), zero
1532 ; RV32-NEXT: lui a4, 4080
1533 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1534 ; RV32-NEXT: vand.vx v20, v8, a4
1535 ; RV32-NEXT: vsll.vi v20, v20, 24
1536 ; RV32-NEXT: vand.vv v24, v8, v16
1537 ; RV32-NEXT: vsll.vi v24, v24, 8
1538 ; RV32-NEXT: vor.vv v20, v20, v24
1539 ; RV32-NEXT: vor.vv v12, v12, v20
1540 ; RV32-NEXT: vsrl.vx v20, v8, a1
1541 ; RV32-NEXT: vsrl.vx v24, v8, a3
1542 ; RV32-NEXT: vand.vx v24, v24, a2
1543 ; RV32-NEXT: vor.vv v20, v24, v20
1544 ; RV32-NEXT: vsrl.vi v24, v8, 24
1545 ; RV32-NEXT: vand.vx v24, v24, a4
1546 ; RV32-NEXT: vsrl.vi v8, v8, 8
1547 ; RV32-NEXT: vand.vv v8, v8, v16
1548 ; RV32-NEXT: vor.vv v8, v8, v24
1549 ; RV32-NEXT: vor.vv v8, v8, v20
1550 ; RV32-NEXT: vor.vv v8, v12, v8
1551 ; RV32-NEXT: vsrl.vi v12, v8, 4
1552 ; RV32-NEXT: lui a1, 61681
1553 ; RV32-NEXT: addi a1, a1, -241
1554 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1555 ; RV32-NEXT: vmv.v.x v16, a1
1556 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1557 ; RV32-NEXT: vand.vv v12, v12, v16
1558 ; RV32-NEXT: vand.vv v8, v8, v16
1559 ; RV32-NEXT: vsll.vi v8, v8, 4
1560 ; RV32-NEXT: vor.vv v8, v12, v8
1561 ; RV32-NEXT: vsrl.vi v12, v8, 2
1562 ; RV32-NEXT: lui a1, 209715
1563 ; RV32-NEXT: addi a1, a1, 819
1564 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1565 ; RV32-NEXT: vmv.v.x v16, a1
1566 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1567 ; RV32-NEXT: vand.vv v12, v12, v16
1568 ; RV32-NEXT: vand.vv v8, v8, v16
1569 ; RV32-NEXT: vsll.vi v8, v8, 2
1570 ; RV32-NEXT: vor.vv v8, v12, v8
1571 ; RV32-NEXT: vsrl.vi v12, v8, 1
1572 ; RV32-NEXT: lui a1, 349525
1573 ; RV32-NEXT: addi a1, a1, 1365
1574 ; RV32-NEXT: vsetivli zero, 16, e32, m4, ta, ma
1575 ; RV32-NEXT: vmv.v.x v16, a1
1576 ; RV32-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1577 ; RV32-NEXT: vand.vv v12, v12, v16
1578 ; RV32-NEXT: vand.vv v8, v8, v16
1579 ; RV32-NEXT: vadd.vv v8, v8, v8
1580 ; RV32-NEXT: vor.vv v8, v12, v8
1581 ; RV32-NEXT: addi sp, sp, 16
1584 ; RV64-LABEL: vp_bitreverse_v8i64_unmasked:
1586 ; RV64-NEXT: lui a1, 4080
1587 ; RV64-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1588 ; RV64-NEXT: vand.vx v12, v8, a1
1589 ; RV64-NEXT: vsll.vi v12, v12, 24
1590 ; RV64-NEXT: li a0, 255
1591 ; RV64-NEXT: slli a0, a0, 24
1592 ; RV64-NEXT: vand.vx v16, v8, a0
1593 ; RV64-NEXT: vsll.vi v16, v16, 8
1594 ; RV64-NEXT: vor.vv v12, v12, v16
1595 ; RV64-NEXT: li a2, 56
1596 ; RV64-NEXT: vsll.vx v16, v8, a2
1597 ; RV64-NEXT: lui a3, 16
1598 ; RV64-NEXT: addiw a3, a3, -256
1599 ; RV64-NEXT: vand.vx v20, v8, a3
1600 ; RV64-NEXT: li a4, 40
1601 ; RV64-NEXT: vsll.vx v20, v20, a4
1602 ; RV64-NEXT: vor.vv v16, v16, v20
1603 ; RV64-NEXT: vor.vv v12, v16, v12
1604 ; RV64-NEXT: vsrl.vx v16, v8, a2
1605 ; RV64-NEXT: vsrl.vx v20, v8, a4
1606 ; RV64-NEXT: vand.vx v20, v20, a3
1607 ; RV64-NEXT: vor.vv v16, v20, v16
1608 ; RV64-NEXT: vsrl.vi v20, v8, 24
1609 ; RV64-NEXT: vand.vx v20, v20, a1
1610 ; RV64-NEXT: vsrl.vi v8, v8, 8
1611 ; RV64-NEXT: vand.vx v8, v8, a0
1612 ; RV64-NEXT: vor.vv v8, v8, v20
1613 ; RV64-NEXT: vor.vv v8, v8, v16
1614 ; RV64-NEXT: vor.vv v8, v12, v8
1615 ; RV64-NEXT: vsrl.vi v12, v8, 4
1616 ; RV64-NEXT: lui a0, 61681
1617 ; RV64-NEXT: addiw a0, a0, -241
1618 ; RV64-NEXT: slli a1, a0, 32
1619 ; RV64-NEXT: add a0, a0, a1
1620 ; RV64-NEXT: vand.vx v12, v12, a0
1621 ; RV64-NEXT: vand.vx v8, v8, a0
1622 ; RV64-NEXT: vsll.vi v8, v8, 4
1623 ; RV64-NEXT: vor.vv v8, v12, v8
1624 ; RV64-NEXT: vsrl.vi v12, v8, 2
1625 ; RV64-NEXT: lui a0, 209715
1626 ; RV64-NEXT: addiw a0, a0, 819
1627 ; RV64-NEXT: slli a1, a0, 32
1628 ; RV64-NEXT: add a0, a0, a1
1629 ; RV64-NEXT: vand.vx v12, v12, a0
1630 ; RV64-NEXT: vand.vx v8, v8, a0
1631 ; RV64-NEXT: vsll.vi v8, v8, 2
1632 ; RV64-NEXT: vor.vv v8, v12, v8
1633 ; RV64-NEXT: vsrl.vi v12, v8, 1
1634 ; RV64-NEXT: lui a0, 349525
1635 ; RV64-NEXT: addiw a0, a0, 1365
1636 ; RV64-NEXT: slli a1, a0, 32
1637 ; RV64-NEXT: add a0, a0, a1
1638 ; RV64-NEXT: vand.vx v12, v12, a0
1639 ; RV64-NEXT: vand.vx v8, v8, a0
1640 ; RV64-NEXT: vadd.vv v8, v8, v8
1641 ; RV64-NEXT: vor.vv v8, v12, v8
1643 %v = call <8 x i64> @llvm.vp.bitreverse.v8i64(<8 x i64> %va, <8 x i1> splat (i1 true), i32 %evl)
1647 declare <15 x i64> @llvm.vp.bitreverse.v15i64(<15 x i64>, <15 x i1>, i32)
1649 define <15 x i64> @vp_bitreverse_v15i64(<15 x i64> %va, <15 x i1> %m, i32 zeroext %evl) {
1650 ; RV32-LABEL: vp_bitreverse_v15i64:
1652 ; RV32-NEXT: addi sp, sp, -48
1653 ; RV32-NEXT: .cfi_def_cfa_offset 48
1654 ; RV32-NEXT: csrr a1, vlenb
1655 ; RV32-NEXT: li a2, 24
1656 ; RV32-NEXT: mul a1, a1, a2
1657 ; RV32-NEXT: sub sp, sp, a1
1658 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 24 * vlenb
1659 ; RV32-NEXT: sw zero, 20(sp)
1660 ; RV32-NEXT: lui a1, 1044480
1661 ; RV32-NEXT: sw a1, 16(sp)
1662 ; RV32-NEXT: lui a1, 61681
1663 ; RV32-NEXT: addi a1, a1, -241
1664 ; RV32-NEXT: sw a1, 44(sp)
1665 ; RV32-NEXT: sw a1, 40(sp)
1666 ; RV32-NEXT: lui a1, 209715
1667 ; RV32-NEXT: addi a1, a1, 819
1668 ; RV32-NEXT: sw a1, 36(sp)
1669 ; RV32-NEXT: sw a1, 32(sp)
1670 ; RV32-NEXT: lui a1, 349525
1671 ; RV32-NEXT: addi a1, a1, 1365
1672 ; RV32-NEXT: sw a1, 28(sp)
1673 ; RV32-NEXT: sw a1, 24(sp)
1674 ; RV32-NEXT: li a1, 56
1675 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1676 ; RV32-NEXT: vsll.vx v16, v8, a1, v0.t
1677 ; RV32-NEXT: lui a2, 16
1678 ; RV32-NEXT: addi a2, a2, -256
1679 ; RV32-NEXT: vand.vx v24, v8, a2, v0.t
1680 ; RV32-NEXT: li a3, 40
1681 ; RV32-NEXT: vsll.vx v24, v24, a3, v0.t
1682 ; RV32-NEXT: vor.vv v16, v16, v24, v0.t
1683 ; RV32-NEXT: csrr a4, vlenb
1684 ; RV32-NEXT: slli a4, a4, 4
1685 ; RV32-NEXT: add a4, sp, a4
1686 ; RV32-NEXT: addi a4, a4, 48
1687 ; RV32-NEXT: vs8r.v v16, (a4) # Unknown-size Folded Spill
1688 ; RV32-NEXT: addi a4, sp, 16
1689 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1690 ; RV32-NEXT: vlse64.v v16, (a4), zero
1691 ; RV32-NEXT: csrr a4, vlenb
1692 ; RV32-NEXT: slli a4, a4, 3
1693 ; RV32-NEXT: add a4, sp, a4
1694 ; RV32-NEXT: addi a4, a4, 48
1695 ; RV32-NEXT: vs8r.v v16, (a4) # Unknown-size Folded Spill
1696 ; RV32-NEXT: lui a4, 4080
1697 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1698 ; RV32-NEXT: vand.vx v24, v8, a4, v0.t
1699 ; RV32-NEXT: vsll.vi v24, v24, 24, v0.t
1700 ; RV32-NEXT: addi a5, sp, 48
1701 ; RV32-NEXT: vs8r.v v24, (a5) # Unknown-size Folded Spill
1702 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
1703 ; RV32-NEXT: vsll.vi v16, v24, 8, v0.t
1704 ; RV32-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload
1705 ; RV32-NEXT: vor.vv v16, v24, v16, v0.t
1706 ; RV32-NEXT: csrr a5, vlenb
1707 ; RV32-NEXT: slli a5, a5, 4
1708 ; RV32-NEXT: add a5, sp, a5
1709 ; RV32-NEXT: addi a5, a5, 48
1710 ; RV32-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload
1711 ; RV32-NEXT: vor.vv v16, v24, v16, v0.t
1712 ; RV32-NEXT: csrr a5, vlenb
1713 ; RV32-NEXT: slli a5, a5, 4
1714 ; RV32-NEXT: add a5, sp, a5
1715 ; RV32-NEXT: addi a5, a5, 48
1716 ; RV32-NEXT: vs8r.v v16, (a5) # Unknown-size Folded Spill
1717 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
1718 ; RV32-NEXT: vsrl.vx v24, v8, a3, v0.t
1719 ; RV32-NEXT: vand.vx v24, v24, a2, v0.t
1720 ; RV32-NEXT: vor.vv v16, v24, v16, v0.t
1721 ; RV32-NEXT: addi a1, sp, 48
1722 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
1723 ; RV32-NEXT: vsrl.vi v24, v8, 24, v0.t
1724 ; RV32-NEXT: vand.vx v24, v24, a4, v0.t
1725 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
1726 ; RV32-NEXT: csrr a1, vlenb
1727 ; RV32-NEXT: slli a1, a1, 3
1728 ; RV32-NEXT: add a1, sp, a1
1729 ; RV32-NEXT: addi a1, a1, 48
1730 ; RV32-NEXT: vl8r.v v16, (a1) # Unknown-size Folded Reload
1731 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
1732 ; RV32-NEXT: vor.vv v8, v8, v24, v0.t
1733 ; RV32-NEXT: addi a1, sp, 40
1734 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1735 ; RV32-NEXT: vlse64.v v24, (a1), zero
1736 ; RV32-NEXT: addi a1, sp, 48
1737 ; RV32-NEXT: vl8r.v v16, (a1) # Unknown-size Folded Reload
1738 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1739 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1740 ; RV32-NEXT: csrr a1, vlenb
1741 ; RV32-NEXT: slli a1, a1, 4
1742 ; RV32-NEXT: add a1, sp, a1
1743 ; RV32-NEXT: addi a1, a1, 48
1744 ; RV32-NEXT: vl8r.v v16, (a1) # Unknown-size Folded Reload
1745 ; RV32-NEXT: vor.vv v16, v16, v8, v0.t
1746 ; RV32-NEXT: vsrl.vi v8, v16, 4, v0.t
1747 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
1748 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
1749 ; RV32-NEXT: addi a1, sp, 32
1750 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1751 ; RV32-NEXT: vlse64.v v24, (a1), zero
1752 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1753 ; RV32-NEXT: vsll.vi v16, v16, 4, v0.t
1754 ; RV32-NEXT: vor.vv v16, v8, v16, v0.t
1755 ; RV32-NEXT: vsrl.vi v8, v16, 2, v0.t
1756 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
1757 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
1758 ; RV32-NEXT: addi a1, sp, 24
1759 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1760 ; RV32-NEXT: vlse64.v v24, (a1), zero
1761 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1762 ; RV32-NEXT: vsll.vi v16, v16, 2, v0.t
1763 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
1764 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
1765 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
1766 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
1767 ; RV32-NEXT: vsll.vi v8, v8, 1, v0.t
1768 ; RV32-NEXT: vor.vv v8, v16, v8, v0.t
1769 ; RV32-NEXT: csrr a0, vlenb
1770 ; RV32-NEXT: li a1, 24
1771 ; RV32-NEXT: mul a0, a0, a1
1772 ; RV32-NEXT: add sp, sp, a0
1773 ; RV32-NEXT: addi sp, sp, 48
1776 ; RV64-LABEL: vp_bitreverse_v15i64:
1778 ; RV64-NEXT: addi sp, sp, -16
1779 ; RV64-NEXT: .cfi_def_cfa_offset 16
1780 ; RV64-NEXT: csrr a1, vlenb
1781 ; RV64-NEXT: slli a1, a1, 3
1782 ; RV64-NEXT: sub sp, sp, a1
1783 ; RV64-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1784 ; RV64-NEXT: lui a1, 4080
1785 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1786 ; RV64-NEXT: vand.vx v16, v8, a1, v0.t
1787 ; RV64-NEXT: vsll.vi v16, v16, 24, v0.t
1788 ; RV64-NEXT: li a0, 255
1789 ; RV64-NEXT: slli a0, a0, 24
1790 ; RV64-NEXT: vand.vx v24, v8, a0, v0.t
1791 ; RV64-NEXT: vsll.vi v24, v24, 8, v0.t
1792 ; RV64-NEXT: vor.vv v16, v16, v24, v0.t
1793 ; RV64-NEXT: addi a2, sp, 16
1794 ; RV64-NEXT: vs8r.v v16, (a2) # Unknown-size Folded Spill
1795 ; RV64-NEXT: li a2, 56
1796 ; RV64-NEXT: vsll.vx v24, v8, a2, v0.t
1797 ; RV64-NEXT: lui a3, 16
1798 ; RV64-NEXT: addiw a3, a3, -256
1799 ; RV64-NEXT: li a4, 40
1800 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
1801 ; RV64-NEXT: vsll.vx v16, v16, a4, v0.t
1802 ; RV64-NEXT: vor.vv v16, v24, v16, v0.t
1803 ; RV64-NEXT: addi a5, sp, 16
1804 ; RV64-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload
1805 ; RV64-NEXT: vor.vv v16, v16, v24, v0.t
1806 ; RV64-NEXT: vs8r.v v16, (a5) # Unknown-size Folded Spill
1807 ; RV64-NEXT: vsrl.vx v24, v8, a2, v0.t
1808 ; RV64-NEXT: vsrl.vx v16, v8, a4, v0.t
1809 ; RV64-NEXT: vand.vx v16, v16, a3, v0.t
1810 ; RV64-NEXT: vor.vv v24, v16, v24, v0.t
1811 ; RV64-NEXT: vsrl.vi v16, v8, 24, v0.t
1812 ; RV64-NEXT: vand.vx v16, v16, a1, v0.t
1813 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
1814 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1815 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
1816 ; RV64-NEXT: vor.vv v8, v8, v24, v0.t
1817 ; RV64-NEXT: addi a0, sp, 16
1818 ; RV64-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
1819 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
1820 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
1821 ; RV64-NEXT: lui a0, 61681
1822 ; RV64-NEXT: addiw a0, a0, -241
1823 ; RV64-NEXT: slli a1, a0, 32
1824 ; RV64-NEXT: add a0, a0, a1
1825 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1826 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1827 ; RV64-NEXT: vsll.vi v8, v8, 4, v0.t
1828 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
1829 ; RV64-NEXT: vsrl.vi v16, v8, 2, v0.t
1830 ; RV64-NEXT: lui a0, 209715
1831 ; RV64-NEXT: addiw a0, a0, 819
1832 ; RV64-NEXT: slli a1, a0, 32
1833 ; RV64-NEXT: add a0, a0, a1
1834 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1835 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1836 ; RV64-NEXT: vsll.vi v8, v8, 2, v0.t
1837 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
1838 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
1839 ; RV64-NEXT: lui a0, 349525
1840 ; RV64-NEXT: addiw a0, a0, 1365
1841 ; RV64-NEXT: slli a1, a0, 32
1842 ; RV64-NEXT: add a0, a0, a1
1843 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
1844 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
1845 ; RV64-NEXT: vsll.vi v8, v8, 1, v0.t
1846 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
1847 ; RV64-NEXT: csrr a0, vlenb
1848 ; RV64-NEXT: slli a0, a0, 3
1849 ; RV64-NEXT: add sp, sp, a0
1850 ; RV64-NEXT: addi sp, sp, 16
1852 %v = call <15 x i64> @llvm.vp.bitreverse.v15i64(<15 x i64> %va, <15 x i1> %m, i32 %evl)
1856 define <15 x i64> @vp_bitreverse_v15i64_unmasked(<15 x i64> %va, i32 zeroext %evl) {
1857 ; RV32-LABEL: vp_bitreverse_v15i64_unmasked:
1859 ; RV32-NEXT: addi sp, sp, -48
1860 ; RV32-NEXT: .cfi_def_cfa_offset 48
1861 ; RV32-NEXT: csrr a1, vlenb
1862 ; RV32-NEXT: slli a1, a1, 3
1863 ; RV32-NEXT: sub sp, sp, a1
1864 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 8 * vlenb
1865 ; RV32-NEXT: sw zero, 20(sp)
1866 ; RV32-NEXT: lui a1, 1044480
1867 ; RV32-NEXT: sw a1, 16(sp)
1868 ; RV32-NEXT: lui a1, 61681
1869 ; RV32-NEXT: addi a1, a1, -241
1870 ; RV32-NEXT: sw a1, 44(sp)
1871 ; RV32-NEXT: sw a1, 40(sp)
1872 ; RV32-NEXT: lui a1, 209715
1873 ; RV32-NEXT: addi a1, a1, 819
1874 ; RV32-NEXT: sw a1, 36(sp)
1875 ; RV32-NEXT: sw a1, 32(sp)
1876 ; RV32-NEXT: lui a1, 349525
1877 ; RV32-NEXT: addi a1, a1, 1365
1878 ; RV32-NEXT: sw a1, 28(sp)
1879 ; RV32-NEXT: sw a1, 24(sp)
1880 ; RV32-NEXT: li a1, 56
1881 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1882 ; RV32-NEXT: vsll.vx v16, v8, a1
1883 ; RV32-NEXT: lui a2, 16
1884 ; RV32-NEXT: addi a2, a2, -256
1885 ; RV32-NEXT: vand.vx v24, v8, a2
1886 ; RV32-NEXT: li a3, 40
1887 ; RV32-NEXT: vsll.vx v24, v24, a3
1888 ; RV32-NEXT: vor.vv v16, v16, v24
1889 ; RV32-NEXT: addi a4, sp, 48
1890 ; RV32-NEXT: vs8r.v v16, (a4) # Unknown-size Folded Spill
1891 ; RV32-NEXT: addi a4, sp, 16
1892 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1893 ; RV32-NEXT: vlse64.v v24, (a4), zero
1894 ; RV32-NEXT: lui a4, 4080
1895 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1896 ; RV32-NEXT: vand.vx v0, v8, a4
1897 ; RV32-NEXT: vsll.vi v0, v0, 24
1898 ; RV32-NEXT: vand.vv v16, v8, v24
1899 ; RV32-NEXT: vsll.vi v16, v16, 8
1900 ; RV32-NEXT: vor.vv v16, v0, v16
1901 ; RV32-NEXT: addi a5, sp, 48
1902 ; RV32-NEXT: vl8r.v v0, (a5) # Unknown-size Folded Reload
1903 ; RV32-NEXT: vor.vv v16, v0, v16
1904 ; RV32-NEXT: vs8r.v v16, (a5) # Unknown-size Folded Spill
1905 ; RV32-NEXT: vsrl.vx v0, v8, a3
1906 ; RV32-NEXT: vand.vx v0, v0, a2
1907 ; RV32-NEXT: vsrl.vx v16, v8, a1
1908 ; RV32-NEXT: vor.vv v0, v0, v16
1909 ; RV32-NEXT: vsrl.vi v16, v8, 8
1910 ; RV32-NEXT: vand.vv v16, v16, v24
1911 ; RV32-NEXT: vsrl.vi v8, v8, 24
1912 ; RV32-NEXT: vand.vx v8, v8, a4
1913 ; RV32-NEXT: vor.vv v8, v16, v8
1914 ; RV32-NEXT: addi a1, sp, 40
1915 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1916 ; RV32-NEXT: vlse64.v v16, (a1), zero
1917 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1918 ; RV32-NEXT: vor.vv v8, v8, v0
1919 ; RV32-NEXT: addi a1, sp, 48
1920 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
1921 ; RV32-NEXT: vor.vv v8, v24, v8
1922 ; RV32-NEXT: vsrl.vi v24, v8, 4
1923 ; RV32-NEXT: vand.vv v24, v24, v16
1924 ; RV32-NEXT: vand.vv v8, v8, v16
1925 ; RV32-NEXT: addi a1, sp, 32
1926 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1927 ; RV32-NEXT: vlse64.v v16, (a1), zero
1928 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1929 ; RV32-NEXT: vsll.vi v8, v8, 4
1930 ; RV32-NEXT: vor.vv v8, v24, v8
1931 ; RV32-NEXT: vsrl.vi v24, v8, 2
1932 ; RV32-NEXT: vand.vv v24, v24, v16
1933 ; RV32-NEXT: vand.vv v8, v8, v16
1934 ; RV32-NEXT: addi a1, sp, 24
1935 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
1936 ; RV32-NEXT: vlse64.v v16, (a1), zero
1937 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1938 ; RV32-NEXT: vsll.vi v8, v8, 2
1939 ; RV32-NEXT: vor.vv v8, v24, v8
1940 ; RV32-NEXT: vsrl.vi v24, v8, 1
1941 ; RV32-NEXT: vand.vv v24, v24, v16
1942 ; RV32-NEXT: vand.vv v8, v8, v16
1943 ; RV32-NEXT: vadd.vv v8, v8, v8
1944 ; RV32-NEXT: vor.vv v8, v24, v8
1945 ; RV32-NEXT: csrr a0, vlenb
1946 ; RV32-NEXT: slli a0, a0, 3
1947 ; RV32-NEXT: add sp, sp, a0
1948 ; RV32-NEXT: addi sp, sp, 48
1951 ; RV64-LABEL: vp_bitreverse_v15i64_unmasked:
1953 ; RV64-NEXT: lui a1, 4080
1954 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1955 ; RV64-NEXT: vand.vx v16, v8, a1
1956 ; RV64-NEXT: vsll.vi v16, v16, 24
1957 ; RV64-NEXT: li a0, 255
1958 ; RV64-NEXT: slli a0, a0, 24
1959 ; RV64-NEXT: vand.vx v24, v8, a0
1960 ; RV64-NEXT: vsll.vi v24, v24, 8
1961 ; RV64-NEXT: vor.vv v16, v16, v24
1962 ; RV64-NEXT: li a2, 56
1963 ; RV64-NEXT: vsll.vx v24, v8, a2
1964 ; RV64-NEXT: lui a3, 16
1965 ; RV64-NEXT: addiw a3, a3, -256
1966 ; RV64-NEXT: vand.vx v0, v8, a3
1967 ; RV64-NEXT: li a4, 40
1968 ; RV64-NEXT: vsll.vx v0, v0, a4
1969 ; RV64-NEXT: vor.vv v24, v24, v0
1970 ; RV64-NEXT: vor.vv v16, v24, v16
1971 ; RV64-NEXT: vsrl.vx v24, v8, a2
1972 ; RV64-NEXT: vsrl.vx v0, v8, a4
1973 ; RV64-NEXT: vand.vx v0, v0, a3
1974 ; RV64-NEXT: vor.vv v24, v0, v24
1975 ; RV64-NEXT: vsrl.vi v0, v8, 24
1976 ; RV64-NEXT: vand.vx v0, v0, a1
1977 ; RV64-NEXT: vsrl.vi v8, v8, 8
1978 ; RV64-NEXT: vand.vx v8, v8, a0
1979 ; RV64-NEXT: vor.vv v8, v8, v0
1980 ; RV64-NEXT: vor.vv v8, v8, v24
1981 ; RV64-NEXT: vor.vv v8, v16, v8
1982 ; RV64-NEXT: vsrl.vi v16, v8, 4
1983 ; RV64-NEXT: lui a0, 61681
1984 ; RV64-NEXT: addiw a0, a0, -241
1985 ; RV64-NEXT: slli a1, a0, 32
1986 ; RV64-NEXT: add a0, a0, a1
1987 ; RV64-NEXT: vand.vx v16, v16, a0
1988 ; RV64-NEXT: vand.vx v8, v8, a0
1989 ; RV64-NEXT: vsll.vi v8, v8, 4
1990 ; RV64-NEXT: vor.vv v8, v16, v8
1991 ; RV64-NEXT: vsrl.vi v16, v8, 2
1992 ; RV64-NEXT: lui a0, 209715
1993 ; RV64-NEXT: addiw a0, a0, 819
1994 ; RV64-NEXT: slli a1, a0, 32
1995 ; RV64-NEXT: add a0, a0, a1
1996 ; RV64-NEXT: vand.vx v16, v16, a0
1997 ; RV64-NEXT: vand.vx v8, v8, a0
1998 ; RV64-NEXT: vsll.vi v8, v8, 2
1999 ; RV64-NEXT: vor.vv v8, v16, v8
2000 ; RV64-NEXT: vsrl.vi v16, v8, 1
2001 ; RV64-NEXT: lui a0, 349525
2002 ; RV64-NEXT: addiw a0, a0, 1365
2003 ; RV64-NEXT: slli a1, a0, 32
2004 ; RV64-NEXT: add a0, a0, a1
2005 ; RV64-NEXT: vand.vx v16, v16, a0
2006 ; RV64-NEXT: vand.vx v8, v8, a0
2007 ; RV64-NEXT: vadd.vv v8, v8, v8
2008 ; RV64-NEXT: vor.vv v8, v16, v8
2010 %v = call <15 x i64> @llvm.vp.bitreverse.v15i64(<15 x i64> %va, <15 x i1> splat (i1 true), i32 %evl)
2014 declare <16 x i64> @llvm.vp.bitreverse.v16i64(<16 x i64>, <16 x i1>, i32)
2016 define <16 x i64> @vp_bitreverse_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
2017 ; RV32-LABEL: vp_bitreverse_v16i64:
2019 ; RV32-NEXT: addi sp, sp, -48
2020 ; RV32-NEXT: .cfi_def_cfa_offset 48
2021 ; RV32-NEXT: csrr a1, vlenb
2022 ; RV32-NEXT: li a2, 24
2023 ; RV32-NEXT: mul a1, a1, a2
2024 ; RV32-NEXT: sub sp, sp, a1
2025 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 24 * vlenb
2026 ; RV32-NEXT: sw zero, 20(sp)
2027 ; RV32-NEXT: lui a1, 1044480
2028 ; RV32-NEXT: sw a1, 16(sp)
2029 ; RV32-NEXT: lui a1, 61681
2030 ; RV32-NEXT: addi a1, a1, -241
2031 ; RV32-NEXT: sw a1, 44(sp)
2032 ; RV32-NEXT: sw a1, 40(sp)
2033 ; RV32-NEXT: lui a1, 209715
2034 ; RV32-NEXT: addi a1, a1, 819
2035 ; RV32-NEXT: sw a1, 36(sp)
2036 ; RV32-NEXT: sw a1, 32(sp)
2037 ; RV32-NEXT: lui a1, 349525
2038 ; RV32-NEXT: addi a1, a1, 1365
2039 ; RV32-NEXT: sw a1, 28(sp)
2040 ; RV32-NEXT: sw a1, 24(sp)
2041 ; RV32-NEXT: li a1, 56
2042 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2043 ; RV32-NEXT: vsll.vx v16, v8, a1, v0.t
2044 ; RV32-NEXT: lui a2, 16
2045 ; RV32-NEXT: addi a2, a2, -256
2046 ; RV32-NEXT: vand.vx v24, v8, a2, v0.t
2047 ; RV32-NEXT: li a3, 40
2048 ; RV32-NEXT: vsll.vx v24, v24, a3, v0.t
2049 ; RV32-NEXT: vor.vv v16, v16, v24, v0.t
2050 ; RV32-NEXT: csrr a4, vlenb
2051 ; RV32-NEXT: slli a4, a4, 4
2052 ; RV32-NEXT: add a4, sp, a4
2053 ; RV32-NEXT: addi a4, a4, 48
2054 ; RV32-NEXT: vs8r.v v16, (a4) # Unknown-size Folded Spill
2055 ; RV32-NEXT: addi a4, sp, 16
2056 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2057 ; RV32-NEXT: vlse64.v v16, (a4), zero
2058 ; RV32-NEXT: csrr a4, vlenb
2059 ; RV32-NEXT: slli a4, a4, 3
2060 ; RV32-NEXT: add a4, sp, a4
2061 ; RV32-NEXT: addi a4, a4, 48
2062 ; RV32-NEXT: vs8r.v v16, (a4) # Unknown-size Folded Spill
2063 ; RV32-NEXT: lui a4, 4080
2064 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2065 ; RV32-NEXT: vand.vx v24, v8, a4, v0.t
2066 ; RV32-NEXT: vsll.vi v24, v24, 24, v0.t
2067 ; RV32-NEXT: addi a5, sp, 48
2068 ; RV32-NEXT: vs8r.v v24, (a5) # Unknown-size Folded Spill
2069 ; RV32-NEXT: vand.vv v24, v8, v16, v0.t
2070 ; RV32-NEXT: vsll.vi v16, v24, 8, v0.t
2071 ; RV32-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload
2072 ; RV32-NEXT: vor.vv v16, v24, v16, v0.t
2073 ; RV32-NEXT: csrr a5, vlenb
2074 ; RV32-NEXT: slli a5, a5, 4
2075 ; RV32-NEXT: add a5, sp, a5
2076 ; RV32-NEXT: addi a5, a5, 48
2077 ; RV32-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload
2078 ; RV32-NEXT: vor.vv v16, v24, v16, v0.t
2079 ; RV32-NEXT: csrr a5, vlenb
2080 ; RV32-NEXT: slli a5, a5, 4
2081 ; RV32-NEXT: add a5, sp, a5
2082 ; RV32-NEXT: addi a5, a5, 48
2083 ; RV32-NEXT: vs8r.v v16, (a5) # Unknown-size Folded Spill
2084 ; RV32-NEXT: vsrl.vx v16, v8, a1, v0.t
2085 ; RV32-NEXT: vsrl.vx v24, v8, a3, v0.t
2086 ; RV32-NEXT: vand.vx v24, v24, a2, v0.t
2087 ; RV32-NEXT: vor.vv v16, v24, v16, v0.t
2088 ; RV32-NEXT: addi a1, sp, 48
2089 ; RV32-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
2090 ; RV32-NEXT: vsrl.vi v24, v8, 24, v0.t
2091 ; RV32-NEXT: vand.vx v24, v24, a4, v0.t
2092 ; RV32-NEXT: vsrl.vi v8, v8, 8, v0.t
2093 ; RV32-NEXT: csrr a1, vlenb
2094 ; RV32-NEXT: slli a1, a1, 3
2095 ; RV32-NEXT: add a1, sp, a1
2096 ; RV32-NEXT: addi a1, a1, 48
2097 ; RV32-NEXT: vl8r.v v16, (a1) # Unknown-size Folded Reload
2098 ; RV32-NEXT: vand.vv v8, v8, v16, v0.t
2099 ; RV32-NEXT: vor.vv v8, v8, v24, v0.t
2100 ; RV32-NEXT: addi a1, sp, 40
2101 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2102 ; RV32-NEXT: vlse64.v v24, (a1), zero
2103 ; RV32-NEXT: addi a1, sp, 48
2104 ; RV32-NEXT: vl8r.v v16, (a1) # Unknown-size Folded Reload
2105 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2106 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2107 ; RV32-NEXT: csrr a1, vlenb
2108 ; RV32-NEXT: slli a1, a1, 4
2109 ; RV32-NEXT: add a1, sp, a1
2110 ; RV32-NEXT: addi a1, a1, 48
2111 ; RV32-NEXT: vl8r.v v16, (a1) # Unknown-size Folded Reload
2112 ; RV32-NEXT: vor.vv v16, v16, v8, v0.t
2113 ; RV32-NEXT: vsrl.vi v8, v16, 4, v0.t
2114 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
2115 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
2116 ; RV32-NEXT: addi a1, sp, 32
2117 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2118 ; RV32-NEXT: vlse64.v v24, (a1), zero
2119 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2120 ; RV32-NEXT: vsll.vi v16, v16, 4, v0.t
2121 ; RV32-NEXT: vor.vv v16, v8, v16, v0.t
2122 ; RV32-NEXT: vsrl.vi v8, v16, 2, v0.t
2123 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
2124 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
2125 ; RV32-NEXT: addi a1, sp, 24
2126 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2127 ; RV32-NEXT: vlse64.v v24, (a1), zero
2128 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2129 ; RV32-NEXT: vsll.vi v16, v16, 2, v0.t
2130 ; RV32-NEXT: vor.vv v8, v8, v16, v0.t
2131 ; RV32-NEXT: vsrl.vi v16, v8, 1, v0.t
2132 ; RV32-NEXT: vand.vv v16, v16, v24, v0.t
2133 ; RV32-NEXT: vand.vv v8, v8, v24, v0.t
2134 ; RV32-NEXT: vsll.vi v8, v8, 1, v0.t
2135 ; RV32-NEXT: vor.vv v8, v16, v8, v0.t
2136 ; RV32-NEXT: csrr a0, vlenb
2137 ; RV32-NEXT: li a1, 24
2138 ; RV32-NEXT: mul a0, a0, a1
2139 ; RV32-NEXT: add sp, sp, a0
2140 ; RV32-NEXT: addi sp, sp, 48
2143 ; RV64-LABEL: vp_bitreverse_v16i64:
2145 ; RV64-NEXT: addi sp, sp, -16
2146 ; RV64-NEXT: .cfi_def_cfa_offset 16
2147 ; RV64-NEXT: csrr a1, vlenb
2148 ; RV64-NEXT: slli a1, a1, 3
2149 ; RV64-NEXT: sub sp, sp, a1
2150 ; RV64-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
2151 ; RV64-NEXT: lui a1, 4080
2152 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2153 ; RV64-NEXT: vand.vx v16, v8, a1, v0.t
2154 ; RV64-NEXT: vsll.vi v16, v16, 24, v0.t
2155 ; RV64-NEXT: li a0, 255
2156 ; RV64-NEXT: slli a0, a0, 24
2157 ; RV64-NEXT: vand.vx v24, v8, a0, v0.t
2158 ; RV64-NEXT: vsll.vi v24, v24, 8, v0.t
2159 ; RV64-NEXT: vor.vv v16, v16, v24, v0.t
2160 ; RV64-NEXT: addi a2, sp, 16
2161 ; RV64-NEXT: vs8r.v v16, (a2) # Unknown-size Folded Spill
2162 ; RV64-NEXT: li a2, 56
2163 ; RV64-NEXT: vsll.vx v24, v8, a2, v0.t
2164 ; RV64-NEXT: lui a3, 16
2165 ; RV64-NEXT: addiw a3, a3, -256
2166 ; RV64-NEXT: li a4, 40
2167 ; RV64-NEXT: vand.vx v16, v8, a3, v0.t
2168 ; RV64-NEXT: vsll.vx v16, v16, a4, v0.t
2169 ; RV64-NEXT: vor.vv v16, v24, v16, v0.t
2170 ; RV64-NEXT: addi a5, sp, 16
2171 ; RV64-NEXT: vl8r.v v24, (a5) # Unknown-size Folded Reload
2172 ; RV64-NEXT: vor.vv v16, v16, v24, v0.t
2173 ; RV64-NEXT: vs8r.v v16, (a5) # Unknown-size Folded Spill
2174 ; RV64-NEXT: vsrl.vx v24, v8, a2, v0.t
2175 ; RV64-NEXT: vsrl.vx v16, v8, a4, v0.t
2176 ; RV64-NEXT: vand.vx v16, v16, a3, v0.t
2177 ; RV64-NEXT: vor.vv v24, v16, v24, v0.t
2178 ; RV64-NEXT: vsrl.vi v16, v8, 24, v0.t
2179 ; RV64-NEXT: vand.vx v16, v16, a1, v0.t
2180 ; RV64-NEXT: vsrl.vi v8, v8, 8, v0.t
2181 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
2182 ; RV64-NEXT: vor.vv v8, v8, v16, v0.t
2183 ; RV64-NEXT: vor.vv v8, v8, v24, v0.t
2184 ; RV64-NEXT: addi a0, sp, 16
2185 ; RV64-NEXT: vl8r.v v16, (a0) # Unknown-size Folded Reload
2186 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
2187 ; RV64-NEXT: vsrl.vi v16, v8, 4, v0.t
2188 ; RV64-NEXT: lui a0, 61681
2189 ; RV64-NEXT: addiw a0, a0, -241
2190 ; RV64-NEXT: slli a1, a0, 32
2191 ; RV64-NEXT: add a0, a0, a1
2192 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
2193 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
2194 ; RV64-NEXT: vsll.vi v8, v8, 4, v0.t
2195 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
2196 ; RV64-NEXT: vsrl.vi v16, v8, 2, v0.t
2197 ; RV64-NEXT: lui a0, 209715
2198 ; RV64-NEXT: addiw a0, a0, 819
2199 ; RV64-NEXT: slli a1, a0, 32
2200 ; RV64-NEXT: add a0, a0, a1
2201 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
2202 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
2203 ; RV64-NEXT: vsll.vi v8, v8, 2, v0.t
2204 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
2205 ; RV64-NEXT: vsrl.vi v16, v8, 1, v0.t
2206 ; RV64-NEXT: lui a0, 349525
2207 ; RV64-NEXT: addiw a0, a0, 1365
2208 ; RV64-NEXT: slli a1, a0, 32
2209 ; RV64-NEXT: add a0, a0, a1
2210 ; RV64-NEXT: vand.vx v16, v16, a0, v0.t
2211 ; RV64-NEXT: vand.vx v8, v8, a0, v0.t
2212 ; RV64-NEXT: vsll.vi v8, v8, 1, v0.t
2213 ; RV64-NEXT: vor.vv v8, v16, v8, v0.t
2214 ; RV64-NEXT: csrr a0, vlenb
2215 ; RV64-NEXT: slli a0, a0, 3
2216 ; RV64-NEXT: add sp, sp, a0
2217 ; RV64-NEXT: addi sp, sp, 16
2219 %v = call <16 x i64> @llvm.vp.bitreverse.v16i64(<16 x i64> %va, <16 x i1> %m, i32 %evl)
2223 define <16 x i64> @vp_bitreverse_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
2224 ; RV32-LABEL: vp_bitreverse_v16i64_unmasked:
2226 ; RV32-NEXT: addi sp, sp, -48
2227 ; RV32-NEXT: .cfi_def_cfa_offset 48
2228 ; RV32-NEXT: csrr a1, vlenb
2229 ; RV32-NEXT: slli a1, a1, 3
2230 ; RV32-NEXT: sub sp, sp, a1
2231 ; RV32-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x30, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 48 + 8 * vlenb
2232 ; RV32-NEXT: sw zero, 20(sp)
2233 ; RV32-NEXT: lui a1, 1044480
2234 ; RV32-NEXT: sw a1, 16(sp)
2235 ; RV32-NEXT: lui a1, 61681
2236 ; RV32-NEXT: addi a1, a1, -241
2237 ; RV32-NEXT: sw a1, 44(sp)
2238 ; RV32-NEXT: sw a1, 40(sp)
2239 ; RV32-NEXT: lui a1, 209715
2240 ; RV32-NEXT: addi a1, a1, 819
2241 ; RV32-NEXT: sw a1, 36(sp)
2242 ; RV32-NEXT: sw a1, 32(sp)
2243 ; RV32-NEXT: lui a1, 349525
2244 ; RV32-NEXT: addi a1, a1, 1365
2245 ; RV32-NEXT: sw a1, 28(sp)
2246 ; RV32-NEXT: sw a1, 24(sp)
2247 ; RV32-NEXT: li a1, 56
2248 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2249 ; RV32-NEXT: vsll.vx v16, v8, a1
2250 ; RV32-NEXT: lui a2, 16
2251 ; RV32-NEXT: addi a2, a2, -256
2252 ; RV32-NEXT: vand.vx v24, v8, a2
2253 ; RV32-NEXT: li a3, 40
2254 ; RV32-NEXT: vsll.vx v24, v24, a3
2255 ; RV32-NEXT: vor.vv v16, v16, v24
2256 ; RV32-NEXT: addi a4, sp, 48
2257 ; RV32-NEXT: vs8r.v v16, (a4) # Unknown-size Folded Spill
2258 ; RV32-NEXT: addi a4, sp, 16
2259 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2260 ; RV32-NEXT: vlse64.v v24, (a4), zero
2261 ; RV32-NEXT: lui a4, 4080
2262 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2263 ; RV32-NEXT: vand.vx v0, v8, a4
2264 ; RV32-NEXT: vsll.vi v0, v0, 24
2265 ; RV32-NEXT: vand.vv v16, v8, v24
2266 ; RV32-NEXT: vsll.vi v16, v16, 8
2267 ; RV32-NEXT: vor.vv v16, v0, v16
2268 ; RV32-NEXT: addi a5, sp, 48
2269 ; RV32-NEXT: vl8r.v v0, (a5) # Unknown-size Folded Reload
2270 ; RV32-NEXT: vor.vv v16, v0, v16
2271 ; RV32-NEXT: vs8r.v v16, (a5) # Unknown-size Folded Spill
2272 ; RV32-NEXT: vsrl.vx v0, v8, a3
2273 ; RV32-NEXT: vand.vx v0, v0, a2
2274 ; RV32-NEXT: vsrl.vx v16, v8, a1
2275 ; RV32-NEXT: vor.vv v0, v0, v16
2276 ; RV32-NEXT: vsrl.vi v16, v8, 8
2277 ; RV32-NEXT: vand.vv v16, v16, v24
2278 ; RV32-NEXT: vsrl.vi v8, v8, 24
2279 ; RV32-NEXT: vand.vx v8, v8, a4
2280 ; RV32-NEXT: vor.vv v8, v16, v8
2281 ; RV32-NEXT: addi a1, sp, 40
2282 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2283 ; RV32-NEXT: vlse64.v v16, (a1), zero
2284 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2285 ; RV32-NEXT: vor.vv v8, v8, v0
2286 ; RV32-NEXT: addi a1, sp, 48
2287 ; RV32-NEXT: vl8r.v v24, (a1) # Unknown-size Folded Reload
2288 ; RV32-NEXT: vor.vv v8, v24, v8
2289 ; RV32-NEXT: vsrl.vi v24, v8, 4
2290 ; RV32-NEXT: vand.vv v24, v24, v16
2291 ; RV32-NEXT: vand.vv v8, v8, v16
2292 ; RV32-NEXT: addi a1, sp, 32
2293 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2294 ; RV32-NEXT: vlse64.v v16, (a1), zero
2295 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2296 ; RV32-NEXT: vsll.vi v8, v8, 4
2297 ; RV32-NEXT: vor.vv v8, v24, v8
2298 ; RV32-NEXT: vsrl.vi v24, v8, 2
2299 ; RV32-NEXT: vand.vv v24, v24, v16
2300 ; RV32-NEXT: vand.vv v8, v8, v16
2301 ; RV32-NEXT: addi a1, sp, 24
2302 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
2303 ; RV32-NEXT: vlse64.v v16, (a1), zero
2304 ; RV32-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2305 ; RV32-NEXT: vsll.vi v8, v8, 2
2306 ; RV32-NEXT: vor.vv v8, v24, v8
2307 ; RV32-NEXT: vsrl.vi v24, v8, 1
2308 ; RV32-NEXT: vand.vv v24, v24, v16
2309 ; RV32-NEXT: vand.vv v8, v8, v16
2310 ; RV32-NEXT: vadd.vv v8, v8, v8
2311 ; RV32-NEXT: vor.vv v8, v24, v8
2312 ; RV32-NEXT: csrr a0, vlenb
2313 ; RV32-NEXT: slli a0, a0, 3
2314 ; RV32-NEXT: add sp, sp, a0
2315 ; RV32-NEXT: addi sp, sp, 48
2318 ; RV64-LABEL: vp_bitreverse_v16i64_unmasked:
2320 ; RV64-NEXT: lui a1, 4080
2321 ; RV64-NEXT: vsetvli zero, a0, e64, m8, ta, ma
2322 ; RV64-NEXT: vand.vx v16, v8, a1
2323 ; RV64-NEXT: vsll.vi v16, v16, 24
2324 ; RV64-NEXT: li a0, 255
2325 ; RV64-NEXT: slli a0, a0, 24
2326 ; RV64-NEXT: vand.vx v24, v8, a0
2327 ; RV64-NEXT: vsll.vi v24, v24, 8
2328 ; RV64-NEXT: vor.vv v16, v16, v24
2329 ; RV64-NEXT: li a2, 56
2330 ; RV64-NEXT: vsll.vx v24, v8, a2
2331 ; RV64-NEXT: lui a3, 16
2332 ; RV64-NEXT: addiw a3, a3, -256
2333 ; RV64-NEXT: vand.vx v0, v8, a3
2334 ; RV64-NEXT: li a4, 40
2335 ; RV64-NEXT: vsll.vx v0, v0, a4
2336 ; RV64-NEXT: vor.vv v24, v24, v0
2337 ; RV64-NEXT: vor.vv v16, v24, v16
2338 ; RV64-NEXT: vsrl.vx v24, v8, a2
2339 ; RV64-NEXT: vsrl.vx v0, v8, a4
2340 ; RV64-NEXT: vand.vx v0, v0, a3
2341 ; RV64-NEXT: vor.vv v24, v0, v24
2342 ; RV64-NEXT: vsrl.vi v0, v8, 24
2343 ; RV64-NEXT: vand.vx v0, v0, a1
2344 ; RV64-NEXT: vsrl.vi v8, v8, 8
2345 ; RV64-NEXT: vand.vx v8, v8, a0
2346 ; RV64-NEXT: vor.vv v8, v8, v0
2347 ; RV64-NEXT: vor.vv v8, v8, v24
2348 ; RV64-NEXT: vor.vv v8, v16, v8
2349 ; RV64-NEXT: vsrl.vi v16, v8, 4
2350 ; RV64-NEXT: lui a0, 61681
2351 ; RV64-NEXT: addiw a0, a0, -241
2352 ; RV64-NEXT: slli a1, a0, 32
2353 ; RV64-NEXT: add a0, a0, a1
2354 ; RV64-NEXT: vand.vx v16, v16, a0
2355 ; RV64-NEXT: vand.vx v8, v8, a0
2356 ; RV64-NEXT: vsll.vi v8, v8, 4
2357 ; RV64-NEXT: vor.vv v8, v16, v8
2358 ; RV64-NEXT: vsrl.vi v16, v8, 2
2359 ; RV64-NEXT: lui a0, 209715
2360 ; RV64-NEXT: addiw a0, a0, 819
2361 ; RV64-NEXT: slli a1, a0, 32
2362 ; RV64-NEXT: add a0, a0, a1
2363 ; RV64-NEXT: vand.vx v16, v16, a0
2364 ; RV64-NEXT: vand.vx v8, v8, a0
2365 ; RV64-NEXT: vsll.vi v8, v8, 2
2366 ; RV64-NEXT: vor.vv v8, v16, v8
2367 ; RV64-NEXT: vsrl.vi v16, v8, 1
2368 ; RV64-NEXT: lui a0, 349525
2369 ; RV64-NEXT: addiw a0, a0, 1365
2370 ; RV64-NEXT: slli a1, a0, 32
2371 ; RV64-NEXT: add a0, a0, a1
2372 ; RV64-NEXT: vand.vx v16, v16, a0
2373 ; RV64-NEXT: vand.vx v8, v8, a0
2374 ; RV64-NEXT: vadd.vv v8, v8, v8
2375 ; RV64-NEXT: vor.vv v8, v16, v8
2377 %v = call <16 x i64> @llvm.vp.bitreverse.v16i64(<16 x i64> %va, <16 x i1> splat (i1 true), i32 %evl)
2381 declare <128 x i16> @llvm.vp.bitreverse.v128i16(<128 x i16>, <128 x i1>, i32)
2383 define <128 x i16> @vp_bitreverse_v128i16(<128 x i16> %va, <128 x i1> %m, i32 zeroext %evl) {
2384 ; CHECK-LABEL: vp_bitreverse_v128i16:
2386 ; CHECK-NEXT: addi sp, sp, -16
2387 ; CHECK-NEXT: .cfi_def_cfa_offset 16
2388 ; CHECK-NEXT: csrr a1, vlenb
2389 ; CHECK-NEXT: slli a1, a1, 4
2390 ; CHECK-NEXT: sub sp, sp, a1
2391 ; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
2392 ; CHECK-NEXT: csrr a1, vlenb
2393 ; CHECK-NEXT: slli a1, a1, 3
2394 ; CHECK-NEXT: add a1, sp, a1
2395 ; CHECK-NEXT: addi a1, a1, 16
2396 ; CHECK-NEXT: vs8r.v v16, (a1) # Unknown-size Folded Spill
2397 ; CHECK-NEXT: li a2, 64
2398 ; CHECK-NEXT: vsetivli zero, 8, e8, m1, ta, ma
2399 ; CHECK-NEXT: vslidedown.vi v24, v0, 8
2400 ; CHECK-NEXT: mv a1, a0
2401 ; CHECK-NEXT: bltu a0, a2, .LBB34_2
2402 ; CHECK-NEXT: # %bb.1:
2403 ; CHECK-NEXT: li a1, 64
2404 ; CHECK-NEXT: .LBB34_2:
2405 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
2406 ; CHECK-NEXT: vsrl.vi v16, v8, 8, v0.t
2407 ; CHECK-NEXT: vsll.vi v8, v8, 8, v0.t
2408 ; CHECK-NEXT: vor.vv v8, v8, v16, v0.t
2409 ; CHECK-NEXT: vsrl.vi v16, v8, 4, v0.t
2410 ; CHECK-NEXT: lui a1, 1
2411 ; CHECK-NEXT: addi a1, a1, -241
2412 ; CHECK-NEXT: vand.vx v16, v16, a1, v0.t
2413 ; CHECK-NEXT: vand.vx v8, v8, a1, v0.t
2414 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
2415 ; CHECK-NEXT: vor.vv v8, v16, v8, v0.t
2416 ; CHECK-NEXT: vsrl.vi v16, v8, 2, v0.t
2417 ; CHECK-NEXT: lui a2, 3
2418 ; CHECK-NEXT: addi a2, a2, 819
2419 ; CHECK-NEXT: vand.vx v16, v16, a2, v0.t
2420 ; CHECK-NEXT: vand.vx v8, v8, a2, v0.t
2421 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
2422 ; CHECK-NEXT: vor.vv v8, v16, v8, v0.t
2423 ; CHECK-NEXT: vsrl.vi v16, v8, 1, v0.t
2424 ; CHECK-NEXT: lui a3, 5
2425 ; CHECK-NEXT: addi a3, a3, 1365
2426 ; CHECK-NEXT: vand.vx v16, v16, a3, v0.t
2427 ; CHECK-NEXT: vand.vx v8, v8, a3, v0.t
2428 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
2429 ; CHECK-NEXT: vor.vv v8, v16, v8, v0.t
2430 ; CHECK-NEXT: addi a4, sp, 16
2431 ; CHECK-NEXT: vs8r.v v8, (a4) # Unknown-size Folded Spill
2432 ; CHECK-NEXT: addi a4, a0, -64
2433 ; CHECK-NEXT: sltu a0, a0, a4
2434 ; CHECK-NEXT: addi a0, a0, -1
2435 ; CHECK-NEXT: and a0, a0, a4
2436 ; CHECK-NEXT: vmv1r.v v0, v24
2437 ; CHECK-NEXT: csrr a4, vlenb
2438 ; CHECK-NEXT: slli a4, a4, 3
2439 ; CHECK-NEXT: add a4, sp, a4
2440 ; CHECK-NEXT: addi a4, a4, 16
2441 ; CHECK-NEXT: vl8r.v v8, (a4) # Unknown-size Folded Reload
2442 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
2443 ; CHECK-NEXT: vsrl.vi v16, v8, 8, v0.t
2444 ; CHECK-NEXT: vsll.vi v8, v8, 8, v0.t
2445 ; CHECK-NEXT: vor.vv v8, v8, v16, v0.t
2446 ; CHECK-NEXT: vsrl.vi v16, v8, 4, v0.t
2447 ; CHECK-NEXT: vand.vx v16, v16, a1, v0.t
2448 ; CHECK-NEXT: vand.vx v8, v8, a1, v0.t
2449 ; CHECK-NEXT: vsll.vi v8, v8, 4, v0.t
2450 ; CHECK-NEXT: vor.vv v8, v16, v8, v0.t
2451 ; CHECK-NEXT: vsrl.vi v16, v8, 2, v0.t
2452 ; CHECK-NEXT: vand.vx v16, v16, a2, v0.t
2453 ; CHECK-NEXT: vand.vx v8, v8, a2, v0.t
2454 ; CHECK-NEXT: vsll.vi v8, v8, 2, v0.t
2455 ; CHECK-NEXT: vor.vv v8, v16, v8, v0.t
2456 ; CHECK-NEXT: vsrl.vi v16, v8, 1, v0.t
2457 ; CHECK-NEXT: vand.vx v16, v16, a3, v0.t
2458 ; CHECK-NEXT: vand.vx v8, v8, a3, v0.t
2459 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
2460 ; CHECK-NEXT: vor.vv v16, v16, v8, v0.t
2461 ; CHECK-NEXT: addi a0, sp, 16
2462 ; CHECK-NEXT: vl8r.v v8, (a0) # Unknown-size Folded Reload
2463 ; CHECK-NEXT: csrr a0, vlenb
2464 ; CHECK-NEXT: slli a0, a0, 4
2465 ; CHECK-NEXT: add sp, sp, a0
2466 ; CHECK-NEXT: addi sp, sp, 16
2468 %v = call <128 x i16> @llvm.vp.bitreverse.v128i16(<128 x i16> %va, <128 x i1> %m, i32 %evl)
2472 define <128 x i16> @vp_bitreverse_v128i16_unmasked(<128 x i16> %va, i32 zeroext %evl) {
2473 ; CHECK-LABEL: vp_bitreverse_v128i16_unmasked:
2475 ; CHECK-NEXT: li a2, 64
2476 ; CHECK-NEXT: mv a1, a0
2477 ; CHECK-NEXT: bltu a0, a2, .LBB35_2
2478 ; CHECK-NEXT: # %bb.1:
2479 ; CHECK-NEXT: li a1, 64
2480 ; CHECK-NEXT: .LBB35_2:
2481 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
2482 ; CHECK-NEXT: vsrl.vi v24, v8, 8
2483 ; CHECK-NEXT: vsll.vi v8, v8, 8
2484 ; CHECK-NEXT: vor.vv v8, v8, v24
2485 ; CHECK-NEXT: vsrl.vi v24, v8, 4
2486 ; CHECK-NEXT: lui a1, 1
2487 ; CHECK-NEXT: addi a1, a1, -241
2488 ; CHECK-NEXT: vand.vx v24, v24, a1
2489 ; CHECK-NEXT: vand.vx v8, v8, a1
2490 ; CHECK-NEXT: vsll.vi v8, v8, 4
2491 ; CHECK-NEXT: vor.vv v8, v24, v8
2492 ; CHECK-NEXT: vsrl.vi v24, v8, 2
2493 ; CHECK-NEXT: lui a2, 3
2494 ; CHECK-NEXT: addi a2, a2, 819
2495 ; CHECK-NEXT: vand.vx v24, v24, a2
2496 ; CHECK-NEXT: vand.vx v8, v8, a2
2497 ; CHECK-NEXT: vsll.vi v8, v8, 2
2498 ; CHECK-NEXT: vor.vv v8, v24, v8
2499 ; CHECK-NEXT: vsrl.vi v24, v8, 1
2500 ; CHECK-NEXT: lui a3, 5
2501 ; CHECK-NEXT: addi a3, a3, 1365
2502 ; CHECK-NEXT: vand.vx v24, v24, a3
2503 ; CHECK-NEXT: vand.vx v8, v8, a3
2504 ; CHECK-NEXT: vadd.vv v8, v8, v8
2505 ; CHECK-NEXT: vor.vv v8, v24, v8
2506 ; CHECK-NEXT: addi a4, a0, -64
2507 ; CHECK-NEXT: sltu a0, a0, a4
2508 ; CHECK-NEXT: addi a0, a0, -1
2509 ; CHECK-NEXT: and a0, a0, a4
2510 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
2511 ; CHECK-NEXT: vsrl.vi v24, v16, 8
2512 ; CHECK-NEXT: vsll.vi v16, v16, 8
2513 ; CHECK-NEXT: vor.vv v16, v16, v24
2514 ; CHECK-NEXT: vsrl.vi v24, v16, 4
2515 ; CHECK-NEXT: vand.vx v24, v24, a1
2516 ; CHECK-NEXT: vand.vx v16, v16, a1
2517 ; CHECK-NEXT: vsll.vi v16, v16, 4
2518 ; CHECK-NEXT: vor.vv v16, v24, v16
2519 ; CHECK-NEXT: vsrl.vi v24, v16, 2
2520 ; CHECK-NEXT: vand.vx v24, v24, a2
2521 ; CHECK-NEXT: vand.vx v16, v16, a2
2522 ; CHECK-NEXT: vsll.vi v16, v16, 2
2523 ; CHECK-NEXT: vor.vv v16, v24, v16
2524 ; CHECK-NEXT: vsrl.vi v24, v16, 1
2525 ; CHECK-NEXT: vand.vx v24, v24, a3
2526 ; CHECK-NEXT: vand.vx v16, v16, a3
2527 ; CHECK-NEXT: vadd.vv v16, v16, v16
2528 ; CHECK-NEXT: vor.vv v16, v24, v16
2530 %v = call <128 x i16> @llvm.vp.bitreverse.v128i16(<128 x i16> %va, <128 x i1> splat (i1 true), i32 %evl)