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.lshr.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
9 define <vscale x 8 x i7> @vsrl_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsrl_vx_nxv8i7:
12 ; CHECK-NEXT: li a2, 127
13 ; CHECK-NEXT: vsetvli a3, zero, e8, m1, ta, ma
14 ; CHECK-NEXT: vmv.v.x v9, a0
15 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
16 ; CHECK-NEXT: vand.vx v8, v8, a2, v0.t
17 ; CHECK-NEXT: vand.vx v9, v9, a2, v0.t
18 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
20 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
21 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
22 %v = call <vscale x 8 x i7> @llvm.vp.lshr.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
23 ret <vscale x 8 x i7> %v
26 declare <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
28 define <vscale x 1 x i8> @vsrl_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
29 ; CHECK-LABEL: vsrl_vv_nxv1i8:
31 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
32 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
34 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
35 ret <vscale x 1 x i8> %v
38 define <vscale x 1 x i8> @vsrl_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
39 ; CHECK-LABEL: vsrl_vv_nxv1i8_unmasked:
41 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
42 ; CHECK-NEXT: vsrl.vv v8, v8, v9
44 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
45 ret <vscale x 1 x i8> %v
48 define <vscale x 1 x i8> @vsrl_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
49 ; CHECK-LABEL: vsrl_vx_nxv1i8:
51 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
52 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
54 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
55 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
56 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
57 ret <vscale x 1 x i8> %v
60 define <vscale x 1 x i8> @vsrl_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
61 ; CHECK-LABEL: vsrl_vx_nxv1i8_unmasked:
63 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
64 ; CHECK-NEXT: vsrl.vx v8, v8, a0
66 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
67 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
68 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
69 ret <vscale x 1 x i8> %v
72 define <vscale x 1 x i8> @vsrl_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
73 ; CHECK-LABEL: vsrl_vi_nxv1i8:
75 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
76 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
78 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 4), <vscale x 1 x i1> %m, i32 %evl)
79 ret <vscale x 1 x i8> %v
82 define <vscale x 1 x i8> @vsrl_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
83 ; CHECK-LABEL: vsrl_vi_nxv1i8_unmasked:
85 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
86 ; CHECK-NEXT: vsrl.vi v8, v8, 4
88 %v = call <vscale x 1 x i8> @llvm.vp.lshr.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
89 ret <vscale x 1 x i8> %v
92 declare <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
94 define <vscale x 2 x i8> @vsrl_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
95 ; CHECK-LABEL: vsrl_vv_nxv2i8:
97 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
98 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
100 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
101 ret <vscale x 2 x i8> %v
104 define <vscale x 2 x i8> @vsrl_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
105 ; CHECK-LABEL: vsrl_vv_nxv2i8_unmasked:
107 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
108 ; CHECK-NEXT: vsrl.vv v8, v8, v9
110 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
111 ret <vscale x 2 x i8> %v
114 define <vscale x 2 x i8> @vsrl_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
115 ; CHECK-LABEL: vsrl_vx_nxv2i8:
117 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
118 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
120 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
121 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
122 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
123 ret <vscale x 2 x i8> %v
126 define <vscale x 2 x i8> @vsrl_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
127 ; CHECK-LABEL: vsrl_vx_nxv2i8_unmasked:
129 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
130 ; CHECK-NEXT: vsrl.vx v8, v8, a0
132 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
133 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
134 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
135 ret <vscale x 2 x i8> %v
138 define <vscale x 2 x i8> @vsrl_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
139 ; CHECK-LABEL: vsrl_vi_nxv2i8:
141 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
142 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
144 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 4), <vscale x 2 x i1> %m, i32 %evl)
145 ret <vscale x 2 x i8> %v
148 define <vscale x 2 x i8> @vsrl_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
149 ; CHECK-LABEL: vsrl_vi_nxv2i8_unmasked:
151 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
152 ; CHECK-NEXT: vsrl.vi v8, v8, 4
154 %v = call <vscale x 2 x i8> @llvm.vp.lshr.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
155 ret <vscale x 2 x i8> %v
158 declare <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
160 define <vscale x 4 x i8> @vsrl_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
161 ; CHECK-LABEL: vsrl_vv_nxv4i8:
163 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
164 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
166 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
167 ret <vscale x 4 x i8> %v
170 define <vscale x 4 x i8> @vsrl_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
171 ; CHECK-LABEL: vsrl_vv_nxv4i8_unmasked:
173 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
174 ; CHECK-NEXT: vsrl.vv v8, v8, v9
176 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
177 ret <vscale x 4 x i8> %v
180 define <vscale x 4 x i8> @vsrl_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
181 ; CHECK-LABEL: vsrl_vx_nxv4i8:
183 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
184 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
186 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
187 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
188 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
189 ret <vscale x 4 x i8> %v
192 define <vscale x 4 x i8> @vsrl_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
193 ; CHECK-LABEL: vsrl_vx_nxv4i8_unmasked:
195 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
196 ; CHECK-NEXT: vsrl.vx v8, v8, a0
198 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
199 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
200 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
201 ret <vscale x 4 x i8> %v
204 define <vscale x 4 x i8> @vsrl_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
205 ; CHECK-LABEL: vsrl_vi_nxv4i8:
207 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
208 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
210 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 4), <vscale x 4 x i1> %m, i32 %evl)
211 ret <vscale x 4 x i8> %v
214 define <vscale x 4 x i8> @vsrl_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
215 ; CHECK-LABEL: vsrl_vi_nxv4i8_unmasked:
217 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
218 ; CHECK-NEXT: vsrl.vi v8, v8, 4
220 %v = call <vscale x 4 x i8> @llvm.vp.lshr.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
221 ret <vscale x 4 x i8> %v
224 declare <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
226 define <vscale x 8 x i8> @vsrl_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
227 ; CHECK-LABEL: vsrl_vv_nxv8i8:
229 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
230 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
232 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
233 ret <vscale x 8 x i8> %v
236 define <vscale x 8 x i8> @vsrl_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
237 ; CHECK-LABEL: vsrl_vv_nxv8i8_unmasked:
239 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
240 ; CHECK-NEXT: vsrl.vv v8, v8, v9
242 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
243 ret <vscale x 8 x i8> %v
246 define <vscale x 8 x i8> @vsrl_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
247 ; CHECK-LABEL: vsrl_vx_nxv8i8:
249 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
250 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
252 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
253 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
254 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
255 ret <vscale x 8 x i8> %v
258 define <vscale x 8 x i8> @vsrl_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
259 ; CHECK-LABEL: vsrl_vx_nxv8i8_unmasked:
261 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
262 ; CHECK-NEXT: vsrl.vx v8, v8, a0
264 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
265 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
266 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
267 ret <vscale x 8 x i8> %v
270 define <vscale x 8 x i8> @vsrl_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
271 ; CHECK-LABEL: vsrl_vi_nxv8i8:
273 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
274 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
276 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 4), <vscale x 8 x i1> %m, i32 %evl)
277 ret <vscale x 8 x i8> %v
280 define <vscale x 8 x i8> @vsrl_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
281 ; CHECK-LABEL: vsrl_vi_nxv8i8_unmasked:
283 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
284 ; CHECK-NEXT: vsrl.vi v8, v8, 4
286 %v = call <vscale x 8 x i8> @llvm.vp.lshr.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
287 ret <vscale x 8 x i8> %v
290 declare <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
292 define <vscale x 16 x i8> @vsrl_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
293 ; CHECK-LABEL: vsrl_vv_nxv16i8:
295 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
296 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
298 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
299 ret <vscale x 16 x i8> %v
302 define <vscale x 16 x i8> @vsrl_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
303 ; CHECK-LABEL: vsrl_vv_nxv16i8_unmasked:
305 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
306 ; CHECK-NEXT: vsrl.vv v8, v8, v10
308 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
309 ret <vscale x 16 x i8> %v
312 define <vscale x 16 x i8> @vsrl_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
313 ; CHECK-LABEL: vsrl_vx_nxv16i8:
315 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
316 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
318 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
319 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
320 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
321 ret <vscale x 16 x i8> %v
324 define <vscale x 16 x i8> @vsrl_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
325 ; CHECK-LABEL: vsrl_vx_nxv16i8_unmasked:
327 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
328 ; CHECK-NEXT: vsrl.vx v8, v8, a0
330 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
331 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
332 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
333 ret <vscale x 16 x i8> %v
336 define <vscale x 16 x i8> @vsrl_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
337 ; CHECK-LABEL: vsrl_vi_nxv16i8:
339 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
340 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
342 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 4), <vscale x 16 x i1> %m, i32 %evl)
343 ret <vscale x 16 x i8> %v
346 define <vscale x 16 x i8> @vsrl_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
347 ; CHECK-LABEL: vsrl_vi_nxv16i8_unmasked:
349 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
350 ; CHECK-NEXT: vsrl.vi v8, v8, 4
352 %v = call <vscale x 16 x i8> @llvm.vp.lshr.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
353 ret <vscale x 16 x i8> %v
356 declare <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
358 define <vscale x 32 x i8> @vsrl_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
359 ; CHECK-LABEL: vsrl_vv_nxv32i8:
361 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
362 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
364 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
365 ret <vscale x 32 x i8> %v
368 define <vscale x 32 x i8> @vsrl_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
369 ; CHECK-LABEL: vsrl_vv_nxv32i8_unmasked:
371 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
372 ; CHECK-NEXT: vsrl.vv v8, v8, v12
374 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
375 ret <vscale x 32 x i8> %v
378 define <vscale x 32 x i8> @vsrl_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
379 ; CHECK-LABEL: vsrl_vx_nxv32i8:
381 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
382 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
384 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
385 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
386 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
387 ret <vscale x 32 x i8> %v
390 define <vscale x 32 x i8> @vsrl_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
391 ; CHECK-LABEL: vsrl_vx_nxv32i8_unmasked:
393 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
394 ; CHECK-NEXT: vsrl.vx v8, v8, a0
396 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
397 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
398 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
399 ret <vscale x 32 x i8> %v
402 define <vscale x 32 x i8> @vsrl_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
403 ; CHECK-LABEL: vsrl_vi_nxv32i8:
405 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
406 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
408 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 4), <vscale x 32 x i1> %m, i32 %evl)
409 ret <vscale x 32 x i8> %v
412 define <vscale x 32 x i8> @vsrl_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
413 ; CHECK-LABEL: vsrl_vi_nxv32i8_unmasked:
415 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
416 ; CHECK-NEXT: vsrl.vi v8, v8, 4
418 %v = call <vscale x 32 x i8> @llvm.vp.lshr.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 4), <vscale x 32 x i1> splat (i1 true), i32 %evl)
419 ret <vscale x 32 x i8> %v
422 declare <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
424 define <vscale x 64 x i8> @vsrl_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
425 ; CHECK-LABEL: vsrl_vv_nxv64i8:
427 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
428 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
430 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
431 ret <vscale x 64 x i8> %v
434 define <vscale x 64 x i8> @vsrl_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
435 ; CHECK-LABEL: vsrl_vv_nxv64i8_unmasked:
437 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
438 ; CHECK-NEXT: vsrl.vv v8, v8, v16
440 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)
441 ret <vscale x 64 x i8> %v
444 define <vscale x 64 x i8> @vsrl_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
445 ; CHECK-LABEL: vsrl_vx_nxv64i8:
447 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
448 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
450 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
451 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
452 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
453 ret <vscale x 64 x i8> %v
456 define <vscale x 64 x i8> @vsrl_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
457 ; CHECK-LABEL: vsrl_vx_nxv64i8_unmasked:
459 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
460 ; CHECK-NEXT: vsrl.vx v8, v8, a0
462 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
463 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
464 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)
465 ret <vscale x 64 x i8> %v
468 define <vscale x 64 x i8> @vsrl_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
469 ; CHECK-LABEL: vsrl_vi_nxv64i8:
471 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
472 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
474 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 4), <vscale x 64 x i1> %m, i32 %evl)
475 ret <vscale x 64 x i8> %v
478 define <vscale x 64 x i8> @vsrl_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
479 ; CHECK-LABEL: vsrl_vi_nxv64i8_unmasked:
481 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
482 ; CHECK-NEXT: vsrl.vi v8, v8, 4
484 %v = call <vscale x 64 x i8> @llvm.vp.lshr.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 4), <vscale x 64 x i1> splat (i1 true), i32 %evl)
485 ret <vscale x 64 x i8> %v
488 declare <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
490 define <vscale x 1 x i16> @vsrl_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
491 ; CHECK-LABEL: vsrl_vv_nxv1i16:
493 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
494 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
496 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
497 ret <vscale x 1 x i16> %v
500 define <vscale x 1 x i16> @vsrl_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
501 ; CHECK-LABEL: vsrl_vv_nxv1i16_unmasked:
503 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
504 ; CHECK-NEXT: vsrl.vv v8, v8, v9
506 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
507 ret <vscale x 1 x i16> %v
510 define <vscale x 1 x i16> @vsrl_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
511 ; CHECK-LABEL: vsrl_vx_nxv1i16:
513 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
514 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
516 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
517 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
518 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
519 ret <vscale x 1 x i16> %v
522 define <vscale x 1 x i16> @vsrl_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
523 ; CHECK-LABEL: vsrl_vx_nxv1i16_unmasked:
525 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
526 ; CHECK-NEXT: vsrl.vx v8, v8, a0
528 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
529 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
530 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
531 ret <vscale x 1 x i16> %v
534 define <vscale x 1 x i16> @vsrl_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
535 ; CHECK-LABEL: vsrl_vi_nxv1i16:
537 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
538 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
540 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 4), <vscale x 1 x i1> %m, i32 %evl)
541 ret <vscale x 1 x i16> %v
544 define <vscale x 1 x i16> @vsrl_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
545 ; CHECK-LABEL: vsrl_vi_nxv1i16_unmasked:
547 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
548 ; CHECK-NEXT: vsrl.vi v8, v8, 4
550 %v = call <vscale x 1 x i16> @llvm.vp.lshr.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
551 ret <vscale x 1 x i16> %v
554 declare <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
556 define <vscale x 2 x i16> @vsrl_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
557 ; CHECK-LABEL: vsrl_vv_nxv2i16:
559 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
560 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
562 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
563 ret <vscale x 2 x i16> %v
566 define <vscale x 2 x i16> @vsrl_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
567 ; CHECK-LABEL: vsrl_vv_nxv2i16_unmasked:
569 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
570 ; CHECK-NEXT: vsrl.vv v8, v8, v9
572 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
573 ret <vscale x 2 x i16> %v
576 define <vscale x 2 x i16> @vsrl_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
577 ; CHECK-LABEL: vsrl_vx_nxv2i16:
579 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
580 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
582 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
583 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
584 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
585 ret <vscale x 2 x i16> %v
588 define <vscale x 2 x i16> @vsrl_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
589 ; CHECK-LABEL: vsrl_vx_nxv2i16_unmasked:
591 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
592 ; CHECK-NEXT: vsrl.vx v8, v8, a0
594 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
595 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
596 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
597 ret <vscale x 2 x i16> %v
600 define <vscale x 2 x i16> @vsrl_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
601 ; CHECK-LABEL: vsrl_vi_nxv2i16:
603 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
604 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
606 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 4), <vscale x 2 x i1> %m, i32 %evl)
607 ret <vscale x 2 x i16> %v
610 define <vscale x 2 x i16> @vsrl_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
611 ; CHECK-LABEL: vsrl_vi_nxv2i16_unmasked:
613 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
614 ; CHECK-NEXT: vsrl.vi v8, v8, 4
616 %v = call <vscale x 2 x i16> @llvm.vp.lshr.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
617 ret <vscale x 2 x i16> %v
620 declare <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
622 define <vscale x 4 x i16> @vsrl_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
623 ; CHECK-LABEL: vsrl_vv_nxv4i16:
625 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
626 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
628 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
629 ret <vscale x 4 x i16> %v
632 define <vscale x 4 x i16> @vsrl_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
633 ; CHECK-LABEL: vsrl_vv_nxv4i16_unmasked:
635 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
636 ; CHECK-NEXT: vsrl.vv v8, v8, v9
638 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
639 ret <vscale x 4 x i16> %v
642 define <vscale x 4 x i16> @vsrl_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
643 ; CHECK-LABEL: vsrl_vx_nxv4i16:
645 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
646 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
648 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
649 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
650 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
651 ret <vscale x 4 x i16> %v
654 define <vscale x 4 x i16> @vsrl_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
655 ; CHECK-LABEL: vsrl_vx_nxv4i16_unmasked:
657 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
658 ; CHECK-NEXT: vsrl.vx v8, v8, a0
660 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
661 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
662 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
663 ret <vscale x 4 x i16> %v
666 define <vscale x 4 x i16> @vsrl_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
667 ; CHECK-LABEL: vsrl_vi_nxv4i16:
669 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
670 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
672 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 4), <vscale x 4 x i1> %m, i32 %evl)
673 ret <vscale x 4 x i16> %v
676 define <vscale x 4 x i16> @vsrl_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
677 ; CHECK-LABEL: vsrl_vi_nxv4i16_unmasked:
679 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
680 ; CHECK-NEXT: vsrl.vi v8, v8, 4
682 %v = call <vscale x 4 x i16> @llvm.vp.lshr.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
683 ret <vscale x 4 x i16> %v
686 declare <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
688 define <vscale x 8 x i16> @vsrl_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
689 ; CHECK-LABEL: vsrl_vv_nxv8i16:
691 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
692 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
694 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
695 ret <vscale x 8 x i16> %v
698 define <vscale x 8 x i16> @vsrl_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
699 ; CHECK-LABEL: vsrl_vv_nxv8i16_unmasked:
701 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
702 ; CHECK-NEXT: vsrl.vv v8, v8, v10
704 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
705 ret <vscale x 8 x i16> %v
708 define <vscale x 8 x i16> @vsrl_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
709 ; CHECK-LABEL: vsrl_vx_nxv8i16:
711 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
712 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
714 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
715 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
716 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
717 ret <vscale x 8 x i16> %v
720 define <vscale x 8 x i16> @vsrl_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
721 ; CHECK-LABEL: vsrl_vx_nxv8i16_unmasked:
723 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
724 ; CHECK-NEXT: vsrl.vx v8, v8, a0
726 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
727 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
728 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
729 ret <vscale x 8 x i16> %v
732 define <vscale x 8 x i16> @vsrl_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
733 ; CHECK-LABEL: vsrl_vi_nxv8i16:
735 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
736 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
738 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 4), <vscale x 8 x i1> %m, i32 %evl)
739 ret <vscale x 8 x i16> %v
742 define <vscale x 8 x i16> @vsrl_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
743 ; CHECK-LABEL: vsrl_vi_nxv8i16_unmasked:
745 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
746 ; CHECK-NEXT: vsrl.vi v8, v8, 4
748 %v = call <vscale x 8 x i16> @llvm.vp.lshr.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
749 ret <vscale x 8 x i16> %v
752 declare <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
754 define <vscale x 16 x i16> @vsrl_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
755 ; CHECK-LABEL: vsrl_vv_nxv16i16:
757 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
758 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
760 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
761 ret <vscale x 16 x i16> %v
764 define <vscale x 16 x i16> @vsrl_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
765 ; CHECK-LABEL: vsrl_vv_nxv16i16_unmasked:
767 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
768 ; CHECK-NEXT: vsrl.vv v8, v8, v12
770 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
771 ret <vscale x 16 x i16> %v
774 define <vscale x 16 x i16> @vsrl_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
775 ; CHECK-LABEL: vsrl_vx_nxv16i16:
777 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
778 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
780 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
781 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
782 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
783 ret <vscale x 16 x i16> %v
786 define <vscale x 16 x i16> @vsrl_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
787 ; CHECK-LABEL: vsrl_vx_nxv16i16_unmasked:
789 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
790 ; CHECK-NEXT: vsrl.vx v8, v8, a0
792 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
793 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
794 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
795 ret <vscale x 16 x i16> %v
798 define <vscale x 16 x i16> @vsrl_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
799 ; CHECK-LABEL: vsrl_vi_nxv16i16:
801 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
802 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
804 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 4), <vscale x 16 x i1> %m, i32 %evl)
805 ret <vscale x 16 x i16> %v
808 define <vscale x 16 x i16> @vsrl_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
809 ; CHECK-LABEL: vsrl_vi_nxv16i16_unmasked:
811 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
812 ; CHECK-NEXT: vsrl.vi v8, v8, 4
814 %v = call <vscale x 16 x i16> @llvm.vp.lshr.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
815 ret <vscale x 16 x i16> %v
818 declare <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
820 define <vscale x 32 x i16> @vsrl_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
821 ; CHECK-LABEL: vsrl_vv_nxv32i16:
823 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
824 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
826 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
827 ret <vscale x 32 x i16> %v
830 define <vscale x 32 x i16> @vsrl_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
831 ; CHECK-LABEL: vsrl_vv_nxv32i16_unmasked:
833 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
834 ; CHECK-NEXT: vsrl.vv v8, v8, v16
836 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)
837 ret <vscale x 32 x i16> %v
840 define <vscale x 32 x i16> @vsrl_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
841 ; CHECK-LABEL: vsrl_vx_nxv32i16:
843 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
844 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
846 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
847 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
848 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
849 ret <vscale x 32 x i16> %v
852 define <vscale x 32 x i16> @vsrl_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
853 ; CHECK-LABEL: vsrl_vx_nxv32i16_unmasked:
855 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
856 ; CHECK-NEXT: vsrl.vx v8, v8, a0
858 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
859 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
860 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)
861 ret <vscale x 32 x i16> %v
864 define <vscale x 32 x i16> @vsrl_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
865 ; CHECK-LABEL: vsrl_vi_nxv32i16:
867 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
868 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
870 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 4), <vscale x 32 x i1> %m, i32 %evl)
871 ret <vscale x 32 x i16> %v
874 define <vscale x 32 x i16> @vsrl_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
875 ; CHECK-LABEL: vsrl_vi_nxv32i16_unmasked:
877 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
878 ; CHECK-NEXT: vsrl.vi v8, v8, 4
880 %v = call <vscale x 32 x i16> @llvm.vp.lshr.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 4), <vscale x 32 x i1> splat (i1 true), i32 %evl)
881 ret <vscale x 32 x i16> %v
884 declare <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
886 define <vscale x 1 x i32> @vsrl_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
887 ; CHECK-LABEL: vsrl_vv_nxv1i32:
889 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
890 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
892 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
893 ret <vscale x 1 x i32> %v
896 define <vscale x 1 x i32> @vsrl_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
897 ; CHECK-LABEL: vsrl_vv_nxv1i32_unmasked:
899 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
900 ; CHECK-NEXT: vsrl.vv v8, v8, v9
902 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
903 ret <vscale x 1 x i32> %v
906 define <vscale x 1 x i32> @vsrl_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
907 ; CHECK-LABEL: vsrl_vx_nxv1i32:
909 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
910 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
912 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
913 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
914 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
915 ret <vscale x 1 x i32> %v
918 define <vscale x 1 x i32> @vsrl_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
919 ; CHECK-LABEL: vsrl_vx_nxv1i32_unmasked:
921 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
922 ; CHECK-NEXT: vsrl.vx v8, v8, a0
924 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
925 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
926 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
927 ret <vscale x 1 x i32> %v
930 define <vscale x 1 x i32> @vsrl_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
931 ; CHECK-LABEL: vsrl_vi_nxv1i32:
933 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
934 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
936 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 4), <vscale x 1 x i1> %m, i32 %evl)
937 ret <vscale x 1 x i32> %v
940 define <vscale x 1 x i32> @vsrl_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
941 ; CHECK-LABEL: vsrl_vi_nxv1i32_unmasked:
943 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
944 ; CHECK-NEXT: vsrl.vi v8, v8, 4
946 %v = call <vscale x 1 x i32> @llvm.vp.lshr.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
947 ret <vscale x 1 x i32> %v
950 declare <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
952 define <vscale x 2 x i32> @vsrl_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
953 ; CHECK-LABEL: vsrl_vv_nxv2i32:
955 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
956 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
958 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
959 ret <vscale x 2 x i32> %v
962 define <vscale x 2 x i32> @vsrl_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
963 ; CHECK-LABEL: vsrl_vv_nxv2i32_unmasked:
965 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
966 ; CHECK-NEXT: vsrl.vv v8, v8, v9
968 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
969 ret <vscale x 2 x i32> %v
972 define <vscale x 2 x i32> @vsrl_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
973 ; CHECK-LABEL: vsrl_vx_nxv2i32:
975 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
976 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
978 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
979 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
980 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
981 ret <vscale x 2 x i32> %v
984 define <vscale x 2 x i32> @vsrl_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
985 ; CHECK-LABEL: vsrl_vx_nxv2i32_unmasked:
987 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
988 ; CHECK-NEXT: vsrl.vx v8, v8, a0
990 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
991 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
992 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
993 ret <vscale x 2 x i32> %v
996 define <vscale x 2 x i32> @vsrl_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
997 ; CHECK-LABEL: vsrl_vi_nxv2i32:
999 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1000 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1002 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 4), <vscale x 2 x i1> %m, i32 %evl)
1003 ret <vscale x 2 x i32> %v
1006 define <vscale x 2 x i32> @vsrl_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1007 ; CHECK-LABEL: vsrl_vi_nxv2i32_unmasked:
1009 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
1010 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1012 %v = call <vscale x 2 x i32> @llvm.vp.lshr.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1013 ret <vscale x 2 x i32> %v
1016 declare <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
1018 define <vscale x 4 x i32> @vsrl_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1019 ; CHECK-LABEL: vsrl_vv_nxv4i32:
1021 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1022 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
1024 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
1025 ret <vscale x 4 x i32> %v
1028 define <vscale x 4 x i32> @vsrl_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
1029 ; CHECK-LABEL: vsrl_vv_nxv4i32_unmasked:
1031 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1032 ; CHECK-NEXT: vsrl.vv v8, v8, v10
1034 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1035 ret <vscale x 4 x i32> %v
1038 define <vscale x 4 x i32> @vsrl_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1039 ; CHECK-LABEL: vsrl_vx_nxv4i32:
1041 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1042 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1044 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1045 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1046 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
1047 ret <vscale x 4 x i32> %v
1050 define <vscale x 4 x i32> @vsrl_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1051 ; CHECK-LABEL: vsrl_vx_nxv4i32_unmasked:
1053 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1054 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1056 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1057 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1058 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1059 ret <vscale x 4 x i32> %v
1062 define <vscale x 4 x i32> @vsrl_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1063 ; CHECK-LABEL: vsrl_vi_nxv4i32:
1065 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1066 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1068 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 4), <vscale x 4 x i1> %m, i32 %evl)
1069 ret <vscale x 4 x i32> %v
1072 define <vscale x 4 x i32> @vsrl_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1073 ; CHECK-LABEL: vsrl_vi_nxv4i32_unmasked:
1075 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1076 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1078 %v = call <vscale x 4 x i32> @llvm.vp.lshr.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1079 ret <vscale x 4 x i32> %v
1082 declare <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
1084 define <vscale x 8 x i32> @vsrl_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1085 ; CHECK-LABEL: vsrl_vv_nxv8i32:
1087 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1088 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
1090 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
1091 ret <vscale x 8 x i32> %v
1094 define <vscale x 8 x i32> @vsrl_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
1095 ; CHECK-LABEL: vsrl_vv_nxv8i32_unmasked:
1097 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1098 ; CHECK-NEXT: vsrl.vv v8, v8, v12
1100 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1101 ret <vscale x 8 x i32> %v
1104 define <vscale x 8 x i32> @vsrl_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1105 ; CHECK-LABEL: vsrl_vx_nxv8i32:
1107 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1108 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1110 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1111 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1112 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
1113 ret <vscale x 8 x i32> %v
1116 define <vscale x 8 x i32> @vsrl_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1117 ; CHECK-LABEL: vsrl_vx_nxv8i32_unmasked:
1119 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
1120 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1122 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1123 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1124 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1125 ret <vscale x 8 x i32> %v
1128 define <vscale x 8 x i32> @vsrl_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1129 ; CHECK-LABEL: vsrl_vi_nxv8i32:
1131 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1132 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1134 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 4), <vscale x 8 x i1> %m, i32 %evl)
1135 ret <vscale x 8 x i32> %v
1138 define <vscale x 8 x i32> @vsrl_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1139 ; CHECK-LABEL: vsrl_vi_nxv8i32_unmasked:
1141 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
1142 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1144 %v = call <vscale x 8 x i32> @llvm.vp.lshr.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1145 ret <vscale x 8 x i32> %v
1148 declare <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
1150 define <vscale x 16 x i32> @vsrl_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1151 ; CHECK-LABEL: vsrl_vv_nxv16i32:
1153 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1154 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1156 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
1157 ret <vscale x 16 x i32> %v
1160 define <vscale x 16 x i32> @vsrl_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
1161 ; CHECK-LABEL: vsrl_vv_nxv16i32_unmasked:
1163 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1164 ; CHECK-NEXT: vsrl.vv v8, v8, v16
1166 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1167 ret <vscale x 16 x i32> %v
1170 define <vscale x 16 x i32> @vsrl_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1171 ; CHECK-LABEL: vsrl_vx_nxv16i32:
1173 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1174 ; CHECK-NEXT: vsrl.vx v8, v8, a0, v0.t
1176 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1177 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1178 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
1179 ret <vscale x 16 x i32> %v
1182 define <vscale x 16 x i32> @vsrl_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1183 ; CHECK-LABEL: vsrl_vx_nxv16i32_unmasked:
1185 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
1186 ; CHECK-NEXT: vsrl.vx v8, v8, a0
1188 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1189 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1190 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)
1191 ret <vscale x 16 x i32> %v
1194 define <vscale x 16 x i32> @vsrl_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1195 ; CHECK-LABEL: vsrl_vi_nxv16i32:
1197 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1198 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1200 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 4), <vscale x 16 x i1> %m, i32 %evl)
1201 ret <vscale x 16 x i32> %v
1204 define <vscale x 16 x i32> @vsrl_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1205 ; CHECK-LABEL: vsrl_vi_nxv16i32_unmasked:
1207 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
1208 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1210 %v = call <vscale x 16 x i32> @llvm.vp.lshr.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 4), <vscale x 16 x i1> splat (i1 true), i32 %evl)
1211 ret <vscale x 16 x i32> %v
1214 declare <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
1216 define <vscale x 1 x i64> @vsrl_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1217 ; CHECK-LABEL: vsrl_vv_nxv1i64:
1219 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1220 ; CHECK-NEXT: vsrl.vv v8, v8, v9, v0.t
1222 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
1223 ret <vscale x 1 x i64> %v
1226 define <vscale x 1 x i64> @vsrl_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
1227 ; CHECK-LABEL: vsrl_vv_nxv1i64_unmasked:
1229 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1230 ; CHECK-NEXT: vsrl.vv v8, v8, v9
1232 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1233 ret <vscale x 1 x i64> %v
1236 define <vscale x 1 x i64> @vsrl_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1237 ; RV32-LABEL: vsrl_vx_nxv1i64:
1239 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1240 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1243 ; RV64-LABEL: vsrl_vx_nxv1i64:
1245 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1246 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1248 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1249 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1250 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1251 ret <vscale x 1 x i64> %v
1254 define <vscale x 1 x i64> @vsrl_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1255 ; RV32-LABEL: vsrl_vx_nxv1i64_unmasked:
1257 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1258 ; RV32-NEXT: vsrl.vx v8, v8, a0
1261 ; RV64-LABEL: vsrl_vx_nxv1i64_unmasked:
1263 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1264 ; RV64-NEXT: vsrl.vx v8, v8, a0
1266 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1267 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1268 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)
1269 ret <vscale x 1 x i64> %v
1272 define <vscale x 1 x i64> @vsrl_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1273 ; CHECK-LABEL: vsrl_vi_nxv1i64:
1275 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1276 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1278 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 4), <vscale x 1 x i1> %m, i32 %evl)
1279 ret <vscale x 1 x i64> %v
1282 define <vscale x 1 x i64> @vsrl_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1283 ; CHECK-LABEL: vsrl_vi_nxv1i64_unmasked:
1285 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1286 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1288 %v = call <vscale x 1 x i64> @llvm.vp.lshr.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 4), <vscale x 1 x i1> splat (i1 true), i32 %evl)
1289 ret <vscale x 1 x i64> %v
1292 declare <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
1294 define <vscale x 2 x i64> @vsrl_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1295 ; CHECK-LABEL: vsrl_vv_nxv2i64:
1297 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1298 ; CHECK-NEXT: vsrl.vv v8, v8, v10, v0.t
1300 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1301 ret <vscale x 2 x i64> %v
1304 define <vscale x 2 x i64> @vsrl_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1305 ; CHECK-LABEL: vsrl_vv_nxv2i64_unmasked:
1307 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1308 ; CHECK-NEXT: vsrl.vv v8, v8, v10
1310 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1311 ret <vscale x 2 x i64> %v
1314 define <vscale x 2 x i64> @vsrl_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1315 ; RV32-LABEL: vsrl_vx_nxv2i64:
1317 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1318 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1321 ; RV64-LABEL: vsrl_vx_nxv2i64:
1323 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1324 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1326 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1327 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1328 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1329 ret <vscale x 2 x i64> %v
1332 define <vscale x 2 x i64> @vsrl_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1333 ; RV32-LABEL: vsrl_vx_nxv2i64_unmasked:
1335 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1336 ; RV32-NEXT: vsrl.vx v8, v8, a0
1339 ; RV64-LABEL: vsrl_vx_nxv2i64_unmasked:
1341 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1342 ; RV64-NEXT: vsrl.vx v8, v8, a0
1344 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1345 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1346 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)
1347 ret <vscale x 2 x i64> %v
1350 define <vscale x 2 x i64> @vsrl_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1351 ; CHECK-LABEL: vsrl_vi_nxv2i64:
1353 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1354 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1356 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 4), <vscale x 2 x i1> %m, i32 %evl)
1357 ret <vscale x 2 x i64> %v
1360 define <vscale x 2 x i64> @vsrl_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1361 ; CHECK-LABEL: vsrl_vi_nxv2i64_unmasked:
1363 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1364 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1366 %v = call <vscale x 2 x i64> @llvm.vp.lshr.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 4), <vscale x 2 x i1> splat (i1 true), i32 %evl)
1367 ret <vscale x 2 x i64> %v
1370 declare <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
1372 define <vscale x 4 x i64> @vsrl_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1373 ; CHECK-LABEL: vsrl_vv_nxv4i64:
1375 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1376 ; CHECK-NEXT: vsrl.vv v8, v8, v12, v0.t
1378 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1379 ret <vscale x 4 x i64> %v
1382 define <vscale x 4 x i64> @vsrl_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1383 ; CHECK-LABEL: vsrl_vv_nxv4i64_unmasked:
1385 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1386 ; CHECK-NEXT: vsrl.vv v8, v8, v12
1388 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1389 ret <vscale x 4 x i64> %v
1392 define <vscale x 4 x i64> @vsrl_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1393 ; RV32-LABEL: vsrl_vx_nxv4i64:
1395 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1396 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1399 ; RV64-LABEL: vsrl_vx_nxv4i64:
1401 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1402 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1404 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1405 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1406 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1407 ret <vscale x 4 x i64> %v
1410 define <vscale x 4 x i64> @vsrl_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1411 ; RV32-LABEL: vsrl_vx_nxv4i64_unmasked:
1413 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1414 ; RV32-NEXT: vsrl.vx v8, v8, a0
1417 ; RV64-LABEL: vsrl_vx_nxv4i64_unmasked:
1419 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1420 ; RV64-NEXT: vsrl.vx v8, v8, a0
1422 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1423 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1424 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1425 ret <vscale x 4 x i64> %v
1428 define <vscale x 4 x i64> @vsrl_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1429 ; CHECK-LABEL: vsrl_vi_nxv4i64:
1431 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1432 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1434 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 4), <vscale x 4 x i1> %m, i32 %evl)
1435 ret <vscale x 4 x i64> %v
1438 define <vscale x 4 x i64> @vsrl_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1439 ; CHECK-LABEL: vsrl_vi_nxv4i64_unmasked:
1441 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1442 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1444 %v = call <vscale x 4 x i64> @llvm.vp.lshr.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 4), <vscale x 4 x i1> splat (i1 true), i32 %evl)
1445 ret <vscale x 4 x i64> %v
1448 declare <vscale x 5 x i64> @llvm.vp.lshr.nxv5i64(<vscale x 5 x i64>, <vscale x 5 x i64>, <vscale x 5 x i1>, i32)
1450 define <vscale x 5 x i64> @vsrl_vv_nxv5i64(<vscale x 5 x i64> %va, <vscale x 5 x i64> %b, <vscale x 5 x i1> %m, i32 zeroext %evl) {
1451 ; CHECK-LABEL: vsrl_vv_nxv5i64:
1453 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1454 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1456 %v = call <vscale x 5 x i64> @llvm.vp.lshr.nxv5i64(<vscale x 5 x i64> %va, <vscale x 5 x i64> %b, <vscale x 5 x i1> %m, i32 %evl)
1457 ret <vscale x 5 x i64> %v
1460 declare <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1462 define <vscale x 8 x i64> @vsrl_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1463 ; CHECK-LABEL: vsrl_vv_nxv8i64:
1465 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1466 ; CHECK-NEXT: vsrl.vv v8, v8, v16, v0.t
1468 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1469 ret <vscale x 8 x i64> %v
1472 define <vscale x 8 x i64> @vsrl_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1473 ; CHECK-LABEL: vsrl_vv_nxv8i64_unmasked:
1475 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1476 ; CHECK-NEXT: vsrl.vv v8, v8, v16
1478 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1479 ret <vscale x 8 x i64> %v
1482 define <vscale x 8 x i64> @vsrl_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1483 ; RV32-LABEL: vsrl_vx_nxv8i64:
1485 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1486 ; RV32-NEXT: vsrl.vx v8, v8, a0, v0.t
1489 ; RV64-LABEL: vsrl_vx_nxv8i64:
1491 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1492 ; RV64-NEXT: vsrl.vx v8, v8, a0, v0.t
1494 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1495 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1496 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1497 ret <vscale x 8 x i64> %v
1500 define <vscale x 8 x i64> @vsrl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1501 ; RV32-LABEL: vsrl_vx_nxv8i64_unmasked:
1503 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1504 ; RV32-NEXT: vsrl.vx v8, v8, a0
1507 ; RV64-LABEL: vsrl_vx_nxv8i64_unmasked:
1509 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1510 ; RV64-NEXT: vsrl.vx v8, v8, a0
1512 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1513 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1514 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1515 ret <vscale x 8 x i64> %v
1518 define <vscale x 8 x i64> @vsrl_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1519 ; CHECK-LABEL: vsrl_vi_nxv8i64:
1521 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1522 ; CHECK-NEXT: vsrl.vi v8, v8, 4, v0.t
1524 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 4), <vscale x 8 x i1> %m, i32 %evl)
1525 ret <vscale x 8 x i64> %v
1528 define <vscale x 8 x i64> @vsrl_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1529 ; CHECK-LABEL: vsrl_vi_nxv8i64_unmasked:
1531 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1532 ; CHECK-NEXT: vsrl.vi v8, v8, 4
1534 %v = call <vscale x 8 x i64> @llvm.vp.lshr.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 4), <vscale x 8 x i1> splat (i1 true), i32 %evl)
1535 ret <vscale x 8 x i64> %v