xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/vor-sdnode.ll (revision 97982a8c605fac7c86d02e641a6cd7898b3ca343)
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 --check-prefixes=CHECK,RV32
3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
4
5define <vscale x 1 x i8> @vor_vx_nxv1i8(<vscale x 1 x i8> %va, i8 signext %b) {
6; CHECK-LABEL: vor_vx_nxv1i8:
7; CHECK:       # %bb.0:
8; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
9; CHECK-NEXT:    vor.vx v8, v8, a0
10; CHECK-NEXT:    ret
11  %head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 0
12  %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer
13  %vc = or <vscale x 1 x i8> %va, %splat
14  ret <vscale x 1 x i8> %vc
15}
16
17define <vscale x 1 x i8> @vor_vx_nxv1i8_0(<vscale x 1 x i8> %va) {
18; CHECK-LABEL: vor_vx_nxv1i8_0:
19; CHECK:       # %bb.0:
20; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
21; CHECK-NEXT:    vor.vi v8, v8, -12
22; CHECK-NEXT:    ret
23  %vc = or <vscale x 1 x i8> %va, splat (i8 -12)
24  ret <vscale x 1 x i8> %vc
25}
26
27define <vscale x 1 x i8> @vor_vx_nxv1i8_1(<vscale x 1 x i8> %va) {
28; CHECK-LABEL: vor_vx_nxv1i8_1:
29; CHECK:       # %bb.0:
30; CHECK-NEXT:    vsetvli a0, zero, e8, mf8, ta, ma
31; CHECK-NEXT:    vor.vi v8, v8, 15
32; CHECK-NEXT:    ret
33  %vc = or <vscale x 1 x i8> %va, splat (i8 15)
34  ret <vscale x 1 x i8> %vc
35}
36
37define <vscale x 1 x i8> @vor_vx_nxv1i8_2(<vscale x 1 x i8> %va) {
38; CHECK-LABEL: vor_vx_nxv1i8_2:
39; CHECK:       # %bb.0:
40; CHECK-NEXT:    li a0, 16
41; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma
42; CHECK-NEXT:    vor.vx v8, v8, a0
43; CHECK-NEXT:    ret
44  %vc = or <vscale x 1 x i8> %va, splat (i8 16)
45  ret <vscale x 1 x i8> %vc
46}
47
48define <vscale x 2 x i8> @vor_vx_nxv2i8(<vscale x 2 x i8> %va, i8 signext %b) {
49; CHECK-LABEL: vor_vx_nxv2i8:
50; CHECK:       # %bb.0:
51; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
52; CHECK-NEXT:    vor.vx v8, v8, a0
53; CHECK-NEXT:    ret
54  %head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0
55  %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer
56  %vc = or <vscale x 2 x i8> %va, %splat
57  ret <vscale x 2 x i8> %vc
58}
59
60define <vscale x 2 x i8> @vor_vx_nxv2i8_0(<vscale x 2 x i8> %va) {
61; CHECK-LABEL: vor_vx_nxv2i8_0:
62; CHECK:       # %bb.0:
63; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
64; CHECK-NEXT:    vor.vi v8, v8, -12
65; CHECK-NEXT:    ret
66  %vc = or <vscale x 2 x i8> %va, splat (i8 -12)
67  ret <vscale x 2 x i8> %vc
68}
69
70define <vscale x 2 x i8> @vor_vx_nxv2i8_1(<vscale x 2 x i8> %va) {
71; CHECK-LABEL: vor_vx_nxv2i8_1:
72; CHECK:       # %bb.0:
73; CHECK-NEXT:    vsetvli a0, zero, e8, mf4, ta, ma
74; CHECK-NEXT:    vor.vi v8, v8, 15
75; CHECK-NEXT:    ret
76  %vc = or <vscale x 2 x i8> %va, splat (i8 15)
77  ret <vscale x 2 x i8> %vc
78}
79
80define <vscale x 2 x i8> @vor_vx_nxv2i8_2(<vscale x 2 x i8> %va) {
81; CHECK-LABEL: vor_vx_nxv2i8_2:
82; CHECK:       # %bb.0:
83; CHECK-NEXT:    li a0, 16
84; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma
85; CHECK-NEXT:    vor.vx v8, v8, a0
86; CHECK-NEXT:    ret
87  %vc = or <vscale x 2 x i8> %va, splat (i8 16)
88  ret <vscale x 2 x i8> %vc
89}
90
91define <vscale x 4 x i8> @vor_vx_nxv4i8(<vscale x 4 x i8> %va, i8 signext %b) {
92; CHECK-LABEL: vor_vx_nxv4i8:
93; CHECK:       # %bb.0:
94; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
95; CHECK-NEXT:    vor.vx v8, v8, a0
96; CHECK-NEXT:    ret
97  %head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0
98  %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer
99  %vc = or <vscale x 4 x i8> %va, %splat
100  ret <vscale x 4 x i8> %vc
101}
102
103define <vscale x 4 x i8> @vor_vx_nxv4i8_0(<vscale x 4 x i8> %va) {
104; CHECK-LABEL: vor_vx_nxv4i8_0:
105; CHECK:       # %bb.0:
106; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
107; CHECK-NEXT:    vor.vi v8, v8, -12
108; CHECK-NEXT:    ret
109  %vc = or <vscale x 4 x i8> %va, splat (i8 -12)
110  ret <vscale x 4 x i8> %vc
111}
112
113define <vscale x 4 x i8> @vor_vx_nxv4i8_1(<vscale x 4 x i8> %va) {
114; CHECK-LABEL: vor_vx_nxv4i8_1:
115; CHECK:       # %bb.0:
116; CHECK-NEXT:    vsetvli a0, zero, e8, mf2, ta, ma
117; CHECK-NEXT:    vor.vi v8, v8, 15
118; CHECK-NEXT:    ret
119  %vc = or <vscale x 4 x i8> %va, splat (i8 15)
120  ret <vscale x 4 x i8> %vc
121}
122
123define <vscale x 4 x i8> @vor_vx_nxv4i8_2(<vscale x 4 x i8> %va) {
124; CHECK-LABEL: vor_vx_nxv4i8_2:
125; CHECK:       # %bb.0:
126; CHECK-NEXT:    li a0, 16
127; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma
128; CHECK-NEXT:    vor.vx v8, v8, a0
129; CHECK-NEXT:    ret
130  %vc = or <vscale x 4 x i8> %va, splat (i8 16)
131  ret <vscale x 4 x i8> %vc
132}
133
134define <vscale x 8 x i8> @vor_vx_nxv8i8(<vscale x 8 x i8> %va, i8 signext %b) {
135; CHECK-LABEL: vor_vx_nxv8i8:
136; CHECK:       # %bb.0:
137; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
138; CHECK-NEXT:    vor.vx v8, v8, a0
139; CHECK-NEXT:    ret
140  %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0
141  %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer
142  %vc = or <vscale x 8 x i8> %va, %splat
143  ret <vscale x 8 x i8> %vc
144}
145
146define <vscale x 8 x i8> @vor_vx_nxv8i8_0(<vscale x 8 x i8> %va) {
147; CHECK-LABEL: vor_vx_nxv8i8_0:
148; CHECK:       # %bb.0:
149; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
150; CHECK-NEXT:    vor.vi v8, v8, -12
151; CHECK-NEXT:    ret
152  %vc = or <vscale x 8 x i8> %va, splat (i8 -12)
153  ret <vscale x 8 x i8> %vc
154}
155
156define <vscale x 8 x i8> @vor_vx_nxv8i8_1(<vscale x 8 x i8> %va) {
157; CHECK-LABEL: vor_vx_nxv8i8_1:
158; CHECK:       # %bb.0:
159; CHECK-NEXT:    vsetvli a0, zero, e8, m1, ta, ma
160; CHECK-NEXT:    vor.vi v8, v8, 15
161; CHECK-NEXT:    ret
162  %vc = or <vscale x 8 x i8> %va, splat (i8 15)
163  ret <vscale x 8 x i8> %vc
164}
165
166define <vscale x 8 x i8> @vor_vx_nxv8i8_2(<vscale x 8 x i8> %va) {
167; CHECK-LABEL: vor_vx_nxv8i8_2:
168; CHECK:       # %bb.0:
169; CHECK-NEXT:    li a0, 16
170; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma
171; CHECK-NEXT:    vor.vx v8, v8, a0
172; CHECK-NEXT:    ret
173  %vc = or <vscale x 8 x i8> %va, splat (i8 16)
174  ret <vscale x 8 x i8> %vc
175}
176
177define <vscale x 16 x i8> @vor_vx_nxv16i8(<vscale x 16 x i8> %va, i8 signext %b) {
178; CHECK-LABEL: vor_vx_nxv16i8:
179; CHECK:       # %bb.0:
180; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
181; CHECK-NEXT:    vor.vx v8, v8, a0
182; CHECK-NEXT:    ret
183  %head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0
184  %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer
185  %vc = or <vscale x 16 x i8> %va, %splat
186  ret <vscale x 16 x i8> %vc
187}
188
189define <vscale x 16 x i8> @vor_vx_nxv16i8_0(<vscale x 16 x i8> %va) {
190; CHECK-LABEL: vor_vx_nxv16i8_0:
191; CHECK:       # %bb.0:
192; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
193; CHECK-NEXT:    vor.vi v8, v8, -12
194; CHECK-NEXT:    ret
195  %vc = or <vscale x 16 x i8> %va, splat (i8 -12)
196  ret <vscale x 16 x i8> %vc
197}
198
199define <vscale x 16 x i8> @vor_vx_nxv16i8_1(<vscale x 16 x i8> %va) {
200; CHECK-LABEL: vor_vx_nxv16i8_1:
201; CHECK:       # %bb.0:
202; CHECK-NEXT:    vsetvli a0, zero, e8, m2, ta, ma
203; CHECK-NEXT:    vor.vi v8, v8, 15
204; CHECK-NEXT:    ret
205  %vc = or <vscale x 16 x i8> %va, splat (i8 15)
206  ret <vscale x 16 x i8> %vc
207}
208
209define <vscale x 16 x i8> @vor_vx_nxv16i8_2(<vscale x 16 x i8> %va) {
210; CHECK-LABEL: vor_vx_nxv16i8_2:
211; CHECK:       # %bb.0:
212; CHECK-NEXT:    li a0, 16
213; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma
214; CHECK-NEXT:    vor.vx v8, v8, a0
215; CHECK-NEXT:    ret
216  %vc = or <vscale x 16 x i8> %va, splat (i8 16)
217  ret <vscale x 16 x i8> %vc
218}
219
220define <vscale x 32 x i8> @vor_vx_nxv32i8(<vscale x 32 x i8> %va, i8 signext %b) {
221; CHECK-LABEL: vor_vx_nxv32i8:
222; CHECK:       # %bb.0:
223; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
224; CHECK-NEXT:    vor.vx v8, v8, a0
225; CHECK-NEXT:    ret
226  %head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0
227  %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer
228  %vc = or <vscale x 32 x i8> %va, %splat
229  ret <vscale x 32 x i8> %vc
230}
231
232define <vscale x 32 x i8> @vor_vx_nxv32i8_0(<vscale x 32 x i8> %va) {
233; CHECK-LABEL: vor_vx_nxv32i8_0:
234; CHECK:       # %bb.0:
235; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
236; CHECK-NEXT:    vor.vi v8, v8, -12
237; CHECK-NEXT:    ret
238  %vc = or <vscale x 32 x i8> %va, splat (i8 -12)
239  ret <vscale x 32 x i8> %vc
240}
241
242define <vscale x 32 x i8> @vor_vx_nxv32i8_1(<vscale x 32 x i8> %va) {
243; CHECK-LABEL: vor_vx_nxv32i8_1:
244; CHECK:       # %bb.0:
245; CHECK-NEXT:    vsetvli a0, zero, e8, m4, ta, ma
246; CHECK-NEXT:    vor.vi v8, v8, 15
247; CHECK-NEXT:    ret
248  %vc = or <vscale x 32 x i8> %va, splat (i8 15)
249  ret <vscale x 32 x i8> %vc
250}
251
252define <vscale x 32 x i8> @vor_vx_nxv32i8_2(<vscale x 32 x i8> %va) {
253; CHECK-LABEL: vor_vx_nxv32i8_2:
254; CHECK:       # %bb.0:
255; CHECK-NEXT:    li a0, 16
256; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma
257; CHECK-NEXT:    vor.vx v8, v8, a0
258; CHECK-NEXT:    ret
259  %vc = or <vscale x 32 x i8> %va, splat (i8 16)
260  ret <vscale x 32 x i8> %vc
261}
262
263define <vscale x 64 x i8> @vor_vx_nxv64i8(<vscale x 64 x i8> %va, i8 signext %b) {
264; CHECK-LABEL: vor_vx_nxv64i8:
265; CHECK:       # %bb.0:
266; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma
267; CHECK-NEXT:    vor.vx v8, v8, a0
268; CHECK-NEXT:    ret
269  %head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0
270  %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer
271  %vc = or <vscale x 64 x i8> %va, %splat
272  ret <vscale x 64 x i8> %vc
273}
274
275define <vscale x 64 x i8> @vor_vx_nxv64i8_0(<vscale x 64 x i8> %va) {
276; CHECK-LABEL: vor_vx_nxv64i8_0:
277; CHECK:       # %bb.0:
278; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
279; CHECK-NEXT:    vor.vi v8, v8, -12
280; CHECK-NEXT:    ret
281  %vc = or <vscale x 64 x i8> %va, splat (i8 -12)
282  ret <vscale x 64 x i8> %vc
283}
284
285define <vscale x 64 x i8> @vor_vx_nxv64i8_1(<vscale x 64 x i8> %va) {
286; CHECK-LABEL: vor_vx_nxv64i8_1:
287; CHECK:       # %bb.0:
288; CHECK-NEXT:    vsetvli a0, zero, e8, m8, ta, ma
289; CHECK-NEXT:    vor.vi v8, v8, 15
290; CHECK-NEXT:    ret
291  %vc = or <vscale x 64 x i8> %va, splat (i8 15)
292  ret <vscale x 64 x i8> %vc
293}
294
295define <vscale x 64 x i8> @vor_vx_nxv64i8_2(<vscale x 64 x i8> %va) {
296; CHECK-LABEL: vor_vx_nxv64i8_2:
297; CHECK:       # %bb.0:
298; CHECK-NEXT:    li a0, 16
299; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma
300; CHECK-NEXT:    vor.vx v8, v8, a0
301; CHECK-NEXT:    ret
302  %vc = or <vscale x 64 x i8> %va, splat (i8 16)
303  ret <vscale x 64 x i8> %vc
304}
305
306define <vscale x 1 x i16> @vor_vx_nxv1i16(<vscale x 1 x i16> %va, i16 signext %b) {
307; CHECK-LABEL: vor_vx_nxv1i16:
308; CHECK:       # %bb.0:
309; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
310; CHECK-NEXT:    vor.vx v8, v8, a0
311; CHECK-NEXT:    ret
312  %head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0
313  %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer
314  %vc = or <vscale x 1 x i16> %va, %splat
315  ret <vscale x 1 x i16> %vc
316}
317
318define <vscale x 1 x i16> @vor_vx_nxv1i16_0(<vscale x 1 x i16> %va) {
319; CHECK-LABEL: vor_vx_nxv1i16_0:
320; CHECK:       # %bb.0:
321; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
322; CHECK-NEXT:    vor.vi v8, v8, -12
323; CHECK-NEXT:    ret
324  %vc = or <vscale x 1 x i16> %va, splat (i16 -12)
325  ret <vscale x 1 x i16> %vc
326}
327
328define <vscale x 1 x i16> @vor_vx_nxv1i16_1(<vscale x 1 x i16> %va) {
329; CHECK-LABEL: vor_vx_nxv1i16_1:
330; CHECK:       # %bb.0:
331; CHECK-NEXT:    vsetvli a0, zero, e16, mf4, ta, ma
332; CHECK-NEXT:    vor.vi v8, v8, 15
333; CHECK-NEXT:    ret
334  %vc = or <vscale x 1 x i16> %va, splat (i16 15)
335  ret <vscale x 1 x i16> %vc
336}
337
338define <vscale x 1 x i16> @vor_vx_nxv1i16_2(<vscale x 1 x i16> %va) {
339; CHECK-LABEL: vor_vx_nxv1i16_2:
340; CHECK:       # %bb.0:
341; CHECK-NEXT:    li a0, 16
342; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma
343; CHECK-NEXT:    vor.vx v8, v8, a0
344; CHECK-NEXT:    ret
345  %vc = or <vscale x 1 x i16> %va, splat (i16 16)
346  ret <vscale x 1 x i16> %vc
347}
348
349define <vscale x 2 x i16> @vor_vx_nxv2i16(<vscale x 2 x i16> %va, i16 signext %b) {
350; CHECK-LABEL: vor_vx_nxv2i16:
351; CHECK:       # %bb.0:
352; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
353; CHECK-NEXT:    vor.vx v8, v8, a0
354; CHECK-NEXT:    ret
355  %head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0
356  %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer
357  %vc = or <vscale x 2 x i16> %va, %splat
358  ret <vscale x 2 x i16> %vc
359}
360
361define <vscale x 2 x i16> @vor_vx_nxv2i16_0(<vscale x 2 x i16> %va) {
362; CHECK-LABEL: vor_vx_nxv2i16_0:
363; CHECK:       # %bb.0:
364; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
365; CHECK-NEXT:    vor.vi v8, v8, -12
366; CHECK-NEXT:    ret
367  %vc = or <vscale x 2 x i16> %va, splat (i16 -12)
368  ret <vscale x 2 x i16> %vc
369}
370
371define <vscale x 2 x i16> @vor_vx_nxv2i16_1(<vscale x 2 x i16> %va) {
372; CHECK-LABEL: vor_vx_nxv2i16_1:
373; CHECK:       # %bb.0:
374; CHECK-NEXT:    vsetvli a0, zero, e16, mf2, ta, ma
375; CHECK-NEXT:    vor.vi v8, v8, 15
376; CHECK-NEXT:    ret
377  %vc = or <vscale x 2 x i16> %va, splat (i16 15)
378  ret <vscale x 2 x i16> %vc
379}
380
381define <vscale x 2 x i16> @vor_vx_nxv2i16_2(<vscale x 2 x i16> %va) {
382; CHECK-LABEL: vor_vx_nxv2i16_2:
383; CHECK:       # %bb.0:
384; CHECK-NEXT:    li a0, 16
385; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma
386; CHECK-NEXT:    vor.vx v8, v8, a0
387; CHECK-NEXT:    ret
388  %vc = or <vscale x 2 x i16> %va, splat (i16 16)
389  ret <vscale x 2 x i16> %vc
390}
391
392define <vscale x 4 x i16> @vor_vx_nxv4i16(<vscale x 4 x i16> %va, i16 signext %b) {
393; CHECK-LABEL: vor_vx_nxv4i16:
394; CHECK:       # %bb.0:
395; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
396; CHECK-NEXT:    vor.vx v8, v8, a0
397; CHECK-NEXT:    ret
398  %head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0
399  %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer
400  %vc = or <vscale x 4 x i16> %va, %splat
401  ret <vscale x 4 x i16> %vc
402}
403
404define <vscale x 4 x i16> @vor_vx_nxv4i16_0(<vscale x 4 x i16> %va) {
405; CHECK-LABEL: vor_vx_nxv4i16_0:
406; CHECK:       # %bb.0:
407; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
408; CHECK-NEXT:    vor.vi v8, v8, -12
409; CHECK-NEXT:    ret
410  %vc = or <vscale x 4 x i16> %va, splat (i16 -12)
411  ret <vscale x 4 x i16> %vc
412}
413
414define <vscale x 4 x i16> @vor_vx_nxv4i16_1(<vscale x 4 x i16> %va) {
415; CHECK-LABEL: vor_vx_nxv4i16_1:
416; CHECK:       # %bb.0:
417; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma
418; CHECK-NEXT:    vor.vi v8, v8, 15
419; CHECK-NEXT:    ret
420  %vc = or <vscale x 4 x i16> %va, splat (i16 15)
421  ret <vscale x 4 x i16> %vc
422}
423
424define <vscale x 4 x i16> @vor_vx_nxv4i16_2(<vscale x 4 x i16> %va) {
425; CHECK-LABEL: vor_vx_nxv4i16_2:
426; CHECK:       # %bb.0:
427; CHECK-NEXT:    li a0, 16
428; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma
429; CHECK-NEXT:    vor.vx v8, v8, a0
430; CHECK-NEXT:    ret
431  %vc = or <vscale x 4 x i16> %va, splat (i16 16)
432  ret <vscale x 4 x i16> %vc
433}
434
435define <vscale x 8 x i16> @vor_vx_nxv8i16(<vscale x 8 x i16> %va, i16 signext %b) {
436; CHECK-LABEL: vor_vx_nxv8i16:
437; CHECK:       # %bb.0:
438; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
439; CHECK-NEXT:    vor.vx v8, v8, a0
440; CHECK-NEXT:    ret
441  %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0
442  %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer
443  %vc = or <vscale x 8 x i16> %va, %splat
444  ret <vscale x 8 x i16> %vc
445}
446
447define <vscale x 8 x i16> @vor_vx_nxv8i16_0(<vscale x 8 x i16> %va) {
448; CHECK-LABEL: vor_vx_nxv8i16_0:
449; CHECK:       # %bb.0:
450; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
451; CHECK-NEXT:    vor.vi v8, v8, -12
452; CHECK-NEXT:    ret
453  %vc = or <vscale x 8 x i16> %va, splat (i16 -12)
454  ret <vscale x 8 x i16> %vc
455}
456
457define <vscale x 8 x i16> @vor_vx_nxv8i16_1(<vscale x 8 x i16> %va) {
458; CHECK-LABEL: vor_vx_nxv8i16_1:
459; CHECK:       # %bb.0:
460; CHECK-NEXT:    vsetvli a0, zero, e16, m2, ta, ma
461; CHECK-NEXT:    vor.vi v8, v8, 15
462; CHECK-NEXT:    ret
463  %vc = or <vscale x 8 x i16> %va, splat (i16 15)
464  ret <vscale x 8 x i16> %vc
465}
466
467define <vscale x 8 x i16> @vor_vx_nxv8i16_2(<vscale x 8 x i16> %va) {
468; CHECK-LABEL: vor_vx_nxv8i16_2:
469; CHECK:       # %bb.0:
470; CHECK-NEXT:    li a0, 16
471; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma
472; CHECK-NEXT:    vor.vx v8, v8, a0
473; CHECK-NEXT:    ret
474  %vc = or <vscale x 8 x i16> %va, splat (i16 16)
475  ret <vscale x 8 x i16> %vc
476}
477
478define <vscale x 16 x i16> @vor_vx_nxv16i16(<vscale x 16 x i16> %va, i16 signext %b) {
479; CHECK-LABEL: vor_vx_nxv16i16:
480; CHECK:       # %bb.0:
481; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
482; CHECK-NEXT:    vor.vx v8, v8, a0
483; CHECK-NEXT:    ret
484  %head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0
485  %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer
486  %vc = or <vscale x 16 x i16> %va, %splat
487  ret <vscale x 16 x i16> %vc
488}
489
490define <vscale x 16 x i16> @vor_vx_nxv16i16_0(<vscale x 16 x i16> %va) {
491; CHECK-LABEL: vor_vx_nxv16i16_0:
492; CHECK:       # %bb.0:
493; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
494; CHECK-NEXT:    vor.vi v8, v8, -12
495; CHECK-NEXT:    ret
496  %vc = or <vscale x 16 x i16> %va, splat (i16 -12)
497  ret <vscale x 16 x i16> %vc
498}
499
500define <vscale x 16 x i16> @vor_vx_nxv16i16_1(<vscale x 16 x i16> %va) {
501; CHECK-LABEL: vor_vx_nxv16i16_1:
502; CHECK:       # %bb.0:
503; CHECK-NEXT:    vsetvli a0, zero, e16, m4, ta, ma
504; CHECK-NEXT:    vor.vi v8, v8, 15
505; CHECK-NEXT:    ret
506  %vc = or <vscale x 16 x i16> %va, splat (i16 15)
507  ret <vscale x 16 x i16> %vc
508}
509
510define <vscale x 16 x i16> @vor_vx_nxv16i16_2(<vscale x 16 x i16> %va) {
511; CHECK-LABEL: vor_vx_nxv16i16_2:
512; CHECK:       # %bb.0:
513; CHECK-NEXT:    li a0, 16
514; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma
515; CHECK-NEXT:    vor.vx v8, v8, a0
516; CHECK-NEXT:    ret
517  %vc = or <vscale x 16 x i16> %va, splat (i16 16)
518  ret <vscale x 16 x i16> %vc
519}
520
521define <vscale x 32 x i16> @vor_vx_nxv32i16(<vscale x 32 x i16> %va, i16 signext %b) {
522; CHECK-LABEL: vor_vx_nxv32i16:
523; CHECK:       # %bb.0:
524; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
525; CHECK-NEXT:    vor.vx v8, v8, a0
526; CHECK-NEXT:    ret
527  %head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0
528  %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer
529  %vc = or <vscale x 32 x i16> %va, %splat
530  ret <vscale x 32 x i16> %vc
531}
532
533define <vscale x 32 x i16> @vor_vx_nxv32i16_0(<vscale x 32 x i16> %va) {
534; CHECK-LABEL: vor_vx_nxv32i16_0:
535; CHECK:       # %bb.0:
536; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
537; CHECK-NEXT:    vor.vi v8, v8, -12
538; CHECK-NEXT:    ret
539  %vc = or <vscale x 32 x i16> %va, splat (i16 -12)
540  ret <vscale x 32 x i16> %vc
541}
542
543define <vscale x 32 x i16> @vor_vx_nxv32i16_1(<vscale x 32 x i16> %va) {
544; CHECK-LABEL: vor_vx_nxv32i16_1:
545; CHECK:       # %bb.0:
546; CHECK-NEXT:    vsetvli a0, zero, e16, m8, ta, ma
547; CHECK-NEXT:    vor.vi v8, v8, 15
548; CHECK-NEXT:    ret
549  %vc = or <vscale x 32 x i16> %va, splat (i16 15)
550  ret <vscale x 32 x i16> %vc
551}
552
553define <vscale x 32 x i16> @vor_vx_nxv32i16_2(<vscale x 32 x i16> %va) {
554; CHECK-LABEL: vor_vx_nxv32i16_2:
555; CHECK:       # %bb.0:
556; CHECK-NEXT:    li a0, 16
557; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma
558; CHECK-NEXT:    vor.vx v8, v8, a0
559; CHECK-NEXT:    ret
560  %vc = or <vscale x 32 x i16> %va, splat (i16 16)
561  ret <vscale x 32 x i16> %vc
562}
563
564define <vscale x 1 x i32> @vor_vx_nxv1i32(<vscale x 1 x i32> %va, i32 signext %b) {
565; CHECK-LABEL: vor_vx_nxv1i32:
566; CHECK:       # %bb.0:
567; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
568; CHECK-NEXT:    vor.vx v8, v8, a0
569; CHECK-NEXT:    ret
570  %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0
571  %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer
572  %vc = or <vscale x 1 x i32> %va, %splat
573  ret <vscale x 1 x i32> %vc
574}
575
576define <vscale x 1 x i32> @vor_vx_nxv1i32_0(<vscale x 1 x i32> %va) {
577; CHECK-LABEL: vor_vx_nxv1i32_0:
578; CHECK:       # %bb.0:
579; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
580; CHECK-NEXT:    vor.vi v8, v8, -12
581; CHECK-NEXT:    ret
582  %vc = or <vscale x 1 x i32> %va, splat (i32 -12)
583  ret <vscale x 1 x i32> %vc
584}
585
586define <vscale x 1 x i32> @vor_vx_nxv1i32_1(<vscale x 1 x i32> %va) {
587; CHECK-LABEL: vor_vx_nxv1i32_1:
588; CHECK:       # %bb.0:
589; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma
590; CHECK-NEXT:    vor.vi v8, v8, 15
591; CHECK-NEXT:    ret
592  %vc = or <vscale x 1 x i32> %va, splat (i32 15)
593  ret <vscale x 1 x i32> %vc
594}
595
596define <vscale x 1 x i32> @vor_vx_nxv1i32_2(<vscale x 1 x i32> %va) {
597; CHECK-LABEL: vor_vx_nxv1i32_2:
598; CHECK:       # %bb.0:
599; CHECK-NEXT:    li a0, 16
600; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma
601; CHECK-NEXT:    vor.vx v8, v8, a0
602; CHECK-NEXT:    ret
603  %vc = or <vscale x 1 x i32> %va, splat (i32 16)
604  ret <vscale x 1 x i32> %vc
605}
606
607define <vscale x 2 x i32> @vor_vx_nxv2i32(<vscale x 2 x i32> %va, i32 signext %b) {
608; CHECK-LABEL: vor_vx_nxv2i32:
609; CHECK:       # %bb.0:
610; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
611; CHECK-NEXT:    vor.vx v8, v8, a0
612; CHECK-NEXT:    ret
613  %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0
614  %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer
615  %vc = or <vscale x 2 x i32> %va, %splat
616  ret <vscale x 2 x i32> %vc
617}
618
619define <vscale x 2 x i32> @vor_vx_nxv2i32_0(<vscale x 2 x i32> %va) {
620; CHECK-LABEL: vor_vx_nxv2i32_0:
621; CHECK:       # %bb.0:
622; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
623; CHECK-NEXT:    vor.vi v8, v8, -12
624; CHECK-NEXT:    ret
625  %vc = or <vscale x 2 x i32> %va, splat (i32 -12)
626  ret <vscale x 2 x i32> %vc
627}
628
629define <vscale x 2 x i32> @vor_vx_nxv2i32_1(<vscale x 2 x i32> %va) {
630; CHECK-LABEL: vor_vx_nxv2i32_1:
631; CHECK:       # %bb.0:
632; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma
633; CHECK-NEXT:    vor.vi v8, v8, 15
634; CHECK-NEXT:    ret
635  %vc = or <vscale x 2 x i32> %va, splat (i32 15)
636  ret <vscale x 2 x i32> %vc
637}
638
639define <vscale x 2 x i32> @vor_vx_nxv2i32_2(<vscale x 2 x i32> %va) {
640; CHECK-LABEL: vor_vx_nxv2i32_2:
641; CHECK:       # %bb.0:
642; CHECK-NEXT:    li a0, 16
643; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma
644; CHECK-NEXT:    vor.vx v8, v8, a0
645; CHECK-NEXT:    ret
646  %vc = or <vscale x 2 x i32> %va, splat (i32 16)
647  ret <vscale x 2 x i32> %vc
648}
649
650define <vscale x 4 x i32> @vor_vx_nxv4i32(<vscale x 4 x i32> %va, i32 signext %b) {
651; CHECK-LABEL: vor_vx_nxv4i32:
652; CHECK:       # %bb.0:
653; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
654; CHECK-NEXT:    vor.vx v8, v8, a0
655; CHECK-NEXT:    ret
656  %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0
657  %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer
658  %vc = or <vscale x 4 x i32> %va, %splat
659  ret <vscale x 4 x i32> %vc
660}
661
662define <vscale x 4 x i32> @vor_vx_nxv4i32_0(<vscale x 4 x i32> %va) {
663; CHECK-LABEL: vor_vx_nxv4i32_0:
664; CHECK:       # %bb.0:
665; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
666; CHECK-NEXT:    vor.vi v8, v8, -12
667; CHECK-NEXT:    ret
668  %vc = or <vscale x 4 x i32> %va, splat (i32 -12)
669  ret <vscale x 4 x i32> %vc
670}
671
672define <vscale x 4 x i32> @vor_vx_nxv4i32_1(<vscale x 4 x i32> %va) {
673; CHECK-LABEL: vor_vx_nxv4i32_1:
674; CHECK:       # %bb.0:
675; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma
676; CHECK-NEXT:    vor.vi v8, v8, 15
677; CHECK-NEXT:    ret
678  %vc = or <vscale x 4 x i32> %va, splat (i32 15)
679  ret <vscale x 4 x i32> %vc
680}
681
682define <vscale x 4 x i32> @vor_vx_nxv4i32_2(<vscale x 4 x i32> %va) {
683; CHECK-LABEL: vor_vx_nxv4i32_2:
684; CHECK:       # %bb.0:
685; CHECK-NEXT:    li a0, 16
686; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma
687; CHECK-NEXT:    vor.vx v8, v8, a0
688; CHECK-NEXT:    ret
689  %vc = or <vscale x 4 x i32> %va, splat (i32 16)
690  ret <vscale x 4 x i32> %vc
691}
692
693define <vscale x 8 x i32> @vor_vx_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b) {
694; CHECK-LABEL: vor_vx_nxv8i32:
695; CHECK:       # %bb.0:
696; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
697; CHECK-NEXT:    vor.vx v8, v8, a0
698; CHECK-NEXT:    ret
699  %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
700  %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
701  %vc = or <vscale x 8 x i32> %va, %splat
702  ret <vscale x 8 x i32> %vc
703}
704
705define <vscale x 8 x i32> @vor_vx_nxv8i32_0(<vscale x 8 x i32> %va) {
706; CHECK-LABEL: vor_vx_nxv8i32_0:
707; CHECK:       # %bb.0:
708; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
709; CHECK-NEXT:    vor.vi v8, v8, -12
710; CHECK-NEXT:    ret
711  %vc = or <vscale x 8 x i32> %va, splat (i32 -12)
712  ret <vscale x 8 x i32> %vc
713}
714
715define <vscale x 8 x i32> @vor_vx_nxv8i32_1(<vscale x 8 x i32> %va) {
716; CHECK-LABEL: vor_vx_nxv8i32_1:
717; CHECK:       # %bb.0:
718; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma
719; CHECK-NEXT:    vor.vi v8, v8, 15
720; CHECK-NEXT:    ret
721  %vc = or <vscale x 8 x i32> %va, splat (i32 15)
722  ret <vscale x 8 x i32> %vc
723}
724
725define <vscale x 8 x i32> @vor_vx_nxv8i32_2(<vscale x 8 x i32> %va) {
726; CHECK-LABEL: vor_vx_nxv8i32_2:
727; CHECK:       # %bb.0:
728; CHECK-NEXT:    li a0, 16
729; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma
730; CHECK-NEXT:    vor.vx v8, v8, a0
731; CHECK-NEXT:    ret
732  %vc = or <vscale x 8 x i32> %va, splat (i32 16)
733  ret <vscale x 8 x i32> %vc
734}
735
736define <vscale x 16 x i32> @vor_vx_nxv16i32(<vscale x 16 x i32> %va, i32 signext %b) {
737; CHECK-LABEL: vor_vx_nxv16i32:
738; CHECK:       # %bb.0:
739; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
740; CHECK-NEXT:    vor.vx v8, v8, a0
741; CHECK-NEXT:    ret
742  %head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0
743  %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer
744  %vc = or <vscale x 16 x i32> %va, %splat
745  ret <vscale x 16 x i32> %vc
746}
747
748define <vscale x 16 x i32> @vor_vx_nxv16i32_0(<vscale x 16 x i32> %va) {
749; CHECK-LABEL: vor_vx_nxv16i32_0:
750; CHECK:       # %bb.0:
751; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
752; CHECK-NEXT:    vor.vi v8, v8, -12
753; CHECK-NEXT:    ret
754  %vc = or <vscale x 16 x i32> %va, splat (i32 -12)
755  ret <vscale x 16 x i32> %vc
756}
757
758define <vscale x 16 x i32> @vor_vx_nxv16i32_1(<vscale x 16 x i32> %va) {
759; CHECK-LABEL: vor_vx_nxv16i32_1:
760; CHECK:       # %bb.0:
761; CHECK-NEXT:    vsetvli a0, zero, e32, m8, ta, ma
762; CHECK-NEXT:    vor.vi v8, v8, 15
763; CHECK-NEXT:    ret
764  %vc = or <vscale x 16 x i32> %va, splat (i32 15)
765  ret <vscale x 16 x i32> %vc
766}
767
768define <vscale x 16 x i32> @vor_vx_nxv16i32_2(<vscale x 16 x i32> %va) {
769; CHECK-LABEL: vor_vx_nxv16i32_2:
770; CHECK:       # %bb.0:
771; CHECK-NEXT:    li a0, 16
772; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, ma
773; CHECK-NEXT:    vor.vx v8, v8, a0
774; CHECK-NEXT:    ret
775  %vc = or <vscale x 16 x i32> %va, splat (i32 16)
776  ret <vscale x 16 x i32> %vc
777}
778
779define <vscale x 1 x i64> @vor_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b) {
780; RV32-LABEL: vor_vx_nxv1i64:
781; RV32:       # %bb.0:
782; RV32-NEXT:    addi sp, sp, -16
783; RV32-NEXT:    .cfi_def_cfa_offset 16
784; RV32-NEXT:    sw a0, 8(sp)
785; RV32-NEXT:    sw a1, 12(sp)
786; RV32-NEXT:    addi a0, sp, 8
787; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
788; RV32-NEXT:    vlse64.v v9, (a0), zero
789; RV32-NEXT:    vor.vv v8, v8, v9
790; RV32-NEXT:    addi sp, sp, 16
791; RV32-NEXT:    .cfi_def_cfa_offset 0
792; RV32-NEXT:    ret
793;
794; RV64-LABEL: vor_vx_nxv1i64:
795; RV64:       # %bb.0:
796; RV64-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
797; RV64-NEXT:    vor.vx v8, v8, a0
798; RV64-NEXT:    ret
799  %head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0
800  %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer
801  %vc = or <vscale x 1 x i64> %va, %splat
802  ret <vscale x 1 x i64> %vc
803}
804
805define <vscale x 1 x i64> @vor_vx_nxv1i64_0(<vscale x 1 x i64> %va) {
806; CHECK-LABEL: vor_vx_nxv1i64_0:
807; CHECK:       # %bb.0:
808; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
809; CHECK-NEXT:    vor.vi v8, v8, -12
810; CHECK-NEXT:    ret
811  %vc = or <vscale x 1 x i64> %va, splat (i64 -12)
812  ret <vscale x 1 x i64> %vc
813}
814
815define <vscale x 1 x i64> @vor_vx_nxv1i64_1(<vscale x 1 x i64> %va) {
816; CHECK-LABEL: vor_vx_nxv1i64_1:
817; CHECK:       # %bb.0:
818; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma
819; CHECK-NEXT:    vor.vi v8, v8, 15
820; CHECK-NEXT:    ret
821  %vc = or <vscale x 1 x i64> %va, splat (i64 15)
822  ret <vscale x 1 x i64> %vc
823}
824
825define <vscale x 1 x i64> @vor_vx_nxv1i64_2(<vscale x 1 x i64> %va) {
826; CHECK-LABEL: vor_vx_nxv1i64_2:
827; CHECK:       # %bb.0:
828; CHECK-NEXT:    li a0, 16
829; CHECK-NEXT:    vsetvli a1, zero, e64, m1, ta, ma
830; CHECK-NEXT:    vor.vx v8, v8, a0
831; CHECK-NEXT:    ret
832  %vc = or <vscale x 1 x i64> %va, splat (i64 16)
833  ret <vscale x 1 x i64> %vc
834}
835
836define <vscale x 2 x i64> @vor_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b) {
837; RV32-LABEL: vor_vx_nxv2i64:
838; RV32:       # %bb.0:
839; RV32-NEXT:    addi sp, sp, -16
840; RV32-NEXT:    .cfi_def_cfa_offset 16
841; RV32-NEXT:    sw a0, 8(sp)
842; RV32-NEXT:    sw a1, 12(sp)
843; RV32-NEXT:    addi a0, sp, 8
844; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
845; RV32-NEXT:    vlse64.v v10, (a0), zero
846; RV32-NEXT:    vor.vv v8, v8, v10
847; RV32-NEXT:    addi sp, sp, 16
848; RV32-NEXT:    .cfi_def_cfa_offset 0
849; RV32-NEXT:    ret
850;
851; RV64-LABEL: vor_vx_nxv2i64:
852; RV64:       # %bb.0:
853; RV64-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
854; RV64-NEXT:    vor.vx v8, v8, a0
855; RV64-NEXT:    ret
856  %head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0
857  %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer
858  %vc = or <vscale x 2 x i64> %va, %splat
859  ret <vscale x 2 x i64> %vc
860}
861
862define <vscale x 2 x i64> @vor_vx_nxv2i64_0(<vscale x 2 x i64> %va) {
863; CHECK-LABEL: vor_vx_nxv2i64_0:
864; CHECK:       # %bb.0:
865; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
866; CHECK-NEXT:    vor.vi v8, v8, -12
867; CHECK-NEXT:    ret
868  %vc = or <vscale x 2 x i64> %va, splat (i64 -12)
869  ret <vscale x 2 x i64> %vc
870}
871
872define <vscale x 2 x i64> @vor_vx_nxv2i64_1(<vscale x 2 x i64> %va) {
873; CHECK-LABEL: vor_vx_nxv2i64_1:
874; CHECK:       # %bb.0:
875; CHECK-NEXT:    vsetvli a0, zero, e64, m2, ta, ma
876; CHECK-NEXT:    vor.vi v8, v8, 15
877; CHECK-NEXT:    ret
878  %vc = or <vscale x 2 x i64> %va, splat (i64 15)
879  ret <vscale x 2 x i64> %vc
880}
881
882define <vscale x 2 x i64> @vor_vx_nxv2i64_2(<vscale x 2 x i64> %va) {
883; CHECK-LABEL: vor_vx_nxv2i64_2:
884; CHECK:       # %bb.0:
885; CHECK-NEXT:    li a0, 16
886; CHECK-NEXT:    vsetvli a1, zero, e64, m2, ta, ma
887; CHECK-NEXT:    vor.vx v8, v8, a0
888; CHECK-NEXT:    ret
889  %vc = or <vscale x 2 x i64> %va, splat (i64 16)
890  ret <vscale x 2 x i64> %vc
891}
892
893define <vscale x 4 x i64> @vor_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b) {
894; RV32-LABEL: vor_vx_nxv4i64:
895; RV32:       # %bb.0:
896; RV32-NEXT:    addi sp, sp, -16
897; RV32-NEXT:    .cfi_def_cfa_offset 16
898; RV32-NEXT:    sw a0, 8(sp)
899; RV32-NEXT:    sw a1, 12(sp)
900; RV32-NEXT:    addi a0, sp, 8
901; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
902; RV32-NEXT:    vlse64.v v12, (a0), zero
903; RV32-NEXT:    vor.vv v8, v8, v12
904; RV32-NEXT:    addi sp, sp, 16
905; RV32-NEXT:    .cfi_def_cfa_offset 0
906; RV32-NEXT:    ret
907;
908; RV64-LABEL: vor_vx_nxv4i64:
909; RV64:       # %bb.0:
910; RV64-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
911; RV64-NEXT:    vor.vx v8, v8, a0
912; RV64-NEXT:    ret
913  %head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0
914  %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer
915  %vc = or <vscale x 4 x i64> %va, %splat
916  ret <vscale x 4 x i64> %vc
917}
918
919define <vscale x 4 x i64> @vor_vx_nxv4i64_0(<vscale x 4 x i64> %va) {
920; CHECK-LABEL: vor_vx_nxv4i64_0:
921; CHECK:       # %bb.0:
922; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
923; CHECK-NEXT:    vor.vi v8, v8, -12
924; CHECK-NEXT:    ret
925  %vc = or <vscale x 4 x i64> %va, splat (i64 -12)
926  ret <vscale x 4 x i64> %vc
927}
928
929define <vscale x 4 x i64> @vor_vx_nxv4i64_1(<vscale x 4 x i64> %va) {
930; CHECK-LABEL: vor_vx_nxv4i64_1:
931; CHECK:       # %bb.0:
932; CHECK-NEXT:    vsetvli a0, zero, e64, m4, ta, ma
933; CHECK-NEXT:    vor.vi v8, v8, 15
934; CHECK-NEXT:    ret
935  %vc = or <vscale x 4 x i64> %va, splat (i64 15)
936  ret <vscale x 4 x i64> %vc
937}
938
939define <vscale x 4 x i64> @vor_vx_nxv4i64_2(<vscale x 4 x i64> %va) {
940; CHECK-LABEL: vor_vx_nxv4i64_2:
941; CHECK:       # %bb.0:
942; CHECK-NEXT:    li a0, 16
943; CHECK-NEXT:    vsetvli a1, zero, e64, m4, ta, ma
944; CHECK-NEXT:    vor.vx v8, v8, a0
945; CHECK-NEXT:    ret
946  %vc = or <vscale x 4 x i64> %va, splat (i64 16)
947  ret <vscale x 4 x i64> %vc
948}
949
950define <vscale x 8 x i64> @vor_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) {
951; RV32-LABEL: vor_vx_nxv8i64:
952; RV32:       # %bb.0:
953; RV32-NEXT:    addi sp, sp, -16
954; RV32-NEXT:    .cfi_def_cfa_offset 16
955; RV32-NEXT:    sw a0, 8(sp)
956; RV32-NEXT:    sw a1, 12(sp)
957; RV32-NEXT:    addi a0, sp, 8
958; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
959; RV32-NEXT:    vlse64.v v16, (a0), zero
960; RV32-NEXT:    vor.vv v8, v8, v16
961; RV32-NEXT:    addi sp, sp, 16
962; RV32-NEXT:    .cfi_def_cfa_offset 0
963; RV32-NEXT:    ret
964;
965; RV64-LABEL: vor_vx_nxv8i64:
966; RV64:       # %bb.0:
967; RV64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
968; RV64-NEXT:    vor.vx v8, v8, a0
969; RV64-NEXT:    ret
970  %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
971  %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
972  %vc = or <vscale x 8 x i64> %va, %splat
973  ret <vscale x 8 x i64> %vc
974}
975
976define <vscale x 8 x i64> @vor_vx_nxv8i64_0(<vscale x 8 x i64> %va) {
977; CHECK-LABEL: vor_vx_nxv8i64_0:
978; CHECK:       # %bb.0:
979; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
980; CHECK-NEXT:    vor.vi v8, v8, -12
981; CHECK-NEXT:    ret
982  %vc = or <vscale x 8 x i64> %va, splat (i64 -12)
983  ret <vscale x 8 x i64> %vc
984}
985
986define <vscale x 8 x i64> @vor_vx_nxv8i64_1(<vscale x 8 x i64> %va) {
987; CHECK-LABEL: vor_vx_nxv8i64_1:
988; CHECK:       # %bb.0:
989; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
990; CHECK-NEXT:    vor.vi v8, v8, 15
991; CHECK-NEXT:    ret
992  %vc = or <vscale x 8 x i64> %va, splat (i64 15)
993  ret <vscale x 8 x i64> %vc
994}
995
996define <vscale x 8 x i64> @vor_vx_nxv8i64_2(<vscale x 8 x i64> %va) {
997; CHECK-LABEL: vor_vx_nxv8i64_2:
998; CHECK:       # %bb.0:
999; CHECK-NEXT:    li a0, 16
1000; CHECK-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1001; CHECK-NEXT:    vor.vx v8, v8, a0
1002; CHECK-NEXT:    ret
1003  %vc = or <vscale x 8 x i64> %va, splat (i64 16)
1004  ret <vscale x 8 x i64> %vc
1005}
1006
1007
1008define <vscale x 8 x i64> @vor_vx_nxv8i64_3(<vscale x 8 x i64> %va) {
1009; CHECK-LABEL: vor_vx_nxv8i64_3:
1010; CHECK:       # %bb.0:
1011; CHECK-NEXT:    vsetvli a0, zero, e64, m8, ta, ma
1012; CHECK-NEXT:    vmv.v.i v8, -1
1013; CHECK-NEXT:    ret
1014  %vc = or <vscale x 8 x i64> %va, splat (i64 -1)
1015  ret <vscale x 8 x i64> %vc
1016}
1017
1018define <vscale x 8 x i64> @vor_xx_nxv8i64(i64 %a, i64 %b) nounwind {
1019; RV32-LABEL: vor_xx_nxv8i64:
1020; RV32:       # %bb.0:
1021; RV32-NEXT:    addi sp, sp, -16
1022; RV32-NEXT:    or a1, a1, a3
1023; RV32-NEXT:    or a0, a0, a2
1024; RV32-NEXT:    sw a0, 8(sp)
1025; RV32-NEXT:    sw a1, 12(sp)
1026; RV32-NEXT:    addi a0, sp, 8
1027; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1028; RV32-NEXT:    vlse64.v v8, (a0), zero
1029; RV32-NEXT:    addi sp, sp, 16
1030; RV32-NEXT:    ret
1031;
1032; RV64-LABEL: vor_xx_nxv8i64:
1033; RV64:       # %bb.0:
1034; RV64-NEXT:    or a0, a0, a1
1035; RV64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma
1036; RV64-NEXT:    vmv.v.x v8, a0
1037; RV64-NEXT:    ret
1038  %head1 = insertelement <vscale x 8 x i64> poison, i64 %a, i32 0
1039  %splat1 = shufflevector <vscale x 8 x i64> %head1, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1040  %head2 = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0
1041  %splat2 = shufflevector <vscale x 8 x i64> %head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer
1042  %v = or <vscale x 8 x i64> %splat1, %splat2
1043  ret <vscale x 8 x i64> %v
1044}
1045
1046define <vscale x 8 x i32> @vor_vv_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %mask) {
1047; CHECK-LABEL: vor_vv_mask_nxv8i32:
1048; CHECK:       # %bb.0:
1049; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1050; CHECK-NEXT:    vor.vv v8, v8, v12, v0.t
1051; CHECK-NEXT:    ret
1052  %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %vb, <vscale x 8 x i32> zeroinitializer
1053  %vc = or <vscale x 8 x i32> %va, %vs
1054  ret <vscale x 8 x i32> %vc
1055}
1056
1057define <vscale x 8 x i32> @vor_vx_mask_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b, <vscale x 8 x i1> %mask) {
1058; CHECK-LABEL: vor_vx_mask_nxv8i32:
1059; CHECK:       # %bb.0:
1060; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, mu
1061; CHECK-NEXT:    vor.vx v8, v8, a0, v0.t
1062; CHECK-NEXT:    ret
1063  %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0
1064  %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer
1065  %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %splat, <vscale x 8 x i32> zeroinitializer
1066  %vc = or <vscale x 8 x i32> %va, %vs
1067  ret <vscale x 8 x i32> %vc
1068}
1069
1070define <vscale x 8 x i32> @vor_vi_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %mask) {
1071; CHECK-LABEL: vor_vi_mask_nxv8i32:
1072; CHECK:       # %bb.0:
1073; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, mu
1074; CHECK-NEXT:    vor.vi v8, v8, 7, v0.t
1075; CHECK-NEXT:    ret
1076  %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> splat (i32 7), <vscale x 8 x i32> zeroinitializer
1077  %vc = or <vscale x 8 x i32> %va, %vs
1078  ret <vscale x 8 x i32> %vc
1079}
1080