Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vmarith-sdnode.ll
blobd243c89958c5430ad05d0a963c68edf24987ce4c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
5 define <vscale x 1 x i1> @vmand_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
6 ; CHECK-LABEL: vmand_vv_nxv1i1:
7 ; CHECK:       # %bb.0:
8 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
9 ; CHECK-NEXT:    vmand.mm v0, v0, v8
10 ; CHECK-NEXT:    ret
11   %vc = and <vscale x 1 x i1> %va, %vb
12   ret <vscale x 1 x i1> %vc
15 define <vscale x 2 x i1> @vmand_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
16 ; CHECK-LABEL: vmand_vv_nxv2i1:
17 ; CHECK:       # %bb.0:
18 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
19 ; CHECK-NEXT:    vmand.mm v0, v0, v8
20 ; CHECK-NEXT:    ret
21   %vc = and <vscale x 2 x i1> %va, %vb
22   ret <vscale x 2 x i1> %vc
25 define <vscale x 4 x i1> @vmand_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
26 ; CHECK-LABEL: vmand_vv_nxv4i1:
27 ; CHECK:       # %bb.0:
28 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
29 ; CHECK-NEXT:    vmand.mm v0, v0, v8
30 ; CHECK-NEXT:    ret
31   %vc = and <vscale x 4 x i1> %va, %vb
32   ret <vscale x 4 x i1> %vc
35 define <vscale x 8 x i1> @vmand_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
36 ; CHECK-LABEL: vmand_vv_nxv8i1:
37 ; CHECK:       # %bb.0:
38 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
39 ; CHECK-NEXT:    vmand.mm v0, v0, v8
40 ; CHECK-NEXT:    ret
41   %vc = and <vscale x 8 x i1> %va, %vb
42   ret <vscale x 8 x i1> %vc
45 define <vscale x 16 x i1> @vmand_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
46 ; CHECK-LABEL: vmand_vv_nxv16i1:
47 ; CHECK:       # %bb.0:
48 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
49 ; CHECK-NEXT:    vmand.mm v0, v0, v8
50 ; CHECK-NEXT:    ret
51   %vc = and <vscale x 16 x i1> %va, %vb
52   ret <vscale x 16 x i1> %vc
55 define <vscale x 1 x i1> @vmor_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
56 ; CHECK-LABEL: vmor_vv_nxv1i1:
57 ; CHECK:       # %bb.0:
58 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
59 ; CHECK-NEXT:    vmor.mm v0, v0, v8
60 ; CHECK-NEXT:    ret
61   %vc = or <vscale x 1 x i1> %va, %vb
62   ret <vscale x 1 x i1> %vc
65 define <vscale x 2 x i1> @vmor_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
66 ; CHECK-LABEL: vmor_vv_nxv2i1:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
69 ; CHECK-NEXT:    vmor.mm v0, v0, v8
70 ; CHECK-NEXT:    ret
71   %vc = or <vscale x 2 x i1> %va, %vb
72   ret <vscale x 2 x i1> %vc
75 define <vscale x 4 x i1> @vmor_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
76 ; CHECK-LABEL: vmor_vv_nxv4i1:
77 ; CHECK:       # %bb.0:
78 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
79 ; CHECK-NEXT:    vmor.mm v0, v0, v8
80 ; CHECK-NEXT:    ret
81   %vc = or <vscale x 4 x i1> %va, %vb
82   ret <vscale x 4 x i1> %vc
85 define <vscale x 8 x i1> @vmor_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
86 ; CHECK-LABEL: vmor_vv_nxv8i1:
87 ; CHECK:       # %bb.0:
88 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
89 ; CHECK-NEXT:    vmor.mm v0, v0, v8
90 ; CHECK-NEXT:    ret
91   %vc = or <vscale x 8 x i1> %va, %vb
92   ret <vscale x 8 x i1> %vc
95 define <vscale x 16 x i1> @vmor_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
96 ; CHECK-LABEL: vmor_vv_nxv16i1:
97 ; CHECK:       # %bb.0:
98 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
99 ; CHECK-NEXT:    vmor.mm v0, v0, v8
100 ; CHECK-NEXT:    ret
101   %vc = or <vscale x 16 x i1> %va, %vb
102   ret <vscale x 16 x i1> %vc
105 define <vscale x 1 x i1> @vmxor_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
106 ; CHECK-LABEL: vmxor_vv_nxv1i1:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
109 ; CHECK-NEXT:    vmxor.mm v0, v0, v8
110 ; CHECK-NEXT:    ret
111   %vc = xor <vscale x 1 x i1> %va, %vb
112   ret <vscale x 1 x i1> %vc
115 define <vscale x 2 x i1> @vmxor_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
116 ; CHECK-LABEL: vmxor_vv_nxv2i1:
117 ; CHECK:       # %bb.0:
118 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
119 ; CHECK-NEXT:    vmxor.mm v0, v0, v8
120 ; CHECK-NEXT:    ret
121   %vc = xor <vscale x 2 x i1> %va, %vb
122   ret <vscale x 2 x i1> %vc
125 define <vscale x 4 x i1> @vmxor_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
126 ; CHECK-LABEL: vmxor_vv_nxv4i1:
127 ; CHECK:       # %bb.0:
128 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
129 ; CHECK-NEXT:    vmxor.mm v0, v0, v8
130 ; CHECK-NEXT:    ret
131   %vc = xor <vscale x 4 x i1> %va, %vb
132   ret <vscale x 4 x i1> %vc
135 define <vscale x 8 x i1> @vmxor_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
136 ; CHECK-LABEL: vmxor_vv_nxv8i1:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
139 ; CHECK-NEXT:    vmxor.mm v0, v0, v8
140 ; CHECK-NEXT:    ret
141   %vc = xor <vscale x 8 x i1> %va, %vb
142   ret <vscale x 8 x i1> %vc
145 define <vscale x 16 x i1> @vmxor_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
146 ; CHECK-LABEL: vmxor_vv_nxv16i1:
147 ; CHECK:       # %bb.0:
148 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
149 ; CHECK-NEXT:    vmxor.mm v0, v0, v8
150 ; CHECK-NEXT:    ret
151   %vc = xor <vscale x 16 x i1> %va, %vb
152   ret <vscale x 16 x i1> %vc
155 define <vscale x 1 x i1> @vmnand_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
156 ; CHECK-LABEL: vmnand_vv_nxv1i1:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
159 ; CHECK-NEXT:    vmnand.mm v0, v0, v8
160 ; CHECK-NEXT:    ret
161   %vc = and <vscale x 1 x i1> %va, %vb
162   %head = insertelement <vscale x 1 x i1> poison, i1 1, i32 0
163   %splat = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
164   %not = xor <vscale x 1 x i1> %vc, %splat
165   ret <vscale x 1 x i1> %not
168 define <vscale x 2 x i1> @vmnand_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
169 ; CHECK-LABEL: vmnand_vv_nxv2i1:
170 ; CHECK:       # %bb.0:
171 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
172 ; CHECK-NEXT:    vmnand.mm v0, v0, v8
173 ; CHECK-NEXT:    ret
174   %vc = and <vscale x 2 x i1> %va, %vb
175   %head = insertelement <vscale x 2 x i1> poison, i1 1, i32 0
176   %splat = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
177   %not = xor <vscale x 2 x i1> %vc, %splat
178   ret <vscale x 2 x i1> %not
181 define <vscale x 4 x i1> @vmnand_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
182 ; CHECK-LABEL: vmnand_vv_nxv4i1:
183 ; CHECK:       # %bb.0:
184 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
185 ; CHECK-NEXT:    vmnand.mm v0, v0, v8
186 ; CHECK-NEXT:    ret
187   %vc = and <vscale x 4 x i1> %va, %vb
188   %head = insertelement <vscale x 4 x i1> poison, i1 1, i32 0
189   %splat = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
190   %not = xor <vscale x 4 x i1> %vc, %splat
191   ret <vscale x 4 x i1> %not
194 define <vscale x 8 x i1> @vmnand_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
195 ; CHECK-LABEL: vmnand_vv_nxv8i1:
196 ; CHECK:       # %bb.0:
197 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
198 ; CHECK-NEXT:    vmnand.mm v0, v0, v8
199 ; CHECK-NEXT:    ret
200   %vc = and <vscale x 8 x i1> %va, %vb
201   %head = insertelement <vscale x 8 x i1> poison, i1 1, i32 0
202   %splat = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
203   %not = xor <vscale x 8 x i1> %vc, %splat
204   ret <vscale x 8 x i1> %not
207 define <vscale x 16 x i1> @vmnand_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
208 ; CHECK-LABEL: vmnand_vv_nxv16i1:
209 ; CHECK:       # %bb.0:
210 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
211 ; CHECK-NEXT:    vmnand.mm v0, v0, v8
212 ; CHECK-NEXT:    ret
213   %vc = and <vscale x 16 x i1> %va, %vb
214   %head = insertelement <vscale x 16 x i1> poison, i1 1, i32 0
215   %splat = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
216   %not = xor <vscale x 16 x i1> %vc, %splat
217   ret <vscale x 16 x i1> %not
220 define <vscale x 1 x i1> @vmnor_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
221 ; CHECK-LABEL: vmnor_vv_nxv1i1:
222 ; CHECK:       # %bb.0:
223 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
224 ; CHECK-NEXT:    vmnor.mm v0, v0, v8
225 ; CHECK-NEXT:    ret
226   %vc = or <vscale x 1 x i1> %va, %vb
227   %head = insertelement <vscale x 1 x i1> poison, i1 1, i32 0
228   %splat = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
229   %not = xor <vscale x 1 x i1> %vc, %splat
230   ret <vscale x 1 x i1> %not
233 define <vscale x 2 x i1> @vmnor_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
234 ; CHECK-LABEL: vmnor_vv_nxv2i1:
235 ; CHECK:       # %bb.0:
236 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
237 ; CHECK-NEXT:    vmnor.mm v0, v0, v8
238 ; CHECK-NEXT:    ret
239   %vc = or <vscale x 2 x i1> %va, %vb
240   %head = insertelement <vscale x 2 x i1> poison, i1 1, i32 0
241   %splat = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
242   %not = xor <vscale x 2 x i1> %vc, %splat
243   ret <vscale x 2 x i1> %not
246 define <vscale x 4 x i1> @vmnor_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
247 ; CHECK-LABEL: vmnor_vv_nxv4i1:
248 ; CHECK:       # %bb.0:
249 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
250 ; CHECK-NEXT:    vmnor.mm v0, v0, v8
251 ; CHECK-NEXT:    ret
252   %vc = or <vscale x 4 x i1> %va, %vb
253   %head = insertelement <vscale x 4 x i1> poison, i1 1, i32 0
254   %splat = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
255   %not = xor <vscale x 4 x i1> %vc, %splat
256   ret <vscale x 4 x i1> %not
259 define <vscale x 8 x i1> @vmnor_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
260 ; CHECK-LABEL: vmnor_vv_nxv8i1:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
263 ; CHECK-NEXT:    vmnor.mm v0, v0, v8
264 ; CHECK-NEXT:    ret
265   %vc = or <vscale x 8 x i1> %va, %vb
266   %head = insertelement <vscale x 8 x i1> poison, i1 1, i32 0
267   %splat = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
268   %not = xor <vscale x 8 x i1> %vc, %splat
269   ret <vscale x 8 x i1> %not
272 define <vscale x 16 x i1> @vmnor_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
273 ; CHECK-LABEL: vmnor_vv_nxv16i1:
274 ; CHECK:       # %bb.0:
275 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
276 ; CHECK-NEXT:    vmnor.mm v0, v0, v8
277 ; CHECK-NEXT:    ret
278   %vc = or <vscale x 16 x i1> %va, %vb
279   %head = insertelement <vscale x 16 x i1> poison, i1 1, i32 0
280   %splat = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
281   %not = xor <vscale x 16 x i1> %vc, %splat
282   ret <vscale x 16 x i1> %not
285 define <vscale x 1 x i1> @vmxnor_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
286 ; CHECK-LABEL: vmxnor_vv_nxv1i1:
287 ; CHECK:       # %bb.0:
288 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
289 ; CHECK-NEXT:    vmxnor.mm v0, v0, v8
290 ; CHECK-NEXT:    ret
291   %vc = xor <vscale x 1 x i1> %va, %vb
292   %head = insertelement <vscale x 1 x i1> poison, i1 1, i32 0
293   %splat = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
294   %not = xor <vscale x 1 x i1> %vc, %splat
295   ret <vscale x 1 x i1> %not
298 define <vscale x 2 x i1> @vmxnor_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
299 ; CHECK-LABEL: vmxnor_vv_nxv2i1:
300 ; CHECK:       # %bb.0:
301 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
302 ; CHECK-NEXT:    vmxnor.mm v0, v0, v8
303 ; CHECK-NEXT:    ret
304   %vc = xor <vscale x 2 x i1> %va, %vb
305   %head = insertelement <vscale x 2 x i1> poison, i1 1, i32 0
306   %splat = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
307   %not = xor <vscale x 2 x i1> %vc, %splat
308   ret <vscale x 2 x i1> %not
311 define <vscale x 4 x i1> @vmxnor_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
312 ; CHECK-LABEL: vmxnor_vv_nxv4i1:
313 ; CHECK:       # %bb.0:
314 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
315 ; CHECK-NEXT:    vmxnor.mm v0, v0, v8
316 ; CHECK-NEXT:    ret
317   %vc = xor <vscale x 4 x i1> %va, %vb
318   %head = insertelement <vscale x 4 x i1> poison, i1 1, i32 0
319   %splat = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
320   %not = xor <vscale x 4 x i1> %vc, %splat
321   ret <vscale x 4 x i1> %not
324 define <vscale x 8 x i1> @vmxnor_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
325 ; CHECK-LABEL: vmxnor_vv_nxv8i1:
326 ; CHECK:       # %bb.0:
327 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
328 ; CHECK-NEXT:    vmxnor.mm v0, v0, v8
329 ; CHECK-NEXT:    ret
330   %vc = xor <vscale x 8 x i1> %va, %vb
331   %head = insertelement <vscale x 8 x i1> poison, i1 1, i32 0
332   %splat = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
333   %not = xor <vscale x 8 x i1> %vc, %splat
334   ret <vscale x 8 x i1> %not
337 define <vscale x 16 x i1> @vmxnor_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
338 ; CHECK-LABEL: vmxnor_vv_nxv16i1:
339 ; CHECK:       # %bb.0:
340 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
341 ; CHECK-NEXT:    vmxnor.mm v0, v0, v8
342 ; CHECK-NEXT:    ret
343   %vc = xor <vscale x 16 x i1> %va, %vb
344   %head = insertelement <vscale x 16 x i1> poison, i1 1, i32 0
345   %splat = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
346   %not = xor <vscale x 16 x i1> %vc, %splat
347   ret <vscale x 16 x i1> %not
350 define <vscale x 1 x i1> @vmandn_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
351 ; CHECK-LABEL: vmandn_vv_nxv1i1:
352 ; CHECK:       # %bb.0:
353 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
354 ; CHECK-NEXT:    vmandn.mm v0, v0, v8
355 ; CHECK-NEXT:    ret
356   %head = insertelement <vscale x 1 x i1> poison, i1 1, i32 0
357   %splat = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
358   %not = xor <vscale x 1 x i1> %vb, %splat
359   %vc = and <vscale x 1 x i1> %va, %not
360   ret <vscale x 1 x i1> %vc
363 define <vscale x 2 x i1> @vmandn_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
364 ; CHECK-LABEL: vmandn_vv_nxv2i1:
365 ; CHECK:       # %bb.0:
366 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
367 ; CHECK-NEXT:    vmandn.mm v0, v0, v8
368 ; CHECK-NEXT:    ret
369   %head = insertelement <vscale x 2 x i1> poison, i1 1, i32 0
370   %splat = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
371   %not = xor <vscale x 2 x i1> %vb, %splat
372   %vc = and <vscale x 2 x i1> %va, %not
373   ret <vscale x 2 x i1> %vc
376 define <vscale x 4 x i1> @vmandn_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
377 ; CHECK-LABEL: vmandn_vv_nxv4i1:
378 ; CHECK:       # %bb.0:
379 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
380 ; CHECK-NEXT:    vmandn.mm v0, v0, v8
381 ; CHECK-NEXT:    ret
382   %head = insertelement <vscale x 4 x i1> poison, i1 1, i32 0
383   %splat = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
384   %not = xor <vscale x 4 x i1> %vb, %splat
385   %vc = and <vscale x 4 x i1> %va, %not
386   ret <vscale x 4 x i1> %vc
389 define <vscale x 8 x i1> @vmandn_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
390 ; CHECK-LABEL: vmandn_vv_nxv8i1:
391 ; CHECK:       # %bb.0:
392 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
393 ; CHECK-NEXT:    vmandn.mm v0, v0, v8
394 ; CHECK-NEXT:    ret
395   %head = insertelement <vscale x 8 x i1> poison, i1 1, i32 0
396   %splat = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
397   %not = xor <vscale x 8 x i1> %vb, %splat
398   %vc = and <vscale x 8 x i1> %va, %not
399   ret <vscale x 8 x i1> %vc
402 define <vscale x 16 x i1> @vmandn_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
403 ; CHECK-LABEL: vmandn_vv_nxv16i1:
404 ; CHECK:       # %bb.0:
405 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
406 ; CHECK-NEXT:    vmandn.mm v0, v0, v8
407 ; CHECK-NEXT:    ret
408   %head = insertelement <vscale x 16 x i1> poison, i1 1, i32 0
409   %splat = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
410   %not = xor <vscale x 16 x i1> %vb, %splat
411   %vc = and <vscale x 16 x i1> %va, %not
412   ret <vscale x 16 x i1> %vc
415 define <vscale x 1 x i1> @vmorn_vv_nxv1i1(<vscale x 1 x i1> %va, <vscale x 1 x i1> %vb) {
416 ; CHECK-LABEL: vmorn_vv_nxv1i1:
417 ; CHECK:       # %bb.0:
418 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
419 ; CHECK-NEXT:    vmorn.mm v0, v0, v8
420 ; CHECK-NEXT:    ret
421   %head = insertelement <vscale x 1 x i1> poison, i1 1, i32 0
422   %splat = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer
423   %not = xor <vscale x 1 x i1> %vb, %splat
424   %vc = or <vscale x 1 x i1> %va, %not
425   ret <vscale x 1 x i1> %vc
428 define <vscale x 2 x i1> @vmorn_vv_nxv2i1(<vscale x 2 x i1> %va, <vscale x 2 x i1> %vb) {
429 ; CHECK-LABEL: vmorn_vv_nxv2i1:
430 ; CHECK:       # %bb.0:
431 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
432 ; CHECK-NEXT:    vmorn.mm v0, v0, v8
433 ; CHECK-NEXT:    ret
434   %head = insertelement <vscale x 2 x i1> poison, i1 1, i32 0
435   %splat = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer
436   %not = xor <vscale x 2 x i1> %vb, %splat
437   %vc = or <vscale x 2 x i1> %va, %not
438   ret <vscale x 2 x i1> %vc
441 define <vscale x 4 x i1> @vmorn_vv_nxv4i1(<vscale x 4 x i1> %va, <vscale x 4 x i1> %vb) {
442 ; CHECK-LABEL: vmorn_vv_nxv4i1:
443 ; CHECK:       # %bb.0:
444 ; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
445 ; CHECK-NEXT:    vmorn.mm v0, v0, v8
446 ; CHECK-NEXT:    ret
447   %head = insertelement <vscale x 4 x i1> poison, i1 1, i32 0
448   %splat = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer
449   %not = xor <vscale x 4 x i1> %vb, %splat
450   %vc = or <vscale x 4 x i1> %va, %not
451   ret <vscale x 4 x i1> %vc
454 define <vscale x 8 x i1> @vmorn_vv_nxv8i1(<vscale x 8 x i1> %va, <vscale x 8 x i1> %vb) {
455 ; CHECK-LABEL: vmorn_vv_nxv8i1:
456 ; CHECK:       # %bb.0:
457 ; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
458 ; CHECK-NEXT:    vmorn.mm v0, v0, v8
459 ; CHECK-NEXT:    ret
460   %head = insertelement <vscale x 8 x i1> poison, i1 1, i32 0
461   %splat = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer
462   %not = xor <vscale x 8 x i1> %vb, %splat
463   %vc = or <vscale x 8 x i1> %va, %not
464   ret <vscale x 8 x i1> %vc
467 define <vscale x 16 x i1> @vmorn_vv_nxv16i1(<vscale x 16 x i1> %va, <vscale x 16 x i1> %vb) {
468 ; CHECK-LABEL: vmorn_vv_nxv16i1:
469 ; CHECK:       # %bb.0:
470 ; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
471 ; CHECK-NEXT:    vmorn.mm v0, v0, v8
472 ; CHECK-NEXT:    ret
473   %head = insertelement <vscale x 16 x i1> poison, i1 1, i32 0
474   %splat = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer
475   %not = xor <vscale x 16 x i1> %vb, %splat
476   %vc = or <vscale x 16 x i1> %va, %not
477   ret <vscale x 16 x i1> %vc