Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vrsub-vp.ll
blobbe372c9aa54d5d049e2f4e06dccd9fc31f2e2860
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV32
4 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5 ; RUN:   | FileCheck %s --check-prefixes=CHECK,RV64
7 declare <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8>, <vscale x 1 x i8>, <vscale x 1 x i1>, i32)
9 define <vscale x 1 x i8> @vrsub_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vrsub_vx_nxv1i8:
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 <vscale x 1 x i8> poison, i8 %b, i32 0
16   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
17   %v = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)
18   ret <vscale x 1 x i8> %v
21 define <vscale x 1 x i8> @vrsub_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
22 ; CHECK-LABEL: vrsub_vx_nxv1i8_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 <vscale x 1 x i8> poison, i8 %b, i32 0
28   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
29   %v = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
30   ret <vscale x 1 x i8> %v
33 define <vscale x 1 x i8> @vrsub_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
34 ; CHECK-LABEL: vrsub_vi_nxv1i8:
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 <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> splat (i8 2), <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)
40   ret <vscale x 1 x i8> %v
43 define <vscale x 1 x i8> @vrsub_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
44 ; CHECK-LABEL: vrsub_vi_nxv1i8_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 <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> splat (i8 2), <vscale x 1 x i8> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
50   ret <vscale x 1 x i8> %v
53 declare <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8>, <vscale x 2 x i8>, <vscale x 2 x i1>, i32)
55 define <vscale x 2 x i8> @vrsub_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
56 ; CHECK-LABEL: vrsub_vx_nxv2i8:
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 <vscale x 2 x i8> poison, i8 %b, i32 0
62   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
63   %v = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %vb, <vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
64   ret <vscale x 2 x i8> %v
67 define <vscale x 2 x i8> @vrsub_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
68 ; CHECK-LABEL: vrsub_vx_nxv2i8_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 <vscale x 2 x i8> poison, i8 %b, i32 0
74   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
75   %v = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %vb, <vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
76   ret <vscale x 2 x i8> %v
79 define <vscale x 2 x i8> @vrsub_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
80 ; CHECK-LABEL: vrsub_vi_nxv2i8:
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 <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> splat (i8 2), <vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 %evl)
86   ret <vscale x 2 x i8> %v
89 define <vscale x 2 x i8> @vrsub_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
90 ; CHECK-LABEL: vrsub_vi_nxv2i8_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 <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> splat (i8 2), <vscale x 2 x i8> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
96   ret <vscale x 2 x i8> %v
99 declare <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8>, <vscale x 4 x i8>, <vscale x 4 x i1>, i32)
101 define <vscale x 4 x i8> @vrsub_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
102 ; CHECK-LABEL: vrsub_vx_nxv4i8:
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 <vscale x 4 x i8> poison, i8 %b, i32 0
108   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
109   %v = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %vb, <vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 %evl)
110   ret <vscale x 4 x i8> %v
113 define <vscale x 4 x i8> @vrsub_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
114 ; CHECK-LABEL: vrsub_vx_nxv4i8_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 <vscale x 4 x i8> poison, i8 %b, i32 0
120   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
121   %v = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %vb, <vscale x 4 x i8> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
122   ret <vscale x 4 x i8> %v
125 define <vscale x 4 x i8> @vrsub_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
126 ; CHECK-LABEL: vrsub_vi_nxv4i8:
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 <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> splat (i8 2), <vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 %evl)
132   ret <vscale x 4 x i8> %v
135 define <vscale x 4 x i8> @vrsub_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
136 ; CHECK-LABEL: vrsub_vi_nxv4i8_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 <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> splat (i8 2), <vscale x 4 x i8> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
142   ret <vscale x 4 x i8> %v
145 declare <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8>, <vscale x 8 x i8>, <vscale x 8 x i1>, i32)
147 define <vscale x 8 x i8> @vrsub_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
148 ; CHECK-LABEL: vrsub_vx_nxv8i8:
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 <vscale x 8 x i8> poison, i8 %b, i32 0
154   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
155   %v = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %vb, <vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 %evl)
156   ret <vscale x 8 x i8> %v
159 define <vscale x 8 x i8> @vrsub_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
160 ; CHECK-LABEL: vrsub_vx_nxv8i8_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 <vscale x 8 x i8> poison, i8 %b, i32 0
166   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
167   %v = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %vb, <vscale x 8 x i8> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
168   ret <vscale x 8 x i8> %v
171 define <vscale x 8 x i8> @vrsub_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
172 ; CHECK-LABEL: vrsub_vi_nxv8i8:
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 <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> splat (i8 2), <vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 %evl)
178   ret <vscale x 8 x i8> %v
181 define <vscale x 8 x i8> @vrsub_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
182 ; CHECK-LABEL: vrsub_vi_nxv8i8_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 <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> splat (i8 2), <vscale x 8 x i8> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
188   ret <vscale x 8 x i8> %v
191 declare <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8>, <vscale x 16 x i8>, <vscale x 16 x i1>, i32)
193 define <vscale x 16 x i8> @vrsub_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
194 ; CHECK-LABEL: vrsub_vx_nxv16i8:
195 ; CHECK:       # %bb.0:
196 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
197 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
198 ; CHECK-NEXT:    ret
199   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
200   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
201   %v = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %vb, <vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 %evl)
202   ret <vscale x 16 x i8> %v
205 define <vscale x 16 x i8> @vrsub_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
206 ; CHECK-LABEL: vrsub_vx_nxv16i8_unmasked:
207 ; CHECK:       # %bb.0:
208 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
209 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
210 ; CHECK-NEXT:    ret
211   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
212   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
213   %v = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %vb, <vscale x 16 x i8> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
214   ret <vscale x 16 x i8> %v
217 define <vscale x 16 x i8> @vrsub_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
218 ; CHECK-LABEL: vrsub_vi_nxv16i8:
219 ; CHECK:       # %bb.0:
220 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
221 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
222 ; CHECK-NEXT:    ret
223   %v = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> splat (i8 2), <vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 %evl)
224   ret <vscale x 16 x i8> %v
227 define <vscale x 16 x i8> @vrsub_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
228 ; CHECK-LABEL: vrsub_vi_nxv16i8_unmasked:
229 ; CHECK:       # %bb.0:
230 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
231 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
232 ; CHECK-NEXT:    ret
233   %v = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> splat (i8 2), <vscale x 16 x i8> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
234   ret <vscale x 16 x i8> %v
237 declare <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8>, <vscale x 32 x i8>, <vscale x 32 x i1>, i32)
239 define <vscale x 32 x i8> @vrsub_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
240 ; CHECK-LABEL: vrsub_vx_nxv32i8:
241 ; CHECK:       # %bb.0:
242 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
243 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
244 ; CHECK-NEXT:    ret
245   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
246   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
247   %v = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %vb, <vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 %evl)
248   ret <vscale x 32 x i8> %v
251 define <vscale x 32 x i8> @vrsub_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
252 ; CHECK-LABEL: vrsub_vx_nxv32i8_unmasked:
253 ; CHECK:       # %bb.0:
254 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
255 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
256 ; CHECK-NEXT:    ret
257   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
258   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
259   %v = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %vb, <vscale x 32 x i8> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
260   ret <vscale x 32 x i8> %v
263 define <vscale x 32 x i8> @vrsub_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
264 ; CHECK-LABEL: vrsub_vi_nxv32i8:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
267 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
268 ; CHECK-NEXT:    ret
269   %v = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> splat (i8 2), <vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 %evl)
270   ret <vscale x 32 x i8> %v
273 define <vscale x 32 x i8> @vrsub_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
274 ; CHECK-LABEL: vrsub_vi_nxv32i8_unmasked:
275 ; CHECK:       # %bb.0:
276 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
277 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
278 ; CHECK-NEXT:    ret
279   %v = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> splat (i8 2), <vscale x 32 x i8> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
280   ret <vscale x 32 x i8> %v
283 declare <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8>, <vscale x 64 x i8>, <vscale x 64 x i1>, i32)
285 define <vscale x 64 x i8> @vrsub_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
286 ; CHECK-LABEL: vrsub_vx_nxv64i8:
287 ; CHECK:       # %bb.0:
288 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
289 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
290 ; CHECK-NEXT:    ret
291   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
292   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
293   %v = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %vb, <vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 %evl)
294   ret <vscale x 64 x i8> %v
297 define <vscale x 64 x i8> @vrsub_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
298 ; CHECK-LABEL: vrsub_vx_nxv64i8_unmasked:
299 ; CHECK:       # %bb.0:
300 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
301 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
302 ; CHECK-NEXT:    ret
303   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
304   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
305   %v = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %vb, <vscale x 64 x i8> %va, <vscale x 64 x i1> splat (i1 true), i32 %evl)
306   ret <vscale x 64 x i8> %v
309 define <vscale x 64 x i8> @vrsub_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
310 ; CHECK-LABEL: vrsub_vi_nxv64i8:
311 ; CHECK:       # %bb.0:
312 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
313 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
314 ; CHECK-NEXT:    ret
315   %v = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> splat (i8 2), <vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 %evl)
316   ret <vscale x 64 x i8> %v
319 define <vscale x 64 x i8> @vrsub_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
320 ; CHECK-LABEL: vrsub_vi_nxv64i8_unmasked:
321 ; CHECK:       # %bb.0:
322 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
323 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
324 ; CHECK-NEXT:    ret
325   %v = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> splat (i8 2), <vscale x 64 x i8> %va, <vscale x 64 x i1> splat (i1 true), i32 %evl)
326   ret <vscale x 64 x i8> %v
329 declare <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16>, <vscale x 1 x i16>, <vscale x 1 x i1>, i32)
331 define <vscale x 1 x i16> @vrsub_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
332 ; CHECK-LABEL: vrsub_vx_nxv1i16:
333 ; CHECK:       # %bb.0:
334 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
335 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
336 ; CHECK-NEXT:    ret
337   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
338   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
339   %v = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %vb, <vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 %evl)
340   ret <vscale x 1 x i16> %v
343 define <vscale x 1 x i16> @vrsub_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
344 ; CHECK-LABEL: vrsub_vx_nxv1i16_unmasked:
345 ; CHECK:       # %bb.0:
346 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
347 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
348 ; CHECK-NEXT:    ret
349   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
350   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
351   %v = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %vb, <vscale x 1 x i16> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
352   ret <vscale x 1 x i16> %v
355 define <vscale x 1 x i16> @vrsub_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
356 ; CHECK-LABEL: vrsub_vi_nxv1i16:
357 ; CHECK:       # %bb.0:
358 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
359 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
360 ; CHECK-NEXT:    ret
361   %v = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> splat (i16 2), <vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 %evl)
362   ret <vscale x 1 x i16> %v
365 define <vscale x 1 x i16> @vrsub_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
366 ; CHECK-LABEL: vrsub_vi_nxv1i16_unmasked:
367 ; CHECK:       # %bb.0:
368 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
369 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
370 ; CHECK-NEXT:    ret
371   %v = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> splat (i16 2), <vscale x 1 x i16> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
372   ret <vscale x 1 x i16> %v
375 declare <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i32)
377 define <vscale x 2 x i16> @vrsub_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
378 ; CHECK-LABEL: vrsub_vx_nxv2i16:
379 ; CHECK:       # %bb.0:
380 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
381 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
382 ; CHECK-NEXT:    ret
383   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
384   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
385   %v = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %vb, <vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
386   ret <vscale x 2 x i16> %v
389 define <vscale x 2 x i16> @vrsub_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
390 ; CHECK-LABEL: vrsub_vx_nxv2i16_unmasked:
391 ; CHECK:       # %bb.0:
392 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
393 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
394 ; CHECK-NEXT:    ret
395   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
396   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
397   %v = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %vb, <vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
398   ret <vscale x 2 x i16> %v
401 define <vscale x 2 x i16> @vrsub_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
402 ; CHECK-LABEL: vrsub_vi_nxv2i16:
403 ; CHECK:       # %bb.0:
404 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
405 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
406 ; CHECK-NEXT:    ret
407   %v = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> splat (i16 2), <vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 %evl)
408   ret <vscale x 2 x i16> %v
411 define <vscale x 2 x i16> @vrsub_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
412 ; CHECK-LABEL: vrsub_vi_nxv2i16_unmasked:
413 ; CHECK:       # %bb.0:
414 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
415 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
416 ; CHECK-NEXT:    ret
417   %v = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> splat (i16 2), <vscale x 2 x i16> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
418   ret <vscale x 2 x i16> %v
421 declare <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16>, <vscale x 4 x i16>, <vscale x 4 x i1>, i32)
423 define <vscale x 4 x i16> @vrsub_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
424 ; CHECK-LABEL: vrsub_vx_nxv4i16:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
427 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
428 ; CHECK-NEXT:    ret
429   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
430   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
431   %v = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %vb, <vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 %evl)
432   ret <vscale x 4 x i16> %v
435 define <vscale x 4 x i16> @vrsub_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
436 ; CHECK-LABEL: vrsub_vx_nxv4i16_unmasked:
437 ; CHECK:       # %bb.0:
438 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
439 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
440 ; CHECK-NEXT:    ret
441   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
442   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
443   %v = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %vb, <vscale x 4 x i16> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
444   ret <vscale x 4 x i16> %v
447 define <vscale x 4 x i16> @vrsub_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
448 ; CHECK-LABEL: vrsub_vi_nxv4i16:
449 ; CHECK:       # %bb.0:
450 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
451 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
452 ; CHECK-NEXT:    ret
453   %v = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> splat (i16 2), <vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 %evl)
454   ret <vscale x 4 x i16> %v
457 define <vscale x 4 x i16> @vrsub_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
458 ; CHECK-LABEL: vrsub_vi_nxv4i16_unmasked:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
461 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
462 ; CHECK-NEXT:    ret
463   %v = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> splat (i16 2), <vscale x 4 x i16> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
464   ret <vscale x 4 x i16> %v
467 declare <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16>, <vscale x 8 x i16>, <vscale x 8 x i1>, i32)
469 define <vscale x 8 x i16> @vrsub_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
470 ; CHECK-LABEL: vrsub_vx_nxv8i16:
471 ; CHECK:       # %bb.0:
472 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
473 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
474 ; CHECK-NEXT:    ret
475   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
476   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
477   %v = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %vb, <vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 %evl)
478   ret <vscale x 8 x i16> %v
481 define <vscale x 8 x i16> @vrsub_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
482 ; CHECK-LABEL: vrsub_vx_nxv8i16_unmasked:
483 ; CHECK:       # %bb.0:
484 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
485 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
486 ; CHECK-NEXT:    ret
487   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
488   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
489   %v = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %vb, <vscale x 8 x i16> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
490   ret <vscale x 8 x i16> %v
493 define <vscale x 8 x i16> @vrsub_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
494 ; CHECK-LABEL: vrsub_vi_nxv8i16:
495 ; CHECK:       # %bb.0:
496 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
497 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
498 ; CHECK-NEXT:    ret
499   %v = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> splat (i16 2), <vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 %evl)
500   ret <vscale x 8 x i16> %v
503 define <vscale x 8 x i16> @vrsub_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
504 ; CHECK-LABEL: vrsub_vi_nxv8i16_unmasked:
505 ; CHECK:       # %bb.0:
506 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
507 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
508 ; CHECK-NEXT:    ret
509   %v = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> splat (i16 2), <vscale x 8 x i16> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
510   ret <vscale x 8 x i16> %v
513 declare <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16>, <vscale x 16 x i16>, <vscale x 16 x i1>, i32)
515 define <vscale x 16 x i16> @vrsub_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
516 ; CHECK-LABEL: vrsub_vx_nxv16i16:
517 ; CHECK:       # %bb.0:
518 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
519 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
520 ; CHECK-NEXT:    ret
521   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
522   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
523   %v = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %vb, <vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 %evl)
524   ret <vscale x 16 x i16> %v
527 define <vscale x 16 x i16> @vrsub_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
528 ; CHECK-LABEL: vrsub_vx_nxv16i16_unmasked:
529 ; CHECK:       # %bb.0:
530 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
531 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
532 ; CHECK-NEXT:    ret
533   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
534   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
535   %v = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %vb, <vscale x 16 x i16> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
536   ret <vscale x 16 x i16> %v
539 define <vscale x 16 x i16> @vrsub_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
540 ; CHECK-LABEL: vrsub_vi_nxv16i16:
541 ; CHECK:       # %bb.0:
542 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
543 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
544 ; CHECK-NEXT:    ret
545   %v = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> splat (i16 2), <vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 %evl)
546   ret <vscale x 16 x i16> %v
549 define <vscale x 16 x i16> @vrsub_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
550 ; CHECK-LABEL: vrsub_vi_nxv16i16_unmasked:
551 ; CHECK:       # %bb.0:
552 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
553 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
554 ; CHECK-NEXT:    ret
555   %v = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> splat (i16 2), <vscale x 16 x i16> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
556   ret <vscale x 16 x i16> %v
559 declare <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16>, <vscale x 32 x i16>, <vscale x 32 x i1>, i32)
561 define <vscale x 32 x i16> @vrsub_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
562 ; CHECK-LABEL: vrsub_vx_nxv32i16:
563 ; CHECK:       # %bb.0:
564 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
565 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
566 ; CHECK-NEXT:    ret
567   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
568   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
569   %v = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %vb, <vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 %evl)
570   ret <vscale x 32 x i16> %v
573 define <vscale x 32 x i16> @vrsub_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
574 ; CHECK-LABEL: vrsub_vx_nxv32i16_unmasked:
575 ; CHECK:       # %bb.0:
576 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
577 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
578 ; CHECK-NEXT:    ret
579   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
580   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
581   %v = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %vb, <vscale x 32 x i16> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
582   ret <vscale x 32 x i16> %v
585 define <vscale x 32 x i16> @vrsub_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
586 ; CHECK-LABEL: vrsub_vi_nxv32i16:
587 ; CHECK:       # %bb.0:
588 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
589 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
590 ; CHECK-NEXT:    ret
591   %v = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> splat (i16 2), <vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 %evl)
592   ret <vscale x 32 x i16> %v
595 define <vscale x 32 x i16> @vrsub_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
596 ; CHECK-LABEL: vrsub_vi_nxv32i16_unmasked:
597 ; CHECK:       # %bb.0:
598 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
599 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
600 ; CHECK-NEXT:    ret
601   %v = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> splat (i16 2), <vscale x 32 x i16> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
602   ret <vscale x 32 x i16> %v
605 declare <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32>, <vscale x 1 x i32>, <vscale x 1 x i1>, i32)
607 define <vscale x 1 x i32> @vrsub_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
608 ; CHECK-LABEL: vrsub_vx_nxv1i32:
609 ; CHECK:       # %bb.0:
610 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
611 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
612 ; CHECK-NEXT:    ret
613   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
614   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
615   %v = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %vb, <vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 %evl)
616   ret <vscale x 1 x i32> %v
619 define <vscale x 1 x i32> @vrsub_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
620 ; CHECK-LABEL: vrsub_vx_nxv1i32_unmasked:
621 ; CHECK:       # %bb.0:
622 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
623 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
624 ; CHECK-NEXT:    ret
625   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
626   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
627   %v = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %vb, <vscale x 1 x i32> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
628   ret <vscale x 1 x i32> %v
631 define <vscale x 1 x i32> @vrsub_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
632 ; CHECK-LABEL: vrsub_vi_nxv1i32:
633 ; CHECK:       # %bb.0:
634 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
635 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
636 ; CHECK-NEXT:    ret
637   %v = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> splat (i32 2), <vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 %evl)
638   ret <vscale x 1 x i32> %v
641 define <vscale x 1 x i32> @vrsub_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
642 ; CHECK-LABEL: vrsub_vi_nxv1i32_unmasked:
643 ; CHECK:       # %bb.0:
644 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
645 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
646 ; CHECK-NEXT:    ret
647   %v = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> splat (i32 2), <vscale x 1 x i32> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
648   ret <vscale x 1 x i32> %v
651 declare <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i32)
653 define <vscale x 2 x i32> @vrsub_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
654 ; CHECK-LABEL: vrsub_vx_nxv2i32:
655 ; CHECK:       # %bb.0:
656 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
657 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
658 ; CHECK-NEXT:    ret
659   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
660   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
661   %v = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %vb, <vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
662   ret <vscale x 2 x i32> %v
665 define <vscale x 2 x i32> @vrsub_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
666 ; CHECK-LABEL: vrsub_vx_nxv2i32_unmasked:
667 ; CHECK:       # %bb.0:
668 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
669 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
670 ; CHECK-NEXT:    ret
671   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
672   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
673   %v = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %vb, <vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
674   ret <vscale x 2 x i32> %v
677 define <vscale x 2 x i32> @vrsub_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
678 ; CHECK-LABEL: vrsub_vi_nxv2i32:
679 ; CHECK:       # %bb.0:
680 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
681 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
682 ; CHECK-NEXT:    ret
683   %v = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> splat (i32 2), <vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 %evl)
684   ret <vscale x 2 x i32> %v
687 define <vscale x 2 x i32> @vrsub_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
688 ; CHECK-LABEL: vrsub_vi_nxv2i32_unmasked:
689 ; CHECK:       # %bb.0:
690 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
691 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
692 ; CHECK-NEXT:    ret
693   %v = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> splat (i32 2), <vscale x 2 x i32> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
694   ret <vscale x 2 x i32> %v
697 declare <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
699 define <vscale x 4 x i32> @vrsub_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
700 ; CHECK-LABEL: vrsub_vx_nxv4i32:
701 ; CHECK:       # %bb.0:
702 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
703 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
704 ; CHECK-NEXT:    ret
705   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
706   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
707   %v = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %vb, <vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 %evl)
708   ret <vscale x 4 x i32> %v
711 define <vscale x 4 x i32> @vrsub_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
712 ; CHECK-LABEL: vrsub_vx_nxv4i32_unmasked:
713 ; CHECK:       # %bb.0:
714 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
715 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
716 ; CHECK-NEXT:    ret
717   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
718   %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
719   %v = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %vb, <vscale x 4 x i32> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
720   ret <vscale x 4 x i32> %v
723 define <vscale x 4 x i32> @vrsub_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
724 ; CHECK-LABEL: vrsub_vi_nxv4i32:
725 ; CHECK:       # %bb.0:
726 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
727 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
728 ; CHECK-NEXT:    ret
729   %v = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> splat (i32 2), <vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 %evl)
730   ret <vscale x 4 x i32> %v
733 define <vscale x 4 x i32> @vrsub_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
734 ; CHECK-LABEL: vrsub_vi_nxv4i32_unmasked:
735 ; CHECK:       # %bb.0:
736 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
737 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
738 ; CHECK-NEXT:    ret
739   %v = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> splat (i32 2), <vscale x 4 x i32> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
740   ret <vscale x 4 x i32> %v
743 declare <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32>, <vscale x 8 x i32>, <vscale x 8 x i1>, i32)
745 define <vscale x 8 x i32> @vrsub_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
746 ; CHECK-LABEL: vrsub_vx_nxv8i32:
747 ; CHECK:       # %bb.0:
748 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
749 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
750 ; CHECK-NEXT:    ret
751   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
752   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
753   %v = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %vb, <vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 %evl)
754   ret <vscale x 8 x i32> %v
757 define <vscale x 8 x i32> @vrsub_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
758 ; CHECK-LABEL: vrsub_vx_nxv8i32_unmasked:
759 ; CHECK:       # %bb.0:
760 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
761 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
762 ; CHECK-NEXT:    ret
763   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
764   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
765   %v = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %vb, <vscale x 8 x i32> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
766   ret <vscale x 8 x i32> %v
769 define <vscale x 8 x i32> @vrsub_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
770 ; CHECK-LABEL: vrsub_vi_nxv8i32:
771 ; CHECK:       # %bb.0:
772 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
773 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
774 ; CHECK-NEXT:    ret
775   %v = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> splat (i32 2), <vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 %evl)
776   ret <vscale x 8 x i32> %v
779 define <vscale x 8 x i32> @vrsub_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
780 ; CHECK-LABEL: vrsub_vi_nxv8i32_unmasked:
781 ; CHECK:       # %bb.0:
782 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
783 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
784 ; CHECK-NEXT:    ret
785   %v = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> splat (i32 2), <vscale x 8 x i32> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
786   ret <vscale x 8 x i32> %v
789 declare <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32>, <vscale x 16 x i32>, <vscale x 16 x i1>, i32)
791 define <vscale x 16 x i32> @vrsub_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
792 ; CHECK-LABEL: vrsub_vx_nxv16i32:
793 ; CHECK:       # %bb.0:
794 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
795 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
796 ; CHECK-NEXT:    ret
797   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
798   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
799   %v = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %vb, <vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 %evl)
800   ret <vscale x 16 x i32> %v
803 define <vscale x 16 x i32> @vrsub_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
804 ; CHECK-LABEL: vrsub_vx_nxv16i32_unmasked:
805 ; CHECK:       # %bb.0:
806 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
807 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
808 ; CHECK-NEXT:    ret
809   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
810   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
811   %v = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %vb, <vscale x 16 x i32> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
812   ret <vscale x 16 x i32> %v
815 define <vscale x 16 x i32> @vrsub_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
816 ; CHECK-LABEL: vrsub_vi_nxv16i32:
817 ; CHECK:       # %bb.0:
818 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
819 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
820 ; CHECK-NEXT:    ret
821   %v = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> splat (i32 2), <vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 %evl)
822   ret <vscale x 16 x i32> %v
825 define <vscale x 16 x i32> @vrsub_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
826 ; CHECK-LABEL: vrsub_vi_nxv16i32_unmasked:
827 ; CHECK:       # %bb.0:
828 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
829 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
830 ; CHECK-NEXT:    ret
831   %v = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> splat (i32 2), <vscale x 16 x i32> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
832   ret <vscale x 16 x i32> %v
835 declare <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i1>, i32)
837 define <vscale x 1 x i64> @vrsub_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
838 ; RV32-LABEL: vrsub_vx_nxv1i64:
839 ; RV32:       # %bb.0:
840 ; RV32-NEXT:    addi sp, sp, -16
841 ; RV32-NEXT:    .cfi_def_cfa_offset 16
842 ; RV32-NEXT:    sw a1, 12(sp)
843 ; RV32-NEXT:    sw a0, 8(sp)
844 ; RV32-NEXT:    addi a0, sp, 8
845 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
846 ; RV32-NEXT:    vlse64.v v9, (a0), zero
847 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
848 ; RV32-NEXT:    vsub.vv v8, v9, v8, v0.t
849 ; RV32-NEXT:    addi sp, sp, 16
850 ; RV32-NEXT:    ret
852 ; RV64-LABEL: vrsub_vx_nxv1i64:
853 ; RV64:       # %bb.0:
854 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
855 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
856 ; RV64-NEXT:    ret
857   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
858   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
859   %v = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %vb, <vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 %evl)
860   ret <vscale x 1 x i64> %v
863 define <vscale x 1 x i64> @vrsub_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
864 ; RV32-LABEL: vrsub_vx_nxv1i64_unmasked:
865 ; RV32:       # %bb.0:
866 ; RV32-NEXT:    addi sp, sp, -16
867 ; RV32-NEXT:    .cfi_def_cfa_offset 16
868 ; RV32-NEXT:    sw a1, 12(sp)
869 ; RV32-NEXT:    sw a0, 8(sp)
870 ; RV32-NEXT:    addi a0, sp, 8
871 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
872 ; RV32-NEXT:    vlse64.v v9, (a0), zero
873 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
874 ; RV32-NEXT:    vsub.vv v8, v9, v8
875 ; RV32-NEXT:    addi sp, sp, 16
876 ; RV32-NEXT:    ret
878 ; RV64-LABEL: vrsub_vx_nxv1i64_unmasked:
879 ; RV64:       # %bb.0:
880 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
881 ; RV64-NEXT:    vrsub.vx v8, v8, a0
882 ; RV64-NEXT:    ret
883   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
884   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
885   %v = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %vb, <vscale x 1 x i64> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
886   ret <vscale x 1 x i64> %v
889 define <vscale x 1 x i64> @vrsub_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
890 ; CHECK-LABEL: vrsub_vi_nxv1i64:
891 ; CHECK:       # %bb.0:
892 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
893 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
894 ; CHECK-NEXT:    ret
895   %v = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> splat (i64 2), <vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 %evl)
896   ret <vscale x 1 x i64> %v
899 define <vscale x 1 x i64> @vrsub_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
900 ; CHECK-LABEL: vrsub_vi_nxv1i64_unmasked:
901 ; CHECK:       # %bb.0:
902 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
903 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
904 ; CHECK-NEXT:    ret
905   %v = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> splat (i64 2), <vscale x 1 x i64> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
906   ret <vscale x 1 x i64> %v
909 declare <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64>, <vscale x 2 x i64>, <vscale x 2 x i1>, i32)
911 define <vscale x 2 x i64> @vrsub_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
912 ; RV32-LABEL: vrsub_vx_nxv2i64:
913 ; RV32:       # %bb.0:
914 ; RV32-NEXT:    addi sp, sp, -16
915 ; RV32-NEXT:    .cfi_def_cfa_offset 16
916 ; RV32-NEXT:    sw a1, 12(sp)
917 ; RV32-NEXT:    sw a0, 8(sp)
918 ; RV32-NEXT:    addi a0, sp, 8
919 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
920 ; RV32-NEXT:    vlse64.v v10, (a0), zero
921 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
922 ; RV32-NEXT:    vsub.vv v8, v10, v8, v0.t
923 ; RV32-NEXT:    addi sp, sp, 16
924 ; RV32-NEXT:    ret
926 ; RV64-LABEL: vrsub_vx_nxv2i64:
927 ; RV64:       # %bb.0:
928 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
929 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
930 ; RV64-NEXT:    ret
931   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
932   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
933   %v = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %vb, <vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
934   ret <vscale x 2 x i64> %v
937 define <vscale x 2 x i64> @vrsub_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
938 ; RV32-LABEL: vrsub_vx_nxv2i64_unmasked:
939 ; RV32:       # %bb.0:
940 ; RV32-NEXT:    addi sp, sp, -16
941 ; RV32-NEXT:    .cfi_def_cfa_offset 16
942 ; RV32-NEXT:    sw a1, 12(sp)
943 ; RV32-NEXT:    sw a0, 8(sp)
944 ; RV32-NEXT:    addi a0, sp, 8
945 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
946 ; RV32-NEXT:    vlse64.v v10, (a0), zero
947 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
948 ; RV32-NEXT:    vsub.vv v8, v10, v8
949 ; RV32-NEXT:    addi sp, sp, 16
950 ; RV32-NEXT:    ret
952 ; RV64-LABEL: vrsub_vx_nxv2i64_unmasked:
953 ; RV64:       # %bb.0:
954 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
955 ; RV64-NEXT:    vrsub.vx v8, v8, a0
956 ; RV64-NEXT:    ret
957   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
958   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
959   %v = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %vb, <vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
960   ret <vscale x 2 x i64> %v
963 define <vscale x 2 x i64> @vrsub_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
964 ; CHECK-LABEL: vrsub_vi_nxv2i64:
965 ; CHECK:       # %bb.0:
966 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
967 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
968 ; CHECK-NEXT:    ret
969   %v = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> splat (i64 2), <vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 %evl)
970   ret <vscale x 2 x i64> %v
973 define <vscale x 2 x i64> @vrsub_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
974 ; CHECK-LABEL: vrsub_vi_nxv2i64_unmasked:
975 ; CHECK:       # %bb.0:
976 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
977 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
978 ; CHECK-NEXT:    ret
979   %v = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> splat (i64 2), <vscale x 2 x i64> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
980   ret <vscale x 2 x i64> %v
983 declare <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64>, <vscale x 4 x i64>, <vscale x 4 x i1>, i32)
985 define <vscale x 4 x i64> @vrsub_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
986 ; RV32-LABEL: vrsub_vx_nxv4i64:
987 ; RV32:       # %bb.0:
988 ; RV32-NEXT:    addi sp, sp, -16
989 ; RV32-NEXT:    .cfi_def_cfa_offset 16
990 ; RV32-NEXT:    sw a1, 12(sp)
991 ; RV32-NEXT:    sw a0, 8(sp)
992 ; RV32-NEXT:    addi a0, sp, 8
993 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
994 ; RV32-NEXT:    vlse64.v v12, (a0), zero
995 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
996 ; RV32-NEXT:    vsub.vv v8, v12, v8, v0.t
997 ; RV32-NEXT:    addi sp, sp, 16
998 ; RV32-NEXT:    ret
1000 ; RV64-LABEL: vrsub_vx_nxv4i64:
1001 ; RV64:       # %bb.0:
1002 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1003 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
1004 ; RV64-NEXT:    ret
1005   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1006   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1007   %v = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %vb, <vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 %evl)
1008   ret <vscale x 4 x i64> %v
1011 define <vscale x 4 x i64> @vrsub_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1012 ; RV32-LABEL: vrsub_vx_nxv4i64_unmasked:
1013 ; RV32:       # %bb.0:
1014 ; RV32-NEXT:    addi sp, sp, -16
1015 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1016 ; RV32-NEXT:    sw a1, 12(sp)
1017 ; RV32-NEXT:    sw a0, 8(sp)
1018 ; RV32-NEXT:    addi a0, sp, 8
1019 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1020 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1021 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1022 ; RV32-NEXT:    vsub.vv v8, v12, v8
1023 ; RV32-NEXT:    addi sp, sp, 16
1024 ; RV32-NEXT:    ret
1026 ; RV64-LABEL: vrsub_vx_nxv4i64_unmasked:
1027 ; RV64:       # %bb.0:
1028 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1029 ; RV64-NEXT:    vrsub.vx v8, v8, a0
1030 ; RV64-NEXT:    ret
1031   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1032   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1033   %v = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %vb, <vscale x 4 x i64> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1034   ret <vscale x 4 x i64> %v
1037 define <vscale x 4 x i64> @vrsub_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1038 ; CHECK-LABEL: vrsub_vi_nxv4i64:
1039 ; CHECK:       # %bb.0:
1040 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1041 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
1042 ; CHECK-NEXT:    ret
1043   %v = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> splat (i64 2), <vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 %evl)
1044   ret <vscale x 4 x i64> %v
1047 define <vscale x 4 x i64> @vrsub_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1048 ; CHECK-LABEL: vrsub_vi_nxv4i64_unmasked:
1049 ; CHECK:       # %bb.0:
1050 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1051 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
1052 ; CHECK-NEXT:    ret
1053   %v = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> splat (i64 2), <vscale x 4 x i64> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
1054   ret <vscale x 4 x i64> %v
1057 declare <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64>, <vscale x 8 x i64>, <vscale x 8 x i1>, i32)
1059 define <vscale x 8 x i64> @vrsub_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1060 ; RV32-LABEL: vrsub_vx_nxv8i64:
1061 ; RV32:       # %bb.0:
1062 ; RV32-NEXT:    addi sp, sp, -16
1063 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1064 ; RV32-NEXT:    sw a1, 12(sp)
1065 ; RV32-NEXT:    sw a0, 8(sp)
1066 ; RV32-NEXT:    addi a0, sp, 8
1067 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1068 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1069 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1070 ; RV32-NEXT:    vsub.vv v8, v16, v8, v0.t
1071 ; RV32-NEXT:    addi sp, sp, 16
1072 ; RV32-NEXT:    ret
1074 ; RV64-LABEL: vrsub_vx_nxv8i64:
1075 ; RV64:       # %bb.0:
1076 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1077 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
1078 ; RV64-NEXT:    ret
1079   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1080   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1081   %v = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %vb, <vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 %evl)
1082   ret <vscale x 8 x i64> %v
1085 define <vscale x 8 x i64> @vrsub_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1086 ; RV32-LABEL: vrsub_vx_nxv8i64_unmasked:
1087 ; RV32:       # %bb.0:
1088 ; RV32-NEXT:    addi sp, sp, -16
1089 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1090 ; RV32-NEXT:    sw a1, 12(sp)
1091 ; RV32-NEXT:    sw a0, 8(sp)
1092 ; RV32-NEXT:    addi a0, sp, 8
1093 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1094 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1095 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1096 ; RV32-NEXT:    vsub.vv v8, v16, v8
1097 ; RV32-NEXT:    addi sp, sp, 16
1098 ; RV32-NEXT:    ret
1100 ; RV64-LABEL: vrsub_vx_nxv8i64_unmasked:
1101 ; RV64:       # %bb.0:
1102 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1103 ; RV64-NEXT:    vrsub.vx v8, v8, a0
1104 ; RV64-NEXT:    ret
1105   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1106   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1107   %v = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %vb, <vscale x 8 x i64> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1108   ret <vscale x 8 x i64> %v
1111 define <vscale x 8 x i64> @vrsub_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1112 ; CHECK-LABEL: vrsub_vi_nxv8i64:
1113 ; CHECK:       # %bb.0:
1114 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1115 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
1116 ; CHECK-NEXT:    ret
1117   %v = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> splat (i64 2), <vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 %evl)
1118   ret <vscale x 8 x i64> %v
1121 define <vscale x 8 x i64> @vrsub_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1122 ; CHECK-LABEL: vrsub_vi_nxv8i64_unmasked:
1123 ; CHECK:       # %bb.0:
1124 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1125 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
1126 ; CHECK-NEXT:    ret
1127   %v = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> splat (i64 2), <vscale x 8 x i64> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
1128   ret <vscale x 8 x i64> %v