Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vshl-vp.ll
blobbbbd6d69e37c3a517a71a6332d878e99fe689257
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:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    li a1, 127
13 ; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
14 ; CHECK-NEXT:    vand.vx v9, v9, a1
15 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
16 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
17 ; CHECK-NEXT:    ret
18   %v = call <8 x i7> @llvm.vp.shl.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
19   ret <8 x i7> %v
22 declare <2 x i8> @llvm.vp.shl.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
24 define <2 x i8> @vsll_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
25 ; CHECK-LABEL: vsll_vv_v2i8:
26 ; CHECK:       # %bb.0:
27 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
28 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
29 ; CHECK-NEXT:    ret
30   %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
31   ret <2 x i8> %v
34 define <2 x i8> @vsll_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
35 ; CHECK-LABEL: vsll_vv_v2i8_unmasked:
36 ; CHECK:       # %bb.0:
37 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
38 ; CHECK-NEXT:    vsll.vv v8, v8, v9
39 ; CHECK-NEXT:    ret
40   %head = insertelement <2 x i1> poison, i1 true, i32 0
41   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
42   %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
43   ret <2 x i8> %v
46 define <2 x i8> @vsll_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
47 ; CHECK-LABEL: vsll_vx_v2i8:
48 ; CHECK:       # %bb.0:
49 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
50 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
51 ; CHECK-NEXT:    ret
52   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
53   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
54   %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
55   ret <2 x i8> %v
58 define <2 x i8> @vsll_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
59 ; CHECK-LABEL: vsll_vx_v2i8_unmasked:
60 ; CHECK:       # %bb.0:
61 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
62 ; CHECK-NEXT:    vsll.vx v8, v8, a0
63 ; CHECK-NEXT:    ret
64   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
65   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
66   %head = insertelement <2 x i1> poison, i1 true, i32 0
67   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
68   %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
69   ret <2 x i8> %v
72 define <2 x i8> @vsll_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
73 ; CHECK-LABEL: vsll_vi_v2i8:
74 ; CHECK:       # %bb.0:
75 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
76 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
77 ; CHECK-NEXT:    ret
78   %elt.head = insertelement <2 x i8> poison, i8 3, i32 0
79   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
80   %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
81   ret <2 x i8> %v
84 define <2 x i8> @vsll_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
85 ; CHECK-LABEL: vsll_vi_v2i8_unmasked:
86 ; CHECK:       # %bb.0:
87 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
88 ; CHECK-NEXT:    vsll.vi v8, v8, 3
89 ; CHECK-NEXT:    ret
90   %elt.head = insertelement <2 x i8> poison, i8 3, i32 0
91   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
92   %head = insertelement <2 x i1> poison, i1 true, i32 0
93   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
94   %v = call <2 x i8> @llvm.vp.shl.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
95   ret <2 x i8> %v
98 declare <3 x i8> @llvm.vp.shl.v3i8(<3 x i8>, <3 x i8>, <3 x i1>, i32)
100 define <3 x i8> @vsll_vv_v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> %m, i32 zeroext %evl) {
101 ; CHECK-LABEL: vsll_vv_v3i8:
102 ; CHECK:       # %bb.0:
103 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
104 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
105 ; CHECK-NEXT:    ret
106   %v = call <3 x i8> @llvm.vp.shl.v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> %m, i32 %evl)
107   ret <3 x i8> %v
110 declare <4 x i8> @llvm.vp.shl.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
112 define <4 x i8> @vsll_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
113 ; CHECK-LABEL: vsll_vv_v4i8:
114 ; CHECK:       # %bb.0:
115 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
116 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
117 ; CHECK-NEXT:    ret
118   %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
119   ret <4 x i8> %v
122 define <4 x i8> @vsll_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
123 ; CHECK-LABEL: vsll_vv_v4i8_unmasked:
124 ; CHECK:       # %bb.0:
125 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
126 ; CHECK-NEXT:    vsll.vv v8, v8, v9
127 ; CHECK-NEXT:    ret
128   %head = insertelement <4 x i1> poison, i1 true, i32 0
129   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
130   %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
131   ret <4 x i8> %v
134 define <4 x i8> @vsll_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
135 ; CHECK-LABEL: vsll_vx_v4i8:
136 ; CHECK:       # %bb.0:
137 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
138 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
139 ; CHECK-NEXT:    ret
140   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
141   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
142   %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
143   ret <4 x i8> %v
146 define <4 x i8> @vsll_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
147 ; CHECK-LABEL: vsll_vx_v4i8_unmasked:
148 ; CHECK:       # %bb.0:
149 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
150 ; CHECK-NEXT:    vsll.vx v8, v8, a0
151 ; CHECK-NEXT:    ret
152   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
153   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
154   %head = insertelement <4 x i1> poison, i1 true, i32 0
155   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
156   %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
157   ret <4 x i8> %v
160 define <4 x i8> @vsll_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
161 ; CHECK-LABEL: vsll_vi_v4i8:
162 ; CHECK:       # %bb.0:
163 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
164 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
165 ; CHECK-NEXT:    ret
166   %elt.head = insertelement <4 x i8> poison, i8 3, i32 0
167   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
168   %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
169   ret <4 x i8> %v
172 define <4 x i8> @vsll_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
173 ; CHECK-LABEL: vsll_vi_v4i8_unmasked:
174 ; CHECK:       # %bb.0:
175 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
176 ; CHECK-NEXT:    vsll.vi v8, v8, 3
177 ; CHECK-NEXT:    ret
178   %elt.head = insertelement <4 x i8> poison, i8 3, i32 0
179   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
180   %head = insertelement <4 x i1> poison, i1 true, i32 0
181   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
182   %v = call <4 x i8> @llvm.vp.shl.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
183   ret <4 x i8> %v
186 declare <8 x i8> @llvm.vp.shl.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
188 define <8 x i8> @vsll_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
189 ; CHECK-LABEL: vsll_vv_v8i8:
190 ; CHECK:       # %bb.0:
191 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
192 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
193 ; CHECK-NEXT:    ret
194   %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
195   ret <8 x i8> %v
198 define <8 x i8> @vsll_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
199 ; CHECK-LABEL: vsll_vv_v8i8_unmasked:
200 ; CHECK:       # %bb.0:
201 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
202 ; CHECK-NEXT:    vsll.vv v8, v8, v9
203 ; CHECK-NEXT:    ret
204   %head = insertelement <8 x i1> poison, i1 true, i32 0
205   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
206   %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
207   ret <8 x i8> %v
210 define <8 x i8> @vsll_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
211 ; CHECK-LABEL: vsll_vx_v8i8:
212 ; CHECK:       # %bb.0:
213 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
214 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
215 ; CHECK-NEXT:    ret
216   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
217   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
218   %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
219   ret <8 x i8> %v
222 define <8 x i8> @vsll_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
223 ; CHECK-LABEL: vsll_vx_v8i8_unmasked:
224 ; CHECK:       # %bb.0:
225 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
226 ; CHECK-NEXT:    vsll.vx v8, v8, a0
227 ; CHECK-NEXT:    ret
228   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
229   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
230   %head = insertelement <8 x i1> poison, i1 true, i32 0
231   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
232   %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
233   ret <8 x i8> %v
236 define <8 x i8> @vsll_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
237 ; CHECK-LABEL: vsll_vi_v8i8:
238 ; CHECK:       # %bb.0:
239 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
240 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
241 ; CHECK-NEXT:    ret
242   %elt.head = insertelement <8 x i8> poison, i8 3, i32 0
243   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
244   %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
245   ret <8 x i8> %v
248 define <8 x i8> @vsll_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
249 ; CHECK-LABEL: vsll_vi_v8i8_unmasked:
250 ; CHECK:       # %bb.0:
251 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
252 ; CHECK-NEXT:    vsll.vi v8, v8, 3
253 ; CHECK-NEXT:    ret
254   %elt.head = insertelement <8 x i8> poison, i8 3, i32 0
255   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
256   %head = insertelement <8 x i1> poison, i1 true, i32 0
257   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
258   %v = call <8 x i8> @llvm.vp.shl.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
259   ret <8 x i8> %v
262 declare <16 x i8> @llvm.vp.shl.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
264 define <16 x i8> @vsll_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
265 ; CHECK-LABEL: vsll_vv_v16i8:
266 ; CHECK:       # %bb.0:
267 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
268 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
269 ; CHECK-NEXT:    ret
270   %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
271   ret <16 x i8> %v
274 define <16 x i8> @vsll_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
275 ; CHECK-LABEL: vsll_vv_v16i8_unmasked:
276 ; CHECK:       # %bb.0:
277 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
278 ; CHECK-NEXT:    vsll.vv v8, v8, v9
279 ; CHECK-NEXT:    ret
280   %head = insertelement <16 x i1> poison, i1 true, i32 0
281   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
282   %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
283   ret <16 x i8> %v
286 define <16 x i8> @vsll_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
287 ; CHECK-LABEL: vsll_vx_v16i8:
288 ; CHECK:       # %bb.0:
289 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
290 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
291 ; CHECK-NEXT:    ret
292   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
293   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
294   %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
295   ret <16 x i8> %v
298 define <16 x i8> @vsll_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
299 ; CHECK-LABEL: vsll_vx_v16i8_unmasked:
300 ; CHECK:       # %bb.0:
301 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
302 ; CHECK-NEXT:    vsll.vx v8, v8, a0
303 ; CHECK-NEXT:    ret
304   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
305   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
306   %head = insertelement <16 x i1> poison, i1 true, i32 0
307   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
308   %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
309   ret <16 x i8> %v
312 define <16 x i8> @vsll_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
313 ; CHECK-LABEL: vsll_vi_v16i8:
314 ; CHECK:       # %bb.0:
315 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
316 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
317 ; CHECK-NEXT:    ret
318   %elt.head = insertelement <16 x i8> poison, i8 3, i32 0
319   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
320   %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
321   ret <16 x i8> %v
324 define <16 x i8> @vsll_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
325 ; CHECK-LABEL: vsll_vi_v16i8_unmasked:
326 ; CHECK:       # %bb.0:
327 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
328 ; CHECK-NEXT:    vsll.vi v8, v8, 3
329 ; CHECK-NEXT:    ret
330   %elt.head = insertelement <16 x i8> poison, i8 3, i32 0
331   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
332   %head = insertelement <16 x i1> poison, i1 true, i32 0
333   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
334   %v = call <16 x i8> @llvm.vp.shl.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
335   ret <16 x i8> %v
338 declare <2 x i16> @llvm.vp.shl.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
340 define <2 x i16> @vsll_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
341 ; CHECK-LABEL: vsll_vv_v2i16:
342 ; CHECK:       # %bb.0:
343 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
344 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
345 ; CHECK-NEXT:    ret
346   %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
347   ret <2 x i16> %v
350 define <2 x i16> @vsll_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
351 ; CHECK-LABEL: vsll_vv_v2i16_unmasked:
352 ; CHECK:       # %bb.0:
353 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
354 ; CHECK-NEXT:    vsll.vv v8, v8, v9
355 ; CHECK-NEXT:    ret
356   %head = insertelement <2 x i1> poison, i1 true, i32 0
357   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
358   %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
359   ret <2 x i16> %v
362 define <2 x i16> @vsll_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
363 ; CHECK-LABEL: vsll_vx_v2i16:
364 ; CHECK:       # %bb.0:
365 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
366 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
367 ; CHECK-NEXT:    ret
368   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
369   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
370   %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
371   ret <2 x i16> %v
374 define <2 x i16> @vsll_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
375 ; CHECK-LABEL: vsll_vx_v2i16_unmasked:
376 ; CHECK:       # %bb.0:
377 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
378 ; CHECK-NEXT:    vsll.vx v8, v8, a0
379 ; CHECK-NEXT:    ret
380   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
381   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
382   %head = insertelement <2 x i1> poison, i1 true, i32 0
383   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
384   %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
385   ret <2 x i16> %v
388 define <2 x i16> @vsll_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
389 ; CHECK-LABEL: vsll_vi_v2i16:
390 ; CHECK:       # %bb.0:
391 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
392 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
393 ; CHECK-NEXT:    ret
394   %elt.head = insertelement <2 x i16> poison, i16 3, i32 0
395   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
396   %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
397   ret <2 x i16> %v
400 define <2 x i16> @vsll_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
401 ; CHECK-LABEL: vsll_vi_v2i16_unmasked:
402 ; CHECK:       # %bb.0:
403 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
404 ; CHECK-NEXT:    vsll.vi v8, v8, 3
405 ; CHECK-NEXT:    ret
406   %elt.head = insertelement <2 x i16> poison, i16 3, i32 0
407   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
408   %head = insertelement <2 x i1> poison, i1 true, i32 0
409   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
410   %v = call <2 x i16> @llvm.vp.shl.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
411   ret <2 x i16> %v
414 declare <4 x i16> @llvm.vp.shl.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
416 define <4 x i16> @vsll_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
417 ; CHECK-LABEL: vsll_vv_v4i16:
418 ; CHECK:       # %bb.0:
419 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
420 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
421 ; CHECK-NEXT:    ret
422   %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
423   ret <4 x i16> %v
426 define <4 x i16> @vsll_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
427 ; CHECK-LABEL: vsll_vv_v4i16_unmasked:
428 ; CHECK:       # %bb.0:
429 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
430 ; CHECK-NEXT:    vsll.vv v8, v8, v9
431 ; CHECK-NEXT:    ret
432   %head = insertelement <4 x i1> poison, i1 true, i32 0
433   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
434   %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
435   ret <4 x i16> %v
438 define <4 x i16> @vsll_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
439 ; CHECK-LABEL: vsll_vx_v4i16:
440 ; CHECK:       # %bb.0:
441 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
442 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
443 ; CHECK-NEXT:    ret
444   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
445   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
446   %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
447   ret <4 x i16> %v
450 define <4 x i16> @vsll_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
451 ; CHECK-LABEL: vsll_vx_v4i16_unmasked:
452 ; CHECK:       # %bb.0:
453 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
454 ; CHECK-NEXT:    vsll.vx v8, v8, a0
455 ; CHECK-NEXT:    ret
456   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
457   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
458   %head = insertelement <4 x i1> poison, i1 true, i32 0
459   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
460   %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
461   ret <4 x i16> %v
464 define <4 x i16> @vsll_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
465 ; CHECK-LABEL: vsll_vi_v4i16:
466 ; CHECK:       # %bb.0:
467 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
468 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
469 ; CHECK-NEXT:    ret
470   %elt.head = insertelement <4 x i16> poison, i16 3, i32 0
471   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
472   %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
473   ret <4 x i16> %v
476 define <4 x i16> @vsll_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
477 ; CHECK-LABEL: vsll_vi_v4i16_unmasked:
478 ; CHECK:       # %bb.0:
479 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
480 ; CHECK-NEXT:    vsll.vi v8, v8, 3
481 ; CHECK-NEXT:    ret
482   %elt.head = insertelement <4 x i16> poison, i16 3, i32 0
483   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
484   %head = insertelement <4 x i1> poison, i1 true, i32 0
485   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
486   %v = call <4 x i16> @llvm.vp.shl.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
487   ret <4 x i16> %v
490 declare <8 x i16> @llvm.vp.shl.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
492 define <8 x i16> @vsll_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
493 ; CHECK-LABEL: vsll_vv_v8i16:
494 ; CHECK:       # %bb.0:
495 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
496 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
497 ; CHECK-NEXT:    ret
498   %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
499   ret <8 x i16> %v
502 define <8 x i16> @vsll_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
503 ; CHECK-LABEL: vsll_vv_v8i16_unmasked:
504 ; CHECK:       # %bb.0:
505 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
506 ; CHECK-NEXT:    vsll.vv v8, v8, v9
507 ; CHECK-NEXT:    ret
508   %head = insertelement <8 x i1> poison, i1 true, i32 0
509   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
510   %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
511   ret <8 x i16> %v
514 define <8 x i16> @vsll_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
515 ; CHECK-LABEL: vsll_vx_v8i16:
516 ; CHECK:       # %bb.0:
517 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
518 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
519 ; CHECK-NEXT:    ret
520   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
521   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
522   %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
523   ret <8 x i16> %v
526 define <8 x i16> @vsll_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
527 ; CHECK-LABEL: vsll_vx_v8i16_unmasked:
528 ; CHECK:       # %bb.0:
529 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
530 ; CHECK-NEXT:    vsll.vx v8, v8, a0
531 ; CHECK-NEXT:    ret
532   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
533   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
534   %head = insertelement <8 x i1> poison, i1 true, i32 0
535   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
536   %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
537   ret <8 x i16> %v
540 define <8 x i16> @vsll_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
541 ; CHECK-LABEL: vsll_vi_v8i16:
542 ; CHECK:       # %bb.0:
543 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
544 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
545 ; CHECK-NEXT:    ret
546   %elt.head = insertelement <8 x i16> poison, i16 3, i32 0
547   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
548   %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
549   ret <8 x i16> %v
552 define <8 x i16> @vsll_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
553 ; CHECK-LABEL: vsll_vi_v8i16_unmasked:
554 ; CHECK:       # %bb.0:
555 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
556 ; CHECK-NEXT:    vsll.vi v8, v8, 3
557 ; CHECK-NEXT:    ret
558   %elt.head = insertelement <8 x i16> poison, i16 3, i32 0
559   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
560   %head = insertelement <8 x i1> poison, i1 true, i32 0
561   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
562   %v = call <8 x i16> @llvm.vp.shl.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
563   ret <8 x i16> %v
566 declare <16 x i16> @llvm.vp.shl.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
568 define <16 x i16> @vsll_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
569 ; CHECK-LABEL: vsll_vv_v16i16:
570 ; CHECK:       # %bb.0:
571 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
572 ; CHECK-NEXT:    vsll.vv v8, v8, v10, v0.t
573 ; CHECK-NEXT:    ret
574   %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
575   ret <16 x i16> %v
578 define <16 x i16> @vsll_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
579 ; CHECK-LABEL: vsll_vv_v16i16_unmasked:
580 ; CHECK:       # %bb.0:
581 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
582 ; CHECK-NEXT:    vsll.vv v8, v8, v10
583 ; CHECK-NEXT:    ret
584   %head = insertelement <16 x i1> poison, i1 true, i32 0
585   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
586   %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
587   ret <16 x i16> %v
590 define <16 x i16> @vsll_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
591 ; CHECK-LABEL: vsll_vx_v16i16:
592 ; CHECK:       # %bb.0:
593 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
594 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
595 ; CHECK-NEXT:    ret
596   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
597   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
598   %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
599   ret <16 x i16> %v
602 define <16 x i16> @vsll_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
603 ; CHECK-LABEL: vsll_vx_v16i16_unmasked:
604 ; CHECK:       # %bb.0:
605 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
606 ; CHECK-NEXT:    vsll.vx v8, v8, a0
607 ; CHECK-NEXT:    ret
608   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
609   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
610   %head = insertelement <16 x i1> poison, i1 true, i32 0
611   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
612   %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
613   ret <16 x i16> %v
616 define <16 x i16> @vsll_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
617 ; CHECK-LABEL: vsll_vi_v16i16:
618 ; CHECK:       # %bb.0:
619 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
620 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
621 ; CHECK-NEXT:    ret
622   %elt.head = insertelement <16 x i16> poison, i16 3, i32 0
623   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
624   %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
625   ret <16 x i16> %v
628 define <16 x i16> @vsll_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
629 ; CHECK-LABEL: vsll_vi_v16i16_unmasked:
630 ; CHECK:       # %bb.0:
631 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
632 ; CHECK-NEXT:    vsll.vi v8, v8, 3
633 ; CHECK-NEXT:    ret
634   %elt.head = insertelement <16 x i16> poison, i16 3, i32 0
635   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
636   %head = insertelement <16 x i1> poison, i1 true, i32 0
637   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
638   %v = call <16 x i16> @llvm.vp.shl.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
639   ret <16 x i16> %v
642 declare <2 x i32> @llvm.vp.shl.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
644 define <2 x i32> @vsll_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
645 ; CHECK-LABEL: vsll_vv_v2i32:
646 ; CHECK:       # %bb.0:
647 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
648 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
649 ; CHECK-NEXT:    ret
650   %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
651   ret <2 x i32> %v
654 define <2 x i32> @vsll_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
655 ; CHECK-LABEL: vsll_vv_v2i32_unmasked:
656 ; CHECK:       # %bb.0:
657 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
658 ; CHECK-NEXT:    vsll.vv v8, v8, v9
659 ; CHECK-NEXT:    ret
660   %head = insertelement <2 x i1> poison, i1 true, i32 0
661   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
662   %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
663   ret <2 x i32> %v
666 define <2 x i32> @vsll_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
667 ; CHECK-LABEL: vsll_vx_v2i32:
668 ; CHECK:       # %bb.0:
669 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
670 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
671 ; CHECK-NEXT:    ret
672   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
673   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
674   %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
675   ret <2 x i32> %v
678 define <2 x i32> @vsll_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
679 ; CHECK-LABEL: vsll_vx_v2i32_unmasked:
680 ; CHECK:       # %bb.0:
681 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
682 ; CHECK-NEXT:    vsll.vx v8, v8, a0
683 ; CHECK-NEXT:    ret
684   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
685   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
686   %head = insertelement <2 x i1> poison, i1 true, i32 0
687   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
688   %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
689   ret <2 x i32> %v
692 define <2 x i32> @vsll_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
693 ; CHECK-LABEL: vsll_vi_v2i32:
694 ; CHECK:       # %bb.0:
695 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
696 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
697 ; CHECK-NEXT:    ret
698   %elt.head = insertelement <2 x i32> poison, i32 3, i32 0
699   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
700   %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
701   ret <2 x i32> %v
704 define <2 x i32> @vsll_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
705 ; CHECK-LABEL: vsll_vi_v2i32_unmasked:
706 ; CHECK:       # %bb.0:
707 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
708 ; CHECK-NEXT:    vsll.vi v8, v8, 3
709 ; CHECK-NEXT:    ret
710   %elt.head = insertelement <2 x i32> poison, i32 3, i32 0
711   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
712   %head = insertelement <2 x i1> poison, i1 true, i32 0
713   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
714   %v = call <2 x i32> @llvm.vp.shl.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
715   ret <2 x i32> %v
718 declare <4 x i32> @llvm.vp.shl.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
720 define <4 x i32> @vsll_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
721 ; CHECK-LABEL: vsll_vv_v4i32:
722 ; CHECK:       # %bb.0:
723 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
724 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
725 ; CHECK-NEXT:    ret
726   %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
727   ret <4 x i32> %v
730 define <4 x i32> @vsll_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
731 ; CHECK-LABEL: vsll_vv_v4i32_unmasked:
732 ; CHECK:       # %bb.0:
733 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
734 ; CHECK-NEXT:    vsll.vv v8, v8, v9
735 ; CHECK-NEXT:    ret
736   %head = insertelement <4 x i1> poison, i1 true, i32 0
737   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
738   %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
739   ret <4 x i32> %v
742 define <4 x i32> @vsll_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
743 ; CHECK-LABEL: vsll_vx_v4i32:
744 ; CHECK:       # %bb.0:
745 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
746 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
747 ; CHECK-NEXT:    ret
748   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
749   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
750   %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
751   ret <4 x i32> %v
754 define <4 x i32> @vsll_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
755 ; CHECK-LABEL: vsll_vx_v4i32_unmasked:
756 ; CHECK:       # %bb.0:
757 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
758 ; CHECK-NEXT:    vsll.vx v8, v8, a0
759 ; CHECK-NEXT:    ret
760   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
761   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
762   %head = insertelement <4 x i1> poison, i1 true, i32 0
763   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
764   %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
765   ret <4 x i32> %v
768 define <4 x i32> @vsll_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
769 ; CHECK-LABEL: vsll_vi_v4i32:
770 ; CHECK:       # %bb.0:
771 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
772 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
773 ; CHECK-NEXT:    ret
774   %elt.head = insertelement <4 x i32> poison, i32 3, i32 0
775   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
776   %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
777   ret <4 x i32> %v
780 define <4 x i32> @vsll_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
781 ; CHECK-LABEL: vsll_vi_v4i32_unmasked:
782 ; CHECK:       # %bb.0:
783 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
784 ; CHECK-NEXT:    vsll.vi v8, v8, 3
785 ; CHECK-NEXT:    ret
786   %elt.head = insertelement <4 x i32> poison, i32 3, i32 0
787   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
788   %head = insertelement <4 x i1> poison, i1 true, i32 0
789   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
790   %v = call <4 x i32> @llvm.vp.shl.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
791   ret <4 x i32> %v
794 declare <8 x i32> @llvm.vp.shl.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
796 define <8 x i32> @vsll_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
797 ; CHECK-LABEL: vsll_vv_v8i32:
798 ; CHECK:       # %bb.0:
799 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
800 ; CHECK-NEXT:    vsll.vv v8, v8, v10, v0.t
801 ; CHECK-NEXT:    ret
802   %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
803   ret <8 x i32> %v
806 define <8 x i32> @vsll_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
807 ; CHECK-LABEL: vsll_vv_v8i32_unmasked:
808 ; CHECK:       # %bb.0:
809 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
810 ; CHECK-NEXT:    vsll.vv v8, v8, v10
811 ; CHECK-NEXT:    ret
812   %head = insertelement <8 x i1> poison, i1 true, i32 0
813   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
814   %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
815   ret <8 x i32> %v
818 define <8 x i32> @vsll_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
819 ; CHECK-LABEL: vsll_vx_v8i32:
820 ; CHECK:       # %bb.0:
821 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
822 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
823 ; CHECK-NEXT:    ret
824   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
825   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
826   %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
827   ret <8 x i32> %v
830 define <8 x i32> @vsll_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
831 ; CHECK-LABEL: vsll_vx_v8i32_unmasked:
832 ; CHECK:       # %bb.0:
833 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
834 ; CHECK-NEXT:    vsll.vx v8, v8, a0
835 ; CHECK-NEXT:    ret
836   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
837   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
838   %head = insertelement <8 x i1> poison, i1 true, i32 0
839   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
840   %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
841   ret <8 x i32> %v
844 define <8 x i32> @vsll_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
845 ; CHECK-LABEL: vsll_vi_v8i32:
846 ; CHECK:       # %bb.0:
847 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
848 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
849 ; CHECK-NEXT:    ret
850   %elt.head = insertelement <8 x i32> poison, i32 3, i32 0
851   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
852   %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
853   ret <8 x i32> %v
856 define <8 x i32> @vsll_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
857 ; CHECK-LABEL: vsll_vi_v8i32_unmasked:
858 ; CHECK:       # %bb.0:
859 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
860 ; CHECK-NEXT:    vsll.vi v8, v8, 3
861 ; CHECK-NEXT:    ret
862   %elt.head = insertelement <8 x i32> poison, i32 3, i32 0
863   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
864   %head = insertelement <8 x i1> poison, i1 true, i32 0
865   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
866   %v = call <8 x i32> @llvm.vp.shl.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
867   ret <8 x i32> %v
870 declare <16 x i32> @llvm.vp.shl.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
872 define <16 x i32> @vsll_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
873 ; CHECK-LABEL: vsll_vv_v16i32:
874 ; CHECK:       # %bb.0:
875 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
876 ; CHECK-NEXT:    vsll.vv v8, v8, v12, v0.t
877 ; CHECK-NEXT:    ret
878   %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
879   ret <16 x i32> %v
882 define <16 x i32> @vsll_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
883 ; CHECK-LABEL: vsll_vv_v16i32_unmasked:
884 ; CHECK:       # %bb.0:
885 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
886 ; CHECK-NEXT:    vsll.vv v8, v8, v12
887 ; CHECK-NEXT:    ret
888   %head = insertelement <16 x i1> poison, i1 true, i32 0
889   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
890   %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
891   ret <16 x i32> %v
894 define <16 x i32> @vsll_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
895 ; CHECK-LABEL: vsll_vx_v16i32:
896 ; CHECK:       # %bb.0:
897 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
898 ; CHECK-NEXT:    vsll.vx v8, v8, a0, v0.t
899 ; CHECK-NEXT:    ret
900   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
901   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
902   %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
903   ret <16 x i32> %v
906 define <16 x i32> @vsll_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
907 ; CHECK-LABEL: vsll_vx_v16i32_unmasked:
908 ; CHECK:       # %bb.0:
909 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
910 ; CHECK-NEXT:    vsll.vx v8, v8, a0
911 ; CHECK-NEXT:    ret
912   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
913   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
914   %head = insertelement <16 x i1> poison, i1 true, i32 0
915   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
916   %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
917   ret <16 x i32> %v
920 define <16 x i32> @vsll_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
921 ; CHECK-LABEL: vsll_vi_v16i32:
922 ; CHECK:       # %bb.0:
923 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
924 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
925 ; CHECK-NEXT:    ret
926   %elt.head = insertelement <16 x i32> poison, i32 3, i32 0
927   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
928   %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
929   ret <16 x i32> %v
932 define <16 x i32> @vsll_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
933 ; CHECK-LABEL: vsll_vi_v16i32_unmasked:
934 ; CHECK:       # %bb.0:
935 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
936 ; CHECK-NEXT:    vsll.vi v8, v8, 3
937 ; CHECK-NEXT:    ret
938   %elt.head = insertelement <16 x i32> poison, i32 3, i32 0
939   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
940   %head = insertelement <16 x i1> poison, i1 true, i32 0
941   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
942   %v = call <16 x i32> @llvm.vp.shl.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
943   ret <16 x i32> %v
946 declare <2 x i64> @llvm.vp.shl.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
948 define <2 x i64> @vsll_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
949 ; CHECK-LABEL: vsll_vv_v2i64:
950 ; CHECK:       # %bb.0:
951 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
952 ; CHECK-NEXT:    vsll.vv v8, v8, v9, v0.t
953 ; CHECK-NEXT:    ret
954   %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
955   ret <2 x i64> %v
958 define <2 x i64> @vsll_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
959 ; CHECK-LABEL: vsll_vv_v2i64_unmasked:
960 ; CHECK:       # %bb.0:
961 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
962 ; CHECK-NEXT:    vsll.vv v8, v8, v9
963 ; CHECK-NEXT:    ret
964   %head = insertelement <2 x i1> poison, i1 true, i32 0
965   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
966   %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
967   ret <2 x i64> %v
970 define <2 x i64> @vsll_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
971 ; RV32-LABEL: vsll_vx_v2i64:
972 ; RV32:       # %bb.0:
973 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
974 ; RV32-NEXT:    vsll.vx v8, v8, a0, v0.t
975 ; RV32-NEXT:    ret
977 ; RV64-LABEL: vsll_vx_v2i64:
978 ; RV64:       # %bb.0:
979 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
980 ; RV64-NEXT:    vsll.vx v8, v8, a0, v0.t
981 ; RV64-NEXT:    ret
982   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
983   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
984   %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
985   ret <2 x i64> %v
988 define <2 x i64> @vsll_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
989 ; RV32-LABEL: vsll_vx_v2i64_unmasked:
990 ; RV32:       # %bb.0:
991 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
992 ; RV32-NEXT:    vsll.vx v8, v8, a0
993 ; RV32-NEXT:    ret
995 ; RV64-LABEL: vsll_vx_v2i64_unmasked:
996 ; RV64:       # %bb.0:
997 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
998 ; RV64-NEXT:    vsll.vx v8, v8, a0
999 ; RV64-NEXT:    ret
1000   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
1001   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1002   %head = insertelement <2 x i1> poison, i1 true, i32 0
1003   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
1004   %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1005   ret <2 x i64> %v
1008 define <2 x i64> @vsll_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
1009 ; CHECK-LABEL: vsll_vi_v2i64:
1010 ; CHECK:       # %bb.0:
1011 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1012 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
1013 ; CHECK-NEXT:    ret
1014   %elt.head = insertelement <2 x i64> poison, i64 3, i32 0
1015   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1016   %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1017   ret <2 x i64> %v
1020 define <2 x i64> @vsll_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
1021 ; CHECK-LABEL: vsll_vi_v2i64_unmasked:
1022 ; CHECK:       # %bb.0:
1023 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1024 ; CHECK-NEXT:    vsll.vi v8, v8, 3
1025 ; CHECK-NEXT:    ret
1026   %elt.head = insertelement <2 x i64> poison, i64 3, i32 0
1027   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
1028   %head = insertelement <2 x i1> poison, i1 true, i32 0
1029   %m = shufflevector <2 x i1> %head, <2 x i1> poison, <2 x i32> zeroinitializer
1030   %v = call <2 x i64> @llvm.vp.shl.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
1031   ret <2 x i64> %v
1034 declare <4 x i64> @llvm.vp.shl.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
1036 define <4 x i64> @vsll_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
1037 ; CHECK-LABEL: vsll_vv_v4i64:
1038 ; CHECK:       # %bb.0:
1039 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1040 ; CHECK-NEXT:    vsll.vv v8, v8, v10, v0.t
1041 ; CHECK-NEXT:    ret
1042   %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1043   ret <4 x i64> %v
1046 define <4 x i64> @vsll_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
1047 ; CHECK-LABEL: vsll_vv_v4i64_unmasked:
1048 ; CHECK:       # %bb.0:
1049 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1050 ; CHECK-NEXT:    vsll.vv v8, v8, v10
1051 ; CHECK-NEXT:    ret
1052   %head = insertelement <4 x i1> poison, i1 true, i32 0
1053   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1054   %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
1055   ret <4 x i64> %v
1058 define <4 x i64> @vsll_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
1059 ; RV32-LABEL: vsll_vx_v4i64:
1060 ; RV32:       # %bb.0:
1061 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1062 ; RV32-NEXT:    vsll.vx v8, v8, a0, v0.t
1063 ; RV32-NEXT:    ret
1065 ; RV64-LABEL: vsll_vx_v4i64:
1066 ; RV64:       # %bb.0:
1067 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1068 ; RV64-NEXT:    vsll.vx v8, v8, a0, v0.t
1069 ; RV64-NEXT:    ret
1070   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1071   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1072   %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1073   ret <4 x i64> %v
1076 define <4 x i64> @vsll_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
1077 ; RV32-LABEL: vsll_vx_v4i64_unmasked:
1078 ; RV32:       # %bb.0:
1079 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1080 ; RV32-NEXT:    vsll.vx v8, v8, a0
1081 ; RV32-NEXT:    ret
1083 ; RV64-LABEL: vsll_vx_v4i64_unmasked:
1084 ; RV64:       # %bb.0:
1085 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1086 ; RV64-NEXT:    vsll.vx v8, v8, a0
1087 ; RV64-NEXT:    ret
1088   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1089   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1090   %head = insertelement <4 x i1> poison, i1 true, i32 0
1091   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1092   %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1093   ret <4 x i64> %v
1096 define <4 x i64> @vsll_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1097 ; CHECK-LABEL: vsll_vi_v4i64:
1098 ; CHECK:       # %bb.0:
1099 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1100 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
1101 ; CHECK-NEXT:    ret
1102   %elt.head = insertelement <4 x i64> poison, i64 3, i32 0
1103   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1104   %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1105   ret <4 x i64> %v
1108 define <4 x i64> @vsll_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1109 ; CHECK-LABEL: vsll_vi_v4i64_unmasked:
1110 ; CHECK:       # %bb.0:
1111 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1112 ; CHECK-NEXT:    vsll.vi v8, v8, 3
1113 ; CHECK-NEXT:    ret
1114   %elt.head = insertelement <4 x i64> poison, i64 3, i32 0
1115   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1116   %head = insertelement <4 x i1> poison, i1 true, i32 0
1117   %m = shufflevector <4 x i1> %head, <4 x i1> poison, <4 x i32> zeroinitializer
1118   %v = call <4 x i64> @llvm.vp.shl.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
1119   ret <4 x i64> %v
1122 declare <8 x i64> @llvm.vp.shl.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
1124 define <8 x i64> @vsll_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
1125 ; CHECK-LABEL: vsll_vv_v8i64:
1126 ; CHECK:       # %bb.0:
1127 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1128 ; CHECK-NEXT:    vsll.vv v8, v8, v12, v0.t
1129 ; CHECK-NEXT:    ret
1130   %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1131   ret <8 x i64> %v
1134 define <8 x i64> @vsll_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
1135 ; CHECK-LABEL: vsll_vv_v8i64_unmasked:
1136 ; CHECK:       # %bb.0:
1137 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1138 ; CHECK-NEXT:    vsll.vv v8, v8, v12
1139 ; CHECK-NEXT:    ret
1140   %head = insertelement <8 x i1> poison, i1 true, i32 0
1141   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1142   %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1143   ret <8 x i64> %v
1146 define <8 x i64> @vsll_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1147 ; RV32-LABEL: vsll_vx_v8i64:
1148 ; RV32:       # %bb.0:
1149 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1150 ; RV32-NEXT:    vsll.vx v8, v8, a0, v0.t
1151 ; RV32-NEXT:    ret
1153 ; RV64-LABEL: vsll_vx_v8i64:
1154 ; RV64:       # %bb.0:
1155 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1156 ; RV64-NEXT:    vsll.vx v8, v8, a0, v0.t
1157 ; RV64-NEXT:    ret
1158   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1159   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1160   %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1161   ret <8 x i64> %v
1164 define <8 x i64> @vsll_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1165 ; RV32-LABEL: vsll_vx_v8i64_unmasked:
1166 ; RV32:       # %bb.0:
1167 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1168 ; RV32-NEXT:    vsll.vx v8, v8, a0
1169 ; RV32-NEXT:    ret
1171 ; RV64-LABEL: vsll_vx_v8i64_unmasked:
1172 ; RV64:       # %bb.0:
1173 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1174 ; RV64-NEXT:    vsll.vx v8, v8, a0
1175 ; RV64-NEXT:    ret
1176   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1177   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1178   %head = insertelement <8 x i1> poison, i1 true, i32 0
1179   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1180   %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1181   ret <8 x i64> %v
1184 define <8 x i64> @vsll_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1185 ; CHECK-LABEL: vsll_vi_v8i64:
1186 ; CHECK:       # %bb.0:
1187 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1188 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
1189 ; CHECK-NEXT:    ret
1190   %elt.head = insertelement <8 x i64> poison, i64 3, i32 0
1191   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1192   %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1193   ret <8 x i64> %v
1196 define <8 x i64> @vsll_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1197 ; CHECK-LABEL: vsll_vi_v8i64_unmasked:
1198 ; CHECK:       # %bb.0:
1199 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1200 ; CHECK-NEXT:    vsll.vi v8, v8, 3
1201 ; CHECK-NEXT:    ret
1202   %elt.head = insertelement <8 x i64> poison, i64 3, i32 0
1203   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1204   %head = insertelement <8 x i1> poison, i1 true, i32 0
1205   %m = shufflevector <8 x i1> %head, <8 x i1> poison, <8 x i32> zeroinitializer
1206   %v = call <8 x i64> @llvm.vp.shl.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1207   ret <8 x i64> %v
1210 declare <16 x i64> @llvm.vp.shl.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1212 define <16 x i64> @vsll_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1213 ; CHECK-LABEL: vsll_vv_v16i64:
1214 ; CHECK:       # %bb.0:
1215 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1216 ; CHECK-NEXT:    vsll.vv v8, v8, v16, v0.t
1217 ; CHECK-NEXT:    ret
1218   %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1219   ret <16 x i64> %v
1222 define <16 x i64> @vsll_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1223 ; CHECK-LABEL: vsll_vv_v16i64_unmasked:
1224 ; CHECK:       # %bb.0:
1225 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1226 ; CHECK-NEXT:    vsll.vv v8, v8, v16
1227 ; CHECK-NEXT:    ret
1228   %head = insertelement <16 x i1> poison, i1 true, i32 0
1229   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1230   %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1231   ret <16 x i64> %v
1234 define <16 x i64> @vsll_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1235 ; RV32-LABEL: vsll_vx_v16i64:
1236 ; RV32:       # %bb.0:
1237 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1238 ; RV32-NEXT:    vsll.vx v8, v8, a0, v0.t
1239 ; RV32-NEXT:    ret
1241 ; RV64-LABEL: vsll_vx_v16i64:
1242 ; RV64:       # %bb.0:
1243 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1244 ; RV64-NEXT:    vsll.vx v8, v8, a0, v0.t
1245 ; RV64-NEXT:    ret
1246   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1247   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1248   %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1249   ret <16 x i64> %v
1252 define <16 x i64> @vsll_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1253 ; RV32-LABEL: vsll_vx_v16i64_unmasked:
1254 ; RV32:       # %bb.0:
1255 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1256 ; RV32-NEXT:    vsll.vx v8, v8, a0
1257 ; RV32-NEXT:    ret
1259 ; RV64-LABEL: vsll_vx_v16i64_unmasked:
1260 ; RV64:       # %bb.0:
1261 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1262 ; RV64-NEXT:    vsll.vx v8, v8, a0
1263 ; RV64-NEXT:    ret
1264   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1265   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1266   %head = insertelement <16 x i1> poison, i1 true, i32 0
1267   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1268   %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1269   ret <16 x i64> %v
1272 define <16 x i64> @vsll_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1273 ; CHECK-LABEL: vsll_vi_v16i64:
1274 ; CHECK:       # %bb.0:
1275 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1276 ; CHECK-NEXT:    vsll.vi v8, v8, 3, v0.t
1277 ; CHECK-NEXT:    ret
1278   %elt.head = insertelement <16 x i64> poison, i64 3, i32 0
1279   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1280   %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1281   ret <16 x i64> %v
1284 define <16 x i64> @vsll_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1285 ; CHECK-LABEL: vsll_vi_v16i64_unmasked:
1286 ; CHECK:       # %bb.0:
1287 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1288 ; CHECK-NEXT:    vsll.vi v8, v8, 3
1289 ; CHECK-NEXT:    ret
1290   %elt.head = insertelement <16 x i64> poison, i64 3, i32 0
1291   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1292   %head = insertelement <16 x i1> poison, i1 true, i32 0
1293   %m = shufflevector <16 x i1> %head, <16 x i1> poison, <16 x i32> zeroinitializer
1294   %v = call <16 x i64> @llvm.vp.shl.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1295   ret <16 x i64> %v