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 a0, 8(sp)
567 ; RV32-NEXT: sw a1, 12(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
574 ; RV32-NEXT: .cfi_def_cfa_offset 0
577 ; RV64-LABEL: vrsub_vx_v2i64:
579 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
580 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
582 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
583 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
584 %v = call <2 x i64> @llvm.vp.sub.v2i64(<2 x i64> %vb, <2 x i64> %va, <2 x i1> %m, i32 %evl)
588 define <2 x i64> @vrsub_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
589 ; RV32-LABEL: vrsub_vx_v2i64_unmasked:
591 ; RV32-NEXT: addi sp, sp, -16
592 ; RV32-NEXT: .cfi_def_cfa_offset 16
593 ; RV32-NEXT: sw a0, 8(sp)
594 ; RV32-NEXT: sw a1, 12(sp)
595 ; RV32-NEXT: addi a0, sp, 8
596 ; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma
597 ; RV32-NEXT: vlse64.v v9, (a0), zero
598 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
599 ; RV32-NEXT: vsub.vv v8, v9, v8
600 ; RV32-NEXT: addi sp, sp, 16
601 ; RV32-NEXT: .cfi_def_cfa_offset 0
604 ; RV64-LABEL: vrsub_vx_v2i64_unmasked:
606 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
607 ; RV64-NEXT: vrsub.vx v8, v8, a0
609 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
610 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
611 %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)
615 define <2 x i64> @vrsub_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
616 ; CHECK-LABEL: vrsub_vi_v2i64:
618 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
619 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
621 %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)
625 define <2 x i64> @vrsub_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
626 ; CHECK-LABEL: vrsub_vi_v2i64_unmasked:
628 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
629 ; CHECK-NEXT: vrsub.vi v8, v8, 2
631 %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)
635 declare <4 x i64> @llvm.vp.sub.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
637 define <4 x i64> @vrsub_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
638 ; RV32-LABEL: vrsub_vx_v4i64:
640 ; RV32-NEXT: addi sp, sp, -16
641 ; RV32-NEXT: .cfi_def_cfa_offset 16
642 ; RV32-NEXT: sw a0, 8(sp)
643 ; RV32-NEXT: sw a1, 12(sp)
644 ; RV32-NEXT: addi a0, sp, 8
645 ; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
646 ; RV32-NEXT: vlse64.v v10, (a0), zero
647 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
648 ; RV32-NEXT: vsub.vv v8, v10, v8, v0.t
649 ; RV32-NEXT: addi sp, sp, 16
650 ; RV32-NEXT: .cfi_def_cfa_offset 0
653 ; RV64-LABEL: vrsub_vx_v4i64:
655 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
656 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
658 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
659 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
660 %v = call <4 x i64> @llvm.vp.sub.v4i64(<4 x i64> %vb, <4 x i64> %va, <4 x i1> %m, i32 %evl)
664 define <4 x i64> @vrsub_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
665 ; RV32-LABEL: vrsub_vx_v4i64_unmasked:
667 ; RV32-NEXT: addi sp, sp, -16
668 ; RV32-NEXT: .cfi_def_cfa_offset 16
669 ; RV32-NEXT: sw a0, 8(sp)
670 ; RV32-NEXT: sw a1, 12(sp)
671 ; RV32-NEXT: addi a0, sp, 8
672 ; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma
673 ; RV32-NEXT: vlse64.v v10, (a0), zero
674 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
675 ; RV32-NEXT: vsub.vv v8, v10, v8
676 ; RV32-NEXT: addi sp, sp, 16
677 ; RV32-NEXT: .cfi_def_cfa_offset 0
680 ; RV64-LABEL: vrsub_vx_v4i64_unmasked:
682 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
683 ; RV64-NEXT: vrsub.vx v8, v8, a0
685 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
686 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
687 %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)
691 define <4 x i64> @vrsub_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
692 ; CHECK-LABEL: vrsub_vi_v4i64:
694 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
695 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
697 %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)
701 define <4 x i64> @vrsub_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
702 ; CHECK-LABEL: vrsub_vi_v4i64_unmasked:
704 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
705 ; CHECK-NEXT: vrsub.vi v8, v8, 2
707 %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)
711 declare <8 x i64> @llvm.vp.sub.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
713 define <8 x i64> @vrsub_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
714 ; RV32-LABEL: vrsub_vx_v8i64:
716 ; RV32-NEXT: addi sp, sp, -16
717 ; RV32-NEXT: .cfi_def_cfa_offset 16
718 ; RV32-NEXT: sw a0, 8(sp)
719 ; RV32-NEXT: sw a1, 12(sp)
720 ; RV32-NEXT: addi a0, sp, 8
721 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
722 ; RV32-NEXT: vlse64.v v12, (a0), zero
723 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
724 ; RV32-NEXT: vsub.vv v8, v12, v8, v0.t
725 ; RV32-NEXT: addi sp, sp, 16
726 ; RV32-NEXT: .cfi_def_cfa_offset 0
729 ; RV64-LABEL: vrsub_vx_v8i64:
731 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
732 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
734 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
735 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
736 %v = call <8 x i64> @llvm.vp.sub.v8i64(<8 x i64> %vb, <8 x i64> %va, <8 x i1> %m, i32 %evl)
740 define <8 x i64> @vrsub_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
741 ; RV32-LABEL: vrsub_vx_v8i64_unmasked:
743 ; RV32-NEXT: addi sp, sp, -16
744 ; RV32-NEXT: .cfi_def_cfa_offset 16
745 ; RV32-NEXT: sw a0, 8(sp)
746 ; RV32-NEXT: sw a1, 12(sp)
747 ; RV32-NEXT: addi a0, sp, 8
748 ; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma
749 ; RV32-NEXT: vlse64.v v12, (a0), zero
750 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
751 ; RV32-NEXT: vsub.vv v8, v12, v8
752 ; RV32-NEXT: addi sp, sp, 16
753 ; RV32-NEXT: .cfi_def_cfa_offset 0
756 ; RV64-LABEL: vrsub_vx_v8i64_unmasked:
758 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
759 ; RV64-NEXT: vrsub.vx v8, v8, a0
761 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
762 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
763 %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)
767 define <8 x i64> @vrsub_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
768 ; CHECK-LABEL: vrsub_vi_v8i64:
770 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
771 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
773 %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)
777 define <8 x i64> @vrsub_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
778 ; CHECK-LABEL: vrsub_vi_v8i64_unmasked:
780 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
781 ; CHECK-NEXT: vrsub.vi v8, v8, 2
783 %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)
787 declare <16 x i64> @llvm.vp.sub.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
789 define <16 x i64> @vrsub_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
790 ; RV32-LABEL: vrsub_vx_v16i64:
792 ; RV32-NEXT: addi sp, sp, -16
793 ; RV32-NEXT: .cfi_def_cfa_offset 16
794 ; RV32-NEXT: sw a0, 8(sp)
795 ; RV32-NEXT: sw a1, 12(sp)
796 ; RV32-NEXT: addi a0, sp, 8
797 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
798 ; RV32-NEXT: vlse64.v v16, (a0), zero
799 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
800 ; RV32-NEXT: vsub.vv v8, v16, v8, v0.t
801 ; RV32-NEXT: addi sp, sp, 16
802 ; RV32-NEXT: .cfi_def_cfa_offset 0
805 ; RV64-LABEL: vrsub_vx_v16i64:
807 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
808 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
810 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
811 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
812 %v = call <16 x i64> @llvm.vp.sub.v16i64(<16 x i64> %vb, <16 x i64> %va, <16 x i1> %m, i32 %evl)
816 define <16 x i64> @vrsub_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
817 ; RV32-LABEL: vrsub_vx_v16i64_unmasked:
819 ; RV32-NEXT: addi sp, sp, -16
820 ; RV32-NEXT: .cfi_def_cfa_offset 16
821 ; RV32-NEXT: sw a0, 8(sp)
822 ; RV32-NEXT: sw a1, 12(sp)
823 ; RV32-NEXT: addi a0, sp, 8
824 ; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma
825 ; RV32-NEXT: vlse64.v v16, (a0), zero
826 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
827 ; RV32-NEXT: vsub.vv v8, v16, v8
828 ; RV32-NEXT: addi sp, sp, 16
829 ; RV32-NEXT: .cfi_def_cfa_offset 0
832 ; RV64-LABEL: vrsub_vx_v16i64_unmasked:
834 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
835 ; RV64-NEXT: vrsub.vx v8, v8, a0
837 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
838 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
839 %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)
843 define <16 x i64> @vrsub_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
844 ; CHECK-LABEL: vrsub_vi_v16i64:
846 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
847 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
849 %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)
853 define <16 x i64> @vrsub_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
854 ; CHECK-LABEL: vrsub_vi_v16i64_unmasked:
856 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
857 ; CHECK-NEXT: vrsub.vi v8, v8, 2
859 %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)