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 <2 x i8> @llvm.vp.sub.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
9 define <2 x i8> @vrsub_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vrsub_vx_v2i8:
12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
13 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
15 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
16 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
17 %v = call <2 x i8> @llvm.vp.sub.v2i8(<2 x i8> %vb, <2 x i8> %va, <2 x i1> %m, i32 %evl)
21 define <2 x i8> @vrsub_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
22 ; CHECK-LABEL: vrsub_vx_v2i8_unmasked:
24 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
25 ; CHECK-NEXT: vrsub.vx v8, v8, a0
27 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
28 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
29 %v = call <2 x i8> @llvm.vp.sub.v2i8(<2 x i8> %vb, <2 x i8> %va, <2 x i1> splat (i1 true), i32 %evl)
33 define <2 x i8> @vrsub_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
34 ; CHECK-LABEL: vrsub_vi_v2i8:
36 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
37 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
39 %v = call <2 x i8> @llvm.vp.sub.v2i8(<2 x i8> splat (i8 2), <2 x i8> %va, <2 x i1> %m, i32 %evl)
43 define <2 x i8> @vrsub_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
44 ; CHECK-LABEL: vrsub_vi_v2i8_unmasked:
46 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
47 ; CHECK-NEXT: vrsub.vi v8, v8, 2
49 %v = call <2 x i8> @llvm.vp.sub.v2i8(<2 x i8> splat (i8 2), <2 x i8> %va, <2 x i1> splat (i1 true), i32 %evl)
53 declare <4 x i8> @llvm.vp.sub.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
55 define <4 x i8> @vrsub_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
56 ; CHECK-LABEL: vrsub_vx_v4i8:
58 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
59 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
61 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
62 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
63 %v = call <4 x i8> @llvm.vp.sub.v4i8(<4 x i8> %vb, <4 x i8> %va, <4 x i1> %m, i32 %evl)
67 define <4 x i8> @vrsub_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
68 ; CHECK-LABEL: vrsub_vx_v4i8_unmasked:
70 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
71 ; CHECK-NEXT: vrsub.vx v8, v8, a0
73 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
74 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
75 %v = call <4 x i8> @llvm.vp.sub.v4i8(<4 x i8> %vb, <4 x i8> %va, <4 x i1> splat (i1 true), i32 %evl)
79 define <4 x i8> @vrsub_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
80 ; CHECK-LABEL: vrsub_vi_v4i8:
82 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
83 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
85 %v = call <4 x i8> @llvm.vp.sub.v4i8(<4 x i8> splat (i8 2), <4 x i8> %va, <4 x i1> %m, i32 %evl)
89 define <4 x i8> @vrsub_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
90 ; CHECK-LABEL: vrsub_vi_v4i8_unmasked:
92 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
93 ; CHECK-NEXT: vrsub.vi v8, v8, 2
95 %v = call <4 x i8> @llvm.vp.sub.v4i8(<4 x i8> splat (i8 2), <4 x i8> %va, <4 x i1> splat (i1 true), i32 %evl)
99 declare <8 x i8> @llvm.vp.sub.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
101 define <8 x i8> @vrsub_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
102 ; CHECK-LABEL: vrsub_vx_v8i8:
104 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
105 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
107 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
108 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
109 %v = call <8 x i8> @llvm.vp.sub.v8i8(<8 x i8> %vb, <8 x i8> %va, <8 x i1> %m, i32 %evl)
113 define <8 x i8> @vrsub_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
114 ; CHECK-LABEL: vrsub_vx_v8i8_unmasked:
116 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
117 ; CHECK-NEXT: vrsub.vx v8, v8, a0
119 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
120 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
121 %v = call <8 x i8> @llvm.vp.sub.v8i8(<8 x i8> %vb, <8 x i8> %va, <8 x i1> splat (i1 true), i32 %evl)
125 define <8 x i8> @vrsub_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
126 ; CHECK-LABEL: vrsub_vi_v8i8:
128 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
129 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
131 %v = call <8 x i8> @llvm.vp.sub.v8i8(<8 x i8> splat (i8 2), <8 x i8> %va, <8 x i1> %m, i32 %evl)
135 define <8 x i8> @vrsub_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
136 ; CHECK-LABEL: vrsub_vi_v8i8_unmasked:
138 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
139 ; CHECK-NEXT: vrsub.vi v8, v8, 2
141 %v = call <8 x i8> @llvm.vp.sub.v8i8(<8 x i8> splat (i8 2), <8 x i8> %va, <8 x i1> splat (i1 true), i32 %evl)
145 declare <16 x i8> @llvm.vp.sub.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
147 define <16 x i8> @vrsub_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
148 ; CHECK-LABEL: vrsub_vx_v16i8:
150 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
151 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
153 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
154 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
155 %v = call <16 x i8> @llvm.vp.sub.v16i8(<16 x i8> %vb, <16 x i8> %va, <16 x i1> %m, i32 %evl)
159 define <16 x i8> @vrsub_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
160 ; CHECK-LABEL: vrsub_vx_v16i8_unmasked:
162 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
163 ; CHECK-NEXT: vrsub.vx v8, v8, a0
165 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
166 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
167 %v = call <16 x i8> @llvm.vp.sub.v16i8(<16 x i8> %vb, <16 x i8> %va, <16 x i1> splat (i1 true), i32 %evl)
171 define <16 x i8> @vrsub_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
172 ; CHECK-LABEL: vrsub_vi_v16i8:
174 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
175 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
177 %v = call <16 x i8> @llvm.vp.sub.v16i8(<16 x i8> splat (i8 2), <16 x i8> %va, <16 x i1> %m, i32 %evl)
181 define <16 x i8> @vrsub_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
182 ; CHECK-LABEL: vrsub_vi_v16i8_unmasked:
184 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
185 ; CHECK-NEXT: vrsub.vi v8, v8, 2
187 %v = call <16 x i8> @llvm.vp.sub.v16i8(<16 x i8> splat (i8 2), <16 x i8> %va, <16 x i1> splat (i1 true), i32 %evl)
191 declare <2 x i16> @llvm.vp.sub.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
193 define <2 x i16> @vrsub_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
194 ; CHECK-LABEL: vrsub_vx_v2i16:
196 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
197 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
199 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
200 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
201 %v = call <2 x i16> @llvm.vp.sub.v2i16(<2 x i16> %vb, <2 x i16> %va, <2 x i1> %m, i32 %evl)
205 define <2 x i16> @vrsub_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
206 ; CHECK-LABEL: vrsub_vx_v2i16_unmasked:
208 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
209 ; CHECK-NEXT: vrsub.vx v8, v8, a0
211 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
212 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
213 %v = call <2 x i16> @llvm.vp.sub.v2i16(<2 x i16> %vb, <2 x i16> %va, <2 x i1> splat (i1 true), i32 %evl)
217 define <2 x i16> @vrsub_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
218 ; CHECK-LABEL: vrsub_vi_v2i16:
220 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
221 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
223 %v = call <2 x i16> @llvm.vp.sub.v2i16(<2 x i16> splat (i16 2), <2 x i16> %va, <2 x i1> %m, i32 %evl)
227 define <2 x i16> @vrsub_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
228 ; CHECK-LABEL: vrsub_vi_v2i16_unmasked:
230 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
231 ; CHECK-NEXT: vrsub.vi v8, v8, 2
233 %v = call <2 x i16> @llvm.vp.sub.v2i16(<2 x i16> splat (i16 2), <2 x i16> %va, <2 x i1> splat (i1 true), i32 %evl)
237 declare <4 x i16> @llvm.vp.sub.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
239 define <4 x i16> @vrsub_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
240 ; CHECK-LABEL: vrsub_vx_v4i16:
242 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
243 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
245 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
246 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
247 %v = call <4 x i16> @llvm.vp.sub.v4i16(<4 x i16> %vb, <4 x i16> %va, <4 x i1> %m, i32 %evl)
251 define <4 x i16> @vrsub_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
252 ; CHECK-LABEL: vrsub_vx_v4i16_unmasked:
254 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
255 ; CHECK-NEXT: vrsub.vx v8, v8, a0
257 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
258 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
259 %v = call <4 x i16> @llvm.vp.sub.v4i16(<4 x i16> %vb, <4 x i16> %va, <4 x i1> splat (i1 true), i32 %evl)
263 define <4 x i16> @vrsub_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
264 ; CHECK-LABEL: vrsub_vi_v4i16:
266 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
267 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
269 %v = call <4 x i16> @llvm.vp.sub.v4i16(<4 x i16> splat (i16 2), <4 x i16> %va, <4 x i1> %m, i32 %evl)
273 define <4 x i16> @vrsub_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
274 ; CHECK-LABEL: vrsub_vi_v4i16_unmasked:
276 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
277 ; CHECK-NEXT: vrsub.vi v8, v8, 2
279 %v = call <4 x i16> @llvm.vp.sub.v4i16(<4 x i16> splat (i16 2), <4 x i16> %va, <4 x i1> splat (i1 true), i32 %evl)
283 declare <8 x i16> @llvm.vp.sub.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
285 define <8 x i16> @vrsub_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
286 ; CHECK-LABEL: vrsub_vx_v8i16:
288 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
289 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
291 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
292 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
293 %v = call <8 x i16> @llvm.vp.sub.v8i16(<8 x i16> %vb, <8 x i16> %va, <8 x i1> %m, i32 %evl)
297 define <8 x i16> @vrsub_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
298 ; CHECK-LABEL: vrsub_vx_v8i16_unmasked:
300 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
301 ; CHECK-NEXT: vrsub.vx v8, v8, a0
303 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
304 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
305 %v = call <8 x i16> @llvm.vp.sub.v8i16(<8 x i16> %vb, <8 x i16> %va, <8 x i1> splat (i1 true), i32 %evl)
309 define <8 x i16> @vrsub_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
310 ; CHECK-LABEL: vrsub_vi_v8i16:
312 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
313 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
315 %v = call <8 x i16> @llvm.vp.sub.v8i16(<8 x i16> splat (i16 2), <8 x i16> %va, <8 x i1> %m, i32 %evl)
319 define <8 x i16> @vrsub_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
320 ; CHECK-LABEL: vrsub_vi_v8i16_unmasked:
322 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
323 ; CHECK-NEXT: vrsub.vi v8, v8, 2
325 %v = call <8 x i16> @llvm.vp.sub.v8i16(<8 x i16> splat (i16 2), <8 x i16> %va, <8 x i1> splat (i1 true), i32 %evl)
329 declare <16 x i16> @llvm.vp.sub.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
331 define <16 x i16> @vrsub_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
332 ; CHECK-LABEL: vrsub_vx_v16i16:
334 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
335 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
337 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
338 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
339 %v = call <16 x i16> @llvm.vp.sub.v16i16(<16 x i16> %vb, <16 x i16> %va, <16 x i1> %m, i32 %evl)
343 define <16 x i16> @vrsub_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
344 ; CHECK-LABEL: vrsub_vx_v16i16_unmasked:
346 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
347 ; CHECK-NEXT: vrsub.vx v8, v8, a0
349 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
350 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
351 %v = call <16 x i16> @llvm.vp.sub.v16i16(<16 x i16> %vb, <16 x i16> %va, <16 x i1> splat (i1 true), i32 %evl)
355 define <16 x i16> @vrsub_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
356 ; CHECK-LABEL: vrsub_vi_v16i16:
358 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
359 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
361 %v = call <16 x i16> @llvm.vp.sub.v16i16(<16 x i16> splat (i16 2), <16 x i16> %va, <16 x i1> %m, i32 %evl)
365 define <16 x i16> @vrsub_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
366 ; CHECK-LABEL: vrsub_vi_v16i16_unmasked:
368 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
369 ; CHECK-NEXT: vrsub.vi v8, v8, 2
371 %v = call <16 x i16> @llvm.vp.sub.v16i16(<16 x i16> splat (i16 2), <16 x i16> %va, <16 x i1> splat (i1 true), i32 %evl)
375 declare <2 x i32> @llvm.vp.sub.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
377 define <2 x i32> @vrsub_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
378 ; CHECK-LABEL: vrsub_vx_v2i32:
380 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
381 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
383 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
384 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
385 %v = call <2 x i32> @llvm.vp.sub.v2i32(<2 x i32> %vb, <2 x i32> %va, <2 x i1> %m, i32 %evl)
389 define <2 x i32> @vrsub_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
390 ; CHECK-LABEL: vrsub_vx_v2i32_unmasked:
392 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
393 ; CHECK-NEXT: vrsub.vx v8, v8, a0
395 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
396 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
397 %v = call <2 x i32> @llvm.vp.sub.v2i32(<2 x i32> %vb, <2 x i32> %va, <2 x i1> splat (i1 true), i32 %evl)
401 define <2 x i32> @vrsub_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
402 ; CHECK-LABEL: vrsub_vi_v2i32:
404 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
405 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
407 %v = call <2 x i32> @llvm.vp.sub.v2i32(<2 x i32> splat (i32 2), <2 x i32> %va, <2 x i1> %m, i32 %evl)
411 define <2 x i32> @vrsub_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
412 ; CHECK-LABEL: vrsub_vi_v2i32_unmasked:
414 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
415 ; CHECK-NEXT: vrsub.vi v8, v8, 2
417 %v = call <2 x i32> @llvm.vp.sub.v2i32(<2 x i32> splat (i32 2), <2 x i32> %va, <2 x i1> splat (i1 true), i32 %evl)
421 declare <4 x i32> @llvm.vp.sub.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
423 define <4 x i32> @vrsub_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
424 ; CHECK-LABEL: vrsub_vx_v4i32:
426 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
427 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
429 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
430 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
431 %v = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %vb, <4 x i32> %va, <4 x i1> %m, i32 %evl)
435 define <4 x i32> @vrsub_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
436 ; CHECK-LABEL: vrsub_vx_v4i32_unmasked:
438 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
439 ; CHECK-NEXT: vrsub.vx v8, v8, a0
441 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
442 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
443 %v = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> %vb, <4 x i32> %va, <4 x i1> splat (i1 true), i32 %evl)
447 define <4 x i32> @vrsub_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
448 ; CHECK-LABEL: vrsub_vi_v4i32:
450 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
451 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
453 %v = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> splat (i32 2), <4 x i32> %va, <4 x i1> %m, i32 %evl)
457 define <4 x i32> @vrsub_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
458 ; CHECK-LABEL: vrsub_vi_v4i32_unmasked:
460 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
461 ; CHECK-NEXT: vrsub.vi v8, v8, 2
463 %v = call <4 x i32> @llvm.vp.sub.v4i32(<4 x i32> splat (i32 2), <4 x i32> %va, <4 x i1> splat (i1 true), i32 %evl)
467 declare <8 x i32> @llvm.vp.sub.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
469 define <8 x i32> @vrsub_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
470 ; CHECK-LABEL: vrsub_vx_v8i32:
472 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
473 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
475 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
476 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
477 %v = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> %vb, <8 x i32> %va, <8 x i1> %m, i32 %evl)
481 define <8 x i32> @vrsub_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
482 ; CHECK-LABEL: vrsub_vx_v8i32_unmasked:
484 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
485 ; CHECK-NEXT: vrsub.vx v8, v8, a0
487 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
488 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
489 %v = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> %vb, <8 x i32> %va, <8 x i1> splat (i1 true), i32 %evl)
493 define <8 x i32> @vrsub_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
494 ; CHECK-LABEL: vrsub_vi_v8i32:
496 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
497 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
499 %v = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> splat (i32 2), <8 x i32> %va, <8 x i1> %m, i32 %evl)
503 define <8 x i32> @vrsub_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
504 ; CHECK-LABEL: vrsub_vi_v8i32_unmasked:
506 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
507 ; CHECK-NEXT: vrsub.vi v8, v8, 2
509 %v = call <8 x i32> @llvm.vp.sub.v8i32(<8 x i32> splat (i32 2), <8 x i32> %va, <8 x i1> splat (i1 true), i32 %evl)
513 declare <16 x i32> @llvm.vp.sub.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
515 define <16 x i32> @vrsub_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
516 ; CHECK-LABEL: vrsub_vx_v16i32:
518 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
519 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
521 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
522 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
523 %v = call <16 x i32> @llvm.vp.sub.v16i32(<16 x i32> %vb, <16 x i32> %va, <16 x i1> %m, i32 %evl)
527 define <16 x i32> @vrsub_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
528 ; CHECK-LABEL: vrsub_vx_v16i32_unmasked:
530 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
531 ; CHECK-NEXT: vrsub.vx v8, v8, a0
533 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
534 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
535 %v = call <16 x i32> @llvm.vp.sub.v16i32(<16 x i32> %vb, <16 x i32> %va, <16 x i1> splat (i1 true), i32 %evl)
539 define <16 x i32> @vrsub_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
540 ; CHECK-LABEL: vrsub_vi_v16i32:
542 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
543 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
545 %v = call <16 x i32> @llvm.vp.sub.v16i32(<16 x i32> splat (i32 2), <16 x i32> %va, <16 x i1> %m, i32 %evl)
549 define <16 x i32> @vrsub_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
550 ; CHECK-LABEL: vrsub_vi_v16i32_unmasked:
552 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
553 ; CHECK-NEXT: vrsub.vi v8, v8, 2
555 %v = call <16 x i32> @llvm.vp.sub.v16i32(<16 x i32> splat (i32 2), <16 x i32> %va, <16 x i1> splat (i1 true), i32 %evl)
559 declare <2 x i64> @llvm.vp.sub.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
561 define <2 x i64> @vrsub_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
562 ; RV32-LABEL: vrsub_vx_v2i64:
564 ; RV32-NEXT: addi sp, sp, -16
565 ; RV32-NEXT: .cfi_def_cfa_offset 16
566 ; RV32-NEXT: sw a1, 12(sp)
567 ; RV32-NEXT: sw a0, 8(sp)
568 ; RV32-NEXT: addi a0, sp, 8
569 ; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
570 ; RV32-NEXT: vlse64.v v9, (a0), zero
571 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
572 ; RV32-NEXT: vsub.vv v8, v9, v8, v0.t
573 ; RV32-NEXT: addi sp, sp, 16
576 ; RV64-LABEL: vrsub_vx_v2i64:
578 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
579 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
581 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
582 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
583 %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> %vb, <2 x i64> %va, <2 x i1> %m, i32 %evl)
587 define <2 x i64> @vrsub_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
588 ; RV32-LABEL: vrsub_vx_v2i64_unmasked:
590 ; RV32-NEXT: addi sp, sp, -16
591 ; RV32-NEXT: .cfi_def_cfa_offset 16
592 ; RV32-NEXT: sw a1, 12(sp)
593 ; RV32-NEXT: sw a0, 8(sp)
594 ; RV32-NEXT: addi a0, sp, 8
595 ; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
596 ; RV32-NEXT: vlse64.v v9, (a0), zero
597 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
598 ; RV32-NEXT: vsub.vv v8, v9, v8
599 ; RV32-NEXT: addi sp, sp, 16
602 ; RV64-LABEL: vrsub_vx_v2i64_unmasked:
604 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
605 ; RV64-NEXT: vrsub.vx v8, v8, a0
607 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
608 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
609 %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> %vb, <2 x i64> %va, <2 x i1> splat (i1 true), i32 %evl)
613 define <2 x i64> @vrsub_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
614 ; CHECK-LABEL: vrsub_vi_v2i64:
616 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
617 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
619 %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> splat (i64 2), <2 x i64> %va, <2 x i1> %m, i32 %evl)
623 define <2 x i64> @vrsub_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
624 ; CHECK-LABEL: vrsub_vi_v2i64_unmasked:
626 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
627 ; CHECK-NEXT: vrsub.vi v8, v8, 2
629 %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> splat (i64 2), <2 x i64> %va, <2 x i1> splat (i1 true), i32 %evl)
633 declare <4 x i64> @llvm.vp.sub.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
635 define <4 x i64> @vrsub_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
636 ; RV32-LABEL: vrsub_vx_v4i64:
638 ; RV32-NEXT: addi sp, sp, -16
639 ; RV32-NEXT: .cfi_def_cfa_offset 16
640 ; RV32-NEXT: sw a1, 12(sp)
641 ; RV32-NEXT: sw a0, 8(sp)
642 ; RV32-NEXT: addi a0, sp, 8
643 ; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
644 ; RV32-NEXT: vlse64.v v10, (a0), zero
645 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
646 ; RV32-NEXT: vsub.vv v8, v10, v8, v0.t
647 ; RV32-NEXT: addi sp, sp, 16
650 ; RV64-LABEL: vrsub_vx_v4i64:
652 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
653 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
655 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
656 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
657 %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> %vb, <4 x i64> %va, <4 x i1> %m, i32 %evl)
661 define <4 x i64> @vrsub_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
662 ; RV32-LABEL: vrsub_vx_v4i64_unmasked:
664 ; RV32-NEXT: addi sp, sp, -16
665 ; RV32-NEXT: .cfi_def_cfa_offset 16
666 ; RV32-NEXT: sw a1, 12(sp)
667 ; RV32-NEXT: sw a0, 8(sp)
668 ; RV32-NEXT: addi a0, sp, 8
669 ; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
670 ; RV32-NEXT: vlse64.v v10, (a0), zero
671 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
672 ; RV32-NEXT: vsub.vv v8, v10, v8
673 ; RV32-NEXT: addi sp, sp, 16
676 ; RV64-LABEL: vrsub_vx_v4i64_unmasked:
678 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
679 ; RV64-NEXT: vrsub.vx v8, v8, a0
681 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
682 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
683 %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> %vb, <4 x i64> %va, <4 x i1> splat (i1 true), i32 %evl)
687 define <4 x i64> @vrsub_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
688 ; CHECK-LABEL: vrsub_vi_v4i64:
690 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
691 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
693 %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> splat (i64 2), <4 x i64> %va, <4 x i1> %m, i32 %evl)
697 define <4 x i64> @vrsub_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
698 ; CHECK-LABEL: vrsub_vi_v4i64_unmasked:
700 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
701 ; CHECK-NEXT: vrsub.vi v8, v8, 2
703 %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> splat (i64 2), <4 x i64> %va, <4 x i1> splat (i1 true), i32 %evl)
707 declare <8 x i64> @llvm.vp.sub.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
709 define <8 x i64> @vrsub_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
710 ; RV32-LABEL: vrsub_vx_v8i64:
712 ; RV32-NEXT: addi sp, sp, -16
713 ; RV32-NEXT: .cfi_def_cfa_offset 16
714 ; RV32-NEXT: sw a1, 12(sp)
715 ; RV32-NEXT: sw a0, 8(sp)
716 ; RV32-NEXT: addi a0, sp, 8
717 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
718 ; RV32-NEXT: vlse64.v v12, (a0), zero
719 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
720 ; RV32-NEXT: vsub.vv v8, v12, v8, v0.t
721 ; RV32-NEXT: addi sp, sp, 16
724 ; RV64-LABEL: vrsub_vx_v8i64:
726 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
727 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
729 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
730 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
731 %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> %vb, <8 x i64> %va, <8 x i1> %m, i32 %evl)
735 define <8 x i64> @vrsub_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
736 ; RV32-LABEL: vrsub_vx_v8i64_unmasked:
738 ; RV32-NEXT: addi sp, sp, -16
739 ; RV32-NEXT: .cfi_def_cfa_offset 16
740 ; RV32-NEXT: sw a1, 12(sp)
741 ; RV32-NEXT: sw a0, 8(sp)
742 ; RV32-NEXT: addi a0, sp, 8
743 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
744 ; RV32-NEXT: vlse64.v v12, (a0), zero
745 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
746 ; RV32-NEXT: vsub.vv v8, v12, v8
747 ; RV32-NEXT: addi sp, sp, 16
750 ; RV64-LABEL: vrsub_vx_v8i64_unmasked:
752 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
753 ; RV64-NEXT: vrsub.vx v8, v8, a0
755 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
756 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
757 %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> %vb, <8 x i64> %va, <8 x i1> splat (i1 true), i32 %evl)
761 define <8 x i64> @vrsub_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
762 ; CHECK-LABEL: vrsub_vi_v8i64:
764 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
765 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
767 %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> splat (i64 2), <8 x i64> %va, <8 x i1> %m, i32 %evl)
771 define <8 x i64> @vrsub_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
772 ; CHECK-LABEL: vrsub_vi_v8i64_unmasked:
774 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
775 ; CHECK-NEXT: vrsub.vi v8, v8, 2
777 %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> splat (i64 2), <8 x i64> %va, <8 x i1> splat (i1 true), i32 %evl)
781 declare <16 x i64> @llvm.vp.sub.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
783 define <16 x i64> @vrsub_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
784 ; RV32-LABEL: vrsub_vx_v16i64:
786 ; RV32-NEXT: addi sp, sp, -16
787 ; RV32-NEXT: .cfi_def_cfa_offset 16
788 ; RV32-NEXT: sw a1, 12(sp)
789 ; RV32-NEXT: sw a0, 8(sp)
790 ; RV32-NEXT: addi a0, sp, 8
791 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
792 ; RV32-NEXT: vlse64.v v16, (a0), zero
793 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
794 ; RV32-NEXT: vsub.vv v8, v16, v8, v0.t
795 ; RV32-NEXT: addi sp, sp, 16
798 ; RV64-LABEL: vrsub_vx_v16i64:
800 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
801 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
803 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
804 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
805 %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> %vb, <16 x i64> %va, <16 x i1> %m, i32 %evl)
809 define <16 x i64> @vrsub_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
810 ; RV32-LABEL: vrsub_vx_v16i64_unmasked:
812 ; RV32-NEXT: addi sp, sp, -16
813 ; RV32-NEXT: .cfi_def_cfa_offset 16
814 ; RV32-NEXT: sw a1, 12(sp)
815 ; RV32-NEXT: sw a0, 8(sp)
816 ; RV32-NEXT: addi a0, sp, 8
817 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
818 ; RV32-NEXT: vlse64.v v16, (a0), zero
819 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
820 ; RV32-NEXT: vsub.vv v8, v16, v8
821 ; RV32-NEXT: addi sp, sp, 16
824 ; RV64-LABEL: vrsub_vx_v16i64_unmasked:
826 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
827 ; RV64-NEXT: vrsub.vx v8, v8, a0
829 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
830 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
831 %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> %vb, <16 x i64> %va, <16 x i1> splat (i1 true), i32 %evl)
835 define <16 x i64> @vrsub_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
836 ; CHECK-LABEL: vrsub_vi_v16i64:
838 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
839 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
841 %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> splat (i64 2), <16 x i64> %va, <16 x i1> %m, i32 %evl)
845 define <16 x i64> @vrsub_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
846 ; CHECK-LABEL: vrsub_vi_v16i64_unmasked:
848 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
849 ; CHECK-NEXT: vrsub.vi v8, v8, 2
851 %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> splat (i64 2), <16 x i64> %va, <16 x i1> splat (i1 true), i32 %evl)