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:
12 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
13 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
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:
24 ; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma
25 ; CHECK-NEXT: vrsub.vx v8, v8, a0
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 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
30 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
31 %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)
32 ret <vscale x 1 x i8> %v
35 define <vscale x 1 x i8> @vrsub_vi_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
36 ; CHECK-LABEL: vrsub_vi_nxv1i8:
38 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
41 %elt.head = insertelement <vscale x 1 x i8> poison, i8 2, i32 0
42 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
43 %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)
44 ret <vscale x 1 x i8> %v
47 define <vscale x 1 x i8> @vrsub_vi_nxv1i8_unmasked(<vscale x 1 x i8> %va, i32 zeroext %evl) {
48 ; CHECK-LABEL: vrsub_vi_nxv1i8_unmasked:
50 ; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma
51 ; CHECK-NEXT: vrsub.vi v8, v8, 2
53 %elt.head = insertelement <vscale x 1 x i8> poison, i8 2, i32 0
54 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
55 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
56 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
57 %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)
58 ret <vscale x 1 x i8> %v
61 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)
63 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) {
64 ; CHECK-LABEL: vrsub_vx_nxv2i8:
66 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
67 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
69 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
70 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
71 %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)
72 ret <vscale x 2 x i8> %v
75 define <vscale x 2 x i8> @vrsub_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
76 ; CHECK-LABEL: vrsub_vx_nxv2i8_unmasked:
78 ; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma
79 ; CHECK-NEXT: vrsub.vx v8, v8, a0
81 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
82 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
83 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
84 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
85 %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)
86 ret <vscale x 2 x i8> %v
89 define <vscale x 2 x i8> @vrsub_vi_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
90 ; CHECK-LABEL: vrsub_vi_nxv2i8:
92 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
93 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
95 %elt.head = insertelement <vscale x 2 x i8> poison, i8 2, i32 0
96 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
97 %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)
98 ret <vscale x 2 x i8> %v
101 define <vscale x 2 x i8> @vrsub_vi_nxv2i8_unmasked(<vscale x 2 x i8> %va, i32 zeroext %evl) {
102 ; CHECK-LABEL: vrsub_vi_nxv2i8_unmasked:
104 ; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma
105 ; CHECK-NEXT: vrsub.vi v8, v8, 2
107 %elt.head = insertelement <vscale x 2 x i8> poison, i8 2, i32 0
108 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
109 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
110 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
111 %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)
112 ret <vscale x 2 x i8> %v
115 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)
117 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) {
118 ; CHECK-LABEL: vrsub_vx_nxv4i8:
120 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
121 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
123 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
124 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
125 %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)
126 ret <vscale x 4 x i8> %v
129 define <vscale x 4 x i8> @vrsub_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
130 ; CHECK-LABEL: vrsub_vx_nxv4i8_unmasked:
132 ; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
133 ; CHECK-NEXT: vrsub.vx v8, v8, a0
135 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
136 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
137 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
138 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
139 %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)
140 ret <vscale x 4 x i8> %v
143 define <vscale x 4 x i8> @vrsub_vi_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
144 ; CHECK-LABEL: vrsub_vi_nxv4i8:
146 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
147 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
149 %elt.head = insertelement <vscale x 4 x i8> poison, i8 2, i32 0
150 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
151 %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)
152 ret <vscale x 4 x i8> %v
155 define <vscale x 4 x i8> @vrsub_vi_nxv4i8_unmasked(<vscale x 4 x i8> %va, i32 zeroext %evl) {
156 ; CHECK-LABEL: vrsub_vi_nxv4i8_unmasked:
158 ; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
159 ; CHECK-NEXT: vrsub.vi v8, v8, 2
161 %elt.head = insertelement <vscale x 4 x i8> poison, i8 2, i32 0
162 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
163 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
164 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
165 %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)
166 ret <vscale x 4 x i8> %v
169 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)
171 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) {
172 ; CHECK-LABEL: vrsub_vx_nxv8i8:
174 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
175 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
177 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
178 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
179 %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)
180 ret <vscale x 8 x i8> %v
183 define <vscale x 8 x i8> @vrsub_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
184 ; CHECK-LABEL: vrsub_vx_nxv8i8_unmasked:
186 ; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma
187 ; CHECK-NEXT: vrsub.vx v8, v8, a0
189 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
190 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
191 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
192 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
193 %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)
194 ret <vscale x 8 x i8> %v
197 define <vscale x 8 x i8> @vrsub_vi_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
198 ; CHECK-LABEL: vrsub_vi_nxv8i8:
200 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
201 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
203 %elt.head = insertelement <vscale x 8 x i8> poison, i8 2, i32 0
204 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
205 %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)
206 ret <vscale x 8 x i8> %v
209 define <vscale x 8 x i8> @vrsub_vi_nxv8i8_unmasked(<vscale x 8 x i8> %va, i32 zeroext %evl) {
210 ; CHECK-LABEL: vrsub_vi_nxv8i8_unmasked:
212 ; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma
213 ; CHECK-NEXT: vrsub.vi v8, v8, 2
215 %elt.head = insertelement <vscale x 8 x i8> poison, i8 2, i32 0
216 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
217 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
218 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
219 %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)
220 ret <vscale x 8 x i8> %v
223 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)
225 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) {
226 ; CHECK-LABEL: vrsub_vx_nxv16i8:
228 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
229 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
231 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
232 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
233 %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)
234 ret <vscale x 16 x i8> %v
237 define <vscale x 16 x i8> @vrsub_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
238 ; CHECK-LABEL: vrsub_vx_nxv16i8_unmasked:
240 ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
241 ; CHECK-NEXT: vrsub.vx v8, v8, a0
243 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
244 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
245 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
246 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
247 %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)
248 ret <vscale x 16 x i8> %v
251 define <vscale x 16 x i8> @vrsub_vi_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
252 ; CHECK-LABEL: vrsub_vi_nxv16i8:
254 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
255 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
257 %elt.head = insertelement <vscale x 16 x i8> poison, i8 2, i32 0
258 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
259 %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)
260 ret <vscale x 16 x i8> %v
263 define <vscale x 16 x i8> @vrsub_vi_nxv16i8_unmasked(<vscale x 16 x i8> %va, i32 zeroext %evl) {
264 ; CHECK-LABEL: vrsub_vi_nxv16i8_unmasked:
266 ; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma
267 ; CHECK-NEXT: vrsub.vi v8, v8, 2
269 %elt.head = insertelement <vscale x 16 x i8> poison, i8 2, i32 0
270 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
271 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
272 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
273 %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)
274 ret <vscale x 16 x i8> %v
277 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)
279 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) {
280 ; CHECK-LABEL: vrsub_vx_nxv32i8:
282 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
283 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
285 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
286 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
287 %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)
288 ret <vscale x 32 x i8> %v
291 define <vscale x 32 x i8> @vrsub_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
292 ; CHECK-LABEL: vrsub_vx_nxv32i8_unmasked:
294 ; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma
295 ; CHECK-NEXT: vrsub.vx v8, v8, a0
297 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
298 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
299 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
300 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
301 %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)
302 ret <vscale x 32 x i8> %v
305 define <vscale x 32 x i8> @vrsub_vi_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
306 ; CHECK-LABEL: vrsub_vi_nxv32i8:
308 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
309 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
311 %elt.head = insertelement <vscale x 32 x i8> poison, i8 2, i32 0
312 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
313 %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)
314 ret <vscale x 32 x i8> %v
317 define <vscale x 32 x i8> @vrsub_vi_nxv32i8_unmasked(<vscale x 32 x i8> %va, i32 zeroext %evl) {
318 ; CHECK-LABEL: vrsub_vi_nxv32i8_unmasked:
320 ; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma
321 ; CHECK-NEXT: vrsub.vi v8, v8, 2
323 %elt.head = insertelement <vscale x 32 x i8> poison, i8 2, i32 0
324 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
325 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
326 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
327 %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)
328 ret <vscale x 32 x i8> %v
331 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)
333 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) {
334 ; CHECK-LABEL: vrsub_vx_nxv64i8:
336 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
337 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
339 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
340 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
341 %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)
342 ret <vscale x 64 x i8> %v
345 define <vscale x 64 x i8> @vrsub_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
346 ; CHECK-LABEL: vrsub_vx_nxv64i8_unmasked:
348 ; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma
349 ; CHECK-NEXT: vrsub.vx v8, v8, a0
351 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
352 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
353 %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
354 %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
355 %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)
356 ret <vscale x 64 x i8> %v
359 define <vscale x 64 x i8> @vrsub_vi_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i1> %m, i32 zeroext %evl) {
360 ; CHECK-LABEL: vrsub_vi_nxv64i8:
362 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
363 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
365 %elt.head = insertelement <vscale x 64 x i8> poison, i8 2, i32 0
366 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
367 %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)
368 ret <vscale x 64 x i8> %v
371 define <vscale x 64 x i8> @vrsub_vi_nxv64i8_unmasked(<vscale x 64 x i8> %va, i32 zeroext %evl) {
372 ; CHECK-LABEL: vrsub_vi_nxv64i8_unmasked:
374 ; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma
375 ; CHECK-NEXT: vrsub.vi v8, v8, 2
377 %elt.head = insertelement <vscale x 64 x i8> poison, i8 2, i32 0
378 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
379 %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
380 %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
381 %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)
382 ret <vscale x 64 x i8> %v
385 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)
387 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) {
388 ; CHECK-LABEL: vrsub_vx_nxv1i16:
390 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
391 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
393 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
394 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
395 %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)
396 ret <vscale x 1 x i16> %v
399 define <vscale x 1 x i16> @vrsub_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
400 ; CHECK-LABEL: vrsub_vx_nxv1i16_unmasked:
402 ; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma
403 ; CHECK-NEXT: vrsub.vx v8, v8, a0
405 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
406 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
407 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
408 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
409 %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)
410 ret <vscale x 1 x i16> %v
413 define <vscale x 1 x i16> @vrsub_vi_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
414 ; CHECK-LABEL: vrsub_vi_nxv1i16:
416 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
417 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
419 %elt.head = insertelement <vscale x 1 x i16> poison, i16 2, i32 0
420 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
421 %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)
422 ret <vscale x 1 x i16> %v
425 define <vscale x 1 x i16> @vrsub_vi_nxv1i16_unmasked(<vscale x 1 x i16> %va, i32 zeroext %evl) {
426 ; CHECK-LABEL: vrsub_vi_nxv1i16_unmasked:
428 ; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma
429 ; CHECK-NEXT: vrsub.vi v8, v8, 2
431 %elt.head = insertelement <vscale x 1 x i16> poison, i16 2, i32 0
432 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
433 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
434 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
435 %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)
436 ret <vscale x 1 x i16> %v
439 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)
441 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) {
442 ; CHECK-LABEL: vrsub_vx_nxv2i16:
444 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
445 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
447 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
448 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
449 %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)
450 ret <vscale x 2 x i16> %v
453 define <vscale x 2 x i16> @vrsub_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
454 ; CHECK-LABEL: vrsub_vx_nxv2i16_unmasked:
456 ; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma
457 ; CHECK-NEXT: vrsub.vx v8, v8, a0
459 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
460 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
461 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
462 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
463 %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)
464 ret <vscale x 2 x i16> %v
467 define <vscale x 2 x i16> @vrsub_vi_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
468 ; CHECK-LABEL: vrsub_vi_nxv2i16:
470 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
471 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
473 %elt.head = insertelement <vscale x 2 x i16> poison, i16 2, i32 0
474 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
475 %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)
476 ret <vscale x 2 x i16> %v
479 define <vscale x 2 x i16> @vrsub_vi_nxv2i16_unmasked(<vscale x 2 x i16> %va, i32 zeroext %evl) {
480 ; CHECK-LABEL: vrsub_vi_nxv2i16_unmasked:
482 ; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma
483 ; CHECK-NEXT: vrsub.vi v8, v8, 2
485 %elt.head = insertelement <vscale x 2 x i16> poison, i16 2, i32 0
486 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
487 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
488 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
489 %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)
490 ret <vscale x 2 x i16> %v
493 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)
495 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) {
496 ; CHECK-LABEL: vrsub_vx_nxv4i16:
498 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
499 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
501 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
502 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
503 %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)
504 ret <vscale x 4 x i16> %v
507 define <vscale x 4 x i16> @vrsub_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
508 ; CHECK-LABEL: vrsub_vx_nxv4i16_unmasked:
510 ; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma
511 ; CHECK-NEXT: vrsub.vx v8, v8, a0
513 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
514 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
515 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
516 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
517 %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)
518 ret <vscale x 4 x i16> %v
521 define <vscale x 4 x i16> @vrsub_vi_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
522 ; CHECK-LABEL: vrsub_vi_nxv4i16:
524 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
525 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
527 %elt.head = insertelement <vscale x 4 x i16> poison, i16 2, i32 0
528 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
529 %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)
530 ret <vscale x 4 x i16> %v
533 define <vscale x 4 x i16> @vrsub_vi_nxv4i16_unmasked(<vscale x 4 x i16> %va, i32 zeroext %evl) {
534 ; CHECK-LABEL: vrsub_vi_nxv4i16_unmasked:
536 ; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma
537 ; CHECK-NEXT: vrsub.vi v8, v8, 2
539 %elt.head = insertelement <vscale x 4 x i16> poison, i16 2, i32 0
540 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
541 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
542 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
543 %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)
544 ret <vscale x 4 x i16> %v
547 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)
549 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) {
550 ; CHECK-LABEL: vrsub_vx_nxv8i16:
552 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
553 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
555 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
556 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
557 %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)
558 ret <vscale x 8 x i16> %v
561 define <vscale x 8 x i16> @vrsub_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
562 ; CHECK-LABEL: vrsub_vx_nxv8i16_unmasked:
564 ; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma
565 ; CHECK-NEXT: vrsub.vx v8, v8, a0
567 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
568 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
569 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
570 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
571 %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)
572 ret <vscale x 8 x i16> %v
575 define <vscale x 8 x i16> @vrsub_vi_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
576 ; CHECK-LABEL: vrsub_vi_nxv8i16:
578 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
579 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
581 %elt.head = insertelement <vscale x 8 x i16> poison, i16 2, i32 0
582 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
583 %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)
584 ret <vscale x 8 x i16> %v
587 define <vscale x 8 x i16> @vrsub_vi_nxv8i16_unmasked(<vscale x 8 x i16> %va, i32 zeroext %evl) {
588 ; CHECK-LABEL: vrsub_vi_nxv8i16_unmasked:
590 ; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma
591 ; CHECK-NEXT: vrsub.vi v8, v8, 2
593 %elt.head = insertelement <vscale x 8 x i16> poison, i16 2, i32 0
594 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
595 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
596 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
597 %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)
598 ret <vscale x 8 x i16> %v
601 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)
603 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) {
604 ; CHECK-LABEL: vrsub_vx_nxv16i16:
606 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
607 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
609 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
610 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
611 %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)
612 ret <vscale x 16 x i16> %v
615 define <vscale x 16 x i16> @vrsub_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
616 ; CHECK-LABEL: vrsub_vx_nxv16i16_unmasked:
618 ; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma
619 ; CHECK-NEXT: vrsub.vx v8, v8, a0
621 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
622 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
623 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
624 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
625 %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)
626 ret <vscale x 16 x i16> %v
629 define <vscale x 16 x i16> @vrsub_vi_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
630 ; CHECK-LABEL: vrsub_vi_nxv16i16:
632 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
633 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
635 %elt.head = insertelement <vscale x 16 x i16> poison, i16 2, i32 0
636 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
637 %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)
638 ret <vscale x 16 x i16> %v
641 define <vscale x 16 x i16> @vrsub_vi_nxv16i16_unmasked(<vscale x 16 x i16> %va, i32 zeroext %evl) {
642 ; CHECK-LABEL: vrsub_vi_nxv16i16_unmasked:
644 ; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma
645 ; CHECK-NEXT: vrsub.vi v8, v8, 2
647 %elt.head = insertelement <vscale x 16 x i16> poison, i16 2, i32 0
648 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
649 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
650 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
651 %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)
652 ret <vscale x 16 x i16> %v
655 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)
657 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) {
658 ; CHECK-LABEL: vrsub_vx_nxv32i16:
660 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
661 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
663 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
664 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
665 %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)
666 ret <vscale x 32 x i16> %v
669 define <vscale x 32 x i16> @vrsub_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
670 ; CHECK-LABEL: vrsub_vx_nxv32i16_unmasked:
672 ; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma
673 ; CHECK-NEXT: vrsub.vx v8, v8, a0
675 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
676 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
677 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
678 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
679 %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)
680 ret <vscale x 32 x i16> %v
683 define <vscale x 32 x i16> @vrsub_vi_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) {
684 ; CHECK-LABEL: vrsub_vi_nxv32i16:
686 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
687 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
689 %elt.head = insertelement <vscale x 32 x i16> poison, i16 2, i32 0
690 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
691 %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)
692 ret <vscale x 32 x i16> %v
695 define <vscale x 32 x i16> @vrsub_vi_nxv32i16_unmasked(<vscale x 32 x i16> %va, i32 zeroext %evl) {
696 ; CHECK-LABEL: vrsub_vi_nxv32i16_unmasked:
698 ; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma
699 ; CHECK-NEXT: vrsub.vi v8, v8, 2
701 %elt.head = insertelement <vscale x 32 x i16> poison, i16 2, i32 0
702 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
703 %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
704 %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
705 %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)
706 ret <vscale x 32 x i16> %v
709 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)
711 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) {
712 ; CHECK-LABEL: vrsub_vx_nxv1i32:
714 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
715 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
717 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
718 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
719 %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)
720 ret <vscale x 1 x i32> %v
723 define <vscale x 1 x i32> @vrsub_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
724 ; CHECK-LABEL: vrsub_vx_nxv1i32_unmasked:
726 ; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma
727 ; CHECK-NEXT: vrsub.vx v8, v8, a0
729 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
730 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
731 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
732 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
733 %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)
734 ret <vscale x 1 x i32> %v
737 define <vscale x 1 x i32> @vrsub_vi_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
738 ; CHECK-LABEL: vrsub_vi_nxv1i32:
740 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
741 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
743 %elt.head = insertelement <vscale x 1 x i32> poison, i32 2, i32 0
744 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
745 %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)
746 ret <vscale x 1 x i32> %v
749 define <vscale x 1 x i32> @vrsub_vi_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 zeroext %evl) {
750 ; CHECK-LABEL: vrsub_vi_nxv1i32_unmasked:
752 ; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma
753 ; CHECK-NEXT: vrsub.vi v8, v8, 2
755 %elt.head = insertelement <vscale x 1 x i32> poison, i32 2, i32 0
756 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
757 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
758 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
759 %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)
760 ret <vscale x 1 x i32> %v
763 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)
765 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) {
766 ; CHECK-LABEL: vrsub_vx_nxv2i32:
768 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
769 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
771 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
772 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
773 %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)
774 ret <vscale x 2 x i32> %v
777 define <vscale x 2 x i32> @vrsub_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
778 ; CHECK-LABEL: vrsub_vx_nxv2i32_unmasked:
780 ; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma
781 ; CHECK-NEXT: vrsub.vx v8, v8, a0
783 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
784 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
785 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
786 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
787 %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)
788 ret <vscale x 2 x i32> %v
791 define <vscale x 2 x i32> @vrsub_vi_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
792 ; CHECK-LABEL: vrsub_vi_nxv2i32:
794 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
795 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
797 %elt.head = insertelement <vscale x 2 x i32> poison, i32 2, i32 0
798 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
799 %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)
800 ret <vscale x 2 x i32> %v
803 define <vscale x 2 x i32> @vrsub_vi_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 zeroext %evl) {
804 ; CHECK-LABEL: vrsub_vi_nxv2i32_unmasked:
806 ; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma
807 ; CHECK-NEXT: vrsub.vi v8, v8, 2
809 %elt.head = insertelement <vscale x 2 x i32> poison, i32 2, i32 0
810 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
811 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
812 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
813 %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)
814 ret <vscale x 2 x i32> %v
817 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)
819 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) {
820 ; CHECK-LABEL: vrsub_vx_nxv4i32:
822 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
823 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
825 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
826 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
827 %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)
828 ret <vscale x 4 x i32> %v
831 define <vscale x 4 x i32> @vrsub_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
832 ; CHECK-LABEL: vrsub_vx_nxv4i32_unmasked:
834 ; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma
835 ; CHECK-NEXT: vrsub.vx v8, v8, a0
837 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
838 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
839 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
840 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
841 %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)
842 ret <vscale x 4 x i32> %v
845 define <vscale x 4 x i32> @vrsub_vi_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
846 ; CHECK-LABEL: vrsub_vi_nxv4i32:
848 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
849 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
851 %elt.head = insertelement <vscale x 4 x i32> poison, i32 2, i32 0
852 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
853 %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)
854 ret <vscale x 4 x i32> %v
857 define <vscale x 4 x i32> @vrsub_vi_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 zeroext %evl) {
858 ; CHECK-LABEL: vrsub_vi_nxv4i32_unmasked:
860 ; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma
861 ; CHECK-NEXT: vrsub.vi v8, v8, 2
863 %elt.head = insertelement <vscale x 4 x i32> poison, i32 2, i32 0
864 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
865 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
866 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
867 %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)
868 ret <vscale x 4 x i32> %v
871 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)
873 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) {
874 ; CHECK-LABEL: vrsub_vx_nxv8i32:
876 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
877 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
879 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
880 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
881 %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)
882 ret <vscale x 8 x i32> %v
885 define <vscale x 8 x i32> @vrsub_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
886 ; CHECK-LABEL: vrsub_vx_nxv8i32_unmasked:
888 ; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma
889 ; CHECK-NEXT: vrsub.vx v8, v8, a0
891 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
892 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
893 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
894 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
895 %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)
896 ret <vscale x 8 x i32> %v
899 define <vscale x 8 x i32> @vrsub_vi_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
900 ; CHECK-LABEL: vrsub_vi_nxv8i32:
902 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
903 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
905 %elt.head = insertelement <vscale x 8 x i32> poison, i32 2, i32 0
906 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
907 %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)
908 ret <vscale x 8 x i32> %v
911 define <vscale x 8 x i32> @vrsub_vi_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 zeroext %evl) {
912 ; CHECK-LABEL: vrsub_vi_nxv8i32_unmasked:
914 ; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma
915 ; CHECK-NEXT: vrsub.vi v8, v8, 2
917 %elt.head = insertelement <vscale x 8 x i32> poison, i32 2, i32 0
918 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
919 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
920 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
921 %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)
922 ret <vscale x 8 x i32> %v
925 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)
927 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) {
928 ; CHECK-LABEL: vrsub_vx_nxv16i32:
930 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
931 ; CHECK-NEXT: vrsub.vx v8, v8, a0, v0.t
933 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
934 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
935 %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)
936 ret <vscale x 16 x i32> %v
939 define <vscale x 16 x i32> @vrsub_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
940 ; CHECK-LABEL: vrsub_vx_nxv16i32_unmasked:
942 ; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma
943 ; CHECK-NEXT: vrsub.vx v8, v8, a0
945 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
946 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
947 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
948 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
949 %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)
950 ret <vscale x 16 x i32> %v
953 define <vscale x 16 x i32> @vrsub_vi_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i1> %m, i32 zeroext %evl) {
954 ; CHECK-LABEL: vrsub_vi_nxv16i32:
956 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
957 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
959 %elt.head = insertelement <vscale x 16 x i32> poison, i32 2, i32 0
960 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
961 %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)
962 ret <vscale x 16 x i32> %v
965 define <vscale x 16 x i32> @vrsub_vi_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 zeroext %evl) {
966 ; CHECK-LABEL: vrsub_vi_nxv16i32_unmasked:
968 ; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma
969 ; CHECK-NEXT: vrsub.vi v8, v8, 2
971 %elt.head = insertelement <vscale x 16 x i32> poison, i32 2, i32 0
972 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
973 %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
974 %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
975 %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)
976 ret <vscale x 16 x i32> %v
979 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)
981 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) {
982 ; RV32-LABEL: vrsub_vx_nxv1i64:
984 ; RV32-NEXT: addi sp, sp, -16
985 ; RV32-NEXT: .cfi_def_cfa_offset 16
986 ; RV32-NEXT: sw a1, 12(sp)
987 ; RV32-NEXT: sw a0, 8(sp)
988 ; RV32-NEXT: addi a0, sp, 8
989 ; RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
990 ; RV32-NEXT: vlse64.v v9, (a0), zero
991 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
992 ; RV32-NEXT: vsub.vv v8, v9, v8, v0.t
993 ; RV32-NEXT: addi sp, sp, 16
996 ; RV64-LABEL: vrsub_vx_nxv1i64:
998 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
999 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
1001 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1002 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1003 %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)
1004 ret <vscale x 1 x i64> %v
1007 define <vscale x 1 x i64> @vrsub_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1008 ; RV32-LABEL: vrsub_vx_nxv1i64_unmasked:
1010 ; RV32-NEXT: addi sp, sp, -16
1011 ; RV32-NEXT: .cfi_def_cfa_offset 16
1012 ; RV32-NEXT: sw a1, 12(sp)
1013 ; RV32-NEXT: sw a0, 8(sp)
1014 ; RV32-NEXT: addi a0, sp, 8
1015 ; RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
1016 ; RV32-NEXT: vlse64.v v9, (a0), zero
1017 ; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma
1018 ; RV32-NEXT: vsub.vv v8, v9, v8
1019 ; RV32-NEXT: addi sp, sp, 16
1022 ; RV64-LABEL: vrsub_vx_nxv1i64_unmasked:
1024 ; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma
1025 ; RV64-NEXT: vrsub.vx v8, v8, a0
1027 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1028 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1029 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1030 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1031 %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)
1032 ret <vscale x 1 x i64> %v
1035 define <vscale x 1 x i64> @vrsub_vi_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i1> %m, i32 zeroext %evl) {
1036 ; CHECK-LABEL: vrsub_vi_nxv1i64:
1038 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1039 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
1041 %elt.head = insertelement <vscale x 1 x i64> poison, i64 2, i32 0
1042 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1043 %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)
1044 ret <vscale x 1 x i64> %v
1047 define <vscale x 1 x i64> @vrsub_vi_nxv1i64_unmasked(<vscale x 1 x i64> %va, i32 zeroext %evl) {
1048 ; CHECK-LABEL: vrsub_vi_nxv1i64_unmasked:
1050 ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma
1051 ; CHECK-NEXT: vrsub.vi v8, v8, 2
1053 %elt.head = insertelement <vscale x 1 x i64> poison, i64 2, i32 0
1054 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1055 %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1056 %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1057 %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)
1058 ret <vscale x 1 x i64> %v
1061 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)
1063 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) {
1064 ; RV32-LABEL: vrsub_vx_nxv2i64:
1066 ; RV32-NEXT: addi sp, sp, -16
1067 ; RV32-NEXT: .cfi_def_cfa_offset 16
1068 ; RV32-NEXT: sw a1, 12(sp)
1069 ; RV32-NEXT: sw a0, 8(sp)
1070 ; RV32-NEXT: addi a0, sp, 8
1071 ; RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1072 ; RV32-NEXT: vlse64.v v10, (a0), zero
1073 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1074 ; RV32-NEXT: vsub.vv v8, v10, v8, v0.t
1075 ; RV32-NEXT: addi sp, sp, 16
1078 ; RV64-LABEL: vrsub_vx_nxv2i64:
1080 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1081 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
1083 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1084 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1085 %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)
1086 ret <vscale x 2 x i64> %v
1089 define <vscale x 2 x i64> @vrsub_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1090 ; RV32-LABEL: vrsub_vx_nxv2i64_unmasked:
1092 ; RV32-NEXT: addi sp, sp, -16
1093 ; RV32-NEXT: .cfi_def_cfa_offset 16
1094 ; RV32-NEXT: sw a1, 12(sp)
1095 ; RV32-NEXT: sw a0, 8(sp)
1096 ; RV32-NEXT: addi a0, sp, 8
1097 ; RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
1098 ; RV32-NEXT: vlse64.v v10, (a0), zero
1099 ; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma
1100 ; RV32-NEXT: vsub.vv v8, v10, v8
1101 ; RV32-NEXT: addi sp, sp, 16
1104 ; RV64-LABEL: vrsub_vx_nxv2i64_unmasked:
1106 ; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma
1107 ; RV64-NEXT: vrsub.vx v8, v8, a0
1109 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1110 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1111 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1112 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1113 %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)
1114 ret <vscale x 2 x i64> %v
1117 define <vscale x 2 x i64> @vrsub_vi_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1118 ; CHECK-LABEL: vrsub_vi_nxv2i64:
1120 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1121 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
1123 %elt.head = insertelement <vscale x 2 x i64> poison, i64 2, i32 0
1124 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1125 %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)
1126 ret <vscale x 2 x i64> %v
1129 define <vscale x 2 x i64> @vrsub_vi_nxv2i64_unmasked(<vscale x 2 x i64> %va, i32 zeroext %evl) {
1130 ; CHECK-LABEL: vrsub_vi_nxv2i64_unmasked:
1132 ; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma
1133 ; CHECK-NEXT: vrsub.vi v8, v8, 2
1135 %elt.head = insertelement <vscale x 2 x i64> poison, i64 2, i32 0
1136 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1137 %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1138 %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1139 %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)
1140 ret <vscale x 2 x i64> %v
1143 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)
1145 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) {
1146 ; RV32-LABEL: vrsub_vx_nxv4i64:
1148 ; RV32-NEXT: addi sp, sp, -16
1149 ; RV32-NEXT: .cfi_def_cfa_offset 16
1150 ; RV32-NEXT: sw a1, 12(sp)
1151 ; RV32-NEXT: sw a0, 8(sp)
1152 ; RV32-NEXT: addi a0, sp, 8
1153 ; RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1154 ; RV32-NEXT: vlse64.v v12, (a0), zero
1155 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1156 ; RV32-NEXT: vsub.vv v8, v12, v8, v0.t
1157 ; RV32-NEXT: addi sp, sp, 16
1160 ; RV64-LABEL: vrsub_vx_nxv4i64:
1162 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1163 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
1165 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1166 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1167 %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)
1168 ret <vscale x 4 x i64> %v
1171 define <vscale x 4 x i64> @vrsub_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1172 ; RV32-LABEL: vrsub_vx_nxv4i64_unmasked:
1174 ; RV32-NEXT: addi sp, sp, -16
1175 ; RV32-NEXT: .cfi_def_cfa_offset 16
1176 ; RV32-NEXT: sw a1, 12(sp)
1177 ; RV32-NEXT: sw a0, 8(sp)
1178 ; RV32-NEXT: addi a0, sp, 8
1179 ; RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
1180 ; RV32-NEXT: vlse64.v v12, (a0), zero
1181 ; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma
1182 ; RV32-NEXT: vsub.vv v8, v12, v8
1183 ; RV32-NEXT: addi sp, sp, 16
1186 ; RV64-LABEL: vrsub_vx_nxv4i64_unmasked:
1188 ; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma
1189 ; RV64-NEXT: vrsub.vx v8, v8, a0
1191 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1192 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1193 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1194 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1195 %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)
1196 ret <vscale x 4 x i64> %v
1199 define <vscale x 4 x i64> @vrsub_vi_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1200 ; CHECK-LABEL: vrsub_vi_nxv4i64:
1202 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1203 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
1205 %elt.head = insertelement <vscale x 4 x i64> poison, i64 2, i32 0
1206 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1207 %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)
1208 ret <vscale x 4 x i64> %v
1211 define <vscale x 4 x i64> @vrsub_vi_nxv4i64_unmasked(<vscale x 4 x i64> %va, i32 zeroext %evl) {
1212 ; CHECK-LABEL: vrsub_vi_nxv4i64_unmasked:
1214 ; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma
1215 ; CHECK-NEXT: vrsub.vi v8, v8, 2
1217 %elt.head = insertelement <vscale x 4 x i64> poison, i64 2, i32 0
1218 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1219 %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1220 %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1221 %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)
1222 ret <vscale x 4 x i64> %v
1225 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)
1227 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) {
1228 ; RV32-LABEL: vrsub_vx_nxv8i64:
1230 ; RV32-NEXT: addi sp, sp, -16
1231 ; RV32-NEXT: .cfi_def_cfa_offset 16
1232 ; RV32-NEXT: sw a1, 12(sp)
1233 ; RV32-NEXT: sw a0, 8(sp)
1234 ; RV32-NEXT: addi a0, sp, 8
1235 ; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1236 ; RV32-NEXT: vlse64.v v16, (a0), zero
1237 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1238 ; RV32-NEXT: vsub.vv v8, v16, v8, v0.t
1239 ; RV32-NEXT: addi sp, sp, 16
1242 ; RV64-LABEL: vrsub_vx_nxv8i64:
1244 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1245 ; RV64-NEXT: vrsub.vx v8, v8, a0, v0.t
1247 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1248 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1249 %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)
1250 ret <vscale x 8 x i64> %v
1253 define <vscale x 8 x i64> @vrsub_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1254 ; RV32-LABEL: vrsub_vx_nxv8i64_unmasked:
1256 ; RV32-NEXT: addi sp, sp, -16
1257 ; RV32-NEXT: .cfi_def_cfa_offset 16
1258 ; RV32-NEXT: sw a1, 12(sp)
1259 ; RV32-NEXT: sw a0, 8(sp)
1260 ; RV32-NEXT: addi a0, sp, 8
1261 ; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
1262 ; RV32-NEXT: vlse64.v v16, (a0), zero
1263 ; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma
1264 ; RV32-NEXT: vsub.vv v8, v16, v8
1265 ; RV32-NEXT: addi sp, sp, 16
1268 ; RV64-LABEL: vrsub_vx_nxv8i64_unmasked:
1270 ; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma
1271 ; RV64-NEXT: vrsub.vx v8, v8, a0
1273 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1274 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1275 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1276 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1277 %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)
1278 ret <vscale x 8 x i64> %v
1281 define <vscale x 8 x i64> @vrsub_vi_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1282 ; CHECK-LABEL: vrsub_vi_nxv8i64:
1284 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1285 ; CHECK-NEXT: vrsub.vi v8, v8, 2, v0.t
1287 %elt.head = insertelement <vscale x 8 x i64> poison, i64 2, i32 0
1288 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1289 %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)
1290 ret <vscale x 8 x i64> %v
1293 define <vscale x 8 x i64> @vrsub_vi_nxv8i64_unmasked(<vscale x 8 x i64> %va, i32 zeroext %evl) {
1294 ; CHECK-LABEL: vrsub_vi_nxv8i64_unmasked:
1296 ; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma
1297 ; CHECK-NEXT: vrsub.vi v8, v8, 2
1299 %elt.head = insertelement <vscale x 8 x i64> poison, i64 2, i32 0
1300 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1301 %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1302 %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1303 %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)
1304 ret <vscale x 8 x i64> %v