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 <vscale x 8 x i7> @llvm.vp.shl.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
9 define <vscale x 8 x i7> @vsll_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsll_vx_nxv8i7:
12 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
13 ; CHECK-NEXT: vmv.v.x v9, a0
14 ; CHECK-NEXT: li a0, 127
15 ; CHECK-NEXT: vand.vx v9, v9, a0, v0.t
16 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
18 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
19 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
20 %v = call <vscale x 8 x i7> @llvm.vp.shl.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
21 ret <vscale x 8 x i7> %v
24 declare <vscale x 1 x i8> @llvm.vp.shl.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
26 define <vscale x 1 x i8> @vsll_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
27 ; CHECK-LABEL: vsll_vv_nxv1i8:
29 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
30 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
32 %v = call <vscale x 1 x i8> @llvm.vp.shl.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
33 ret <vscale x 1 x i8> %v
36 define <vscale x 1 x i8> @vsll_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
37 ; CHECK-LABEL: vsll_vv_nxv1i8_unmasked:
39 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
40 ; CHECK-NEXT: vsll.vv v8, v8, v9
42 %v = call <vscale x 1 x i8> @llvm.vp.shl.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
43 ret <vscale x 1 x i8> %v
46 define <vscale x 1 x i8> @vsll_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
47 ; CHECK-LABEL: vsll_vx_nxv1i8:
49 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
50 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
52 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
53 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
54 %v = call <vscale x 1 x i8> @llvm.vp.shl.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
55 ret <vscale x 1 x i8> %v
58 define <vscale x 1 x i8> @vsll_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
59 ; CHECK-LABEL: vsll_vx_nxv1i8_unmasked:
61 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
62 ; CHECK-NEXT: vsll.vx v8, v8, a0
64 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
65 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
66 %v = call <vscale x 1 x i8> @llvm.vp.shl.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
67 ret <vscale x 1 x i8> %v
70 define <vscale x 1 x i8> @vsll_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
71 ; CHECK-LABEL: vsll_vi_nxv1i8:
73 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
74 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
76 %v = call <vscale x 1 x i8> @llvm.vp.shl.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 3), <vscale x 1 x i1> %m, i32 %evl)
77 ret <vscale x 1 x i8> %v
80 define <vscale x 1 x i8> @vsll_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
81 ; CHECK-LABEL: vsll_vi_nxv1i8_unmasked:
83 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
84 ; CHECK-NEXT: vsll.vi v8, v8, 3
86 %v = call <vscale x 1 x i8> @llvm.vp.shl.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 3), <vscale x 1 x i1> splat (i1 true), i32 %evl)
87 ret <vscale x 1 x i8> %v
90 declare <vscale x 2 x i8> @llvm.vp.shl.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
92 define <vscale x 2 x i8> @vsll_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
93 ; CHECK-LABEL: vsll_vv_nxv2i8:
95 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
96 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
98 %v = call <vscale x 2 x i8> @llvm.vp.shl.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
99 ret <vscale x 2 x i8> %v
102 define <vscale x 2 x i8> @vsll_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
103 ; CHECK-LABEL: vsll_vv_nxv2i8_unmasked:
105 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
106 ; CHECK-NEXT: vsll.vv v8, v8, v9
108 %v = call <vscale x 2 x i8> @llvm.vp.shl.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
109 ret <vscale x 2 x i8> %v
112 define <vscale x 2 x i8> @vsll_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
113 ; CHECK-LABEL: vsll_vx_nxv2i8:
115 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
116 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
118 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
119 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
120 %v = call <vscale x 2 x i8> @llvm.vp.shl.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
121 ret <vscale x 2 x i8> %v
124 define <vscale x 2 x i8> @vsll_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
125 ; CHECK-LABEL: vsll_vx_nxv2i8_unmasked:
127 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
128 ; CHECK-NEXT: vsll.vx v8, v8, a0
130 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
131 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
132 %v = call <vscale x 2 x i8> @llvm.vp.shl.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
133 ret <vscale x 2 x i8> %v
136 define <vscale x 2 x i8> @vsll_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
137 ; CHECK-LABEL: vsll_vi_nxv2i8:
139 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
140 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
142 %v = call <vscale x 2 x i8> @llvm.vp.shl.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 3), <vscale x 2 x i1> %m, i32 %evl)
143 ret <vscale x 2 x i8> %v
146 define <vscale x 2 x i8> @vsll_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
147 ; CHECK-LABEL: vsll_vi_nxv2i8_unmasked:
149 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
150 ; CHECK-NEXT: vsll.vi v8, v8, 3
152 %v = call <vscale x 2 x i8> @llvm.vp.shl.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 3), <vscale x 2 x i1> splat (i1 true), i32 %evl)
153 ret <vscale x 2 x i8> %v
156 declare <vscale x 4 x i8> @llvm.vp.shl.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
158 define <vscale x 4 x i8> @vsll_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
159 ; CHECK-LABEL: vsll_vv_nxv4i8:
161 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
162 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
164 %v = call <vscale x 4 x i8> @llvm.vp.shl.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
165 ret <vscale x 4 x i8> %v
168 define <vscale x 4 x i8> @vsll_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
169 ; CHECK-LABEL: vsll_vv_nxv4i8_unmasked:
171 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
172 ; CHECK-NEXT: vsll.vv v8, v8, v9
174 %v = call <vscale x 4 x i8> @llvm.vp.shl.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
175 ret <vscale x 4 x i8> %v
178 define <vscale x 4 x i8> @vsll_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
179 ; CHECK-LABEL: vsll_vx_nxv4i8:
181 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
182 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
184 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
185 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
186 %v = call <vscale x 4 x i8> @llvm.vp.shl.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
187 ret <vscale x 4 x i8> %v
190 define <vscale x 4 x i8> @vsll_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
191 ; CHECK-LABEL: vsll_vx_nxv4i8_unmasked:
193 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
194 ; CHECK-NEXT: vsll.vx v8, v8, a0
196 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
197 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
198 %v = call <vscale x 4 x i8> @llvm.vp.shl.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
199 ret <vscale x 4 x i8> %v
202 define <vscale x 4 x i8> @vsll_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
203 ; CHECK-LABEL: vsll_vi_nxv4i8:
205 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
206 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
208 %v = call <vscale x 4 x i8> @llvm.vp.shl.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 3), <vscale x 4 x i1> %m, i32 %evl)
209 ret <vscale x 4 x i8> %v
212 define <vscale x 4 x i8> @vsll_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
213 ; CHECK-LABEL: vsll_vi_nxv4i8_unmasked:
215 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
216 ; CHECK-NEXT: vsll.vi v8, v8, 3
218 %v = call <vscale x 4 x i8> @llvm.vp.shl.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 3), <vscale x 4 x i1> splat (i1 true), i32 %evl)
219 ret <vscale x 4 x i8> %v
222 declare <vscale x 5 x i8> @llvm.vp.shl.nxv5i8(<vscale x 5 x i8>, <vscale x 5 x i8>, <vscale x 5 x i1>, i32)
224 define <vscale x 5 x i8> @vsll_vv_nxv5i8(<vscale x 5 x i8> %va, <vscale x 5 x i8> %b, <vscale x 5 x i1> %m, i32 zeroext %evl) {
225 ; CHECK-LABEL: vsll_vv_nxv5i8:
227 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
228 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
230 %v = call <vscale x 5 x i8> @llvm.vp.shl.nxv5i8(<vscale x 5 x i8> %va, <vscale x 5 x i8> %b, <vscale x 5 x i1> %m, i32 %evl)
231 ret <vscale x 5 x i8> %v
234 declare <vscale x 8 x i8> @llvm.vp.shl.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
236 define <vscale x 8 x i8> @vsll_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
237 ; CHECK-LABEL: vsll_vv_nxv8i8:
239 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
240 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
242 %v = call <vscale x 8 x i8> @llvm.vp.shl.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
243 ret <vscale x 8 x i8> %v
246 define <vscale x 8 x i8> @vsll_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
247 ; CHECK-LABEL: vsll_vv_nxv8i8_unmasked:
249 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
250 ; CHECK-NEXT: vsll.vv v8, v8, v9
252 %v = call <vscale x 8 x i8> @llvm.vp.shl.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
253 ret <vscale x 8 x i8> %v
256 define <vscale x 8 x i8> @vsll_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
257 ; CHECK-LABEL: vsll_vx_nxv8i8:
259 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
260 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
262 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
263 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
264 %v = call <vscale x 8 x i8> @llvm.vp.shl.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
265 ret <vscale x 8 x i8> %v
268 define <vscale x 8 x i8> @vsll_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
269 ; CHECK-LABEL: vsll_vx_nxv8i8_unmasked:
271 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
272 ; CHECK-NEXT: vsll.vx v8, v8, a0
274 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
275 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
276 %v = call <vscale x 8 x i8> @llvm.vp.shl.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
277 ret <vscale x 8 x i8> %v
280 define <vscale x 8 x i8> @vsll_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
281 ; CHECK-LABEL: vsll_vi_nxv8i8:
283 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
284 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
286 %v = call <vscale x 8 x i8> @llvm.vp.shl.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 3), <vscale x 8 x i1> %m, i32 %evl)
287 ret <vscale x 8 x i8> %v
290 define <vscale x 8 x i8> @vsll_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
291 ; CHECK-LABEL: vsll_vi_nxv8i8_unmasked:
293 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
294 ; CHECK-NEXT: vsll.vi v8, v8, 3
296 %v = call <vscale x 8 x i8> @llvm.vp.shl.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 3), <vscale x 8 x i1> splat (i1 true), i32 %evl)
297 ret <vscale x 8 x i8> %v
300 declare <vscale x 16 x i8> @llvm.vp.shl.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
302 define <vscale x 16 x i8> @vsll_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
303 ; CHECK-LABEL: vsll_vv_nxv16i8:
305 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
306 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
308 %v = call <vscale x 16 x i8> @llvm.vp.shl.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
309 ret <vscale x 16 x i8> %v
312 define <vscale x 16 x i8> @vsll_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
313 ; CHECK-LABEL: vsll_vv_nxv16i8_unmasked:
315 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
316 ; CHECK-NEXT: vsll.vv v8, v8, v10
318 %v = call <vscale x 16 x i8> @llvm.vp.shl.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
319 ret <vscale x 16 x i8> %v
322 define <vscale x 16 x i8> @vsll_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
323 ; CHECK-LABEL: vsll_vx_nxv16i8:
325 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
326 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
328 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
329 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
330 %v = call <vscale x 16 x i8> @llvm.vp.shl.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
331 ret <vscale x 16 x i8> %v
334 define <vscale x 16 x i8> @vsll_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
335 ; CHECK-LABEL: vsll_vx_nxv16i8_unmasked:
337 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
338 ; CHECK-NEXT: vsll.vx v8, v8, a0
340 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
341 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
342 %v = call <vscale x 16 x i8> @llvm.vp.shl.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
343 ret <vscale x 16 x i8> %v
346 define <vscale x 16 x i8> @vsll_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
347 ; CHECK-LABEL: vsll_vi_nxv16i8:
349 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
350 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
352 %v = call <vscale x 16 x i8> @llvm.vp.shl.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 3), <vscale x 16 x i1> %m, i32 %evl)
353 ret <vscale x 16 x i8> %v
356 define <vscale x 16 x i8> @vsll_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
357 ; CHECK-LABEL: vsll_vi_nxv16i8_unmasked:
359 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
360 ; CHECK-NEXT: vsll.vi v8, v8, 3
362 %v = call <vscale x 16 x i8> @llvm.vp.shl.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 3), <vscale x 16 x i1> splat (i1 true), i32 %evl)
363 ret <vscale x 16 x i8> %v
366 declare <vscale x 32 x i8> @llvm.vp.shl.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
368 define <vscale x 32 x i8> @vsll_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
369 ; CHECK-LABEL: vsll_vv_nxv32i8:
371 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
372 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
374 %v = call <vscale x 32 x i8> @llvm.vp.shl.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
375 ret <vscale x 32 x i8> %v
378 define <vscale x 32 x i8> @vsll_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
379 ; CHECK-LABEL: vsll_vv_nxv32i8_unmasked:
381 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
382 ; CHECK-NEXT: vsll.vv v8, v8, v12
384 %v = call <vscale x 32 x i8> @llvm.vp.shl.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
385 ret <vscale x 32 x i8> %v
388 define <vscale x 32 x i8> @vsll_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
389 ; CHECK-LABEL: vsll_vx_nxv32i8:
391 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
392 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
394 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
395 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
396 %v = call <vscale x 32 x i8> @llvm.vp.shl.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
397 ret <vscale x 32 x i8> %v
400 define <vscale x 32 x i8> @vsll_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
401 ; CHECK-LABEL: vsll_vx_nxv32i8_unmasked:
403 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
404 ; CHECK-NEXT: vsll.vx v8, v8, a0
406 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
407 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
408 %v = call <vscale x 32 x i8> @llvm.vp.shl.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
409 ret <vscale x 32 x i8> %v
412 define <vscale x 32 x i8> @vsll_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
413 ; CHECK-LABEL: vsll_vi_nxv32i8:
415 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
416 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
418 %v = call <vscale x 32 x i8> @llvm.vp.shl.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 3), <vscale x 32 x i1> %m, i32 %evl)
419 ret <vscale x 32 x i8> %v
422 define <vscale x 32 x i8> @vsll_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
423 ; CHECK-LABEL: vsll_vi_nxv32i8_unmasked:
425 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
426 ; CHECK-NEXT: vsll.vi v8, v8, 3
428 %v = call <vscale x 32 x i8> @llvm.vp.shl.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 3), <vscale x 32 x i1> splat (i1 true), i32 %evl)
429 ret <vscale x 32 x i8> %v
432 declare <vscale x 64 x i8> @llvm.vp.shl.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
434 define <vscale x 64 x i8> @vsll_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
435 ; CHECK-LABEL: vsll_vv_nxv64i8:
437 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
438 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
440 %v = call <vscale x 64 x i8> @llvm.vp.shl.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
441 ret <vscale x 64 x i8> %v
444 define <vscale x 64 x i8> @vsll_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
445 ; CHECK-LABEL: vsll_vv_nxv64i8_unmasked:
447 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
448 ; CHECK-NEXT: vsll.vv v8, v8, v16
450 %v = call <vscale x 64 x i8> @llvm.vp.shl.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)
451 ret <vscale x 64 x i8> %v
454 define <vscale x 64 x i8> @vsll_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
455 ; CHECK-LABEL: vsll_vx_nxv64i8:
457 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
458 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
460 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
461 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
462 %v = call <vscale x 64 x i8> @llvm.vp.shl.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
463 ret <vscale x 64 x i8> %v
466 define <vscale x 64 x i8> @vsll_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
467 ; CHECK-LABEL: vsll_vx_nxv64i8_unmasked:
469 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
470 ; CHECK-NEXT: vsll.vx v8, v8, a0
472 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
473 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
474 %v = call <vscale x 64 x i8> @llvm.vp.shl.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
475 ret <vscale x 64 x i8> %v
478 define <vscale x 64 x i8> @vsll_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
479 ; CHECK-LABEL: vsll_vi_nxv64i8:
481 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
482 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
484 %v = call <vscale x 64 x i8> @llvm.vp.shl.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 3), <vscale x 64 x i1> %m, i32 %evl)
485 ret <vscale x 64 x i8> %v
488 define <vscale x 64 x i8> @vsll_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
489 ; CHECK-LABEL: vsll_vi_nxv64i8_unmasked:
491 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
492 ; CHECK-NEXT: vsll.vi v8, v8, 3
494 %v = call <vscale x 64 x i8> @llvm.vp.shl.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 3), <vscale x 64 x i1> splat (i1 true), i32 %evl)
495 ret <vscale x 64 x i8> %v
498 declare <vscale x 1 x i16> @llvm.vp.shl.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
500 define <vscale x 1 x i16> @vsll_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
501 ; CHECK-LABEL: vsll_vv_nxv1i16:
503 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
504 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
506 %v = call <vscale x 1 x i16> @llvm.vp.shl.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
507 ret <vscale x 1 x i16> %v
510 define <vscale x 1 x i16> @vsll_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
511 ; CHECK-LABEL: vsll_vv_nxv1i16_unmasked:
513 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
514 ; CHECK-NEXT: vsll.vv v8, v8, v9
516 %v = call <vscale x 1 x i16> @llvm.vp.shl.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
517 ret <vscale x 1 x i16> %v
520 define <vscale x 1 x i16> @vsll_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
521 ; CHECK-LABEL: vsll_vx_nxv1i16:
523 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
524 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
526 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
527 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
528 %v = call <vscale x 1 x i16> @llvm.vp.shl.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
529 ret <vscale x 1 x i16> %v
532 define <vscale x 1 x i16> @vsll_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
533 ; CHECK-LABEL: vsll_vx_nxv1i16_unmasked:
535 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
536 ; CHECK-NEXT: vsll.vx v8, v8, a0
538 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
539 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
540 %v = call <vscale x 1 x i16> @llvm.vp.shl.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
541 ret <vscale x 1 x i16> %v
544 define <vscale x 1 x i16> @vsll_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
545 ; CHECK-LABEL: vsll_vi_nxv1i16:
547 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
548 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
550 %v = call <vscale x 1 x i16> @llvm.vp.shl.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 3), <vscale x 1 x i1> %m, i32 %evl)
551 ret <vscale x 1 x i16> %v
554 define <vscale x 1 x i16> @vsll_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
555 ; CHECK-LABEL: vsll_vi_nxv1i16_unmasked:
557 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
558 ; CHECK-NEXT: vsll.vi v8, v8, 3
560 %v = call <vscale x 1 x i16> @llvm.vp.shl.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 3), <vscale x 1 x i1> splat (i1 true), i32 %evl)
561 ret <vscale x 1 x i16> %v
564 declare <vscale x 2 x i16> @llvm.vp.shl.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
566 define <vscale x 2 x i16> @vsll_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
567 ; CHECK-LABEL: vsll_vv_nxv2i16:
569 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
570 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
572 %v = call <vscale x 2 x i16> @llvm.vp.shl.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
573 ret <vscale x 2 x i16> %v
576 define <vscale x 2 x i16> @vsll_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
577 ; CHECK-LABEL: vsll_vv_nxv2i16_unmasked:
579 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
580 ; CHECK-NEXT: vsll.vv v8, v8, v9
582 %v = call <vscale x 2 x i16> @llvm.vp.shl.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
583 ret <vscale x 2 x i16> %v
586 define <vscale x 2 x i16> @vsll_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
587 ; CHECK-LABEL: vsll_vx_nxv2i16:
589 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
590 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
592 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
593 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
594 %v = call <vscale x 2 x i16> @llvm.vp.shl.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
595 ret <vscale x 2 x i16> %v
598 define <vscale x 2 x i16> @vsll_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
599 ; CHECK-LABEL: vsll_vx_nxv2i16_unmasked:
601 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
602 ; CHECK-NEXT: vsll.vx v8, v8, a0
604 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
605 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
606 %v = call <vscale x 2 x i16> @llvm.vp.shl.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
607 ret <vscale x 2 x i16> %v
610 define <vscale x 2 x i16> @vsll_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
611 ; CHECK-LABEL: vsll_vi_nxv2i16:
613 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
614 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
616 %v = call <vscale x 2 x i16> @llvm.vp.shl.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 3), <vscale x 2 x i1> %m, i32 %evl)
617 ret <vscale x 2 x i16> %v
620 define <vscale x 2 x i16> @vsll_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
621 ; CHECK-LABEL: vsll_vi_nxv2i16_unmasked:
623 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
624 ; CHECK-NEXT: vsll.vi v8, v8, 3
626 %v = call <vscale x 2 x i16> @llvm.vp.shl.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 3), <vscale x 2 x i1> splat (i1 true), i32 %evl)
627 ret <vscale x 2 x i16> %v
630 declare <vscale x 4 x i16> @llvm.vp.shl.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
632 define <vscale x 4 x i16> @vsll_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
633 ; CHECK-LABEL: vsll_vv_nxv4i16:
635 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
636 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
638 %v = call <vscale x 4 x i16> @llvm.vp.shl.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
639 ret <vscale x 4 x i16> %v
642 define <vscale x 4 x i16> @vsll_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
643 ; CHECK-LABEL: vsll_vv_nxv4i16_unmasked:
645 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
646 ; CHECK-NEXT: vsll.vv v8, v8, v9
648 %v = call <vscale x 4 x i16> @llvm.vp.shl.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
649 ret <vscale x 4 x i16> %v
652 define <vscale x 4 x i16> @vsll_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
653 ; CHECK-LABEL: vsll_vx_nxv4i16:
655 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
656 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
658 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
659 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
660 %v = call <vscale x 4 x i16> @llvm.vp.shl.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
661 ret <vscale x 4 x i16> %v
664 define <vscale x 4 x i16> @vsll_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
665 ; CHECK-LABEL: vsll_vx_nxv4i16_unmasked:
667 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
668 ; CHECK-NEXT: vsll.vx v8, v8, a0
670 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
671 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
672 %v = call <vscale x 4 x i16> @llvm.vp.shl.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
673 ret <vscale x 4 x i16> %v
676 define <vscale x 4 x i16> @vsll_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
677 ; CHECK-LABEL: vsll_vi_nxv4i16:
679 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
680 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
682 %v = call <vscale x 4 x i16> @llvm.vp.shl.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 3), <vscale x 4 x i1> %m, i32 %evl)
683 ret <vscale x 4 x i16> %v
686 define <vscale x 4 x i16> @vsll_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
687 ; CHECK-LABEL: vsll_vi_nxv4i16_unmasked:
689 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
690 ; CHECK-NEXT: vsll.vi v8, v8, 3
692 %v = call <vscale x 4 x i16> @llvm.vp.shl.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 3), <vscale x 4 x i1> splat (i1 true), i32 %evl)
693 ret <vscale x 4 x i16> %v
696 declare <vscale x 8 x i16> @llvm.vp.shl.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
698 define <vscale x 8 x i16> @vsll_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
699 ; CHECK-LABEL: vsll_vv_nxv8i16:
701 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
702 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
704 %v = call <vscale x 8 x i16> @llvm.vp.shl.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
705 ret <vscale x 8 x i16> %v
708 define <vscale x 8 x i16> @vsll_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
709 ; CHECK-LABEL: vsll_vv_nxv8i16_unmasked:
711 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
712 ; CHECK-NEXT: vsll.vv v8, v8, v10
714 %v = call <vscale x 8 x i16> @llvm.vp.shl.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
715 ret <vscale x 8 x i16> %v
718 define <vscale x 8 x i16> @vsll_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
719 ; CHECK-LABEL: vsll_vx_nxv8i16:
721 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
722 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
724 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
725 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
726 %v = call <vscale x 8 x i16> @llvm.vp.shl.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
727 ret <vscale x 8 x i16> %v
730 define <vscale x 8 x i16> @vsll_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
731 ; CHECK-LABEL: vsll_vx_nxv8i16_unmasked:
733 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
734 ; CHECK-NEXT: vsll.vx v8, v8, a0
736 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
737 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
738 %v = call <vscale x 8 x i16> @llvm.vp.shl.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
739 ret <vscale x 8 x i16> %v
742 define <vscale x 8 x i16> @vsll_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
743 ; CHECK-LABEL: vsll_vi_nxv8i16:
745 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
746 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
748 %v = call <vscale x 8 x i16> @llvm.vp.shl.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 3), <vscale x 8 x i1> %m, i32 %evl)
749 ret <vscale x 8 x i16> %v
752 define <vscale x 8 x i16> @vsll_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
753 ; CHECK-LABEL: vsll_vi_nxv8i16_unmasked:
755 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
756 ; CHECK-NEXT: vsll.vi v8, v8, 3
758 %v = call <vscale x 8 x i16> @llvm.vp.shl.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 3), <vscale x 8 x i1> splat (i1 true), i32 %evl)
759 ret <vscale x 8 x i16> %v
762 declare <vscale x 16 x i16> @llvm.vp.shl.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
764 define <vscale x 16 x i16> @vsll_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
765 ; CHECK-LABEL: vsll_vv_nxv16i16:
767 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
768 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
770 %v = call <vscale x 16 x i16> @llvm.vp.shl.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
771 ret <vscale x 16 x i16> %v
774 define <vscale x 16 x i16> @vsll_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
775 ; CHECK-LABEL: vsll_vv_nxv16i16_unmasked:
777 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
778 ; CHECK-NEXT: vsll.vv v8, v8, v12
780 %v = call <vscale x 16 x i16> @llvm.vp.shl.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
781 ret <vscale x 16 x i16> %v
784 define <vscale x 16 x i16> @vsll_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
785 ; CHECK-LABEL: vsll_vx_nxv16i16:
787 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
788 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
790 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
791 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
792 %v = call <vscale x 16 x i16> @llvm.vp.shl.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
793 ret <vscale x 16 x i16> %v
796 define <vscale x 16 x i16> @vsll_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
797 ; CHECK-LABEL: vsll_vx_nxv16i16_unmasked:
799 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
800 ; CHECK-NEXT: vsll.vx v8, v8, a0
802 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
803 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
804 %v = call <vscale x 16 x i16> @llvm.vp.shl.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
805 ret <vscale x 16 x i16> %v
808 define <vscale x 16 x i16> @vsll_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
809 ; CHECK-LABEL: vsll_vi_nxv16i16:
811 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
812 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
814 %v = call <vscale x 16 x i16> @llvm.vp.shl.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 3), <vscale x 16 x i1> %m, i32 %evl)
815 ret <vscale x 16 x i16> %v
818 define <vscale x 16 x i16> @vsll_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
819 ; CHECK-LABEL: vsll_vi_nxv16i16_unmasked:
821 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
822 ; CHECK-NEXT: vsll.vi v8, v8, 3
824 %v = call <vscale x 16 x i16> @llvm.vp.shl.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 3), <vscale x 16 x i1> splat (i1 true), i32 %evl)
825 ret <vscale x 16 x i16> %v
828 declare <vscale x 32 x i16> @llvm.vp.shl.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
830 define <vscale x 32 x i16> @vsll_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
831 ; CHECK-LABEL: vsll_vv_nxv32i16:
833 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
834 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
836 %v = call <vscale x 32 x i16> @llvm.vp.shl.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
837 ret <vscale x 32 x i16> %v
840 define <vscale x 32 x i16> @vsll_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
841 ; CHECK-LABEL: vsll_vv_nxv32i16_unmasked:
843 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
844 ; CHECK-NEXT: vsll.vv v8, v8, v16
846 %v = call <vscale x 32 x i16> @llvm.vp.shl.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
847 ret <vscale x 32 x i16> %v
850 define <vscale x 32 x i16> @vsll_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
851 ; CHECK-LABEL: vsll_vx_nxv32i16:
853 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
854 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
856 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
857 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
858 %v = call <vscale x 32 x i16> @llvm.vp.shl.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
859 ret <vscale x 32 x i16> %v
862 define <vscale x 32 x i16> @vsll_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
863 ; CHECK-LABEL: vsll_vx_nxv32i16_unmasked:
865 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
866 ; CHECK-NEXT: vsll.vx v8, v8, a0
868 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
869 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
870 %v = call <vscale x 32 x i16> @llvm.vp.shl.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
871 ret <vscale x 32 x i16> %v
874 define <vscale x 32 x i16> @vsll_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
875 ; CHECK-LABEL: vsll_vi_nxv32i16:
877 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
878 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
880 %v = call <vscale x 32 x i16> @llvm.vp.shl.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 3), <vscale x 32 x i1> %m, i32 %evl)
881 ret <vscale x 32 x i16> %v
884 define <vscale x 32 x i16> @vsll_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
885 ; CHECK-LABEL: vsll_vi_nxv32i16_unmasked:
887 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
888 ; CHECK-NEXT: vsll.vi v8, v8, 3
890 %v = call <vscale x 32 x i16> @llvm.vp.shl.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 3), <vscale x 32 x i1> splat (i1 true), i32 %evl)
891 ret <vscale x 32 x i16> %v
894 declare <vscale x 1 x i32> @llvm.vp.shl.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
896 define <vscale x 1 x i32> @vsll_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
897 ; CHECK-LABEL: vsll_vv_nxv1i32:
899 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
900 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
902 %v = call <vscale x 1 x i32> @llvm.vp.shl.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
903 ret <vscale x 1 x i32> %v
906 define <vscale x 1 x i32> @vsll_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
907 ; CHECK-LABEL: vsll_vv_nxv1i32_unmasked:
909 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
910 ; CHECK-NEXT: vsll.vv v8, v8, v9
912 %v = call <vscale x 1 x i32> @llvm.vp.shl.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
913 ret <vscale x 1 x i32> %v
916 define <vscale x 1 x i32> @vsll_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
917 ; CHECK-LABEL: vsll_vx_nxv1i32:
919 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
920 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
922 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
923 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
924 %v = call <vscale x 1 x i32> @llvm.vp.shl.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
925 ret <vscale x 1 x i32> %v
928 define <vscale x 1 x i32> @vsll_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
929 ; CHECK-LABEL: vsll_vx_nxv1i32_unmasked:
931 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
932 ; CHECK-NEXT: vsll.vx v8, v8, a0
934 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
935 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
936 %v = call <vscale x 1 x i32> @llvm.vp.shl.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
937 ret <vscale x 1 x i32> %v
940 define <vscale x 1 x i32> @vsll_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
941 ; CHECK-LABEL: vsll_vi_nxv1i32:
943 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
944 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
946 %v = call <vscale x 1 x i32> @llvm.vp.shl.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 3), <vscale x 1 x i1> %m, i32 %evl)
947 ret <vscale x 1 x i32> %v
950 define <vscale x 1 x i32> @vsll_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
951 ; CHECK-LABEL: vsll_vi_nxv1i32_unmasked:
953 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
954 ; CHECK-NEXT: vsll.vi v8, v8, 3
956 %v = call <vscale x 1 x i32> @llvm.vp.shl.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 3), <vscale x 1 x i1> splat (i1 true), i32 %evl)
957 ret <vscale x 1 x i32> %v
960 declare <vscale x 2 x i32> @llvm.vp.shl.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
962 define <vscale x 2 x i32> @vsll_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
963 ; CHECK-LABEL: vsll_vv_nxv2i32:
965 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
966 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
968 %v = call <vscale x 2 x i32> @llvm.vp.shl.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
969 ret <vscale x 2 x i32> %v
972 define <vscale x 2 x i32> @vsll_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
973 ; CHECK-LABEL: vsll_vv_nxv2i32_unmasked:
975 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
976 ; CHECK-NEXT: vsll.vv v8, v8, v9
978 %v = call <vscale x 2 x i32> @llvm.vp.shl.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
979 ret <vscale x 2 x i32> %v
982 define <vscale x 2 x i32> @vsll_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
983 ; CHECK-LABEL: vsll_vx_nxv2i32:
985 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
986 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
988 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
989 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
990 %v = call <vscale x 2 x i32> @llvm.vp.shl.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
991 ret <vscale x 2 x i32> %v
994 define <vscale x 2 x i32> @vsll_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
995 ; CHECK-LABEL: vsll_vx_nxv2i32_unmasked:
997 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
998 ; CHECK-NEXT: vsll.vx v8, v8, a0
1000 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1001 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1002 %v = call <vscale x 2 x i32> @llvm.vp.shl.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1003 ret <vscale x 2 x i32> %v
1006 define <vscale x 2 x i32> @vsll_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1007 ; CHECK-LABEL: vsll_vi_nxv2i32:
1009 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1010 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1012 %v = call <vscale x 2 x i32> @llvm.vp.shl.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 3), <vscale x 2 x i1> %m, i32 %evl)
1013 ret <vscale x 2 x i32> %v
1016 define <vscale x 2 x i32> @vsll_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1017 ; CHECK-LABEL: vsll_vi_nxv2i32_unmasked:
1019 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1020 ; CHECK-NEXT: vsll.vi v8, v8, 3
1022 %v = call <vscale x 2 x i32> @llvm.vp.shl.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 3), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1023 ret <vscale x 2 x i32> %v
1026 declare <vscale x 4 x i32> @llvm.vp.shl.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1028 define <vscale x 4 x i32> @vsll_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1029 ; CHECK-LABEL: vsll_vv_nxv4i32:
1031 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1032 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
1034 %v = call <vscale x 4 x i32> @llvm.vp.shl.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
1035 ret <vscale x 4 x i32> %v
1038 define <vscale x 4 x i32> @vsll_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
1039 ; CHECK-LABEL: vsll_vv_nxv4i32_unmasked:
1041 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1042 ; CHECK-NEXT: vsll.vv v8, v8, v10
1044 %v = call <vscale x 4 x i32> @llvm.vp.shl.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1045 ret <vscale x 4 x i32> %v
1048 define <vscale x 4 x i32> @vsll_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1049 ; CHECK-LABEL: vsll_vx_nxv4i32:
1051 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1052 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
1054 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1055 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1056 %v = call <vscale x 4 x i32> @llvm.vp.shl.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1057 ret <vscale x 4 x i32> %v
1060 define <vscale x 4 x i32> @vsll_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1061 ; CHECK-LABEL: vsll_vx_nxv4i32_unmasked:
1063 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1064 ; CHECK-NEXT: vsll.vx v8, v8, a0
1066 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1067 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1068 %v = call <vscale x 4 x i32> @llvm.vp.shl.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1069 ret <vscale x 4 x i32> %v
1072 define <vscale x 4 x i32> @vsll_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1073 ; CHECK-LABEL: vsll_vi_nxv4i32:
1075 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1076 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1078 %v = call <vscale x 4 x i32> @llvm.vp.shl.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 3), <vscale x 4 x i1> %m, i32 %evl)
1079 ret <vscale x 4 x i32> %v
1082 define <vscale x 4 x i32> @vsll_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1083 ; CHECK-LABEL: vsll_vi_nxv4i32_unmasked:
1085 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1086 ; CHECK-NEXT: vsll.vi v8, v8, 3
1088 %v = call <vscale x 4 x i32> @llvm.vp.shl.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 3), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1089 ret <vscale x 4 x i32> %v
1092 declare <vscale x 8 x i32> @llvm.vp.shl.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1094 define <vscale x 8 x i32> @vsll_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1095 ; CHECK-LABEL: vsll_vv_nxv8i32:
1097 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1098 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
1100 %v = call <vscale x 8 x i32> @llvm.vp.shl.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
1101 ret <vscale x 8 x i32> %v
1104 define <vscale x 8 x i32> @vsll_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
1105 ; CHECK-LABEL: vsll_vv_nxv8i32_unmasked:
1107 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1108 ; CHECK-NEXT: vsll.vv v8, v8, v12
1110 %v = call <vscale x 8 x i32> @llvm.vp.shl.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1111 ret <vscale x 8 x i32> %v
1114 define <vscale x 8 x i32> @vsll_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1115 ; CHECK-LABEL: vsll_vx_nxv8i32:
1117 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1118 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
1120 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1121 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1122 %v = call <vscale x 8 x i32> @llvm.vp.shl.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1123 ret <vscale x 8 x i32> %v
1126 define <vscale x 8 x i32> @vsll_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1127 ; CHECK-LABEL: vsll_vx_nxv8i32_unmasked:
1129 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1130 ; CHECK-NEXT: vsll.vx v8, v8, a0
1132 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1133 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1134 %v = call <vscale x 8 x i32> @llvm.vp.shl.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1135 ret <vscale x 8 x i32> %v
1138 define <vscale x 8 x i32> @vsll_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1139 ; CHECK-LABEL: vsll_vi_nxv8i32:
1141 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1142 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1144 %v = call <vscale x 8 x i32> @llvm.vp.shl.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 3), <vscale x 8 x i1> %m, i32 %evl)
1145 ret <vscale x 8 x i32> %v
1148 define <vscale x 8 x i32> @vsll_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1149 ; CHECK-LABEL: vsll_vi_nxv8i32_unmasked:
1151 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1152 ; CHECK-NEXT: vsll.vi v8, v8, 3
1154 %v = call <vscale x 8 x i32> @llvm.vp.shl.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 3), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1155 ret <vscale x 8 x i32> %v
1158 declare <vscale x 16 x i32> @llvm.vp.shl.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1160 define <vscale x 16 x i32> @vsll_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1161 ; CHECK-LABEL: vsll_vv_nxv16i32:
1163 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1164 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
1166 %v = call <vscale x 16 x i32> @llvm.vp.shl.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
1167 ret <vscale x 16 x i32> %v
1170 define <vscale x 16 x i32> @vsll_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
1171 ; CHECK-LABEL: vsll_vv_nxv16i32_unmasked:
1173 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1174 ; CHECK-NEXT: vsll.vv v8, v8, v16
1176 %v = call <vscale x 16 x i32> @llvm.vp.shl.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1177 ret <vscale x 16 x i32> %v
1180 define <vscale x 16 x i32> @vsll_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1181 ; CHECK-LABEL: vsll_vx_nxv16i32:
1183 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1184 ; CHECK-NEXT: vsll.vx v8, v8, a0, v0.t
1186 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1187 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1188 %v = call <vscale x 16 x i32> @llvm.vp.shl.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1189 ret <vscale x 16 x i32> %v
1192 define <vscale x 16 x i32> @vsll_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1193 ; CHECK-LABEL: vsll_vx_nxv16i32_unmasked:
1195 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1196 ; CHECK-NEXT: vsll.vx v8, v8, a0
1198 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1199 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1200 %v = call <vscale x 16 x i32> @llvm.vp.shl.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1201 ret <vscale x 16 x i32> %v
1204 define <vscale x 16 x i32> @vsll_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1205 ; CHECK-LABEL: vsll_vi_nxv16i32:
1207 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1208 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1210 %v = call <vscale x 16 x i32> @llvm.vp.shl.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 3), <vscale x 16 x i1> %m, i32 %evl)
1211 ret <vscale x 16 x i32> %v
1214 define <vscale x 16 x i32> @vsll_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1215 ; CHECK-LABEL: vsll_vi_nxv16i32_unmasked:
1217 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1218 ; CHECK-NEXT: vsll.vi v8, v8, 3
1220 %v = call <vscale x 16 x i32> @llvm.vp.shl.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 3), <vscale x 16 x i1> splat (i1 true), i32 %evl)
1221 ret <vscale x 16 x i32> %v
1224 declare <vscale x 1 x i64> @llvm.vp.shl.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1226 define <vscale x 1 x i64> @vsll_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1227 ; CHECK-LABEL: vsll_vv_nxv1i64:
1229 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1230 ; CHECK-NEXT: vsll.vv v8, v8, v9, v0.t
1232 %v = call <vscale x 1 x i64> @llvm.vp.shl.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1233 ret <vscale x 1 x i64> %v
1236 define <vscale x 1 x i64> @vsll_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
1237 ; CHECK-LABEL: vsll_vv_nxv1i64_unmasked:
1239 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1240 ; CHECK-NEXT: vsll.vv v8, v8, v9
1242 %v = call <vscale x 1 x i64> @llvm.vp.shl.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1243 ret <vscale x 1 x i64> %v
1246 define <vscale x 1 x i64> @vsll_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1247 ; RV32-LABEL: vsll_vx_nxv1i64:
1249 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1250 ; RV32-NEXT: vsll.vx v8, v8, a0, v0.t
1253 ; RV64-LABEL: vsll_vx_nxv1i64:
1255 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1256 ; RV64-NEXT: vsll.vx v8, v8, a0, v0.t
1258 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1259 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1260 %v = call <vscale x 1 x i64> @llvm.vp.shl.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1261 ret <vscale x 1 x i64> %v
1264 define <vscale x 1 x i64> @vsll_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1265 ; RV32-LABEL: vsll_vx_nxv1i64_unmasked:
1267 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1268 ; RV32-NEXT: vsll.vx v8, v8, a0
1271 ; RV64-LABEL: vsll_vx_nxv1i64_unmasked:
1273 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1274 ; RV64-NEXT: vsll.vx v8, v8, a0
1276 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1277 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1278 %v = call <vscale x 1 x i64> @llvm.vp.shl.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1279 ret <vscale x 1 x i64> %v
1282 define <vscale x 1 x i64> @vsll_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1283 ; CHECK-LABEL: vsll_vi_nxv1i64:
1285 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1286 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1288 %v = call <vscale x 1 x i64> @llvm.vp.shl.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 3), <vscale x 1 x i1> %m, i32 %evl)
1289 ret <vscale x 1 x i64> %v
1292 define <vscale x 1 x i64> @vsll_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1293 ; CHECK-LABEL: vsll_vi_nxv1i64_unmasked:
1295 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1296 ; CHECK-NEXT: vsll.vi v8, v8, 3
1298 %v = call <vscale x 1 x i64> @llvm.vp.shl.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 3), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1299 ret <vscale x 1 x i64> %v
1302 declare <vscale x 2 x i64> @llvm.vp.shl.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1304 define <vscale x 2 x i64> @vsll_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1305 ; CHECK-LABEL: vsll_vv_nxv2i64:
1307 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1308 ; CHECK-NEXT: vsll.vv v8, v8, v10, v0.t
1310 %v = call <vscale x 2 x i64> @llvm.vp.shl.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1311 ret <vscale x 2 x i64> %v
1314 define <vscale x 2 x i64> @vsll_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1315 ; CHECK-LABEL: vsll_vv_nxv2i64_unmasked:
1317 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1318 ; CHECK-NEXT: vsll.vv v8, v8, v10
1320 %v = call <vscale x 2 x i64> @llvm.vp.shl.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1321 ret <vscale x 2 x i64> %v
1324 define <vscale x 2 x i64> @vsll_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1325 ; RV32-LABEL: vsll_vx_nxv2i64:
1327 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1328 ; RV32-NEXT: vsll.vx v8, v8, a0, v0.t
1331 ; RV64-LABEL: vsll_vx_nxv2i64:
1333 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1334 ; RV64-NEXT: vsll.vx v8, v8, a0, v0.t
1336 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1337 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1338 %v = call <vscale x 2 x i64> @llvm.vp.shl.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1339 ret <vscale x 2 x i64> %v
1342 define <vscale x 2 x i64> @vsll_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1343 ; RV32-LABEL: vsll_vx_nxv2i64_unmasked:
1345 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1346 ; RV32-NEXT: vsll.vx v8, v8, a0
1349 ; RV64-LABEL: vsll_vx_nxv2i64_unmasked:
1351 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1352 ; RV64-NEXT: vsll.vx v8, v8, a0
1354 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1355 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1356 %v = call <vscale x 2 x i64> @llvm.vp.shl.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1357 ret <vscale x 2 x i64> %v
1360 define <vscale x 2 x i64> @vsll_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1361 ; CHECK-LABEL: vsll_vi_nxv2i64:
1363 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1364 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1366 %v = call <vscale x 2 x i64> @llvm.vp.shl.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 3), <vscale x 2 x i1> %m, i32 %evl)
1367 ret <vscale x 2 x i64> %v
1370 define <vscale x 2 x i64> @vsll_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1371 ; CHECK-LABEL: vsll_vi_nxv2i64_unmasked:
1373 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1374 ; CHECK-NEXT: vsll.vi v8, v8, 3
1376 %v = call <vscale x 2 x i64> @llvm.vp.shl.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 3), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1377 ret <vscale x 2 x i64> %v
1380 declare <vscale x 4 x i64> @llvm.vp.shl.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1382 define <vscale x 4 x i64> @vsll_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1383 ; CHECK-LABEL: vsll_vv_nxv4i64:
1385 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1386 ; CHECK-NEXT: vsll.vv v8, v8, v12, v0.t
1388 %v = call <vscale x 4 x i64> @llvm.vp.shl.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1389 ret <vscale x 4 x i64> %v
1392 define <vscale x 4 x i64> @vsll_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1393 ; CHECK-LABEL: vsll_vv_nxv4i64_unmasked:
1395 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1396 ; CHECK-NEXT: vsll.vv v8, v8, v12
1398 %v = call <vscale x 4 x i64> @llvm.vp.shl.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1399 ret <vscale x 4 x i64> %v
1402 define <vscale x 4 x i64> @vsll_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1403 ; RV32-LABEL: vsll_vx_nxv4i64:
1405 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1406 ; RV32-NEXT: vsll.vx v8, v8, a0, v0.t
1409 ; RV64-LABEL: vsll_vx_nxv4i64:
1411 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1412 ; RV64-NEXT: vsll.vx v8, v8, a0, v0.t
1414 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1415 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1416 %v = call <vscale x 4 x i64> @llvm.vp.shl.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1417 ret <vscale x 4 x i64> %v
1420 define <vscale x 4 x i64> @vsll_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1421 ; RV32-LABEL: vsll_vx_nxv4i64_unmasked:
1423 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1424 ; RV32-NEXT: vsll.vx v8, v8, a0
1427 ; RV64-LABEL: vsll_vx_nxv4i64_unmasked:
1429 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1430 ; RV64-NEXT: vsll.vx v8, v8, a0
1432 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1433 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1434 %v = call <vscale x 4 x i64> @llvm.vp.shl.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1435 ret <vscale x 4 x i64> %v
1438 define <vscale x 4 x i64> @vsll_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1439 ; CHECK-LABEL: vsll_vi_nxv4i64:
1441 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1442 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1444 %v = call <vscale x 4 x i64> @llvm.vp.shl.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 3), <vscale x 4 x i1> %m, i32 %evl)
1445 ret <vscale x 4 x i64> %v
1448 define <vscale x 4 x i64> @vsll_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1449 ; CHECK-LABEL: vsll_vi_nxv4i64_unmasked:
1451 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1452 ; CHECK-NEXT: vsll.vi v8, v8, 3
1454 %v = call <vscale x 4 x i64> @llvm.vp.shl.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 3), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1455 ret <vscale x 4 x i64> %v
1458 declare <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1460 define <vscale x 8 x i64> @vsll_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1461 ; CHECK-LABEL: vsll_vv_nxv8i64:
1463 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1464 ; CHECK-NEXT: vsll.vv v8, v8, v16, v0.t
1466 %v = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1467 ret <vscale x 8 x i64> %v
1470 define <vscale x 8 x i64> @vsll_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1471 ; CHECK-LABEL: vsll_vv_nxv8i64_unmasked:
1473 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1474 ; CHECK-NEXT: vsll.vv v8, v8, v16
1476 %v = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1477 ret <vscale x 8 x i64> %v
1480 define <vscale x 8 x i64> @vsll_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1481 ; RV32-LABEL: vsll_vx_nxv8i64:
1483 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1484 ; RV32-NEXT: vsll.vx v8, v8, a0, v0.t
1487 ; RV64-LABEL: vsll_vx_nxv8i64:
1489 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1490 ; RV64-NEXT: vsll.vx v8, v8, a0, v0.t
1492 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1493 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1494 %v = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1495 ret <vscale x 8 x i64> %v
1498 define <vscale x 8 x i64> @vsll_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1499 ; RV32-LABEL: vsll_vx_nxv8i64_unmasked:
1501 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1502 ; RV32-NEXT: vsll.vx v8, v8, a0
1505 ; RV64-LABEL: vsll_vx_nxv8i64_unmasked:
1507 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1508 ; RV64-NEXT: vsll.vx v8, v8, a0
1510 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1511 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1512 %v = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1513 ret <vscale x 8 x i64> %v
1516 define <vscale x 8 x i64> @vsll_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1517 ; CHECK-LABEL: vsll_vi_nxv8i64:
1519 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1520 ; CHECK-NEXT: vsll.vi v8, v8, 3, v0.t
1522 %v = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 3), <vscale x 8 x i1> %m, i32 %evl)
1523 ret <vscale x 8 x i64> %v
1526 define <vscale x 8 x i64> @vsll_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1527 ; CHECK-LABEL: vsll_vi_nxv8i64_unmasked:
1529 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1530 ; CHECK-NEXT: vsll.vi v8, v8, 3
1532 %v = call <vscale x 8 x i64> @llvm.vp.shl.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 3), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1533 ret <vscale x 8 x i64> %v