Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vsub-vp.ll
blobf424c6c3aed9436c668fccbcfdd0c2f8fb615fed
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 8 x i7> @llvm.vp.sub.nxv8i7(<vscale x 8 x i7>, <vscale x 8 x i7>, <vscale x 8 x i1>, i32)
9 define <vscale x 8 x i7> @vsub_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {
10 ; CHECK-LABEL: vsub_vx_nxv8i7:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
13 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
14 ; CHECK-NEXT:    ret
15   %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 0
16   %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer
17   %v = call <vscale x 8 x i7> @llvm.vp.sub.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)
18   ret <vscale x 8 x i7> %v
21 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)
23 define <vscale x 1 x i8> @vsub_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
24 ; CHECK-LABEL: vsub_vv_nxv1i8:
25 ; CHECK:       # %bb.0:
26 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
27 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
28 ; CHECK-NEXT:    ret
29   %v = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
30   ret <vscale x 1 x i8> %v
33 define <vscale x 1 x i8> @vsub_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {
34 ; CHECK-LABEL: vsub_vv_nxv1i8_unmasked:
35 ; CHECK:       # %bb.0:
36 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
37 ; CHECK-NEXT:    vsub.vv v8, v8, v9
38 ; CHECK-NEXT:    ret
39   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
40   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
41   %v = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)
42   ret <vscale x 1 x i8> %v
45 define <vscale x 1 x i8> @vsub_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
46 ; CHECK-LABEL: vsub_vx_nxv1i8:
47 ; CHECK:       # %bb.0:
48 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
49 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
50 ; CHECK-NEXT:    ret
51   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
52   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
53   %v = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
54   ret <vscale x 1 x i8> %v
57 define <vscale x 1 x i8> @vsub_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {
58 ; CHECK-LABEL: vsub_vx_nxv1i8_unmasked:
59 ; CHECK:       # %bb.0:
60 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
61 ; CHECK-NEXT:    vsub.vx v8, v8, a0
62 ; CHECK-NEXT:    ret
63   %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
64   %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
65   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
66   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
67   %v = call <vscale x 1 x i8> @llvm.vp.sub.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)
68   ret <vscale x 1 x i8> %v
71 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)
73 define <vscale x 2 x i8> @vsub_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
74 ; CHECK-LABEL: vsub_vv_nxv2i8:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
77 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
78 ; CHECK-NEXT:    ret
79   %v = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
80   ret <vscale x 2 x i8> %v
83 define <vscale x 2 x i8> @vsub_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {
84 ; CHECK-LABEL: vsub_vv_nxv2i8_unmasked:
85 ; CHECK:       # %bb.0:
86 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
87 ; CHECK-NEXT:    vsub.vv v8, v8, v9
88 ; CHECK-NEXT:    ret
89   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
90   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
91   %v = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)
92   ret <vscale x 2 x i8> %v
95 define <vscale x 2 x i8> @vsub_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
96 ; CHECK-LABEL: vsub_vx_nxv2i8:
97 ; CHECK:       # %bb.0:
98 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
99 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
100 ; CHECK-NEXT:    ret
101   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
102   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
103   %v = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
104   ret <vscale x 2 x i8> %v
107 define <vscale x 2 x i8> @vsub_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {
108 ; CHECK-LABEL: vsub_vx_nxv2i8_unmasked:
109 ; CHECK:       # %bb.0:
110 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
111 ; CHECK-NEXT:    vsub.vx v8, v8, a0
112 ; CHECK-NEXT:    ret
113   %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
114   %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
115   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
116   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
117   %v = call <vscale x 2 x i8> @llvm.vp.sub.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)
118   ret <vscale x 2 x i8> %v
121 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)
123 define <vscale x 4 x i8> @vsub_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
124 ; CHECK-LABEL: vsub_vv_nxv4i8:
125 ; CHECK:       # %bb.0:
126 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
127 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
128 ; CHECK-NEXT:    ret
129   %v = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
130   ret <vscale x 4 x i8> %v
133 define <vscale x 4 x i8> @vsub_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {
134 ; CHECK-LABEL: vsub_vv_nxv4i8_unmasked:
135 ; CHECK:       # %bb.0:
136 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
137 ; CHECK-NEXT:    vsub.vv v8, v8, v9
138 ; CHECK-NEXT:    ret
139   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
140   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
141   %v = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)
142   ret <vscale x 4 x i8> %v
145 define <vscale x 4 x i8> @vsub_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
146 ; CHECK-LABEL: vsub_vx_nxv4i8:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
149 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
150 ; CHECK-NEXT:    ret
151   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
152   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
153   %v = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
154   ret <vscale x 4 x i8> %v
157 define <vscale x 4 x i8> @vsub_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {
158 ; CHECK-LABEL: vsub_vx_nxv4i8_unmasked:
159 ; CHECK:       # %bb.0:
160 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
161 ; CHECK-NEXT:    vsub.vx v8, v8, a0
162 ; CHECK-NEXT:    ret
163   %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
164   %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
165   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
166   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
167   %v = call <vscale x 4 x i8> @llvm.vp.sub.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)
168   ret <vscale x 4 x i8> %v
171 declare <vscale x 5 x i8> @llvm.vp.sub.nxv5i8(<vscale x 5 x i8>, <vscale x 5 x i8>, <vscale x 5 x i1>, i32)
173 define <vscale x 5 x i8> @vsub_vv_nxv5i8(<vscale x 5 x i8> %va, <vscale x 5 x i8> %b, <vscale x 5 x i1> %m, i32 zeroext %evl) {
174 ; CHECK-LABEL: vsub_vv_nxv5i8:
175 ; CHECK:       # %bb.0:
176 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
177 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
178 ; CHECK-NEXT:    ret
179   %v = call <vscale x 5 x i8> @llvm.vp.sub.nxv5i8(<vscale x 5 x i8> %va, <vscale x 5 x i8> %b, <vscale x 5 x i1> %m, i32 %evl)
180   ret <vscale x 5 x i8> %v
183 define <vscale x 5 x i8> @vsub_vv_nxv5i8_unmasked(<vscale x 5 x i8> %va, <vscale x 5 x i8> %b, i32 zeroext %evl) {
184 ; CHECK-LABEL: vsub_vv_nxv5i8_unmasked:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
187 ; CHECK-NEXT:    vsub.vv v8, v8, v9
188 ; CHECK-NEXT:    ret
189   %head = insertelement <vscale x 5 x i1> poison, i1 true, i32 0
190   %m = shufflevector <vscale x 5 x i1> %head, <vscale x 5 x i1> poison, <vscale x 5 x i32> zeroinitializer
191   %v = call <vscale x 5 x i8> @llvm.vp.sub.nxv5i8(<vscale x 5 x i8> %va, <vscale x 5 x i8> %b, <vscale x 5 x i1> %m, i32 %evl)
192   ret <vscale x 5 x i8> %v
195 define <vscale x 5 x i8> @vsub_vx_nxv5i8(<vscale x 5 x i8> %va, i8 %b, <vscale x 5 x i1> %m, i32 zeroext %evl) {
196 ; CHECK-LABEL: vsub_vx_nxv5i8:
197 ; CHECK:       # %bb.0:
198 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
199 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
200 ; CHECK-NEXT:    ret
201   %elt.head = insertelement <vscale x 5 x i8> poison, i8 %b, i32 0
202   %vb = shufflevector <vscale x 5 x i8> %elt.head, <vscale x 5 x i8> poison, <vscale x 5 x i32> zeroinitializer
203   %v = call <vscale x 5 x i8> @llvm.vp.sub.nxv5i8(<vscale x 5 x i8> %va, <vscale x 5 x i8> %vb, <vscale x 5 x i1> %m, i32 %evl)
204   ret <vscale x 5 x i8> %v
207 define <vscale x 5 x i8> @vsub_vx_nxv5i8_unmasked(<vscale x 5 x i8> %va, i8 %b, i32 zeroext %evl) {
208 ; CHECK-LABEL: vsub_vx_nxv5i8_unmasked:
209 ; CHECK:       # %bb.0:
210 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
211 ; CHECK-NEXT:    vsub.vx v8, v8, a0
212 ; CHECK-NEXT:    ret
213   %elt.head = insertelement <vscale x 5 x i8> poison, i8 %b, i32 0
214   %vb = shufflevector <vscale x 5 x i8> %elt.head, <vscale x 5 x i8> poison, <vscale x 5 x i32> zeroinitializer
215   %head = insertelement <vscale x 5 x i1> poison, i1 true, i32 0
216   %m = shufflevector <vscale x 5 x i1> %head, <vscale x 5 x i1> poison, <vscale x 5 x i32> zeroinitializer
217   %v = call <vscale x 5 x i8> @llvm.vp.sub.nxv5i8(<vscale x 5 x i8> %va, <vscale x 5 x i8> %vb, <vscale x 5 x i1> %m, i32 %evl)
218   ret <vscale x 5 x i8> %v
221 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)
223 define <vscale x 8 x i8> @vsub_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
224 ; CHECK-LABEL: vsub_vv_nxv8i8:
225 ; CHECK:       # %bb.0:
226 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
227 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
228 ; CHECK-NEXT:    ret
229   %v = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
230   ret <vscale x 8 x i8> %v
233 define <vscale x 8 x i8> @vsub_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {
234 ; CHECK-LABEL: vsub_vv_nxv8i8_unmasked:
235 ; CHECK:       # %bb.0:
236 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
237 ; CHECK-NEXT:    vsub.vv v8, v8, v9
238 ; CHECK-NEXT:    ret
239   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
240   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
241   %v = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)
242   ret <vscale x 8 x i8> %v
245 define <vscale x 8 x i8> @vsub_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
246 ; CHECK-LABEL: vsub_vx_nxv8i8:
247 ; CHECK:       # %bb.0:
248 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
249 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
250 ; CHECK-NEXT:    ret
251   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
252   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
253   %v = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
254   ret <vscale x 8 x i8> %v
257 define <vscale x 8 x i8> @vsub_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {
258 ; CHECK-LABEL: vsub_vx_nxv8i8_unmasked:
259 ; CHECK:       # %bb.0:
260 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
261 ; CHECK-NEXT:    vsub.vx v8, v8, a0
262 ; CHECK-NEXT:    ret
263   %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
264   %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
265   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
266   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
267   %v = call <vscale x 8 x i8> @llvm.vp.sub.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)
268   ret <vscale x 8 x i8> %v
271 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)
273 define <vscale x 16 x i8> @vsub_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
274 ; CHECK-LABEL: vsub_vv_nxv16i8:
275 ; CHECK:       # %bb.0:
276 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
277 ; CHECK-NEXT:    vsub.vv v8, v8, v10, v0.t
278 ; CHECK-NEXT:    ret
279   %v = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
280   ret <vscale x 16 x i8> %v
283 define <vscale x 16 x i8> @vsub_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {
284 ; CHECK-LABEL: vsub_vv_nxv16i8_unmasked:
285 ; CHECK:       # %bb.0:
286 ; CHECK-NEXT:    vsetvli zero, a0, e8, m2, ta, ma
287 ; CHECK-NEXT:    vsub.vv v8, v8, v10
288 ; CHECK-NEXT:    ret
289   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
290   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
291   %v = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)
292   ret <vscale x 16 x i8> %v
295 define <vscale x 16 x i8> @vsub_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
296 ; CHECK-LABEL: vsub_vx_nxv16i8:
297 ; CHECK:       # %bb.0:
298 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
299 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
300 ; CHECK-NEXT:    ret
301   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
302   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
303   %v = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
304   ret <vscale x 16 x i8> %v
307 define <vscale x 16 x i8> @vsub_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {
308 ; CHECK-LABEL: vsub_vx_nxv16i8_unmasked:
309 ; CHECK:       # %bb.0:
310 ; CHECK-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
311 ; CHECK-NEXT:    vsub.vx v8, v8, a0
312 ; CHECK-NEXT:    ret
313   %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
314   %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
315   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
316   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
317   %v = call <vscale x 16 x i8> @llvm.vp.sub.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)
318   ret <vscale x 16 x i8> %v
321 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)
323 define <vscale x 32 x i8> @vsub_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
324 ; CHECK-LABEL: vsub_vv_nxv32i8:
325 ; CHECK:       # %bb.0:
326 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
327 ; CHECK-NEXT:    vsub.vv v8, v8, v12, v0.t
328 ; CHECK-NEXT:    ret
329   %v = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
330   ret <vscale x 32 x i8> %v
333 define <vscale x 32 x i8> @vsub_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {
334 ; CHECK-LABEL: vsub_vv_nxv32i8_unmasked:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetvli zero, a0, e8, m4, ta, ma
337 ; CHECK-NEXT:    vsub.vv v8, v8, v12
338 ; CHECK-NEXT:    ret
339   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
340   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
341   %v = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)
342   ret <vscale x 32 x i8> %v
345 define <vscale x 32 x i8> @vsub_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
346 ; CHECK-LABEL: vsub_vx_nxv32i8:
347 ; CHECK:       # %bb.0:
348 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
349 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
350 ; CHECK-NEXT:    ret
351   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
352   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
353   %v = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
354   ret <vscale x 32 x i8> %v
357 define <vscale x 32 x i8> @vsub_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {
358 ; CHECK-LABEL: vsub_vx_nxv32i8_unmasked:
359 ; CHECK:       # %bb.0:
360 ; CHECK-NEXT:    vsetvli zero, a1, e8, m4, ta, ma
361 ; CHECK-NEXT:    vsub.vx v8, v8, a0
362 ; CHECK-NEXT:    ret
363   %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
364   %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
365   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
366   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
367   %v = call <vscale x 32 x i8> @llvm.vp.sub.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)
368   ret <vscale x 32 x i8> %v
371 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)
373 define <vscale x 64 x i8> @vsub_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
374 ; CHECK-LABEL: vsub_vv_nxv64i8:
375 ; CHECK:       # %bb.0:
376 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
377 ; CHECK-NEXT:    vsub.vv v8, v8, v16, v0.t
378 ; CHECK-NEXT:    ret
379   %v = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
380   ret <vscale x 64 x i8> %v
383 define <vscale x 64 x i8> @vsub_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {
384 ; CHECK-LABEL: vsub_vv_nxv64i8_unmasked:
385 ; CHECK:       # %bb.0:
386 ; CHECK-NEXT:    vsetvli zero, a0, e8, m8, ta, ma
387 ; CHECK-NEXT:    vsub.vv v8, v8, v16
388 ; CHECK-NEXT:    ret
389   %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
390   %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
391   %v = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)
392   ret <vscale x 64 x i8> %v
395 define <vscale x 64 x i8> @vsub_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {
396 ; CHECK-LABEL: vsub_vx_nxv64i8:
397 ; CHECK:       # %bb.0:
398 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
399 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
400 ; CHECK-NEXT:    ret
401   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
402   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
403   %v = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
404   ret <vscale x 64 x i8> %v
407 define <vscale x 64 x i8> @vsub_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {
408 ; CHECK-LABEL: vsub_vx_nxv64i8_unmasked:
409 ; CHECK:       # %bb.0:
410 ; CHECK-NEXT:    vsetvli zero, a1, e8, m8, ta, ma
411 ; CHECK-NEXT:    vsub.vx v8, v8, a0
412 ; CHECK-NEXT:    ret
413   %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
414   %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
415   %head = insertelement <vscale x 64 x i1> poison, i1 true, i32 0
416   %m = shufflevector <vscale x 64 x i1> %head, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer
417   %v = call <vscale x 64 x i8> @llvm.vp.sub.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)
418   ret <vscale x 64 x i8> %v
421 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)
423 define <vscale x 1 x i16> @vsub_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
424 ; CHECK-LABEL: vsub_vv_nxv1i16:
425 ; CHECK:       # %bb.0:
426 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
427 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
428 ; CHECK-NEXT:    ret
429   %v = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
430   ret <vscale x 1 x i16> %v
433 define <vscale x 1 x i16> @vsub_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {
434 ; CHECK-LABEL: vsub_vv_nxv1i16_unmasked:
435 ; CHECK:       # %bb.0:
436 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
437 ; CHECK-NEXT:    vsub.vv v8, v8, v9
438 ; CHECK-NEXT:    ret
439   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
440   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
441   %v = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)
442   ret <vscale x 1 x i16> %v
445 define <vscale x 1 x i16> @vsub_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
446 ; CHECK-LABEL: vsub_vx_nxv1i16:
447 ; CHECK:       # %bb.0:
448 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
449 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
450 ; CHECK-NEXT:    ret
451   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
452   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
453   %v = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
454   ret <vscale x 1 x i16> %v
457 define <vscale x 1 x i16> @vsub_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {
458 ; CHECK-LABEL: vsub_vx_nxv1i16_unmasked:
459 ; CHECK:       # %bb.0:
460 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
461 ; CHECK-NEXT:    vsub.vx v8, v8, a0
462 ; CHECK-NEXT:    ret
463   %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
464   %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
465   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
466   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
467   %v = call <vscale x 1 x i16> @llvm.vp.sub.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)
468   ret <vscale x 1 x i16> %v
471 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)
473 define <vscale x 2 x i16> @vsub_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
474 ; CHECK-LABEL: vsub_vv_nxv2i16:
475 ; CHECK:       # %bb.0:
476 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
477 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
478 ; CHECK-NEXT:    ret
479   %v = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
480   ret <vscale x 2 x i16> %v
483 define <vscale x 2 x i16> @vsub_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {
484 ; CHECK-LABEL: vsub_vv_nxv2i16_unmasked:
485 ; CHECK:       # %bb.0:
486 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
487 ; CHECK-NEXT:    vsub.vv v8, v8, v9
488 ; CHECK-NEXT:    ret
489   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
490   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
491   %v = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)
492   ret <vscale x 2 x i16> %v
495 define <vscale x 2 x i16> @vsub_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
496 ; CHECK-LABEL: vsub_vx_nxv2i16:
497 ; CHECK:       # %bb.0:
498 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
499 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
500 ; CHECK-NEXT:    ret
501   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
502   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
503   %v = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
504   ret <vscale x 2 x i16> %v
507 define <vscale x 2 x i16> @vsub_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {
508 ; CHECK-LABEL: vsub_vx_nxv2i16_unmasked:
509 ; CHECK:       # %bb.0:
510 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
511 ; CHECK-NEXT:    vsub.vx v8, v8, a0
512 ; CHECK-NEXT:    ret
513   %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
514   %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
515   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
516   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
517   %v = call <vscale x 2 x i16> @llvm.vp.sub.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)
518   ret <vscale x 2 x i16> %v
521 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)
523 define <vscale x 4 x i16> @vsub_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
524 ; CHECK-LABEL: vsub_vv_nxv4i16:
525 ; CHECK:       # %bb.0:
526 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
527 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
528 ; CHECK-NEXT:    ret
529   %v = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
530   ret <vscale x 4 x i16> %v
533 define <vscale x 4 x i16> @vsub_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {
534 ; CHECK-LABEL: vsub_vv_nxv4i16_unmasked:
535 ; CHECK:       # %bb.0:
536 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
537 ; CHECK-NEXT:    vsub.vv v8, v8, v9
538 ; CHECK-NEXT:    ret
539   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
540   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
541   %v = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)
542   ret <vscale x 4 x i16> %v
545 define <vscale x 4 x i16> @vsub_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
546 ; CHECK-LABEL: vsub_vx_nxv4i16:
547 ; CHECK:       # %bb.0:
548 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
549 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
550 ; CHECK-NEXT:    ret
551   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
552   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
553   %v = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
554   ret <vscale x 4 x i16> %v
557 define <vscale x 4 x i16> @vsub_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {
558 ; CHECK-LABEL: vsub_vx_nxv4i16_unmasked:
559 ; CHECK:       # %bb.0:
560 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
561 ; CHECK-NEXT:    vsub.vx v8, v8, a0
562 ; CHECK-NEXT:    ret
563   %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
564   %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
565   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
566   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
567   %v = call <vscale x 4 x i16> @llvm.vp.sub.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)
568   ret <vscale x 4 x i16> %v
571 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)
573 define <vscale x 8 x i16> @vsub_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
574 ; CHECK-LABEL: vsub_vv_nxv8i16:
575 ; CHECK:       # %bb.0:
576 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
577 ; CHECK-NEXT:    vsub.vv v8, v8, v10, v0.t
578 ; CHECK-NEXT:    ret
579   %v = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
580   ret <vscale x 8 x i16> %v
583 define <vscale x 8 x i16> @vsub_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {
584 ; CHECK-LABEL: vsub_vv_nxv8i16_unmasked:
585 ; CHECK:       # %bb.0:
586 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
587 ; CHECK-NEXT:    vsub.vv v8, v8, v10
588 ; CHECK-NEXT:    ret
589   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
590   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
591   %v = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)
592   ret <vscale x 8 x i16> %v
595 define <vscale x 8 x i16> @vsub_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
596 ; CHECK-LABEL: vsub_vx_nxv8i16:
597 ; CHECK:       # %bb.0:
598 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
599 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
600 ; CHECK-NEXT:    ret
601   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
602   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
603   %v = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
604   ret <vscale x 8 x i16> %v
607 define <vscale x 8 x i16> @vsub_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {
608 ; CHECK-LABEL: vsub_vx_nxv8i16_unmasked:
609 ; CHECK:       # %bb.0:
610 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
611 ; CHECK-NEXT:    vsub.vx v8, v8, a0
612 ; CHECK-NEXT:    ret
613   %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
614   %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
615   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
616   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
617   %v = call <vscale x 8 x i16> @llvm.vp.sub.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)
618   ret <vscale x 8 x i16> %v
621 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)
623 define <vscale x 16 x i16> @vsub_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
624 ; CHECK-LABEL: vsub_vv_nxv16i16:
625 ; CHECK:       # %bb.0:
626 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
627 ; CHECK-NEXT:    vsub.vv v8, v8, v12, v0.t
628 ; CHECK-NEXT:    ret
629   %v = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
630   ret <vscale x 16 x i16> %v
633 define <vscale x 16 x i16> @vsub_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {
634 ; CHECK-LABEL: vsub_vv_nxv16i16_unmasked:
635 ; CHECK:       # %bb.0:
636 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
637 ; CHECK-NEXT:    vsub.vv v8, v8, v12
638 ; CHECK-NEXT:    ret
639   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
640   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
641   %v = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)
642   ret <vscale x 16 x i16> %v
645 define <vscale x 16 x i16> @vsub_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
646 ; CHECK-LABEL: vsub_vx_nxv16i16:
647 ; CHECK:       # %bb.0:
648 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
649 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
650 ; CHECK-NEXT:    ret
651   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
652   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
653   %v = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
654   ret <vscale x 16 x i16> %v
657 define <vscale x 16 x i16> @vsub_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {
658 ; CHECK-LABEL: vsub_vx_nxv16i16_unmasked:
659 ; CHECK:       # %bb.0:
660 ; CHECK-NEXT:    vsetvli zero, a1, e16, m4, ta, ma
661 ; CHECK-NEXT:    vsub.vx v8, v8, a0
662 ; CHECK-NEXT:    ret
663   %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
664   %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
665   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
666   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
667   %v = call <vscale x 16 x i16> @llvm.vp.sub.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)
668   ret <vscale x 16 x i16> %v
671 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)
673 define <vscale x 32 x i16> @vsub_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
674 ; CHECK-LABEL: vsub_vv_nxv32i16:
675 ; CHECK:       # %bb.0:
676 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
677 ; CHECK-NEXT:    vsub.vv v8, v8, v16, v0.t
678 ; CHECK-NEXT:    ret
679   %v = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
680   ret <vscale x 32 x i16> %v
683 define <vscale x 32 x i16> @vsub_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {
684 ; CHECK-LABEL: vsub_vv_nxv32i16_unmasked:
685 ; CHECK:       # %bb.0:
686 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
687 ; CHECK-NEXT:    vsub.vv v8, v8, v16
688 ; CHECK-NEXT:    ret
689   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
690   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
691   %v = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)
692   ret <vscale x 32 x i16> %v
695 define <vscale x 32 x i16> @vsub_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
696 ; CHECK-LABEL: vsub_vx_nxv32i16:
697 ; CHECK:       # %bb.0:
698 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
699 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
700 ; CHECK-NEXT:    ret
701   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, 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   %v = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
704   ret <vscale x 32 x i16> %v
707 define <vscale x 32 x i16> @vsub_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {
708 ; CHECK-LABEL: vsub_vx_nxv32i16_unmasked:
709 ; CHECK:       # %bb.0:
710 ; CHECK-NEXT:    vsetvli zero, a1, e16, m8, ta, ma
711 ; CHECK-NEXT:    vsub.vx v8, v8, a0
712 ; CHECK-NEXT:    ret
713   %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
714   %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
715   %head = insertelement <vscale x 32 x i1> poison, i1 true, i32 0
716   %m = shufflevector <vscale x 32 x i1> %head, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer
717   %v = call <vscale x 32 x i16> @llvm.vp.sub.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)
718   ret <vscale x 32 x i16> %v
721 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)
723 define <vscale x 1 x i32> @vsub_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
724 ; CHECK-LABEL: vsub_vv_nxv1i32:
725 ; CHECK:       # %bb.0:
726 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
727 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
728 ; CHECK-NEXT:    ret
729   %v = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
730   ret <vscale x 1 x i32> %v
733 define <vscale x 1 x i32> @vsub_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {
734 ; CHECK-LABEL: vsub_vv_nxv1i32_unmasked:
735 ; CHECK:       # %bb.0:
736 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
737 ; CHECK-NEXT:    vsub.vv v8, v8, v9
738 ; CHECK-NEXT:    ret
739   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
740   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
741   %v = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)
742   ret <vscale x 1 x i32> %v
745 define <vscale x 1 x i32> @vsub_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
746 ; CHECK-LABEL: vsub_vx_nxv1i32:
747 ; CHECK:       # %bb.0:
748 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
749 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
750 ; CHECK-NEXT:    ret
751   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
752   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
753   %v = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
754   ret <vscale x 1 x i32> %v
757 define <vscale x 1 x i32> @vsub_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {
758 ; CHECK-LABEL: vsub_vx_nxv1i32_unmasked:
759 ; CHECK:       # %bb.0:
760 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
761 ; CHECK-NEXT:    vsub.vx v8, v8, a0
762 ; CHECK-NEXT:    ret
763   %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
764   %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
765   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
766   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
767   %v = call <vscale x 1 x i32> @llvm.vp.sub.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)
768   ret <vscale x 1 x i32> %v
771 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)
773 define <vscale x 2 x i32> @vsub_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
774 ; CHECK-LABEL: vsub_vv_nxv2i32:
775 ; CHECK:       # %bb.0:
776 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
777 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
778 ; CHECK-NEXT:    ret
779   %v = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
780   ret <vscale x 2 x i32> %v
783 define <vscale x 2 x i32> @vsub_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {
784 ; CHECK-LABEL: vsub_vv_nxv2i32_unmasked:
785 ; CHECK:       # %bb.0:
786 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
787 ; CHECK-NEXT:    vsub.vv v8, v8, v9
788 ; CHECK-NEXT:    ret
789   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
790   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
791   %v = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)
792   ret <vscale x 2 x i32> %v
795 define <vscale x 2 x i32> @vsub_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
796 ; CHECK-LABEL: vsub_vx_nxv2i32:
797 ; CHECK:       # %bb.0:
798 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
799 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
800 ; CHECK-NEXT:    ret
801   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
802   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
803   %v = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
804   ret <vscale x 2 x i32> %v
807 define <vscale x 2 x i32> @vsub_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {
808 ; CHECK-LABEL: vsub_vx_nxv2i32_unmasked:
809 ; CHECK:       # %bb.0:
810 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
811 ; CHECK-NEXT:    vsub.vx v8, v8, a0
812 ; CHECK-NEXT:    ret
813   %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
814   %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
815   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
816   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
817   %v = call <vscale x 2 x i32> @llvm.vp.sub.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)
818   ret <vscale x 2 x i32> %v
821 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)
823 define <vscale x 4 x i32> @vsub_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
824 ; CHECK-LABEL: vsub_vv_nxv4i32:
825 ; CHECK:       # %bb.0:
826 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
827 ; CHECK-NEXT:    vsub.vv v8, v8, v10, v0.t
828 ; CHECK-NEXT:    ret
829   %v = call <vscale x 4 x i32> @llvm.vp.sub.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
830   ret <vscale x 4 x i32> %v
833 define <vscale x 4 x i32> @vsub_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {
834 ; CHECK-LABEL: vsub_vv_nxv4i32_unmasked:
835 ; CHECK:       # %bb.0:
836 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
837 ; CHECK-NEXT:    vsub.vv v8, v8, v10
838 ; CHECK-NEXT:    ret
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> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)
842   ret <vscale x 4 x i32> %v
845 define <vscale x 4 x i32> @vsub_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
846 ; CHECK-LABEL: vsub_vx_nxv4i32:
847 ; CHECK:       # %bb.0:
848 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
849 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
850 ; CHECK-NEXT:    ret
851   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, 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> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)
854   ret <vscale x 4 x i32> %v
857 define <vscale x 4 x i32> @vsub_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {
858 ; CHECK-LABEL: vsub_vx_nxv4i32_unmasked:
859 ; CHECK:       # %bb.0:
860 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
861 ; CHECK-NEXT:    vsub.vx v8, v8, a0
862 ; CHECK-NEXT:    ret
863   %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, 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> %va, <vscale x 4 x i32> %vb, <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> @vsub_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
874 ; CHECK-LABEL: vsub_vv_nxv8i32:
875 ; CHECK:       # %bb.0:
876 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
877 ; CHECK-NEXT:    vsub.vv v8, v8, v12, v0.t
878 ; CHECK-NEXT:    ret
879   %v = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
880   ret <vscale x 8 x i32> %v
883 define <vscale x 8 x i32> @vsub_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {
884 ; CHECK-LABEL: vsub_vv_nxv8i32_unmasked:
885 ; CHECK:       # %bb.0:
886 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
887 ; CHECK-NEXT:    vsub.vv v8, v8, v12
888 ; CHECK-NEXT:    ret
889   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
890   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
891   %v = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)
892   ret <vscale x 8 x i32> %v
895 define <vscale x 8 x i32> @vsub_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
896 ; CHECK-LABEL: vsub_vx_nxv8i32:
897 ; CHECK:       # %bb.0:
898 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
899 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
900 ; CHECK-NEXT:    ret
901   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
902   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
903   %v = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
904   ret <vscale x 8 x i32> %v
907 define <vscale x 8 x i32> @vsub_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {
908 ; CHECK-LABEL: vsub_vx_nxv8i32_unmasked:
909 ; CHECK:       # %bb.0:
910 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
911 ; CHECK-NEXT:    vsub.vx v8, v8, a0
912 ; CHECK-NEXT:    ret
913   %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
914   %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
915   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
916   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
917   %v = call <vscale x 8 x i32> @llvm.vp.sub.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)
918   ret <vscale x 8 x i32> %v
921 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)
923 define <vscale x 16 x i32> @vsub_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
924 ; CHECK-LABEL: vsub_vv_nxv16i32:
925 ; CHECK:       # %bb.0:
926 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
927 ; CHECK-NEXT:    vsub.vv v8, v8, v16, v0.t
928 ; CHECK-NEXT:    ret
929   %v = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
930   ret <vscale x 16 x i32> %v
933 define <vscale x 16 x i32> @vsub_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {
934 ; CHECK-LABEL: vsub_vv_nxv16i32_unmasked:
935 ; CHECK:       # %bb.0:
936 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
937 ; CHECK-NEXT:    vsub.vv v8, v8, v16
938 ; CHECK-NEXT:    ret
939   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
940   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
941   %v = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)
942   ret <vscale x 16 x i32> %v
945 define <vscale x 16 x i32> @vsub_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
946 ; CHECK-LABEL: vsub_vx_nxv16i32:
947 ; CHECK:       # %bb.0:
948 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
949 ; CHECK-NEXT:    vsub.vx v8, v8, a0, v0.t
950 ; CHECK-NEXT:    ret
951   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
952   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
953   %v = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
954   ret <vscale x 16 x i32> %v
957 define <vscale x 16 x i32> @vsub_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {
958 ; CHECK-LABEL: vsub_vx_nxv16i32_unmasked:
959 ; CHECK:       # %bb.0:
960 ; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, ma
961 ; CHECK-NEXT:    vsub.vx v8, v8, a0
962 ; CHECK-NEXT:    ret
963   %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
964   %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
965   %head = insertelement <vscale x 16 x i1> poison, i1 true, i32 0
966   %m = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
967   %v = call <vscale x 16 x i32> @llvm.vp.sub.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)
968   ret <vscale x 16 x i32> %v
971 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)
973 define <vscale x 1 x i64> @vsub_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
974 ; CHECK-LABEL: vsub_vv_nxv1i64:
975 ; CHECK:       # %bb.0:
976 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
977 ; CHECK-NEXT:    vsub.vv v8, v8, v9, v0.t
978 ; CHECK-NEXT:    ret
979   %v = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
980   ret <vscale x 1 x i64> %v
983 define <vscale x 1 x i64> @vsub_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {
984 ; CHECK-LABEL: vsub_vv_nxv1i64_unmasked:
985 ; CHECK:       # %bb.0:
986 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
987 ; CHECK-NEXT:    vsub.vv v8, v8, v9
988 ; CHECK-NEXT:    ret
989   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
990   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
991   %v = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)
992   ret <vscale x 1 x i64> %v
995 define <vscale x 1 x i64> @vsub_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
996 ; RV32-LABEL: vsub_vx_nxv1i64:
997 ; RV32:       # %bb.0:
998 ; RV32-NEXT:    addi sp, sp, -16
999 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1000 ; RV32-NEXT:    sw a1, 12(sp)
1001 ; RV32-NEXT:    sw a0, 8(sp)
1002 ; RV32-NEXT:    addi a0, sp, 8
1003 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
1004 ; RV32-NEXT:    vlse64.v v9, (a0), zero
1005 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1006 ; RV32-NEXT:    vsub.vv v8, v8, v9, v0.t
1007 ; RV32-NEXT:    addi sp, sp, 16
1008 ; RV32-NEXT:    ret
1010 ; RV64-LABEL: vsub_vx_nxv1i64:
1011 ; RV64:       # %bb.0:
1012 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1013 ; RV64-NEXT:    vsub.vx v8, v8, a0, v0.t
1014 ; RV64-NEXT:    ret
1015   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
1016   %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
1017   %v = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1018   ret <vscale x 1 x i64> %v
1021 define <vscale x 1 x i64> @vsub_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {
1022 ; RV32-LABEL: vsub_vx_nxv1i64_unmasked:
1023 ; RV32:       # %bb.0:
1024 ; RV32-NEXT:    addi sp, sp, -16
1025 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1026 ; RV32-NEXT:    sw a1, 12(sp)
1027 ; RV32-NEXT:    sw a0, 8(sp)
1028 ; RV32-NEXT:    addi a0, sp, 8
1029 ; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
1030 ; RV32-NEXT:    vlse64.v v9, (a0), zero
1031 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
1032 ; RV32-NEXT:    vsub.vv v8, v8, v9
1033 ; RV32-NEXT:    addi sp, sp, 16
1034 ; RV32-NEXT:    ret
1036 ; RV64-LABEL: vsub_vx_nxv1i64_unmasked:
1037 ; RV64:       # %bb.0:
1038 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
1039 ; RV64-NEXT:    vsub.vx v8, v8, a0
1040 ; RV64-NEXT:    ret
1041   %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, 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   %head = insertelement <vscale x 1 x i1> poison, i1 true, i32 0
1044   %m = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
1045   %v = call <vscale x 1 x i64> @llvm.vp.sub.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)
1046   ret <vscale x 1 x i64> %v
1049 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)
1051 define <vscale x 2 x i64> @vsub_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1052 ; CHECK-LABEL: vsub_vv_nxv2i64:
1053 ; CHECK:       # %bb.0:
1054 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1055 ; CHECK-NEXT:    vsub.vv v8, v8, v10, v0.t
1056 ; CHECK-NEXT:    ret
1057   %v = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1058   ret <vscale x 2 x i64> %v
1061 define <vscale x 2 x i64> @vsub_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {
1062 ; CHECK-LABEL: vsub_vv_nxv2i64_unmasked:
1063 ; CHECK:       # %bb.0:
1064 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1065 ; CHECK-NEXT:    vsub.vv v8, v8, v10
1066 ; CHECK-NEXT:    ret
1067   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1068   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1069   %v = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)
1070   ret <vscale x 2 x i64> %v
1073 define <vscale x 2 x i64> @vsub_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
1074 ; RV32-LABEL: vsub_vx_nxv2i64:
1075 ; RV32:       # %bb.0:
1076 ; RV32-NEXT:    addi sp, sp, -16
1077 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1078 ; RV32-NEXT:    sw a1, 12(sp)
1079 ; RV32-NEXT:    sw a0, 8(sp)
1080 ; RV32-NEXT:    addi a0, sp, 8
1081 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1082 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1083 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1084 ; RV32-NEXT:    vsub.vv v8, v8, v10, v0.t
1085 ; RV32-NEXT:    addi sp, sp, 16
1086 ; RV32-NEXT:    ret
1088 ; RV64-LABEL: vsub_vx_nxv2i64:
1089 ; RV64:       # %bb.0:
1090 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1091 ; RV64-NEXT:    vsub.vx v8, v8, a0, v0.t
1092 ; RV64-NEXT:    ret
1093   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1094   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1095   %v = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1096   ret <vscale x 2 x i64> %v
1099 define <vscale x 2 x i64> @vsub_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {
1100 ; RV32-LABEL: vsub_vx_nxv2i64_unmasked:
1101 ; RV32:       # %bb.0:
1102 ; RV32-NEXT:    addi sp, sp, -16
1103 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1104 ; RV32-NEXT:    sw a1, 12(sp)
1105 ; RV32-NEXT:    sw a0, 8(sp)
1106 ; RV32-NEXT:    addi a0, sp, 8
1107 ; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
1108 ; RV32-NEXT:    vlse64.v v10, (a0), zero
1109 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
1110 ; RV32-NEXT:    vsub.vv v8, v8, v10
1111 ; RV32-NEXT:    addi sp, sp, 16
1112 ; RV32-NEXT:    ret
1114 ; RV64-LABEL: vsub_vx_nxv2i64_unmasked:
1115 ; RV64:       # %bb.0:
1116 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
1117 ; RV64-NEXT:    vsub.vx v8, v8, a0
1118 ; RV64-NEXT:    ret
1119   %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
1120   %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
1121   %head = insertelement <vscale x 2 x i1> poison, i1 true, i32 0
1122   %m = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
1123   %v = call <vscale x 2 x i64> @llvm.vp.sub.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)
1124   ret <vscale x 2 x i64> %v
1127 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)
1129 define <vscale x 4 x i64> @vsub_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1130 ; CHECK-LABEL: vsub_vv_nxv4i64:
1131 ; CHECK:       # %bb.0:
1132 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1133 ; CHECK-NEXT:    vsub.vv v8, v8, v12, v0.t
1134 ; CHECK-NEXT:    ret
1135   %v = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1136   ret <vscale x 4 x i64> %v
1139 define <vscale x 4 x i64> @vsub_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {
1140 ; CHECK-LABEL: vsub_vv_nxv4i64_unmasked:
1141 ; CHECK:       # %bb.0:
1142 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1143 ; CHECK-NEXT:    vsub.vv v8, v8, v12
1144 ; CHECK-NEXT:    ret
1145   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1146   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1147   %v = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)
1148   ret <vscale x 4 x i64> %v
1151 define <vscale x 4 x i64> @vsub_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
1152 ; RV32-LABEL: vsub_vx_nxv4i64:
1153 ; RV32:       # %bb.0:
1154 ; RV32-NEXT:    addi sp, sp, -16
1155 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1156 ; RV32-NEXT:    sw a1, 12(sp)
1157 ; RV32-NEXT:    sw a0, 8(sp)
1158 ; RV32-NEXT:    addi a0, sp, 8
1159 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1160 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1161 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1162 ; RV32-NEXT:    vsub.vv v8, v8, v12, v0.t
1163 ; RV32-NEXT:    addi sp, sp, 16
1164 ; RV32-NEXT:    ret
1166 ; RV64-LABEL: vsub_vx_nxv4i64:
1167 ; RV64:       # %bb.0:
1168 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1169 ; RV64-NEXT:    vsub.vx v8, v8, a0, v0.t
1170 ; RV64-NEXT:    ret
1171   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1172   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1173   %v = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1174   ret <vscale x 4 x i64> %v
1177 define <vscale x 4 x i64> @vsub_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {
1178 ; RV32-LABEL: vsub_vx_nxv4i64_unmasked:
1179 ; RV32:       # %bb.0:
1180 ; RV32-NEXT:    addi sp, sp, -16
1181 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1182 ; RV32-NEXT:    sw a1, 12(sp)
1183 ; RV32-NEXT:    sw a0, 8(sp)
1184 ; RV32-NEXT:    addi a0, sp, 8
1185 ; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
1186 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1187 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1188 ; RV32-NEXT:    vsub.vv v8, v8, v12
1189 ; RV32-NEXT:    addi sp, sp, 16
1190 ; RV32-NEXT:    ret
1192 ; RV64-LABEL: vsub_vx_nxv4i64_unmasked:
1193 ; RV64:       # %bb.0:
1194 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1195 ; RV64-NEXT:    vsub.vx v8, v8, a0
1196 ; RV64-NEXT:    ret
1197   %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
1198   %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
1199   %head = insertelement <vscale x 4 x i1> poison, i1 true, i32 0
1200   %m = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
1201   %v = call <vscale x 4 x i64> @llvm.vp.sub.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)
1202   ret <vscale x 4 x i64> %v
1205 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)
1207 define <vscale x 8 x i64> @vsub_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1208 ; CHECK-LABEL: vsub_vv_nxv8i64:
1209 ; CHECK:       # %bb.0:
1210 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1211 ; CHECK-NEXT:    vsub.vv v8, v8, v16, v0.t
1212 ; CHECK-NEXT:    ret
1213   %v = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1214   ret <vscale x 8 x i64> %v
1217 define <vscale x 8 x i64> @vsub_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {
1218 ; CHECK-LABEL: vsub_vv_nxv8i64_unmasked:
1219 ; CHECK:       # %bb.0:
1220 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1221 ; CHECK-NEXT:    vsub.vv v8, v8, v16
1222 ; CHECK-NEXT:    ret
1223   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1224   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1225   %v = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)
1226   ret <vscale x 8 x i64> %v
1229 define <vscale x 8 x i64> @vsub_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
1230 ; RV32-LABEL: vsub_vx_nxv8i64:
1231 ; RV32:       # %bb.0:
1232 ; RV32-NEXT:    addi sp, sp, -16
1233 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1234 ; RV32-NEXT:    sw a1, 12(sp)
1235 ; RV32-NEXT:    sw a0, 8(sp)
1236 ; RV32-NEXT:    addi a0, sp, 8
1237 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1238 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1239 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1240 ; RV32-NEXT:    vsub.vv v8, v8, v16, v0.t
1241 ; RV32-NEXT:    addi sp, sp, 16
1242 ; RV32-NEXT:    ret
1244 ; RV64-LABEL: vsub_vx_nxv8i64:
1245 ; RV64:       # %bb.0:
1246 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1247 ; RV64-NEXT:    vsub.vx v8, v8, a0, v0.t
1248 ; RV64-NEXT:    ret
1249   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1250   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1251   %v = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1252   ret <vscale x 8 x i64> %v
1255 define <vscale x 8 x i64> @vsub_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {
1256 ; RV32-LABEL: vsub_vx_nxv8i64_unmasked:
1257 ; RV32:       # %bb.0:
1258 ; RV32-NEXT:    addi sp, sp, -16
1259 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1260 ; RV32-NEXT:    sw a1, 12(sp)
1261 ; RV32-NEXT:    sw a0, 8(sp)
1262 ; RV32-NEXT:    addi a0, sp, 8
1263 ; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1264 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1265 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1266 ; RV32-NEXT:    vsub.vv v8, v8, v16
1267 ; RV32-NEXT:    addi sp, sp, 16
1268 ; RV32-NEXT:    ret
1270 ; RV64-LABEL: vsub_vx_nxv8i64_unmasked:
1271 ; RV64:       # %bb.0:
1272 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1273 ; RV64-NEXT:    vsub.vx v8, v8, a0
1274 ; RV64-NEXT:    ret
1275   %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1276   %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1277   %head = insertelement <vscale x 8 x i1> poison, i1 true, i32 0
1278   %m = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
1279   %v = call <vscale x 8 x i64> @llvm.vp.sub.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)
1280   ret <vscale x 8 x i64> %v