Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vrsub-vp.ll
bloba6eb4de03e1ccdcc3d63519dde1c27c6fe35a800
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   %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:
37 ; CHECK:       # %bb.0:
38 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
39 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
40 ; CHECK-NEXT:    ret
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:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
51 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
52 ; CHECK-NEXT:    ret
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:
65 ; CHECK:       # %bb.0:
66 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
67 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
68 ; CHECK-NEXT:    ret
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:
77 ; CHECK:       # %bb.0:
78 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
79 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
80 ; CHECK-NEXT:    ret
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:
91 ; CHECK:       # %bb.0:
92 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
93 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
94 ; CHECK-NEXT:    ret
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:
103 ; CHECK:       # %bb.0:
104 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
105 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
106 ; CHECK-NEXT:    ret
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:
119 ; CHECK:       # %bb.0:
120 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
121 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
122 ; CHECK-NEXT:    ret
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:
131 ; CHECK:       # %bb.0:
132 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
133 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
134 ; CHECK-NEXT:    ret
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:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
147 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
148 ; CHECK-NEXT:    ret
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:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
159 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
160 ; CHECK-NEXT:    ret
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:
173 ; CHECK:       # %bb.0:
174 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
175 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
176 ; CHECK-NEXT:    ret
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:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
187 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
188 ; CHECK-NEXT:    ret
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:
199 ; CHECK:       # %bb.0:
200 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
201 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
202 ; CHECK-NEXT:    ret
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:
211 ; CHECK:       # %bb.0:
212 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
213 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
214 ; CHECK-NEXT:    ret
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:
227 ; CHECK:       # %bb.0:
228 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
229 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
230 ; CHECK-NEXT:    ret
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:
239 ; CHECK:       # %bb.0:
240 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
241 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
242 ; CHECK-NEXT:    ret
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:
253 ; CHECK:       # %bb.0:
254 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
255 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
256 ; CHECK-NEXT:    ret
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:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
267 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
268 ; CHECK-NEXT:    ret
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:
281 ; CHECK:       # %bb.0:
282 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
283 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
284 ; CHECK-NEXT:    ret
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:
293 ; CHECK:       # %bb.0:
294 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
295 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
296 ; CHECK-NEXT:    ret
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:
307 ; CHECK:       # %bb.0:
308 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
309 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
310 ; CHECK-NEXT:    ret
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:
319 ; CHECK:       # %bb.0:
320 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
321 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
322 ; CHECK-NEXT:    ret
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:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
337 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
338 ; CHECK-NEXT:    ret
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:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
349 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
350 ; CHECK-NEXT:    ret
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:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
363 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
364 ; CHECK-NEXT:    ret
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:
373 ; CHECK:       # %bb.0:
374 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
375 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
376 ; CHECK-NEXT:    ret
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:
389 ; CHECK:       # %bb.0:
390 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
391 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
392 ; CHECK-NEXT:    ret
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:
401 ; CHECK:       # %bb.0:
402 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
403 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
404 ; CHECK-NEXT:    ret
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:
415 ; CHECK:       # %bb.0:
416 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
417 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
418 ; CHECK-NEXT:    ret
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:
427 ; CHECK:       # %bb.0:
428 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
429 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
430 ; CHECK-NEXT:    ret
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:
443 ; CHECK:       # %bb.0:
444 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
445 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
446 ; CHECK-NEXT:    ret
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:
455 ; CHECK:       # %bb.0:
456 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
457 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
458 ; CHECK-NEXT:    ret
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:
469 ; CHECK:       # %bb.0:
470 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
471 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
472 ; CHECK-NEXT:    ret
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:
481 ; CHECK:       # %bb.0:
482 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
483 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
484 ; CHECK-NEXT:    ret
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:
497 ; CHECK:       # %bb.0:
498 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
499 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
500 ; CHECK-NEXT:    ret
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:
509 ; CHECK:       # %bb.0:
510 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
511 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
512 ; CHECK-NEXT:    ret
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:
523 ; CHECK:       # %bb.0:
524 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
525 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
526 ; CHECK-NEXT:    ret
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:
535 ; CHECK:       # %bb.0:
536 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
537 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
538 ; CHECK-NEXT:    ret
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:
551 ; CHECK:       # %bb.0:
552 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
553 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
554 ; CHECK-NEXT:    ret
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:
563 ; CHECK:       # %bb.0:
564 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
565 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
566 ; CHECK-NEXT:    ret
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:
577 ; CHECK:       # %bb.0:
578 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
579 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
580 ; CHECK-NEXT:    ret
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:
589 ; CHECK:       # %bb.0:
590 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
591 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
592 ; CHECK-NEXT:    ret
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:
605 ; CHECK:       # %bb.0:
606 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
607 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
608 ; CHECK-NEXT:    ret
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:
617 ; CHECK:       # %bb.0:
618 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
619 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
620 ; CHECK-NEXT:    ret
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:
631 ; CHECK:       # %bb.0:
632 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
633 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
634 ; CHECK-NEXT:    ret
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:
643 ; CHECK:       # %bb.0:
644 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
645 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
646 ; CHECK-NEXT:    ret
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:
659 ; CHECK:       # %bb.0:
660 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
661 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
662 ; CHECK-NEXT:    ret
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:
671 ; CHECK:       # %bb.0:
672 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
673 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
674 ; CHECK-NEXT:    ret
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:
685 ; CHECK:       # %bb.0:
686 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
687 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
688 ; CHECK-NEXT:    ret
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:
697 ; CHECK:       # %bb.0:
698 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
699 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
700 ; CHECK-NEXT:    ret
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:
713 ; CHECK:       # %bb.0:
714 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
715 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
716 ; CHECK-NEXT:    ret
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:
725 ; CHECK:       # %bb.0:
726 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
727 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
728 ; CHECK-NEXT:    ret
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:
739 ; CHECK:       # %bb.0:
740 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
741 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
742 ; CHECK-NEXT:    ret
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:
751 ; CHECK:       # %bb.0:
752 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
753 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
754 ; CHECK-NEXT:    ret
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:
767 ; CHECK:       # %bb.0:
768 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
769 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
770 ; CHECK-NEXT:    ret
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:
779 ; CHECK:       # %bb.0:
780 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
781 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
782 ; CHECK-NEXT:    ret
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:
793 ; CHECK:       # %bb.0:
794 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
795 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
796 ; CHECK-NEXT:    ret
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:
805 ; CHECK:       # %bb.0:
806 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
807 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
808 ; CHECK-NEXT:    ret
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:
821 ; CHECK:       # %bb.0:
822 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
823 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
824 ; CHECK-NEXT:    ret
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:
833 ; CHECK:       # %bb.0:
834 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
835 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
836 ; CHECK-NEXT:    ret
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:
847 ; CHECK:       # %bb.0:
848 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
849 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
850 ; CHECK-NEXT:    ret
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:
859 ; CHECK:       # %bb.0:
860 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
861 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
862 ; CHECK-NEXT:    ret
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:
875 ; CHECK:       # %bb.0:
876 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
877 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
878 ; CHECK-NEXT:    ret
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:
887 ; CHECK:       # %bb.0:
888 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
889 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
890 ; CHECK-NEXT:    ret
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:
901 ; CHECK:       # %bb.0:
902 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
903 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
904 ; CHECK-NEXT:    ret
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:
913 ; CHECK:       # %bb.0:
914 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
915 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
916 ; CHECK-NEXT:    ret
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:
929 ; CHECK:       # %bb.0:
930 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
931 ; CHECK-NEXT:    vrsub.vx v8, v8, a0, v0.t
932 ; CHECK-NEXT:    ret
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:
941 ; CHECK:       # %bb.0:
942 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
943 ; CHECK-NEXT:    vrsub.vx v8, v8, a0
944 ; CHECK-NEXT:    ret
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:
955 ; CHECK:       # %bb.0:
956 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
957 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
958 ; CHECK-NEXT:    ret
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:
967 ; CHECK:       # %bb.0:
968 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
969 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
970 ; CHECK-NEXT:    ret
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:
983 ; RV32:       # %bb.0:
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
994 ; RV32-NEXT:    ret
996 ; RV64-LABEL: vrsub_vx_nxv1i64:
997 ; RV64:       # %bb.0:
998 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
999 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
1000 ; RV64-NEXT:    ret
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:
1009 ; RV32:       # %bb.0:
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
1020 ; RV32-NEXT:    ret
1022 ; RV64-LABEL: vrsub_vx_nxv1i64_unmasked:
1023 ; RV64:       # %bb.0:
1024 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1025 ; RV64-NEXT:    vrsub.vx v8, v8, a0
1026 ; RV64-NEXT:    ret
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:
1037 ; CHECK:       # %bb.0:
1038 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1039 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
1040 ; CHECK-NEXT:    ret
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:
1049 ; CHECK:       # %bb.0:
1050 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
1051 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
1052 ; CHECK-NEXT:    ret
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:
1065 ; RV32:       # %bb.0:
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
1076 ; RV32-NEXT:    ret
1078 ; RV64-LABEL: vrsub_vx_nxv2i64:
1079 ; RV64:       # %bb.0:
1080 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1081 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
1082 ; RV64-NEXT:    ret
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:
1091 ; RV32:       # %bb.0:
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
1102 ; RV32-NEXT:    ret
1104 ; RV64-LABEL: vrsub_vx_nxv2i64_unmasked:
1105 ; RV64:       # %bb.0:
1106 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1107 ; RV64-NEXT:    vrsub.vx v8, v8, a0
1108 ; RV64-NEXT:    ret
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:
1119 ; CHECK:       # %bb.0:
1120 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1121 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
1122 ; CHECK-NEXT:    ret
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:
1131 ; CHECK:       # %bb.0:
1132 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1133 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
1134 ; CHECK-NEXT:    ret
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:
1147 ; RV32:       # %bb.0:
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
1158 ; RV32-NEXT:    ret
1160 ; RV64-LABEL: vrsub_vx_nxv4i64:
1161 ; RV64:       # %bb.0:
1162 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1163 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
1164 ; RV64-NEXT:    ret
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:
1173 ; RV32:       # %bb.0:
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
1184 ; RV32-NEXT:    ret
1186 ; RV64-LABEL: vrsub_vx_nxv4i64_unmasked:
1187 ; RV64:       # %bb.0:
1188 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1189 ; RV64-NEXT:    vrsub.vx v8, v8, a0
1190 ; RV64-NEXT:    ret
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:
1201 ; CHECK:       # %bb.0:
1202 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1203 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
1204 ; CHECK-NEXT:    ret
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:
1213 ; CHECK:       # %bb.0:
1214 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1215 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
1216 ; CHECK-NEXT:    ret
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:
1229 ; RV32:       # %bb.0:
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
1240 ; RV32-NEXT:    ret
1242 ; RV64-LABEL: vrsub_vx_nxv8i64:
1243 ; RV64:       # %bb.0:
1244 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1245 ; RV64-NEXT:    vrsub.vx v8, v8, a0, v0.t
1246 ; RV64-NEXT:    ret
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:
1255 ; RV32:       # %bb.0:
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
1266 ; RV32-NEXT:    ret
1268 ; RV64-LABEL: vrsub_vx_nxv8i64_unmasked:
1269 ; RV64:       # %bb.0:
1270 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1271 ; RV64-NEXT:    vrsub.vx v8, v8, a0
1272 ; RV64-NEXT:    ret
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:
1283 ; CHECK:       # %bb.0:
1284 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1285 ; CHECK-NEXT:    vrsub.vi v8, v8, 2, v0.t
1286 ; CHECK-NEXT:    ret
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:
1295 ; CHECK:       # %bb.0:
1296 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1297 ; CHECK-NEXT:    vrsub.vi v8, v8, 2
1298 ; CHECK-NEXT:    ret
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