Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-bswap-vp.ll
blob6308f73e219da1087c149595bd55f9307ed483b4
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 i16> @llvm.vp.bswap.v2i16(<2 x i16>, <2 x i1>, i32)
9 define <2 x i16> @vp_bswap_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vp_bswap_v2i16:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
13 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
14 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
15 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
16 ; CHECK-NEXT:    ret
17   %v = call <2 x i16> @llvm.vp.bswap.v2i16(<2 x i16> %va, <2 x i1> %m, i32 %evl)
18   ret <2 x i16> %v
21 define <2 x i16> @vp_bswap_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
22 ; CHECK-LABEL: vp_bswap_v2i16_unmasked:
23 ; CHECK:       # %bb.0:
24 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
25 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
26 ; CHECK-NEXT:    vsll.vi v8, v8, 8
27 ; CHECK-NEXT:    vor.vv v8, v8, v9
28 ; CHECK-NEXT:    ret
29   %head = insertelement <2 x i1> poison, i1 true, i32 0
30   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
31   %v = call <2 x i16> @llvm.vp.bswap.v2i16(<2 x i16> %va, <2 x i1> %m, i32 %evl)
32   ret <2 x i16> %v
35 declare <4 x i16> @llvm.vp.bswap.v4i16(<4 x i16>, <4 x i1>, i32)
37 define <4 x i16> @vp_bswap_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
38 ; CHECK-LABEL: vp_bswap_v4i16:
39 ; CHECK:       # %bb.0:
40 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
41 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
42 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
43 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
44 ; CHECK-NEXT:    ret
45   %v = call <4 x i16> @llvm.vp.bswap.v4i16(<4 x i16> %va, <4 x i1> %m, i32 %evl)
46   ret <4 x i16> %v
49 define <4 x i16> @vp_bswap_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
50 ; CHECK-LABEL: vp_bswap_v4i16_unmasked:
51 ; CHECK:       # %bb.0:
52 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
53 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
54 ; CHECK-NEXT:    vsll.vi v8, v8, 8
55 ; CHECK-NEXT:    vor.vv v8, v8, v9
56 ; CHECK-NEXT:    ret
57   %head = insertelement <4 x i1> poison, i1 true, i32 0
58   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
59   %v = call <4 x i16> @llvm.vp.bswap.v4i16(<4 x i16> %va, <4 x i1> %m, i32 %evl)
60   ret <4 x i16> %v
63 declare <8 x i16> @llvm.vp.bswap.v8i16(<8 x i16>, <8 x i1>, i32)
65 define <8 x i16> @vp_bswap_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
66 ; CHECK-LABEL: vp_bswap_v8i16:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
69 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
70 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
71 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
72 ; CHECK-NEXT:    ret
73   %v = call <8 x i16> @llvm.vp.bswap.v8i16(<8 x i16> %va, <8 x i1> %m, i32 %evl)
74   ret <8 x i16> %v
77 define <8 x i16> @vp_bswap_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
78 ; CHECK-LABEL: vp_bswap_v8i16_unmasked:
79 ; CHECK:       # %bb.0:
80 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
81 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
82 ; CHECK-NEXT:    vsll.vi v8, v8, 8
83 ; CHECK-NEXT:    vor.vv v8, v8, v9
84 ; CHECK-NEXT:    ret
85   %head = insertelement <8 x i1> poison, i1 true, i32 0
86   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
87   %v = call <8 x i16> @llvm.vp.bswap.v8i16(<8 x i16> %va, <8 x i1> %m, i32 %evl)
88   ret <8 x i16> %v
91 declare <16 x i16> @llvm.vp.bswap.v16i16(<16 x i16>, <16 x i1>, i32)
93 define <16 x i16> @vp_bswap_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
94 ; CHECK-LABEL: vp_bswap_v16i16:
95 ; CHECK:       # %bb.0:
96 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
97 ; CHECK-NEXT:    vsrl.vi v10, v8, 8, v0.t
98 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
99 ; CHECK-NEXT:    vor.vv v8, v8, v10, v0.t
100 ; CHECK-NEXT:    ret
101   %v = call <16 x i16> @llvm.vp.bswap.v16i16(<16 x i16> %va, <16 x i1> %m, i32 %evl)
102   ret <16 x i16> %v
105 define <16 x i16> @vp_bswap_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
106 ; CHECK-LABEL: vp_bswap_v16i16_unmasked:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
109 ; CHECK-NEXT:    vsrl.vi v10, v8, 8
110 ; CHECK-NEXT:    vsll.vi v8, v8, 8
111 ; CHECK-NEXT:    vor.vv v8, v8, v10
112 ; CHECK-NEXT:    ret
113   %head = insertelement <16 x i1> poison, i1 true, i32 0
114   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
115   %v = call <16 x i16> @llvm.vp.bswap.v16i16(<16 x i16> %va, <16 x i1> %m, i32 %evl)
116   ret <16 x i16> %v
119 declare <2 x i32> @llvm.vp.bswap.v2i32(<2 x i32>, <2 x i1>, i32)
121 define <2 x i32> @vp_bswap_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
122 ; CHECK-LABEL: vp_bswap_v2i32:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
125 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
126 ; CHECK-NEXT:    lui a0, 16
127 ; CHECK-NEXT:    addi a0, a0, -256
128 ; CHECK-NEXT:    vand.vx v9, v9, a0, v0.t
129 ; CHECK-NEXT:    vsrl.vi v10, v8, 24, v0.t
130 ; CHECK-NEXT:    vor.vv v9, v9, v10, v0.t
131 ; CHECK-NEXT:    vand.vx v10, v8, a0, v0.t
132 ; CHECK-NEXT:    vsll.vi v10, v10, 8, v0.t
133 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
134 ; CHECK-NEXT:    vor.vv v8, v8, v10, v0.t
135 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
136 ; CHECK-NEXT:    ret
137   %v = call <2 x i32> @llvm.vp.bswap.v2i32(<2 x i32> %va, <2 x i1> %m, i32 %evl)
138   ret <2 x i32> %v
141 define <2 x i32> @vp_bswap_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
142 ; CHECK-LABEL: vp_bswap_v2i32_unmasked:
143 ; CHECK:       # %bb.0:
144 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
145 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
146 ; CHECK-NEXT:    lui a0, 16
147 ; CHECK-NEXT:    addi a0, a0, -256
148 ; CHECK-NEXT:    vand.vx v9, v9, a0
149 ; CHECK-NEXT:    vsrl.vi v10, v8, 24
150 ; CHECK-NEXT:    vor.vv v9, v9, v10
151 ; CHECK-NEXT:    vand.vx v10, v8, a0
152 ; CHECK-NEXT:    vsll.vi v10, v10, 8
153 ; CHECK-NEXT:    vsll.vi v8, v8, 24
154 ; CHECK-NEXT:    vor.vv v8, v8, v10
155 ; CHECK-NEXT:    vor.vv v8, v8, v9
156 ; CHECK-NEXT:    ret
157   %head = insertelement <2 x i1> poison, i1 true, i32 0
158   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
159   %v = call <2 x i32> @llvm.vp.bswap.v2i32(<2 x i32> %va, <2 x i1> %m, i32 %evl)
160   ret <2 x i32> %v
163 declare <4 x i32> @llvm.vp.bswap.v4i32(<4 x i32>, <4 x i1>, i32)
165 define <4 x i32> @vp_bswap_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
166 ; CHECK-LABEL: vp_bswap_v4i32:
167 ; CHECK:       # %bb.0:
168 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
169 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
170 ; CHECK-NEXT:    lui a0, 16
171 ; CHECK-NEXT:    addi a0, a0, -256
172 ; CHECK-NEXT:    vand.vx v9, v9, a0, v0.t
173 ; CHECK-NEXT:    vsrl.vi v10, v8, 24, v0.t
174 ; CHECK-NEXT:    vor.vv v9, v9, v10, v0.t
175 ; CHECK-NEXT:    vand.vx v10, v8, a0, v0.t
176 ; CHECK-NEXT:    vsll.vi v10, v10, 8, v0.t
177 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
178 ; CHECK-NEXT:    vor.vv v8, v8, v10, v0.t
179 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
180 ; CHECK-NEXT:    ret
181   %v = call <4 x i32> @llvm.vp.bswap.v4i32(<4 x i32> %va, <4 x i1> %m, i32 %evl)
182   ret <4 x i32> %v
185 define <4 x i32> @vp_bswap_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
186 ; CHECK-LABEL: vp_bswap_v4i32_unmasked:
187 ; CHECK:       # %bb.0:
188 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
189 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
190 ; CHECK-NEXT:    lui a0, 16
191 ; CHECK-NEXT:    addi a0, a0, -256
192 ; CHECK-NEXT:    vand.vx v9, v9, a0
193 ; CHECK-NEXT:    vsrl.vi v10, v8, 24
194 ; CHECK-NEXT:    vor.vv v9, v9, v10
195 ; CHECK-NEXT:    vand.vx v10, v8, a0
196 ; CHECK-NEXT:    vsll.vi v10, v10, 8
197 ; CHECK-NEXT:    vsll.vi v8, v8, 24
198 ; CHECK-NEXT:    vor.vv v8, v8, v10
199 ; CHECK-NEXT:    vor.vv v8, v8, v9
200 ; CHECK-NEXT:    ret
201   %head = insertelement <4 x i1> poison, i1 true, i32 0
202   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
203   %v = call <4 x i32> @llvm.vp.bswap.v4i32(<4 x i32> %va, <4 x i1> %m, i32 %evl)
204   ret <4 x i32> %v
207 declare <8 x i32> @llvm.vp.bswap.v8i32(<8 x i32>, <8 x i1>, i32)
209 define <8 x i32> @vp_bswap_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
210 ; CHECK-LABEL: vp_bswap_v8i32:
211 ; CHECK:       # %bb.0:
212 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
213 ; CHECK-NEXT:    vsrl.vi v10, v8, 8, v0.t
214 ; CHECK-NEXT:    lui a0, 16
215 ; CHECK-NEXT:    addi a0, a0, -256
216 ; CHECK-NEXT:    vand.vx v10, v10, a0, v0.t
217 ; CHECK-NEXT:    vsrl.vi v12, v8, 24, v0.t
218 ; CHECK-NEXT:    vor.vv v10, v10, v12, v0.t
219 ; CHECK-NEXT:    vand.vx v12, v8, a0, v0.t
220 ; CHECK-NEXT:    vsll.vi v12, v12, 8, v0.t
221 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
222 ; CHECK-NEXT:    vor.vv v8, v8, v12, v0.t
223 ; CHECK-NEXT:    vor.vv v8, v8, v10, v0.t
224 ; CHECK-NEXT:    ret
225   %v = call <8 x i32> @llvm.vp.bswap.v8i32(<8 x i32> %va, <8 x i1> %m, i32 %evl)
226   ret <8 x i32> %v
229 define <8 x i32> @vp_bswap_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
230 ; CHECK-LABEL: vp_bswap_v8i32_unmasked:
231 ; CHECK:       # %bb.0:
232 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
233 ; CHECK-NEXT:    vsrl.vi v10, v8, 8
234 ; CHECK-NEXT:    lui a0, 16
235 ; CHECK-NEXT:    addi a0, a0, -256
236 ; CHECK-NEXT:    vand.vx v10, v10, a0
237 ; CHECK-NEXT:    vsrl.vi v12, v8, 24
238 ; CHECK-NEXT:    vor.vv v10, v10, v12
239 ; CHECK-NEXT:    vand.vx v12, v8, a0
240 ; CHECK-NEXT:    vsll.vi v12, v12, 8
241 ; CHECK-NEXT:    vsll.vi v8, v8, 24
242 ; CHECK-NEXT:    vor.vv v8, v8, v12
243 ; CHECK-NEXT:    vor.vv v8, v8, v10
244 ; CHECK-NEXT:    ret
245   %head = insertelement <8 x i1> poison, i1 true, i32 0
246   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
247   %v = call <8 x i32> @llvm.vp.bswap.v8i32(<8 x i32> %va, <8 x i1> %m, i32 %evl)
248   ret <8 x i32> %v
251 declare <16 x i32> @llvm.vp.bswap.v16i32(<16 x i32>, <16 x i1>, i32)
253 define <16 x i32> @vp_bswap_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
254 ; CHECK-LABEL: vp_bswap_v16i32:
255 ; CHECK:       # %bb.0:
256 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
257 ; CHECK-NEXT:    vsrl.vi v12, v8, 8, v0.t
258 ; CHECK-NEXT:    lui a0, 16
259 ; CHECK-NEXT:    addi a0, a0, -256
260 ; CHECK-NEXT:    vand.vx v12, v12, a0, v0.t
261 ; CHECK-NEXT:    vsrl.vi v16, v8, 24, v0.t
262 ; CHECK-NEXT:    vor.vv v12, v12, v16, v0.t
263 ; CHECK-NEXT:    vand.vx v16, v8, a0, v0.t
264 ; CHECK-NEXT:    vsll.vi v16, v16, 8, v0.t
265 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
266 ; CHECK-NEXT:    vor.vv v8, v8, v16, v0.t
267 ; CHECK-NEXT:    vor.vv v8, v8, v12, v0.t
268 ; CHECK-NEXT:    ret
269   %v = call <16 x i32> @llvm.vp.bswap.v16i32(<16 x i32> %va, <16 x i1> %m, i32 %evl)
270   ret <16 x i32> %v
273 define <16 x i32> @vp_bswap_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
274 ; CHECK-LABEL: vp_bswap_v16i32_unmasked:
275 ; CHECK:       # %bb.0:
276 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
277 ; CHECK-NEXT:    vsrl.vi v12, v8, 8
278 ; CHECK-NEXT:    lui a0, 16
279 ; CHECK-NEXT:    addi a0, a0, -256
280 ; CHECK-NEXT:    vand.vx v12, v12, a0
281 ; CHECK-NEXT:    vsrl.vi v16, v8, 24
282 ; CHECK-NEXT:    vor.vv v12, v12, v16
283 ; CHECK-NEXT:    vand.vx v16, v8, a0
284 ; CHECK-NEXT:    vsll.vi v16, v16, 8
285 ; CHECK-NEXT:    vsll.vi v8, v8, 24
286 ; CHECK-NEXT:    vor.vv v8, v8, v16
287 ; CHECK-NEXT:    vor.vv v8, v8, v12
288 ; CHECK-NEXT:    ret
289   %head = insertelement <16 x i1> poison, i1 true, i32 0
290   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
291   %v = call <16 x i32> @llvm.vp.bswap.v16i32(<16 x i32> %va, <16 x i1> %m, i32 %evl)
292   ret <16 x i32> %v
295 declare <2 x i64> @llvm.vp.bswap.v2i64(<2 x i64>, <2 x i1>, i32)
297 define <2 x i64> @vp_bswap_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
298 ; RV32-LABEL: vp_bswap_v2i64:
299 ; RV32:       # %bb.0:
300 ; RV32-NEXT:    addi sp, sp, -16
301 ; RV32-NEXT:    .cfi_def_cfa_offset 16
302 ; RV32-NEXT:    sw zero, 12(sp)
303 ; RV32-NEXT:    lui a1, 1044480
304 ; RV32-NEXT:    sw a1, 8(sp)
305 ; RV32-NEXT:    li a1, 56
306 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
307 ; RV32-NEXT:    vsll.vx v9, v8, a1, v0.t
308 ; RV32-NEXT:    lui a2, 16
309 ; RV32-NEXT:    addi a2, a2, -256
310 ; RV32-NEXT:    vand.vx v10, v8, a2, v0.t
311 ; RV32-NEXT:    li a3, 40
312 ; RV32-NEXT:    vsll.vx v10, v10, a3, v0.t
313 ; RV32-NEXT:    vor.vv v9, v9, v10, v0.t
314 ; RV32-NEXT:    lui a4, 4080
315 ; RV32-NEXT:    vand.vx v10, v8, a4, v0.t
316 ; RV32-NEXT:    vsll.vi v10, v10, 24, v0.t
317 ; RV32-NEXT:    addi a5, sp, 8
318 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
319 ; RV32-NEXT:    vlse64.v v11, (a5), zero
320 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
321 ; RV32-NEXT:    vand.vv v12, v8, v11, v0.t
322 ; RV32-NEXT:    vsll.vi v12, v12, 8, v0.t
323 ; RV32-NEXT:    vor.vv v10, v10, v12, v0.t
324 ; RV32-NEXT:    vor.vv v9, v9, v10, v0.t
325 ; RV32-NEXT:    vsrl.vx v10, v8, a1, v0.t
326 ; RV32-NEXT:    vsrl.vx v12, v8, a3, v0.t
327 ; RV32-NEXT:    vand.vx v12, v12, a2, v0.t
328 ; RV32-NEXT:    vor.vv v10, v12, v10, v0.t
329 ; RV32-NEXT:    vsrl.vi v12, v8, 24, v0.t
330 ; RV32-NEXT:    vand.vx v12, v12, a4, v0.t
331 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
332 ; RV32-NEXT:    vand.vv v8, v8, v11, v0.t
333 ; RV32-NEXT:    vor.vv v8, v8, v12, v0.t
334 ; RV32-NEXT:    vor.vv v8, v8, v10, v0.t
335 ; RV32-NEXT:    vor.vv v8, v9, v8, v0.t
336 ; RV32-NEXT:    addi sp, sp, 16
337 ; RV32-NEXT:    ret
339 ; RV64-LABEL: vp_bswap_v2i64:
340 ; RV64:       # %bb.0:
341 ; RV64-NEXT:    lui a1, 4080
342 ; RV64-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
343 ; RV64-NEXT:    vand.vx v9, v8, a1, v0.t
344 ; RV64-NEXT:    vsll.vi v9, v9, 24, v0.t
345 ; RV64-NEXT:    li a0, 255
346 ; RV64-NEXT:    slli a0, a0, 24
347 ; RV64-NEXT:    vand.vx v10, v8, a0, v0.t
348 ; RV64-NEXT:    vsll.vi v10, v10, 8, v0.t
349 ; RV64-NEXT:    vor.vv v9, v9, v10, v0.t
350 ; RV64-NEXT:    li a2, 56
351 ; RV64-NEXT:    vsll.vx v10, v8, a2, v0.t
352 ; RV64-NEXT:    lui a3, 16
353 ; RV64-NEXT:    addiw a3, a3, -256
354 ; RV64-NEXT:    vand.vx v11, v8, a3, v0.t
355 ; RV64-NEXT:    li a4, 40
356 ; RV64-NEXT:    vsll.vx v11, v11, a4, v0.t
357 ; RV64-NEXT:    vor.vv v10, v10, v11, v0.t
358 ; RV64-NEXT:    vor.vv v9, v10, v9, v0.t
359 ; RV64-NEXT:    vsrl.vx v10, v8, a2, v0.t
360 ; RV64-NEXT:    vsrl.vx v11, v8, a4, v0.t
361 ; RV64-NEXT:    vand.vx v11, v11, a3, v0.t
362 ; RV64-NEXT:    vor.vv v10, v11, v10, v0.t
363 ; RV64-NEXT:    vsrl.vi v11, v8, 24, v0.t
364 ; RV64-NEXT:    vand.vx v11, v11, a1, v0.t
365 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
366 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
367 ; RV64-NEXT:    vor.vv v8, v8, v11, v0.t
368 ; RV64-NEXT:    vor.vv v8, v8, v10, v0.t
369 ; RV64-NEXT:    vor.vv v8, v9, v8, v0.t
370 ; RV64-NEXT:    ret
371   %v = call <2 x i64> @llvm.vp.bswap.v2i64(<2 x i64> %va, <2 x i1> %m, i32 %evl)
372   ret <2 x i64> %v
375 define <2 x i64> @vp_bswap_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
376 ; RV32-LABEL: vp_bswap_v2i64_unmasked:
377 ; RV32:       # %bb.0:
378 ; RV32-NEXT:    addi sp, sp, -16
379 ; RV32-NEXT:    .cfi_def_cfa_offset 16
380 ; RV32-NEXT:    sw zero, 12(sp)
381 ; RV32-NEXT:    lui a1, 1044480
382 ; RV32-NEXT:    sw a1, 8(sp)
383 ; RV32-NEXT:    li a1, 56
384 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
385 ; RV32-NEXT:    vsll.vx v9, v8, a1
386 ; RV32-NEXT:    lui a2, 16
387 ; RV32-NEXT:    addi a2, a2, -256
388 ; RV32-NEXT:    vand.vx v10, v8, a2
389 ; RV32-NEXT:    li a3, 40
390 ; RV32-NEXT:    vsll.vx v10, v10, a3
391 ; RV32-NEXT:    vor.vv v9, v9, v10
392 ; RV32-NEXT:    lui a4, 4080
393 ; RV32-NEXT:    vand.vx v10, v8, a4
394 ; RV32-NEXT:    vsll.vi v10, v10, 24
395 ; RV32-NEXT:    addi a5, sp, 8
396 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
397 ; RV32-NEXT:    vlse64.v v11, (a5), zero
398 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
399 ; RV32-NEXT:    vand.vv v12, v8, v11
400 ; RV32-NEXT:    vsll.vi v12, v12, 8
401 ; RV32-NEXT:    vor.vv v10, v10, v12
402 ; RV32-NEXT:    vor.vv v9, v9, v10
403 ; RV32-NEXT:    vsrl.vx v10, v8, a1
404 ; RV32-NEXT:    vsrl.vx v12, v8, a3
405 ; RV32-NEXT:    vand.vx v12, v12, a2
406 ; RV32-NEXT:    vor.vv v10, v12, v10
407 ; RV32-NEXT:    vsrl.vi v12, v8, 24
408 ; RV32-NEXT:    vand.vx v12, v12, a4
409 ; RV32-NEXT:    vsrl.vi v8, v8, 8
410 ; RV32-NEXT:    vand.vv v8, v8, v11
411 ; RV32-NEXT:    vor.vv v8, v8, v12
412 ; RV32-NEXT:    vor.vv v8, v8, v10
413 ; RV32-NEXT:    vor.vv v8, v9, v8
414 ; RV32-NEXT:    addi sp, sp, 16
415 ; RV32-NEXT:    ret
417 ; RV64-LABEL: vp_bswap_v2i64_unmasked:
418 ; RV64:       # %bb.0:
419 ; RV64-NEXT:    lui a1, 4080
420 ; RV64-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
421 ; RV64-NEXT:    vand.vx v9, v8, a1
422 ; RV64-NEXT:    vsll.vi v9, v9, 24
423 ; RV64-NEXT:    li a0, 255
424 ; RV64-NEXT:    slli a0, a0, 24
425 ; RV64-NEXT:    vand.vx v10, v8, a0
426 ; RV64-NEXT:    vsll.vi v10, v10, 8
427 ; RV64-NEXT:    vor.vv v9, v9, v10
428 ; RV64-NEXT:    li a2, 56
429 ; RV64-NEXT:    vsll.vx v10, v8, a2
430 ; RV64-NEXT:    lui a3, 16
431 ; RV64-NEXT:    addiw a3, a3, -256
432 ; RV64-NEXT:    vand.vx v11, v8, a3
433 ; RV64-NEXT:    li a4, 40
434 ; RV64-NEXT:    vsll.vx v11, v11, a4
435 ; RV64-NEXT:    vor.vv v10, v10, v11
436 ; RV64-NEXT:    vor.vv v9, v10, v9
437 ; RV64-NEXT:    vsrl.vx v10, v8, a2
438 ; RV64-NEXT:    vsrl.vx v11, v8, a4
439 ; RV64-NEXT:    vand.vx v11, v11, a3
440 ; RV64-NEXT:    vor.vv v10, v11, v10
441 ; RV64-NEXT:    vsrl.vi v11, v8, 24
442 ; RV64-NEXT:    vand.vx v11, v11, a1
443 ; RV64-NEXT:    vsrl.vi v8, v8, 8
444 ; RV64-NEXT:    vand.vx v8, v8, a0
445 ; RV64-NEXT:    vor.vv v8, v8, v11
446 ; RV64-NEXT:    vor.vv v8, v8, v10
447 ; RV64-NEXT:    vor.vv v8, v9, v8
448 ; RV64-NEXT:    ret
449   %head = insertelement <2 x i1> poison, i1 true, i32 0
450   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
451   %v = call <2 x i64> @llvm.vp.bswap.v2i64(<2 x i64> %va, <2 x i1> %m, i32 %evl)
452   ret <2 x i64> %v
455 declare <4 x i64> @llvm.vp.bswap.v4i64(<4 x i64>, <4 x i1>, i32)
457 define <4 x i64> @vp_bswap_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
458 ; RV32-LABEL: vp_bswap_v4i64:
459 ; RV32:       # %bb.0:
460 ; RV32-NEXT:    addi sp, sp, -16
461 ; RV32-NEXT:    .cfi_def_cfa_offset 16
462 ; RV32-NEXT:    sw zero, 12(sp)
463 ; RV32-NEXT:    lui a1, 1044480
464 ; RV32-NEXT:    sw a1, 8(sp)
465 ; RV32-NEXT:    li a1, 56
466 ; RV32-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
467 ; RV32-NEXT:    vsll.vx v10, v8, a1, v0.t
468 ; RV32-NEXT:    lui a2, 16
469 ; RV32-NEXT:    addi a2, a2, -256
470 ; RV32-NEXT:    vand.vx v12, v8, a2, v0.t
471 ; RV32-NEXT:    li a3, 40
472 ; RV32-NEXT:    vsll.vx v12, v12, a3, v0.t
473 ; RV32-NEXT:    vor.vv v10, v10, v12, v0.t
474 ; RV32-NEXT:    lui a4, 4080
475 ; RV32-NEXT:    vand.vx v12, v8, a4, v0.t
476 ; RV32-NEXT:    vsll.vi v12, v12, 24, v0.t
477 ; RV32-NEXT:    addi a5, sp, 8
478 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
479 ; RV32-NEXT:    vlse64.v v14, (a5), zero
480 ; RV32-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
481 ; RV32-NEXT:    vand.vv v16, v8, v14, v0.t
482 ; RV32-NEXT:    vsll.vi v16, v16, 8, v0.t
483 ; RV32-NEXT:    vor.vv v12, v12, v16, v0.t
484 ; RV32-NEXT:    vor.vv v10, v10, v12, v0.t
485 ; RV32-NEXT:    vsrl.vx v12, v8, a1, v0.t
486 ; RV32-NEXT:    vsrl.vx v16, v8, a3, v0.t
487 ; RV32-NEXT:    vand.vx v16, v16, a2, v0.t
488 ; RV32-NEXT:    vor.vv v12, v16, v12, v0.t
489 ; RV32-NEXT:    vsrl.vi v16, v8, 24, v0.t
490 ; RV32-NEXT:    vand.vx v16, v16, a4, v0.t
491 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
492 ; RV32-NEXT:    vand.vv v8, v8, v14, v0.t
493 ; RV32-NEXT:    vor.vv v8, v8, v16, v0.t
494 ; RV32-NEXT:    vor.vv v8, v8, v12, v0.t
495 ; RV32-NEXT:    vor.vv v8, v10, v8, v0.t
496 ; RV32-NEXT:    addi sp, sp, 16
497 ; RV32-NEXT:    ret
499 ; RV64-LABEL: vp_bswap_v4i64:
500 ; RV64:       # %bb.0:
501 ; RV64-NEXT:    lui a1, 4080
502 ; RV64-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
503 ; RV64-NEXT:    vand.vx v10, v8, a1, v0.t
504 ; RV64-NEXT:    vsll.vi v10, v10, 24, v0.t
505 ; RV64-NEXT:    li a0, 255
506 ; RV64-NEXT:    slli a0, a0, 24
507 ; RV64-NEXT:    vand.vx v12, v8, a0, v0.t
508 ; RV64-NEXT:    vsll.vi v12, v12, 8, v0.t
509 ; RV64-NEXT:    vor.vv v10, v10, v12, v0.t
510 ; RV64-NEXT:    li a2, 56
511 ; RV64-NEXT:    vsll.vx v12, v8, a2, v0.t
512 ; RV64-NEXT:    lui a3, 16
513 ; RV64-NEXT:    addiw a3, a3, -256
514 ; RV64-NEXT:    vand.vx v14, v8, a3, v0.t
515 ; RV64-NEXT:    li a4, 40
516 ; RV64-NEXT:    vsll.vx v14, v14, a4, v0.t
517 ; RV64-NEXT:    vor.vv v12, v12, v14, v0.t
518 ; RV64-NEXT:    vor.vv v10, v12, v10, v0.t
519 ; RV64-NEXT:    vsrl.vx v12, v8, a2, v0.t
520 ; RV64-NEXT:    vsrl.vx v14, v8, a4, v0.t
521 ; RV64-NEXT:    vand.vx v14, v14, a3, v0.t
522 ; RV64-NEXT:    vor.vv v12, v14, v12, v0.t
523 ; RV64-NEXT:    vsrl.vi v14, v8, 24, v0.t
524 ; RV64-NEXT:    vand.vx v14, v14, a1, v0.t
525 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
526 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
527 ; RV64-NEXT:    vor.vv v8, v8, v14, v0.t
528 ; RV64-NEXT:    vor.vv v8, v8, v12, v0.t
529 ; RV64-NEXT:    vor.vv v8, v10, v8, v0.t
530 ; RV64-NEXT:    ret
531   %v = call <4 x i64> @llvm.vp.bswap.v4i64(<4 x i64> %va, <4 x i1> %m, i32 %evl)
532   ret <4 x i64> %v
535 define <4 x i64> @vp_bswap_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
536 ; RV32-LABEL: vp_bswap_v4i64_unmasked:
537 ; RV32:       # %bb.0:
538 ; RV32-NEXT:    addi sp, sp, -16
539 ; RV32-NEXT:    .cfi_def_cfa_offset 16
540 ; RV32-NEXT:    sw zero, 12(sp)
541 ; RV32-NEXT:    lui a1, 1044480
542 ; RV32-NEXT:    sw a1, 8(sp)
543 ; RV32-NEXT:    li a1, 56
544 ; RV32-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
545 ; RV32-NEXT:    vsll.vx v10, v8, a1
546 ; RV32-NEXT:    lui a2, 16
547 ; RV32-NEXT:    addi a2, a2, -256
548 ; RV32-NEXT:    vand.vx v12, v8, a2
549 ; RV32-NEXT:    li a3, 40
550 ; RV32-NEXT:    vsll.vx v12, v12, a3
551 ; RV32-NEXT:    vor.vv v10, v10, v12
552 ; RV32-NEXT:    lui a4, 4080
553 ; RV32-NEXT:    vand.vx v12, v8, a4
554 ; RV32-NEXT:    vsll.vi v12, v12, 24
555 ; RV32-NEXT:    addi a5, sp, 8
556 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
557 ; RV32-NEXT:    vlse64.v v14, (a5), zero
558 ; RV32-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
559 ; RV32-NEXT:    vand.vv v16, v8, v14
560 ; RV32-NEXT:    vsll.vi v16, v16, 8
561 ; RV32-NEXT:    vor.vv v12, v12, v16
562 ; RV32-NEXT:    vor.vv v10, v10, v12
563 ; RV32-NEXT:    vsrl.vx v12, v8, a1
564 ; RV32-NEXT:    vsrl.vx v16, v8, a3
565 ; RV32-NEXT:    vand.vx v16, v16, a2
566 ; RV32-NEXT:    vor.vv v12, v16, v12
567 ; RV32-NEXT:    vsrl.vi v16, v8, 24
568 ; RV32-NEXT:    vand.vx v16, v16, a4
569 ; RV32-NEXT:    vsrl.vi v8, v8, 8
570 ; RV32-NEXT:    vand.vv v8, v8, v14
571 ; RV32-NEXT:    vor.vv v8, v8, v16
572 ; RV32-NEXT:    vor.vv v8, v8, v12
573 ; RV32-NEXT:    vor.vv v8, v10, v8
574 ; RV32-NEXT:    addi sp, sp, 16
575 ; RV32-NEXT:    ret
577 ; RV64-LABEL: vp_bswap_v4i64_unmasked:
578 ; RV64:       # %bb.0:
579 ; RV64-NEXT:    lui a1, 4080
580 ; RV64-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
581 ; RV64-NEXT:    vand.vx v10, v8, a1
582 ; RV64-NEXT:    vsll.vi v10, v10, 24
583 ; RV64-NEXT:    li a0, 255
584 ; RV64-NEXT:    slli a0, a0, 24
585 ; RV64-NEXT:    vand.vx v12, v8, a0
586 ; RV64-NEXT:    vsll.vi v12, v12, 8
587 ; RV64-NEXT:    vor.vv v10, v10, v12
588 ; RV64-NEXT:    li a2, 56
589 ; RV64-NEXT:    vsll.vx v12, v8, a2
590 ; RV64-NEXT:    lui a3, 16
591 ; RV64-NEXT:    addiw a3, a3, -256
592 ; RV64-NEXT:    vand.vx v14, v8, a3
593 ; RV64-NEXT:    li a4, 40
594 ; RV64-NEXT:    vsll.vx v14, v14, a4
595 ; RV64-NEXT:    vor.vv v12, v12, v14
596 ; RV64-NEXT:    vor.vv v10, v12, v10
597 ; RV64-NEXT:    vsrl.vx v12, v8, a2
598 ; RV64-NEXT:    vsrl.vx v14, v8, a4
599 ; RV64-NEXT:    vand.vx v14, v14, a3
600 ; RV64-NEXT:    vor.vv v12, v14, v12
601 ; RV64-NEXT:    vsrl.vi v14, v8, 24
602 ; RV64-NEXT:    vand.vx v14, v14, a1
603 ; RV64-NEXT:    vsrl.vi v8, v8, 8
604 ; RV64-NEXT:    vand.vx v8, v8, a0
605 ; RV64-NEXT:    vor.vv v8, v8, v14
606 ; RV64-NEXT:    vor.vv v8, v8, v12
607 ; RV64-NEXT:    vor.vv v8, v10, v8
608 ; RV64-NEXT:    ret
609   %head = insertelement <4 x i1> poison, i1 true, i32 0
610   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
611   %v = call <4 x i64> @llvm.vp.bswap.v4i64(<4 x i64> %va, <4 x i1> %m, i32 %evl)
612   ret <4 x i64> %v
615 declare <8 x i64> @llvm.vp.bswap.v8i64(<8 x i64>, <8 x i1>, i32)
617 define <8 x i64> @vp_bswap_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
618 ; RV32-LABEL: vp_bswap_v8i64:
619 ; RV32:       # %bb.0:
620 ; RV32-NEXT:    addi sp, sp, -16
621 ; RV32-NEXT:    .cfi_def_cfa_offset 16
622 ; RV32-NEXT:    sw zero, 12(sp)
623 ; RV32-NEXT:    lui a1, 1044480
624 ; RV32-NEXT:    sw a1, 8(sp)
625 ; RV32-NEXT:    li a1, 56
626 ; RV32-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
627 ; RV32-NEXT:    vsll.vx v12, v8, a1, v0.t
628 ; RV32-NEXT:    lui a2, 16
629 ; RV32-NEXT:    addi a2, a2, -256
630 ; RV32-NEXT:    vand.vx v16, v8, a2, v0.t
631 ; RV32-NEXT:    li a3, 40
632 ; RV32-NEXT:    vsll.vx v16, v16, a3, v0.t
633 ; RV32-NEXT:    vor.vv v16, v12, v16, v0.t
634 ; RV32-NEXT:    lui a4, 4080
635 ; RV32-NEXT:    vand.vx v12, v8, a4, v0.t
636 ; RV32-NEXT:    vsll.vi v20, v12, 24, v0.t
637 ; RV32-NEXT:    addi a5, sp, 8
638 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
639 ; RV32-NEXT:    vlse64.v v12, (a5), zero
640 ; RV32-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
641 ; RV32-NEXT:    vand.vv v24, v8, v12, v0.t
642 ; RV32-NEXT:    vsll.vi v24, v24, 8, v0.t
643 ; RV32-NEXT:    vor.vv v20, v20, v24, v0.t
644 ; RV32-NEXT:    vor.vv v16, v16, v20, v0.t
645 ; RV32-NEXT:    vsrl.vx v20, v8, a1, v0.t
646 ; RV32-NEXT:    vsrl.vx v24, v8, a3, v0.t
647 ; RV32-NEXT:    vand.vx v24, v24, a2, v0.t
648 ; RV32-NEXT:    vor.vv v20, v24, v20, v0.t
649 ; RV32-NEXT:    vsrl.vi v24, v8, 24, v0.t
650 ; RV32-NEXT:    vand.vx v24, v24, a4, v0.t
651 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
652 ; RV32-NEXT:    vand.vv v8, v8, v12, v0.t
653 ; RV32-NEXT:    vor.vv v8, v8, v24, v0.t
654 ; RV32-NEXT:    vor.vv v8, v8, v20, v0.t
655 ; RV32-NEXT:    vor.vv v8, v16, v8, v0.t
656 ; RV32-NEXT:    addi sp, sp, 16
657 ; RV32-NEXT:    ret
659 ; RV64-LABEL: vp_bswap_v8i64:
660 ; RV64:       # %bb.0:
661 ; RV64-NEXT:    lui a1, 4080
662 ; RV64-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
663 ; RV64-NEXT:    vand.vx v12, v8, a1, v0.t
664 ; RV64-NEXT:    vsll.vi v12, v12, 24, v0.t
665 ; RV64-NEXT:    li a0, 255
666 ; RV64-NEXT:    slli a0, a0, 24
667 ; RV64-NEXT:    vand.vx v16, v8, a0, v0.t
668 ; RV64-NEXT:    vsll.vi v16, v16, 8, v0.t
669 ; RV64-NEXT:    vor.vv v12, v12, v16, v0.t
670 ; RV64-NEXT:    li a2, 56
671 ; RV64-NEXT:    vsll.vx v16, v8, a2, v0.t
672 ; RV64-NEXT:    lui a3, 16
673 ; RV64-NEXT:    addiw a3, a3, -256
674 ; RV64-NEXT:    vand.vx v20, v8, a3, v0.t
675 ; RV64-NEXT:    li a4, 40
676 ; RV64-NEXT:    vsll.vx v20, v20, a4, v0.t
677 ; RV64-NEXT:    vor.vv v16, v16, v20, v0.t
678 ; RV64-NEXT:    vor.vv v12, v16, v12, v0.t
679 ; RV64-NEXT:    vsrl.vx v16, v8, a2, v0.t
680 ; RV64-NEXT:    vsrl.vx v20, v8, a4, v0.t
681 ; RV64-NEXT:    vand.vx v20, v20, a3, v0.t
682 ; RV64-NEXT:    vor.vv v16, v20, v16, v0.t
683 ; RV64-NEXT:    vsrl.vi v20, v8, 24, v0.t
684 ; RV64-NEXT:    vand.vx v20, v20, a1, v0.t
685 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
686 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
687 ; RV64-NEXT:    vor.vv v8, v8, v20, v0.t
688 ; RV64-NEXT:    vor.vv v8, v8, v16, v0.t
689 ; RV64-NEXT:    vor.vv v8, v12, v8, v0.t
690 ; RV64-NEXT:    ret
691   %v = call <8 x i64> @llvm.vp.bswap.v8i64(<8 x i64> %va, <8 x i1> %m, i32 %evl)
692   ret <8 x i64> %v
695 define <8 x i64> @vp_bswap_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
696 ; RV32-LABEL: vp_bswap_v8i64_unmasked:
697 ; RV32:       # %bb.0:
698 ; RV32-NEXT:    addi sp, sp, -16
699 ; RV32-NEXT:    .cfi_def_cfa_offset 16
700 ; RV32-NEXT:    sw zero, 12(sp)
701 ; RV32-NEXT:    lui a1, 1044480
702 ; RV32-NEXT:    sw a1, 8(sp)
703 ; RV32-NEXT:    li a1, 56
704 ; RV32-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
705 ; RV32-NEXT:    vsll.vx v12, v8, a1
706 ; RV32-NEXT:    lui a2, 16
707 ; RV32-NEXT:    addi a2, a2, -256
708 ; RV32-NEXT:    vand.vx v16, v8, a2
709 ; RV32-NEXT:    li a3, 40
710 ; RV32-NEXT:    vsll.vx v16, v16, a3
711 ; RV32-NEXT:    vor.vv v12, v12, v16
712 ; RV32-NEXT:    lui a4, 4080
713 ; RV32-NEXT:    vand.vx v16, v8, a4
714 ; RV32-NEXT:    vsll.vi v16, v16, 24
715 ; RV32-NEXT:    addi a5, sp, 8
716 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
717 ; RV32-NEXT:    vlse64.v v20, (a5), zero
718 ; RV32-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
719 ; RV32-NEXT:    vand.vv v24, v8, v20
720 ; RV32-NEXT:    vsll.vi v24, v24, 8
721 ; RV32-NEXT:    vor.vv v16, v16, v24
722 ; RV32-NEXT:    vor.vv v12, v12, v16
723 ; RV32-NEXT:    vsrl.vx v16, v8, a1
724 ; RV32-NEXT:    vsrl.vx v24, v8, a3
725 ; RV32-NEXT:    vand.vx v24, v24, a2
726 ; RV32-NEXT:    vor.vv v16, v24, v16
727 ; RV32-NEXT:    vsrl.vi v24, v8, 24
728 ; RV32-NEXT:    vand.vx v24, v24, a4
729 ; RV32-NEXT:    vsrl.vi v8, v8, 8
730 ; RV32-NEXT:    vand.vv v8, v8, v20
731 ; RV32-NEXT:    vor.vv v8, v8, v24
732 ; RV32-NEXT:    vor.vv v8, v8, v16
733 ; RV32-NEXT:    vor.vv v8, v12, v8
734 ; RV32-NEXT:    addi sp, sp, 16
735 ; RV32-NEXT:    ret
737 ; RV64-LABEL: vp_bswap_v8i64_unmasked:
738 ; RV64:       # %bb.0:
739 ; RV64-NEXT:    lui a1, 4080
740 ; RV64-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
741 ; RV64-NEXT:    vand.vx v12, v8, a1
742 ; RV64-NEXT:    vsll.vi v12, v12, 24
743 ; RV64-NEXT:    li a0, 255
744 ; RV64-NEXT:    slli a0, a0, 24
745 ; RV64-NEXT:    vand.vx v16, v8, a0
746 ; RV64-NEXT:    vsll.vi v16, v16, 8
747 ; RV64-NEXT:    vor.vv v12, v12, v16
748 ; RV64-NEXT:    li a2, 56
749 ; RV64-NEXT:    vsll.vx v16, v8, a2
750 ; RV64-NEXT:    lui a3, 16
751 ; RV64-NEXT:    addiw a3, a3, -256
752 ; RV64-NEXT:    vand.vx v20, v8, a3
753 ; RV64-NEXT:    li a4, 40
754 ; RV64-NEXT:    vsll.vx v20, v20, a4
755 ; RV64-NEXT:    vor.vv v16, v16, v20
756 ; RV64-NEXT:    vor.vv v12, v16, v12
757 ; RV64-NEXT:    vsrl.vx v16, v8, a2
758 ; RV64-NEXT:    vsrl.vx v20, v8, a4
759 ; RV64-NEXT:    vand.vx v20, v20, a3
760 ; RV64-NEXT:    vor.vv v16, v20, v16
761 ; RV64-NEXT:    vsrl.vi v20, v8, 24
762 ; RV64-NEXT:    vand.vx v20, v20, a1
763 ; RV64-NEXT:    vsrl.vi v8, v8, 8
764 ; RV64-NEXT:    vand.vx v8, v8, a0
765 ; RV64-NEXT:    vor.vv v8, v8, v20
766 ; RV64-NEXT:    vor.vv v8, v8, v16
767 ; RV64-NEXT:    vor.vv v8, v12, v8
768 ; RV64-NEXT:    ret
769   %head = insertelement <8 x i1> poison, i1 true, i32 0
770   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
771   %v = call <8 x i64> @llvm.vp.bswap.v8i64(<8 x i64> %va, <8 x i1> %m, i32 %evl)
772   ret <8 x i64> %v
775 declare <15 x i64> @llvm.vp.bswap.v15i64(<15 x i64>, <15 x i1>, i32)
777 define <15 x i64> @vp_bswap_v15i64(<15 x i64> %va, <15 x i1> %m, i32 zeroext %evl) {
778 ; RV32-LABEL: vp_bswap_v15i64:
779 ; RV32:       # %bb.0:
780 ; RV32-NEXT:    addi sp, sp, -16
781 ; RV32-NEXT:    .cfi_def_cfa_offset 16
782 ; RV32-NEXT:    csrr a1, vlenb
783 ; RV32-NEXT:    li a2, 24
784 ; RV32-NEXT:    mul a1, a1, a2
785 ; RV32-NEXT:    sub sp, sp, a1
786 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
787 ; RV32-NEXT:    sw zero, 12(sp)
788 ; RV32-NEXT:    lui a1, 1044480
789 ; RV32-NEXT:    sw a1, 8(sp)
790 ; RV32-NEXT:    li a1, 56
791 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
792 ; RV32-NEXT:    vsll.vx v16, v8, a1, v0.t
793 ; RV32-NEXT:    lui a2, 16
794 ; RV32-NEXT:    addi a2, a2, -256
795 ; RV32-NEXT:    vand.vx v24, v8, a2, v0.t
796 ; RV32-NEXT:    li a3, 40
797 ; RV32-NEXT:    vsll.vx v24, v24, a3, v0.t
798 ; RV32-NEXT:    vor.vv v16, v16, v24, v0.t
799 ; RV32-NEXT:    csrr a4, vlenb
800 ; RV32-NEXT:    slli a4, a4, 4
801 ; RV32-NEXT:    add a4, sp, a4
802 ; RV32-NEXT:    addi a4, a4, 16
803 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
804 ; RV32-NEXT:    lui a4, 4080
805 ; RV32-NEXT:    vand.vx v16, v8, a4, v0.t
806 ; RV32-NEXT:    vsll.vi v24, v16, 24, v0.t
807 ; RV32-NEXT:    addi a5, sp, 8
808 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
809 ; RV32-NEXT:    vlse64.v v16, (a5), zero
810 ; RV32-NEXT:    csrr a5, vlenb
811 ; RV32-NEXT:    slli a5, a5, 3
812 ; RV32-NEXT:    add a5, sp, a5
813 ; RV32-NEXT:    addi a5, a5, 16
814 ; RV32-NEXT:    vs8r.v v16, (a5) # Unknown-size Folded Spill
815 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
816 ; RV32-NEXT:    vand.vv v16, v8, v16, v0.t
817 ; RV32-NEXT:    vsll.vi v16, v16, 8, v0.t
818 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
819 ; RV32-NEXT:    csrr a0, vlenb
820 ; RV32-NEXT:    slli a0, a0, 4
821 ; RV32-NEXT:    add a0, sp, a0
822 ; RV32-NEXT:    addi a0, a0, 16
823 ; RV32-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
824 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
825 ; RV32-NEXT:    csrr a0, vlenb
826 ; RV32-NEXT:    slli a0, a0, 4
827 ; RV32-NEXT:    add a0, sp, a0
828 ; RV32-NEXT:    addi a0, a0, 16
829 ; RV32-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
830 ; RV32-NEXT:    vsrl.vx v24, v8, a1, v0.t
831 ; RV32-NEXT:    vsrl.vx v16, v8, a3, v0.t
832 ; RV32-NEXT:    vand.vx v16, v16, a2, v0.t
833 ; RV32-NEXT:    vor.vv v16, v16, v24, v0.t
834 ; RV32-NEXT:    addi a0, sp, 16
835 ; RV32-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
836 ; RV32-NEXT:    vsrl.vi v24, v8, 24, v0.t
837 ; RV32-NEXT:    vand.vx v24, v24, a4, v0.t
838 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
839 ; RV32-NEXT:    csrr a0, vlenb
840 ; RV32-NEXT:    slli a0, a0, 3
841 ; RV32-NEXT:    add a0, sp, a0
842 ; RV32-NEXT:    addi a0, a0, 16
843 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
844 ; RV32-NEXT:    vand.vv v8, v8, v16, v0.t
845 ; RV32-NEXT:    vor.vv v8, v8, v24, v0.t
846 ; RV32-NEXT:    addi a0, sp, 16
847 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
848 ; RV32-NEXT:    vor.vv v8, v8, v16, v0.t
849 ; RV32-NEXT:    csrr a0, vlenb
850 ; RV32-NEXT:    slli a0, a0, 4
851 ; RV32-NEXT:    add a0, sp, a0
852 ; RV32-NEXT:    addi a0, a0, 16
853 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
854 ; RV32-NEXT:    vor.vv v8, v16, v8, v0.t
855 ; RV32-NEXT:    csrr a0, vlenb
856 ; RV32-NEXT:    li a1, 24
857 ; RV32-NEXT:    mul a0, a0, a1
858 ; RV32-NEXT:    add sp, sp, a0
859 ; RV32-NEXT:    addi sp, sp, 16
860 ; RV32-NEXT:    ret
862 ; RV64-LABEL: vp_bswap_v15i64:
863 ; RV64:       # %bb.0:
864 ; RV64-NEXT:    addi sp, sp, -16
865 ; RV64-NEXT:    .cfi_def_cfa_offset 16
866 ; RV64-NEXT:    csrr a1, vlenb
867 ; RV64-NEXT:    slli a1, a1, 3
868 ; RV64-NEXT:    sub sp, sp, a1
869 ; RV64-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
870 ; RV64-NEXT:    lui a1, 4080
871 ; RV64-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
872 ; RV64-NEXT:    vand.vx v16, v8, a1, v0.t
873 ; RV64-NEXT:    vsll.vi v16, v16, 24, v0.t
874 ; RV64-NEXT:    li a0, 255
875 ; RV64-NEXT:    slli a0, a0, 24
876 ; RV64-NEXT:    vand.vx v24, v8, a0, v0.t
877 ; RV64-NEXT:    vsll.vi v24, v24, 8, v0.t
878 ; RV64-NEXT:    vor.vv v16, v16, v24, v0.t
879 ; RV64-NEXT:    addi a2, sp, 16
880 ; RV64-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
881 ; RV64-NEXT:    li a2, 56
882 ; RV64-NEXT:    vsll.vx v24, v8, a2, v0.t
883 ; RV64-NEXT:    lui a3, 16
884 ; RV64-NEXT:    addiw a3, a3, -256
885 ; RV64-NEXT:    li a4, 40
886 ; RV64-NEXT:    vand.vx v16, v8, a3, v0.t
887 ; RV64-NEXT:    vsll.vx v16, v16, a4, v0.t
888 ; RV64-NEXT:    vor.vv v16, v24, v16, v0.t
889 ; RV64-NEXT:    addi a5, sp, 16
890 ; RV64-NEXT:    vl8r.v v24, (a5) # Unknown-size Folded Reload
891 ; RV64-NEXT:    vor.vv v16, v16, v24, v0.t
892 ; RV64-NEXT:    vs8r.v v16, (a5) # Unknown-size Folded Spill
893 ; RV64-NEXT:    vsrl.vx v24, v8, a2, v0.t
894 ; RV64-NEXT:    vsrl.vx v16, v8, a4, v0.t
895 ; RV64-NEXT:    vand.vx v16, v16, a3, v0.t
896 ; RV64-NEXT:    vor.vv v24, v16, v24, v0.t
897 ; RV64-NEXT:    vsrl.vi v16, v8, 24, v0.t
898 ; RV64-NEXT:    vand.vx v16, v16, a1, v0.t
899 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
900 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
901 ; RV64-NEXT:    vor.vv v8, v8, v16, v0.t
902 ; RV64-NEXT:    vor.vv v8, v8, v24, v0.t
903 ; RV64-NEXT:    addi a0, sp, 16
904 ; RV64-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
905 ; RV64-NEXT:    vor.vv v8, v16, v8, v0.t
906 ; RV64-NEXT:    csrr a0, vlenb
907 ; RV64-NEXT:    slli a0, a0, 3
908 ; RV64-NEXT:    add sp, sp, a0
909 ; RV64-NEXT:    addi sp, sp, 16
910 ; RV64-NEXT:    ret
911   %v = call <15 x i64> @llvm.vp.bswap.v15i64(<15 x i64> %va, <15 x i1> %m, i32 %evl)
912   ret <15 x i64> %v
915 define <15 x i64> @vp_bswap_v15i64_unmasked(<15 x i64> %va, i32 zeroext %evl) {
916 ; RV32-LABEL: vp_bswap_v15i64_unmasked:
917 ; RV32:       # %bb.0:
918 ; RV32-NEXT:    addi sp, sp, -16
919 ; RV32-NEXT:    .cfi_def_cfa_offset 16
920 ; RV32-NEXT:    csrr a1, vlenb
921 ; RV32-NEXT:    slli a1, a1, 3
922 ; RV32-NEXT:    sub sp, sp, a1
923 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
924 ; RV32-NEXT:    sw zero, 12(sp)
925 ; RV32-NEXT:    lui a1, 1044480
926 ; RV32-NEXT:    sw a1, 8(sp)
927 ; RV32-NEXT:    li a1, 56
928 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
929 ; RV32-NEXT:    vsll.vx v16, v8, a1
930 ; RV32-NEXT:    lui a2, 16
931 ; RV32-NEXT:    addi a2, a2, -256
932 ; RV32-NEXT:    vand.vx v24, v8, a2
933 ; RV32-NEXT:    li a3, 40
934 ; RV32-NEXT:    vsll.vx v24, v24, a3
935 ; RV32-NEXT:    vor.vv v16, v16, v24
936 ; RV32-NEXT:    addi a4, sp, 16
937 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
938 ; RV32-NEXT:    lui a4, 4080
939 ; RV32-NEXT:    vand.vx v16, v8, a4
940 ; RV32-NEXT:    vsll.vi v0, v16, 24
941 ; RV32-NEXT:    addi a5, sp, 8
942 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
943 ; RV32-NEXT:    vlse64.v v16, (a5), zero
944 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
945 ; RV32-NEXT:    vand.vv v24, v8, v16
946 ; RV32-NEXT:    vsll.vi v24, v24, 8
947 ; RV32-NEXT:    vor.vv v24, v0, v24
948 ; RV32-NEXT:    addi a0, sp, 16
949 ; RV32-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
950 ; RV32-NEXT:    vor.vv v24, v0, v24
951 ; RV32-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
952 ; RV32-NEXT:    vsrl.vx v0, v8, a3
953 ; RV32-NEXT:    vand.vx v0, v0, a2
954 ; RV32-NEXT:    vsrl.vx v24, v8, a1
955 ; RV32-NEXT:    vor.vv v24, v0, v24
956 ; RV32-NEXT:    vsrl.vi v0, v8, 8
957 ; RV32-NEXT:    vand.vv v16, v0, v16
958 ; RV32-NEXT:    vsrl.vi v8, v8, 24
959 ; RV32-NEXT:    vand.vx v8, v8, a4
960 ; RV32-NEXT:    vor.vv v8, v16, v8
961 ; RV32-NEXT:    vor.vv v8, v8, v24
962 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
963 ; RV32-NEXT:    vor.vv v8, v16, v8
964 ; RV32-NEXT:    csrr a0, vlenb
965 ; RV32-NEXT:    slli a0, a0, 3
966 ; RV32-NEXT:    add sp, sp, a0
967 ; RV32-NEXT:    addi sp, sp, 16
968 ; RV32-NEXT:    ret
970 ; RV64-LABEL: vp_bswap_v15i64_unmasked:
971 ; RV64:       # %bb.0:
972 ; RV64-NEXT:    lui a1, 4080
973 ; RV64-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
974 ; RV64-NEXT:    vand.vx v16, v8, a1
975 ; RV64-NEXT:    vsll.vi v16, v16, 24
976 ; RV64-NEXT:    li a0, 255
977 ; RV64-NEXT:    slli a0, a0, 24
978 ; RV64-NEXT:    vand.vx v24, v8, a0
979 ; RV64-NEXT:    vsll.vi v24, v24, 8
980 ; RV64-NEXT:    vor.vv v16, v16, v24
981 ; RV64-NEXT:    li a2, 56
982 ; RV64-NEXT:    vsll.vx v24, v8, a2
983 ; RV64-NEXT:    lui a3, 16
984 ; RV64-NEXT:    addiw a3, a3, -256
985 ; RV64-NEXT:    vand.vx v0, v8, a3
986 ; RV64-NEXT:    li a4, 40
987 ; RV64-NEXT:    vsll.vx v0, v0, a4
988 ; RV64-NEXT:    vor.vv v24, v24, v0
989 ; RV64-NEXT:    vor.vv v16, v24, v16
990 ; RV64-NEXT:    vsrl.vx v24, v8, a2
991 ; RV64-NEXT:    vsrl.vx v0, v8, a4
992 ; RV64-NEXT:    vand.vx v0, v0, a3
993 ; RV64-NEXT:    vor.vv v24, v0, v24
994 ; RV64-NEXT:    vsrl.vi v0, v8, 24
995 ; RV64-NEXT:    vand.vx v0, v0, a1
996 ; RV64-NEXT:    vsrl.vi v8, v8, 8
997 ; RV64-NEXT:    vand.vx v8, v8, a0
998 ; RV64-NEXT:    vor.vv v8, v8, v0
999 ; RV64-NEXT:    vor.vv v8, v8, v24
1000 ; RV64-NEXT:    vor.vv v8, v16, v8
1001 ; RV64-NEXT:    ret
1002   %head = insertelement <15 x i1> poison, i1 true, i32 0
1003   %m = shufflevector <15 x i1> %head, <15 x i1> poison, <15 x i32> zeroinitializer
1004   %v = call <15 x i64> @llvm.vp.bswap.v15i64(<15 x i64> %va, <15 x i1> %m, i32 %evl)
1005   ret <15 x i64> %v
1008 declare <16 x i64> @llvm.vp.bswap.v16i64(<16 x i64>, <16 x i1>, i32)
1010 define <16 x i64> @vp_bswap_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1011 ; RV32-LABEL: vp_bswap_v16i64:
1012 ; RV32:       # %bb.0:
1013 ; RV32-NEXT:    addi sp, sp, -16
1014 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1015 ; RV32-NEXT:    csrr a1, vlenb
1016 ; RV32-NEXT:    li a2, 24
1017 ; RV32-NEXT:    mul a1, a1, a2
1018 ; RV32-NEXT:    sub sp, sp, a1
1019 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
1020 ; RV32-NEXT:    sw zero, 12(sp)
1021 ; RV32-NEXT:    lui a1, 1044480
1022 ; RV32-NEXT:    sw a1, 8(sp)
1023 ; RV32-NEXT:    li a1, 56
1024 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1025 ; RV32-NEXT:    vsll.vx v16, v8, a1, v0.t
1026 ; RV32-NEXT:    lui a2, 16
1027 ; RV32-NEXT:    addi a2, a2, -256
1028 ; RV32-NEXT:    vand.vx v24, v8, a2, v0.t
1029 ; RV32-NEXT:    li a3, 40
1030 ; RV32-NEXT:    vsll.vx v24, v24, a3, v0.t
1031 ; RV32-NEXT:    vor.vv v16, v16, v24, v0.t
1032 ; RV32-NEXT:    csrr a4, vlenb
1033 ; RV32-NEXT:    slli a4, a4, 4
1034 ; RV32-NEXT:    add a4, sp, a4
1035 ; RV32-NEXT:    addi a4, a4, 16
1036 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1037 ; RV32-NEXT:    lui a4, 4080
1038 ; RV32-NEXT:    vand.vx v16, v8, a4, v0.t
1039 ; RV32-NEXT:    vsll.vi v24, v16, 24, v0.t
1040 ; RV32-NEXT:    addi a5, sp, 8
1041 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1042 ; RV32-NEXT:    vlse64.v v16, (a5), zero
1043 ; RV32-NEXT:    csrr a5, vlenb
1044 ; RV32-NEXT:    slli a5, a5, 3
1045 ; RV32-NEXT:    add a5, sp, a5
1046 ; RV32-NEXT:    addi a5, a5, 16
1047 ; RV32-NEXT:    vs8r.v v16, (a5) # Unknown-size Folded Spill
1048 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1049 ; RV32-NEXT:    vand.vv v16, v8, v16, v0.t
1050 ; RV32-NEXT:    vsll.vi v16, v16, 8, v0.t
1051 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
1052 ; RV32-NEXT:    csrr a0, vlenb
1053 ; RV32-NEXT:    slli a0, a0, 4
1054 ; RV32-NEXT:    add a0, sp, a0
1055 ; RV32-NEXT:    addi a0, a0, 16
1056 ; RV32-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1057 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
1058 ; RV32-NEXT:    csrr a0, vlenb
1059 ; RV32-NEXT:    slli a0, a0, 4
1060 ; RV32-NEXT:    add a0, sp, a0
1061 ; RV32-NEXT:    addi a0, a0, 16
1062 ; RV32-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
1063 ; RV32-NEXT:    vsrl.vx v24, v8, a1, v0.t
1064 ; RV32-NEXT:    vsrl.vx v16, v8, a3, v0.t
1065 ; RV32-NEXT:    vand.vx v16, v16, a2, v0.t
1066 ; RV32-NEXT:    vor.vv v16, v16, v24, v0.t
1067 ; RV32-NEXT:    addi a0, sp, 16
1068 ; RV32-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
1069 ; RV32-NEXT:    vsrl.vi v24, v8, 24, v0.t
1070 ; RV32-NEXT:    vand.vx v24, v24, a4, v0.t
1071 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
1072 ; RV32-NEXT:    csrr a0, vlenb
1073 ; RV32-NEXT:    slli a0, a0, 3
1074 ; RV32-NEXT:    add a0, sp, a0
1075 ; RV32-NEXT:    addi a0, a0, 16
1076 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1077 ; RV32-NEXT:    vand.vv v8, v8, v16, v0.t
1078 ; RV32-NEXT:    vor.vv v8, v8, v24, v0.t
1079 ; RV32-NEXT:    addi a0, sp, 16
1080 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1081 ; RV32-NEXT:    vor.vv v8, v8, v16, v0.t
1082 ; RV32-NEXT:    csrr a0, vlenb
1083 ; RV32-NEXT:    slli a0, a0, 4
1084 ; RV32-NEXT:    add a0, sp, a0
1085 ; RV32-NEXT:    addi a0, a0, 16
1086 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1087 ; RV32-NEXT:    vor.vv v8, v16, v8, v0.t
1088 ; RV32-NEXT:    csrr a0, vlenb
1089 ; RV32-NEXT:    li a1, 24
1090 ; RV32-NEXT:    mul a0, a0, a1
1091 ; RV32-NEXT:    add sp, sp, a0
1092 ; RV32-NEXT:    addi sp, sp, 16
1093 ; RV32-NEXT:    ret
1095 ; RV64-LABEL: vp_bswap_v16i64:
1096 ; RV64:       # %bb.0:
1097 ; RV64-NEXT:    addi sp, sp, -16
1098 ; RV64-NEXT:    .cfi_def_cfa_offset 16
1099 ; RV64-NEXT:    csrr a1, vlenb
1100 ; RV64-NEXT:    slli a1, a1, 3
1101 ; RV64-NEXT:    sub sp, sp, a1
1102 ; RV64-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1103 ; RV64-NEXT:    lui a1, 4080
1104 ; RV64-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1105 ; RV64-NEXT:    vand.vx v16, v8, a1, v0.t
1106 ; RV64-NEXT:    vsll.vi v16, v16, 24, v0.t
1107 ; RV64-NEXT:    li a0, 255
1108 ; RV64-NEXT:    slli a0, a0, 24
1109 ; RV64-NEXT:    vand.vx v24, v8, a0, v0.t
1110 ; RV64-NEXT:    vsll.vi v24, v24, 8, v0.t
1111 ; RV64-NEXT:    vor.vv v16, v16, v24, v0.t
1112 ; RV64-NEXT:    addi a2, sp, 16
1113 ; RV64-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
1114 ; RV64-NEXT:    li a2, 56
1115 ; RV64-NEXT:    vsll.vx v24, v8, a2, v0.t
1116 ; RV64-NEXT:    lui a3, 16
1117 ; RV64-NEXT:    addiw a3, a3, -256
1118 ; RV64-NEXT:    li a4, 40
1119 ; RV64-NEXT:    vand.vx v16, v8, a3, v0.t
1120 ; RV64-NEXT:    vsll.vx v16, v16, a4, v0.t
1121 ; RV64-NEXT:    vor.vv v16, v24, v16, v0.t
1122 ; RV64-NEXT:    addi a5, sp, 16
1123 ; RV64-NEXT:    vl8r.v v24, (a5) # Unknown-size Folded Reload
1124 ; RV64-NEXT:    vor.vv v16, v16, v24, v0.t
1125 ; RV64-NEXT:    vs8r.v v16, (a5) # Unknown-size Folded Spill
1126 ; RV64-NEXT:    vsrl.vx v24, v8, a2, v0.t
1127 ; RV64-NEXT:    vsrl.vx v16, v8, a4, v0.t
1128 ; RV64-NEXT:    vand.vx v16, v16, a3, v0.t
1129 ; RV64-NEXT:    vor.vv v24, v16, v24, v0.t
1130 ; RV64-NEXT:    vsrl.vi v16, v8, 24, v0.t
1131 ; RV64-NEXT:    vand.vx v16, v16, a1, v0.t
1132 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
1133 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
1134 ; RV64-NEXT:    vor.vv v8, v8, v16, v0.t
1135 ; RV64-NEXT:    vor.vv v8, v8, v24, v0.t
1136 ; RV64-NEXT:    addi a0, sp, 16
1137 ; RV64-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1138 ; RV64-NEXT:    vor.vv v8, v16, v8, v0.t
1139 ; RV64-NEXT:    csrr a0, vlenb
1140 ; RV64-NEXT:    slli a0, a0, 3
1141 ; RV64-NEXT:    add sp, sp, a0
1142 ; RV64-NEXT:    addi sp, sp, 16
1143 ; RV64-NEXT:    ret
1144   %v = call <16 x i64> @llvm.vp.bswap.v16i64(<16 x i64> %va, <16 x i1> %m, i32 %evl)
1145   ret <16 x i64> %v
1148 define <16 x i64> @vp_bswap_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1149 ; RV32-LABEL: vp_bswap_v16i64_unmasked:
1150 ; RV32:       # %bb.0:
1151 ; RV32-NEXT:    addi sp, sp, -16
1152 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1153 ; RV32-NEXT:    csrr a1, vlenb
1154 ; RV32-NEXT:    slli a1, a1, 3
1155 ; RV32-NEXT:    sub sp, sp, a1
1156 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1157 ; RV32-NEXT:    sw zero, 12(sp)
1158 ; RV32-NEXT:    lui a1, 1044480
1159 ; RV32-NEXT:    sw a1, 8(sp)
1160 ; RV32-NEXT:    li a1, 56
1161 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1162 ; RV32-NEXT:    vsll.vx v16, v8, a1
1163 ; RV32-NEXT:    lui a2, 16
1164 ; RV32-NEXT:    addi a2, a2, -256
1165 ; RV32-NEXT:    vand.vx v24, v8, a2
1166 ; RV32-NEXT:    li a3, 40
1167 ; RV32-NEXT:    vsll.vx v24, v24, a3
1168 ; RV32-NEXT:    vor.vv v16, v16, v24
1169 ; RV32-NEXT:    addi a4, sp, 16
1170 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1171 ; RV32-NEXT:    lui a4, 4080
1172 ; RV32-NEXT:    vand.vx v16, v8, a4
1173 ; RV32-NEXT:    vsll.vi v0, v16, 24
1174 ; RV32-NEXT:    addi a5, sp, 8
1175 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1176 ; RV32-NEXT:    vlse64.v v16, (a5), zero
1177 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1178 ; RV32-NEXT:    vand.vv v24, v8, v16
1179 ; RV32-NEXT:    vsll.vi v24, v24, 8
1180 ; RV32-NEXT:    vor.vv v24, v0, v24
1181 ; RV32-NEXT:    addi a0, sp, 16
1182 ; RV32-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
1183 ; RV32-NEXT:    vor.vv v24, v0, v24
1184 ; RV32-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1185 ; RV32-NEXT:    vsrl.vx v0, v8, a3
1186 ; RV32-NEXT:    vand.vx v0, v0, a2
1187 ; RV32-NEXT:    vsrl.vx v24, v8, a1
1188 ; RV32-NEXT:    vor.vv v24, v0, v24
1189 ; RV32-NEXT:    vsrl.vi v0, v8, 8
1190 ; RV32-NEXT:    vand.vv v16, v0, v16
1191 ; RV32-NEXT:    vsrl.vi v8, v8, 24
1192 ; RV32-NEXT:    vand.vx v8, v8, a4
1193 ; RV32-NEXT:    vor.vv v8, v16, v8
1194 ; RV32-NEXT:    vor.vv v8, v8, v24
1195 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1196 ; RV32-NEXT:    vor.vv v8, v16, v8
1197 ; RV32-NEXT:    csrr a0, vlenb
1198 ; RV32-NEXT:    slli a0, a0, 3
1199 ; RV32-NEXT:    add sp, sp, a0
1200 ; RV32-NEXT:    addi sp, sp, 16
1201 ; RV32-NEXT:    ret
1203 ; RV64-LABEL: vp_bswap_v16i64_unmasked:
1204 ; RV64:       # %bb.0:
1205 ; RV64-NEXT:    lui a1, 4080
1206 ; RV64-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1207 ; RV64-NEXT:    vand.vx v16, v8, a1
1208 ; RV64-NEXT:    vsll.vi v16, v16, 24
1209 ; RV64-NEXT:    li a0, 255
1210 ; RV64-NEXT:    slli a0, a0, 24
1211 ; RV64-NEXT:    vand.vx v24, v8, a0
1212 ; RV64-NEXT:    vsll.vi v24, v24, 8
1213 ; RV64-NEXT:    vor.vv v16, v16, v24
1214 ; RV64-NEXT:    li a2, 56
1215 ; RV64-NEXT:    vsll.vx v24, v8, a2
1216 ; RV64-NEXT:    lui a3, 16
1217 ; RV64-NEXT:    addiw a3, a3, -256
1218 ; RV64-NEXT:    vand.vx v0, v8, a3
1219 ; RV64-NEXT:    li a4, 40
1220 ; RV64-NEXT:    vsll.vx v0, v0, a4
1221 ; RV64-NEXT:    vor.vv v24, v24, v0
1222 ; RV64-NEXT:    vor.vv v16, v24, v16
1223 ; RV64-NEXT:    vsrl.vx v24, v8, a2
1224 ; RV64-NEXT:    vsrl.vx v0, v8, a4
1225 ; RV64-NEXT:    vand.vx v0, v0, a3
1226 ; RV64-NEXT:    vor.vv v24, v0, v24
1227 ; RV64-NEXT:    vsrl.vi v0, v8, 24
1228 ; RV64-NEXT:    vand.vx v0, v0, a1
1229 ; RV64-NEXT:    vsrl.vi v8, v8, 8
1230 ; RV64-NEXT:    vand.vx v8, v8, a0
1231 ; RV64-NEXT:    vor.vv v8, v8, v0
1232 ; RV64-NEXT:    vor.vv v8, v8, v24
1233 ; RV64-NEXT:    vor.vv v8, v16, v8
1234 ; RV64-NEXT:    ret
1235   %head = insertelement <16 x i1> poison, i1 true, i32 0
1236   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1237   %v = call <16 x i64> @llvm.vp.bswap.v16i64(<16 x i64> %va, <16 x i1> %m, i32 %evl)
1238   ret <16 x i64> %v
1241 declare <128 x i16> @llvm.vp.bswap.v128i16(<128 x i16>, <128 x i1>, i32)
1243 define <128 x i16> @vp_bswap_v128i16(<128 x i16> %va, <128 x i1> %m, i32 zeroext %evl) {
1244 ; CHECK-LABEL: vp_bswap_v128i16:
1245 ; CHECK:       # %bb.0:
1246 ; CHECK-NEXT:    addi sp, sp, -16
1247 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1248 ; CHECK-NEXT:    csrr a1, vlenb
1249 ; CHECK-NEXT:    slli a1, a1, 4
1250 ; CHECK-NEXT:    sub sp, sp, a1
1251 ; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
1252 ; CHECK-NEXT:    csrr a1, vlenb
1253 ; CHECK-NEXT:    slli a1, a1, 3
1254 ; CHECK-NEXT:    add a1, sp, a1
1255 ; CHECK-NEXT:    addi a1, a1, 16
1256 ; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
1257 ; CHECK-NEXT:    vsetivli zero, 8, e8, m1, ta, ma
1258 ; CHECK-NEXT:    li a2, 64
1259 ; CHECK-NEXT:    vslidedown.vi v24, v0, 8
1260 ; CHECK-NEXT:    mv a1, a0
1261 ; CHECK-NEXT:    bltu a0, a2, .LBB26_2
1262 ; CHECK-NEXT:  # %bb.1:
1263 ; CHECK-NEXT:    li a1, 64
1264 ; CHECK-NEXT:  .LBB26_2:
1265 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
1266 ; CHECK-NEXT:    vsrl.vi v16, v8, 8, v0.t
1267 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
1268 ; CHECK-NEXT:    vor.vv v8, v8, v16, v0.t
1269 ; CHECK-NEXT:    addi a1, sp, 16
1270 ; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
1271 ; CHECK-NEXT:    addi a1, a0, -64
1272 ; CHECK-NEXT:    sltu a0, a0, a1
1273 ; CHECK-NEXT:    addi a0, a0, -1
1274 ; CHECK-NEXT:    and a0, a0, a1
1275 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1276 ; CHECK-NEXT:    vmv1r.v v0, v24
1277 ; CHECK-NEXT:    csrr a0, vlenb
1278 ; CHECK-NEXT:    slli a0, a0, 3
1279 ; CHECK-NEXT:    add a0, sp, a0
1280 ; CHECK-NEXT:    addi a0, a0, 16
1281 ; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1282 ; CHECK-NEXT:    vsrl.vi v16, v8, 8, v0.t
1283 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
1284 ; CHECK-NEXT:    vor.vv v16, v8, v16, v0.t
1285 ; CHECK-NEXT:    addi a0, sp, 16
1286 ; CHECK-NEXT:    vl8r.v v8, (a0) # Unknown-size Folded Reload
1287 ; CHECK-NEXT:    csrr a0, vlenb
1288 ; CHECK-NEXT:    slli a0, a0, 4
1289 ; CHECK-NEXT:    add sp, sp, a0
1290 ; CHECK-NEXT:    addi sp, sp, 16
1291 ; CHECK-NEXT:    ret
1292   %v = call <128 x i16> @llvm.vp.bswap.v128i16(<128 x i16> %va, <128 x i1> %m, i32 %evl)
1293   ret <128 x i16> %v
1296 define <128 x i16> @vp_bswap_v128i16_unmasked(<128 x i16> %va, i32 zeroext %evl) {
1297 ; CHECK-LABEL: vp_bswap_v128i16_unmasked:
1298 ; CHECK:       # %bb.0:
1299 ; CHECK-NEXT:    li a2, 64
1300 ; CHECK-NEXT:    mv a1, a0
1301 ; CHECK-NEXT:    bltu a0, a2, .LBB27_2
1302 ; CHECK-NEXT:  # %bb.1:
1303 ; CHECK-NEXT:    li a1, 64
1304 ; CHECK-NEXT:  .LBB27_2:
1305 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
1306 ; CHECK-NEXT:    vsrl.vi v24, v8, 8
1307 ; CHECK-NEXT:    vsll.vi v8, v8, 8
1308 ; CHECK-NEXT:    vor.vv v8, v8, v24
1309 ; CHECK-NEXT:    addi a1, a0, -64
1310 ; CHECK-NEXT:    sltu a0, a0, a1
1311 ; CHECK-NEXT:    addi a0, a0, -1
1312 ; CHECK-NEXT:    and a0, a0, a1
1313 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1314 ; CHECK-NEXT:    vsrl.vi v24, v16, 8
1315 ; CHECK-NEXT:    vsll.vi v16, v16, 8
1316 ; CHECK-NEXT:    vor.vv v16, v16, v24
1317 ; CHECK-NEXT:    ret
1318   %head = insertelement <128 x i1> poison, i1 true, i32 0
1319   %m = shufflevector <128 x i1> %head, <128 x i1> poison, <128 x i32> zeroinitializer
1320   %v = call <128 x i16> @llvm.vp.bswap.v128i16(<128 x i16> %va, <128 x i1> %m, i32 %evl)
1321   ret <128 x i16> %v