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:
8 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
9 ; CHECK-NEXT: vmand.mm v0, v0, v8
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:
18 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
19 ; CHECK-NEXT: vmand.mm v0, v0, v8
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:
28 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
29 ; CHECK-NEXT: vmand.mm v0, v0, v8
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:
38 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
39 ; CHECK-NEXT: vmand.mm v0, v0, v8
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:
48 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
49 ; CHECK-NEXT: vmand.mm v0, v0, v8
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:
58 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
59 ; CHECK-NEXT: vmor.mm v0, v0, v8
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:
68 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
69 ; CHECK-NEXT: vmor.mm v0, v0, v8
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:
78 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
79 ; CHECK-NEXT: vmor.mm v0, v0, v8
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:
88 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
89 ; CHECK-NEXT: vmor.mm v0, v0, v8
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:
98 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
99 ; CHECK-NEXT: vmor.mm v0, v0, v8
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:
108 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
109 ; CHECK-NEXT: vmxor.mm v0, v0, v8
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:
118 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
119 ; CHECK-NEXT: vmxor.mm v0, v0, v8
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:
128 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
129 ; CHECK-NEXT: vmxor.mm v0, v0, v8
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:
138 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
139 ; CHECK-NEXT: vmxor.mm v0, v0, v8
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:
148 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
149 ; CHECK-NEXT: vmxor.mm v0, v0, v8
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:
158 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
159 ; CHECK-NEXT: vmnand.mm v0, v0, v8
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:
171 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
172 ; CHECK-NEXT: vmnand.mm v0, v0, v8
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:
184 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
185 ; CHECK-NEXT: vmnand.mm v0, v0, v8
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:
197 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
198 ; CHECK-NEXT: vmnand.mm v0, v0, v8
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:
210 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
211 ; CHECK-NEXT: vmnand.mm v0, v0, v8
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:
223 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
224 ; CHECK-NEXT: vmnor.mm v0, v0, v8
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:
236 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
237 ; CHECK-NEXT: vmnor.mm v0, v0, v8
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:
249 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
250 ; CHECK-NEXT: vmnor.mm v0, v0, v8
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:
262 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
263 ; CHECK-NEXT: vmnor.mm v0, v0, v8
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:
275 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
276 ; CHECK-NEXT: vmnor.mm v0, v0, v8
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:
288 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
289 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
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:
301 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
302 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
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:
314 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
315 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
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:
327 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
328 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
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:
340 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
341 ; CHECK-NEXT: vmxnor.mm v0, v0, v8
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:
353 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
354 ; CHECK-NEXT: vmandn.mm v0, v0, v8
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:
366 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
367 ; CHECK-NEXT: vmandn.mm v0, v0, v8
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:
379 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
380 ; CHECK-NEXT: vmandn.mm v0, v0, v8
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:
392 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
393 ; CHECK-NEXT: vmandn.mm v0, v0, v8
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:
405 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
406 ; CHECK-NEXT: vmandn.mm v0, v0, v8
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:
418 ; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma
419 ; CHECK-NEXT: vmorn.mm v0, v0, v8
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:
431 ; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma
432 ; CHECK-NEXT: vmorn.mm v0, v0, v8
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:
444 ; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma
445 ; CHECK-NEXT: vmorn.mm v0, v0, v8
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:
457 ; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma
458 ; CHECK-NEXT: vmorn.mm v0, v0, v8
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:
470 ; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma
471 ; CHECK-NEXT: vmorn.mm v0, v0, v8
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