Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsrl-vp.ll
blob01d1f14da252765b4408093b1cabd35b711ab142
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:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    li a2, 127
13 ; CHECK-NEXT:    vsetvli a3, zero, e8, m1, ta, ma
14 ; CHECK-NEXT:    vand.vx v8, v8, a2
15 ; CHECK-NEXT:    vmv.v.x v9, a0
16 ; CHECK-NEXT:    vand.vx v9, v9, a2
17 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
18 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
19 ; CHECK-NEXT:    ret
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:
30 ; CHECK:       # %bb.0:
31 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
32 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
33 ; CHECK-NEXT:    ret
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:
40 ; CHECK:       # %bb.0:
41 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
42 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
43 ; CHECK-NEXT:    ret
44   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
45   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
46   %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)
47   ret <vscale x 1 x i8> %v
50 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) {
51 ; CHECK-LABEL: vsrl_vx_nxv1i8:
52 ; CHECK:       # %bb.0:
53 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
54 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
55 ; CHECK-NEXT:    ret
56   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
57   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
58   %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)
59   ret <vscale x 1 x i8> %v
62 define <vscale x 1 x i8> @vsrl_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
63 ; CHECK-LABEL: vsrl_vx_nxv1i8_unmasked:
64 ; CHECK:       # %bb.0:
65 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
66 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
67 ; CHECK-NEXT:    ret
68   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
69   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
70   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
71   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
72   %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)
73   ret <vscale x 1 x i8> %v
76 define <vscale x 1 x i8> @vsrl_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
77 ; CHECK-LABEL: vsrl_vi_nxv1i8:
78 ; CHECK:       # %bb.0:
79 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
80 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
81 ; CHECK-NEXT:    ret
82   %elt.head = insertelement <vscale x 1 x i8> poison, i8 4, i32 0
83   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
84   %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)
85   ret <vscale x 1 x i8> %v
88 define <vscale x 1 x i8> @vsrl_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
89 ; CHECK-LABEL: vsrl_vi_nxv1i8_unmasked:
90 ; CHECK:       # %bb.0:
91 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
92 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
93 ; CHECK-NEXT:    ret
94   %elt.head = insertelement <vscale x 1 x i8> poison, i8 4, i32 0
95   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
96   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
97   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
98   %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)
99   ret <vscale x 1 x i8> %v
102 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)
104 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) {
105 ; CHECK-LABEL: vsrl_vv_nxv2i8:
106 ; CHECK:       # %bb.0:
107 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
108 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
109 ; CHECK-NEXT:    ret
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> %m, i32 %evl)
111   ret <vscale x 2 x i8> %v
114 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) {
115 ; CHECK-LABEL: vsrl_vv_nxv2i8_unmasked:
116 ; CHECK:       # %bb.0:
117 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
118 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
119 ; CHECK-NEXT:    ret
120   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
121   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> 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> %b, <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(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
127 ; CHECK-LABEL: vsrl_vx_nxv2i8:
128 ; CHECK:       # %bb.0:
129 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
130 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
131 ; CHECK-NEXT:    ret
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> %m, i32 %evl)
135   ret <vscale x 2 x i8> %v
138 define <vscale x 2 x i8> @vsrl_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
139 ; CHECK-LABEL: vsrl_vx_nxv2i8_unmasked:
140 ; CHECK:       # %bb.0:
141 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
142 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
143 ; CHECK-NEXT:    ret
144   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
145   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
146   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
147   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
148   %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)
149   ret <vscale x 2 x i8> %v
152 define <vscale x 2 x i8> @vsrl_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
153 ; CHECK-LABEL: vsrl_vi_nxv2i8:
154 ; CHECK:       # %bb.0:
155 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
156 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
157 ; CHECK-NEXT:    ret
158   %elt.head = insertelement <vscale x 2 x i8> poison, i8 4, i32 0
159   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
160   %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)
161   ret <vscale x 2 x i8> %v
164 define <vscale x 2 x i8> @vsrl_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
165 ; CHECK-LABEL: vsrl_vi_nxv2i8_unmasked:
166 ; CHECK:       # %bb.0:
167 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
168 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
169 ; CHECK-NEXT:    ret
170   %elt.head = insertelement <vscale x 2 x i8> poison, i8 4, i32 0
171   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
172   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
173   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
174   %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)
175   ret <vscale x 2 x i8> %v
178 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)
180 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) {
181 ; CHECK-LABEL: vsrl_vv_nxv4i8:
182 ; CHECK:       # %bb.0:
183 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
184 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
185 ; CHECK-NEXT:    ret
186   %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)
187   ret <vscale x 4 x i8> %v
190 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) {
191 ; CHECK-LABEL: vsrl_vv_nxv4i8_unmasked:
192 ; CHECK:       # %bb.0:
193 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
194 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
195 ; CHECK-NEXT:    ret
196   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
197   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
198   %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)
199   ret <vscale x 4 x i8> %v
202 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) {
203 ; CHECK-LABEL: vsrl_vx_nxv4i8:
204 ; CHECK:       # %bb.0:
205 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
206 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
207 ; CHECK-NEXT:    ret
208   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
209   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
210   %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)
211   ret <vscale x 4 x i8> %v
214 define <vscale x 4 x i8> @vsrl_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
215 ; CHECK-LABEL: vsrl_vx_nxv4i8_unmasked:
216 ; CHECK:       # %bb.0:
217 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
218 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
219 ; CHECK-NEXT:    ret
220   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
221   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
222   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
223   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
224   %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)
225   ret <vscale x 4 x i8> %v
228 define <vscale x 4 x i8> @vsrl_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
229 ; CHECK-LABEL: vsrl_vi_nxv4i8:
230 ; CHECK:       # %bb.0:
231 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
232 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
233 ; CHECK-NEXT:    ret
234   %elt.head = insertelement <vscale x 4 x i8> poison, i8 4, i32 0
235   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
236   %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)
237   ret <vscale x 4 x i8> %v
240 define <vscale x 4 x i8> @vsrl_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
241 ; CHECK-LABEL: vsrl_vi_nxv4i8_unmasked:
242 ; CHECK:       # %bb.0:
243 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
244 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
245 ; CHECK-NEXT:    ret
246   %elt.head = insertelement <vscale x 4 x i8> poison, i8 4, i32 0
247   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
248   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
249   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
250   %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)
251   ret <vscale x 4 x i8> %v
254 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)
256 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) {
257 ; CHECK-LABEL: vsrl_vv_nxv8i8:
258 ; CHECK:       # %bb.0:
259 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
260 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
261 ; CHECK-NEXT:    ret
262   %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)
263   ret <vscale x 8 x i8> %v
266 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) {
267 ; CHECK-LABEL: vsrl_vv_nxv8i8_unmasked:
268 ; CHECK:       # %bb.0:
269 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
270 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
271 ; CHECK-NEXT:    ret
272   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
273   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
274   %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)
275   ret <vscale x 8 x i8> %v
278 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) {
279 ; CHECK-LABEL: vsrl_vx_nxv8i8:
280 ; CHECK:       # %bb.0:
281 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
282 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
283 ; CHECK-NEXT:    ret
284   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
285   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
286   %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)
287   ret <vscale x 8 x i8> %v
290 define <vscale x 8 x i8> @vsrl_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
291 ; CHECK-LABEL: vsrl_vx_nxv8i8_unmasked:
292 ; CHECK:       # %bb.0:
293 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
294 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
295 ; CHECK-NEXT:    ret
296   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
297   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
298   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
299   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
300   %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)
301   ret <vscale x 8 x i8> %v
304 define <vscale x 8 x i8> @vsrl_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
305 ; CHECK-LABEL: vsrl_vi_nxv8i8:
306 ; CHECK:       # %bb.0:
307 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
308 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
309 ; CHECK-NEXT:    ret
310   %elt.head = insertelement <vscale x 8 x i8> poison, i8 4, i32 0
311   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
312   %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)
313   ret <vscale x 8 x i8> %v
316 define <vscale x 8 x i8> @vsrl_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
317 ; CHECK-LABEL: vsrl_vi_nxv8i8_unmasked:
318 ; CHECK:       # %bb.0:
319 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
320 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
321 ; CHECK-NEXT:    ret
322   %elt.head = insertelement <vscale x 8 x i8> poison, i8 4, i32 0
323   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
324   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
325   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
326   %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)
327   ret <vscale x 8 x i8> %v
330 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)
332 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) {
333 ; CHECK-LABEL: vsrl_vv_nxv16i8:
334 ; CHECK:       # %bb.0:
335 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
336 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
337 ; CHECK-NEXT:    ret
338   %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)
339   ret <vscale x 16 x i8> %v
342 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) {
343 ; CHECK-LABEL: vsrl_vv_nxv16i8_unmasked:
344 ; CHECK:       # %bb.0:
345 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
346 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
347 ; CHECK-NEXT:    ret
348   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
349   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
350   %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)
351   ret <vscale x 16 x i8> %v
354 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) {
355 ; CHECK-LABEL: vsrl_vx_nxv16i8:
356 ; CHECK:       # %bb.0:
357 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
358 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
359 ; CHECK-NEXT:    ret
360   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
361   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
362   %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)
363   ret <vscale x 16 x i8> %v
366 define <vscale x 16 x i8> @vsrl_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
367 ; CHECK-LABEL: vsrl_vx_nxv16i8_unmasked:
368 ; CHECK:       # %bb.0:
369 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
370 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
371 ; CHECK-NEXT:    ret
372   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
373   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
374   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
375   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
376   %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)
377   ret <vscale x 16 x i8> %v
380 define <vscale x 16 x i8> @vsrl_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
381 ; CHECK-LABEL: vsrl_vi_nxv16i8:
382 ; CHECK:       # %bb.0:
383 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
384 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
385 ; CHECK-NEXT:    ret
386   %elt.head = insertelement <vscale x 16 x i8> poison, i8 4, i32 0
387   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
388   %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)
389   ret <vscale x 16 x i8> %v
392 define <vscale x 16 x i8> @vsrl_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
393 ; CHECK-LABEL: vsrl_vi_nxv16i8_unmasked:
394 ; CHECK:       # %bb.0:
395 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
396 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
397 ; CHECK-NEXT:    ret
398   %elt.head = insertelement <vscale x 16 x i8> poison, i8 4, i32 0
399   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
400   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
401   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
402   %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)
403   ret <vscale x 16 x i8> %v
406 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)
408 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) {
409 ; CHECK-LABEL: vsrl_vv_nxv32i8:
410 ; CHECK:       # %bb.0:
411 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
412 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
413 ; CHECK-NEXT:    ret
414   %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)
415   ret <vscale x 32 x i8> %v
418 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) {
419 ; CHECK-LABEL: vsrl_vv_nxv32i8_unmasked:
420 ; CHECK:       # %bb.0:
421 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
422 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
423 ; CHECK-NEXT:    ret
424   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
425   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
426   %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)
427   ret <vscale x 32 x i8> %v
430 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) {
431 ; CHECK-LABEL: vsrl_vx_nxv32i8:
432 ; CHECK:       # %bb.0:
433 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
434 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
435 ; CHECK-NEXT:    ret
436   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
437   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
438   %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)
439   ret <vscale x 32 x i8> %v
442 define <vscale x 32 x i8> @vsrl_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
443 ; CHECK-LABEL: vsrl_vx_nxv32i8_unmasked:
444 ; CHECK:       # %bb.0:
445 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
446 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
447 ; CHECK-NEXT:    ret
448   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
449   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
450   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
451   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
452   %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)
453   ret <vscale x 32 x i8> %v
456 define <vscale x 32 x i8> @vsrl_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
457 ; CHECK-LABEL: vsrl_vi_nxv32i8:
458 ; CHECK:       # %bb.0:
459 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
460 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
461 ; CHECK-NEXT:    ret
462   %elt.head = insertelement <vscale x 32 x i8> poison, i8 4, i32 0
463   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
464   %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)
465   ret <vscale x 32 x i8> %v
468 define <vscale x 32 x i8> @vsrl_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
469 ; CHECK-LABEL: vsrl_vi_nxv32i8_unmasked:
470 ; CHECK:       # %bb.0:
471 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
472 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
473 ; CHECK-NEXT:    ret
474   %elt.head = insertelement <vscale x 32 x i8> poison, i8 4, i32 0
475   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
476   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
477   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
478   %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)
479   ret <vscale x 32 x i8> %v
482 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)
484 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) {
485 ; CHECK-LABEL: vsrl_vv_nxv64i8:
486 ; CHECK:       # %bb.0:
487 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
488 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
489 ; CHECK-NEXT:    ret
490   %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)
491   ret <vscale x 64 x i8> %v
494 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) {
495 ; CHECK-LABEL: vsrl_vv_nxv64i8_unmasked:
496 ; CHECK:       # %bb.0:
497 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
498 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
499 ; CHECK-NEXT:    ret
500   %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
501   %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
502   %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)
503   ret <vscale x 64 x i8> %v
506 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) {
507 ; CHECK-LABEL: vsrl_vx_nxv64i8:
508 ; CHECK:       # %bb.0:
509 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
510 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
511 ; CHECK-NEXT:    ret
512   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
513   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
514   %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)
515   ret <vscale x 64 x i8> %v
518 define <vscale x 64 x i8> @vsrl_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
519 ; CHECK-LABEL: vsrl_vx_nxv64i8_unmasked:
520 ; CHECK:       # %bb.0:
521 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
522 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
523 ; CHECK-NEXT:    ret
524   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
525   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
526   %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
527   %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
528   %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)
529   ret <vscale x 64 x i8> %v
532 define <vscale x 64 x i8> @vsrl_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
533 ; CHECK-LABEL: vsrl_vi_nxv64i8:
534 ; CHECK:       # %bb.0:
535 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
536 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
537 ; CHECK-NEXT:    ret
538   %elt.head = insertelement <vscale x 64 x i8> poison, i8 4, i32 0
539   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
540   %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)
541   ret <vscale x 64 x i8> %v
544 define <vscale x 64 x i8> @vsrl_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
545 ; CHECK-LABEL: vsrl_vi_nxv64i8_unmasked:
546 ; CHECK:       # %bb.0:
547 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
548 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
549 ; CHECK-NEXT:    ret
550   %elt.head = insertelement <vscale x 64 x i8> poison, i8 4, i32 0
551   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
552   %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
553   %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
554   %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)
555   ret <vscale x 64 x i8> %v
558 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)
560 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) {
561 ; CHECK-LABEL: vsrl_vv_nxv1i16:
562 ; CHECK:       # %bb.0:
563 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
564 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
565 ; CHECK-NEXT:    ret
566   %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)
567   ret <vscale x 1 x i16> %v
570 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) {
571 ; CHECK-LABEL: vsrl_vv_nxv1i16_unmasked:
572 ; CHECK:       # %bb.0:
573 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
574 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
575 ; CHECK-NEXT:    ret
576   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
577   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
578   %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)
579   ret <vscale x 1 x i16> %v
582 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) {
583 ; CHECK-LABEL: vsrl_vx_nxv1i16:
584 ; CHECK:       # %bb.0:
585 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
586 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
587 ; CHECK-NEXT:    ret
588   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
589   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
590   %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)
591   ret <vscale x 1 x i16> %v
594 define <vscale x 1 x i16> @vsrl_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
595 ; CHECK-LABEL: vsrl_vx_nxv1i16_unmasked:
596 ; CHECK:       # %bb.0:
597 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
598 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
599 ; CHECK-NEXT:    ret
600   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
601   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
602   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
603   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
604   %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)
605   ret <vscale x 1 x i16> %v
608 define <vscale x 1 x i16> @vsrl_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
609 ; CHECK-LABEL: vsrl_vi_nxv1i16:
610 ; CHECK:       # %bb.0:
611 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
612 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
613 ; CHECK-NEXT:    ret
614   %elt.head = insertelement <vscale x 1 x i16> poison, i16 4, i32 0
615   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
616   %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)
617   ret <vscale x 1 x i16> %v
620 define <vscale x 1 x i16> @vsrl_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
621 ; CHECK-LABEL: vsrl_vi_nxv1i16_unmasked:
622 ; CHECK:       # %bb.0:
623 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
624 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
625 ; CHECK-NEXT:    ret
626   %elt.head = insertelement <vscale x 1 x i16> poison, i16 4, i32 0
627   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
628   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
629   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
630   %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)
631   ret <vscale x 1 x i16> %v
634 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)
636 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) {
637 ; CHECK-LABEL: vsrl_vv_nxv2i16:
638 ; CHECK:       # %bb.0:
639 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
640 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
641 ; CHECK-NEXT:    ret
642   %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)
643   ret <vscale x 2 x i16> %v
646 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) {
647 ; CHECK-LABEL: vsrl_vv_nxv2i16_unmasked:
648 ; CHECK:       # %bb.0:
649 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
650 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
651 ; CHECK-NEXT:    ret
652   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
653   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
654   %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)
655   ret <vscale x 2 x i16> %v
658 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) {
659 ; CHECK-LABEL: vsrl_vx_nxv2i16:
660 ; CHECK:       # %bb.0:
661 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
662 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
663 ; CHECK-NEXT:    ret
664   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
665   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
666   %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)
667   ret <vscale x 2 x i16> %v
670 define <vscale x 2 x i16> @vsrl_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
671 ; CHECK-LABEL: vsrl_vx_nxv2i16_unmasked:
672 ; CHECK:       # %bb.0:
673 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
674 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
675 ; CHECK-NEXT:    ret
676   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
677   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
678   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
679   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
680   %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)
681   ret <vscale x 2 x i16> %v
684 define <vscale x 2 x i16> @vsrl_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
685 ; CHECK-LABEL: vsrl_vi_nxv2i16:
686 ; CHECK:       # %bb.0:
687 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
688 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
689 ; CHECK-NEXT:    ret
690   %elt.head = insertelement <vscale x 2 x i16> poison, i16 4, i32 0
691   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
692   %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)
693   ret <vscale x 2 x i16> %v
696 define <vscale x 2 x i16> @vsrl_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
697 ; CHECK-LABEL: vsrl_vi_nxv2i16_unmasked:
698 ; CHECK:       # %bb.0:
699 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
700 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
701 ; CHECK-NEXT:    ret
702   %elt.head = insertelement <vscale x 2 x i16> poison, i16 4, i32 0
703   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
704   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
705   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
706   %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)
707   ret <vscale x 2 x i16> %v
710 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)
712 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) {
713 ; CHECK-LABEL: vsrl_vv_nxv4i16:
714 ; CHECK:       # %bb.0:
715 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
716 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
717 ; CHECK-NEXT:    ret
718   %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)
719   ret <vscale x 4 x i16> %v
722 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) {
723 ; CHECK-LABEL: vsrl_vv_nxv4i16_unmasked:
724 ; CHECK:       # %bb.0:
725 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
726 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
727 ; CHECK-NEXT:    ret
728   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
729   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
730   %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)
731   ret <vscale x 4 x i16> %v
734 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) {
735 ; CHECK-LABEL: vsrl_vx_nxv4i16:
736 ; CHECK:       # %bb.0:
737 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
738 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
739 ; CHECK-NEXT:    ret
740   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
741   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
742   %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)
743   ret <vscale x 4 x i16> %v
746 define <vscale x 4 x i16> @vsrl_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
747 ; CHECK-LABEL: vsrl_vx_nxv4i16_unmasked:
748 ; CHECK:       # %bb.0:
749 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
750 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
751 ; CHECK-NEXT:    ret
752   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
753   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
754   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
755   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
756   %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)
757   ret <vscale x 4 x i16> %v
760 define <vscale x 4 x i16> @vsrl_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
761 ; CHECK-LABEL: vsrl_vi_nxv4i16:
762 ; CHECK:       # %bb.0:
763 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
764 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
765 ; CHECK-NEXT:    ret
766   %elt.head = insertelement <vscale x 4 x i16> poison, i16 4, i32 0
767   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
768   %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)
769   ret <vscale x 4 x i16> %v
772 define <vscale x 4 x i16> @vsrl_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
773 ; CHECK-LABEL: vsrl_vi_nxv4i16_unmasked:
774 ; CHECK:       # %bb.0:
775 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
776 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
777 ; CHECK-NEXT:    ret
778   %elt.head = insertelement <vscale x 4 x i16> poison, i16 4, i32 0
779   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
780   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
781   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
782   %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)
783   ret <vscale x 4 x i16> %v
786 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)
788 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) {
789 ; CHECK-LABEL: vsrl_vv_nxv8i16:
790 ; CHECK:       # %bb.0:
791 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
792 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
793 ; CHECK-NEXT:    ret
794   %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)
795   ret <vscale x 8 x i16> %v
798 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) {
799 ; CHECK-LABEL: vsrl_vv_nxv8i16_unmasked:
800 ; CHECK:       # %bb.0:
801 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
802 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
803 ; CHECK-NEXT:    ret
804   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
805   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
806   %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)
807   ret <vscale x 8 x i16> %v
810 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) {
811 ; CHECK-LABEL: vsrl_vx_nxv8i16:
812 ; CHECK:       # %bb.0:
813 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
814 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
815 ; CHECK-NEXT:    ret
816   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
817   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
818   %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)
819   ret <vscale x 8 x i16> %v
822 define <vscale x 8 x i16> @vsrl_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
823 ; CHECK-LABEL: vsrl_vx_nxv8i16_unmasked:
824 ; CHECK:       # %bb.0:
825 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
826 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
827 ; CHECK-NEXT:    ret
828   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
829   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
830   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
831   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
832   %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)
833   ret <vscale x 8 x i16> %v
836 define <vscale x 8 x i16> @vsrl_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
837 ; CHECK-LABEL: vsrl_vi_nxv8i16:
838 ; CHECK:       # %bb.0:
839 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
840 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
841 ; CHECK-NEXT:    ret
842   %elt.head = insertelement <vscale x 8 x i16> poison, i16 4, i32 0
843   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
844   %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)
845   ret <vscale x 8 x i16> %v
848 define <vscale x 8 x i16> @vsrl_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
849 ; CHECK-LABEL: vsrl_vi_nxv8i16_unmasked:
850 ; CHECK:       # %bb.0:
851 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
852 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
853 ; CHECK-NEXT:    ret
854   %elt.head = insertelement <vscale x 8 x i16> poison, i16 4, i32 0
855   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
856   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
857   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
858   %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)
859   ret <vscale x 8 x i16> %v
862 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)
864 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) {
865 ; CHECK-LABEL: vsrl_vv_nxv16i16:
866 ; CHECK:       # %bb.0:
867 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
868 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
869 ; CHECK-NEXT:    ret
870   %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)
871   ret <vscale x 16 x i16> %v
874 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) {
875 ; CHECK-LABEL: vsrl_vv_nxv16i16_unmasked:
876 ; CHECK:       # %bb.0:
877 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
878 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
879 ; CHECK-NEXT:    ret
880   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
881   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
882   %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)
883   ret <vscale x 16 x i16> %v
886 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) {
887 ; CHECK-LABEL: vsrl_vx_nxv16i16:
888 ; CHECK:       # %bb.0:
889 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
890 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
891 ; CHECK-NEXT:    ret
892   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
893   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
894   %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)
895   ret <vscale x 16 x i16> %v
898 define <vscale x 16 x i16> @vsrl_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
899 ; CHECK-LABEL: vsrl_vx_nxv16i16_unmasked:
900 ; CHECK:       # %bb.0:
901 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
902 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
903 ; CHECK-NEXT:    ret
904   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
905   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
906   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
907   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
908   %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)
909   ret <vscale x 16 x i16> %v
912 define <vscale x 16 x i16> @vsrl_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
913 ; CHECK-LABEL: vsrl_vi_nxv16i16:
914 ; CHECK:       # %bb.0:
915 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
916 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
917 ; CHECK-NEXT:    ret
918   %elt.head = insertelement <vscale x 16 x i16> poison, i16 4, i32 0
919   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
920   %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)
921   ret <vscale x 16 x i16> %v
924 define <vscale x 16 x i16> @vsrl_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
925 ; CHECK-LABEL: vsrl_vi_nxv16i16_unmasked:
926 ; CHECK:       # %bb.0:
927 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
928 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
929 ; CHECK-NEXT:    ret
930   %elt.head = insertelement <vscale x 16 x i16> poison, i16 4, i32 0
931   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
932   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
933   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
934   %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)
935   ret <vscale x 16 x i16> %v
938 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)
940 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) {
941 ; CHECK-LABEL: vsrl_vv_nxv32i16:
942 ; CHECK:       # %bb.0:
943 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
944 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
945 ; CHECK-NEXT:    ret
946   %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)
947   ret <vscale x 32 x i16> %v
950 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) {
951 ; CHECK-LABEL: vsrl_vv_nxv32i16_unmasked:
952 ; CHECK:       # %bb.0:
953 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
954 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
955 ; CHECK-NEXT:    ret
956   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
957   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
958   %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)
959   ret <vscale x 32 x i16> %v
962 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) {
963 ; CHECK-LABEL: vsrl_vx_nxv32i16:
964 ; CHECK:       # %bb.0:
965 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
966 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
967 ; CHECK-NEXT:    ret
968   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
969   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
970   %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)
971   ret <vscale x 32 x i16> %v
974 define <vscale x 32 x i16> @vsrl_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
975 ; CHECK-LABEL: vsrl_vx_nxv32i16_unmasked:
976 ; CHECK:       # %bb.0:
977 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
978 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
979 ; CHECK-NEXT:    ret
980   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
981   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
982   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
983   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
984   %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)
985   ret <vscale x 32 x i16> %v
988 define <vscale x 32 x i16> @vsrl_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
989 ; CHECK-LABEL: vsrl_vi_nxv32i16:
990 ; CHECK:       # %bb.0:
991 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
992 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
993 ; CHECK-NEXT:    ret
994   %elt.head = insertelement <vscale x 32 x i16> poison, i16 4, i32 0
995   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
996   %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)
997   ret <vscale x 32 x i16> %v
1000 define <vscale x 32 x i16> @vsrl_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
1001 ; CHECK-LABEL: vsrl_vi_nxv32i16_unmasked:
1002 ; CHECK:       # %bb.0:
1003 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
1004 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1005 ; CHECK-NEXT:    ret
1006   %elt.head = insertelement <vscale x 32 x i16> poison, i16 4, i32 0
1007   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
1008   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
1009   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
1010   %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)
1011   ret <vscale x 32 x i16> %v
1014 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)
1016 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) {
1017 ; CHECK-LABEL: vsrl_vv_nxv1i32:
1018 ; CHECK:       # %bb.0:
1019 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1020 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
1021 ; CHECK-NEXT:    ret
1022   %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)
1023   ret <vscale x 1 x i32> %v
1026 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) {
1027 ; CHECK-LABEL: vsrl_vv_nxv1i32_unmasked:
1028 ; CHECK:       # %bb.0:
1029 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1030 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
1031 ; CHECK-NEXT:    ret
1032   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1033   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1034   %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)
1035   ret <vscale x 1 x i32> %v
1038 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) {
1039 ; CHECK-LABEL: vsrl_vx_nxv1i32:
1040 ; CHECK:       # %bb.0:
1041 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
1042 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1043 ; CHECK-NEXT:    ret
1044   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1045   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1046   %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)
1047   ret <vscale x 1 x i32> %v
1050 define <vscale x 1 x i32> @vsrl_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
1051 ; CHECK-LABEL: vsrl_vx_nxv1i32_unmasked:
1052 ; CHECK:       # %bb.0:
1053 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
1054 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1055 ; CHECK-NEXT:    ret
1056   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
1057   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1058   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1059   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1060   %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)
1061   ret <vscale x 1 x i32> %v
1064 define <vscale x 1 x i32> @vsrl_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1065 ; CHECK-LABEL: vsrl_vi_nxv1i32:
1066 ; CHECK:       # %bb.0:
1067 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1068 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1069 ; CHECK-NEXT:    ret
1070   %elt.head = insertelement <vscale x 1 x i32> poison, i32 4, i32 0
1071   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1072   %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)
1073   ret <vscale x 1 x i32> %v
1076 define <vscale x 1 x i32> @vsrl_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
1077 ; CHECK-LABEL: vsrl_vi_nxv1i32_unmasked:
1078 ; CHECK:       # %bb.0:
1079 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
1080 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1081 ; CHECK-NEXT:    ret
1082   %elt.head = insertelement <vscale x 1 x i32> poison, i32 4, i32 0
1083   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
1084   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1085   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1086   %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)
1087   ret <vscale x 1 x i32> %v
1090 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)
1092 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) {
1093 ; CHECK-LABEL: vsrl_vv_nxv2i32:
1094 ; CHECK:       # %bb.0:
1095 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1096 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
1097 ; CHECK-NEXT:    ret
1098   %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)
1099   ret <vscale x 2 x i32> %v
1102 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) {
1103 ; CHECK-LABEL: vsrl_vv_nxv2i32_unmasked:
1104 ; CHECK:       # %bb.0:
1105 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1106 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
1107 ; CHECK-NEXT:    ret
1108   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1109   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1110   %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)
1111   ret <vscale x 2 x i32> %v
1114 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) {
1115 ; CHECK-LABEL: vsrl_vx_nxv2i32:
1116 ; CHECK:       # %bb.0:
1117 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
1118 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1119 ; CHECK-NEXT:    ret
1120   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1121   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1122   %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)
1123   ret <vscale x 2 x i32> %v
1126 define <vscale x 2 x i32> @vsrl_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
1127 ; CHECK-LABEL: vsrl_vx_nxv2i32_unmasked:
1128 ; CHECK:       # %bb.0:
1129 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
1130 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1131 ; CHECK-NEXT:    ret
1132   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
1133   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1134   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1135   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1136   %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)
1137   ret <vscale x 2 x i32> %v
1140 define <vscale x 2 x i32> @vsrl_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1141 ; CHECK-LABEL: vsrl_vi_nxv2i32:
1142 ; CHECK:       # %bb.0:
1143 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1144 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1145 ; CHECK-NEXT:    ret
1146   %elt.head = insertelement <vscale x 2 x i32> poison, i32 4, i32 0
1147   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1148   %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)
1149   ret <vscale x 2 x i32> %v
1152 define <vscale x 2 x i32> @vsrl_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
1153 ; CHECK-LABEL: vsrl_vi_nxv2i32_unmasked:
1154 ; CHECK:       # %bb.0:
1155 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
1156 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1157 ; CHECK-NEXT:    ret
1158   %elt.head = insertelement <vscale x 2 x i32> poison, i32 4, i32 0
1159   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
1160   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1161   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1162   %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)
1163   ret <vscale x 2 x i32> %v
1166 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)
1168 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) {
1169 ; CHECK-LABEL: vsrl_vv_nxv4i32:
1170 ; CHECK:       # %bb.0:
1171 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1172 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1173 ; CHECK-NEXT:    ret
1174   %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)
1175   ret <vscale x 4 x i32> %v
1178 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) {
1179 ; CHECK-LABEL: vsrl_vv_nxv4i32_unmasked:
1180 ; CHECK:       # %bb.0:
1181 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1182 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1183 ; CHECK-NEXT:    ret
1184   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1185   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1186   %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)
1187   ret <vscale x 4 x i32> %v
1190 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) {
1191 ; CHECK-LABEL: vsrl_vx_nxv4i32:
1192 ; CHECK:       # %bb.0:
1193 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1194 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1195 ; CHECK-NEXT:    ret
1196   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1197   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1198   %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)
1199   ret <vscale x 4 x i32> %v
1202 define <vscale x 4 x i32> @vsrl_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
1203 ; CHECK-LABEL: vsrl_vx_nxv4i32_unmasked:
1204 ; CHECK:       # %bb.0:
1205 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
1206 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1207 ; CHECK-NEXT:    ret
1208   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
1209   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1210   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1211   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1212   %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)
1213   ret <vscale x 4 x i32> %v
1216 define <vscale x 4 x i32> @vsrl_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1217 ; CHECK-LABEL: vsrl_vi_nxv4i32:
1218 ; CHECK:       # %bb.0:
1219 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1220 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1221 ; CHECK-NEXT:    ret
1222   %elt.head = insertelement <vscale x 4 x i32> poison, i32 4, i32 0
1223   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1224   %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)
1225   ret <vscale x 4 x i32> %v
1228 define <vscale x 4 x i32> @vsrl_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
1229 ; CHECK-LABEL: vsrl_vi_nxv4i32_unmasked:
1230 ; CHECK:       # %bb.0:
1231 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
1232 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1233 ; CHECK-NEXT:    ret
1234   %elt.head = insertelement <vscale x 4 x i32> poison, i32 4, i32 0
1235   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
1236   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1237   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1238   %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)
1239   ret <vscale x 4 x i32> %v
1242 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)
1244 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) {
1245 ; CHECK-LABEL: vsrl_vv_nxv8i32:
1246 ; CHECK:       # %bb.0:
1247 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1248 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1249 ; CHECK-NEXT:    ret
1250   %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)
1251   ret <vscale x 8 x i32> %v
1254 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) {
1255 ; CHECK-LABEL: vsrl_vv_nxv8i32_unmasked:
1256 ; CHECK:       # %bb.0:
1257 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1258 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1259 ; CHECK-NEXT:    ret
1260   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1261   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1262   %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)
1263   ret <vscale x 8 x i32> %v
1266 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) {
1267 ; CHECK-LABEL: vsrl_vx_nxv8i32:
1268 ; CHECK:       # %bb.0:
1269 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1270 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1271 ; CHECK-NEXT:    ret
1272   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1273   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1274   %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)
1275   ret <vscale x 8 x i32> %v
1278 define <vscale x 8 x i32> @vsrl_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
1279 ; CHECK-LABEL: vsrl_vx_nxv8i32_unmasked:
1280 ; CHECK:       # %bb.0:
1281 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
1282 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1283 ; CHECK-NEXT:    ret
1284   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1285   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1286   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1287   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1288   %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)
1289   ret <vscale x 8 x i32> %v
1292 define <vscale x 8 x i32> @vsrl_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1293 ; CHECK-LABEL: vsrl_vi_nxv8i32:
1294 ; CHECK:       # %bb.0:
1295 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1296 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1297 ; CHECK-NEXT:    ret
1298   %elt.head = insertelement <vscale x 8 x i32> poison, i32 4, i32 0
1299   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1300   %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)
1301   ret <vscale x 8 x i32> %v
1304 define <vscale x 8 x i32> @vsrl_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
1305 ; CHECK-LABEL: vsrl_vi_nxv8i32_unmasked:
1306 ; CHECK:       # %bb.0:
1307 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
1308 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1309 ; CHECK-NEXT:    ret
1310   %elt.head = insertelement <vscale x 8 x i32> poison, i32 4, i32 0
1311   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1312   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1313   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1314   %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)
1315   ret <vscale x 8 x i32> %v
1318 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)
1320 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) {
1321 ; CHECK-LABEL: vsrl_vv_nxv16i32:
1322 ; CHECK:       # %bb.0:
1323 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1324 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1325 ; CHECK-NEXT:    ret
1326   %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)
1327   ret <vscale x 16 x i32> %v
1330 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) {
1331 ; CHECK-LABEL: vsrl_vv_nxv16i32_unmasked:
1332 ; CHECK:       # %bb.0:
1333 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1334 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1335 ; CHECK-NEXT:    ret
1336   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
1337   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
1338   %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)
1339   ret <vscale x 16 x i32> %v
1342 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) {
1343 ; CHECK-LABEL: vsrl_vx_nxv16i32:
1344 ; CHECK:       # %bb.0:
1345 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1346 ; CHECK-NEXT:    vsrl.vx v8, v8, a0, v0.t
1347 ; CHECK-NEXT:    ret
1348   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1349   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1350   %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)
1351   ret <vscale x 16 x i32> %v
1354 define <vscale x 16 x i32> @vsrl_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
1355 ; CHECK-LABEL: vsrl_vx_nxv16i32_unmasked:
1356 ; CHECK:       # %bb.0:
1357 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
1358 ; CHECK-NEXT:    vsrl.vx v8, v8, a0
1359 ; CHECK-NEXT:    ret
1360   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
1361   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1362   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
1363   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
1364   %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)
1365   ret <vscale x 16 x i32> %v
1368 define <vscale x 16 x i32> @vsrl_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
1369 ; CHECK-LABEL: vsrl_vi_nxv16i32:
1370 ; CHECK:       # %bb.0:
1371 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1372 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1373 ; CHECK-NEXT:    ret
1374   %elt.head = insertelement <vscale x 16 x i32> poison, i32 4, i32 0
1375   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1376   %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)
1377   ret <vscale x 16 x i32> %v
1380 define <vscale x 16 x i32> @vsrl_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
1381 ; CHECK-LABEL: vsrl_vi_nxv16i32_unmasked:
1382 ; CHECK:       # %bb.0:
1383 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
1384 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1385 ; CHECK-NEXT:    ret
1386   %elt.head = insertelement <vscale x 16 x i32> poison, i32 4, i32 0
1387   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
1388   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
1389   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
1390   %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)
1391   ret <vscale x 16 x i32> %v
1394 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)
1396 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) {
1397 ; CHECK-LABEL: vsrl_vv_nxv1i64:
1398 ; CHECK:       # %bb.0:
1399 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1400 ; CHECK-NEXT:    vsrl.vv v8, v8, v9, v0.t
1401 ; CHECK-NEXT:    ret
1402   %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)
1403   ret <vscale x 1 x i64> %v
1406 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) {
1407 ; CHECK-LABEL: vsrl_vv_nxv1i64_unmasked:
1408 ; CHECK:       # %bb.0:
1409 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1410 ; CHECK-NEXT:    vsrl.vv v8, v8, v9
1411 ; CHECK-NEXT:    ret
1412   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1413   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1414   %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)
1415   ret <vscale x 1 x i64> %v
1418 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) {
1419 ; RV32-LABEL: vsrl_vx_nxv1i64:
1420 ; RV32:       # %bb.0:
1421 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1422 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1423 ; RV32-NEXT:    ret
1425 ; RV64-LABEL: vsrl_vx_nxv1i64:
1426 ; RV64:       # %bb.0:
1427 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1428 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1429 ; RV64-NEXT:    ret
1430   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1431   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1432   %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)
1433   ret <vscale x 1 x i64> %v
1436 define <vscale x 1 x i64> @vsrl_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1437 ; RV32-LABEL: vsrl_vx_nxv1i64_unmasked:
1438 ; RV32:       # %bb.0:
1439 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1440 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1441 ; RV32-NEXT:    ret
1443 ; RV64-LABEL: vsrl_vx_nxv1i64_unmasked:
1444 ; RV64:       # %bb.0:
1445 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1446 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1447 ; RV64-NEXT:    ret
1448   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1449   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1450   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1451   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1452   %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)
1453   ret <vscale x 1 x i64> %v
1456 define <vscale x 1 x i64> @vsrl_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1457 ; CHECK-LABEL: vsrl_vi_nxv1i64:
1458 ; CHECK:       # %bb.0:
1459 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1460 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1461 ; CHECK-NEXT:    ret
1462   %elt.head = insertelement <vscale x 1 x i64> poison, i64 4, i32 0
1463   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1464   %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)
1465   ret <vscale x 1 x i64> %v
1468 define <vscale x 1 x i64> @vsrl_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1469 ; CHECK-LABEL: vsrl_vi_nxv1i64_unmasked:
1470 ; CHECK:       # %bb.0:
1471 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1472 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1473 ; CHECK-NEXT:    ret
1474   %elt.head = insertelement <vscale x 1 x i64> poison, i64 4, i32 0
1475   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1476   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1477   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1478   %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)
1479   ret <vscale x 1 x i64> %v
1482 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)
1484 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) {
1485 ; CHECK-LABEL: vsrl_vv_nxv2i64:
1486 ; CHECK:       # %bb.0:
1487 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1488 ; CHECK-NEXT:    vsrl.vv v8, v8, v10, v0.t
1489 ; CHECK-NEXT:    ret
1490   %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)
1491   ret <vscale x 2 x i64> %v
1494 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) {
1495 ; CHECK-LABEL: vsrl_vv_nxv2i64_unmasked:
1496 ; CHECK:       # %bb.0:
1497 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1498 ; CHECK-NEXT:    vsrl.vv v8, v8, v10
1499 ; CHECK-NEXT:    ret
1500   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1501   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1502   %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)
1503   ret <vscale x 2 x i64> %v
1506 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) {
1507 ; RV32-LABEL: vsrl_vx_nxv2i64:
1508 ; RV32:       # %bb.0:
1509 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1510 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1511 ; RV32-NEXT:    ret
1513 ; RV64-LABEL: vsrl_vx_nxv2i64:
1514 ; RV64:       # %bb.0:
1515 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1516 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1517 ; RV64-NEXT:    ret
1518   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1519   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1520   %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)
1521   ret <vscale x 2 x i64> %v
1524 define <vscale x 2 x i64> @vsrl_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1525 ; RV32-LABEL: vsrl_vx_nxv2i64_unmasked:
1526 ; RV32:       # %bb.0:
1527 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1528 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1529 ; RV32-NEXT:    ret
1531 ; RV64-LABEL: vsrl_vx_nxv2i64_unmasked:
1532 ; RV64:       # %bb.0:
1533 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1534 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1535 ; RV64-NEXT:    ret
1536   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1537   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1538   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1539   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1540   %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)
1541   ret <vscale x 2 x i64> %v
1544 define <vscale x 2 x i64> @vsrl_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1545 ; CHECK-LABEL: vsrl_vi_nxv2i64:
1546 ; CHECK:       # %bb.0:
1547 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1548 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1549 ; CHECK-NEXT:    ret
1550   %elt.head = insertelement <vscale x 2 x i64> poison, i64 4, i32 0
1551   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1552   %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)
1553   ret <vscale x 2 x i64> %v
1556 define <vscale x 2 x i64> @vsrl_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1557 ; CHECK-LABEL: vsrl_vi_nxv2i64_unmasked:
1558 ; CHECK:       # %bb.0:
1559 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1560 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1561 ; CHECK-NEXT:    ret
1562   %elt.head = insertelement <vscale x 2 x i64> poison, i64 4, i32 0
1563   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1564   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1565   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1566   %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)
1567   ret <vscale x 2 x i64> %v
1570 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)
1572 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) {
1573 ; CHECK-LABEL: vsrl_vv_nxv4i64:
1574 ; CHECK:       # %bb.0:
1575 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1576 ; CHECK-NEXT:    vsrl.vv v8, v8, v12, v0.t
1577 ; CHECK-NEXT:    ret
1578   %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)
1579   ret <vscale x 4 x i64> %v
1582 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) {
1583 ; CHECK-LABEL: vsrl_vv_nxv4i64_unmasked:
1584 ; CHECK:       # %bb.0:
1585 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1586 ; CHECK-NEXT:    vsrl.vv v8, v8, v12
1587 ; CHECK-NEXT:    ret
1588   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1589   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1590   %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)
1591   ret <vscale x 4 x i64> %v
1594 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) {
1595 ; RV32-LABEL: vsrl_vx_nxv4i64:
1596 ; RV32:       # %bb.0:
1597 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1598 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1599 ; RV32-NEXT:    ret
1601 ; RV64-LABEL: vsrl_vx_nxv4i64:
1602 ; RV64:       # %bb.0:
1603 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1604 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1605 ; RV64-NEXT:    ret
1606   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1607   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1608   %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)
1609   ret <vscale x 4 x i64> %v
1612 define <vscale x 4 x i64> @vsrl_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1613 ; RV32-LABEL: vsrl_vx_nxv4i64_unmasked:
1614 ; RV32:       # %bb.0:
1615 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1616 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1617 ; RV32-NEXT:    ret
1619 ; RV64-LABEL: vsrl_vx_nxv4i64_unmasked:
1620 ; RV64:       # %bb.0:
1621 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1622 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1623 ; RV64-NEXT:    ret
1624   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1625   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1626   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1627   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1628   %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)
1629   ret <vscale x 4 x i64> %v
1632 define <vscale x 4 x i64> @vsrl_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1633 ; CHECK-LABEL: vsrl_vi_nxv4i64:
1634 ; CHECK:       # %bb.0:
1635 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1636 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1637 ; CHECK-NEXT:    ret
1638   %elt.head = insertelement <vscale x 4 x i64> poison, i64 4, i32 0
1639   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1640   %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)
1641   ret <vscale x 4 x i64> %v
1644 define <vscale x 4 x i64> @vsrl_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1645 ; CHECK-LABEL: vsrl_vi_nxv4i64_unmasked:
1646 ; CHECK:       # %bb.0:
1647 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1648 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1649 ; CHECK-NEXT:    ret
1650   %elt.head = insertelement <vscale x 4 x i64> poison, i64 4, i32 0
1651   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1652   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1653   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1654   %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)
1655   ret <vscale x 4 x i64> %v
1658 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)
1660 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) {
1661 ; CHECK-LABEL: vsrl_vv_nxv5i64:
1662 ; CHECK:       # %bb.0:
1663 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1664 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1665 ; CHECK-NEXT:    ret
1666   %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)
1667   ret <vscale x 5 x i64> %v
1670 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)
1672 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) {
1673 ; CHECK-LABEL: vsrl_vv_nxv8i64:
1674 ; CHECK:       # %bb.0:
1675 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1676 ; CHECK-NEXT:    vsrl.vv v8, v8, v16, v0.t
1677 ; CHECK-NEXT:    ret
1678   %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)
1679   ret <vscale x 8 x i64> %v
1682 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) {
1683 ; CHECK-LABEL: vsrl_vv_nxv8i64_unmasked:
1684 ; CHECK:       # %bb.0:
1685 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1686 ; CHECK-NEXT:    vsrl.vv v8, v8, v16
1687 ; CHECK-NEXT:    ret
1688   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1689   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1690   %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)
1691   ret <vscale x 8 x i64> %v
1694 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) {
1695 ; RV32-LABEL: vsrl_vx_nxv8i64:
1696 ; RV32:       # %bb.0:
1697 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1698 ; RV32-NEXT:    vsrl.vx v8, v8, a0, v0.t
1699 ; RV32-NEXT:    ret
1701 ; RV64-LABEL: vsrl_vx_nxv8i64:
1702 ; RV64:       # %bb.0:
1703 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1704 ; RV64-NEXT:    vsrl.vx v8, v8, a0, v0.t
1705 ; RV64-NEXT:    ret
1706   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1707   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1708   %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)
1709   ret <vscale x 8 x i64> %v
1712 define <vscale x 8 x i64> @vsrl_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1713 ; RV32-LABEL: vsrl_vx_nxv8i64_unmasked:
1714 ; RV32:       # %bb.0:
1715 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1716 ; RV32-NEXT:    vsrl.vx v8, v8, a0
1717 ; RV32-NEXT:    ret
1719 ; RV64-LABEL: vsrl_vx_nxv8i64_unmasked:
1720 ; RV64:       # %bb.0:
1721 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1722 ; RV64-NEXT:    vsrl.vx v8, v8, a0
1723 ; RV64-NEXT:    ret
1724   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1725   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1726   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1727   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1728   %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)
1729   ret <vscale x 8 x i64> %v
1732 define <vscale x 8 x i64> @vsrl_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1733 ; CHECK-LABEL: vsrl_vi_nxv8i64:
1734 ; CHECK:       # %bb.0:
1735 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1736 ; CHECK-NEXT:    vsrl.vi v8, v8, 4, v0.t
1737 ; CHECK-NEXT:    ret
1738   %elt.head = insertelement <vscale x 8 x i64> poison, i64 4, i32 0
1739   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1740   %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)
1741   ret <vscale x 8 x i64> %v
1744 define <vscale x 8 x i64> @vsrl_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1745 ; CHECK-LABEL: vsrl_vi_nxv8i64_unmasked:
1746 ; CHECK:       # %bb.0:
1747 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1748 ; CHECK-NEXT:    vsrl.vi v8, v8, 4
1749 ; CHECK-NEXT:    ret
1750   %elt.head = insertelement <vscale x 8 x i64> poison, i64 4, i32 0
1751   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1752   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1753   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1754   %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)
1755   ret <vscale x 8 x i64> %v