1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v,+m -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=riscv64 -mattr=+v,+m -verify-machineinstrs < %s | FileCheck %s
5 declare <2 x i8> @llvm.vp.fshr.v2i8(<2 x i8>, <2 x i8>, <2 x i8>, <2 x i1>, i32)
6 define <2 x i8> @fshr_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i1> %m, i32 zeroext %evl) {
7 ; CHECK-LABEL: fshr_v2i8:
9 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
10 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
11 ; CHECK-NEXT: vnot.v v11, v10, v0.t
12 ; CHECK-NEXT: vand.vi v11, v11, 7, v0.t
13 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
14 ; CHECK-NEXT: vand.vi v10, v10, 7, v0.t
15 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
16 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
18 %res = call <2 x i8> @llvm.vp.fshr.v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i1> %m, i32 %evl)
22 declare <2 x i8> @llvm.vp.fshl.v2i8(<2 x i8>, <2 x i8>, <2 x i8>, <2 x i1>, i32)
23 define <2 x i8> @fshl_v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i1> %m, i32 zeroext %evl) {
24 ; CHECK-LABEL: fshl_v2i8:
26 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
27 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
28 ; CHECK-NEXT: vnot.v v11, v10, v0.t
29 ; CHECK-NEXT: vand.vi v11, v11, 7, v0.t
30 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
31 ; CHECK-NEXT: vand.vi v10, v10, 7, v0.t
32 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
33 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
35 %res = call <2 x i8> @llvm.vp.fshl.v2i8(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i1> %m, i32 %evl)
39 declare <4 x i8> @llvm.vp.fshr.v4i8(<4 x i8>, <4 x i8>, <4 x i8>, <4 x i1>, i32)
40 define <4 x i8> @fshr_v4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i1> %m, i32 zeroext %evl) {
41 ; CHECK-LABEL: fshr_v4i8:
43 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
44 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
45 ; CHECK-NEXT: vnot.v v11, v10, v0.t
46 ; CHECK-NEXT: vand.vi v11, v11, 7, v0.t
47 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
48 ; CHECK-NEXT: vand.vi v10, v10, 7, v0.t
49 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
50 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
52 %res = call <4 x i8> @llvm.vp.fshr.v4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i1> %m, i32 %evl)
56 declare <4 x i8> @llvm.vp.fshl.v4i8(<4 x i8>, <4 x i8>, <4 x i8>, <4 x i1>, i32)
57 define <4 x i8> @fshl_v4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i1> %m, i32 zeroext %evl) {
58 ; CHECK-LABEL: fshl_v4i8:
60 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
61 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
62 ; CHECK-NEXT: vnot.v v11, v10, v0.t
63 ; CHECK-NEXT: vand.vi v11, v11, 7, v0.t
64 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
65 ; CHECK-NEXT: vand.vi v10, v10, 7, v0.t
66 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
67 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
69 %res = call <4 x i8> @llvm.vp.fshl.v4i8(<4 x i8> %a, <4 x i8> %b, <4 x i8> %c, <4 x i1> %m, i32 %evl)
73 declare <8 x i8> @llvm.vp.fshr.v8i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i1>, i32)
74 define <8 x i8> @fshr_v8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i1> %m, i32 zeroext %evl) {
75 ; CHECK-LABEL: fshr_v8i8:
77 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
78 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
79 ; CHECK-NEXT: vnot.v v11, v10, v0.t
80 ; CHECK-NEXT: vand.vi v11, v11, 7, v0.t
81 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
82 ; CHECK-NEXT: vand.vi v10, v10, 7, v0.t
83 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
84 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
86 %res = call <8 x i8> @llvm.vp.fshr.v8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i1> %m, i32 %evl)
90 declare <8 x i8> @llvm.vp.fshl.v8i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i1>, i32)
91 define <8 x i8> @fshl_v8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i1> %m, i32 zeroext %evl) {
92 ; CHECK-LABEL: fshl_v8i8:
94 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
95 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
96 ; CHECK-NEXT: vnot.v v11, v10, v0.t
97 ; CHECK-NEXT: vand.vi v11, v11, 7, v0.t
98 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
99 ; CHECK-NEXT: vand.vi v10, v10, 7, v0.t
100 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
101 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
103 %res = call <8 x i8> @llvm.vp.fshl.v8i8(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c, <8 x i1> %m, i32 %evl)
107 declare <16 x i8> @llvm.vp.fshr.v16i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i1>, i32)
108 define <16 x i8> @fshr_v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %m, i32 zeroext %evl) {
109 ; CHECK-LABEL: fshr_v16i8:
111 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
112 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
113 ; CHECK-NEXT: vnot.v v11, v10, v0.t
114 ; CHECK-NEXT: vand.vi v11, v11, 7, v0.t
115 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
116 ; CHECK-NEXT: vand.vi v10, v10, 7, v0.t
117 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
118 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
120 %res = call <16 x i8> @llvm.vp.fshr.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %m, i32 %evl)
124 declare <16 x i8> @llvm.vp.fshl.v16i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i1>, i32)
125 define <16 x i8> @fshl_v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %m, i32 zeroext %evl) {
126 ; CHECK-LABEL: fshl_v16i8:
128 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
129 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
130 ; CHECK-NEXT: vnot.v v11, v10, v0.t
131 ; CHECK-NEXT: vand.vi v11, v11, 7, v0.t
132 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
133 ; CHECK-NEXT: vand.vi v10, v10, 7, v0.t
134 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
135 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
137 %res = call <16 x i8> @llvm.vp.fshl.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i1> %m, i32 %evl)
141 declare <32 x i8> @llvm.vp.fshr.v32i8(<32 x i8>, <32 x i8>, <32 x i8>, <32 x i1>, i32)
142 define <32 x i8> @fshr_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i1> %m, i32 zeroext %evl) {
143 ; CHECK-LABEL: fshr_v32i8:
145 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
146 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
147 ; CHECK-NEXT: vnot.v v14, v12, v0.t
148 ; CHECK-NEXT: vand.vi v14, v14, 7, v0.t
149 ; CHECK-NEXT: vsll.vv v8, v8, v14, v0.t
150 ; CHECK-NEXT: vand.vi v12, v12, 7, v0.t
151 ; CHECK-NEXT: vsrl.vv v10, v10, v12, v0.t
152 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
154 %res = call <32 x i8> @llvm.vp.fshr.v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i1> %m, i32 %evl)
158 declare <32 x i8> @llvm.vp.fshl.v32i8(<32 x i8>, <32 x i8>, <32 x i8>, <32 x i1>, i32)
159 define <32 x i8> @fshl_v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i1> %m, i32 zeroext %evl) {
160 ; CHECK-LABEL: fshl_v32i8:
162 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
163 ; CHECK-NEXT: vsrl.vi v10, v10, 1, v0.t
164 ; CHECK-NEXT: vnot.v v14, v12, v0.t
165 ; CHECK-NEXT: vand.vi v14, v14, 7, v0.t
166 ; CHECK-NEXT: vsrl.vv v10, v10, v14, v0.t
167 ; CHECK-NEXT: vand.vi v12, v12, 7, v0.t
168 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
169 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
171 %res = call <32 x i8> @llvm.vp.fshl.v32i8(<32 x i8> %a, <32 x i8> %b, <32 x i8> %c, <32 x i1> %m, i32 %evl)
175 declare <64 x i8> @llvm.vp.fshr.v64i8(<64 x i8>, <64 x i8>, <64 x i8>, <64 x i1>, i32)
176 define <64 x i8> @fshr_v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c, <64 x i1> %m, i32 zeroext %evl) {
177 ; CHECK-LABEL: fshr_v64i8:
179 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
180 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
181 ; CHECK-NEXT: vnot.v v20, v16, v0.t
182 ; CHECK-NEXT: vand.vi v20, v20, 7, v0.t
183 ; CHECK-NEXT: vsll.vv v8, v8, v20, v0.t
184 ; CHECK-NEXT: vand.vi v16, v16, 7, v0.t
185 ; CHECK-NEXT: vsrl.vv v12, v12, v16, v0.t
186 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
188 %res = call <64 x i8> @llvm.vp.fshr.v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c, <64 x i1> %m, i32 %evl)
192 declare <64 x i8> @llvm.vp.fshl.v64i8(<64 x i8>, <64 x i8>, <64 x i8>, <64 x i1>, i32)
193 define <64 x i8> @fshl_v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c, <64 x i1> %m, i32 zeroext %evl) {
194 ; CHECK-LABEL: fshl_v64i8:
196 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
197 ; CHECK-NEXT: vsrl.vi v12, v12, 1, v0.t
198 ; CHECK-NEXT: vnot.v v20, v16, v0.t
199 ; CHECK-NEXT: vand.vi v20, v20, 7, v0.t
200 ; CHECK-NEXT: vsrl.vv v12, v12, v20, v0.t
201 ; CHECK-NEXT: vand.vi v16, v16, 7, v0.t
202 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
203 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
205 %res = call <64 x i8> @llvm.vp.fshl.v64i8(<64 x i8> %a, <64 x i8> %b, <64 x i8> %c, <64 x i1> %m, i32 %evl)
209 declare <2 x i16> @llvm.vp.fshr.v2i16(<2 x i16>, <2 x i16>, <2 x i16>, <2 x i1>, i32)
210 define <2 x i16> @fshr_v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i1> %m, i32 zeroext %evl) {
211 ; CHECK-LABEL: fshr_v2i16:
213 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
214 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
215 ; CHECK-NEXT: vnot.v v11, v10, v0.t
216 ; CHECK-NEXT: vand.vi v11, v11, 15, v0.t
217 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
218 ; CHECK-NEXT: vand.vi v10, v10, 15, v0.t
219 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
220 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
222 %res = call <2 x i16> @llvm.vp.fshr.v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i1> %m, i32 %evl)
226 declare <2 x i16> @llvm.vp.fshl.v2i16(<2 x i16>, <2 x i16>, <2 x i16>, <2 x i1>, i32)
227 define <2 x i16> @fshl_v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i1> %m, i32 zeroext %evl) {
228 ; CHECK-LABEL: fshl_v2i16:
230 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
231 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
232 ; CHECK-NEXT: vnot.v v11, v10, v0.t
233 ; CHECK-NEXT: vand.vi v11, v11, 15, v0.t
234 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
235 ; CHECK-NEXT: vand.vi v10, v10, 15, v0.t
236 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
237 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
239 %res = call <2 x i16> @llvm.vp.fshl.v2i16(<2 x i16> %a, <2 x i16> %b, <2 x i16> %c, <2 x i1> %m, i32 %evl)
243 declare <4 x i16> @llvm.vp.fshr.v4i16(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i1>, i32)
244 define <4 x i16> @fshr_v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i1> %m, i32 zeroext %evl) {
245 ; CHECK-LABEL: fshr_v4i16:
247 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
248 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
249 ; CHECK-NEXT: vnot.v v11, v10, v0.t
250 ; CHECK-NEXT: vand.vi v11, v11, 15, v0.t
251 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
252 ; CHECK-NEXT: vand.vi v10, v10, 15, v0.t
253 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
254 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
256 %res = call <4 x i16> @llvm.vp.fshr.v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i1> %m, i32 %evl)
260 declare <4 x i16> @llvm.vp.fshl.v4i16(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i1>, i32)
261 define <4 x i16> @fshl_v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i1> %m, i32 zeroext %evl) {
262 ; CHECK-LABEL: fshl_v4i16:
264 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
265 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
266 ; CHECK-NEXT: vnot.v v11, v10, v0.t
267 ; CHECK-NEXT: vand.vi v11, v11, 15, v0.t
268 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
269 ; CHECK-NEXT: vand.vi v10, v10, 15, v0.t
270 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
271 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
273 %res = call <4 x i16> @llvm.vp.fshl.v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i1> %m, i32 %evl)
277 declare <8 x i16> @llvm.vp.fshr.v8i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i1>, i32)
278 define <8 x i16> @fshr_v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %m, i32 zeroext %evl) {
279 ; CHECK-LABEL: fshr_v8i16:
281 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
282 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
283 ; CHECK-NEXT: vnot.v v11, v10, v0.t
284 ; CHECK-NEXT: vand.vi v11, v11, 15, v0.t
285 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
286 ; CHECK-NEXT: vand.vi v10, v10, 15, v0.t
287 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
288 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
290 %res = call <8 x i16> @llvm.vp.fshr.v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %m, i32 %evl)
294 declare <8 x i16> @llvm.vp.fshl.v8i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i1>, i32)
295 define <8 x i16> @fshl_v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %m, i32 zeroext %evl) {
296 ; CHECK-LABEL: fshl_v8i16:
298 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
299 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
300 ; CHECK-NEXT: vnot.v v11, v10, v0.t
301 ; CHECK-NEXT: vand.vi v11, v11, 15, v0.t
302 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
303 ; CHECK-NEXT: vand.vi v10, v10, 15, v0.t
304 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
305 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
307 %res = call <8 x i16> @llvm.vp.fshl.v8i16(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c, <8 x i1> %m, i32 %evl)
311 declare <16 x i16> @llvm.vp.fshr.v16i16(<16 x i16>, <16 x i16>, <16 x i16>, <16 x i1>, i32)
312 define <16 x i16> @fshr_v16i16(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c, <16 x i1> %m, i32 zeroext %evl) {
313 ; CHECK-LABEL: fshr_v16i16:
315 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
316 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
317 ; CHECK-NEXT: vnot.v v14, v12, v0.t
318 ; CHECK-NEXT: vand.vi v14, v14, 15, v0.t
319 ; CHECK-NEXT: vsll.vv v8, v8, v14, v0.t
320 ; CHECK-NEXT: vand.vi v12, v12, 15, v0.t
321 ; CHECK-NEXT: vsrl.vv v10, v10, v12, v0.t
322 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
324 %res = call <16 x i16> @llvm.vp.fshr.v16i16(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c, <16 x i1> %m, i32 %evl)
328 declare <16 x i16> @llvm.vp.fshl.v16i16(<16 x i16>, <16 x i16>, <16 x i16>, <16 x i1>, i32)
329 define <16 x i16> @fshl_v16i16(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c, <16 x i1> %m, i32 zeroext %evl) {
330 ; CHECK-LABEL: fshl_v16i16:
332 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
333 ; CHECK-NEXT: vsrl.vi v10, v10, 1, v0.t
334 ; CHECK-NEXT: vnot.v v14, v12, v0.t
335 ; CHECK-NEXT: vand.vi v14, v14, 15, v0.t
336 ; CHECK-NEXT: vsrl.vv v10, v10, v14, v0.t
337 ; CHECK-NEXT: vand.vi v12, v12, 15, v0.t
338 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
339 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
341 %res = call <16 x i16> @llvm.vp.fshl.v16i16(<16 x i16> %a, <16 x i16> %b, <16 x i16> %c, <16 x i1> %m, i32 %evl)
345 declare <32 x i16> @llvm.vp.fshr.v32i16(<32 x i16>, <32 x i16>, <32 x i16>, <32 x i1>, i32)
346 define <32 x i16> @fshr_v32i16(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c, <32 x i1> %m, i32 zeroext %evl) {
347 ; CHECK-LABEL: fshr_v32i16:
349 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
350 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
351 ; CHECK-NEXT: vnot.v v20, v16, v0.t
352 ; CHECK-NEXT: vand.vi v20, v20, 15, v0.t
353 ; CHECK-NEXT: vsll.vv v8, v8, v20, v0.t
354 ; CHECK-NEXT: vand.vi v16, v16, 15, v0.t
355 ; CHECK-NEXT: vsrl.vv v12, v12, v16, v0.t
356 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
358 %res = call <32 x i16> @llvm.vp.fshr.v32i16(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c, <32 x i1> %m, i32 %evl)
362 declare <32 x i16> @llvm.vp.fshl.v32i16(<32 x i16>, <32 x i16>, <32 x i16>, <32 x i1>, i32)
363 define <32 x i16> @fshl_v32i16(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c, <32 x i1> %m, i32 zeroext %evl) {
364 ; CHECK-LABEL: fshl_v32i16:
366 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
367 ; CHECK-NEXT: vsrl.vi v12, v12, 1, v0.t
368 ; CHECK-NEXT: vnot.v v20, v16, v0.t
369 ; CHECK-NEXT: vand.vi v20, v20, 15, v0.t
370 ; CHECK-NEXT: vsrl.vv v12, v12, v20, v0.t
371 ; CHECK-NEXT: vand.vi v16, v16, 15, v0.t
372 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
373 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
375 %res = call <32 x i16> @llvm.vp.fshl.v32i16(<32 x i16> %a, <32 x i16> %b, <32 x i16> %c, <32 x i1> %m, i32 %evl)
379 declare <2 x i32> @llvm.vp.fshr.v2i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i1>, i32)
380 define <2 x i32> @fshr_v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i1> %m, i32 zeroext %evl) {
381 ; CHECK-LABEL: fshr_v2i32:
383 ; CHECK-NEXT: li a1, 31
384 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
385 ; CHECK-NEXT: vand.vx v11, v10, a1, v0.t
386 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
387 ; CHECK-NEXT: vnot.v v10, v10, v0.t
388 ; CHECK-NEXT: vand.vx v10, v10, a1, v0.t
389 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
390 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
391 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
393 %res = call <2 x i32> @llvm.vp.fshr.v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i1> %m, i32 %evl)
397 declare <2 x i32> @llvm.vp.fshl.v2i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i1>, i32)
398 define <2 x i32> @fshl_v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i1> %m, i32 zeroext %evl) {
399 ; CHECK-LABEL: fshl_v2i32:
401 ; CHECK-NEXT: li a1, 31
402 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
403 ; CHECK-NEXT: vand.vx v11, v10, a1, v0.t
404 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
405 ; CHECK-NEXT: vnot.v v10, v10, v0.t
406 ; CHECK-NEXT: vand.vx v10, v10, a1, v0.t
407 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
408 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
409 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
411 %res = call <2 x i32> @llvm.vp.fshl.v2i32(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c, <2 x i1> %m, i32 %evl)
415 declare <4 x i32> @llvm.vp.fshr.v4i32(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i1>, i32)
416 define <4 x i32> @fshr_v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %m, i32 zeroext %evl) {
417 ; CHECK-LABEL: fshr_v4i32:
419 ; CHECK-NEXT: li a1, 31
420 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
421 ; CHECK-NEXT: vand.vx v11, v10, a1, v0.t
422 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
423 ; CHECK-NEXT: vnot.v v10, v10, v0.t
424 ; CHECK-NEXT: vand.vx v10, v10, a1, v0.t
425 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
426 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
427 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
429 %res = call <4 x i32> @llvm.vp.fshr.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %m, i32 %evl)
433 declare <4 x i32> @llvm.vp.fshl.v4i32(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i1>, i32)
434 define <4 x i32> @fshl_v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %m, i32 zeroext %evl) {
435 ; CHECK-LABEL: fshl_v4i32:
437 ; CHECK-NEXT: li a1, 31
438 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
439 ; CHECK-NEXT: vand.vx v11, v10, a1, v0.t
440 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
441 ; CHECK-NEXT: vnot.v v10, v10, v0.t
442 ; CHECK-NEXT: vand.vx v10, v10, a1, v0.t
443 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
444 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
445 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
447 %res = call <4 x i32> @llvm.vp.fshl.v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i1> %m, i32 %evl)
451 declare <8 x i32> @llvm.vp.fshr.v8i32(<8 x i32>, <8 x i32>, <8 x i32>, <8 x i1>, i32)
452 define <8 x i32> @fshr_v8i32(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i1> %m, i32 zeroext %evl) {
453 ; CHECK-LABEL: fshr_v8i32:
455 ; CHECK-NEXT: li a1, 31
456 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
457 ; CHECK-NEXT: vand.vx v14, v12, a1, v0.t
458 ; CHECK-NEXT: vsrl.vv v10, v10, v14, v0.t
459 ; CHECK-NEXT: vnot.v v12, v12, v0.t
460 ; CHECK-NEXT: vand.vx v12, v12, a1, v0.t
461 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
462 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
463 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
465 %res = call <8 x i32> @llvm.vp.fshr.v8i32(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i1> %m, i32 %evl)
469 declare <8 x i32> @llvm.vp.fshl.v8i32(<8 x i32>, <8 x i32>, <8 x i32>, <8 x i1>, i32)
470 define <8 x i32> @fshl_v8i32(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i1> %m, i32 zeroext %evl) {
471 ; CHECK-LABEL: fshl_v8i32:
473 ; CHECK-NEXT: li a1, 31
474 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
475 ; CHECK-NEXT: vand.vx v14, v12, a1, v0.t
476 ; CHECK-NEXT: vsll.vv v8, v8, v14, v0.t
477 ; CHECK-NEXT: vnot.v v12, v12, v0.t
478 ; CHECK-NEXT: vand.vx v12, v12, a1, v0.t
479 ; CHECK-NEXT: vsrl.vi v10, v10, 1, v0.t
480 ; CHECK-NEXT: vsrl.vv v10, v10, v12, v0.t
481 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
483 %res = call <8 x i32> @llvm.vp.fshl.v8i32(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i1> %m, i32 %evl)
487 declare <16 x i32> @llvm.vp.fshr.v16i32(<16 x i32>, <16 x i32>, <16 x i32>, <16 x i1>, i32)
488 define <16 x i32> @fshr_v16i32(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i1> %m, i32 zeroext %evl) {
489 ; CHECK-LABEL: fshr_v16i32:
491 ; CHECK-NEXT: li a1, 31
492 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
493 ; CHECK-NEXT: vand.vx v20, v16, a1, v0.t
494 ; CHECK-NEXT: vsrl.vv v12, v12, v20, v0.t
495 ; CHECK-NEXT: vnot.v v16, v16, v0.t
496 ; CHECK-NEXT: vand.vx v16, v16, a1, v0.t
497 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
498 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
499 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
501 %res = call <16 x i32> @llvm.vp.fshr.v16i32(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i1> %m, i32 %evl)
505 declare <16 x i32> @llvm.vp.fshl.v16i32(<16 x i32>, <16 x i32>, <16 x i32>, <16 x i1>, i32)
506 define <16 x i32> @fshl_v16i32(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i1> %m, i32 zeroext %evl) {
507 ; CHECK-LABEL: fshl_v16i32:
509 ; CHECK-NEXT: li a1, 31
510 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
511 ; CHECK-NEXT: vand.vx v20, v16, a1, v0.t
512 ; CHECK-NEXT: vsll.vv v8, v8, v20, v0.t
513 ; CHECK-NEXT: vnot.v v16, v16, v0.t
514 ; CHECK-NEXT: vand.vx v16, v16, a1, v0.t
515 ; CHECK-NEXT: vsrl.vi v12, v12, 1, v0.t
516 ; CHECK-NEXT: vsrl.vv v12, v12, v16, v0.t
517 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
519 %res = call <16 x i32> @llvm.vp.fshl.v16i32(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c, <16 x i1> %m, i32 %evl)
523 declare <2 x i64> @llvm.vp.fshr.v2i64(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i1>, i32)
524 define <2 x i64> @fshr_v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i1> %m, i32 zeroext %evl) {
525 ; CHECK-LABEL: fshr_v2i64:
527 ; CHECK-NEXT: li a1, 63
528 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
529 ; CHECK-NEXT: vand.vx v11, v10, a1, v0.t
530 ; CHECK-NEXT: vsrl.vv v9, v9, v11, v0.t
531 ; CHECK-NEXT: vnot.v v10, v10, v0.t
532 ; CHECK-NEXT: vand.vx v10, v10, a1, v0.t
533 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
534 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
535 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
537 %res = call <2 x i64> @llvm.vp.fshr.v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i1> %m, i32 %evl)
541 declare <2 x i64> @llvm.vp.fshl.v2i64(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i1>, i32)
542 define <2 x i64> @fshl_v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i1> %m, i32 zeroext %evl) {
543 ; CHECK-LABEL: fshl_v2i64:
545 ; CHECK-NEXT: li a1, 63
546 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
547 ; CHECK-NEXT: vand.vx v11, v10, a1, v0.t
548 ; CHECK-NEXT: vsll.vv v8, v8, v11, v0.t
549 ; CHECK-NEXT: vnot.v v10, v10, v0.t
550 ; CHECK-NEXT: vand.vx v10, v10, a1, v0.t
551 ; CHECK-NEXT: vsrl.vi v9, v9, 1, v0.t
552 ; CHECK-NEXT: vsrl.vv v9, v9, v10, v0.t
553 ; CHECK-NEXT: vor.vv v8, v8, v9, v0.t
555 %res = call <2 x i64> @llvm.vp.fshl.v2i64(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c, <2 x i1> %m, i32 %evl)
559 declare <4 x i64> @llvm.vp.fshr.v4i64(<4 x i64>, <4 x i64>, <4 x i64>, <4 x i1>, i32)
560 define <4 x i64> @fshr_v4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c, <4 x i1> %m, i32 zeroext %evl) {
561 ; CHECK-LABEL: fshr_v4i64:
563 ; CHECK-NEXT: li a1, 63
564 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
565 ; CHECK-NEXT: vand.vx v14, v12, a1, v0.t
566 ; CHECK-NEXT: vsrl.vv v10, v10, v14, v0.t
567 ; CHECK-NEXT: vnot.v v12, v12, v0.t
568 ; CHECK-NEXT: vand.vx v12, v12, a1, v0.t
569 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
570 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
571 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
573 %res = call <4 x i64> @llvm.vp.fshr.v4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c, <4 x i1> %m, i32 %evl)
577 declare <4 x i64> @llvm.vp.fshl.v4i64(<4 x i64>, <4 x i64>, <4 x i64>, <4 x i1>, i32)
578 define <4 x i64> @fshl_v4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c, <4 x i1> %m, i32 zeroext %evl) {
579 ; CHECK-LABEL: fshl_v4i64:
581 ; CHECK-NEXT: li a1, 63
582 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
583 ; CHECK-NEXT: vand.vx v14, v12, a1, v0.t
584 ; CHECK-NEXT: vsll.vv v8, v8, v14, v0.t
585 ; CHECK-NEXT: vnot.v v12, v12, v0.t
586 ; CHECK-NEXT: vand.vx v12, v12, a1, v0.t
587 ; CHECK-NEXT: vsrl.vi v10, v10, 1, v0.t
588 ; CHECK-NEXT: vsrl.vv v10, v10, v12, v0.t
589 ; CHECK-NEXT: vor.vv v8, v8, v10, v0.t
591 %res = call <4 x i64> @llvm.vp.fshl.v4i64(<4 x i64> %a, <4 x i64> %b, <4 x i64> %c, <4 x i1> %m, i32 %evl)
595 declare <7 x i64> @llvm.vp.fshr.v7i64(<7 x i64>, <7 x i64>, <7 x i64>, <7 x i1>, i32)
596 define <7 x i64> @fshr_v7i64(<7 x i64> %a, <7 x i64> %b, <7 x i64> %c, <7 x i1> %m, i32 zeroext %evl) {
597 ; CHECK-LABEL: fshr_v7i64:
599 ; CHECK-NEXT: li a1, 63
600 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
601 ; CHECK-NEXT: vand.vx v20, v16, a1, v0.t
602 ; CHECK-NEXT: vsrl.vv v12, v12, v20, v0.t
603 ; CHECK-NEXT: vnot.v v16, v16, v0.t
604 ; CHECK-NEXT: vand.vx v16, v16, a1, v0.t
605 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
606 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
607 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
609 %res = call <7 x i64> @llvm.vp.fshr.v7i64(<7 x i64> %a, <7 x i64> %b, <7 x i64> %c, <7 x i1> %m, i32 %evl)
613 declare <7 x i64> @llvm.vp.fshl.v7i64(<7 x i64>, <7 x i64>, <7 x i64>, <7 x i1>, i32)
614 define <7 x i64> @fshl_v7i64(<7 x i64> %a, <7 x i64> %b, <7 x i64> %c, <7 x i1> %m, i32 zeroext %evl) {
615 ; CHECK-LABEL: fshl_v7i64:
617 ; CHECK-NEXT: li a1, 63
618 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
619 ; CHECK-NEXT: vand.vx v20, v16, a1, v0.t
620 ; CHECK-NEXT: vsll.vv v8, v8, v20, v0.t
621 ; CHECK-NEXT: vnot.v v16, v16, v0.t
622 ; CHECK-NEXT: vand.vx v16, v16, a1, v0.t
623 ; CHECK-NEXT: vsrl.vi v12, v12, 1, v0.t
624 ; CHECK-NEXT: vsrl.vv v12, v12, v16, v0.t
625 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
627 %res = call <7 x i64> @llvm.vp.fshl.v7i64(<7 x i64> %a, <7 x i64> %b, <7 x i64> %c, <7 x i1> %m, i32 %evl)
631 declare <8 x i64> @llvm.vp.fshr.v8i64(<8 x i64>, <8 x i64>, <8 x i64>, <8 x i1>, i32)
632 define <8 x i64> @fshr_v8i64(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c, <8 x i1> %m, i32 zeroext %evl) {
633 ; CHECK-LABEL: fshr_v8i64:
635 ; CHECK-NEXT: li a1, 63
636 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
637 ; CHECK-NEXT: vand.vx v20, v16, a1, v0.t
638 ; CHECK-NEXT: vsrl.vv v12, v12, v20, v0.t
639 ; CHECK-NEXT: vnot.v v16, v16, v0.t
640 ; CHECK-NEXT: vand.vx v16, v16, a1, v0.t
641 ; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t
642 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
643 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
645 %res = call <8 x i64> @llvm.vp.fshr.v8i64(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c, <8 x i1> %m, i32 %evl)
649 declare <8 x i64> @llvm.vp.fshl.v8i64(<8 x i64>, <8 x i64>, <8 x i64>, <8 x i1>, i32)
650 define <8 x i64> @fshl_v8i64(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c, <8 x i1> %m, i32 zeroext %evl) {
651 ; CHECK-LABEL: fshl_v8i64:
653 ; CHECK-NEXT: li a1, 63
654 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
655 ; CHECK-NEXT: vand.vx v20, v16, a1, v0.t
656 ; CHECK-NEXT: vsll.vv v8, v8, v20, v0.t
657 ; CHECK-NEXT: vnot.v v16, v16, v0.t
658 ; CHECK-NEXT: vand.vx v16, v16, a1, v0.t
659 ; CHECK-NEXT: vsrl.vi v12, v12, 1, v0.t
660 ; CHECK-NEXT: vsrl.vv v12, v12, v16, v0.t
661 ; CHECK-NEXT: vor.vv v8, v8, v12, v0.t
663 %res = call <8 x i64> @llvm.vp.fshl.v8i64(<8 x i64> %a, <8 x i64> %b, <8 x i64> %c, <8 x i1> %m, i32 %evl)
667 declare <16 x i64> @llvm.vp.fshr.v16i64(<16 x i64>, <16 x i64>, <16 x i64>, <16 x i1>, i32)
668 define <16 x i64> @fshr_v16i64(<16 x i64> %a, <16 x i64> %b, <16 x i64> %c, <16 x i1> %m, i32 zeroext %evl) {
669 ; CHECK-LABEL: fshr_v16i64:
671 ; CHECK-NEXT: addi sp, sp, -16
672 ; CHECK-NEXT: .cfi_def_cfa_offset 16
673 ; CHECK-NEXT: csrr a2, vlenb
674 ; CHECK-NEXT: slli a2, a2, 3
675 ; CHECK-NEXT: sub sp, sp, a2
676 ; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
677 ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
678 ; CHECK-NEXT: vle64.v v24, (a0)
679 ; CHECK-NEXT: addi a0, sp, 16
680 ; CHECK-NEXT: vs8r.v v8, (a0) # Unknown-size Folded Spill
681 ; CHECK-NEXT: li a0, 63
682 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
683 ; CHECK-NEXT: vand.vx v8, v24, a0, v0.t
684 ; CHECK-NEXT: vsrl.vv v16, v16, v8, v0.t
685 ; CHECK-NEXT: vnot.v v8, v24, v0.t
686 ; CHECK-NEXT: vand.vx v8, v8, a0, v0.t
687 ; CHECK-NEXT: addi a0, sp, 16
688 ; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload
689 ; CHECK-NEXT: vsll.vi v24, v24, 1, v0.t
690 ; CHECK-NEXT: vsll.vv v8, v24, v8, v0.t
691 ; CHECK-NEXT: vor.vv v8, v8, v16, v0.t
692 ; CHECK-NEXT: csrr a0, vlenb
693 ; CHECK-NEXT: slli a0, a0, 3
694 ; CHECK-NEXT: add sp, sp, a0
695 ; CHECK-NEXT: addi sp, sp, 16
697 %res = call <16 x i64> @llvm.vp.fshr.v16i64(<16 x i64> %a, <16 x i64> %b, <16 x i64> %c, <16 x i1> %m, i32 %evl)
701 declare <16 x i64> @llvm.vp.fshl.v16i64(<16 x i64>, <16 x i64>, <16 x i64>, <16 x i1>, i32)
702 define <16 x i64> @fshl_v16i64(<16 x i64> %a, <16 x i64> %b, <16 x i64> %c, <16 x i1> %m, i32 zeroext %evl) {
703 ; CHECK-LABEL: fshl_v16i64:
705 ; CHECK-NEXT: addi sp, sp, -16
706 ; CHECK-NEXT: .cfi_def_cfa_offset 16
707 ; CHECK-NEXT: csrr a2, vlenb
708 ; CHECK-NEXT: slli a2, a2, 3
709 ; CHECK-NEXT: sub sp, sp, a2
710 ; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
711 ; CHECK-NEXT: vsetivli zero, 16, e64, m8, ta, ma
712 ; CHECK-NEXT: vle64.v v24, (a0)
713 ; CHECK-NEXT: addi a0, sp, 16
714 ; CHECK-NEXT: vs8r.v v16, (a0) # Unknown-size Folded Spill
715 ; CHECK-NEXT: vmv8r.v v16, v8
716 ; CHECK-NEXT: li a0, 63
717 ; CHECK-NEXT: vsetvli zero, a1, e64, m8, ta, ma
718 ; CHECK-NEXT: vand.vx v8, v24, a0, v0.t
719 ; CHECK-NEXT: vsll.vv v8, v16, v8, v0.t
720 ; CHECK-NEXT: vnot.v v16, v24, v0.t
721 ; CHECK-NEXT: vand.vx v16, v16, a0, v0.t
722 ; CHECK-NEXT: addi a0, sp, 16
723 ; CHECK-NEXT: vl8r.v v24, (a0) # Unknown-size Folded Reload
724 ; CHECK-NEXT: vsrl.vi v24, v24, 1, v0.t
725 ; CHECK-NEXT: vsrl.vv v16, v24, v16, v0.t
726 ; CHECK-NEXT: vor.vv v8, v8, v16, v0.t
727 ; CHECK-NEXT: csrr a0, vlenb
728 ; CHECK-NEXT: slli a0, a0, 3
729 ; CHECK-NEXT: add sp, sp, a0
730 ; CHECK-NEXT: addi sp, sp, 16
732 %res = call <16 x i64> @llvm.vp.fshl.v16i64(<16 x i64> %a, <16 x i64> %b, <16 x i64> %c, <16 x i1> %m, i32 %evl)