Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vrsub-vp.ll
blob563482b88e8bdbc60d2a4c8b23b66a4cccfa92ae
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:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
13 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
14 ; CHECK-NEXT:    ret
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)
18   ret <2 x i8> %v
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:
23 ; CHECK:       # %bb.0:
24 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
25 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
26 ; CHECK-NEXT:    ret
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)
30   ret <2 x i8> %v
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:
35 ; CHECK:       # %bb.0:
36 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
37 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
38 ; CHECK-NEXT:    ret
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)
40   ret <2 x i8> %v
43 define <2 x i8> @vrsub_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
44 ; CHECK-LABEL: vrsub_vi_v2i8_unmasked:
45 ; CHECK:       # %bb.0:
46 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
47 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
48 ; CHECK-NEXT:    ret
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)
50   ret <2 x i8> %v
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:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
59 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
60 ; CHECK-NEXT:    ret
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)
64   ret <4 x i8> %v
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:
69 ; CHECK:       # %bb.0:
70 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
71 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
72 ; CHECK-NEXT:    ret
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)
76   ret <4 x i8> %v
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:
81 ; CHECK:       # %bb.0:
82 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
83 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
84 ; CHECK-NEXT:    ret
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)
86   ret <4 x i8> %v
89 define <4 x i8> @vrsub_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
90 ; CHECK-LABEL: vrsub_vi_v4i8_unmasked:
91 ; CHECK:       # %bb.0:
92 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
93 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
94 ; CHECK-NEXT:    ret
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)
96   ret <4 x i8> %v
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:
103 ; CHECK:       # %bb.0:
104 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
105 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
106 ; CHECK-NEXT:    ret
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)
110   ret <8 x i8> %v
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:
115 ; CHECK:       # %bb.0:
116 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
117 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
118 ; CHECK-NEXT:    ret
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)
122   ret <8 x i8> %v
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:
127 ; CHECK:       # %bb.0:
128 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
129 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
130 ; CHECK-NEXT:    ret
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)
132   ret <8 x i8> %v
135 define <8 x i8> @vrsub_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
136 ; CHECK-LABEL: vrsub_vi_v8i8_unmasked:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
139 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
140 ; CHECK-NEXT:    ret
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)
142   ret <8 x i8> %v
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:
149 ; CHECK:       # %bb.0:
150 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
151 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
152 ; CHECK-NEXT:    ret
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)
156   ret <16 x i8> %v
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:
161 ; CHECK:       # %bb.0:
162 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
163 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
164 ; CHECK-NEXT:    ret
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)
168   ret <16 x i8> %v
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:
173 ; CHECK:       # %bb.0:
174 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
175 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
176 ; CHECK-NEXT:    ret
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)
178   ret <16 x i8> %v
181 define <16 x i8> @vrsub_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
182 ; CHECK-LABEL: vrsub_vi_v16i8_unmasked:
183 ; CHECK:       # %bb.0:
184 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
185 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
186 ; CHECK-NEXT:    ret
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)
188   ret <16 x i8> %v
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:
195 ; CHECK:       # %bb.0:
196 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
197 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
198 ; CHECK-NEXT:    ret
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)
202   ret <2 x i16> %v
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:
207 ; CHECK:       # %bb.0:
208 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
209 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
210 ; CHECK-NEXT:    ret
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)
214   ret <2 x i16> %v
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:
219 ; CHECK:       # %bb.0:
220 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
221 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
222 ; CHECK-NEXT:    ret
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)
224   ret <2 x i16> %v
227 define <2 x i16> @vrsub_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
228 ; CHECK-LABEL: vrsub_vi_v2i16_unmasked:
229 ; CHECK:       # %bb.0:
230 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
231 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
232 ; CHECK-NEXT:    ret
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)
234   ret <2 x i16> %v
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:
241 ; CHECK:       # %bb.0:
242 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
243 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
244 ; CHECK-NEXT:    ret
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)
248   ret <4 x i16> %v
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:
253 ; CHECK:       # %bb.0:
254 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
255 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
256 ; CHECK-NEXT:    ret
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)
260   ret <4 x i16> %v
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:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
267 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
268 ; CHECK-NEXT:    ret
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)
270   ret <4 x i16> %v
273 define <4 x i16> @vrsub_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
274 ; CHECK-LABEL: vrsub_vi_v4i16_unmasked:
275 ; CHECK:       # %bb.0:
276 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
277 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
278 ; CHECK-NEXT:    ret
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)
280   ret <4 x i16> %v
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:
287 ; CHECK:       # %bb.0:
288 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
289 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
290 ; CHECK-NEXT:    ret
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)
294   ret <8 x i16> %v
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:
299 ; CHECK:       # %bb.0:
300 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
301 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
302 ; CHECK-NEXT:    ret
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)
306   ret <8 x i16> %v
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:
311 ; CHECK:       # %bb.0:
312 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
313 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
314 ; CHECK-NEXT:    ret
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)
316   ret <8 x i16> %v
319 define <8 x i16> @vrsub_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
320 ; CHECK-LABEL: vrsub_vi_v8i16_unmasked:
321 ; CHECK:       # %bb.0:
322 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
323 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
324 ; CHECK-NEXT:    ret
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)
326   ret <8 x i16> %v
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:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
335 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
336 ; CHECK-NEXT:    ret
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)
340   ret <16 x i16> %v
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:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
347 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
348 ; CHECK-NEXT:    ret
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)
352   ret <16 x i16> %v
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:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
359 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
360 ; CHECK-NEXT:    ret
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)
362   ret <16 x i16> %v
365 define <16 x i16> @vrsub_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
366 ; CHECK-LABEL: vrsub_vi_v16i16_unmasked:
367 ; CHECK:       # %bb.0:
368 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
369 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
370 ; CHECK-NEXT:    ret
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)
372   ret <16 x i16> %v
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:
379 ; CHECK:       # %bb.0:
380 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
381 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
382 ; CHECK-NEXT:    ret
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)
386   ret <2 x i32> %v
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:
391 ; CHECK:       # %bb.0:
392 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
393 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
394 ; CHECK-NEXT:    ret
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)
398   ret <2 x i32> %v
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:
403 ; CHECK:       # %bb.0:
404 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
405 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
406 ; CHECK-NEXT:    ret
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)
408   ret <2 x i32> %v
411 define <2 x i32> @vrsub_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
412 ; CHECK-LABEL: vrsub_vi_v2i32_unmasked:
413 ; CHECK:       # %bb.0:
414 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
415 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
416 ; CHECK-NEXT:    ret
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)
418   ret <2 x i32> %v
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:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
427 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
428 ; CHECK-NEXT:    ret
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)
432   ret <4 x i32> %v
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:
437 ; CHECK:       # %bb.0:
438 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
439 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
440 ; CHECK-NEXT:    ret
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)
444   ret <4 x i32> %v
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:
449 ; CHECK:       # %bb.0:
450 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
451 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
452 ; CHECK-NEXT:    ret
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)
454   ret <4 x i32> %v
457 define <4 x i32> @vrsub_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
458 ; CHECK-LABEL: vrsub_vi_v4i32_unmasked:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
461 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
462 ; CHECK-NEXT:    ret
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)
464   ret <4 x i32> %v
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:
471 ; CHECK:       # %bb.0:
472 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
473 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
474 ; CHECK-NEXT:    ret
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)
478   ret <8 x i32> %v
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:
483 ; CHECK:       # %bb.0:
484 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
485 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
486 ; CHECK-NEXT:    ret
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)
490   ret <8 x i32> %v
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:
495 ; CHECK:       # %bb.0:
496 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
497 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
498 ; CHECK-NEXT:    ret
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)
500   ret <8 x i32> %v
503 define <8 x i32> @vrsub_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
504 ; CHECK-LABEL: vrsub_vi_v8i32_unmasked:
505 ; CHECK:       # %bb.0:
506 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
507 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
508 ; CHECK-NEXT:    ret
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)
510   ret <8 x i32> %v
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:
517 ; CHECK:       # %bb.0:
518 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
519 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
520 ; CHECK-NEXT:    ret
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)
524   ret <16 x i32> %v
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:
529 ; CHECK:       # %bb.0:
530 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
531 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
532 ; CHECK-NEXT:    ret
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)
536   ret <16 x i32> %v
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:
541 ; CHECK:       # %bb.0:
542 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
543 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
544 ; CHECK-NEXT:    ret
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)
546   ret <16 x i32> %v
549 define <16 x i32> @vrsub_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
550 ; CHECK-LABEL: vrsub_vi_v16i32_unmasked:
551 ; CHECK:       # %bb.0:
552 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
553 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
554 ; CHECK-NEXT:    ret
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)
556   ret <16 x i32> %v
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:
563 ; RV32:       # %bb.0:
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
574 ; RV32-NEXT:    ret
576 ; RV64-LABEL: vrsub_vx_v2i64:
577 ; RV64:       # %bb.0:
578 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
579 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
580 ; RV64-NEXT:    ret
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)
584   ret <2 x i64> %v
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:
589 ; RV32:       # %bb.0:
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
600 ; RV32-NEXT:    ret
602 ; RV64-LABEL: vrsub_vx_v2i64_unmasked:
603 ; RV64:       # %bb.0:
604 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
605 ; RV64-NEXT:    vrsub.vx v8, v8, a0
606 ; RV64-NEXT:    ret
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)
610   ret <2 x i64> %v
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:
615 ; CHECK:       # %bb.0:
616 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
617 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
618 ; CHECK-NEXT:    ret
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)
620   ret <2 x i64> %v
623 define <2 x i64> @vrsub_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
624 ; CHECK-LABEL: vrsub_vi_v2i64_unmasked:
625 ; CHECK:       # %bb.0:
626 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
627 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
628 ; CHECK-NEXT:    ret
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)
630   ret <2 x i64> %v
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:
637 ; RV32:       # %bb.0:
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
648 ; RV32-NEXT:    ret
650 ; RV64-LABEL: vrsub_vx_v4i64:
651 ; RV64:       # %bb.0:
652 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
653 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
654 ; RV64-NEXT:    ret
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)
658   ret <4 x i64> %v
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:
663 ; RV32:       # %bb.0:
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
674 ; RV32-NEXT:    ret
676 ; RV64-LABEL: vrsub_vx_v4i64_unmasked:
677 ; RV64:       # %bb.0:
678 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
679 ; RV64-NEXT:    vrsub.vx v8, v8, a0
680 ; RV64-NEXT:    ret
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)
684   ret <4 x i64> %v
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:
689 ; CHECK:       # %bb.0:
690 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
691 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
692 ; CHECK-NEXT:    ret
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)
694   ret <4 x i64> %v
697 define <4 x i64> @vrsub_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
698 ; CHECK-LABEL: vrsub_vi_v4i64_unmasked:
699 ; CHECK:       # %bb.0:
700 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
701 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
702 ; CHECK-NEXT:    ret
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)
704   ret <4 x i64> %v
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:
711 ; RV32:       # %bb.0:
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
722 ; RV32-NEXT:    ret
724 ; RV64-LABEL: vrsub_vx_v8i64:
725 ; RV64:       # %bb.0:
726 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
727 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
728 ; RV64-NEXT:    ret
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)
732   ret <8 x i64> %v
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:
737 ; RV32:       # %bb.0:
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
748 ; RV32-NEXT:    ret
750 ; RV64-LABEL: vrsub_vx_v8i64_unmasked:
751 ; RV64:       # %bb.0:
752 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
753 ; RV64-NEXT:    vrsub.vx v8, v8, a0
754 ; RV64-NEXT:    ret
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)
758   ret <8 x i64> %v
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:
763 ; CHECK:       # %bb.0:
764 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
765 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
766 ; CHECK-NEXT:    ret
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)
768   ret <8 x i64> %v
771 define <8 x i64> @vrsub_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
772 ; CHECK-LABEL: vrsub_vi_v8i64_unmasked:
773 ; CHECK:       # %bb.0:
774 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
775 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
776 ; CHECK-NEXT:    ret
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)
778   ret <8 x i64> %v
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:
785 ; RV32:       # %bb.0:
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
796 ; RV32-NEXT:    ret
798 ; RV64-LABEL: vrsub_vx_v16i64:
799 ; RV64:       # %bb.0:
800 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
801 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
802 ; RV64-NEXT:    ret
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)
806   ret <16 x i64> %v
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:
811 ; RV32:       # %bb.0:
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
822 ; RV32-NEXT:    ret
824 ; RV64-LABEL: vrsub_vx_v16i64_unmasked:
825 ; RV64:       # %bb.0:
826 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
827 ; RV64-NEXT:    vrsub.vx v8, v8, a0
828 ; RV64-NEXT:    ret
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)
832   ret <16 x i64> %v
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:
837 ; CHECK:       # %bb.0:
838 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
839 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
840 ; CHECK-NEXT:    ret
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)
842   ret <16 x i64> %v
845 define <16 x i64> @vrsub_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
846 ; CHECK-LABEL: vrsub_vi_v16i64_unmasked:
847 ; CHECK:       # %bb.0:
848 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
849 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
850 ; CHECK-NEXT:    ret
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)
852   ret <16 x i64> %v