Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / bswap-vp.ll
blobaadd9852af11eafe7fde50b25a9e0107cf38a078
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
6 ; RUN: llc -mtriple=riscv32 -mattr=+v,+zvkb,+m -target-abi=ilp32d \
7 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVKB
8 ; RUN: llc -mtriple=riscv64 -mattr=+v,+zvkb,+m -target-abi=lp64d \
9 ; RUN:     -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVKB
11 declare <vscale x 1 x i16> @llvm.vp.bswap.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i1>, i32)
13 define <vscale x 1 x i16> @vp_bswap_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
14 ; CHECK-LABEL: vp_bswap_nxv1i16:
15 ; CHECK:       # %bb.0:
16 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
17 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
18 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
19 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
20 ; CHECK-NEXT:    ret
22 ; CHECK-ZVKB-LABEL: vp_bswap_nxv1i16:
23 ; CHECK-ZVKB:       # %bb.0:
24 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
25 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
26 ; CHECK-ZVKB-NEXT:    ret
27   %v = call <vscale x 1 x i16> @llvm.vp.bswap.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 %evl)
28   ret <vscale x 1 x i16> %v
31 define <vscale x 1 x i16> @vp_bswap_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
32 ; CHECK-LABEL: vp_bswap_nxv1i16_unmasked:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
35 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
36 ; CHECK-NEXT:    vsll.vi v8, v8, 8
37 ; CHECK-NEXT:    vor.vv v8, v8, v9
38 ; CHECK-NEXT:    ret
40 ; CHECK-ZVKB-LABEL: vp_bswap_nxv1i16_unmasked:
41 ; CHECK-ZVKB:       # %bb.0:
42 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
43 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
44 ; CHECK-ZVKB-NEXT:    ret
45   %v = call <vscale x 1 x i16> @llvm.vp.bswap.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
46   ret <vscale x 1 x i16> %v
49 declare <vscale x 2 x i16> @llvm.vp.bswap.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i1>, i32)
51 define <vscale x 2 x i16> @vp_bswap_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
52 ; CHECK-LABEL: vp_bswap_nxv2i16:
53 ; CHECK:       # %bb.0:
54 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
55 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
56 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
57 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
58 ; CHECK-NEXT:    ret
60 ; CHECK-ZVKB-LABEL: vp_bswap_nxv2i16:
61 ; CHECK-ZVKB:       # %bb.0:
62 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
63 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
64 ; CHECK-ZVKB-NEXT:    ret
65   %v = call <vscale x 2 x i16> @llvm.vp.bswap.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
66   ret <vscale x 2 x i16> %v
69 define <vscale x 2 x i16> @vp_bswap_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
70 ; CHECK-LABEL: vp_bswap_nxv2i16_unmasked:
71 ; CHECK:       # %bb.0:
72 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
73 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
74 ; CHECK-NEXT:    vsll.vi v8, v8, 8
75 ; CHECK-NEXT:    vor.vv v8, v8, v9
76 ; CHECK-NEXT:    ret
78 ; CHECK-ZVKB-LABEL: vp_bswap_nxv2i16_unmasked:
79 ; CHECK-ZVKB:       # %bb.0:
80 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
81 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
82 ; CHECK-ZVKB-NEXT:    ret
83   %v = call <vscale x 2 x i16> @llvm.vp.bswap.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
84   ret <vscale x 2 x i16> %v
87 declare <vscale x 4 x i16> @llvm.vp.bswap.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i1>, i32)
89 define <vscale x 4 x i16> @vp_bswap_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
90 ; CHECK-LABEL: vp_bswap_nxv4i16:
91 ; CHECK:       # %bb.0:
92 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
93 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
94 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
95 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
96 ; CHECK-NEXT:    ret
98 ; CHECK-ZVKB-LABEL: vp_bswap_nxv4i16:
99 ; CHECK-ZVKB:       # %bb.0:
100 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
101 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
102 ; CHECK-ZVKB-NEXT:    ret
103   %v = call <vscale x 4 x i16> @llvm.vp.bswap.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 %evl)
104   ret <vscale x 4 x i16> %v
107 define <vscale x 4 x i16> @vp_bswap_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
108 ; CHECK-LABEL: vp_bswap_nxv4i16_unmasked:
109 ; CHECK:       # %bb.0:
110 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
111 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
112 ; CHECK-NEXT:    vsll.vi v8, v8, 8
113 ; CHECK-NEXT:    vor.vv v8, v8, v9
114 ; CHECK-NEXT:    ret
116 ; CHECK-ZVKB-LABEL: vp_bswap_nxv4i16_unmasked:
117 ; CHECK-ZVKB:       # %bb.0:
118 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
119 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
120 ; CHECK-ZVKB-NEXT:    ret
121   %v = call <vscale x 4 x i16> @llvm.vp.bswap.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
122   ret <vscale x 4 x i16> %v
125 declare <vscale x 8 x i16> @llvm.vp.bswap.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i1>, i32)
127 define <vscale x 8 x i16> @vp_bswap_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
128 ; CHECK-LABEL: vp_bswap_nxv8i16:
129 ; CHECK:       # %bb.0:
130 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
131 ; CHECK-NEXT:    vsrl.vi v10, v8, 8, v0.t
132 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
133 ; CHECK-NEXT:    vor.vv v8, v8, v10, v0.t
134 ; CHECK-NEXT:    ret
136 ; CHECK-ZVKB-LABEL: vp_bswap_nxv8i16:
137 ; CHECK-ZVKB:       # %bb.0:
138 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
139 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
140 ; CHECK-ZVKB-NEXT:    ret
141   %v = call <vscale x 8 x i16> @llvm.vp.bswap.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 %evl)
142   ret <vscale x 8 x i16> %v
145 define <vscale x 8 x i16> @vp_bswap_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
146 ; CHECK-LABEL: vp_bswap_nxv8i16_unmasked:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
149 ; CHECK-NEXT:    vsrl.vi v10, v8, 8
150 ; CHECK-NEXT:    vsll.vi v8, v8, 8
151 ; CHECK-NEXT:    vor.vv v8, v8, v10
152 ; CHECK-NEXT:    ret
154 ; CHECK-ZVKB-LABEL: vp_bswap_nxv8i16_unmasked:
155 ; CHECK-ZVKB:       # %bb.0:
156 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
157 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
158 ; CHECK-ZVKB-NEXT:    ret
159   %v = call <vscale x 8 x i16> @llvm.vp.bswap.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
160   ret <vscale x 8 x i16> %v
163 declare <vscale x 16 x i16> @llvm.vp.bswap.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i1>, i32)
165 define <vscale x 16 x i16> @vp_bswap_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
166 ; CHECK-LABEL: vp_bswap_nxv16i16:
167 ; CHECK:       # %bb.0:
168 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
169 ; CHECK-NEXT:    vsrl.vi v12, v8, 8, v0.t
170 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
171 ; CHECK-NEXT:    vor.vv v8, v8, v12, v0.t
172 ; CHECK-NEXT:    ret
174 ; CHECK-ZVKB-LABEL: vp_bswap_nxv16i16:
175 ; CHECK-ZVKB:       # %bb.0:
176 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
177 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
178 ; CHECK-ZVKB-NEXT:    ret
179   %v = call <vscale x 16 x i16> @llvm.vp.bswap.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 %evl)
180   ret <vscale x 16 x i16> %v
183 define <vscale x 16 x i16> @vp_bswap_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
184 ; CHECK-LABEL: vp_bswap_nxv16i16_unmasked:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
187 ; CHECK-NEXT:    vsrl.vi v12, v8, 8
188 ; CHECK-NEXT:    vsll.vi v8, v8, 8
189 ; CHECK-NEXT:    vor.vv v8, v8, v12
190 ; CHECK-NEXT:    ret
192 ; CHECK-ZVKB-LABEL: vp_bswap_nxv16i16_unmasked:
193 ; CHECK-ZVKB:       # %bb.0:
194 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
195 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
196 ; CHECK-ZVKB-NEXT:    ret
197   %v = call <vscale x 16 x i16> @llvm.vp.bswap.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
198   ret <vscale x 16 x i16> %v
201 declare <vscale x 32 x i16> @llvm.vp.bswap.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i1>, i32)
203 define <vscale x 32 x i16> @vp_bswap_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
204 ; CHECK-LABEL: vp_bswap_nxv32i16:
205 ; CHECK:       # %bb.0:
206 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
207 ; CHECK-NEXT:    vsrl.vi v16, v8, 8, v0.t
208 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
209 ; CHECK-NEXT:    vor.vv v8, v8, v16, v0.t
210 ; CHECK-NEXT:    ret
212 ; CHECK-ZVKB-LABEL: vp_bswap_nxv32i16:
213 ; CHECK-ZVKB:       # %bb.0:
214 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
215 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
216 ; CHECK-ZVKB-NEXT:    ret
217   %v = call <vscale x 32 x i16> @llvm.vp.bswap.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 %evl)
218   ret <vscale x 32 x i16> %v
221 define <vscale x 32 x i16> @vp_bswap_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
222 ; CHECK-LABEL: vp_bswap_nxv32i16_unmasked:
223 ; CHECK:       # %bb.0:
224 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
225 ; CHECK-NEXT:    vsrl.vi v16, v8, 8
226 ; CHECK-NEXT:    vsll.vi v8, v8, 8
227 ; CHECK-NEXT:    vor.vv v8, v8, v16
228 ; CHECK-NEXT:    ret
230 ; CHECK-ZVKB-LABEL: vp_bswap_nxv32i16_unmasked:
231 ; CHECK-ZVKB:       # %bb.0:
232 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
233 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
234 ; CHECK-ZVKB-NEXT:    ret
235   %v = call <vscale x 32 x i16> @llvm.vp.bswap.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
236   ret <vscale x 32 x i16> %v
239 declare <vscale x 1 x i32> @llvm.vp.bswap.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i1>, i32)
241 define <vscale x 1 x i32> @vp_bswap_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
242 ; CHECK-LABEL: vp_bswap_nxv1i32:
243 ; CHECK:       # %bb.0:
244 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
245 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
246 ; CHECK-NEXT:    lui a0, 16
247 ; CHECK-NEXT:    addi a0, a0, -256
248 ; CHECK-NEXT:    vand.vx v9, v9, a0, v0.t
249 ; CHECK-NEXT:    vsrl.vi v10, v8, 24, v0.t
250 ; CHECK-NEXT:    vor.vv v9, v9, v10, v0.t
251 ; CHECK-NEXT:    vand.vx v10, v8, a0, v0.t
252 ; CHECK-NEXT:    vsll.vi v10, v10, 8, v0.t
253 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
254 ; CHECK-NEXT:    vor.vv v8, v8, v10, v0.t
255 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
256 ; CHECK-NEXT:    ret
258 ; CHECK-ZVKB-LABEL: vp_bswap_nxv1i32:
259 ; CHECK-ZVKB:       # %bb.0:
260 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
261 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
262 ; CHECK-ZVKB-NEXT:    ret
263   %v = call <vscale x 1 x i32> @llvm.vp.bswap.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 %evl)
264   ret <vscale x 1 x i32> %v
267 define <vscale x 1 x i32> @vp_bswap_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
268 ; CHECK-LABEL: vp_bswap_nxv1i32_unmasked:
269 ; CHECK:       # %bb.0:
270 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
271 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
272 ; CHECK-NEXT:    lui a0, 16
273 ; CHECK-NEXT:    addi a0, a0, -256
274 ; CHECK-NEXT:    vand.vx v9, v9, a0
275 ; CHECK-NEXT:    vsrl.vi v10, v8, 24
276 ; CHECK-NEXT:    vor.vv v9, v9, v10
277 ; CHECK-NEXT:    vand.vx v10, v8, a0
278 ; CHECK-NEXT:    vsll.vi v10, v10, 8
279 ; CHECK-NEXT:    vsll.vi v8, v8, 24
280 ; CHECK-NEXT:    vor.vv v8, v8, v10
281 ; CHECK-NEXT:    vor.vv v8, v8, v9
282 ; CHECK-NEXT:    ret
284 ; CHECK-ZVKB-LABEL: vp_bswap_nxv1i32_unmasked:
285 ; CHECK-ZVKB:       # %bb.0:
286 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
287 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
288 ; CHECK-ZVKB-NEXT:    ret
289   %v = call <vscale x 1 x i32> @llvm.vp.bswap.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
290   ret <vscale x 1 x i32> %v
293 declare <vscale x 2 x i32> @llvm.vp.bswap.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>, i32)
295 define <vscale x 2 x i32> @vp_bswap_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
296 ; CHECK-LABEL: vp_bswap_nxv2i32:
297 ; CHECK:       # %bb.0:
298 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
299 ; CHECK-NEXT:    vsrl.vi v9, v8, 8, v0.t
300 ; CHECK-NEXT:    lui a0, 16
301 ; CHECK-NEXT:    addi a0, a0, -256
302 ; CHECK-NEXT:    vand.vx v9, v9, a0, v0.t
303 ; CHECK-NEXT:    vsrl.vi v10, v8, 24, v0.t
304 ; CHECK-NEXT:    vor.vv v9, v9, v10, v0.t
305 ; CHECK-NEXT:    vand.vx v10, v8, a0, v0.t
306 ; CHECK-NEXT:    vsll.vi v10, v10, 8, v0.t
307 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
308 ; CHECK-NEXT:    vor.vv v8, v8, v10, v0.t
309 ; CHECK-NEXT:    vor.vv v8, v8, v9, v0.t
310 ; CHECK-NEXT:    ret
312 ; CHECK-ZVKB-LABEL: vp_bswap_nxv2i32:
313 ; CHECK-ZVKB:       # %bb.0:
314 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
315 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
316 ; CHECK-ZVKB-NEXT:    ret
317   %v = call <vscale x 2 x i32> @llvm.vp.bswap.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
318   ret <vscale x 2 x i32> %v
321 define <vscale x 2 x i32> @vp_bswap_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
322 ; CHECK-LABEL: vp_bswap_nxv2i32_unmasked:
323 ; CHECK:       # %bb.0:
324 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
325 ; CHECK-NEXT:    vsrl.vi v9, v8, 8
326 ; CHECK-NEXT:    lui a0, 16
327 ; CHECK-NEXT:    addi a0, a0, -256
328 ; CHECK-NEXT:    vand.vx v9, v9, a0
329 ; CHECK-NEXT:    vsrl.vi v10, v8, 24
330 ; CHECK-NEXT:    vor.vv v9, v9, v10
331 ; CHECK-NEXT:    vand.vx v10, v8, a0
332 ; CHECK-NEXT:    vsll.vi v10, v10, 8
333 ; CHECK-NEXT:    vsll.vi v8, v8, 24
334 ; CHECK-NEXT:    vor.vv v8, v8, v10
335 ; CHECK-NEXT:    vor.vv v8, v8, v9
336 ; CHECK-NEXT:    ret
338 ; CHECK-ZVKB-LABEL: vp_bswap_nxv2i32_unmasked:
339 ; CHECK-ZVKB:       # %bb.0:
340 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
341 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
342 ; CHECK-ZVKB-NEXT:    ret
343   %v = call <vscale x 2 x i32> @llvm.vp.bswap.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
344   ret <vscale x 2 x i32> %v
347 declare <vscale x 4 x i32> @llvm.vp.bswap.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, i32)
349 define <vscale x 4 x i32> @vp_bswap_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
350 ; CHECK-LABEL: vp_bswap_nxv4i32:
351 ; CHECK:       # %bb.0:
352 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
353 ; CHECK-NEXT:    vsrl.vi v10, v8, 8, v0.t
354 ; CHECK-NEXT:    lui a0, 16
355 ; CHECK-NEXT:    addi a0, a0, -256
356 ; CHECK-NEXT:    vand.vx v10, v10, a0, v0.t
357 ; CHECK-NEXT:    vsrl.vi v12, v8, 24, v0.t
358 ; CHECK-NEXT:    vor.vv v10, v10, v12, v0.t
359 ; CHECK-NEXT:    vand.vx v12, v8, a0, v0.t
360 ; CHECK-NEXT:    vsll.vi v12, v12, 8, v0.t
361 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
362 ; CHECK-NEXT:    vor.vv v8, v8, v12, v0.t
363 ; CHECK-NEXT:    vor.vv v8, v8, v10, v0.t
364 ; CHECK-NEXT:    ret
366 ; CHECK-ZVKB-LABEL: vp_bswap_nxv4i32:
367 ; CHECK-ZVKB:       # %bb.0:
368 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
369 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
370 ; CHECK-ZVKB-NEXT:    ret
371   %v = call <vscale x 4 x i32> @llvm.vp.bswap.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 %evl)
372   ret <vscale x 4 x i32> %v
375 define <vscale x 4 x i32> @vp_bswap_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
376 ; CHECK-LABEL: vp_bswap_nxv4i32_unmasked:
377 ; CHECK:       # %bb.0:
378 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
379 ; CHECK-NEXT:    vsrl.vi v10, v8, 8
380 ; CHECK-NEXT:    lui a0, 16
381 ; CHECK-NEXT:    addi a0, a0, -256
382 ; CHECK-NEXT:    vand.vx v10, v10, a0
383 ; CHECK-NEXT:    vsrl.vi v12, v8, 24
384 ; CHECK-NEXT:    vor.vv v10, v10, v12
385 ; CHECK-NEXT:    vand.vx v12, v8, a0
386 ; CHECK-NEXT:    vsll.vi v12, v12, 8
387 ; CHECK-NEXT:    vsll.vi v8, v8, 24
388 ; CHECK-NEXT:    vor.vv v8, v8, v12
389 ; CHECK-NEXT:    vor.vv v8, v8, v10
390 ; CHECK-NEXT:    ret
392 ; CHECK-ZVKB-LABEL: vp_bswap_nxv4i32_unmasked:
393 ; CHECK-ZVKB:       # %bb.0:
394 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
395 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
396 ; CHECK-ZVKB-NEXT:    ret
397   %v = call <vscale x 4 x i32> @llvm.vp.bswap.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
398   ret <vscale x 4 x i32> %v
401 declare <vscale x 8 x i32> @llvm.vp.bswap.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i1>, i32)
403 define <vscale x 8 x i32> @vp_bswap_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
404 ; CHECK-LABEL: vp_bswap_nxv8i32:
405 ; CHECK:       # %bb.0:
406 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
407 ; CHECK-NEXT:    vsrl.vi v12, v8, 8, v0.t
408 ; CHECK-NEXT:    lui a0, 16
409 ; CHECK-NEXT:    addi a0, a0, -256
410 ; CHECK-NEXT:    vand.vx v12, v12, a0, v0.t
411 ; CHECK-NEXT:    vsrl.vi v16, v8, 24, v0.t
412 ; CHECK-NEXT:    vor.vv v12, v12, v16, v0.t
413 ; CHECK-NEXT:    vand.vx v16, v8, a0, v0.t
414 ; CHECK-NEXT:    vsll.vi v16, v16, 8, v0.t
415 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
416 ; CHECK-NEXT:    vor.vv v8, v8, v16, v0.t
417 ; CHECK-NEXT:    vor.vv v8, v8, v12, v0.t
418 ; CHECK-NEXT:    ret
420 ; CHECK-ZVKB-LABEL: vp_bswap_nxv8i32:
421 ; CHECK-ZVKB:       # %bb.0:
422 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
423 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
424 ; CHECK-ZVKB-NEXT:    ret
425   %v = call <vscale x 8 x i32> @llvm.vp.bswap.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 %evl)
426   ret <vscale x 8 x i32> %v
429 define <vscale x 8 x i32> @vp_bswap_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
430 ; CHECK-LABEL: vp_bswap_nxv8i32_unmasked:
431 ; CHECK:       # %bb.0:
432 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
433 ; CHECK-NEXT:    vsrl.vi v12, v8, 8
434 ; CHECK-NEXT:    lui a0, 16
435 ; CHECK-NEXT:    addi a0, a0, -256
436 ; CHECK-NEXT:    vand.vx v12, v12, a0
437 ; CHECK-NEXT:    vsrl.vi v16, v8, 24
438 ; CHECK-NEXT:    vor.vv v12, v12, v16
439 ; CHECK-NEXT:    vand.vx v16, v8, a0
440 ; CHECK-NEXT:    vsll.vi v16, v16, 8
441 ; CHECK-NEXT:    vsll.vi v8, v8, 24
442 ; CHECK-NEXT:    vor.vv v8, v8, v16
443 ; CHECK-NEXT:    vor.vv v8, v8, v12
444 ; CHECK-NEXT:    ret
446 ; CHECK-ZVKB-LABEL: vp_bswap_nxv8i32_unmasked:
447 ; CHECK-ZVKB:       # %bb.0:
448 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
449 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
450 ; CHECK-ZVKB-NEXT:    ret
451   %v = call <vscale x 8 x i32> @llvm.vp.bswap.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
452   ret <vscale x 8 x i32> %v
455 declare <vscale x 16 x i32> @llvm.vp.bswap.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i1>, i32)
457 define <vscale x 16 x i32> @vp_bswap_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
458 ; CHECK-LABEL: vp_bswap_nxv16i32:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
461 ; CHECK-NEXT:    vsrl.vi v16, v8, 8, v0.t
462 ; CHECK-NEXT:    lui a0, 16
463 ; CHECK-NEXT:    addi a0, a0, -256
464 ; CHECK-NEXT:    vand.vx v16, v16, a0, v0.t
465 ; CHECK-NEXT:    vsrl.vi v24, v8, 24, v0.t
466 ; CHECK-NEXT:    vor.vv v16, v16, v24, v0.t
467 ; CHECK-NEXT:    vand.vx v24, v8, a0, v0.t
468 ; CHECK-NEXT:    vsll.vi v24, v24, 8, v0.t
469 ; CHECK-NEXT:    vsll.vi v8, v8, 24, v0.t
470 ; CHECK-NEXT:    vor.vv v8, v8, v24, v0.t
471 ; CHECK-NEXT:    vor.vv v8, v8, v16, v0.t
472 ; CHECK-NEXT:    ret
474 ; CHECK-ZVKB-LABEL: vp_bswap_nxv16i32:
475 ; CHECK-ZVKB:       # %bb.0:
476 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
477 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
478 ; CHECK-ZVKB-NEXT:    ret
479   %v = call <vscale x 16 x i32> @llvm.vp.bswap.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 %evl)
480   ret <vscale x 16 x i32> %v
483 define <vscale x 16 x i32> @vp_bswap_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
484 ; CHECK-LABEL: vp_bswap_nxv16i32_unmasked:
485 ; CHECK:       # %bb.0:
486 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
487 ; CHECK-NEXT:    vsrl.vi v16, v8, 8
488 ; CHECK-NEXT:    lui a0, 16
489 ; CHECK-NEXT:    addi a0, a0, -256
490 ; CHECK-NEXT:    vand.vx v16, v16, a0
491 ; CHECK-NEXT:    vsrl.vi v24, v8, 24
492 ; CHECK-NEXT:    vor.vv v16, v16, v24
493 ; CHECK-NEXT:    vand.vx v24, v8, a0
494 ; CHECK-NEXT:    vsll.vi v24, v24, 8
495 ; CHECK-NEXT:    vsll.vi v8, v8, 24
496 ; CHECK-NEXT:    vor.vv v8, v8, v24
497 ; CHECK-NEXT:    vor.vv v8, v8, v16
498 ; CHECK-NEXT:    ret
500 ; CHECK-ZVKB-LABEL: vp_bswap_nxv16i32_unmasked:
501 ; CHECK-ZVKB:       # %bb.0:
502 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
503 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
504 ; CHECK-ZVKB-NEXT:    ret
505   %v = call <vscale x 16 x i32> @llvm.vp.bswap.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
506   ret <vscale x 16 x i32> %v
509 declare <vscale x 1 x i64> @llvm.vp.bswap.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i1>, i32)
511 define <vscale x 1 x i64> @vp_bswap_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
512 ; RV32-LABEL: vp_bswap_nxv1i64:
513 ; RV32:       # %bb.0:
514 ; RV32-NEXT:    addi sp, sp, -16
515 ; RV32-NEXT:    .cfi_def_cfa_offset 16
516 ; RV32-NEXT:    sw zero, 12(sp)
517 ; RV32-NEXT:    lui a1, 1044480
518 ; RV32-NEXT:    sw a1, 8(sp)
519 ; RV32-NEXT:    li a1, 56
520 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
521 ; RV32-NEXT:    vsll.vx v9, v8, a1, v0.t
522 ; RV32-NEXT:    lui a2, 16
523 ; RV32-NEXT:    addi a2, a2, -256
524 ; RV32-NEXT:    vand.vx v10, v8, a2, v0.t
525 ; RV32-NEXT:    li a3, 40
526 ; RV32-NEXT:    vsll.vx v10, v10, a3, v0.t
527 ; RV32-NEXT:    vor.vv v9, v9, v10, v0.t
528 ; RV32-NEXT:    addi a4, sp, 8
529 ; RV32-NEXT:    vsetvli a5, zero, e64, m1, ta, ma
530 ; RV32-NEXT:    vlse64.v v10, (a4), zero
531 ; RV32-NEXT:    lui a4, 4080
532 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
533 ; RV32-NEXT:    vand.vx v11, v8, a4, v0.t
534 ; RV32-NEXT:    vsll.vi v11, v11, 24, v0.t
535 ; RV32-NEXT:    vand.vv v12, v8, v10, v0.t
536 ; RV32-NEXT:    vsll.vi v12, v12, 8, v0.t
537 ; RV32-NEXT:    vor.vv v11, v11, v12, v0.t
538 ; RV32-NEXT:    vor.vv v9, v9, v11, v0.t
539 ; RV32-NEXT:    vsrl.vx v11, v8, a1, v0.t
540 ; RV32-NEXT:    vsrl.vx v12, v8, a3, v0.t
541 ; RV32-NEXT:    vand.vx v12, v12, a2, v0.t
542 ; RV32-NEXT:    vor.vv v11, v12, v11, v0.t
543 ; RV32-NEXT:    vsrl.vi v12, v8, 24, v0.t
544 ; RV32-NEXT:    vand.vx v12, v12, a4, v0.t
545 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
546 ; RV32-NEXT:    vand.vv v8, v8, v10, v0.t
547 ; RV32-NEXT:    vor.vv v8, v8, v12, v0.t
548 ; RV32-NEXT:    vor.vv v8, v8, v11, v0.t
549 ; RV32-NEXT:    vor.vv v8, v9, v8, v0.t
550 ; RV32-NEXT:    addi sp, sp, 16
551 ; RV32-NEXT:    ret
553 ; RV64-LABEL: vp_bswap_nxv1i64:
554 ; RV64:       # %bb.0:
555 ; RV64-NEXT:    lui a1, 4080
556 ; RV64-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
557 ; RV64-NEXT:    vand.vx v9, v8, a1, v0.t
558 ; RV64-NEXT:    vsll.vi v9, v9, 24, v0.t
559 ; RV64-NEXT:    li a0, 255
560 ; RV64-NEXT:    slli a0, a0, 24
561 ; RV64-NEXT:    vand.vx v10, v8, a0, v0.t
562 ; RV64-NEXT:    vsll.vi v10, v10, 8, v0.t
563 ; RV64-NEXT:    vor.vv v9, v9, v10, v0.t
564 ; RV64-NEXT:    li a2, 56
565 ; RV64-NEXT:    vsll.vx v10, v8, a2, v0.t
566 ; RV64-NEXT:    lui a3, 16
567 ; RV64-NEXT:    addiw a3, a3, -256
568 ; RV64-NEXT:    vand.vx v11, v8, a3, v0.t
569 ; RV64-NEXT:    li a4, 40
570 ; RV64-NEXT:    vsll.vx v11, v11, a4, v0.t
571 ; RV64-NEXT:    vor.vv v10, v10, v11, v0.t
572 ; RV64-NEXT:    vor.vv v9, v10, v9, v0.t
573 ; RV64-NEXT:    vsrl.vx v10, v8, a2, v0.t
574 ; RV64-NEXT:    vsrl.vx v11, v8, a4, v0.t
575 ; RV64-NEXT:    vand.vx v11, v11, a3, v0.t
576 ; RV64-NEXT:    vor.vv v10, v11, v10, v0.t
577 ; RV64-NEXT:    vsrl.vi v11, v8, 24, v0.t
578 ; RV64-NEXT:    vand.vx v11, v11, a1, v0.t
579 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
580 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
581 ; RV64-NEXT:    vor.vv v8, v8, v11, v0.t
582 ; RV64-NEXT:    vor.vv v8, v8, v10, v0.t
583 ; RV64-NEXT:    vor.vv v8, v9, v8, v0.t
584 ; RV64-NEXT:    ret
586 ; CHECK-ZVKB-LABEL: vp_bswap_nxv1i64:
587 ; CHECK-ZVKB:       # %bb.0:
588 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
589 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
590 ; CHECK-ZVKB-NEXT:    ret
591   %v = call <vscale x 1 x i64> @llvm.vp.bswap.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 %evl)
592   ret <vscale x 1 x i64> %v
595 define <vscale x 1 x i64> @vp_bswap_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
596 ; RV32-LABEL: vp_bswap_nxv1i64_unmasked:
597 ; RV32:       # %bb.0:
598 ; RV32-NEXT:    addi sp, sp, -16
599 ; RV32-NEXT:    .cfi_def_cfa_offset 16
600 ; RV32-NEXT:    sw zero, 12(sp)
601 ; RV32-NEXT:    lui a1, 1044480
602 ; RV32-NEXT:    sw a1, 8(sp)
603 ; RV32-NEXT:    li a1, 56
604 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
605 ; RV32-NEXT:    vsll.vx v9, v8, a1
606 ; RV32-NEXT:    lui a2, 16
607 ; RV32-NEXT:    addi a2, a2, -256
608 ; RV32-NEXT:    vand.vx v10, v8, a2
609 ; RV32-NEXT:    li a3, 40
610 ; RV32-NEXT:    vsll.vx v10, v10, a3
611 ; RV32-NEXT:    vor.vv v9, v9, v10
612 ; RV32-NEXT:    addi a4, sp, 8
613 ; RV32-NEXT:    vsetvli a5, zero, e64, m1, ta, ma
614 ; RV32-NEXT:    vlse64.v v10, (a4), zero
615 ; RV32-NEXT:    lui a4, 4080
616 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
617 ; RV32-NEXT:    vand.vx v11, v8, a4
618 ; RV32-NEXT:    vsll.vi v11, v11, 24
619 ; RV32-NEXT:    vand.vv v12, v8, v10
620 ; RV32-NEXT:    vsll.vi v12, v12, 8
621 ; RV32-NEXT:    vor.vv v11, v11, v12
622 ; RV32-NEXT:    vor.vv v9, v9, v11
623 ; RV32-NEXT:    vsrl.vx v11, v8, a1
624 ; RV32-NEXT:    vsrl.vx v12, v8, a3
625 ; RV32-NEXT:    vand.vx v12, v12, a2
626 ; RV32-NEXT:    vor.vv v11, v12, v11
627 ; RV32-NEXT:    vsrl.vi v12, v8, 24
628 ; RV32-NEXT:    vand.vx v12, v12, a4
629 ; RV32-NEXT:    vsrl.vi v8, v8, 8
630 ; RV32-NEXT:    vand.vv v8, v8, v10
631 ; RV32-NEXT:    vor.vv v8, v8, v12
632 ; RV32-NEXT:    vor.vv v8, v8, v11
633 ; RV32-NEXT:    vor.vv v8, v9, v8
634 ; RV32-NEXT:    addi sp, sp, 16
635 ; RV32-NEXT:    ret
637 ; RV64-LABEL: vp_bswap_nxv1i64_unmasked:
638 ; RV64:       # %bb.0:
639 ; RV64-NEXT:    lui a1, 4080
640 ; RV64-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
641 ; RV64-NEXT:    vand.vx v9, v8, a1
642 ; RV64-NEXT:    vsll.vi v9, v9, 24
643 ; RV64-NEXT:    li a0, 255
644 ; RV64-NEXT:    slli a0, a0, 24
645 ; RV64-NEXT:    vand.vx v10, v8, a0
646 ; RV64-NEXT:    vsll.vi v10, v10, 8
647 ; RV64-NEXT:    vor.vv v9, v9, v10
648 ; RV64-NEXT:    li a2, 56
649 ; RV64-NEXT:    vsll.vx v10, v8, a2
650 ; RV64-NEXT:    lui a3, 16
651 ; RV64-NEXT:    addiw a3, a3, -256
652 ; RV64-NEXT:    vand.vx v11, v8, a3
653 ; RV64-NEXT:    li a4, 40
654 ; RV64-NEXT:    vsll.vx v11, v11, a4
655 ; RV64-NEXT:    vor.vv v10, v10, v11
656 ; RV64-NEXT:    vor.vv v9, v10, v9
657 ; RV64-NEXT:    vsrl.vx v10, v8, a2
658 ; RV64-NEXT:    vsrl.vx v11, v8, a4
659 ; RV64-NEXT:    vand.vx v11, v11, a3
660 ; RV64-NEXT:    vor.vv v10, v11, v10
661 ; RV64-NEXT:    vsrl.vi v11, v8, 24
662 ; RV64-NEXT:    vand.vx v11, v11, a1
663 ; RV64-NEXT:    vsrl.vi v8, v8, 8
664 ; RV64-NEXT:    vand.vx v8, v8, a0
665 ; RV64-NEXT:    vor.vv v8, v8, v11
666 ; RV64-NEXT:    vor.vv v8, v8, v10
667 ; RV64-NEXT:    vor.vv v8, v9, v8
668 ; RV64-NEXT:    ret
670 ; CHECK-ZVKB-LABEL: vp_bswap_nxv1i64_unmasked:
671 ; CHECK-ZVKB:       # %bb.0:
672 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
673 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
674 ; CHECK-ZVKB-NEXT:    ret
675   %v = call <vscale x 1 x i64> @llvm.vp.bswap.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
676   ret <vscale x 1 x i64> %v
679 declare <vscale x 2 x i64> @llvm.vp.bswap.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i1>, i32)
681 define <vscale x 2 x i64> @vp_bswap_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
682 ; RV32-LABEL: vp_bswap_nxv2i64:
683 ; RV32:       # %bb.0:
684 ; RV32-NEXT:    addi sp, sp, -16
685 ; RV32-NEXT:    .cfi_def_cfa_offset 16
686 ; RV32-NEXT:    sw zero, 12(sp)
687 ; RV32-NEXT:    lui a1, 1044480
688 ; RV32-NEXT:    sw a1, 8(sp)
689 ; RV32-NEXT:    li a1, 56
690 ; RV32-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
691 ; RV32-NEXT:    vsll.vx v10, v8, a1, v0.t
692 ; RV32-NEXT:    lui a2, 16
693 ; RV32-NEXT:    addi a2, a2, -256
694 ; RV32-NEXT:    vand.vx v12, v8, a2, v0.t
695 ; RV32-NEXT:    li a3, 40
696 ; RV32-NEXT:    vsll.vx v12, v12, a3, v0.t
697 ; RV32-NEXT:    vor.vv v10, v10, v12, v0.t
698 ; RV32-NEXT:    addi a4, sp, 8
699 ; RV32-NEXT:    vsetvli a5, zero, e64, m2, ta, ma
700 ; RV32-NEXT:    vlse64.v v12, (a4), zero
701 ; RV32-NEXT:    lui a4, 4080
702 ; RV32-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
703 ; RV32-NEXT:    vand.vx v14, v8, a4, v0.t
704 ; RV32-NEXT:    vsll.vi v14, v14, 24, v0.t
705 ; RV32-NEXT:    vand.vv v16, v8, v12, v0.t
706 ; RV32-NEXT:    vsll.vi v16, v16, 8, v0.t
707 ; RV32-NEXT:    vor.vv v14, v14, v16, v0.t
708 ; RV32-NEXT:    vor.vv v10, v10, v14, v0.t
709 ; RV32-NEXT:    vsrl.vx v14, v8, a1, v0.t
710 ; RV32-NEXT:    vsrl.vx v16, v8, a3, v0.t
711 ; RV32-NEXT:    vand.vx v16, v16, a2, v0.t
712 ; RV32-NEXT:    vor.vv v14, v16, v14, v0.t
713 ; RV32-NEXT:    vsrl.vi v16, v8, 24, v0.t
714 ; RV32-NEXT:    vand.vx v16, v16, a4, v0.t
715 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
716 ; RV32-NEXT:    vand.vv v8, v8, v12, v0.t
717 ; RV32-NEXT:    vor.vv v8, v8, v16, v0.t
718 ; RV32-NEXT:    vor.vv v8, v8, v14, v0.t
719 ; RV32-NEXT:    vor.vv v8, v10, v8, v0.t
720 ; RV32-NEXT:    addi sp, sp, 16
721 ; RV32-NEXT:    ret
723 ; RV64-LABEL: vp_bswap_nxv2i64:
724 ; RV64:       # %bb.0:
725 ; RV64-NEXT:    lui a1, 4080
726 ; RV64-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
727 ; RV64-NEXT:    vand.vx v10, v8, a1, v0.t
728 ; RV64-NEXT:    vsll.vi v10, v10, 24, v0.t
729 ; RV64-NEXT:    li a0, 255
730 ; RV64-NEXT:    slli a0, a0, 24
731 ; RV64-NEXT:    vand.vx v12, v8, a0, v0.t
732 ; RV64-NEXT:    vsll.vi v12, v12, 8, v0.t
733 ; RV64-NEXT:    vor.vv v10, v10, v12, v0.t
734 ; RV64-NEXT:    li a2, 56
735 ; RV64-NEXT:    vsll.vx v12, v8, a2, v0.t
736 ; RV64-NEXT:    lui a3, 16
737 ; RV64-NEXT:    addiw a3, a3, -256
738 ; RV64-NEXT:    vand.vx v14, v8, a3, v0.t
739 ; RV64-NEXT:    li a4, 40
740 ; RV64-NEXT:    vsll.vx v14, v14, a4, v0.t
741 ; RV64-NEXT:    vor.vv v12, v12, v14, v0.t
742 ; RV64-NEXT:    vor.vv v10, v12, v10, v0.t
743 ; RV64-NEXT:    vsrl.vx v12, v8, a2, v0.t
744 ; RV64-NEXT:    vsrl.vx v14, v8, a4, v0.t
745 ; RV64-NEXT:    vand.vx v14, v14, a3, v0.t
746 ; RV64-NEXT:    vor.vv v12, v14, v12, v0.t
747 ; RV64-NEXT:    vsrl.vi v14, v8, 24, v0.t
748 ; RV64-NEXT:    vand.vx v14, v14, a1, v0.t
749 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
750 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
751 ; RV64-NEXT:    vor.vv v8, v8, v14, v0.t
752 ; RV64-NEXT:    vor.vv v8, v8, v12, v0.t
753 ; RV64-NEXT:    vor.vv v8, v10, v8, v0.t
754 ; RV64-NEXT:    ret
756 ; CHECK-ZVKB-LABEL: vp_bswap_nxv2i64:
757 ; CHECK-ZVKB:       # %bb.0:
758 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
759 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
760 ; CHECK-ZVKB-NEXT:    ret
761   %v = call <vscale x 2 x i64> @llvm.vp.bswap.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
762   ret <vscale x 2 x i64> %v
765 define <vscale x 2 x i64> @vp_bswap_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
766 ; RV32-LABEL: vp_bswap_nxv2i64_unmasked:
767 ; RV32:       # %bb.0:
768 ; RV32-NEXT:    addi sp, sp, -16
769 ; RV32-NEXT:    .cfi_def_cfa_offset 16
770 ; RV32-NEXT:    sw zero, 12(sp)
771 ; RV32-NEXT:    lui a1, 1044480
772 ; RV32-NEXT:    sw a1, 8(sp)
773 ; RV32-NEXT:    li a1, 56
774 ; RV32-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
775 ; RV32-NEXT:    vsll.vx v10, v8, a1
776 ; RV32-NEXT:    lui a2, 16
777 ; RV32-NEXT:    addi a2, a2, -256
778 ; RV32-NEXT:    vand.vx v12, v8, a2
779 ; RV32-NEXT:    li a3, 40
780 ; RV32-NEXT:    vsll.vx v12, v12, a3
781 ; RV32-NEXT:    vor.vv v10, v10, v12
782 ; RV32-NEXT:    addi a4, sp, 8
783 ; RV32-NEXT:    vsetvli a5, zero, e64, m2, ta, ma
784 ; RV32-NEXT:    vlse64.v v12, (a4), zero
785 ; RV32-NEXT:    lui a4, 4080
786 ; RV32-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
787 ; RV32-NEXT:    vand.vx v14, v8, a4
788 ; RV32-NEXT:    vsll.vi v14, v14, 24
789 ; RV32-NEXT:    vand.vv v16, v8, v12
790 ; RV32-NEXT:    vsll.vi v16, v16, 8
791 ; RV32-NEXT:    vor.vv v14, v14, v16
792 ; RV32-NEXT:    vor.vv v10, v10, v14
793 ; RV32-NEXT:    vsrl.vx v14, v8, a1
794 ; RV32-NEXT:    vsrl.vx v16, v8, a3
795 ; RV32-NEXT:    vand.vx v16, v16, a2
796 ; RV32-NEXT:    vor.vv v14, v16, v14
797 ; RV32-NEXT:    vsrl.vi v16, v8, 24
798 ; RV32-NEXT:    vand.vx v16, v16, a4
799 ; RV32-NEXT:    vsrl.vi v8, v8, 8
800 ; RV32-NEXT:    vand.vv v8, v8, v12
801 ; RV32-NEXT:    vor.vv v8, v8, v16
802 ; RV32-NEXT:    vor.vv v8, v8, v14
803 ; RV32-NEXT:    vor.vv v8, v10, v8
804 ; RV32-NEXT:    addi sp, sp, 16
805 ; RV32-NEXT:    ret
807 ; RV64-LABEL: vp_bswap_nxv2i64_unmasked:
808 ; RV64:       # %bb.0:
809 ; RV64-NEXT:    lui a1, 4080
810 ; RV64-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
811 ; RV64-NEXT:    vand.vx v10, v8, a1
812 ; RV64-NEXT:    vsll.vi v10, v10, 24
813 ; RV64-NEXT:    li a0, 255
814 ; RV64-NEXT:    slli a0, a0, 24
815 ; RV64-NEXT:    vand.vx v12, v8, a0
816 ; RV64-NEXT:    vsll.vi v12, v12, 8
817 ; RV64-NEXT:    vor.vv v10, v10, v12
818 ; RV64-NEXT:    li a2, 56
819 ; RV64-NEXT:    vsll.vx v12, v8, a2
820 ; RV64-NEXT:    lui a3, 16
821 ; RV64-NEXT:    addiw a3, a3, -256
822 ; RV64-NEXT:    vand.vx v14, v8, a3
823 ; RV64-NEXT:    li a4, 40
824 ; RV64-NEXT:    vsll.vx v14, v14, a4
825 ; RV64-NEXT:    vor.vv v12, v12, v14
826 ; RV64-NEXT:    vor.vv v10, v12, v10
827 ; RV64-NEXT:    vsrl.vx v12, v8, a2
828 ; RV64-NEXT:    vsrl.vx v14, v8, a4
829 ; RV64-NEXT:    vand.vx v14, v14, a3
830 ; RV64-NEXT:    vor.vv v12, v14, v12
831 ; RV64-NEXT:    vsrl.vi v14, v8, 24
832 ; RV64-NEXT:    vand.vx v14, v14, a1
833 ; RV64-NEXT:    vsrl.vi v8, v8, 8
834 ; RV64-NEXT:    vand.vx v8, v8, a0
835 ; RV64-NEXT:    vor.vv v8, v8, v14
836 ; RV64-NEXT:    vor.vv v8, v8, v12
837 ; RV64-NEXT:    vor.vv v8, v10, v8
838 ; RV64-NEXT:    ret
840 ; CHECK-ZVKB-LABEL: vp_bswap_nxv2i64_unmasked:
841 ; CHECK-ZVKB:       # %bb.0:
842 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
843 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
844 ; CHECK-ZVKB-NEXT:    ret
845   %v = call <vscale x 2 x i64> @llvm.vp.bswap.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
846   ret <vscale x 2 x i64> %v
849 declare <vscale x 4 x i64> @llvm.vp.bswap.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i1>, i32)
851 define <vscale x 4 x i64> @vp_bswap_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
852 ; RV32-LABEL: vp_bswap_nxv4i64:
853 ; RV32:       # %bb.0:
854 ; RV32-NEXT:    addi sp, sp, -16
855 ; RV32-NEXT:    .cfi_def_cfa_offset 16
856 ; RV32-NEXT:    sw zero, 12(sp)
857 ; RV32-NEXT:    lui a1, 1044480
858 ; RV32-NEXT:    sw a1, 8(sp)
859 ; RV32-NEXT:    li a1, 56
860 ; RV32-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
861 ; RV32-NEXT:    vsll.vx v12, v8, a1, v0.t
862 ; RV32-NEXT:    lui a2, 16
863 ; RV32-NEXT:    addi a2, a2, -256
864 ; RV32-NEXT:    vand.vx v16, v8, a2, v0.t
865 ; RV32-NEXT:    li a3, 40
866 ; RV32-NEXT:    vsll.vx v16, v16, a3, v0.t
867 ; RV32-NEXT:    vor.vv v16, v12, v16, v0.t
868 ; RV32-NEXT:    addi a4, sp, 8
869 ; RV32-NEXT:    vsetvli a5, zero, e64, m4, ta, ma
870 ; RV32-NEXT:    vlse64.v v12, (a4), zero
871 ; RV32-NEXT:    lui a4, 4080
872 ; RV32-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
873 ; RV32-NEXT:    vand.vx v20, v8, a4, v0.t
874 ; RV32-NEXT:    vsll.vi v20, v20, 24, v0.t
875 ; RV32-NEXT:    vand.vv v24, v8, v12, v0.t
876 ; RV32-NEXT:    vsll.vi v24, v24, 8, v0.t
877 ; RV32-NEXT:    vor.vv v20, v20, v24, v0.t
878 ; RV32-NEXT:    vor.vv v16, v16, v20, v0.t
879 ; RV32-NEXT:    vsrl.vx v20, v8, a1, v0.t
880 ; RV32-NEXT:    vsrl.vx v24, v8, a3, v0.t
881 ; RV32-NEXT:    vand.vx v24, v24, a2, v0.t
882 ; RV32-NEXT:    vor.vv v20, v24, v20, v0.t
883 ; RV32-NEXT:    vsrl.vi v24, v8, 24, v0.t
884 ; RV32-NEXT:    vand.vx v24, v24, a4, v0.t
885 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
886 ; RV32-NEXT:    vand.vv v8, v8, v12, v0.t
887 ; RV32-NEXT:    vor.vv v8, v8, v24, v0.t
888 ; RV32-NEXT:    vor.vv v8, v8, v20, v0.t
889 ; RV32-NEXT:    vor.vv v8, v16, v8, v0.t
890 ; RV32-NEXT:    addi sp, sp, 16
891 ; RV32-NEXT:    ret
893 ; RV64-LABEL: vp_bswap_nxv4i64:
894 ; RV64:       # %bb.0:
895 ; RV64-NEXT:    lui a1, 4080
896 ; RV64-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
897 ; RV64-NEXT:    vand.vx v12, v8, a1, v0.t
898 ; RV64-NEXT:    vsll.vi v12, v12, 24, v0.t
899 ; RV64-NEXT:    li a0, 255
900 ; RV64-NEXT:    slli a0, a0, 24
901 ; RV64-NEXT:    vand.vx v16, v8, a0, v0.t
902 ; RV64-NEXT:    vsll.vi v16, v16, 8, v0.t
903 ; RV64-NEXT:    vor.vv v12, v12, v16, v0.t
904 ; RV64-NEXT:    li a2, 56
905 ; RV64-NEXT:    vsll.vx v16, v8, a2, v0.t
906 ; RV64-NEXT:    lui a3, 16
907 ; RV64-NEXT:    addiw a3, a3, -256
908 ; RV64-NEXT:    vand.vx v20, v8, a3, v0.t
909 ; RV64-NEXT:    li a4, 40
910 ; RV64-NEXT:    vsll.vx v20, v20, a4, v0.t
911 ; RV64-NEXT:    vor.vv v16, v16, v20, v0.t
912 ; RV64-NEXT:    vor.vv v12, v16, v12, v0.t
913 ; RV64-NEXT:    vsrl.vx v16, v8, a2, v0.t
914 ; RV64-NEXT:    vsrl.vx v20, v8, a4, v0.t
915 ; RV64-NEXT:    vand.vx v20, v20, a3, v0.t
916 ; RV64-NEXT:    vor.vv v16, v20, v16, v0.t
917 ; RV64-NEXT:    vsrl.vi v20, v8, 24, v0.t
918 ; RV64-NEXT:    vand.vx v20, v20, a1, v0.t
919 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
920 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
921 ; RV64-NEXT:    vor.vv v8, v8, v20, v0.t
922 ; RV64-NEXT:    vor.vv v8, v8, v16, v0.t
923 ; RV64-NEXT:    vor.vv v8, v12, v8, v0.t
924 ; RV64-NEXT:    ret
926 ; CHECK-ZVKB-LABEL: vp_bswap_nxv4i64:
927 ; CHECK-ZVKB:       # %bb.0:
928 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
929 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
930 ; CHECK-ZVKB-NEXT:    ret
931   %v = call <vscale x 4 x i64> @llvm.vp.bswap.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 %evl)
932   ret <vscale x 4 x i64> %v
935 define <vscale x 4 x i64> @vp_bswap_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
936 ; RV32-LABEL: vp_bswap_nxv4i64_unmasked:
937 ; RV32:       # %bb.0:
938 ; RV32-NEXT:    addi sp, sp, -16
939 ; RV32-NEXT:    .cfi_def_cfa_offset 16
940 ; RV32-NEXT:    sw zero, 12(sp)
941 ; RV32-NEXT:    lui a1, 1044480
942 ; RV32-NEXT:    sw a1, 8(sp)
943 ; RV32-NEXT:    li a1, 56
944 ; RV32-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
945 ; RV32-NEXT:    vsll.vx v12, v8, a1
946 ; RV32-NEXT:    lui a2, 16
947 ; RV32-NEXT:    addi a2, a2, -256
948 ; RV32-NEXT:    vand.vx v16, v8, a2
949 ; RV32-NEXT:    li a3, 40
950 ; RV32-NEXT:    vsll.vx v16, v16, a3
951 ; RV32-NEXT:    vor.vv v12, v12, v16
952 ; RV32-NEXT:    addi a4, sp, 8
953 ; RV32-NEXT:    vsetvli a5, zero, e64, m4, ta, ma
954 ; RV32-NEXT:    vlse64.v v16, (a4), zero
955 ; RV32-NEXT:    lui a4, 4080
956 ; RV32-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
957 ; RV32-NEXT:    vand.vx v20, v8, a4
958 ; RV32-NEXT:    vsll.vi v20, v20, 24
959 ; RV32-NEXT:    vand.vv v24, v8, v16
960 ; RV32-NEXT:    vsll.vi v24, v24, 8
961 ; RV32-NEXT:    vor.vv v20, v20, v24
962 ; RV32-NEXT:    vor.vv v12, v12, v20
963 ; RV32-NEXT:    vsrl.vx v20, v8, a1
964 ; RV32-NEXT:    vsrl.vx v24, v8, a3
965 ; RV32-NEXT:    vand.vx v24, v24, a2
966 ; RV32-NEXT:    vor.vv v20, v24, v20
967 ; RV32-NEXT:    vsrl.vi v24, v8, 24
968 ; RV32-NEXT:    vand.vx v24, v24, a4
969 ; RV32-NEXT:    vsrl.vi v8, v8, 8
970 ; RV32-NEXT:    vand.vv v8, v8, v16
971 ; RV32-NEXT:    vor.vv v8, v8, v24
972 ; RV32-NEXT:    vor.vv v8, v8, v20
973 ; RV32-NEXT:    vor.vv v8, v12, v8
974 ; RV32-NEXT:    addi sp, sp, 16
975 ; RV32-NEXT:    ret
977 ; RV64-LABEL: vp_bswap_nxv4i64_unmasked:
978 ; RV64:       # %bb.0:
979 ; RV64-NEXT:    lui a1, 4080
980 ; RV64-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
981 ; RV64-NEXT:    vand.vx v12, v8, a1
982 ; RV64-NEXT:    vsll.vi v12, v12, 24
983 ; RV64-NEXT:    li a0, 255
984 ; RV64-NEXT:    slli a0, a0, 24
985 ; RV64-NEXT:    vand.vx v16, v8, a0
986 ; RV64-NEXT:    vsll.vi v16, v16, 8
987 ; RV64-NEXT:    vor.vv v12, v12, v16
988 ; RV64-NEXT:    li a2, 56
989 ; RV64-NEXT:    vsll.vx v16, v8, a2
990 ; RV64-NEXT:    lui a3, 16
991 ; RV64-NEXT:    addiw a3, a3, -256
992 ; RV64-NEXT:    vand.vx v20, v8, a3
993 ; RV64-NEXT:    li a4, 40
994 ; RV64-NEXT:    vsll.vx v20, v20, a4
995 ; RV64-NEXT:    vor.vv v16, v16, v20
996 ; RV64-NEXT:    vor.vv v12, v16, v12
997 ; RV64-NEXT:    vsrl.vx v16, v8, a2
998 ; RV64-NEXT:    vsrl.vx v20, v8, a4
999 ; RV64-NEXT:    vand.vx v20, v20, a3
1000 ; RV64-NEXT:    vor.vv v16, v20, v16
1001 ; RV64-NEXT:    vsrl.vi v20, v8, 24
1002 ; RV64-NEXT:    vand.vx v20, v20, a1
1003 ; RV64-NEXT:    vsrl.vi v8, v8, 8
1004 ; RV64-NEXT:    vand.vx v8, v8, a0
1005 ; RV64-NEXT:    vor.vv v8, v8, v20
1006 ; RV64-NEXT:    vor.vv v8, v8, v16
1007 ; RV64-NEXT:    vor.vv v8, v12, v8
1008 ; RV64-NEXT:    ret
1010 ; CHECK-ZVKB-LABEL: vp_bswap_nxv4i64_unmasked:
1011 ; CHECK-ZVKB:       # %bb.0:
1012 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1013 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
1014 ; CHECK-ZVKB-NEXT:    ret
1015   %v = call <vscale x 4 x i64> @llvm.vp.bswap.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1016   ret <vscale x 4 x i64> %v
1019 declare <vscale x 7 x i64> @llvm.vp.bswap.nxv7i64(<vscale x 7 x i64>, <vscale x 7 x i1>, i32)
1021 define <vscale x 7 x i64> @vp_bswap_nxv7i64(<vscale x 7 x i64> %va, <vscale x 7 x i1> %m, i32 zeroext %evl) {
1022 ; RV32-LABEL: vp_bswap_nxv7i64:
1023 ; RV32:       # %bb.0:
1024 ; RV32-NEXT:    addi sp, sp, -16
1025 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1026 ; RV32-NEXT:    csrr a1, vlenb
1027 ; RV32-NEXT:    li a2, 24
1028 ; RV32-NEXT:    mul a1, a1, a2
1029 ; RV32-NEXT:    sub sp, sp, a1
1030 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
1031 ; RV32-NEXT:    sw zero, 12(sp)
1032 ; RV32-NEXT:    lui a1, 1044480
1033 ; RV32-NEXT:    sw a1, 8(sp)
1034 ; RV32-NEXT:    li a1, 56
1035 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1036 ; RV32-NEXT:    vsll.vx v16, v8, a1, v0.t
1037 ; RV32-NEXT:    lui a2, 16
1038 ; RV32-NEXT:    addi a2, a2, -256
1039 ; RV32-NEXT:    vand.vx v24, v8, a2, v0.t
1040 ; RV32-NEXT:    li a3, 40
1041 ; RV32-NEXT:    vsll.vx v24, v24, a3, v0.t
1042 ; RV32-NEXT:    vor.vv v16, v16, v24, v0.t
1043 ; RV32-NEXT:    csrr a4, vlenb
1044 ; RV32-NEXT:    slli a4, a4, 4
1045 ; RV32-NEXT:    add a4, sp, a4
1046 ; RV32-NEXT:    addi a4, a4, 16
1047 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1048 ; RV32-NEXT:    addi a4, sp, 8
1049 ; RV32-NEXT:    vsetvli a5, zero, e64, m8, ta, ma
1050 ; RV32-NEXT:    vlse64.v v16, (a4), zero
1051 ; RV32-NEXT:    csrr a4, vlenb
1052 ; RV32-NEXT:    slli a4, a4, 3
1053 ; RV32-NEXT:    add a4, sp, a4
1054 ; RV32-NEXT:    addi a4, a4, 16
1055 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1056 ; RV32-NEXT:    lui a4, 4080
1057 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1058 ; RV32-NEXT:    vand.vx v24, v8, a4, v0.t
1059 ; RV32-NEXT:    vsll.vi v24, v24, 24, v0.t
1060 ; RV32-NEXT:    addi a0, sp, 16
1061 ; RV32-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1062 ; RV32-NEXT:    vand.vv v24, v8, v16, v0.t
1063 ; RV32-NEXT:    vsll.vi v16, v24, 8, v0.t
1064 ; RV32-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1065 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
1066 ; RV32-NEXT:    csrr a0, vlenb
1067 ; RV32-NEXT:    slli a0, a0, 4
1068 ; RV32-NEXT:    add a0, sp, a0
1069 ; RV32-NEXT:    addi a0, a0, 16
1070 ; RV32-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1071 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
1072 ; RV32-NEXT:    csrr a0, vlenb
1073 ; RV32-NEXT:    slli a0, a0, 4
1074 ; RV32-NEXT:    add a0, sp, a0
1075 ; RV32-NEXT:    addi a0, a0, 16
1076 ; RV32-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
1077 ; RV32-NEXT:    vsrl.vx v16, v8, a1, v0.t
1078 ; RV32-NEXT:    vsrl.vx v24, v8, a3, v0.t
1079 ; RV32-NEXT:    vand.vx v24, v24, a2, v0.t
1080 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
1081 ; RV32-NEXT:    addi a0, sp, 16
1082 ; RV32-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
1083 ; RV32-NEXT:    vsrl.vi v24, v8, 24, v0.t
1084 ; RV32-NEXT:    vand.vx v24, v24, a4, v0.t
1085 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
1086 ; RV32-NEXT:    csrr a0, vlenb
1087 ; RV32-NEXT:    slli a0, a0, 3
1088 ; RV32-NEXT:    add a0, sp, a0
1089 ; RV32-NEXT:    addi a0, a0, 16
1090 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1091 ; RV32-NEXT:    vand.vv v8, v8, v16, v0.t
1092 ; RV32-NEXT:    vor.vv v8, v8, v24, v0.t
1093 ; RV32-NEXT:    addi a0, sp, 16
1094 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1095 ; RV32-NEXT:    vor.vv v8, v8, v16, v0.t
1096 ; RV32-NEXT:    csrr a0, vlenb
1097 ; RV32-NEXT:    slli a0, a0, 4
1098 ; RV32-NEXT:    add a0, sp, a0
1099 ; RV32-NEXT:    addi a0, a0, 16
1100 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1101 ; RV32-NEXT:    vor.vv v8, v16, v8, v0.t
1102 ; RV32-NEXT:    csrr a0, vlenb
1103 ; RV32-NEXT:    li a1, 24
1104 ; RV32-NEXT:    mul a0, a0, a1
1105 ; RV32-NEXT:    add sp, sp, a0
1106 ; RV32-NEXT:    addi sp, sp, 16
1107 ; RV32-NEXT:    ret
1109 ; RV64-LABEL: vp_bswap_nxv7i64:
1110 ; RV64:       # %bb.0:
1111 ; RV64-NEXT:    addi sp, sp, -16
1112 ; RV64-NEXT:    .cfi_def_cfa_offset 16
1113 ; RV64-NEXT:    csrr a1, vlenb
1114 ; RV64-NEXT:    slli a1, a1, 3
1115 ; RV64-NEXT:    sub sp, sp, a1
1116 ; RV64-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1117 ; RV64-NEXT:    lui a1, 4080
1118 ; RV64-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1119 ; RV64-NEXT:    vand.vx v16, v8, a1, v0.t
1120 ; RV64-NEXT:    vsll.vi v16, v16, 24, v0.t
1121 ; RV64-NEXT:    li a0, 255
1122 ; RV64-NEXT:    slli a0, a0, 24
1123 ; RV64-NEXT:    vand.vx v24, v8, a0, v0.t
1124 ; RV64-NEXT:    vsll.vi v24, v24, 8, v0.t
1125 ; RV64-NEXT:    vor.vv v16, v16, v24, v0.t
1126 ; RV64-NEXT:    addi a2, sp, 16
1127 ; RV64-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
1128 ; RV64-NEXT:    li a2, 56
1129 ; RV64-NEXT:    vsll.vx v24, v8, a2, v0.t
1130 ; RV64-NEXT:    lui a3, 16
1131 ; RV64-NEXT:    addiw a3, a3, -256
1132 ; RV64-NEXT:    li a4, 40
1133 ; RV64-NEXT:    vand.vx v16, v8, a3, v0.t
1134 ; RV64-NEXT:    vsll.vx v16, v16, a4, v0.t
1135 ; RV64-NEXT:    vor.vv v16, v24, v16, v0.t
1136 ; RV64-NEXT:    addi a5, sp, 16
1137 ; RV64-NEXT:    vl8r.v v24, (a5) # Unknown-size Folded Reload
1138 ; RV64-NEXT:    vor.vv v16, v16, v24, v0.t
1139 ; RV64-NEXT:    vs8r.v v16, (a5) # Unknown-size Folded Spill
1140 ; RV64-NEXT:    vsrl.vx v24, v8, a2, v0.t
1141 ; RV64-NEXT:    vsrl.vx v16, v8, a4, v0.t
1142 ; RV64-NEXT:    vand.vx v16, v16, a3, v0.t
1143 ; RV64-NEXT:    vor.vv v24, v16, v24, v0.t
1144 ; RV64-NEXT:    vsrl.vi v16, v8, 24, v0.t
1145 ; RV64-NEXT:    vand.vx v16, v16, a1, v0.t
1146 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
1147 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
1148 ; RV64-NEXT:    vor.vv v8, v8, v16, v0.t
1149 ; RV64-NEXT:    vor.vv v8, v8, v24, v0.t
1150 ; RV64-NEXT:    addi a0, sp, 16
1151 ; RV64-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1152 ; RV64-NEXT:    vor.vv v8, v16, v8, v0.t
1153 ; RV64-NEXT:    csrr a0, vlenb
1154 ; RV64-NEXT:    slli a0, a0, 3
1155 ; RV64-NEXT:    add sp, sp, a0
1156 ; RV64-NEXT:    addi sp, sp, 16
1157 ; RV64-NEXT:    ret
1159 ; CHECK-ZVKB-LABEL: vp_bswap_nxv7i64:
1160 ; CHECK-ZVKB:       # %bb.0:
1161 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1162 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
1163 ; CHECK-ZVKB-NEXT:    ret
1164   %v = call <vscale x 7 x i64> @llvm.vp.bswap.nxv7i64(<vscale x 7 x i64> %va, <vscale x 7 x i1> %m, i32 %evl)
1165   ret <vscale x 7 x i64> %v
1168 define <vscale x 7 x i64> @vp_bswap_nxv7i64_unmasked(<vscale x 7 x i64> %va, i32 zeroext %evl) {
1169 ; RV32-LABEL: vp_bswap_nxv7i64_unmasked:
1170 ; RV32:       # %bb.0:
1171 ; RV32-NEXT:    addi sp, sp, -16
1172 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1173 ; RV32-NEXT:    csrr a1, vlenb
1174 ; RV32-NEXT:    slli a1, a1, 3
1175 ; RV32-NEXT:    sub sp, sp, a1
1176 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1177 ; RV32-NEXT:    sw zero, 12(sp)
1178 ; RV32-NEXT:    lui a1, 1044480
1179 ; RV32-NEXT:    sw a1, 8(sp)
1180 ; RV32-NEXT:    li a1, 56
1181 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1182 ; RV32-NEXT:    vsll.vx v16, v8, a1
1183 ; RV32-NEXT:    lui a2, 16
1184 ; RV32-NEXT:    addi a2, a2, -256
1185 ; RV32-NEXT:    vand.vx v24, v8, a2
1186 ; RV32-NEXT:    li a3, 40
1187 ; RV32-NEXT:    vsll.vx v24, v24, a3
1188 ; RV32-NEXT:    vor.vv v16, v16, v24
1189 ; RV32-NEXT:    addi a4, sp, 16
1190 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1191 ; RV32-NEXT:    addi a4, sp, 8
1192 ; RV32-NEXT:    vsetvli a5, zero, e64, m8, ta, ma
1193 ; RV32-NEXT:    vlse64.v v16, (a4), zero
1194 ; RV32-NEXT:    lui a4, 4080
1195 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1196 ; RV32-NEXT:    vand.vx v0, v8, a4
1197 ; RV32-NEXT:    vsll.vi v0, v0, 24
1198 ; RV32-NEXT:    vand.vv v24, v8, v16
1199 ; RV32-NEXT:    vsll.vi v24, v24, 8
1200 ; RV32-NEXT:    vor.vv v24, v0, v24
1201 ; RV32-NEXT:    addi a0, sp, 16
1202 ; RV32-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
1203 ; RV32-NEXT:    vor.vv v24, v0, v24
1204 ; RV32-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1205 ; RV32-NEXT:    vsrl.vx v0, v8, a3
1206 ; RV32-NEXT:    vand.vx v0, v0, a2
1207 ; RV32-NEXT:    vsrl.vx v24, v8, a1
1208 ; RV32-NEXT:    vor.vv v24, v0, v24
1209 ; RV32-NEXT:    vsrl.vi v0, v8, 8
1210 ; RV32-NEXT:    vand.vv v16, v0, v16
1211 ; RV32-NEXT:    vsrl.vi v8, v8, 24
1212 ; RV32-NEXT:    vand.vx v8, v8, a4
1213 ; RV32-NEXT:    vor.vv v8, v16, v8
1214 ; RV32-NEXT:    vor.vv v8, v8, v24
1215 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1216 ; RV32-NEXT:    vor.vv v8, v16, v8
1217 ; RV32-NEXT:    csrr a0, vlenb
1218 ; RV32-NEXT:    slli a0, a0, 3
1219 ; RV32-NEXT:    add sp, sp, a0
1220 ; RV32-NEXT:    addi sp, sp, 16
1221 ; RV32-NEXT:    ret
1223 ; RV64-LABEL: vp_bswap_nxv7i64_unmasked:
1224 ; RV64:       # %bb.0:
1225 ; RV64-NEXT:    lui a1, 4080
1226 ; RV64-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1227 ; RV64-NEXT:    vand.vx v16, v8, a1
1228 ; RV64-NEXT:    vsll.vi v16, v16, 24
1229 ; RV64-NEXT:    li a0, 255
1230 ; RV64-NEXT:    slli a0, a0, 24
1231 ; RV64-NEXT:    vand.vx v24, v8, a0
1232 ; RV64-NEXT:    vsll.vi v24, v24, 8
1233 ; RV64-NEXT:    vor.vv v16, v16, v24
1234 ; RV64-NEXT:    li a2, 56
1235 ; RV64-NEXT:    vsll.vx v24, v8, a2
1236 ; RV64-NEXT:    lui a3, 16
1237 ; RV64-NEXT:    addiw a3, a3, -256
1238 ; RV64-NEXT:    vand.vx v0, v8, a3
1239 ; RV64-NEXT:    li a4, 40
1240 ; RV64-NEXT:    vsll.vx v0, v0, a4
1241 ; RV64-NEXT:    vor.vv v24, v24, v0
1242 ; RV64-NEXT:    vor.vv v16, v24, v16
1243 ; RV64-NEXT:    vsrl.vx v24, v8, a2
1244 ; RV64-NEXT:    vsrl.vx v0, v8, a4
1245 ; RV64-NEXT:    vand.vx v0, v0, a3
1246 ; RV64-NEXT:    vor.vv v24, v0, v24
1247 ; RV64-NEXT:    vsrl.vi v0, v8, 24
1248 ; RV64-NEXT:    vand.vx v0, v0, a1
1249 ; RV64-NEXT:    vsrl.vi v8, v8, 8
1250 ; RV64-NEXT:    vand.vx v8, v8, a0
1251 ; RV64-NEXT:    vor.vv v8, v8, v0
1252 ; RV64-NEXT:    vor.vv v8, v8, v24
1253 ; RV64-NEXT:    vor.vv v8, v16, v8
1254 ; RV64-NEXT:    ret
1256 ; CHECK-ZVKB-LABEL: vp_bswap_nxv7i64_unmasked:
1257 ; CHECK-ZVKB:       # %bb.0:
1258 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1259 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
1260 ; CHECK-ZVKB-NEXT:    ret
1261   %v = call <vscale x 7 x i64> @llvm.vp.bswap.nxv7i64(<vscale x 7 x i64> %va, <vscale x 7 x i1> splat (i1 true), i32 %evl)
1262   ret <vscale x 7 x i64> %v
1265 declare <vscale x 8 x i64> @llvm.vp.bswap.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1267 define <vscale x 8 x i64> @vp_bswap_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1268 ; RV32-LABEL: vp_bswap_nxv8i64:
1269 ; RV32:       # %bb.0:
1270 ; RV32-NEXT:    addi sp, sp, -16
1271 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1272 ; RV32-NEXT:    csrr a1, vlenb
1273 ; RV32-NEXT:    li a2, 24
1274 ; RV32-NEXT:    mul a1, a1, a2
1275 ; RV32-NEXT:    sub sp, sp, a1
1276 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x18, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 24 * vlenb
1277 ; RV32-NEXT:    sw zero, 12(sp)
1278 ; RV32-NEXT:    lui a1, 1044480
1279 ; RV32-NEXT:    sw a1, 8(sp)
1280 ; RV32-NEXT:    li a1, 56
1281 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1282 ; RV32-NEXT:    vsll.vx v16, v8, a1, v0.t
1283 ; RV32-NEXT:    lui a2, 16
1284 ; RV32-NEXT:    addi a2, a2, -256
1285 ; RV32-NEXT:    vand.vx v24, v8, a2, v0.t
1286 ; RV32-NEXT:    li a3, 40
1287 ; RV32-NEXT:    vsll.vx v24, v24, a3, v0.t
1288 ; RV32-NEXT:    vor.vv v16, v16, v24, v0.t
1289 ; RV32-NEXT:    csrr a4, vlenb
1290 ; RV32-NEXT:    slli a4, a4, 4
1291 ; RV32-NEXT:    add a4, sp, a4
1292 ; RV32-NEXT:    addi a4, a4, 16
1293 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1294 ; RV32-NEXT:    addi a4, sp, 8
1295 ; RV32-NEXT:    vsetvli a5, zero, e64, m8, ta, ma
1296 ; RV32-NEXT:    vlse64.v v16, (a4), zero
1297 ; RV32-NEXT:    csrr a4, vlenb
1298 ; RV32-NEXT:    slli a4, a4, 3
1299 ; RV32-NEXT:    add a4, sp, a4
1300 ; RV32-NEXT:    addi a4, a4, 16
1301 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1302 ; RV32-NEXT:    lui a4, 4080
1303 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1304 ; RV32-NEXT:    vand.vx v24, v8, a4, v0.t
1305 ; RV32-NEXT:    vsll.vi v24, v24, 24, v0.t
1306 ; RV32-NEXT:    addi a0, sp, 16
1307 ; RV32-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1308 ; RV32-NEXT:    vand.vv v24, v8, v16, v0.t
1309 ; RV32-NEXT:    vsll.vi v16, v24, 8, v0.t
1310 ; RV32-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1311 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
1312 ; RV32-NEXT:    csrr a0, vlenb
1313 ; RV32-NEXT:    slli a0, a0, 4
1314 ; RV32-NEXT:    add a0, sp, a0
1315 ; RV32-NEXT:    addi a0, a0, 16
1316 ; RV32-NEXT:    vl8r.v v24, (a0) # Unknown-size Folded Reload
1317 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
1318 ; RV32-NEXT:    csrr a0, vlenb
1319 ; RV32-NEXT:    slli a0, a0, 4
1320 ; RV32-NEXT:    add a0, sp, a0
1321 ; RV32-NEXT:    addi a0, a0, 16
1322 ; RV32-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
1323 ; RV32-NEXT:    vsrl.vx v16, v8, a1, v0.t
1324 ; RV32-NEXT:    vsrl.vx v24, v8, a3, v0.t
1325 ; RV32-NEXT:    vand.vx v24, v24, a2, v0.t
1326 ; RV32-NEXT:    vor.vv v16, v24, v16, v0.t
1327 ; RV32-NEXT:    addi a0, sp, 16
1328 ; RV32-NEXT:    vs8r.v v16, (a0) # Unknown-size Folded Spill
1329 ; RV32-NEXT:    vsrl.vi v24, v8, 24, v0.t
1330 ; RV32-NEXT:    vand.vx v24, v24, a4, v0.t
1331 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
1332 ; RV32-NEXT:    csrr a0, vlenb
1333 ; RV32-NEXT:    slli a0, a0, 3
1334 ; RV32-NEXT:    add a0, sp, a0
1335 ; RV32-NEXT:    addi a0, a0, 16
1336 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1337 ; RV32-NEXT:    vand.vv v8, v8, v16, v0.t
1338 ; RV32-NEXT:    vor.vv v8, v8, v24, v0.t
1339 ; RV32-NEXT:    addi a0, sp, 16
1340 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1341 ; RV32-NEXT:    vor.vv v8, v8, v16, v0.t
1342 ; RV32-NEXT:    csrr a0, vlenb
1343 ; RV32-NEXT:    slli a0, a0, 4
1344 ; RV32-NEXT:    add a0, sp, a0
1345 ; RV32-NEXT:    addi a0, a0, 16
1346 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1347 ; RV32-NEXT:    vor.vv v8, v16, v8, v0.t
1348 ; RV32-NEXT:    csrr a0, vlenb
1349 ; RV32-NEXT:    li a1, 24
1350 ; RV32-NEXT:    mul a0, a0, a1
1351 ; RV32-NEXT:    add sp, sp, a0
1352 ; RV32-NEXT:    addi sp, sp, 16
1353 ; RV32-NEXT:    ret
1355 ; RV64-LABEL: vp_bswap_nxv8i64:
1356 ; RV64:       # %bb.0:
1357 ; RV64-NEXT:    addi sp, sp, -16
1358 ; RV64-NEXT:    .cfi_def_cfa_offset 16
1359 ; RV64-NEXT:    csrr a1, vlenb
1360 ; RV64-NEXT:    slli a1, a1, 3
1361 ; RV64-NEXT:    sub sp, sp, a1
1362 ; RV64-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1363 ; RV64-NEXT:    lui a1, 4080
1364 ; RV64-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1365 ; RV64-NEXT:    vand.vx v16, v8, a1, v0.t
1366 ; RV64-NEXT:    vsll.vi v16, v16, 24, v0.t
1367 ; RV64-NEXT:    li a0, 255
1368 ; RV64-NEXT:    slli a0, a0, 24
1369 ; RV64-NEXT:    vand.vx v24, v8, a0, v0.t
1370 ; RV64-NEXT:    vsll.vi v24, v24, 8, v0.t
1371 ; RV64-NEXT:    vor.vv v16, v16, v24, v0.t
1372 ; RV64-NEXT:    addi a2, sp, 16
1373 ; RV64-NEXT:    vs8r.v v16, (a2) # Unknown-size Folded Spill
1374 ; RV64-NEXT:    li a2, 56
1375 ; RV64-NEXT:    vsll.vx v24, v8, a2, v0.t
1376 ; RV64-NEXT:    lui a3, 16
1377 ; RV64-NEXT:    addiw a3, a3, -256
1378 ; RV64-NEXT:    li a4, 40
1379 ; RV64-NEXT:    vand.vx v16, v8, a3, v0.t
1380 ; RV64-NEXT:    vsll.vx v16, v16, a4, v0.t
1381 ; RV64-NEXT:    vor.vv v16, v24, v16, v0.t
1382 ; RV64-NEXT:    addi a5, sp, 16
1383 ; RV64-NEXT:    vl8r.v v24, (a5) # Unknown-size Folded Reload
1384 ; RV64-NEXT:    vor.vv v16, v16, v24, v0.t
1385 ; RV64-NEXT:    vs8r.v v16, (a5) # Unknown-size Folded Spill
1386 ; RV64-NEXT:    vsrl.vx v24, v8, a2, v0.t
1387 ; RV64-NEXT:    vsrl.vx v16, v8, a4, v0.t
1388 ; RV64-NEXT:    vand.vx v16, v16, a3, v0.t
1389 ; RV64-NEXT:    vor.vv v24, v16, v24, v0.t
1390 ; RV64-NEXT:    vsrl.vi v16, v8, 24, v0.t
1391 ; RV64-NEXT:    vand.vx v16, v16, a1, v0.t
1392 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
1393 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
1394 ; RV64-NEXT:    vor.vv v8, v8, v16, v0.t
1395 ; RV64-NEXT:    vor.vv v8, v8, v24, v0.t
1396 ; RV64-NEXT:    addi a0, sp, 16
1397 ; RV64-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1398 ; RV64-NEXT:    vor.vv v8, v16, v8, v0.t
1399 ; RV64-NEXT:    csrr a0, vlenb
1400 ; RV64-NEXT:    slli a0, a0, 3
1401 ; RV64-NEXT:    add sp, sp, a0
1402 ; RV64-NEXT:    addi sp, sp, 16
1403 ; RV64-NEXT:    ret
1405 ; CHECK-ZVKB-LABEL: vp_bswap_nxv8i64:
1406 ; CHECK-ZVKB:       # %bb.0:
1407 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1408 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
1409 ; CHECK-ZVKB-NEXT:    ret
1410   %v = call <vscale x 8 x i64> @llvm.vp.bswap.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 %evl)
1411   ret <vscale x 8 x i64> %v
1414 define <vscale x 8 x i64> @vp_bswap_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1415 ; RV32-LABEL: vp_bswap_nxv8i64_unmasked:
1416 ; RV32:       # %bb.0:
1417 ; RV32-NEXT:    addi sp, sp, -16
1418 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1419 ; RV32-NEXT:    csrr a1, vlenb
1420 ; RV32-NEXT:    slli a1, a1, 3
1421 ; RV32-NEXT:    sub sp, sp, a1
1422 ; RV32-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
1423 ; RV32-NEXT:    sw zero, 12(sp)
1424 ; RV32-NEXT:    lui a1, 1044480
1425 ; RV32-NEXT:    sw a1, 8(sp)
1426 ; RV32-NEXT:    li a1, 56
1427 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1428 ; RV32-NEXT:    vsll.vx v16, v8, a1
1429 ; RV32-NEXT:    lui a2, 16
1430 ; RV32-NEXT:    addi a2, a2, -256
1431 ; RV32-NEXT:    vand.vx v24, v8, a2
1432 ; RV32-NEXT:    li a3, 40
1433 ; RV32-NEXT:    vsll.vx v24, v24, a3
1434 ; RV32-NEXT:    vor.vv v16, v16, v24
1435 ; RV32-NEXT:    addi a4, sp, 16
1436 ; RV32-NEXT:    vs8r.v v16, (a4) # Unknown-size Folded Spill
1437 ; RV32-NEXT:    addi a4, sp, 8
1438 ; RV32-NEXT:    vsetvli a5, zero, e64, m8, ta, ma
1439 ; RV32-NEXT:    vlse64.v v16, (a4), zero
1440 ; RV32-NEXT:    lui a4, 4080
1441 ; RV32-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1442 ; RV32-NEXT:    vand.vx v0, v8, a4
1443 ; RV32-NEXT:    vsll.vi v0, v0, 24
1444 ; RV32-NEXT:    vand.vv v24, v8, v16
1445 ; RV32-NEXT:    vsll.vi v24, v24, 8
1446 ; RV32-NEXT:    vor.vv v24, v0, v24
1447 ; RV32-NEXT:    addi a0, sp, 16
1448 ; RV32-NEXT:    vl8r.v v0, (a0) # Unknown-size Folded Reload
1449 ; RV32-NEXT:    vor.vv v24, v0, v24
1450 ; RV32-NEXT:    vs8r.v v24, (a0) # Unknown-size Folded Spill
1451 ; RV32-NEXT:    vsrl.vx v0, v8, a3
1452 ; RV32-NEXT:    vand.vx v0, v0, a2
1453 ; RV32-NEXT:    vsrl.vx v24, v8, a1
1454 ; RV32-NEXT:    vor.vv v24, v0, v24
1455 ; RV32-NEXT:    vsrl.vi v0, v8, 8
1456 ; RV32-NEXT:    vand.vv v16, v0, v16
1457 ; RV32-NEXT:    vsrl.vi v8, v8, 24
1458 ; RV32-NEXT:    vand.vx v8, v8, a4
1459 ; RV32-NEXT:    vor.vv v8, v16, v8
1460 ; RV32-NEXT:    vor.vv v8, v8, v24
1461 ; RV32-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1462 ; RV32-NEXT:    vor.vv v8, v16, v8
1463 ; RV32-NEXT:    csrr a0, vlenb
1464 ; RV32-NEXT:    slli a0, a0, 3
1465 ; RV32-NEXT:    add sp, sp, a0
1466 ; RV32-NEXT:    addi sp, sp, 16
1467 ; RV32-NEXT:    ret
1469 ; RV64-LABEL: vp_bswap_nxv8i64_unmasked:
1470 ; RV64:       # %bb.0:
1471 ; RV64-NEXT:    lui a1, 4080
1472 ; RV64-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1473 ; RV64-NEXT:    vand.vx v16, v8, a1
1474 ; RV64-NEXT:    vsll.vi v16, v16, 24
1475 ; RV64-NEXT:    li a0, 255
1476 ; RV64-NEXT:    slli a0, a0, 24
1477 ; RV64-NEXT:    vand.vx v24, v8, a0
1478 ; RV64-NEXT:    vsll.vi v24, v24, 8
1479 ; RV64-NEXT:    vor.vv v16, v16, v24
1480 ; RV64-NEXT:    li a2, 56
1481 ; RV64-NEXT:    vsll.vx v24, v8, a2
1482 ; RV64-NEXT:    lui a3, 16
1483 ; RV64-NEXT:    addiw a3, a3, -256
1484 ; RV64-NEXT:    vand.vx v0, v8, a3
1485 ; RV64-NEXT:    li a4, 40
1486 ; RV64-NEXT:    vsll.vx v0, v0, a4
1487 ; RV64-NEXT:    vor.vv v24, v24, v0
1488 ; RV64-NEXT:    vor.vv v16, v24, v16
1489 ; RV64-NEXT:    vsrl.vx v24, v8, a2
1490 ; RV64-NEXT:    vsrl.vx v0, v8, a4
1491 ; RV64-NEXT:    vand.vx v0, v0, a3
1492 ; RV64-NEXT:    vor.vv v24, v0, v24
1493 ; RV64-NEXT:    vsrl.vi v0, v8, 24
1494 ; RV64-NEXT:    vand.vx v0, v0, a1
1495 ; RV64-NEXT:    vsrl.vi v8, v8, 8
1496 ; RV64-NEXT:    vand.vx v8, v8, a0
1497 ; RV64-NEXT:    vor.vv v8, v8, v0
1498 ; RV64-NEXT:    vor.vv v8, v8, v24
1499 ; RV64-NEXT:    vor.vv v8, v16, v8
1500 ; RV64-NEXT:    ret
1502 ; CHECK-ZVKB-LABEL: vp_bswap_nxv8i64_unmasked:
1503 ; CHECK-ZVKB:       # %bb.0:
1504 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1505 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
1506 ; CHECK-ZVKB-NEXT:    ret
1507   %v = call <vscale x 8 x i64> @llvm.vp.bswap.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1508   ret <vscale x 8 x i64> %v
1511 ; Test splitting. Use i16 version for easier check.
1512 declare <vscale x 64 x i16> @llvm.vp.bswap.nxv64i16(<vscale x 64 x i16>, <vscale x 64 x i1>, i32)
1514 define <vscale x 64 x i16> @vp_bswap_nxv64i16(<vscale x 64 x i16> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
1515 ; CHECK-LABEL: vp_bswap_nxv64i16:
1516 ; CHECK:       # %bb.0:
1517 ; CHECK-NEXT:    addi sp, sp, -16
1518 ; CHECK-NEXT:    .cfi_def_cfa_offset 16
1519 ; CHECK-NEXT:    csrr a1, vlenb
1520 ; CHECK-NEXT:    slli a1, a1, 4
1521 ; CHECK-NEXT:    sub sp, sp, a1
1522 ; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x10, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 16 * vlenb
1523 ; CHECK-NEXT:    vmv1r.v v24, v0
1524 ; CHECK-NEXT:    csrr a1, vlenb
1525 ; CHECK-NEXT:    slli a1, a1, 3
1526 ; CHECK-NEXT:    add a1, sp, a1
1527 ; CHECK-NEXT:    addi a1, a1, 16
1528 ; CHECK-NEXT:    vs8r.v v8, (a1) # Unknown-size Folded Spill
1529 ; CHECK-NEXT:    csrr a1, vlenb
1530 ; CHECK-NEXT:    srli a2, a1, 1
1531 ; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma
1532 ; CHECK-NEXT:    vslidedown.vx v0, v0, a2
1533 ; CHECK-NEXT:    slli a1, a1, 2
1534 ; CHECK-NEXT:    sub a2, a0, a1
1535 ; CHECK-NEXT:    sltu a3, a0, a2
1536 ; CHECK-NEXT:    addi a3, a3, -1
1537 ; CHECK-NEXT:    and a2, a3, a2
1538 ; CHECK-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
1539 ; CHECK-NEXT:    vsrl.vi v8, v16, 8, v0.t
1540 ; CHECK-NEXT:    vsll.vi v16, v16, 8, v0.t
1541 ; CHECK-NEXT:    vor.vv v8, v16, v8, v0.t
1542 ; CHECK-NEXT:    addi a2, sp, 16
1543 ; CHECK-NEXT:    vs8r.v v8, (a2) # Unknown-size Folded Spill
1544 ; CHECK-NEXT:    bltu a0, a1, .LBB32_2
1545 ; CHECK-NEXT:  # %bb.1:
1546 ; CHECK-NEXT:    mv a0, a1
1547 ; CHECK-NEXT:  .LBB32_2:
1548 ; CHECK-NEXT:    vmv1r.v v0, v24
1549 ; CHECK-NEXT:    csrr a1, vlenb
1550 ; CHECK-NEXT:    slli a1, a1, 3
1551 ; CHECK-NEXT:    add a1, sp, a1
1552 ; CHECK-NEXT:    addi a1, a1, 16
1553 ; CHECK-NEXT:    vl8r.v v8, (a1) # Unknown-size Folded Reload
1554 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1555 ; CHECK-NEXT:    vsrl.vi v16, v8, 8, v0.t
1556 ; CHECK-NEXT:    vsll.vi v8, v8, 8, v0.t
1557 ; CHECK-NEXT:    vor.vv v8, v8, v16, v0.t
1558 ; CHECK-NEXT:    addi a0, sp, 16
1559 ; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
1560 ; CHECK-NEXT:    csrr a0, vlenb
1561 ; CHECK-NEXT:    slli a0, a0, 4
1562 ; CHECK-NEXT:    add sp, sp, a0
1563 ; CHECK-NEXT:    addi sp, sp, 16
1564 ; CHECK-NEXT:    ret
1566 ; CHECK-ZVKB-LABEL: vp_bswap_nxv64i16:
1567 ; CHECK-ZVKB:       # %bb.0:
1568 ; CHECK-ZVKB-NEXT:    vmv1r.v v24, v0
1569 ; CHECK-ZVKB-NEXT:    csrr a1, vlenb
1570 ; CHECK-ZVKB-NEXT:    srli a2, a1, 1
1571 ; CHECK-ZVKB-NEXT:    vsetvli a3, zero, e8, m1, ta, ma
1572 ; CHECK-ZVKB-NEXT:    vslidedown.vx v0, v0, a2
1573 ; CHECK-ZVKB-NEXT:    slli a1, a1, 2
1574 ; CHECK-ZVKB-NEXT:    sub a2, a0, a1
1575 ; CHECK-ZVKB-NEXT:    sltu a3, a0, a2
1576 ; CHECK-ZVKB-NEXT:    addi a3, a3, -1
1577 ; CHECK-ZVKB-NEXT:    and a2, a3, a2
1578 ; CHECK-ZVKB-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
1579 ; CHECK-ZVKB-NEXT:    vrev8.v v16, v16, v0.t
1580 ; CHECK-ZVKB-NEXT:    bltu a0, a1, .LBB32_2
1581 ; CHECK-ZVKB-NEXT:  # %bb.1:
1582 ; CHECK-ZVKB-NEXT:    mv a0, a1
1583 ; CHECK-ZVKB-NEXT:  .LBB32_2:
1584 ; CHECK-ZVKB-NEXT:    vmv1r.v v0, v24
1585 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1586 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
1587 ; CHECK-ZVKB-NEXT:    ret
1588   %v = call <vscale x 64 x i16> @llvm.vp.bswap.nxv64i16(<vscale x 64 x i16> %va, <vscale x 64 x i1> %m, i32 %evl)
1589   ret <vscale x 64 x i16> %v
1592 define <vscale x 64 x i16> @vp_bswap_nxv64i16_unmasked(<vscale x 64 x i16> %va, i32 zeroext %evl) {
1593 ; CHECK-LABEL: vp_bswap_nxv64i16_unmasked:
1594 ; CHECK:       # %bb.0:
1595 ; CHECK-NEXT:    csrr a1, vlenb
1596 ; CHECK-NEXT:    slli a1, a1, 2
1597 ; CHECK-NEXT:    sub a2, a0, a1
1598 ; CHECK-NEXT:    sltu a3, a0, a2
1599 ; CHECK-NEXT:    addi a3, a3, -1
1600 ; CHECK-NEXT:    and a2, a3, a2
1601 ; CHECK-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
1602 ; CHECK-NEXT:    vsrl.vi v24, v16, 8
1603 ; CHECK-NEXT:    vsll.vi v16, v16, 8
1604 ; CHECK-NEXT:    vor.vv v16, v16, v24
1605 ; CHECK-NEXT:    bltu a0, a1, .LBB33_2
1606 ; CHECK-NEXT:  # %bb.1:
1607 ; CHECK-NEXT:    mv a0, a1
1608 ; CHECK-NEXT:  .LBB33_2:
1609 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1610 ; CHECK-NEXT:    vsrl.vi v24, v8, 8
1611 ; CHECK-NEXT:    vsll.vi v8, v8, 8
1612 ; CHECK-NEXT:    vor.vv v8, v8, v24
1613 ; CHECK-NEXT:    ret
1615 ; CHECK-ZVKB-LABEL: vp_bswap_nxv64i16_unmasked:
1616 ; CHECK-ZVKB:       # %bb.0:
1617 ; CHECK-ZVKB-NEXT:    csrr a1, vlenb
1618 ; CHECK-ZVKB-NEXT:    slli a1, a1, 2
1619 ; CHECK-ZVKB-NEXT:    sub a2, a0, a1
1620 ; CHECK-ZVKB-NEXT:    sltu a3, a0, a2
1621 ; CHECK-ZVKB-NEXT:    addi a3, a3, -1
1622 ; CHECK-ZVKB-NEXT:    and a2, a3, a2
1623 ; CHECK-ZVKB-NEXT:    vsetvli zero, a2, e16, m8, ta, ma
1624 ; CHECK-ZVKB-NEXT:    vrev8.v v16, v16
1625 ; CHECK-ZVKB-NEXT:    bltu a0, a1, .LBB33_2
1626 ; CHECK-ZVKB-NEXT:  # %bb.1:
1627 ; CHECK-ZVKB-NEXT:    mv a0, a1
1628 ; CHECK-ZVKB-NEXT:  .LBB33_2:
1629 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1630 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8
1631 ; CHECK-ZVKB-NEXT:    ret
1632   %v = call <vscale x 64 x i16> @llvm.vp.bswap.nxv64i16(<vscale x 64 x i16> %va, <vscale x 64 x i1> splat (i1 true), i32 %evl)
1633   ret <vscale x 64 x i16> %v
1636 ; Test promotion.
1637 declare <vscale x 1 x i48> @llvm.vp.bswap.nxv1i48(<vscale x 1 x i48>, <vscale x 1 x i1>, i32)
1638 define <vscale x 1 x i48> @vp_bswap_nxv1i48(<vscale x 1 x i48> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1639 ; RV32-LABEL: vp_bswap_nxv1i48:
1640 ; RV32:       # %bb.0:
1641 ; RV32-NEXT:    addi sp, sp, -16
1642 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1643 ; RV32-NEXT:    sw zero, 12(sp)
1644 ; RV32-NEXT:    lui a1, 1044480
1645 ; RV32-NEXT:    sw a1, 8(sp)
1646 ; RV32-NEXT:    li a1, 56
1647 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1648 ; RV32-NEXT:    vsll.vx v9, v8, a1, v0.t
1649 ; RV32-NEXT:    lui a2, 16
1650 ; RV32-NEXT:    addi a2, a2, -256
1651 ; RV32-NEXT:    vand.vx v10, v8, a2, v0.t
1652 ; RV32-NEXT:    li a3, 40
1653 ; RV32-NEXT:    vsll.vx v10, v10, a3, v0.t
1654 ; RV32-NEXT:    vor.vv v9, v9, v10, v0.t
1655 ; RV32-NEXT:    addi a4, sp, 8
1656 ; RV32-NEXT:    vsetvli a5, zero, e64, m1, ta, ma
1657 ; RV32-NEXT:    vlse64.v v10, (a4), zero
1658 ; RV32-NEXT:    lui a4, 4080
1659 ; RV32-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1660 ; RV32-NEXT:    vand.vx v11, v8, a4, v0.t
1661 ; RV32-NEXT:    vsll.vi v11, v11, 24, v0.t
1662 ; RV32-NEXT:    vand.vv v12, v8, v10, v0.t
1663 ; RV32-NEXT:    vsll.vi v12, v12, 8, v0.t
1664 ; RV32-NEXT:    vor.vv v11, v11, v12, v0.t
1665 ; RV32-NEXT:    vor.vv v9, v9, v11, v0.t
1666 ; RV32-NEXT:    vsrl.vx v11, v8, a1, v0.t
1667 ; RV32-NEXT:    vsrl.vx v12, v8, a3, v0.t
1668 ; RV32-NEXT:    vand.vx v12, v12, a2, v0.t
1669 ; RV32-NEXT:    vor.vv v11, v12, v11, v0.t
1670 ; RV32-NEXT:    vsrl.vi v12, v8, 24, v0.t
1671 ; RV32-NEXT:    vand.vx v12, v12, a4, v0.t
1672 ; RV32-NEXT:    vsrl.vi v8, v8, 8, v0.t
1673 ; RV32-NEXT:    vand.vv v8, v8, v10, v0.t
1674 ; RV32-NEXT:    vor.vv v8, v8, v12, v0.t
1675 ; RV32-NEXT:    vor.vv v8, v8, v11, v0.t
1676 ; RV32-NEXT:    vor.vv v8, v9, v8, v0.t
1677 ; RV32-NEXT:    vsrl.vi v8, v8, 16, v0.t
1678 ; RV32-NEXT:    addi sp, sp, 16
1679 ; RV32-NEXT:    ret
1681 ; RV64-LABEL: vp_bswap_nxv1i48:
1682 ; RV64:       # %bb.0:
1683 ; RV64-NEXT:    lui a1, 4080
1684 ; RV64-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1685 ; RV64-NEXT:    vand.vx v9, v8, a1, v0.t
1686 ; RV64-NEXT:    vsll.vi v9, v9, 24, v0.t
1687 ; RV64-NEXT:    li a0, 255
1688 ; RV64-NEXT:    slli a0, a0, 24
1689 ; RV64-NEXT:    vand.vx v10, v8, a0, v0.t
1690 ; RV64-NEXT:    vsll.vi v10, v10, 8, v0.t
1691 ; RV64-NEXT:    vor.vv v9, v9, v10, v0.t
1692 ; RV64-NEXT:    li a2, 56
1693 ; RV64-NEXT:    vsll.vx v10, v8, a2, v0.t
1694 ; RV64-NEXT:    lui a3, 16
1695 ; RV64-NEXT:    addiw a3, a3, -256
1696 ; RV64-NEXT:    vand.vx v11, v8, a3, v0.t
1697 ; RV64-NEXT:    li a4, 40
1698 ; RV64-NEXT:    vsll.vx v11, v11, a4, v0.t
1699 ; RV64-NEXT:    vor.vv v10, v10, v11, v0.t
1700 ; RV64-NEXT:    vor.vv v9, v10, v9, v0.t
1701 ; RV64-NEXT:    vsrl.vx v10, v8, a2, v0.t
1702 ; RV64-NEXT:    vsrl.vx v11, v8, a4, v0.t
1703 ; RV64-NEXT:    vand.vx v11, v11, a3, v0.t
1704 ; RV64-NEXT:    vor.vv v10, v11, v10, v0.t
1705 ; RV64-NEXT:    vsrl.vi v11, v8, 24, v0.t
1706 ; RV64-NEXT:    vand.vx v11, v11, a1, v0.t
1707 ; RV64-NEXT:    vsrl.vi v8, v8, 8, v0.t
1708 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
1709 ; RV64-NEXT:    vor.vv v8, v8, v11, v0.t
1710 ; RV64-NEXT:    vor.vv v8, v8, v10, v0.t
1711 ; RV64-NEXT:    vor.vv v8, v9, v8, v0.t
1712 ; RV64-NEXT:    vsrl.vi v8, v8, 16, v0.t
1713 ; RV64-NEXT:    ret
1715 ; CHECK-ZVKB-LABEL: vp_bswap_nxv1i48:
1716 ; CHECK-ZVKB:       # %bb.0:
1717 ; CHECK-ZVKB-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1718 ; CHECK-ZVKB-NEXT:    vrev8.v v8, v8, v0.t
1719 ; CHECK-ZVKB-NEXT:    vsrl.vi v8, v8, 16, v0.t
1720 ; CHECK-ZVKB-NEXT:    ret
1721   %v = call <vscale x 1 x i48> @llvm.vp.bswap.nxv1i48(<vscale x 1 x i48> %va, <vscale x 1 x i1> %m, i32 %evl)
1722   ret <vscale x 1 x i48> %v