[rtsan] Add fork/execve interceptors (#117198)
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-vand-vp.ll
blob1be3fd091033805e247c86e76edb2ad387fd6690
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 <8 x i7> @llvm.vp.and.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32)
9 define <8 x i7> @vand_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vand_vv_v8i7:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
13 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
14 ; CHECK-NEXT:    ret
15   %v = call <8 x i7> @llvm.vp.and.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl)
16   ret <8 x i7> %v
19 declare <2 x i8> @llvm.vp.and.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32)
21 define <2 x i8> @vand_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) {
22 ; CHECK-LABEL: vand_vv_v2i8:
23 ; CHECK:       # %bb.0:
24 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
25 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
26 ; CHECK-NEXT:    ret
27   %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl)
28   ret <2 x i8> %v
31 define <2 x i8> @vand_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) {
32 ; CHECK-LABEL: vand_vv_v2i8_unmasked:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
35 ; CHECK-NEXT:    vand.vv v8, v8, v9
36 ; CHECK-NEXT:    ret
37   %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl)
38   ret <2 x i8> %v
41 define <2 x i8> @vand_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
42 ; CHECK-LABEL: vand_vx_v2i8:
43 ; CHECK:       # %bb.0:
44 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
45 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
46 ; CHECK-NEXT:    ret
47   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
48   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
49   %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl)
50   ret <2 x i8> %v
53 define <2 x i8> @vand_vx_v2i8_commute(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) {
54 ; CHECK-LABEL: vand_vx_v2i8_commute:
55 ; CHECK:       # %bb.0:
56 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
57 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
58 ; CHECK-NEXT:    ret
59   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
60   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
61   %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %vb, <2 x i8> %va, <2 x i1> %m, i32 %evl)
62   ret <2 x i8> %v
65 define <2 x i8> @vand_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
66 ; CHECK-LABEL: vand_vx_v2i8_unmasked:
67 ; CHECK:       # %bb.0:
68 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
69 ; CHECK-NEXT:    vand.vx v8, v8, a0
70 ; CHECK-NEXT:    ret
71   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
72   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
73   %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl)
74   ret <2 x i8> %v
77 define <2 x i8> @vand_vx_v2i8_unmasked_commute(<2 x i8> %va, i8 %b, i32 zeroext %evl) {
78 ; CHECK-LABEL: vand_vx_v2i8_unmasked_commute:
79 ; CHECK:       # %bb.0:
80 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf8, ta, ma
81 ; CHECK-NEXT:    vand.vx v8, v8, a0
82 ; CHECK-NEXT:    ret
83   %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0
84   %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer
85   %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %vb, <2 x i8> %va, <2 x i1> splat (i1 true), i32 %evl)
86   ret <2 x i8> %v
89 define <2 x i8> @vand_vi_v2i8(<2 x i8> %va, <2 x i1> %m, i32 zeroext %evl) {
90 ; CHECK-LABEL: vand_vi_v2i8:
91 ; CHECK:       # %bb.0:
92 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
93 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
94 ; CHECK-NEXT:    ret
95   %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %va, <2 x i8> splat (i8 4), <2 x i1> %m, i32 %evl)
96   ret <2 x i8> %v
99 define <2 x i8> @vand_vi_v2i8_unmasked(<2 x i8> %va, i32 zeroext %evl) {
100 ; CHECK-LABEL: vand_vi_v2i8_unmasked:
101 ; CHECK:       # %bb.0:
102 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf8, ta, ma
103 ; CHECK-NEXT:    vand.vi v8, v8, 4
104 ; CHECK-NEXT:    ret
105   %v = call <2 x i8> @llvm.vp.and.v2i8(<2 x i8> %va, <2 x i8> splat (i8 4), <2 x i1> splat (i1 true), i32 %evl)
106   ret <2 x i8> %v
109 declare <4 x i8> @llvm.vp.and.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32)
111 define <4 x i8> @vand_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) {
112 ; CHECK-LABEL: vand_vv_v4i8:
113 ; CHECK:       # %bb.0:
114 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
115 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
116 ; CHECK-NEXT:    ret
117   %v = call <4 x i8> @llvm.vp.and.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl)
118   ret <4 x i8> %v
121 define <4 x i8> @vand_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) {
122 ; CHECK-LABEL: vand_vv_v4i8_unmasked:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
125 ; CHECK-NEXT:    vand.vv v8, v8, v9
126 ; CHECK-NEXT:    ret
127   %v = call <4 x i8> @llvm.vp.and.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl)
128   ret <4 x i8> %v
131 define <4 x i8> @vand_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) {
132 ; CHECK-LABEL: vand_vx_v4i8:
133 ; CHECK:       # %bb.0:
134 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
135 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
136 ; CHECK-NEXT:    ret
137   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
138   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
139   %v = call <4 x i8> @llvm.vp.and.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl)
140   ret <4 x i8> %v
143 define <4 x i8> @vand_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) {
144 ; CHECK-LABEL: vand_vx_v4i8_unmasked:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf4, ta, ma
147 ; CHECK-NEXT:    vand.vx v8, v8, a0
148 ; CHECK-NEXT:    ret
149   %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0
150   %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer
151   %v = call <4 x i8> @llvm.vp.and.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl)
152   ret <4 x i8> %v
155 define <4 x i8> @vand_vi_v4i8(<4 x i8> %va, <4 x i1> %m, i32 zeroext %evl) {
156 ; CHECK-LABEL: vand_vi_v4i8:
157 ; CHECK:       # %bb.0:
158 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
159 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
160 ; CHECK-NEXT:    ret
161   %v = call <4 x i8> @llvm.vp.and.v4i8(<4 x i8> %va, <4 x i8> splat (i8 4), <4 x i1> %m, i32 %evl)
162   ret <4 x i8> %v
165 define <4 x i8> @vand_vi_v4i8_unmasked(<4 x i8> %va, i32 zeroext %evl) {
166 ; CHECK-LABEL: vand_vi_v4i8_unmasked:
167 ; CHECK:       # %bb.0:
168 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf4, ta, ma
169 ; CHECK-NEXT:    vand.vi v8, v8, 4
170 ; CHECK-NEXT:    ret
171   %v = call <4 x i8> @llvm.vp.and.v4i8(<4 x i8> %va, <4 x i8> splat (i8 4), <4 x i1> splat (i1 true), i32 %evl)
172   ret <4 x i8> %v
175 declare <8 x i8> @llvm.vp.and.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32)
177 define <8 x i8> @vand_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) {
178 ; CHECK-LABEL: vand_vv_v8i8:
179 ; CHECK:       # %bb.0:
180 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
181 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
182 ; CHECK-NEXT:    ret
183   %v = call <8 x i8> @llvm.vp.and.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl)
184   ret <8 x i8> %v
187 define <8 x i8> @vand_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) {
188 ; CHECK-LABEL: vand_vv_v8i8_unmasked:
189 ; CHECK:       # %bb.0:
190 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
191 ; CHECK-NEXT:    vand.vv v8, v8, v9
192 ; CHECK-NEXT:    ret
193   %v = call <8 x i8> @llvm.vp.and.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl)
194   ret <8 x i8> %v
197 define <8 x i8> @vand_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) {
198 ; CHECK-LABEL: vand_vx_v8i8:
199 ; CHECK:       # %bb.0:
200 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
201 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
202 ; CHECK-NEXT:    ret
203   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
204   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
205   %v = call <8 x i8> @llvm.vp.and.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl)
206   ret <8 x i8> %v
209 define <8 x i8> @vand_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) {
210 ; CHECK-LABEL: vand_vx_v8i8_unmasked:
211 ; CHECK:       # %bb.0:
212 ; CHECK-NEXT:    vsetvli zero, a1, e8, mf2, ta, ma
213 ; CHECK-NEXT:    vand.vx v8, v8, a0
214 ; CHECK-NEXT:    ret
215   %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0
216   %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer
217   %v = call <8 x i8> @llvm.vp.and.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl)
218   ret <8 x i8> %v
221 define <8 x i8> @vand_vi_v8i8(<8 x i8> %va, <8 x i1> %m, i32 zeroext %evl) {
222 ; CHECK-LABEL: vand_vi_v8i8:
223 ; CHECK:       # %bb.0:
224 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
225 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
226 ; CHECK-NEXT:    ret
227   %v = call <8 x i8> @llvm.vp.and.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), <8 x i1> %m, i32 %evl)
228   ret <8 x i8> %v
231 define <8 x i8> @vand_vi_v8i8_unmasked(<8 x i8> %va, i32 zeroext %evl) {
232 ; CHECK-LABEL: vand_vi_v8i8_unmasked:
233 ; CHECK:       # %bb.0:
234 ; CHECK-NEXT:    vsetvli zero, a0, e8, mf2, ta, ma
235 ; CHECK-NEXT:    vand.vi v8, v8, 4
236 ; CHECK-NEXT:    ret
237   %v = call <8 x i8> @llvm.vp.and.v8i8(<8 x i8> %va, <8 x i8> splat (i8 4), <8 x i1> splat (i1 true), i32 %evl)
238   ret <8 x i8> %v
241 declare <16 x i8> @llvm.vp.and.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32)
243 define <16 x i8> @vand_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) {
244 ; CHECK-LABEL: vand_vv_v16i8:
245 ; CHECK:       # %bb.0:
246 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
247 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
248 ; CHECK-NEXT:    ret
249   %v = call <16 x i8> @llvm.vp.and.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl)
250   ret <16 x i8> %v
253 define <16 x i8> @vand_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) {
254 ; CHECK-LABEL: vand_vv_v16i8_unmasked:
255 ; CHECK:       # %bb.0:
256 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
257 ; CHECK-NEXT:    vand.vv v8, v8, v9
258 ; CHECK-NEXT:    ret
259   %v = call <16 x i8> @llvm.vp.and.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl)
260   ret <16 x i8> %v
263 define <16 x i8> @vand_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) {
264 ; CHECK-LABEL: vand_vx_v16i8:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
267 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
268 ; CHECK-NEXT:    ret
269   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
270   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
271   %v = call <16 x i8> @llvm.vp.and.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl)
272   ret <16 x i8> %v
275 define <16 x i8> @vand_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) {
276 ; CHECK-LABEL: vand_vx_v16i8_unmasked:
277 ; CHECK:       # %bb.0:
278 ; CHECK-NEXT:    vsetvli zero, a1, e8, m1, ta, ma
279 ; CHECK-NEXT:    vand.vx v8, v8, a0
280 ; CHECK-NEXT:    ret
281   %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0
282   %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer
283   %v = call <16 x i8> @llvm.vp.and.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl)
284   ret <16 x i8> %v
287 define <16 x i8> @vand_vi_v16i8(<16 x i8> %va, <16 x i1> %m, i32 zeroext %evl) {
288 ; CHECK-LABEL: vand_vi_v16i8:
289 ; CHECK:       # %bb.0:
290 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
291 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
292 ; CHECK-NEXT:    ret
293   %v = call <16 x i8> @llvm.vp.and.v16i8(<16 x i8> %va, <16 x i8> splat (i8 4), <16 x i1> %m, i32 %evl)
294   ret <16 x i8> %v
297 define <16 x i8> @vand_vi_v16i8_unmasked(<16 x i8> %va, i32 zeroext %evl) {
298 ; CHECK-LABEL: vand_vi_v16i8_unmasked:
299 ; CHECK:       # %bb.0:
300 ; CHECK-NEXT:    vsetvli zero, a0, e8, m1, ta, ma
301 ; CHECK-NEXT:    vand.vi v8, v8, 4
302 ; CHECK-NEXT:    ret
303   %v = call <16 x i8> @llvm.vp.and.v16i8(<16 x i8> %va, <16 x i8> splat (i8 4), <16 x i1> splat (i1 true), i32 %evl)
304   ret <16 x i8> %v
307 declare <2 x i16> @llvm.vp.and.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32)
309 define <2 x i16> @vand_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) {
310 ; CHECK-LABEL: vand_vv_v2i16:
311 ; CHECK:       # %bb.0:
312 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
313 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
314 ; CHECK-NEXT:    ret
315   %v = call <2 x i16> @llvm.vp.and.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl)
316   ret <2 x i16> %v
319 define <2 x i16> @vand_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) {
320 ; CHECK-LABEL: vand_vv_v2i16_unmasked:
321 ; CHECK:       # %bb.0:
322 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
323 ; CHECK-NEXT:    vand.vv v8, v8, v9
324 ; CHECK-NEXT:    ret
325   %v = call <2 x i16> @llvm.vp.and.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl)
326   ret <2 x i16> %v
329 define <2 x i16> @vand_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) {
330 ; CHECK-LABEL: vand_vx_v2i16:
331 ; CHECK:       # %bb.0:
332 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
333 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
334 ; CHECK-NEXT:    ret
335   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
336   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
337   %v = call <2 x i16> @llvm.vp.and.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl)
338   ret <2 x i16> %v
341 define <2 x i16> @vand_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) {
342 ; CHECK-LABEL: vand_vx_v2i16_unmasked:
343 ; CHECK:       # %bb.0:
344 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf4, ta, ma
345 ; CHECK-NEXT:    vand.vx v8, v8, a0
346 ; CHECK-NEXT:    ret
347   %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0
348   %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer
349   %v = call <2 x i16> @llvm.vp.and.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl)
350   ret <2 x i16> %v
353 define <2 x i16> @vand_vi_v2i16(<2 x i16> %va, <2 x i1> %m, i32 zeroext %evl) {
354 ; CHECK-LABEL: vand_vi_v2i16:
355 ; CHECK:       # %bb.0:
356 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
357 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
358 ; CHECK-NEXT:    ret
359   %v = call <2 x i16> @llvm.vp.and.v2i16(<2 x i16> %va, <2 x i16> splat (i16 4), <2 x i1> %m, i32 %evl)
360   ret <2 x i16> %v
363 define <2 x i16> @vand_vi_v2i16_unmasked(<2 x i16> %va, i32 zeroext %evl) {
364 ; CHECK-LABEL: vand_vi_v2i16_unmasked:
365 ; CHECK:       # %bb.0:
366 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
367 ; CHECK-NEXT:    vand.vi v8, v8, 4
368 ; CHECK-NEXT:    ret
369   %v = call <2 x i16> @llvm.vp.and.v2i16(<2 x i16> %va, <2 x i16> splat (i16 4), <2 x i1> splat (i1 true), i32 %evl)
370   ret <2 x i16> %v
373 declare <4 x i16> @llvm.vp.and.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32)
375 define <4 x i16> @vand_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) {
376 ; CHECK-LABEL: vand_vv_v4i16:
377 ; CHECK:       # %bb.0:
378 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
379 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
380 ; CHECK-NEXT:    ret
381   %v = call <4 x i16> @llvm.vp.and.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl)
382   ret <4 x i16> %v
385 define <4 x i16> @vand_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) {
386 ; CHECK-LABEL: vand_vv_v4i16_unmasked:
387 ; CHECK:       # %bb.0:
388 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
389 ; CHECK-NEXT:    vand.vv v8, v8, v9
390 ; CHECK-NEXT:    ret
391   %v = call <4 x i16> @llvm.vp.and.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl)
392   ret <4 x i16> %v
395 define <4 x i16> @vand_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) {
396 ; CHECK-LABEL: vand_vx_v4i16:
397 ; CHECK:       # %bb.0:
398 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
399 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
400 ; CHECK-NEXT:    ret
401   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
402   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
403   %v = call <4 x i16> @llvm.vp.and.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl)
404   ret <4 x i16> %v
407 define <4 x i16> @vand_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) {
408 ; CHECK-LABEL: vand_vx_v4i16_unmasked:
409 ; CHECK:       # %bb.0:
410 ; CHECK-NEXT:    vsetvli zero, a1, e16, mf2, ta, ma
411 ; CHECK-NEXT:    vand.vx v8, v8, a0
412 ; CHECK-NEXT:    ret
413   %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0
414   %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer
415   %v = call <4 x i16> @llvm.vp.and.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl)
416   ret <4 x i16> %v
419 define <4 x i16> @vand_vi_v4i16(<4 x i16> %va, <4 x i1> %m, i32 zeroext %evl) {
420 ; CHECK-LABEL: vand_vi_v4i16:
421 ; CHECK:       # %bb.0:
422 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
423 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
424 ; CHECK-NEXT:    ret
425   %v = call <4 x i16> @llvm.vp.and.v4i16(<4 x i16> %va, <4 x i16> splat (i16 4), <4 x i1> %m, i32 %evl)
426   ret <4 x i16> %v
429 define <4 x i16> @vand_vi_v4i16_unmasked(<4 x i16> %va, i32 zeroext %evl) {
430 ; CHECK-LABEL: vand_vi_v4i16_unmasked:
431 ; CHECK:       # %bb.0:
432 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
433 ; CHECK-NEXT:    vand.vi v8, v8, 4
434 ; CHECK-NEXT:    ret
435   %v = call <4 x i16> @llvm.vp.and.v4i16(<4 x i16> %va, <4 x i16> splat (i16 4), <4 x i1> splat (i1 true), i32 %evl)
436   ret <4 x i16> %v
439 declare <8 x i16> @llvm.vp.and.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32)
441 define <8 x i16> @vand_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) {
442 ; CHECK-LABEL: vand_vv_v8i16:
443 ; CHECK:       # %bb.0:
444 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
445 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
446 ; CHECK-NEXT:    ret
447   %v = call <8 x i16> @llvm.vp.and.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl)
448   ret <8 x i16> %v
451 define <8 x i16> @vand_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) {
452 ; CHECK-LABEL: vand_vv_v8i16_unmasked:
453 ; CHECK:       # %bb.0:
454 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
455 ; CHECK-NEXT:    vand.vv v8, v8, v9
456 ; CHECK-NEXT:    ret
457   %v = call <8 x i16> @llvm.vp.and.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl)
458   ret <8 x i16> %v
461 define <8 x i16> @vand_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) {
462 ; CHECK-LABEL: vand_vx_v8i16:
463 ; CHECK:       # %bb.0:
464 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
465 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
466 ; CHECK-NEXT:    ret
467   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
468   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
469   %v = call <8 x i16> @llvm.vp.and.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl)
470   ret <8 x i16> %v
473 define <8 x i16> @vand_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) {
474 ; CHECK-LABEL: vand_vx_v8i16_unmasked:
475 ; CHECK:       # %bb.0:
476 ; CHECK-NEXT:    vsetvli zero, a1, e16, m1, ta, ma
477 ; CHECK-NEXT:    vand.vx v8, v8, a0
478 ; CHECK-NEXT:    ret
479   %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0
480   %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer
481   %v = call <8 x i16> @llvm.vp.and.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl)
482   ret <8 x i16> %v
485 define <8 x i16> @vand_vi_v8i16(<8 x i16> %va, <8 x i1> %m, i32 zeroext %evl) {
486 ; CHECK-LABEL: vand_vi_v8i16:
487 ; CHECK:       # %bb.0:
488 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
489 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
490 ; CHECK-NEXT:    ret
491   %v = call <8 x i16> @llvm.vp.and.v8i16(<8 x i16> %va, <8 x i16> splat (i16 4), <8 x i1> %m, i32 %evl)
492   ret <8 x i16> %v
495 define <8 x i16> @vand_vi_v8i16_unmasked(<8 x i16> %va, i32 zeroext %evl) {
496 ; CHECK-LABEL: vand_vi_v8i16_unmasked:
497 ; CHECK:       # %bb.0:
498 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
499 ; CHECK-NEXT:    vand.vi v8, v8, 4
500 ; CHECK-NEXT:    ret
501   %v = call <8 x i16> @llvm.vp.and.v8i16(<8 x i16> %va, <8 x i16> splat (i16 4), <8 x i1> splat (i1 true), i32 %evl)
502   ret <8 x i16> %v
505 declare <16 x i16> @llvm.vp.and.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32)
507 define <16 x i16> @vand_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) {
508 ; CHECK-LABEL: vand_vv_v16i16:
509 ; CHECK:       # %bb.0:
510 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
511 ; CHECK-NEXT:    vand.vv v8, v8, v10, v0.t
512 ; CHECK-NEXT:    ret
513   %v = call <16 x i16> @llvm.vp.and.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl)
514   ret <16 x i16> %v
517 define <16 x i16> @vand_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) {
518 ; CHECK-LABEL: vand_vv_v16i16_unmasked:
519 ; CHECK:       # %bb.0:
520 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
521 ; CHECK-NEXT:    vand.vv v8, v8, v10
522 ; CHECK-NEXT:    ret
523   %v = call <16 x i16> @llvm.vp.and.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl)
524   ret <16 x i16> %v
527 define <16 x i16> @vand_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) {
528 ; CHECK-LABEL: vand_vx_v16i16:
529 ; CHECK:       # %bb.0:
530 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
531 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
532 ; CHECK-NEXT:    ret
533   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
534   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
535   %v = call <16 x i16> @llvm.vp.and.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl)
536   ret <16 x i16> %v
539 define <16 x i16> @vand_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) {
540 ; CHECK-LABEL: vand_vx_v16i16_unmasked:
541 ; CHECK:       # %bb.0:
542 ; CHECK-NEXT:    vsetvli zero, a1, e16, m2, ta, ma
543 ; CHECK-NEXT:    vand.vx v8, v8, a0
544 ; CHECK-NEXT:    ret
545   %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0
546   %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer
547   %v = call <16 x i16> @llvm.vp.and.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl)
548   ret <16 x i16> %v
551 define <16 x i16> @vand_vi_v16i16(<16 x i16> %va, <16 x i1> %m, i32 zeroext %evl) {
552 ; CHECK-LABEL: vand_vi_v16i16:
553 ; CHECK:       # %bb.0:
554 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
555 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
556 ; CHECK-NEXT:    ret
557   %v = call <16 x i16> @llvm.vp.and.v16i16(<16 x i16> %va, <16 x i16> splat (i16 4), <16 x i1> %m, i32 %evl)
558   ret <16 x i16> %v
561 define <16 x i16> @vand_vi_v16i16_unmasked(<16 x i16> %va, i32 zeroext %evl) {
562 ; CHECK-LABEL: vand_vi_v16i16_unmasked:
563 ; CHECK:       # %bb.0:
564 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
565 ; CHECK-NEXT:    vand.vi v8, v8, 4
566 ; CHECK-NEXT:    ret
567   %v = call <16 x i16> @llvm.vp.and.v16i16(<16 x i16> %va, <16 x i16> splat (i16 4), <16 x i1> splat (i1 true), i32 %evl)
568   ret <16 x i16> %v
571 declare <2 x i32> @llvm.vp.and.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32)
573 define <2 x i32> @vand_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) {
574 ; CHECK-LABEL: vand_vv_v2i32:
575 ; CHECK:       # %bb.0:
576 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
577 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
578 ; CHECK-NEXT:    ret
579   %v = call <2 x i32> @llvm.vp.and.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl)
580   ret <2 x i32> %v
583 define <2 x i32> @vand_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) {
584 ; CHECK-LABEL: vand_vv_v2i32_unmasked:
585 ; CHECK:       # %bb.0:
586 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
587 ; CHECK-NEXT:    vand.vv v8, v8, v9
588 ; CHECK-NEXT:    ret
589   %v = call <2 x i32> @llvm.vp.and.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl)
590   ret <2 x i32> %v
593 define <2 x i32> @vand_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) {
594 ; CHECK-LABEL: vand_vx_v2i32:
595 ; CHECK:       # %bb.0:
596 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
597 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
598 ; CHECK-NEXT:    ret
599   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
600   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
601   %v = call <2 x i32> @llvm.vp.and.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl)
602   ret <2 x i32> %v
605 define <2 x i32> @vand_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) {
606 ; CHECK-LABEL: vand_vx_v2i32_unmasked:
607 ; CHECK:       # %bb.0:
608 ; CHECK-NEXT:    vsetvli zero, a1, e32, mf2, ta, ma
609 ; CHECK-NEXT:    vand.vx v8, v8, a0
610 ; CHECK-NEXT:    ret
611   %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0
612   %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer
613   %v = call <2 x i32> @llvm.vp.and.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl)
614   ret <2 x i32> %v
617 define <2 x i32> @vand_vi_v2i32(<2 x i32> %va, <2 x i1> %m, i32 zeroext %evl) {
618 ; CHECK-LABEL: vand_vi_v2i32:
619 ; CHECK:       # %bb.0:
620 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
621 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
622 ; CHECK-NEXT:    ret
623   %v = call <2 x i32> @llvm.vp.and.v2i32(<2 x i32> %va, <2 x i32> splat (i32 4), <2 x i1> %m, i32 %evl)
624   ret <2 x i32> %v
627 define <2 x i32> @vand_vi_v2i32_unmasked(<2 x i32> %va, i32 zeroext %evl) {
628 ; CHECK-LABEL: vand_vi_v2i32_unmasked:
629 ; CHECK:       # %bb.0:
630 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
631 ; CHECK-NEXT:    vand.vi v8, v8, 4
632 ; CHECK-NEXT:    ret
633   %v = call <2 x i32> @llvm.vp.and.v2i32(<2 x i32> %va, <2 x i32> splat (i32 4), <2 x i1> splat (i1 true), i32 %evl)
634   ret <2 x i32> %v
637 declare <4 x i32> @llvm.vp.and.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32)
639 define <4 x i32> @vand_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) {
640 ; CHECK-LABEL: vand_vv_v4i32:
641 ; CHECK:       # %bb.0:
642 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
643 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
644 ; CHECK-NEXT:    ret
645   %v = call <4 x i32> @llvm.vp.and.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl)
646   ret <4 x i32> %v
649 define <4 x i32> @vand_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) {
650 ; CHECK-LABEL: vand_vv_v4i32_unmasked:
651 ; CHECK:       # %bb.0:
652 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
653 ; CHECK-NEXT:    vand.vv v8, v8, v9
654 ; CHECK-NEXT:    ret
655   %v = call <4 x i32> @llvm.vp.and.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl)
656   ret <4 x i32> %v
659 define <4 x i32> @vand_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) {
660 ; CHECK-LABEL: vand_vx_v4i32:
661 ; CHECK:       # %bb.0:
662 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
663 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
664 ; CHECK-NEXT:    ret
665   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
666   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
667   %v = call <4 x i32> @llvm.vp.and.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl)
668   ret <4 x i32> %v
671 define <4 x i32> @vand_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) {
672 ; CHECK-LABEL: vand_vx_v4i32_unmasked:
673 ; CHECK:       # %bb.0:
674 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, ta, ma
675 ; CHECK-NEXT:    vand.vx v8, v8, a0
676 ; CHECK-NEXT:    ret
677   %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0
678   %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer
679   %v = call <4 x i32> @llvm.vp.and.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl)
680   ret <4 x i32> %v
683 define <4 x i32> @vand_vi_v4i32(<4 x i32> %va, <4 x i1> %m, i32 zeroext %evl) {
684 ; CHECK-LABEL: vand_vi_v4i32:
685 ; CHECK:       # %bb.0:
686 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
687 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
688 ; CHECK-NEXT:    ret
689   %v = call <4 x i32> @llvm.vp.and.v4i32(<4 x i32> %va, <4 x i32> splat (i32 4), <4 x i1> %m, i32 %evl)
690   ret <4 x i32> %v
693 define <4 x i32> @vand_vi_v4i32_unmasked(<4 x i32> %va, i32 zeroext %evl) {
694 ; CHECK-LABEL: vand_vi_v4i32_unmasked:
695 ; CHECK:       # %bb.0:
696 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
697 ; CHECK-NEXT:    vand.vi v8, v8, 4
698 ; CHECK-NEXT:    ret
699   %v = call <4 x i32> @llvm.vp.and.v4i32(<4 x i32> %va, <4 x i32> splat (i32 4), <4 x i1> splat (i1 true), i32 %evl)
700   ret <4 x i32> %v
703 declare <8 x i32> @llvm.vp.and.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32)
705 define <8 x i32> @vand_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) {
706 ; CHECK-LABEL: vand_vv_v8i32:
707 ; CHECK:       # %bb.0:
708 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
709 ; CHECK-NEXT:    vand.vv v8, v8, v10, v0.t
710 ; CHECK-NEXT:    ret
711   %v = call <8 x i32> @llvm.vp.and.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl)
712   ret <8 x i32> %v
715 define <8 x i32> @vand_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) {
716 ; CHECK-LABEL: vand_vv_v8i32_unmasked:
717 ; CHECK:       # %bb.0:
718 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
719 ; CHECK-NEXT:    vand.vv v8, v8, v10
720 ; CHECK-NEXT:    ret
721   %v = call <8 x i32> @llvm.vp.and.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl)
722   ret <8 x i32> %v
725 define <8 x i32> @vand_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) {
726 ; CHECK-LABEL: vand_vx_v8i32:
727 ; CHECK:       # %bb.0:
728 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
729 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
730 ; CHECK-NEXT:    ret
731   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
732   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
733   %v = call <8 x i32> @llvm.vp.and.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl)
734   ret <8 x i32> %v
737 define <8 x i32> @vand_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) {
738 ; CHECK-LABEL: vand_vx_v8i32_unmasked:
739 ; CHECK:       # %bb.0:
740 ; CHECK-NEXT:    vsetvli zero, a1, e32, m2, ta, ma
741 ; CHECK-NEXT:    vand.vx v8, v8, a0
742 ; CHECK-NEXT:    ret
743   %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0
744   %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer
745   %v = call <8 x i32> @llvm.vp.and.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl)
746   ret <8 x i32> %v
749 define <8 x i32> @vand_vi_v8i32(<8 x i32> %va, <8 x i1> %m, i32 zeroext %evl) {
750 ; CHECK-LABEL: vand_vi_v8i32:
751 ; CHECK:       # %bb.0:
752 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
753 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
754 ; CHECK-NEXT:    ret
755   %v = call <8 x i32> @llvm.vp.and.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), <8 x i1> %m, i32 %evl)
756   ret <8 x i32> %v
759 define <8 x i32> @vand_vi_v8i32_unmasked(<8 x i32> %va, i32 zeroext %evl) {
760 ; CHECK-LABEL: vand_vi_v8i32_unmasked:
761 ; CHECK:       # %bb.0:
762 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
763 ; CHECK-NEXT:    vand.vi v8, v8, 4
764 ; CHECK-NEXT:    ret
765   %v = call <8 x i32> @llvm.vp.and.v8i32(<8 x i32> %va, <8 x i32> splat (i32 4), <8 x i1> splat (i1 true), i32 %evl)
766   ret <8 x i32> %v
769 declare <16 x i32> @llvm.vp.and.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32)
771 define <16 x i32> @vand_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) {
772 ; CHECK-LABEL: vand_vv_v16i32:
773 ; CHECK:       # %bb.0:
774 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
775 ; CHECK-NEXT:    vand.vv v8, v8, v12, v0.t
776 ; CHECK-NEXT:    ret
777   %v = call <16 x i32> @llvm.vp.and.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl)
778   ret <16 x i32> %v
781 define <16 x i32> @vand_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) {
782 ; CHECK-LABEL: vand_vv_v16i32_unmasked:
783 ; CHECK:       # %bb.0:
784 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
785 ; CHECK-NEXT:    vand.vv v8, v8, v12
786 ; CHECK-NEXT:    ret
787   %v = call <16 x i32> @llvm.vp.and.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl)
788   ret <16 x i32> %v
791 define <16 x i32> @vand_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) {
792 ; CHECK-LABEL: vand_vx_v16i32:
793 ; CHECK:       # %bb.0:
794 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
795 ; CHECK-NEXT:    vand.vx v8, v8, a0, v0.t
796 ; CHECK-NEXT:    ret
797   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
798   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
799   %v = call <16 x i32> @llvm.vp.and.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl)
800   ret <16 x i32> %v
803 define <16 x i32> @vand_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) {
804 ; CHECK-LABEL: vand_vx_v16i32_unmasked:
805 ; CHECK:       # %bb.0:
806 ; CHECK-NEXT:    vsetvli zero, a1, e32, m4, ta, ma
807 ; CHECK-NEXT:    vand.vx v8, v8, a0
808 ; CHECK-NEXT:    ret
809   %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0
810   %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer
811   %v = call <16 x i32> @llvm.vp.and.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl)
812   ret <16 x i32> %v
815 define <16 x i32> @vand_vi_v16i32(<16 x i32> %va, <16 x i1> %m, i32 zeroext %evl) {
816 ; CHECK-LABEL: vand_vi_v16i32:
817 ; CHECK:       # %bb.0:
818 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
819 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
820 ; CHECK-NEXT:    ret
821   %v = call <16 x i32> @llvm.vp.and.v16i32(<16 x i32> %va, <16 x i32> splat (i32 4), <16 x i1> %m, i32 %evl)
822   ret <16 x i32> %v
825 define <16 x i32> @vand_vi_v16i32_unmasked(<16 x i32> %va, i32 zeroext %evl) {
826 ; CHECK-LABEL: vand_vi_v16i32_unmasked:
827 ; CHECK:       # %bb.0:
828 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
829 ; CHECK-NEXT:    vand.vi v8, v8, 4
830 ; CHECK-NEXT:    ret
831   %v = call <16 x i32> @llvm.vp.and.v16i32(<16 x i32> %va, <16 x i32> splat (i32 4), <16 x i1> splat (i1 true), i32 %evl)
832   ret <16 x i32> %v
835 declare <2 x i64> @llvm.vp.and.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32)
837 define <2 x i64> @vand_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) {
838 ; CHECK-LABEL: vand_vv_v2i64:
839 ; CHECK:       # %bb.0:
840 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
841 ; CHECK-NEXT:    vand.vv v8, v8, v9, v0.t
842 ; CHECK-NEXT:    ret
843   %v = call <2 x i64> @llvm.vp.and.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl)
844   ret <2 x i64> %v
847 define <2 x i64> @vand_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) {
848 ; CHECK-LABEL: vand_vv_v2i64_unmasked:
849 ; CHECK:       # %bb.0:
850 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
851 ; CHECK-NEXT:    vand.vv v8, v8, v9
852 ; CHECK-NEXT:    ret
853   %v = call <2 x i64> @llvm.vp.and.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl)
854   ret <2 x i64> %v
857 define <2 x i64> @vand_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) {
858 ; RV32-LABEL: vand_vx_v2i64:
859 ; RV32:       # %bb.0:
860 ; RV32-NEXT:    addi sp, sp, -16
861 ; RV32-NEXT:    .cfi_def_cfa_offset 16
862 ; RV32-NEXT:    sw a0, 8(sp)
863 ; RV32-NEXT:    sw a1, 12(sp)
864 ; RV32-NEXT:    addi a0, sp, 8
865 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
866 ; RV32-NEXT:    vlse64.v v9, (a0), zero
867 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
868 ; RV32-NEXT:    vand.vv v8, v8, v9, v0.t
869 ; RV32-NEXT:    addi sp, sp, 16
870 ; RV32-NEXT:    .cfi_def_cfa_offset 0
871 ; RV32-NEXT:    ret
873 ; RV64-LABEL: vand_vx_v2i64:
874 ; RV64:       # %bb.0:
875 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
876 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
877 ; RV64-NEXT:    ret
878   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
879   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
880   %v = call <2 x i64> @llvm.vp.and.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl)
881   ret <2 x i64> %v
884 define <2 x i64> @vand_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) {
885 ; RV32-LABEL: vand_vx_v2i64_unmasked:
886 ; RV32:       # %bb.0:
887 ; RV32-NEXT:    addi sp, sp, -16
888 ; RV32-NEXT:    .cfi_def_cfa_offset 16
889 ; RV32-NEXT:    sw a0, 8(sp)
890 ; RV32-NEXT:    sw a1, 12(sp)
891 ; RV32-NEXT:    addi a0, sp, 8
892 ; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
893 ; RV32-NEXT:    vlse64.v v9, (a0), zero
894 ; RV32-NEXT:    vsetvli zero, a2, e64, m1, ta, ma
895 ; RV32-NEXT:    vand.vv v8, v8, v9
896 ; RV32-NEXT:    addi sp, sp, 16
897 ; RV32-NEXT:    .cfi_def_cfa_offset 0
898 ; RV32-NEXT:    ret
900 ; RV64-LABEL: vand_vx_v2i64_unmasked:
901 ; RV64:       # %bb.0:
902 ; RV64-NEXT:    vsetvli zero, a1, e64, m1, ta, ma
903 ; RV64-NEXT:    vand.vx v8, v8, a0
904 ; RV64-NEXT:    ret
905   %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0
906   %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer
907   %v = call <2 x i64> @llvm.vp.and.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl)
908   ret <2 x i64> %v
911 define <2 x i64> @vand_vi_v2i64(<2 x i64> %va, <2 x i1> %m, i32 zeroext %evl) {
912 ; CHECK-LABEL: vand_vi_v2i64:
913 ; CHECK:       # %bb.0:
914 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
915 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
916 ; CHECK-NEXT:    ret
917   %v = call <2 x i64> @llvm.vp.and.v2i64(<2 x i64> %va, <2 x i64> splat (i64 4), <2 x i1> %m, i32 %evl)
918   ret <2 x i64> %v
921 define <2 x i64> @vand_vi_v2i64_unmasked(<2 x i64> %va, i32 zeroext %evl) {
922 ; CHECK-LABEL: vand_vi_v2i64_unmasked:
923 ; CHECK:       # %bb.0:
924 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
925 ; CHECK-NEXT:    vand.vi v8, v8, 4
926 ; CHECK-NEXT:    ret
927   %v = call <2 x i64> @llvm.vp.and.v2i64(<2 x i64> %va, <2 x i64> splat (i64 4), <2 x i1> splat (i1 true), i32 %evl)
928   ret <2 x i64> %v
931 declare <4 x i64> @llvm.vp.and.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32)
933 define <4 x i64> @vand_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) {
934 ; CHECK-LABEL: vand_vv_v4i64:
935 ; CHECK:       # %bb.0:
936 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
937 ; CHECK-NEXT:    vand.vv v8, v8, v10, v0.t
938 ; CHECK-NEXT:    ret
939   %v = call <4 x i64> @llvm.vp.and.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl)
940   ret <4 x i64> %v
943 define <4 x i64> @vand_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) {
944 ; CHECK-LABEL: vand_vv_v4i64_unmasked:
945 ; CHECK:       # %bb.0:
946 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
947 ; CHECK-NEXT:    vand.vv v8, v8, v10
948 ; CHECK-NEXT:    ret
949   %v = call <4 x i64> @llvm.vp.and.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl)
950   ret <4 x i64> %v
953 define <4 x i64> @vand_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) {
954 ; RV32-LABEL: vand_vx_v4i64:
955 ; RV32:       # %bb.0:
956 ; RV32-NEXT:    addi sp, sp, -16
957 ; RV32-NEXT:    .cfi_def_cfa_offset 16
958 ; RV32-NEXT:    sw a0, 8(sp)
959 ; RV32-NEXT:    sw a1, 12(sp)
960 ; RV32-NEXT:    addi a0, sp, 8
961 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
962 ; RV32-NEXT:    vlse64.v v10, (a0), zero
963 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
964 ; RV32-NEXT:    vand.vv v8, v8, v10, v0.t
965 ; RV32-NEXT:    addi sp, sp, 16
966 ; RV32-NEXT:    .cfi_def_cfa_offset 0
967 ; RV32-NEXT:    ret
969 ; RV64-LABEL: vand_vx_v4i64:
970 ; RV64:       # %bb.0:
971 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
972 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
973 ; RV64-NEXT:    ret
974   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
975   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
976   %v = call <4 x i64> @llvm.vp.and.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl)
977   ret <4 x i64> %v
980 define <4 x i64> @vand_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) {
981 ; RV32-LABEL: vand_vx_v4i64_unmasked:
982 ; RV32:       # %bb.0:
983 ; RV32-NEXT:    addi sp, sp, -16
984 ; RV32-NEXT:    .cfi_def_cfa_offset 16
985 ; RV32-NEXT:    sw a0, 8(sp)
986 ; RV32-NEXT:    sw a1, 12(sp)
987 ; RV32-NEXT:    addi a0, sp, 8
988 ; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
989 ; RV32-NEXT:    vlse64.v v10, (a0), zero
990 ; RV32-NEXT:    vsetvli zero, a2, e64, m2, ta, ma
991 ; RV32-NEXT:    vand.vv v8, v8, v10
992 ; RV32-NEXT:    addi sp, sp, 16
993 ; RV32-NEXT:    .cfi_def_cfa_offset 0
994 ; RV32-NEXT:    ret
996 ; RV64-LABEL: vand_vx_v4i64_unmasked:
997 ; RV64:       # %bb.0:
998 ; RV64-NEXT:    vsetvli zero, a1, e64, m2, ta, ma
999 ; RV64-NEXT:    vand.vx v8, v8, a0
1000 ; RV64-NEXT:    ret
1001   %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0
1002   %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer
1003   %v = call <4 x i64> @llvm.vp.and.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl)
1004   ret <4 x i64> %v
1007 define <4 x i64> @vand_vi_v4i64(<4 x i64> %va, <4 x i1> %m, i32 zeroext %evl) {
1008 ; CHECK-LABEL: vand_vi_v4i64:
1009 ; CHECK:       # %bb.0:
1010 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1011 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
1012 ; CHECK-NEXT:    ret
1013   %v = call <4 x i64> @llvm.vp.and.v4i64(<4 x i64> %va, <4 x i64> splat (i64 4), <4 x i1> %m, i32 %evl)
1014   ret <4 x i64> %v
1017 define <4 x i64> @vand_vi_v4i64_unmasked(<4 x i64> %va, i32 zeroext %evl) {
1018 ; CHECK-LABEL: vand_vi_v4i64_unmasked:
1019 ; CHECK:       # %bb.0:
1020 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
1021 ; CHECK-NEXT:    vand.vi v8, v8, 4
1022 ; CHECK-NEXT:    ret
1023   %v = call <4 x i64> @llvm.vp.and.v4i64(<4 x i64> %va, <4 x i64> splat (i64 4), <4 x i1> splat (i1 true), i32 %evl)
1024   ret <4 x i64> %v
1027 declare <8 x i64> @llvm.vp.and.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32)
1029 define <8 x i64> @vand_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) {
1030 ; CHECK-LABEL: vand_vv_v8i64:
1031 ; CHECK:       # %bb.0:
1032 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1033 ; CHECK-NEXT:    vand.vv v8, v8, v12, v0.t
1034 ; CHECK-NEXT:    ret
1035   %v = call <8 x i64> @llvm.vp.and.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl)
1036   ret <8 x i64> %v
1039 define <8 x i64> @vand_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) {
1040 ; CHECK-LABEL: vand_vv_v8i64_unmasked:
1041 ; CHECK:       # %bb.0:
1042 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1043 ; CHECK-NEXT:    vand.vv v8, v8, v12
1044 ; CHECK-NEXT:    ret
1045   %v = call <8 x i64> @llvm.vp.and.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl)
1046   ret <8 x i64> %v
1049 define <8 x i64> @vand_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) {
1050 ; RV32-LABEL: vand_vx_v8i64:
1051 ; RV32:       # %bb.0:
1052 ; RV32-NEXT:    addi sp, sp, -16
1053 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1054 ; RV32-NEXT:    sw a0, 8(sp)
1055 ; RV32-NEXT:    sw a1, 12(sp)
1056 ; RV32-NEXT:    addi a0, sp, 8
1057 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1058 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1059 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1060 ; RV32-NEXT:    vand.vv v8, v8, v12, v0.t
1061 ; RV32-NEXT:    addi sp, sp, 16
1062 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1063 ; RV32-NEXT:    ret
1065 ; RV64-LABEL: vand_vx_v8i64:
1066 ; RV64:       # %bb.0:
1067 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1068 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
1069 ; RV64-NEXT:    ret
1070   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1071   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1072   %v = call <8 x i64> @llvm.vp.and.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl)
1073   ret <8 x i64> %v
1076 define <8 x i64> @vand_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) {
1077 ; RV32-LABEL: vand_vx_v8i64_unmasked:
1078 ; RV32:       # %bb.0:
1079 ; RV32-NEXT:    addi sp, sp, -16
1080 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1081 ; RV32-NEXT:    sw a0, 8(sp)
1082 ; RV32-NEXT:    sw a1, 12(sp)
1083 ; RV32-NEXT:    addi a0, sp, 8
1084 ; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, ma
1085 ; RV32-NEXT:    vlse64.v v12, (a0), zero
1086 ; RV32-NEXT:    vsetvli zero, a2, e64, m4, ta, ma
1087 ; RV32-NEXT:    vand.vv v8, v8, v12
1088 ; RV32-NEXT:    addi sp, sp, 16
1089 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1090 ; RV32-NEXT:    ret
1092 ; RV64-LABEL: vand_vx_v8i64_unmasked:
1093 ; RV64:       # %bb.0:
1094 ; RV64-NEXT:    vsetvli zero, a1, e64, m4, ta, ma
1095 ; RV64-NEXT:    vand.vx v8, v8, a0
1096 ; RV64-NEXT:    ret
1097   %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0
1098   %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer
1099   %v = call <8 x i64> @llvm.vp.and.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl)
1100   ret <8 x i64> %v
1103 define <8 x i64> @vand_vi_v8i64(<8 x i64> %va, <8 x i1> %m, i32 zeroext %evl) {
1104 ; CHECK-LABEL: vand_vi_v8i64:
1105 ; CHECK:       # %bb.0:
1106 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1107 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
1108 ; CHECK-NEXT:    ret
1109   %v = call <8 x i64> @llvm.vp.and.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), <8 x i1> %m, i32 %evl)
1110   ret <8 x i64> %v
1113 define <8 x i64> @vand_vi_v8i64_unmasked(<8 x i64> %va, i32 zeroext %evl) {
1114 ; CHECK-LABEL: vand_vi_v8i64_unmasked:
1115 ; CHECK:       # %bb.0:
1116 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
1117 ; CHECK-NEXT:    vand.vi v8, v8, 4
1118 ; CHECK-NEXT:    ret
1119   %v = call <8 x i64> @llvm.vp.and.v8i64(<8 x i64> %va, <8 x i64> splat (i64 4), <8 x i1> splat (i1 true), i32 %evl)
1120   ret <8 x i64> %v
1123 declare <11 x i64> @llvm.vp.and.v11i64(<11 x i64>, <11 x i64>, <11 x i1>, i32)
1125 define <11 x i64> @vand_vv_v11i64(<11 x i64> %va, <11 x i64> %b, <11 x i1> %m, i32 zeroext %evl) {
1126 ; CHECK-LABEL: vand_vv_v11i64:
1127 ; CHECK:       # %bb.0:
1128 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1129 ; CHECK-NEXT:    vand.vv v8, v8, v16, v0.t
1130 ; CHECK-NEXT:    ret
1131   %v = call <11 x i64> @llvm.vp.and.v11i64(<11 x i64> %va, <11 x i64> %b, <11 x i1> %m, i32 %evl)
1132   ret <11 x i64> %v
1135 define <11 x i64> @vand_vv_v11i64_unmasked(<11 x i64> %va, <11 x i64> %b, i32 zeroext %evl) {
1136 ; CHECK-LABEL: vand_vv_v11i64_unmasked:
1137 ; CHECK:       # %bb.0:
1138 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1139 ; CHECK-NEXT:    vand.vv v8, v8, v16
1140 ; CHECK-NEXT:    ret
1141   %v = call <11 x i64> @llvm.vp.and.v11i64(<11 x i64> %va, <11 x i64> %b, <11 x i1> splat (i1 true), i32 %evl)
1142   ret <11 x i64> %v
1145 define <11 x i64> @vand_vx_v11i64(<11 x i64> %va, i64 %b, <11 x i1> %m, i32 zeroext %evl) {
1146 ; RV32-LABEL: vand_vx_v11i64:
1147 ; RV32:       # %bb.0:
1148 ; RV32-NEXT:    addi sp, sp, -16
1149 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1150 ; RV32-NEXT:    sw a0, 8(sp)
1151 ; RV32-NEXT:    sw a1, 12(sp)
1152 ; RV32-NEXT:    addi a0, sp, 8
1153 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1154 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1155 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1156 ; RV32-NEXT:    vand.vv v8, v8, v16, v0.t
1157 ; RV32-NEXT:    addi sp, sp, 16
1158 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1159 ; RV32-NEXT:    ret
1161 ; RV64-LABEL: vand_vx_v11i64:
1162 ; RV64:       # %bb.0:
1163 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1164 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
1165 ; RV64-NEXT:    ret
1166   %elt.head = insertelement <11 x i64> poison, i64 %b, i32 0
1167   %vb = shufflevector <11 x i64> %elt.head, <11 x i64> poison, <11 x i32> zeroinitializer
1168   %v = call <11 x i64> @llvm.vp.and.v11i64(<11 x i64> %va, <11 x i64> %vb, <11 x i1> %m, i32 %evl)
1169   ret <11 x i64> %v
1172 define <11 x i64> @vand_vx_v11i64_unmasked(<11 x i64> %va, i64 %b, i32 zeroext %evl) {
1173 ; RV32-LABEL: vand_vx_v11i64_unmasked:
1174 ; RV32:       # %bb.0:
1175 ; RV32-NEXT:    addi sp, sp, -16
1176 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1177 ; RV32-NEXT:    sw a0, 8(sp)
1178 ; RV32-NEXT:    sw a1, 12(sp)
1179 ; RV32-NEXT:    addi a0, sp, 8
1180 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1181 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1182 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1183 ; RV32-NEXT:    vand.vv v8, v8, v16
1184 ; RV32-NEXT:    addi sp, sp, 16
1185 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1186 ; RV32-NEXT:    ret
1188 ; RV64-LABEL: vand_vx_v11i64_unmasked:
1189 ; RV64:       # %bb.0:
1190 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1191 ; RV64-NEXT:    vand.vx v8, v8, a0
1192 ; RV64-NEXT:    ret
1193   %elt.head = insertelement <11 x i64> poison, i64 %b, i32 0
1194   %vb = shufflevector <11 x i64> %elt.head, <11 x i64> poison, <11 x i32> zeroinitializer
1195   %v = call <11 x i64> @llvm.vp.and.v11i64(<11 x i64> %va, <11 x i64> %vb, <11 x i1> splat (i1 true), i32 %evl)
1196   ret <11 x i64> %v
1199 define <11 x i64> @vand_vi_v11i64(<11 x i64> %va, <11 x i1> %m, i32 zeroext %evl) {
1200 ; CHECK-LABEL: vand_vi_v11i64:
1201 ; CHECK:       # %bb.0:
1202 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1203 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
1204 ; CHECK-NEXT:    ret
1205   %v = call <11 x i64> @llvm.vp.and.v11i64(<11 x i64> %va, <11 x i64> splat (i64 4), <11 x i1> %m, i32 %evl)
1206   ret <11 x i64> %v
1209 define <11 x i64> @vand_vi_v11i64_unmasked(<11 x i64> %va, i32 zeroext %evl) {
1210 ; CHECK-LABEL: vand_vi_v11i64_unmasked:
1211 ; CHECK:       # %bb.0:
1212 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1213 ; CHECK-NEXT:    vand.vi v8, v8, 4
1214 ; CHECK-NEXT:    ret
1215   %v = call <11 x i64> @llvm.vp.and.v11i64(<11 x i64> %va, <11 x i64> splat (i64 4), <11 x i1> splat (i1 true), i32 %evl)
1216   ret <11 x i64> %v
1219 declare <16 x i64> @llvm.vp.and.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32)
1221 define <16 x i64> @vand_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) {
1222 ; CHECK-LABEL: vand_vv_v16i64:
1223 ; CHECK:       # %bb.0:
1224 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1225 ; CHECK-NEXT:    vand.vv v8, v8, v16, v0.t
1226 ; CHECK-NEXT:    ret
1227   %v = call <16 x i64> @llvm.vp.and.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl)
1228   ret <16 x i64> %v
1231 define <16 x i64> @vand_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) {
1232 ; CHECK-LABEL: vand_vv_v16i64_unmasked:
1233 ; CHECK:       # %bb.0:
1234 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1235 ; CHECK-NEXT:    vand.vv v8, v8, v16
1236 ; CHECK-NEXT:    ret
1237   %v = call <16 x i64> @llvm.vp.and.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl)
1238   ret <16 x i64> %v
1241 define <16 x i64> @vand_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) {
1242 ; RV32-LABEL: vand_vx_v16i64:
1243 ; RV32:       # %bb.0:
1244 ; RV32-NEXT:    addi sp, sp, -16
1245 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1246 ; RV32-NEXT:    sw a0, 8(sp)
1247 ; RV32-NEXT:    sw a1, 12(sp)
1248 ; RV32-NEXT:    addi a0, sp, 8
1249 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1250 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1251 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1252 ; RV32-NEXT:    vand.vv v8, v8, v16, v0.t
1253 ; RV32-NEXT:    addi sp, sp, 16
1254 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1255 ; RV32-NEXT:    ret
1257 ; RV64-LABEL: vand_vx_v16i64:
1258 ; RV64:       # %bb.0:
1259 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1260 ; RV64-NEXT:    vand.vx v8, v8, a0, v0.t
1261 ; RV64-NEXT:    ret
1262   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1263   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1264   %v = call <16 x i64> @llvm.vp.and.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl)
1265   ret <16 x i64> %v
1268 define <16 x i64> @vand_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) {
1269 ; RV32-LABEL: vand_vx_v16i64_unmasked:
1270 ; RV32:       # %bb.0:
1271 ; RV32-NEXT:    addi sp, sp, -16
1272 ; RV32-NEXT:    .cfi_def_cfa_offset 16
1273 ; RV32-NEXT:    sw a0, 8(sp)
1274 ; RV32-NEXT:    sw a1, 12(sp)
1275 ; RV32-NEXT:    addi a0, sp, 8
1276 ; RV32-NEXT:    vsetivli zero, 16, e64, m8, ta, ma
1277 ; RV32-NEXT:    vlse64.v v16, (a0), zero
1278 ; RV32-NEXT:    vsetvli zero, a2, e64, m8, ta, ma
1279 ; RV32-NEXT:    vand.vv v8, v8, v16
1280 ; RV32-NEXT:    addi sp, sp, 16
1281 ; RV32-NEXT:    .cfi_def_cfa_offset 0
1282 ; RV32-NEXT:    ret
1284 ; RV64-LABEL: vand_vx_v16i64_unmasked:
1285 ; RV64:       # %bb.0:
1286 ; RV64-NEXT:    vsetvli zero, a1, e64, m8, ta, ma
1287 ; RV64-NEXT:    vand.vx v8, v8, a0
1288 ; RV64-NEXT:    ret
1289   %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0
1290   %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer
1291   %v = call <16 x i64> @llvm.vp.and.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl)
1292   ret <16 x i64> %v
1295 define <16 x i64> @vand_vi_v16i64(<16 x i64> %va, <16 x i1> %m, i32 zeroext %evl) {
1296 ; CHECK-LABEL: vand_vi_v16i64:
1297 ; CHECK:       # %bb.0:
1298 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1299 ; CHECK-NEXT:    vand.vi v8, v8, 4, v0.t
1300 ; CHECK-NEXT:    ret
1301   %v = call <16 x i64> @llvm.vp.and.v16i64(<16 x i64> %va, <16 x i64> splat (i64 4), <16 x i1> %m, i32 %evl)
1302   ret <16 x i64> %v
1305 define <16 x i64> @vand_vi_v16i64_unmasked(<16 x i64> %va, i32 zeroext %evl) {
1306 ; CHECK-LABEL: vand_vi_v16i64_unmasked:
1307 ; CHECK:       # %bb.0:
1308 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
1309 ; CHECK-NEXT:    vand.vi v8, v8, 4
1310 ; CHECK-NEXT:    ret
1311   %v = call <16 x i64> @llvm.vp.and.v16i64(<16 x i64> %va, <16 x i64> splat (i64 4), <16 x i1> splat (i1 true), i32 %evl)
1312   ret <16 x i64> %v