1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3 ; RUN: | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5 ; RUN: | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <8 x i7> @llvm.vp.shl.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
9 define <8 x i7> @vsll_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsll_vv_v8i7:
12 ; CHECK-NEXT: li a1, 127
13 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
14 ; CHECK-NEXT: vand.vx v9, v9, a1, v0.t
15 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
17 %v = call <8 x i7> @llvm.vp.shl.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
21 declare <2 x i8> @llvm.vp.shl.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
23 define <2 x i8> @vsll_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
24 ; CHECK-LABEL: vsll_vv_v2i8:
26 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
27 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
29 %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
33 define <2 x i8> @vsll_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
34 ; CHECK-LABEL: vsll_vv_v2i8_unmasked:
36 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
37 ; CHECK-NEXT: vsll.vv v8, v8, v9
39 %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl)
43 define <2 x i8> @vsll_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
44 ; CHECK-LABEL: vsll_vx_v2i8:
46 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
47 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
49 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
50 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
51 %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
55 define <2 x i8> @vsll_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
56 ; CHECK-LABEL: vsll_vx_v2i8_unmasked:
58 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
59 ; CHECK-NEXT: vsll.vx v8, v8, a0
61 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
62 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
63 %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl)
67 define <2 x i8> @vsll_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
68 ; CHECK-LABEL: vsll_vi_v2i8:
70 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
71 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
73 %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> splat (i8 3), <2 x i1> %m, i32 %evl)
77 define <2 x i8> @vsll_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
78 ; CHECK-LABEL: vsll_vi_v2i8_unmasked:
80 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
81 ; CHECK-NEXT: vsll.vi v8, v8, 3
83 %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> splat (i8 3), <2 x i1> splat (i1 true), i32 %evl)
87 declare <3 x i8> @llvm.vp.shl.v3i8(<3 x i8>, <3 x i8>, <3 x i1>, i32)
89 define <3 x i8> @vsll_vv_v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> %m, i32 zeroext %evl) {
90 ; CHECK-LABEL: vsll_vv_v3i8:
92 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
93 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
95 %v = call <3 x i8> @llvm.vp.shl.v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> %m, i32 %evl)
99 declare <4 x i8> @llvm.vp.shl.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
101 define <4 x i8> @vsll_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
102 ; CHECK-LABEL: vsll_vv_v4i8:
104 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
105 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
107 %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
111 define <4 x i8> @vsll_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
112 ; CHECK-LABEL: vsll_vv_v4i8_unmasked:
114 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
115 ; CHECK-NEXT: vsll.vv v8, v8, v9
117 %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl)
121 define <4 x i8> @vsll_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
122 ; CHECK-LABEL: vsll_vx_v4i8:
124 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
125 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
127 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
128 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
129 %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
133 define <4 x i8> @vsll_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
134 ; CHECK-LABEL: vsll_vx_v4i8_unmasked:
136 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
137 ; CHECK-NEXT: vsll.vx v8, v8, a0
139 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
140 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
141 %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl)
145 define <4 x i8> @vsll_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
146 ; CHECK-LABEL: vsll_vi_v4i8:
148 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
149 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
151 %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> splat (i8 3), <4 x i1> %m, i32 %evl)
155 define <4 x i8> @vsll_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
156 ; CHECK-LABEL: vsll_vi_v4i8_unmasked:
158 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
159 ; CHECK-NEXT: vsll.vi v8, v8, 3
161 %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> splat (i8 3), <4 x i1> splat (i1 true), i32 %evl)
165 declare <8 x i8> @llvm.vp.shl.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
167 define <8 x i8> @vsll_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
168 ; CHECK-LABEL: vsll_vv_v8i8:
170 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
171 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
173 %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
177 define <8 x i8> @vsll_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
178 ; CHECK-LABEL: vsll_vv_v8i8_unmasked:
180 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
181 ; CHECK-NEXT: vsll.vv v8, v8, v9
183 %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl)
187 define <8 x i8> @vsll_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
188 ; CHECK-LABEL: vsll_vx_v8i8:
190 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
191 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
193 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
194 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
195 %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
199 define <8 x i8> @vsll_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
200 ; CHECK-LABEL: vsll_vx_v8i8_unmasked:
202 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
203 ; CHECK-NEXT: vsll.vx v8, v8, a0
205 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
206 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
207 %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl)
211 define <8 x i8> @vsll_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
212 ; CHECK-LABEL: vsll_vi_v8i8:
214 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
215 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
217 %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> splat (i8 3), <8 x i1> %m, i32 %evl)
221 define <8 x i8> @vsll_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
222 ; CHECK-LABEL: vsll_vi_v8i8_unmasked:
224 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
225 ; CHECK-NEXT: vsll.vi v8, v8, 3
227 %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> splat (i8 3), <8 x i1> splat (i1 true), i32 %evl)
231 declare <16 x i8> @llvm.vp.shl.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
233 define <16 x i8> @vsll_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
234 ; CHECK-LABEL: vsll_vv_v16i8:
236 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
237 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
239 %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
243 define <16 x i8> @vsll_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
244 ; CHECK-LABEL: vsll_vv_v16i8_unmasked:
246 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
247 ; CHECK-NEXT: vsll.vv v8, v8, v9
249 %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl)
253 define <16 x i8> @vsll_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
254 ; CHECK-LABEL: vsll_vx_v16i8:
256 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
257 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
259 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
260 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
261 %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
265 define <16 x i8> @vsll_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
266 ; CHECK-LABEL: vsll_vx_v16i8_unmasked:
268 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
269 ; CHECK-NEXT: vsll.vx v8, v8, a0
271 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
272 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
273 %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl)
277 define <16 x i8> @vsll_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
278 ; CHECK-LABEL: vsll_vi_v16i8:
280 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
281 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
283 %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> splat (i8 3), <16 x i1> %m, i32 %evl)
287 define <16 x i8> @vsll_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
288 ; CHECK-LABEL: vsll_vi_v16i8_unmasked:
290 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
291 ; CHECK-NEXT: vsll.vi v8, v8, 3
293 %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> splat (i8 3), <16 x i1> splat (i1 true), i32 %evl)
297 declare <2 x i16> @llvm.vp.shl.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
299 define <2 x i16> @vsll_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
300 ; CHECK-LABEL: vsll_vv_v2i16:
302 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
303 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
305 %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
309 define <2 x i16> @vsll_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
310 ; CHECK-LABEL: vsll_vv_v2i16_unmasked:
312 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
313 ; CHECK-NEXT: vsll.vv v8, v8, v9
315 %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl)
319 define <2 x i16> @vsll_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
320 ; CHECK-LABEL: vsll_vx_v2i16:
322 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
323 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
325 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
326 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
327 %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
331 define <2 x i16> @vsll_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
332 ; CHECK-LABEL: vsll_vx_v2i16_unmasked:
334 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
335 ; CHECK-NEXT: vsll.vx v8, v8, a0
337 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
338 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
339 %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl)
343 define <2 x i16> @vsll_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
344 ; CHECK-LABEL: vsll_vi_v2i16:
346 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
347 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
349 %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> splat (i16 3), <2 x i1> %m, i32 %evl)
353 define <2 x i16> @vsll_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
354 ; CHECK-LABEL: vsll_vi_v2i16_unmasked:
356 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
357 ; CHECK-NEXT: vsll.vi v8, v8, 3
359 %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> splat (i16 3), <2 x i1> splat (i1 true), i32 %evl)
363 declare <4 x i16> @llvm.vp.shl.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
365 define <4 x i16> @vsll_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
366 ; CHECK-LABEL: vsll_vv_v4i16:
368 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
369 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
371 %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
375 define <4 x i16> @vsll_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
376 ; CHECK-LABEL: vsll_vv_v4i16_unmasked:
378 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
379 ; CHECK-NEXT: vsll.vv v8, v8, v9
381 %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl)
385 define <4 x i16> @vsll_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
386 ; CHECK-LABEL: vsll_vx_v4i16:
388 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
389 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
391 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
392 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
393 %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
397 define <4 x i16> @vsll_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
398 ; CHECK-LABEL: vsll_vx_v4i16_unmasked:
400 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
401 ; CHECK-NEXT: vsll.vx v8, v8, a0
403 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
404 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
405 %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl)
409 define <4 x i16> @vsll_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
410 ; CHECK-LABEL: vsll_vi_v4i16:
412 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
413 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
415 %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> splat (i16 3), <4 x i1> %m, i32 %evl)
419 define <4 x i16> @vsll_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
420 ; CHECK-LABEL: vsll_vi_v4i16_unmasked:
422 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
423 ; CHECK-NEXT: vsll.vi v8, v8, 3
425 %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> splat (i16 3), <4 x i1> splat (i1 true), i32 %evl)
429 declare <8 x i16> @llvm.vp.shl.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
431 define <8 x i16> @vsll_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
432 ; CHECK-LABEL: vsll_vv_v8i16:
434 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
435 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
437 %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
441 define <8 x i16> @vsll_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
442 ; CHECK-LABEL: vsll_vv_v8i16_unmasked:
444 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
445 ; CHECK-NEXT: vsll.vv v8, v8, v9
447 %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl)
451 define <8 x i16> @vsll_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
452 ; CHECK-LABEL: vsll_vx_v8i16:
454 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
455 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
457 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
458 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
459 %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
463 define <8 x i16> @vsll_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
464 ; CHECK-LABEL: vsll_vx_v8i16_unmasked:
466 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
467 ; CHECK-NEXT: vsll.vx v8, v8, a0
469 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
470 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
471 %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl)
475 define <8 x i16> @vsll_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
476 ; CHECK-LABEL: vsll_vi_v8i16:
478 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
479 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
481 %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> splat (i16 3), <8 x i1> %m, i32 %evl)
485 define <8 x i16> @vsll_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
486 ; CHECK-LABEL: vsll_vi_v8i16_unmasked:
488 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
489 ; CHECK-NEXT: vsll.vi v8, v8, 3
491 %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> splat (i16 3), <8 x i1> splat (i1 true), i32 %evl)
495 declare <16 x i16> @llvm.vp.shl.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
497 define <16 x i16> @vsll_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
498 ; CHECK-LABEL: vsll_vv_v16i16:
500 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
501 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
503 %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
507 define <16 x i16> @vsll_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
508 ; CHECK-LABEL: vsll_vv_v16i16_unmasked:
510 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
511 ; CHECK-NEXT: vsll.vv v8, v8, v10
513 %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl)
517 define <16 x i16> @vsll_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
518 ; CHECK-LABEL: vsll_vx_v16i16:
520 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
521 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
523 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
524 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
525 %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
529 define <16 x i16> @vsll_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
530 ; CHECK-LABEL: vsll_vx_v16i16_unmasked:
532 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
533 ; CHECK-NEXT: vsll.vx v8, v8, a0
535 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
536 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
537 %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl)
541 define <16 x i16> @vsll_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
542 ; CHECK-LABEL: vsll_vi_v16i16:
544 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
545 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
547 %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> splat (i16 3), <16 x i1> %m, i32 %evl)
551 define <16 x i16> @vsll_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
552 ; CHECK-LABEL: vsll_vi_v16i16_unmasked:
554 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
555 ; CHECK-NEXT: vsll.vi v8, v8, 3
557 %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> splat (i16 3), <16 x i1> splat (i1 true), i32 %evl)
561 declare <2 x i32> @llvm.vp.shl.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
563 define <2 x i32> @vsll_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
564 ; CHECK-LABEL: vsll_vv_v2i32:
566 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
567 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
569 %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
573 define <2 x i32> @vsll_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
574 ; CHECK-LABEL: vsll_vv_v2i32_unmasked:
576 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
577 ; CHECK-NEXT: vsll.vv v8, v8, v9
579 %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl)
583 define <2 x i32> @vsll_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
584 ; CHECK-LABEL: vsll_vx_v2i32:
586 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
587 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
589 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
590 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
591 %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
595 define <2 x i32> @vsll_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
596 ; CHECK-LABEL: vsll_vx_v2i32_unmasked:
598 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
599 ; CHECK-NEXT: vsll.vx v8, v8, a0
601 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
602 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
603 %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl)
607 define <2 x i32> @vsll_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
608 ; CHECK-LABEL: vsll_vi_v2i32:
610 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
611 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
613 %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> splat (i32 3), <2 x i1> %m, i32 %evl)
617 define <2 x i32> @vsll_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
618 ; CHECK-LABEL: vsll_vi_v2i32_unmasked:
620 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
621 ; CHECK-NEXT: vsll.vi v8, v8, 3
623 %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> splat (i32 3), <2 x i1> splat (i1 true), i32 %evl)
627 declare <4 x i32> @llvm.vp.shl.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
629 define <4 x i32> @vsll_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
630 ; CHECK-LABEL: vsll_vv_v4i32:
632 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
633 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
635 %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
639 define <4 x i32> @vsll_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
640 ; CHECK-LABEL: vsll_vv_v4i32_unmasked:
642 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
643 ; CHECK-NEXT: vsll.vv v8, v8, v9
645 %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl)
649 define <4 x i32> @vsll_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
650 ; CHECK-LABEL: vsll_vx_v4i32:
652 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
653 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
655 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
656 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
657 %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
661 define <4 x i32> @vsll_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
662 ; CHECK-LABEL: vsll_vx_v4i32_unmasked:
664 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
665 ; CHECK-NEXT: vsll.vx v8, v8, a0
667 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
668 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
669 %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl)
673 define <4 x i32> @vsll_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
674 ; CHECK-LABEL: vsll_vi_v4i32:
676 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
677 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
679 %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> splat (i32 3), <4 x i1> %m, i32 %evl)
683 define <4 x i32> @vsll_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
684 ; CHECK-LABEL: vsll_vi_v4i32_unmasked:
686 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
687 ; CHECK-NEXT: vsll.vi v8, v8, 3
689 %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> splat (i32 3), <4 x i1> splat (i1 true), i32 %evl)
693 declare <8 x i32> @llvm.vp.shl.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
695 define <8 x i32> @vsll_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
696 ; CHECK-LABEL: vsll_vv_v8i32:
698 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
699 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
701 %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
705 define <8 x i32> @vsll_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
706 ; CHECK-LABEL: vsll_vv_v8i32_unmasked:
708 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
709 ; CHECK-NEXT: vsll.vv v8, v8, v10
711 %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl)
715 define <8 x i32> @vsll_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
716 ; CHECK-LABEL: vsll_vx_v8i32:
718 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
719 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
721 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
722 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
723 %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
727 define <8 x i32> @vsll_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
728 ; CHECK-LABEL: vsll_vx_v8i32_unmasked:
730 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
731 ; CHECK-NEXT: vsll.vx v8, v8, a0
733 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
734 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
735 %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl)
739 define <8 x i32> @vsll_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
740 ; CHECK-LABEL: vsll_vi_v8i32:
742 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
743 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
745 %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> splat (i32 3), <8 x i1> %m, i32 %evl)
749 define <8 x i32> @vsll_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
750 ; CHECK-LABEL: vsll_vi_v8i32_unmasked:
752 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
753 ; CHECK-NEXT: vsll.vi v8, v8, 3
755 %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> splat (i32 3), <8 x i1> splat (i1 true), i32 %evl)
759 declare <16 x i32> @llvm.vp.shl.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
761 define <16 x i32> @vsll_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
762 ; CHECK-LABEL: vsll_vv_v16i32:
764 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
765 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
767 %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
771 define <16 x i32> @vsll_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
772 ; CHECK-LABEL: vsll_vv_v16i32_unmasked:
774 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
775 ; CHECK-NEXT: vsll.vv v8, v8, v12
777 %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl)
781 define <16 x i32> @vsll_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
782 ; CHECK-LABEL: vsll_vx_v16i32:
784 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
785 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
787 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
788 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
789 %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
793 define <16 x i32> @vsll_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
794 ; CHECK-LABEL: vsll_vx_v16i32_unmasked:
796 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
797 ; CHECK-NEXT: vsll.vx v8, v8, a0
799 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
800 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
801 %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl)
805 define <16 x i32> @vsll_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
806 ; CHECK-LABEL: vsll_vi_v16i32:
808 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
809 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
811 %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> splat (i32 3), <16 x i1> %m, i32 %evl)
815 define <16 x i32> @vsll_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
816 ; CHECK-LABEL: vsll_vi_v16i32_unmasked:
818 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
819 ; CHECK-NEXT: vsll.vi v8, v8, 3
821 %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> splat (i32 3), <16 x i1> splat (i1 true), i32 %evl)
825 declare <2 x i64> @llvm.vp.shl.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
827 define <2 x i64> @vsll_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
828 ; CHECK-LABEL: vsll_vv_v2i64:
830 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
831 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
833 %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
837 define <2 x i64> @vsll_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
838 ; CHECK-LABEL: vsll_vv_v2i64_unmasked:
840 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
841 ; CHECK-NEXT: vsll.vv v8, v8, v9
843 %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl)
847 define <2 x i64> @vsll_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
848 ; RV32-LABEL: vsll_vx_v2i64:
850 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
851 ; RV32-NEXT: vsll.vx v8, v8, a0, v0.t
854 ; RV64-LABEL: vsll_vx_v2i64:
856 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
857 ; RV64-NEXT: vsll.vx v8, v8, a0, v0.t
859 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
860 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
861 %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
865 define <2 x i64> @vsll_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
866 ; RV32-LABEL: vsll_vx_v2i64_unmasked:
868 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
869 ; RV32-NEXT: vsll.vx v8, v8, a0
872 ; RV64-LABEL: vsll_vx_v2i64_unmasked:
874 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
875 ; RV64-NEXT: vsll.vx v8, v8, a0
877 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
878 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
879 %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl)
883 define <2 x i64> @vsll_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
884 ; CHECK-LABEL: vsll_vi_v2i64:
886 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
887 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
889 %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> splat (i64 3), <2 x i1> %m, i32 %evl)
893 define <2 x i64> @vsll_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
894 ; CHECK-LABEL: vsll_vi_v2i64_unmasked:
896 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
897 ; CHECK-NEXT: vsll.vi v8, v8, 3
899 %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> splat (i64 3), <2 x i1> splat (i1 true), i32 %evl)
903 declare <4 x i64> @llvm.vp.shl.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
905 define <4 x i64> @vsll_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
906 ; CHECK-LABEL: vsll_vv_v4i64:
908 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
909 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
911 %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
915 define <4 x i64> @vsll_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
916 ; CHECK-LABEL: vsll_vv_v4i64_unmasked:
918 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
919 ; CHECK-NEXT: vsll.vv v8, v8, v10
921 %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl)
925 define <4 x i64> @vsll_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
926 ; RV32-LABEL: vsll_vx_v4i64:
928 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
929 ; RV32-NEXT: vsll.vx v8, v8, a0, v0.t
932 ; RV64-LABEL: vsll_vx_v4i64:
934 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
935 ; RV64-NEXT: vsll.vx v8, v8, a0, v0.t
937 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
938 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
939 %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
943 define <4 x i64> @vsll_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
944 ; RV32-LABEL: vsll_vx_v4i64_unmasked:
946 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
947 ; RV32-NEXT: vsll.vx v8, v8, a0
950 ; RV64-LABEL: vsll_vx_v4i64_unmasked:
952 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
953 ; RV64-NEXT: vsll.vx v8, v8, a0
955 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
956 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
957 %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl)
961 define <4 x i64> @vsll_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
962 ; CHECK-LABEL: vsll_vi_v4i64:
964 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
965 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
967 %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> splat (i64 3), <4 x i1> %m, i32 %evl)
971 define <4 x i64> @vsll_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
972 ; CHECK-LABEL: vsll_vi_v4i64_unmasked:
974 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
975 ; CHECK-NEXT: vsll.vi v8, v8, 3
977 %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> splat (i64 3), <4 x i1> splat (i1 true), i32 %evl)
981 declare <8 x i64> @llvm.vp.shl.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
983 define <8 x i64> @vsll_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
984 ; CHECK-LABEL: vsll_vv_v8i64:
986 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
987 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
989 %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
993 define <8 x i64> @vsll_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
994 ; CHECK-LABEL: vsll_vv_v8i64_unmasked:
996 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
997 ; CHECK-NEXT: vsll.vv v8, v8, v12
999 %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl)
1003 define <8 x i64> @vsll_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1004 ; RV32-LABEL: vsll_vx_v8i64:
1006 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1007 ; RV32-NEXT: vsll.vx v8, v8, a0, v0.t
1010 ; RV64-LABEL: vsll_vx_v8i64:
1012 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1013 ; RV64-NEXT: vsll.vx v8, v8, a0, v0.t
1015 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1016 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1017 %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1021 define <8 x i64> @vsll_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1022 ; RV32-LABEL: vsll_vx_v8i64_unmasked:
1024 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1025 ; RV32-NEXT: vsll.vx v8, v8, a0
1028 ; RV64-LABEL: vsll_vx_v8i64_unmasked:
1030 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1031 ; RV64-NEXT: vsll.vx v8, v8, a0
1033 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1034 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1035 %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl)
1039 define <8 x i64> @vsll_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1040 ; CHECK-LABEL: vsll_vi_v8i64:
1042 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1043 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1045 %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> splat (i64 3), <8 x i1> %m, i32 %evl)
1049 define <8 x i64> @vsll_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1050 ; CHECK-LABEL: vsll_vi_v8i64_unmasked:
1052 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1053 ; CHECK-NEXT: vsll.vi v8, v8, 3
1055 %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> splat (i64 3), <8 x i1> splat (i1 true), i32 %evl)
1059 declare <16 x i64> @llvm.vp.shl.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1061 define <16 x i64> @vsll_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1062 ; CHECK-LABEL: vsll_vv_v16i64:
1064 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1065 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
1067 %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1071 define <16 x i64> @vsll_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1072 ; CHECK-LABEL: vsll_vv_v16i64_unmasked:
1074 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1075 ; CHECK-NEXT: vsll.vv v8, v8, v16
1077 %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl)
1081 define <16 x i64> @vsll_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1082 ; RV32-LABEL: vsll_vx_v16i64:
1084 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1085 ; RV32-NEXT: vsll.vx v8, v8, a0, v0.t
1088 ; RV64-LABEL: vsll_vx_v16i64:
1090 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1091 ; RV64-NEXT: vsll.vx v8, v8, a0, v0.t
1093 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1094 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1095 %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1099 define <16 x i64> @vsll_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1100 ; RV32-LABEL: vsll_vx_v16i64_unmasked:
1102 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1103 ; RV32-NEXT: vsll.vx v8, v8, a0
1106 ; RV64-LABEL: vsll_vx_v16i64_unmasked:
1108 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1109 ; RV64-NEXT: vsll.vx v8, v8, a0
1111 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1112 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1113 %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl)
1117 define <16 x i64> @vsll_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1118 ; CHECK-LABEL: vsll_vi_v16i64:
1120 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1121 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1123 %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> splat (i64 3), <16 x i1> %m, i32 %evl)
1127 define <16 x i64> @vsll_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1128 ; CHECK-LABEL: vsll_vi_v16i64_unmasked:
1130 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1131 ; CHECK-NEXT: vsll.vi v8, v8, 3
1133 %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> splat (i64 3), <16 x i1> splat (i1 true), i32 %evl)