Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-fshr-fshl-vp.ll
bloba2ff77625b758447102433eac02810d2bb9381b5
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:
8 ; CHECK:       # %bb.0:
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
17 ; CHECK-NEXT:    ret
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)
19   ret <2 x i8> %res
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:
25 ; CHECK:       # %bb.0:
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
34 ; CHECK-NEXT:    ret
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)
36   ret <2 x i8> %res
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:
42 ; CHECK:       # %bb.0:
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
51 ; CHECK-NEXT:    ret
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)
53   ret <4 x i8> %res
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:
59 ; CHECK:       # %bb.0:
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
68 ; CHECK-NEXT:    ret
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)
70   ret <4 x i8> %res
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:
76 ; CHECK:       # %bb.0:
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
85 ; CHECK-NEXT:    ret
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)
87   ret <8 x i8> %res
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:
93 ; CHECK:       # %bb.0:
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
102 ; CHECK-NEXT:    ret
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)
104   ret <8 x i8> %res
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:
110 ; CHECK:       # %bb.0:
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
119 ; CHECK-NEXT:    ret
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)
121   ret <16 x i8> %res
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:
127 ; CHECK:       # %bb.0:
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
136 ; CHECK-NEXT:    ret
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)
138   ret <16 x i8> %res
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:
144 ; CHECK:       # %bb.0:
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
153 ; CHECK-NEXT:    ret
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)
155   ret <32 x i8> %res
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:
161 ; CHECK:       # %bb.0:
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
170 ; CHECK-NEXT:    ret
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)
172   ret <32 x i8> %res
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:
178 ; CHECK:       # %bb.0:
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
187 ; CHECK-NEXT:    ret
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)
189   ret <64 x i8> %res
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:
195 ; CHECK:       # %bb.0:
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
204 ; CHECK-NEXT:    ret
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)
206   ret <64 x i8> %res
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:
212 ; CHECK:       # %bb.0:
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
221 ; CHECK-NEXT:    ret
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)
223   ret <2 x i16> %res
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:
229 ; CHECK:       # %bb.0:
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
238 ; CHECK-NEXT:    ret
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)
240   ret <2 x i16> %res
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:
246 ; CHECK:       # %bb.0:
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
255 ; CHECK-NEXT:    ret
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)
257   ret <4 x i16> %res
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:
263 ; CHECK:       # %bb.0:
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
272 ; CHECK-NEXT:    ret
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)
274   ret <4 x i16> %res
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:
280 ; CHECK:       # %bb.0:
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
289 ; CHECK-NEXT:    ret
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)
291   ret <8 x i16> %res
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:
297 ; CHECK:       # %bb.0:
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
306 ; CHECK-NEXT:    ret
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)
308   ret <8 x i16> %res
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:
314 ; CHECK:       # %bb.0:
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
323 ; CHECK-NEXT:    ret
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)
325   ret <16 x i16> %res
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:
331 ; CHECK:       # %bb.0:
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
340 ; CHECK-NEXT:    ret
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)
342   ret <16 x i16> %res
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:
348 ; CHECK:       # %bb.0:
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
357 ; CHECK-NEXT:    ret
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)
359   ret <32 x i16> %res
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:
365 ; CHECK:       # %bb.0:
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
374 ; CHECK-NEXT:    ret
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)
376   ret <32 x i16> %res
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:
382 ; CHECK:       # %bb.0:
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
392 ; CHECK-NEXT:    ret
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)
394   ret <2 x i32> %res
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:
400 ; CHECK:       # %bb.0:
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
410 ; CHECK-NEXT:    ret
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)
412   ret <2 x i32> %res
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:
418 ; CHECK:       # %bb.0:
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
428 ; CHECK-NEXT:    ret
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)
430   ret <4 x i32> %res
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:
436 ; CHECK:       # %bb.0:
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
446 ; CHECK-NEXT:    ret
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)
448   ret <4 x i32> %res
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:
454 ; CHECK:       # %bb.0:
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
464 ; CHECK-NEXT:    ret
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)
466   ret <8 x i32> %res
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:
472 ; CHECK:       # %bb.0:
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
482 ; CHECK-NEXT:    ret
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)
484   ret <8 x i32> %res
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:
490 ; CHECK:       # %bb.0:
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
500 ; CHECK-NEXT:    ret
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)
502   ret <16 x i32> %res
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:
508 ; CHECK:       # %bb.0:
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
518 ; CHECK-NEXT:    ret
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)
520   ret <16 x i32> %res
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:
526 ; CHECK:       # %bb.0:
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
536 ; CHECK-NEXT:    ret
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)
538   ret <2 x i64> %res
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:
544 ; CHECK:       # %bb.0:
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
554 ; CHECK-NEXT:    ret
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)
556   ret <2 x i64> %res
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:
562 ; CHECK:       # %bb.0:
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
572 ; CHECK-NEXT:    ret
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)
574   ret <4 x i64> %res
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:
580 ; CHECK:       # %bb.0:
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
590 ; CHECK-NEXT:    ret
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)
592   ret <4 x i64> %res
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:
598 ; CHECK:       # %bb.0:
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
608 ; CHECK-NEXT:    ret
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)
610   ret <7 x i64> %res
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:
616 ; CHECK:       # %bb.0:
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
626 ; CHECK-NEXT:    ret
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)
628   ret <7 x i64> %res
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:
634 ; CHECK:       # %bb.0:
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
644 ; CHECK-NEXT:    ret
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)
646   ret <8 x i64> %res
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:
652 ; CHECK:       # %bb.0:
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
662 ; CHECK-NEXT:    ret
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)
664   ret <8 x i64> %res
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:
670 ; CHECK:       # %bb.0:
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
696 ; CHECK-NEXT:    ret
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)
698   ret <16 x i64> %res
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:
704 ; CHECK:       # %bb.0:
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
731 ; CHECK-NEXT:    ret
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)
733   ret <16 x i64> %res