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