xref: /llvm-project/llvm/test/CodeGen/SystemZ/vec-eval.ll (revision 8424bf207efd89eacf2fe893b67be98d535e1db6)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2; Test use of VECTOR EVALUATE for combined boolean operations.
3;
4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=arch15 | FileCheck %s
5
6define <16 x i8> @eval0(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
7; CHECK-LABEL: eval0:
8; CHECK:       # %bb.0: # %entry
9; CHECK-NEXT:    vgbm %v24, 0
10; CHECK-NEXT:    br %r14
11entry:
12  ret <16 x i8> zeroinitializer
13}
14
15define <16 x i8> @eval1(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
16; CHECK-LABEL: eval1:
17; CHECK:       # %bb.0: # %entry
18; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 1
19; CHECK-NEXT:    br %r14
20entry:
21  %and = and <16 x i8> %src2, %src1
22  %and1 = and <16 x i8> %and, %src3
23  ret <16 x i8> %and1
24}
25
26define <16 x i8> @eval2(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
27; CHECK-LABEL: eval2:
28; CHECK:       # %bb.0: # %entry
29; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 2
30; CHECK-NEXT:    br %r14
31entry:
32  %and = and <16 x i8> %src2, %src1
33  %not = xor <16 x i8> %src3, splat(i8 -1)
34  %and1 = and <16 x i8> %and, %not
35  ret <16 x i8> %and1
36}
37
38define <16 x i8> @eval3(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
39; CHECK-LABEL: eval3:
40; CHECK:       # %bb.0: # %entry
41; CHECK-NEXT:    vn %v24, %v26, %v24
42; CHECK-NEXT:    br %r14
43entry:
44  %and = and <16 x i8> %src2, %src1
45  ret <16 x i8> %and
46}
47
48define <16 x i8> @eval4(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
49; CHECK-LABEL: eval4:
50; CHECK:       # %bb.0: # %entry
51; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 2
52; CHECK-NEXT:    br %r14
53entry:
54  %not = xor <16 x i8> %src2, splat(i8 -1)
55  %and = and <16 x i8> %not, %src1
56  %and1 = and <16 x i8> %and, %src3
57  ret <16 x i8> %and1
58}
59
60define <16 x i8> @eval5(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
61; CHECK-LABEL: eval5:
62; CHECK:       # %bb.0: # %entry
63; CHECK-NEXT:    vn %v24, %v28, %v24
64; CHECK-NEXT:    br %r14
65entry:
66  %or4 = and <16 x i8> %src3, %src1
67  ret <16 x i8> %or4
68}
69
70define <16 x i8> @eval6(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
71; CHECK-LABEL: eval6:
72; CHECK:       # %bb.0: # %entry
73; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 6
74; CHECK-NEXT:    br %r14
75entry:
76  %0 = xor <16 x i8> %src3, %src2
77  %or5 = and <16 x i8> %0, %src1
78  ret <16 x i8> %or5
79}
80
81define <16 x i8> @eval7(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
82; CHECK-LABEL: eval7:
83; CHECK:       # %bb.0: # %entry
84; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 7
85; CHECK-NEXT:    br %r14
86entry:
87  %and118 = or <16 x i8> %src3, %src2
88  %or8 = and <16 x i8> %and118, %src1
89  ret <16 x i8> %or8
90}
91
92define <16 x i8> @eval8(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
93; CHECK-LABEL: eval8:
94; CHECK:       # %bb.0: # %entry
95; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 8
96; CHECK-NEXT:    br %r14
97entry:
98  %0 = or <16 x i8> %src3, %src2
99  %1 = xor <16 x i8> %0, splat(i8 -1)
100  %and2 = and <16 x i8> %1, %src1
101  ret <16 x i8> %and2
102}
103
104define <16 x i8> @eval9(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
105; CHECK-LABEL: eval9:
106; CHECK:       # %bb.0: # %entry
107; CHECK-NEXT:    veval %v24, %v24, %v26, %v28, 9
108; CHECK-NEXT:    br %r14
109entry:
110  %0 = xor <16 x i8> %src2, %src3
111  %1 = xor <16 x i8> %0, splat(i8 -1)
112  %or5 = and <16 x i8> %1, %src1
113  ret <16 x i8> %or5
114}
115
116define <16 x i8> @eval10(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
117; CHECK-LABEL: eval10:
118; CHECK:       # %bb.0: # %entry
119; CHECK-NEXT:    vnc %v24, %v24, %v28
120; CHECK-NEXT:    br %r14
121entry:
122  %not1 = xor <16 x i8> %src3, splat(i8 -1)
123  %or6 = and <16 x i8> %not1, %src1
124  ret <16 x i8> %or6
125}
126
127define <16 x i8> @eval11(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
128; CHECK-LABEL: eval11:
129; CHECK:       # %bb.0: # %entry
130; CHECK-NEXT:    veval %v24, %v24, %v26, %v28, 11
131; CHECK-NEXT:    br %r14
132entry:
133  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
134  %and219 = or <16 x i8> %src3.not, %src2
135  %or9 = and <16 x i8> %and219, %src1
136  ret <16 x i8> %or9
137}
138
139define <16 x i8> @eval12(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
140; CHECK-LABEL: eval12:
141; CHECK:       # %bb.0: # %entry
142; CHECK-NEXT:    vnc %v24, %v24, %v26
143; CHECK-NEXT:    br %r14
144entry:
145  %not = xor <16 x i8> %src2, splat(i8 -1)
146  %and = and <16 x i8> %not, %src1
147  ret <16 x i8> %and
148}
149
150define <16 x i8> @eval13(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
151; CHECK-LABEL: eval13:
152; CHECK:       # %bb.0: # %entry
153; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 11
154; CHECK-NEXT:    br %r14
155entry:
156  %not = xor <16 x i8> %src2, splat(i8 -1)
157  %and19 = or <16 x i8> %not, %src3
158  %or9 = and <16 x i8> %and19, %src1
159  ret <16 x i8> %or9
160}
161
162define <16 x i8> @eval14(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
163; CHECK-LABEL: eval14:
164; CHECK:       # %bb.0: # %entry
165; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 14
166; CHECK-NEXT:    br %r14
167entry:
168  %and20.demorgan = and <16 x i8> %src3, %src2
169  %and20 = xor <16 x i8> %and20.demorgan, splat(i8 -1)
170  %or10 = and <16 x i8> %and20, %src1
171  ret <16 x i8> %or10
172}
173
174define <16 x i8> @eval15(<16 x i8> returned %src1, <16 x i8> %src2, <16 x i8> %src3) {
175; CHECK-LABEL: eval15:
176; CHECK:       # %bb.0: # %entry
177; CHECK-NEXT:    br %r14
178entry:
179  ret <16 x i8> %src1
180}
181
182define <16 x i8> @eval16(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
183; CHECK-LABEL: eval16:
184; CHECK:       # %bb.0: # %entry
185; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 2
186; CHECK-NEXT:    br %r14
187entry:
188  %not = xor <16 x i8> %src1, splat(i8 -1)
189  %and = and <16 x i8> %not, %src2
190  %and1 = and <16 x i8> %and, %src3
191  ret <16 x i8> %and1
192}
193
194define <16 x i8> @eval17(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
195; CHECK-LABEL: eval17:
196; CHECK:       # %bb.0: # %entry
197; CHECK-NEXT:    vn %v24, %v28, %v26
198; CHECK-NEXT:    br %r14
199entry:
200  %or4 = and <16 x i8> %src3, %src2
201  ret <16 x i8> %or4
202}
203
204define <16 x i8> @eval18(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
205; CHECK-LABEL: eval18:
206; CHECK:       # %bb.0: # %entry
207; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 6
208; CHECK-NEXT:    br %r14
209entry:
210  %0 = xor <16 x i8> %src3, %src1
211  %or5 = and <16 x i8> %0, %src2
212  ret <16 x i8> %or5
213}
214
215define <16 x i8> @eval19(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
216; CHECK-LABEL: eval19:
217; CHECK:       # %bb.0: # %entry
218; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 7
219; CHECK-NEXT:    br %r14
220entry:
221  %and118 = or <16 x i8> %src3, %src1
222  %or8 = and <16 x i8> %and118, %src2
223  ret <16 x i8> %or8
224}
225
226define <16 x i8> @eval20(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
227; CHECK-LABEL: eval20:
228; CHECK:       # %bb.0: # %entry
229; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 6
230; CHECK-NEXT:    br %r14
231entry:
232  %0 = xor <16 x i8> %src2, %src1
233  %or5 = and <16 x i8> %0, %src3
234  ret <16 x i8> %or5
235}
236
237define <16 x i8> @eval21(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
238; CHECK-LABEL: eval21:
239; CHECK:       # %bb.0: # %entry
240; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 7
241; CHECK-NEXT:    br %r14
242entry:
243  %or518 = or <16 x i8> %src2, %src1
244  %or8 = and <16 x i8> %or518, %src3
245  ret <16 x i8> %or8
246}
247
248define <16 x i8> @eval22(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
249; CHECK-LABEL: eval22:
250; CHECK:       # %bb.0: # %entry
251; CHECK-NEXT:    vx %v0, %v26, %v24
252; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 2
253; CHECK-NEXT:    veval %v24, %v1, %v0, %v28, 31
254; CHECK-NEXT:    br %r14
255entry:
256  %0 = xor <16 x i8> %src2, %src1
257  %or5 = and <16 x i8> %0, %src3
258  %not7 = xor <16 x i8> %src3, splat(i8 -1)
259  %1 = and <16 x i8> %not7, %src1
260  %and8 = and <16 x i8> %1, %src2
261  %or9 = or <16 x i8> %and8, %or5
262  ret <16 x i8> %or9
263}
264
265define <16 x i8> @eval23(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
266; CHECK-LABEL: eval23:
267; CHECK:       # %bb.0: # %entry
268; CHECK-NEXT:    veval %v0, %v28, %v26, %v24, 6
269; CHECK-NEXT:    veval %v24, %v0, %v26, %v24, 31
270; CHECK-NEXT:    br %r14
271entry:
272  %0 = xor <16 x i8> %src2, %src1
273  %or5 = and <16 x i8> %0, %src3
274  %and6 = and <16 x i8> %src2, %src1
275  %or12 = or <16 x i8> %or5, %and6
276  ret <16 x i8> %or12
277}
278
279define <16 x i8> @eval24(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
280; CHECK-LABEL: eval24:
281; CHECK:       # %bb.0: # %entry
282; CHECK-NEXT:    vo %v1, %v28, %v26
283; CHECK-NEXT:    veval %v0, %v26, %v28, %v24, 2
284; CHECK-NEXT:    veval %v24, %v0, %v24, %v1, 47
285; CHECK-NEXT:    br %r14
286entry:
287  %not = xor <16 x i8> %src1, splat(i8 -1)
288  %and = and <16 x i8> %not, %src2
289  %and1 = and <16 x i8> %and, %src3
290  %0 = or <16 x i8> %src3, %src2
291  %1 = xor <16 x i8> %0, splat(i8 -1)
292  %and5 = and <16 x i8> %1, %src1
293  %or6 = or <16 x i8> %and5, %and1
294  ret <16 x i8> %or6
295}
296
297define <16 x i8> @eval25(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
298; CHECK-LABEL: eval25:
299; CHECK:       # %bb.0: # %entry
300; CHECK-NEXT:    vo %v0, %v28, %v26
301; CHECK-NEXT:    vn %v1, %v28, %v26
302; CHECK-NEXT:    veval %v24, %v1, %v24, %v0, 47
303; CHECK-NEXT:    br %r14
304entry:
305  %0 = or <16 x i8> %src3, %src2
306  %1 = xor <16 x i8> %0, splat(i8 -1)
307  %and5 = and <16 x i8> %1, %src1
308  %2 = and <16 x i8> %src3, %src2
309  %or9 = or <16 x i8> %and5, %2
310  ret <16 x i8> %or9
311}
312
313define <16 x i8> @eval26(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
314; CHECK-LABEL: eval26:
315; CHECK:       # %bb.0: # %entry
316; CHECK-NEXT:    vnc %v0, %v26, %v24
317; CHECK-NEXT:    vsel %v24, %v0, %v24, %v28
318; CHECK-NEXT:    br %r14
319entry:
320  %not = xor <16 x i8> %src1, splat(i8 -1)
321  %and = and <16 x i8> %not, %src2
322  %and1 = and <16 x i8> %and, %src3
323  %not4 = xor <16 x i8> %src3, splat(i8 -1)
324  %0 = and <16 x i8> %not4, %src1
325  %or10 = or <16 x i8> %and1, %0
326  ret <16 x i8> %or10
327}
328
329define <16 x i8> @eval27(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
330; CHECK-LABEL: eval27:
331; CHECK:       # %bb.0: # %entry
332; CHECK-NEXT:    vnc %v0, %v26, %v24
333; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 11
334; CHECK-NEXT:    veval %v24, %v1, %v0, %v28, 31
335; CHECK-NEXT:    br %r14
336entry:
337  %not = xor <16 x i8> %src1, splat(i8 -1)
338  %and = and <16 x i8> %not, %src2
339  %and1 = and <16 x i8> %and, %src3
340  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
341  %and527 = or <16 x i8> %src3.not, %src2
342  %0 = and <16 x i8> %and527, %src1
343  %or13 = or <16 x i8> %0, %and1
344  ret <16 x i8> %or13
345}
346
347define <16 x i8> @eval28(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
348; CHECK-LABEL: eval28:
349; CHECK:       # %bb.0: # %entry
350; CHECK-NEXT:    vnc %v0, %v28, %v24
351; CHECK-NEXT:    vsel %v24, %v0, %v24, %v26
352; CHECK-NEXT:    br %r14
353entry:
354  %not = xor <16 x i8> %src1, splat(i8 -1)
355  %0 = and <16 x i8> %not, %src3
356  %and1 = and <16 x i8> %0, %src2
357  %not2 = xor <16 x i8> %src2, splat(i8 -1)
358  %and3 = and <16 x i8> %not2, %src1
359  %or10 = or <16 x i8> %and1, %and3
360  ret <16 x i8> %or10
361}
362
363define <16 x i8> @eval29(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
364; CHECK-LABEL: eval29:
365; CHECK:       # %bb.0: # %entry
366; CHECK-NEXT:    vsel %v24, %v28, %v24, %v26
367; CHECK-NEXT:    br %r14
368entry:
369  %not2 = xor <16 x i8> %src2, splat(i8 -1)
370  %and3 = and <16 x i8> %not2, %src1
371  %0 = and <16 x i8> %src3, %src2
372  %or13 = or <16 x i8> %0, %and3
373  ret <16 x i8> %or13
374}
375
376define <16 x i8> @eval30(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
377; CHECK-LABEL: eval30:
378; CHECK:       # %bb.0: # %entry
379; CHECK-NEXT:    vn %v1, %v28, %v26
380; CHECK-NEXT:    veval %v0, %v26, %v28, %v24, 2
381; CHECK-NEXT:    veval %v24, %v0, %v24, %v1, 47
382; CHECK-NEXT:    br %r14
383entry:
384  %not = xor <16 x i8> %src1, splat(i8 -1)
385  %0 = and <16 x i8> %not, %src2
386  %and1 = and <16 x i8> %0, %src3
387  %and328.demorgan = and <16 x i8> %src3, %src2
388  %and328 = xor <16 x i8> %and328.demorgan, splat(i8 -1)
389  %1 = and <16 x i8> %and328, %src1
390  %or14 = or <16 x i8> %1, %and1
391  ret <16 x i8> %or14
392}
393
394define <16 x i8> @eval31(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
395; CHECK-LABEL: eval31:
396; CHECK:       # %bb.0: # %entry
397; CHECK-NEXT:    vnc %v0, %v26, %v24
398; CHECK-NEXT:    veval %v24, %v24, %v0, %v28, 31
399; CHECK-NEXT:    br %r14
400entry:
401  %not = xor <16 x i8> %src1, splat(i8 -1)
402  %and = and <16 x i8> %not, %src2
403  %and1 = and <16 x i8> %and, %src3
404  %or17 = or <16 x i8> %and1, %src1
405  ret <16 x i8> %or17
406}
407
408define <16 x i8> @eval32(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
409; CHECK-LABEL: eval32:
410; CHECK:       # %bb.0: # %entry
411; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 8
412; CHECK-NEXT:    br %r14
413entry:
414  %0 = or <16 x i8> %src3, %src1
415  %1 = xor <16 x i8> %0, splat(i8 -1)
416  %and2 = and <16 x i8> %1, %src2
417  ret <16 x i8> %and2
418}
419
420define <16 x i8> @eval33(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
421; CHECK-LABEL: eval33:
422; CHECK:       # %bb.0: # %entry
423; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 9
424; CHECK-NEXT:    br %r14
425entry:
426  %0 = xor <16 x i8> %src1, %src3
427  %1 = xor <16 x i8> %0, splat(i8 -1)
428  %or5 = and <16 x i8> %1, %src2
429  ret <16 x i8> %or5
430}
431
432define <16 x i8> @eval34(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
433; CHECK-LABEL: eval34:
434; CHECK:       # %bb.0: # %entry
435; CHECK-NEXT:    vnc %v24, %v26, %v28
436; CHECK-NEXT:    br %r14
437entry:
438  %not1 = xor <16 x i8> %src3, splat(i8 -1)
439  %or6 = and <16 x i8> %not1, %src2
440  ret <16 x i8> %or6
441}
442
443define <16 x i8> @eval35(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
444; CHECK-LABEL: eval35:
445; CHECK:       # %bb.0: # %entry
446; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 11
447; CHECK-NEXT:    br %r14
448entry:
449  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
450  %and219 = or <16 x i8> %src3.not, %src1
451  %or9 = and <16 x i8> %and219, %src2
452  ret <16 x i8> %or9
453}
454
455define <16 x i8> @eval36(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
456; CHECK-LABEL: eval36:
457; CHECK:       # %bb.0: # %entry
458; CHECK-NEXT:    vo %v0, %v28, %v24
459; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
460; CHECK-NEXT:    veval %v24, %v1, %v26, %v0, 47
461; CHECK-NEXT:    br %r14
462entry:
463  %0 = or <16 x i8> %src3, %src1
464  %1 = xor <16 x i8> %0, splat(i8 -1)
465  %and2 = and <16 x i8> %1, %src2
466  %not3 = xor <16 x i8> %src2, splat(i8 -1)
467  %and4 = and <16 x i8> %not3, %src1
468  %and5 = and <16 x i8> %and4, %src3
469  %or6 = or <16 x i8> %and2, %and5
470  ret <16 x i8> %or6
471}
472
473define <16 x i8> @eval37(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
474; CHECK-LABEL: eval37:
475; CHECK:       # %bb.0: # %entry
476; CHECK-NEXT:    vo %v0, %v28, %v24
477; CHECK-NEXT:    vn %v1, %v28, %v24
478; CHECK-NEXT:    veval %v24, %v1, %v26, %v0, 47
479; CHECK-NEXT:    br %r14
480entry:
481  %0 = or <16 x i8> %src3, %src1
482  %1 = xor <16 x i8> %0, splat(i8 -1)
483  %and2 = and <16 x i8> %1, %src2
484  %2 = and <16 x i8> %src3, %src1
485  %or9 = or <16 x i8> %and2, %2
486  ret <16 x i8> %or9
487}
488
489define <16 x i8> @eval38(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
490; CHECK-LABEL: eval38:
491; CHECK:       # %bb.0: # %entry
492; CHECK-NEXT:    vnc %v0, %v24, %v26
493; CHECK-NEXT:    vsel %v24, %v0, %v26, %v28
494; CHECK-NEXT:    br %r14
495entry:
496  %not1 = xor <16 x i8> %src3, splat(i8 -1)
497  %not3 = xor <16 x i8> %src2, splat(i8 -1)
498  %and4 = and <16 x i8> %not3, %src1
499  %and5 = and <16 x i8> %and4, %src3
500  %0 = and <16 x i8> %not1, %src2
501  %or10 = or <16 x i8> %0, %and5
502  ret <16 x i8> %or10
503}
504
505define <16 x i8> @eval39(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
506; CHECK-LABEL: eval39:
507; CHECK:       # %bb.0: # %entry
508; CHECK-NEXT:    vnc %v0, %v24, %v26
509; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 11
510; CHECK-NEXT:    veval %v24, %v1, %v0, %v28, 31
511; CHECK-NEXT:    br %r14
512entry:
513  %not3 = xor <16 x i8> %src2, splat(i8 -1)
514  %and4 = and <16 x i8> %not3, %src1
515  %and5 = and <16 x i8> %and4, %src3
516  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
517  %and227 = or <16 x i8> %src3.not, %src1
518  %0 = and <16 x i8> %and227, %src2
519  %or13 = or <16 x i8> %0, %and5
520  ret <16 x i8> %or13
521}
522
523define <16 x i8> @eval40(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
524; CHECK-LABEL: eval40:
525; CHECK:       # %bb.0: # %entry
526; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 40
527; CHECK-NEXT:    br %r14
528entry:
529  %0 = xor <16 x i8> %src2, %src1
530  %1 = xor <16 x i8> %src3, splat(i8 -1)
531  %or7 = and <16 x i8> %0, %1
532  ret <16 x i8> %or7
533}
534
535define <16 x i8> @eval41(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
536; CHECK-LABEL: eval41:
537; CHECK:       # %bb.0: # %entry
538; CHECK-NEXT:    vx %v0, %v26, %v24
539; CHECK-NEXT:    vn %v1, %v26, %v24
540; CHECK-NEXT:    vsel %v24, %v1, %v0, %v28
541; CHECK-NEXT:    br %r14
542entry:
543  %0 = xor <16 x i8> %src2, %src1
544  %1 = xor <16 x i8> %src3, splat(i8 -1)
545  %or7 = and <16 x i8> %0, %1
546  %and8 = and <16 x i8> %src2, %src1
547  %and9 = and <16 x i8> %and8, %src3
548  %or10 = or <16 x i8> %or7, %and9
549  ret <16 x i8> %or10
550}
551
552define <16 x i8> @eval42(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
553; CHECK-LABEL: eval42:
554; CHECK:       # %bb.0: # %entry
555; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 42
556; CHECK-NEXT:    br %r14
557entry:
558  %not1 = xor <16 x i8> %src3, splat(i8 -1)
559  %and1021 = or <16 x i8> %src2, %src1
560  %or11 = and <16 x i8> %and1021, %not1
561  ret <16 x i8> %or11
562}
563
564define <16 x i8> @eval43(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
565; CHECK-LABEL: eval43:
566; CHECK:       # %bb.0: # %entry
567; CHECK-NEXT:    vx %v0, %v26, %v24
568; CHECK-NEXT:    vn %v1, %v26, %v24
569; CHECK-NEXT:    veval %v24, %v1, %v0, %v28, 47
570; CHECK-NEXT:    br %r14
571entry:
572  %0 = xor <16 x i8> %src2, %src1
573  %1 = xor <16 x i8> %src3, splat(i8 -1)
574  %or7 = and <16 x i8> %0, %1
575  %and8 = and <16 x i8> %src2, %src1
576  %or14 = or <16 x i8> %or7, %and8
577  ret <16 x i8> %or14
578}
579
580define <16 x i8> @eval44(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
581; CHECK-LABEL: eval44:
582; CHECK:       # %bb.0: # %entry
583; CHECK-NEXT:    vno %v0, %v28, %v24
584; CHECK-NEXT:    vsel %v24, %v0, %v24, %v26
585; CHECK-NEXT:    br %r14
586entry:
587  %0 = or <16 x i8> %src3, %src1
588  %1 = xor <16 x i8> %0, splat(i8 -1)
589  %and2 = and <16 x i8> %1, %src2
590  %not3 = xor <16 x i8> %src2, splat(i8 -1)
591  %and4 = and <16 x i8> %not3, %src1
592  %or11 = or <16 x i8> %and2, %and4
593  ret <16 x i8> %or11
594}
595
596define <16 x i8> @eval45(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
597; CHECK-LABEL: eval45:
598; CHECK:       # %bb.0: # %entry
599; CHECK-NEXT:    vo %v0, %v28, %v24
600; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
601; CHECK-NEXT:    veval %v1, %v1, %v24, %v26, 47
602; CHECK-NEXT:    veval %v24, %v1, %v26, %v0, 47
603; CHECK-NEXT:    br %r14
604entry:
605  %0 = or <16 x i8> %src3, %src1
606  %1 = xor <16 x i8> %0, splat(i8 -1)
607  %and2 = and <16 x i8> %1, %src2
608  %not3 = xor <16 x i8> %src2, splat(i8 -1)
609  %and4 = and <16 x i8> %not3, %src1
610  %and12 = and <16 x i8> %src2, %src1
611  %and13 = and <16 x i8> %and12, %src3
612  %or11 = or <16 x i8> %and13, %and4
613  %or14 = or <16 x i8> %or11, %and2
614  ret <16 x i8> %or14
615}
616
617define <16 x i8> @eval46(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
618; CHECK-LABEL: eval46:
619; CHECK:       # %bb.0: # %entry
620; CHECK-NEXT:    vn %v1, %v28, %v26
621; CHECK-NEXT:    veval %v0, %v26, %v28, %v24, 8
622; CHECK-NEXT:    veval %v24, %v0, %v24, %v1, 47
623; CHECK-NEXT:    br %r14
624entry:
625  %0 = or <16 x i8> %src3, %src1
626  %1 = xor <16 x i8> %0, splat(i8 -1)
627  %and2 = and <16 x i8> %1, %src2
628  %and429.demorgan = and <16 x i8> %src3, %src2
629  %and429 = xor <16 x i8> %and429.demorgan, splat(i8 -1)
630  %2 = and <16 x i8> %and429, %src1
631  %or15 = or <16 x i8> %and2, %2
632  ret <16 x i8> %or15
633}
634
635define <16 x i8> @eval47(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
636; CHECK-LABEL: eval47:
637; CHECK:       # %bb.0: # %entry
638; CHECK-NEXT:    vo %v0, %v28, %v24
639; CHECK-NEXT:    veval %v24, %v24, %v26, %v0, 47
640; CHECK-NEXT:    br %r14
641entry:
642  %0 = or <16 x i8> %src3, %src1
643  %1 = xor <16 x i8> %0, splat(i8 -1)
644  %and2 = and <16 x i8> %1, %src2
645  %or18 = or <16 x i8> %and2, %src1
646  ret <16 x i8> %or18
647}
648
649define <16 x i8> @eval48(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
650; CHECK-LABEL: eval48:
651; CHECK:       # %bb.0: # %entry
652; CHECK-NEXT:    vnc %v24, %v26, %v24
653; CHECK-NEXT:    br %r14
654entry:
655  %not = xor <16 x i8> %src1, splat(i8 -1)
656  %and = and <16 x i8> %not, %src2
657  ret <16 x i8> %and
658}
659
660define <16 x i8> @eval49(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
661; CHECK-LABEL: eval49:
662; CHECK:       # %bb.0: # %entry
663; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 11
664; CHECK-NEXT:    br %r14
665entry:
666  %not = xor <16 x i8> %src1, splat(i8 -1)
667  %and819 = or <16 x i8> %not, %src3
668  %or9 = and <16 x i8> %and819, %src2
669  ret <16 x i8> %or9
670}
671
672define <16 x i8> @eval50(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
673; CHECK-LABEL: eval50:
674; CHECK:       # %bb.0: # %entry
675; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 14
676; CHECK-NEXT:    br %r14
677entry:
678  %and920.demorgan = and <16 x i8> %src3, %src1
679  %and920 = xor <16 x i8> %and920.demorgan, splat(i8 -1)
680  %or10 = and <16 x i8> %and920, %src2
681  ret <16 x i8> %or10
682}
683
684define <16 x i8> @eval51(<16 x i8> %src1, <16 x i8> returned %src2, <16 x i8> %src3) {
685; CHECK-LABEL: eval51:
686; CHECK:       # %bb.0: # %entry
687; CHECK-NEXT:    vlr %v24, %v26
688; CHECK-NEXT:    br %r14
689entry:
690  ret <16 x i8> %src2
691}
692
693define <16 x i8> @eval52(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
694; CHECK-LABEL: eval52:
695; CHECK:       # %bb.0: # %entry
696; CHECK-NEXT:    vnc %v0, %v28, %v26
697; CHECK-NEXT:    vsel %v24, %v0, %v26, %v24
698; CHECK-NEXT:    br %r14
699entry:
700  %not = xor <16 x i8> %src1, splat(i8 -1)
701  %and = and <16 x i8> %not, %src2
702  %not7 = xor <16 x i8> %src2, splat(i8 -1)
703  %0 = and <16 x i8> %not7, %src3
704  %and9 = and <16 x i8> %0, %src1
705  %or10 = or <16 x i8> %and9, %and
706  ret <16 x i8> %or10
707}
708
709define <16 x i8> @eval53(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
710; CHECK-LABEL: eval53:
711; CHECK:       # %bb.0: # %entry
712; CHECK-NEXT:    vsel %v24, %v28, %v26, %v24
713; CHECK-NEXT:    br %r14
714entry:
715  %not = xor <16 x i8> %src1, splat(i8 -1)
716  %and = and <16 x i8> %not, %src2
717  %0 = and <16 x i8> %src3, %src1
718  %or13 = or <16 x i8> %0, %and
719  ret <16 x i8> %or13
720}
721
722define <16 x i8> @eval54(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
723; CHECK-LABEL: eval54:
724; CHECK:       # %bb.0: # %entry
725; CHECK-NEXT:    vn %v1, %v28, %v24
726; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 2
727; CHECK-NEXT:    veval %v24, %v0, %v26, %v1, 47
728; CHECK-NEXT:    br %r14
729entry:
730  %not7 = xor <16 x i8> %src2, splat(i8 -1)
731  %and8 = and <16 x i8> %not7, %src1
732  %and9 = and <16 x i8> %and8, %src3
733  %and28.demorgan = and <16 x i8> %src3, %src1
734  %and28 = xor <16 x i8> %and28.demorgan, splat(i8 -1)
735  %0 = and <16 x i8> %and28, %src2
736  %or14 = or <16 x i8> %and9, %0
737  ret <16 x i8> %or14
738}
739
740define <16 x i8> @eval55(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
741; CHECK-LABEL: eval55:
742; CHECK:       # %bb.0: # %entry
743; CHECK-NEXT:    vnc %v0, %v24, %v26
744; CHECK-NEXT:    veval %v24, %v26, %v0, %v28, 31
745; CHECK-NEXT:    br %r14
746entry:
747  %not7 = xor <16 x i8> %src2, splat(i8 -1)
748  %and8 = and <16 x i8> %not7, %src1
749  %and9 = and <16 x i8> %and8, %src3
750  %or17 = or <16 x i8> %and9, %src2
751  ret <16 x i8> %or17
752}
753
754define <16 x i8> @eval56(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
755; CHECK-LABEL: eval56:
756; CHECK:       # %bb.0: # %entry
757; CHECK-NEXT:    vno %v0, %v28, %v26
758; CHECK-NEXT:    vsel %v24, %v0, %v26, %v24
759; CHECK-NEXT:    br %r14
760entry:
761  %not = xor <16 x i8> %src1, splat(i8 -1)
762  %and = and <16 x i8> %not, %src2
763  %0 = or <16 x i8> %src3, %src2
764  %1 = xor <16 x i8> %0, splat(i8 -1)
765  %and10 = and <16 x i8> %1, %src1
766  %or11 = or <16 x i8> %and10, %and
767  ret <16 x i8> %or11
768}
769
770define <16 x i8> @eval57(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
771; CHECK-LABEL: eval57:
772; CHECK:       # %bb.0: # %entry
773; CHECK-NEXT:    vo %v0, %v28, %v26
774; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
775; CHECK-NEXT:    veval %v1, %v1, %v26, %v24, 47
776; CHECK-NEXT:    veval %v24, %v1, %v24, %v0, 47
777; CHECK-NEXT:    br %r14
778entry:
779  %not = xor <16 x i8> %src1, splat(i8 -1)
780  %and = and <16 x i8> %not, %src2
781  %0 = or <16 x i8> %src3, %src2
782  %1 = xor <16 x i8> %0, splat(i8 -1)
783  %and10 = and <16 x i8> %1, %src1
784  %and12 = and <16 x i8> %src2, %src1
785  %and13 = and <16 x i8> %and12, %src3
786  %or11 = or <16 x i8> %and13, %and
787  %or14 = or <16 x i8> %or11, %and10
788  ret <16 x i8> %or14
789}
790
791define <16 x i8> @eval58(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
792; CHECK-LABEL: eval58:
793; CHECK:       # %bb.0: # %entry
794; CHECK-NEXT:    vno %v0, %v28, %v28
795; CHECK-NEXT:    vsel %v24, %v0, %v26, %v24
796; CHECK-NEXT:    br %r14
797entry:
798  %not = xor <16 x i8> %src1, splat(i8 -1)
799  %and = and <16 x i8> %not, %src2
800  %not1 = xor <16 x i8> %src3, splat(i8 -1)
801  %0 = and <16 x i8> %not1, %src1
802  %or15 = or <16 x i8> %0, %and
803  ret <16 x i8> %or15
804}
805
806define <16 x i8> @eval59(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
807; CHECK-LABEL: eval59:
808; CHECK:       # %bb.0: # %entry
809; CHECK-NEXT:    voc %v0, %v26, %v28
810; CHECK-NEXT:    vsel %v24, %v0, %v26, %v24
811; CHECK-NEXT:    br %r14
812entry:
813  %not = xor <16 x i8> %src1, splat(i8 -1)
814  %and = and <16 x i8> %not, %src2
815  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
816  %and1036 = or <16 x i8> %src3.not, %src2
817  %0 = and <16 x i8> %and1036, %src1
818  %or18 = or <16 x i8> %0, %and
819  ret <16 x i8> %or18
820}
821
822define <16 x i8> @eval60(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
823; CHECK-LABEL: eval60:
824; CHECK:       # %bb.0: # %entry
825; CHECK-NEXT:    vx %v24, %v26, %v24
826; CHECK-NEXT:    br %r14
827entry:
828  %or15 = xor <16 x i8> %src2, %src1
829  ret <16 x i8> %or15
830}
831
832define <16 x i8> @eval61(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
833; CHECK-LABEL: eval61:
834; CHECK:       # %bb.0: # %entry
835; CHECK-NEXT:    vn %v0, %v24, %v28
836; CHECK-NEXT:    veval %v24, %v26, %v24, %v0, 61
837; CHECK-NEXT:    br %r14
838entry:
839  %or15 = xor <16 x i8> %src2, %src1
840  %0 = and <16 x i8> %src1, %src3
841  %and17 = and <16 x i8> %0, %src2
842  %or18 = or <16 x i8> %and17, %or15
843  ret <16 x i8> %or18
844}
845
846define <16 x i8> @eval62(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
847; CHECK-LABEL: eval62:
848; CHECK:       # %bb.0: # %entry
849; CHECK-NEXT:    vnc %v0, %v24, %v28
850; CHECK-NEXT:    veval %v24, %v26, %v24, %v0, 61
851; CHECK-NEXT:    br %r14
852entry:
853  %not1 = xor <16 x i8> %src3, splat(i8 -1)
854  %or15 = xor <16 x i8> %src2, %src1
855  %0 = and <16 x i8> %not1, %src1
856  %and18 = and <16 x i8> %0, %src2
857  %or19 = or <16 x i8> %and18, %or15
858  ret <16 x i8> %or19
859}
860
861define <16 x i8> @eval63(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
862; CHECK-LABEL: eval63:
863; CHECK:       # %bb.0: # %entry
864; CHECK-NEXT:    vo %v24, %v26, %v24
865; CHECK-NEXT:    br %r14
866entry:
867  %or22 = or <16 x i8> %src2, %src1
868  ret <16 x i8> %or22
869}
870
871define <16 x i8> @eval64(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
872; CHECK-LABEL: eval64:
873; CHECK:       # %bb.0: # %entry
874; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 8
875; CHECK-NEXT:    br %r14
876entry:
877  %and.demorgan = or <16 x i8> %src2, %src1
878  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
879  %and2 = and <16 x i8> %and, %src3
880  ret <16 x i8> %and2
881}
882
883define <16 x i8> @eval65(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
884; CHECK-LABEL: eval65:
885; CHECK:       # %bb.0: # %entry
886; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 9
887; CHECK-NEXT:    br %r14
888entry:
889  %0 = xor <16 x i8> %src1, %src2
890  %1 = xor <16 x i8> %0, splat(i8 -1)
891  %or5 = and <16 x i8> %1, %src3
892  ret <16 x i8> %or5
893}
894
895define <16 x i8> @eval66(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
896; CHECK-LABEL: eval66:
897; CHECK:       # %bb.0: # %entry
898; CHECK-NEXT:    vo %v0, %v26, %v24
899; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 2
900; CHECK-NEXT:    veval %v24, %v1, %v28, %v0, 47
901; CHECK-NEXT:    br %r14
902entry:
903  %and.demorgan = or <16 x i8> %src2, %src1
904  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
905  %and2 = and <16 x i8> %and, %src3
906  %not4 = xor <16 x i8> %src3, splat(i8 -1)
907  %0 = and <16 x i8> %not4, %src1
908  %and5 = and <16 x i8> %0, %src2
909  %or6 = or <16 x i8> %and5, %and2
910  ret <16 x i8> %or6
911}
912
913define <16 x i8> @eval67(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
914; CHECK-LABEL: eval67:
915; CHECK:       # %bb.0: # %entry
916; CHECK-NEXT:    vo %v0, %v26, %v24
917; CHECK-NEXT:    vn %v1, %v26, %v24
918; CHECK-NEXT:    veval %v24, %v1, %v28, %v0, 47
919; CHECK-NEXT:    br %r14
920entry:
921  %and.demorgan = or <16 x i8> %src2, %src1
922  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
923  %and2 = and <16 x i8> %and, %src3
924  %and3 = and <16 x i8> %src2, %src1
925  %or9 = or <16 x i8> %and2, %and3
926  ret <16 x i8> %or9
927}
928
929define <16 x i8> @eval68(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
930; CHECK-LABEL: eval68:
931; CHECK:       # %bb.0: # %entry
932; CHECK-NEXT:    vnc %v24, %v28, %v26
933; CHECK-NEXT:    br %r14
934entry:
935  %not1 = xor <16 x i8> %src2, splat(i8 -1)
936  %or6 = and <16 x i8> %not1, %src3
937  ret <16 x i8> %or6
938}
939
940define <16 x i8> @eval69(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
941; CHECK-LABEL: eval69:
942; CHECK:       # %bb.0: # %entry
943; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 11
944; CHECK-NEXT:    br %r14
945entry:
946  %not1 = xor <16 x i8> %src2, splat(i8 -1)
947  %or620 = or <16 x i8> %not1, %src1
948  %or9 = and <16 x i8> %or620, %src3
949  ret <16 x i8> %or9
950}
951
952define <16 x i8> @eval70(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
953; CHECK-LABEL: eval70:
954; CHECK:       # %bb.0: # %entry
955; CHECK-NEXT:    vnc %v0, %v24, %v28
956; CHECK-NEXT:    vsel %v24, %v0, %v28, %v26
957; CHECK-NEXT:    br %r14
958entry:
959  %not1 = xor <16 x i8> %src2, splat(i8 -1)
960  %or6 = and <16 x i8> %not1, %src3
961  %not8 = xor <16 x i8> %src3, splat(i8 -1)
962  %0 = and <16 x i8> %not8, %src1
963  %and9 = and <16 x i8> %0, %src2
964  %or10 = or <16 x i8> %and9, %or6
965  ret <16 x i8> %or10
966}
967
968define <16 x i8> @eval71(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
969; CHECK-LABEL: eval71:
970; CHECK:       # %bb.0: # %entry
971; CHECK-NEXT:    vsel %v24, %v24, %v28, %v26
972; CHECK-NEXT:    br %r14
973entry:
974  %not1 = xor <16 x i8> %src2, splat(i8 -1)
975  %or6 = and <16 x i8> %not1, %src3
976  %and7 = and <16 x i8> %src2, %src1
977  %or13 = or <16 x i8> %or6, %and7
978  ret <16 x i8> %or13
979}
980
981define <16 x i8> @eval72(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
982; CHECK-LABEL: eval72:
983; CHECK:       # %bb.0: # %entry
984; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 40
985; CHECK-NEXT:    br %r14
986entry:
987  %0 = xor <16 x i8> %src3, %src1
988  %1 = xor <16 x i8> %src2, splat(i8 -1)
989  %or7 = and <16 x i8> %0, %1
990  ret <16 x i8> %or7
991}
992
993define <16 x i8> @eval73(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
994; CHECK-LABEL: eval73:
995; CHECK:       # %bb.0: # %entry
996; CHECK-NEXT:    vx %v0, %v28, %v24
997; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
998; CHECK-NEXT:    veval %v24, %v1, %v0, %v26, 47
999; CHECK-NEXT:    br %r14
1000entry:
1001  %0 = xor <16 x i8> %src3, %src1
1002  %1 = xor <16 x i8> %src2, splat(i8 -1)
1003  %or7 = and <16 x i8> %0, %1
1004  %and8 = and <16 x i8> %src2, %src1
1005  %and9 = and <16 x i8> %and8, %src3
1006  %or10 = or <16 x i8> %or7, %and9
1007  ret <16 x i8> %or10
1008}
1009
1010define <16 x i8> @eval74(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1011; CHECK-LABEL: eval74:
1012; CHECK:       # %bb.0: # %entry
1013; CHECK-NEXT:    vx %v0, %v28, %v24
1014; CHECK-NEXT:    vnc %v1, %v24, %v28
1015; CHECK-NEXT:    vsel %v24, %v1, %v0, %v26
1016; CHECK-NEXT:    br %r14
1017entry:
1018  %not5 = xor <16 x i8> %src3, splat(i8 -1)
1019  %0 = xor <16 x i8> %src3, %src1
1020  %1 = xor <16 x i8> %src2, splat(i8 -1)
1021  %or7 = and <16 x i8> %0, %1
1022  %2 = and <16 x i8> %not5, %src1
1023  %and10 = and <16 x i8> %2, %src2
1024  %or11 = or <16 x i8> %or7, %and10
1025  ret <16 x i8> %or11
1026}
1027
1028define <16 x i8> @eval75(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1029; CHECK-LABEL: eval75:
1030; CHECK:       # %bb.0: # %entry
1031; CHECK-NEXT:    vx %v0, %v28, %v24
1032; CHECK-NEXT:    vsel %v24, %v24, %v0, %v26
1033; CHECK-NEXT:    br %r14
1034entry:
1035  %0 = xor <16 x i8> %src3, %src1
1036  %1 = xor <16 x i8> %src2, splat(i8 -1)
1037  %or7 = and <16 x i8> %0, %1
1038  %and8 = and <16 x i8> %src2, %src1
1039  %or14 = or <16 x i8> %or7, %and8
1040  ret <16 x i8> %or14
1041}
1042
1043define <16 x i8> @eval76(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1044; CHECK-LABEL: eval76:
1045; CHECK:       # %bb.0: # %entry
1046; CHECK-NEXT:    veval %v0, %v28, %v26, %v24, 8
1047; CHECK-NEXT:    veval %v24, %v0, %v24, %v26, 47
1048; CHECK-NEXT:    br %r14
1049entry:
1050  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1051  %0 = or <16 x i8> %src2, %src1
1052  %1 = xor <16 x i8> %0, splat(i8 -1)
1053  %and2 = and <16 x i8> %1, %src3
1054  %and4 = and <16 x i8> %not1, %src1
1055  %or11 = or <16 x i8> %and2, %and4
1056  ret <16 x i8> %or11
1057}
1058
1059define <16 x i8> @eval77(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1060; CHECK-LABEL: eval77:
1061; CHECK:       # %bb.0: # %entry
1062; CHECK-NEXT:    vgbm %v0, 65535
1063; CHECK-NEXT:    vn %v1, %v26, %v24
1064; CHECK-NEXT:    veval %v0, %v24, %v0, %v26, 40
1065; CHECK-NEXT:    veval %v0, %v28, %v0, %v1, 7
1066; CHECK-NEXT:    veval %v24, %v0, %v24, %v26, 47
1067; CHECK-NEXT:    br %r14
1068entry:
1069  %not = xor <16 x i8> %src1, splat(i8 -1)
1070  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1071  %and = and <16 x i8> %not1, %not
1072  %and4 = and <16 x i8> %not1, %src1
1073  %and12 = and <16 x i8> %src2, %src1
1074  %and228 = or <16 x i8> %and, %and12
1075  %0 = and <16 x i8> %and228, %src3
1076  %or14 = or <16 x i8> %0, %and4
1077  ret <16 x i8> %or14
1078}
1079
1080define <16 x i8> @eval78(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1081; CHECK-LABEL: eval78:
1082; CHECK:       # %bb.0: # %entry
1083; CHECK-NEXT:    vgbm %v0, 65535
1084; CHECK-NEXT:    vno %v1, %v28, %v28
1085; CHECK-NEXT:    veval %v0, %v24, %v0, %v26, 40
1086; CHECK-NEXT:    veval %v1, %v24, %v1, %v26, 11
1087; CHECK-NEXT:    veval %v24, %v1, %v0, %v28, 31
1088; CHECK-NEXT:    br %r14
1089entry:
1090  %not = xor <16 x i8> %src1, splat(i8 -1)
1091  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1092  %and = and <16 x i8> %not1, %not
1093  %and2 = and <16 x i8> %and, %src3
1094  %not5 = xor <16 x i8> %src3, splat(i8 -1)
1095  %and429 = or <16 x i8> %not5, %not1
1096  %0 = and <16 x i8> %and429, %src1
1097  %or15 = or <16 x i8> %0, %and2
1098  ret <16 x i8> %or15
1099}
1100
1101define <16 x i8> @eval79(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1102; CHECK-LABEL: eval79:
1103; CHECK:       # %bb.0: # %entry
1104; CHECK-NEXT:    vo %v0, %v26, %v24
1105; CHECK-NEXT:    veval %v24, %v24, %v28, %v0, 47
1106; CHECK-NEXT:    br %r14
1107entry:
1108  %and.demorgan = or <16 x i8> %src2, %src1
1109  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
1110  %and2 = and <16 x i8> %and, %src3
1111  %or18 = or <16 x i8> %and2, %src1
1112  ret <16 x i8> %or18
1113}
1114
1115define <16 x i8> @eval80(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1116; CHECK-LABEL: eval80:
1117; CHECK:       # %bb.0: # %entry
1118; CHECK-NEXT:    vnc %v24, %v28, %v24
1119; CHECK-NEXT:    br %r14
1120entry:
1121  %not = xor <16 x i8> %src1, splat(i8 -1)
1122  %or6 = and <16 x i8> %not, %src3
1123  ret <16 x i8> %or6
1124}
1125
1126define <16 x i8> @eval81(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1127; CHECK-LABEL: eval81:
1128; CHECK:       # %bb.0: # %entry
1129; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 11
1130; CHECK-NEXT:    br %r14
1131entry:
1132  %not = xor <16 x i8> %src1, splat(i8 -1)
1133  %or620 = or <16 x i8> %not, %src2
1134  %or9 = and <16 x i8> %or620, %src3
1135  ret <16 x i8> %or9
1136}
1137
1138define <16 x i8> @eval82(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1139; CHECK-LABEL: eval82:
1140; CHECK:       # %bb.0: # %entry
1141; CHECK-NEXT:    vnc %v0, %v26, %v28
1142; CHECK-NEXT:    vsel %v24, %v0, %v28, %v24
1143; CHECK-NEXT:    br %r14
1144entry:
1145  %not = xor <16 x i8> %src1, splat(i8 -1)
1146  %or6 = and <16 x i8> %not, %src3
1147  %not8 = xor <16 x i8> %src3, splat(i8 -1)
1148  %0 = and <16 x i8> %not8, %src2
1149  %and9 = and <16 x i8> %0, %src1
1150  %or10 = or <16 x i8> %and9, %or6
1151  ret <16 x i8> %or10
1152}
1153
1154define <16 x i8> @eval83(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1155; CHECK-LABEL: eval83:
1156; CHECK:       # %bb.0: # %entry
1157; CHECK-NEXT:    vsel %v24, %v26, %v28, %v24
1158; CHECK-NEXT:    br %r14
1159entry:
1160  %not = xor <16 x i8> %src1, splat(i8 -1)
1161  %or6 = and <16 x i8> %not, %src3
1162  %and7 = and <16 x i8> %src2, %src1
1163  %or13 = or <16 x i8> %or6, %and7
1164  ret <16 x i8> %or13
1165}
1166
1167define <16 x i8> @eval84(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1168; CHECK-LABEL: eval84:
1169; CHECK:       # %bb.0: # %entry
1170; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 14
1171; CHECK-NEXT:    br %r14
1172entry:
1173  %or621.demorgan = and <16 x i8> %src2, %src1
1174  %or621 = xor <16 x i8> %or621.demorgan, splat(i8 -1)
1175  %or10 = and <16 x i8> %or621, %src3
1176  ret <16 x i8> %or10
1177}
1178
1179define <16 x i8> @eval85(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> returned %src3) {
1180; CHECK-LABEL: eval85:
1181; CHECK:       # %bb.0: # %entry
1182; CHECK-NEXT:    vlr %v24, %v28
1183; CHECK-NEXT:    br %r14
1184entry:
1185  ret <16 x i8> %src3
1186}
1187
1188define <16 x i8> @eval86(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1189; CHECK-LABEL: eval86:
1190; CHECK:       # %bb.0: # %entry
1191; CHECK-NEXT:    vn %v0, %v26, %v24
1192; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 2
1193; CHECK-NEXT:    veval %v24, %v1, %v28, %v0, 47
1194; CHECK-NEXT:    br %r14
1195entry:
1196  %or629.demorgan = and <16 x i8> %src2, %src1
1197  %or629 = xor <16 x i8> %or629.demorgan, splat(i8 -1)
1198  %or10 = and <16 x i8> %or629, %src3
1199  %not12 = xor <16 x i8> %src3, splat(i8 -1)
1200  %0 = and <16 x i8> %not12, %src1
1201  %and13 = and <16 x i8> %0, %src2
1202  %or14 = or <16 x i8> %and13, %or10
1203  ret <16 x i8> %or14
1204}
1205
1206define <16 x i8> @eval87(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1207; CHECK-LABEL: eval87:
1208; CHECK:       # %bb.0: # %entry
1209; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 31
1210; CHECK-NEXT:    br %r14
1211entry:
1212  %and11 = and <16 x i8> %src2, %src1
1213  %or17 = or <16 x i8> %and11, %src3
1214  ret <16 x i8> %or17
1215}
1216
1217define <16 x i8> @eval88(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1218; CHECK-LABEL: eval88:
1219; CHECK:       # %bb.0: # %entry
1220; CHECK-NEXT:    vno %v0, %v28, %v26
1221; CHECK-NEXT:    vsel %v24, %v0, %v28, %v24
1222; CHECK-NEXT:    br %r14
1223entry:
1224  %not = xor <16 x i8> %src1, splat(i8 -1)
1225  %or6 = and <16 x i8> %not, %src3
1226  %0 = or <16 x i8> %src3, %src2
1227  %1 = xor <16 x i8> %0, splat(i8 -1)
1228  %and10 = and <16 x i8> %1, %src1
1229  %or11 = or <16 x i8> %and10, %or6
1230  ret <16 x i8> %or11
1231}
1232
1233define <16 x i8> @eval89(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1234; CHECK-LABEL: eval89:
1235; CHECK:       # %bb.0: # %entry
1236; CHECK-NEXT:    vo %v0, %v28, %v26
1237; CHECK-NEXT:    veval %v1, %v28, %v26, %v24, 11
1238; CHECK-NEXT:    veval %v24, %v1, %v24, %v0, 47
1239; CHECK-NEXT:    br %r14
1240entry:
1241  %not = xor <16 x i8> %src1, splat(i8 -1)
1242  %0 = or <16 x i8> %src3, %src2
1243  %1 = xor <16 x i8> %0, splat(i8 -1)
1244  %and10 = and <16 x i8> %1, %src1
1245  %or629 = or <16 x i8> %not, %src2
1246  %2 = and <16 x i8> %or629, %src3
1247  %or14 = or <16 x i8> %and10, %2
1248  ret <16 x i8> %or14
1249}
1250
1251define <16 x i8> @eval90(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1252; CHECK-LABEL: eval90:
1253; CHECK:       # %bb.0: # %entry
1254; CHECK-NEXT:    vx %v24, %v28, %v24
1255; CHECK-NEXT:    br %r14
1256entry:
1257  %or15 = xor <16 x i8> %src3, %src1
1258  ret <16 x i8> %or15
1259}
1260
1261define <16 x i8> @eval91(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1262; CHECK-LABEL: eval91:
1263; CHECK:       # %bb.0: # %entry
1264; CHECK-NEXT:    voc %v0, %v26, %v28
1265; CHECK-NEXT:    vsel %v24, %v0, %v28, %v24
1266; CHECK-NEXT:    br %r14
1267entry:
1268  %not = xor <16 x i8> %src1, splat(i8 -1)
1269  %or6 = and <16 x i8> %not, %src3
1270  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
1271  %and1037 = or <16 x i8> %src3.not, %src2
1272  %0 = and <16 x i8> %and1037, %src1
1273  %or18 = or <16 x i8> %0, %or6
1274  ret <16 x i8> %or18
1275}
1276
1277define <16 x i8> @eval92(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1278; CHECK-LABEL: eval92:
1279; CHECK:       # %bb.0: # %entry
1280; CHECK-NEXT:    vno %v0, %v26, %v26
1281; CHECK-NEXT:    vsel %v24, %v0, %v28, %v24
1282; CHECK-NEXT:    br %r14
1283entry:
1284  %not = xor <16 x i8> %src1, splat(i8 -1)
1285  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1286  %or6 = and <16 x i8> %not, %src3
1287  %and8 = and <16 x i8> %not1, %src1
1288  %or15 = or <16 x i8> %or6, %and8
1289  ret <16 x i8> %or15
1290}
1291
1292define <16 x i8> @eval93(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1293; CHECK-LABEL: eval93:
1294; CHECK:       # %bb.0: # %entry
1295; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 47
1296; CHECK-NEXT:    br %r14
1297entry:
1298  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1299  %and8 = and <16 x i8> %not1, %src1
1300  %or18 = or <16 x i8> %and8, %src3
1301  ret <16 x i8> %or18
1302}
1303
1304define <16 x i8> @eval94(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1305; CHECK-LABEL: eval94:
1306; CHECK:       # %bb.0: # %entry
1307; CHECK-NEXT:    vnn %v0, %v28, %v26
1308; CHECK-NEXT:    vsel %v24, %v0, %v28, %v24
1309; CHECK-NEXT:    br %r14
1310entry:
1311  %not = xor <16 x i8> %src1, splat(i8 -1)
1312  %or6 = and <16 x i8> %not, %src3
1313  %and838.demorgan = and <16 x i8> %src3, %src2
1314  %and838 = xor <16 x i8> %and838.demorgan, splat(i8 -1)
1315  %0 = and <16 x i8> %and838, %src1
1316  %or19 = or <16 x i8> %0, %or6
1317  ret <16 x i8> %or19
1318}
1319
1320define <16 x i8> @eval95(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1321; CHECK-LABEL: eval95:
1322; CHECK:       # %bb.0: # %entry
1323; CHECK-NEXT:    vo %v24, %v28, %v24
1324; CHECK-NEXT:    br %r14
1325entry:
1326  %or22 = or <16 x i8> %src3, %src1
1327  ret <16 x i8> %or22
1328}
1329
1330define <16 x i8> @eval96(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1331; CHECK-LABEL: eval96:
1332; CHECK:       # %bb.0: # %entry
1333; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 40
1334; CHECK-NEXT:    br %r14
1335entry:
1336  %0 = xor <16 x i8> %src3, %src2
1337  %1 = xor <16 x i8> %src1, splat(i8 -1)
1338  %or7 = and <16 x i8> %0, %1
1339  ret <16 x i8> %or7
1340}
1341
1342define <16 x i8> @eval97(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1343; CHECK-LABEL: eval97:
1344; CHECK:       # %bb.0: # %entry
1345; CHECK-NEXT:    vx %v0, %v28, %v26
1346; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
1347; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 47
1348; CHECK-NEXT:    br %r14
1349entry:
1350  %0 = xor <16 x i8> %src3, %src2
1351  %1 = xor <16 x i8> %src1, splat(i8 -1)
1352  %or7 = and <16 x i8> %0, %1
1353  %and8 = and <16 x i8> %src2, %src1
1354  %and9 = and <16 x i8> %and8, %src3
1355  %or10 = or <16 x i8> %or7, %and9
1356  ret <16 x i8> %or10
1357}
1358
1359define <16 x i8> @eval98(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1360; CHECK-LABEL: eval98:
1361; CHECK:       # %bb.0: # %entry
1362; CHECK-NEXT:    vx %v0, %v28, %v26
1363; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 2
1364; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 47
1365; CHECK-NEXT:    br %r14
1366entry:
1367  %not5 = xor <16 x i8> %src3, splat(i8 -1)
1368  %0 = xor <16 x i8> %src3, %src2
1369  %1 = xor <16 x i8> %src1, splat(i8 -1)
1370  %or7 = and <16 x i8> %0, %1
1371  %2 = and <16 x i8> %not5, %src1
1372  %and10 = and <16 x i8> %2, %src2
1373  %or11 = or <16 x i8> %or7, %and10
1374  ret <16 x i8> %or11
1375}
1376
1377define <16 x i8> @eval99(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1378; CHECK-LABEL: eval99:
1379; CHECK:       # %bb.0: # %entry
1380; CHECK-NEXT:    vx %v0, %v28, %v26
1381; CHECK-NEXT:    vsel %v24, %v26, %v0, %v24
1382; CHECK-NEXT:    br %r14
1383entry:
1384  %0 = xor <16 x i8> %src3, %src2
1385  %1 = xor <16 x i8> %src1, splat(i8 -1)
1386  %or7 = and <16 x i8> %0, %1
1387  %and8 = and <16 x i8> %src2, %src1
1388  %or14 = or <16 x i8> %or7, %and8
1389  ret <16 x i8> %or14
1390}
1391
1392define <16 x i8> @eval100(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1393; CHECK-LABEL: eval100:
1394; CHECK:       # %bb.0: # %entry
1395; CHECK-NEXT:    vno %v0, %v28, %v24
1396; CHECK-NEXT:    vsel %v24, %v0, %v28, %v26
1397; CHECK-NEXT:    br %r14
1398entry:
1399  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1400  %0 = or <16 x i8> %src3, %src1
1401  %1 = xor <16 x i8> %0, splat(i8 -1)
1402  %and6 = and <16 x i8> %1, %src2
1403  %2 = and <16 x i8> %not1, %src3
1404  %or11 = or <16 x i8> %and6, %2
1405  ret <16 x i8> %or11
1406}
1407
1408define <16 x i8> @eval101(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1409; CHECK-LABEL: eval101:
1410; CHECK:       # %bb.0: # %entry
1411; CHECK-NEXT:    vo %v0, %v28, %v24
1412; CHECK-NEXT:    veval %v1, %v28, %v24, %v26, 11
1413; CHECK-NEXT:    veval %v24, %v1, %v26, %v0, 47
1414; CHECK-NEXT:    br %r14
1415entry:
1416  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1417  %0 = or <16 x i8> %src3, %src1
1418  %1 = xor <16 x i8> %0, splat(i8 -1)
1419  %and6 = and <16 x i8> %1, %src2
1420  %2 = or <16 x i8> %not1, %src1
1421  %3 = and <16 x i8> %2, %src3
1422  %or14 = or <16 x i8> %and6, %3
1423  ret <16 x i8> %or14
1424}
1425
1426define <16 x i8> @eval102(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1427; CHECK-LABEL: eval102:
1428; CHECK:       # %bb.0: # %entry
1429; CHECK-NEXT:    vx %v24, %v26, %v28
1430; CHECK-NEXT:    br %r14
1431entry:
1432  %or15 = xor <16 x i8> %src2, %src3
1433  ret <16 x i8> %or15
1434}
1435
1436define <16 x i8> @eval103(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1437; CHECK-LABEL: eval103:
1438; CHECK:       # %bb.0: # %entry
1439; CHECK-NEXT:    voc %v0, %v24, %v28
1440; CHECK-NEXT:    vsel %v24, %v0, %v28, %v26
1441; CHECK-NEXT:    br %r14
1442entry:
1443  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1444  %0 = and <16 x i8> %not1, %src3
1445  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
1446  %and637 = or <16 x i8> %src3.not, %src1
1447  %1 = and <16 x i8> %and637, %src2
1448  %or18 = or <16 x i8> %1, %0
1449  ret <16 x i8> %or18
1450}
1451
1452define <16 x i8> @eval104(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1453; CHECK-LABEL: eval104:
1454; CHECK:       # %bb.0: # %entry
1455; CHECK-NEXT:    vx %v0, %v28, %v26
1456; CHECK-NEXT:    vno %v1, %v28, %v26
1457; CHECK-NEXT:    vsel %v24, %v1, %v0, %v24
1458; CHECK-NEXT:    br %r14
1459entry:
1460  %0 = xor <16 x i8> %src3, %src2
1461  %1 = xor <16 x i8> %src1, splat(i8 -1)
1462  %or7 = and <16 x i8> %0, %1
1463  %2 = or <16 x i8> %src3, %src2
1464  %3 = xor <16 x i8> %2, splat(i8 -1)
1465  %and11 = and <16 x i8> %3, %src1
1466  %or12 = or <16 x i8> %or7, %and11
1467  ret <16 x i8> %or12
1468}
1469
1470define <16 x i8> @eval105(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1471; CHECK-LABEL: eval105:
1472; CHECK:       # %bb.0: # %entry
1473; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 105
1474; CHECK-NEXT:    br %r14
1475entry:
1476  %0 = xor <16 x i8> %src3, %src2
1477  %or15 = xor <16 x i8> %0, %src1
1478  ret <16 x i8> %or15
1479}
1480
1481define <16 x i8> @eval106(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1482; CHECK-LABEL: eval106:
1483; CHECK:       # %bb.0: # %entry
1484; CHECK-NEXT:    vno %v0, %v28, %v28
1485; CHECK-NEXT:    vx %v1, %v28, %v26
1486; CHECK-NEXT:    vsel %v24, %v0, %v1, %v24
1487; CHECK-NEXT:    br %r14
1488entry:
1489  %not5 = xor <16 x i8> %src3, splat(i8 -1)
1490  %0 = xor <16 x i8> %src3, %src2
1491  %1 = xor <16 x i8> %src1, splat(i8 -1)
1492  %or7 = and <16 x i8> %0, %1
1493  %2 = and <16 x i8> %not5, %src1
1494  %or16 = or <16 x i8> %or7, %2
1495  ret <16 x i8> %or16
1496}
1497
1498define <16 x i8> @eval107(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1499; CHECK-LABEL: eval107:
1500; CHECK:       # %bb.0: # %entry
1501; CHECK-NEXT:    vx %v0, %v28, %v26
1502; CHECK-NEXT:    voc %v1, %v26, %v28
1503; CHECK-NEXT:    vsel %v24, %v1, %v0, %v24
1504; CHECK-NEXT:    br %r14
1505entry:
1506  %0 = xor <16 x i8> %src3, %src2
1507  %1 = xor <16 x i8> %src1, splat(i8 -1)
1508  %or7 = and <16 x i8> %0, %1
1509  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
1510  %and1137 = or <16 x i8> %src3.not, %src2
1511  %2 = and <16 x i8> %and1137, %src1
1512  %or19 = or <16 x i8> %or7, %2
1513  ret <16 x i8> %or19
1514}
1515
1516define <16 x i8> @eval108(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1517; CHECK-LABEL: eval108:
1518; CHECK:       # %bb.0: # %entry
1519; CHECK-NEXT:    vno %v0, %v24, %v24
1520; CHECK-NEXT:    veval %v0, %v0, %v28, %v26, 2
1521; CHECK-NEXT:    vo %v1, %v28, %v24
1522; CHECK-NEXT:    veval %v0, %v0, %v24, %v26, 47
1523; CHECK-NEXT:    veval %v24, %v0, %v26, %v1, 47
1524; CHECK-NEXT:    br %r14
1525entry:
1526  %not = xor <16 x i8> %src1, splat(i8 -1)
1527  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1528  %and = and <16 x i8> %not1, %not
1529  %and2 = and <16 x i8> %and, %src3
1530  %0 = or <16 x i8> %src3, %src1
1531  %1 = xor <16 x i8> %0, splat(i8 -1)
1532  %and6 = and <16 x i8> %1, %src2
1533  %and9 = and <16 x i8> %not1, %src1
1534  %or7 = or <16 x i8> %and2, %and9
1535  %or16 = or <16 x i8> %or7, %and6
1536  ret <16 x i8> %or16
1537}
1538
1539define <16 x i8> @eval109(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1540; CHECK-LABEL: eval109:
1541; CHECK:       # %bb.0: # %entry
1542; CHECK-NEXT:    vgbm %v0, 65535
1543; CHECK-NEXT:    vn %v2, %v26, %v24
1544; CHECK-NEXT:    veval %v0, %v24, %v0, %v26, 40
1545; CHECK-NEXT:    vo %v1, %v28, %v24
1546; CHECK-NEXT:    veval %v0, %v28, %v0, %v2, 7
1547; CHECK-NEXT:    veval %v0, %v0, %v24, %v26, 47
1548; CHECK-NEXT:    veval %v24, %v0, %v26, %v1, 47
1549; CHECK-NEXT:    br %r14
1550entry:
1551  %not = xor <16 x i8> %src1, splat(i8 -1)
1552  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1553  %and = and <16 x i8> %not1, %not
1554  %0 = or <16 x i8> %src3, %src1
1555  %1 = xor <16 x i8> %0, splat(i8 -1)
1556  %and6 = and <16 x i8> %1, %src2
1557  %and9 = and <16 x i8> %not1, %src1
1558  %and17 = and <16 x i8> %src2, %src1
1559  %and237 = or <16 x i8> %and, %and17
1560  %2 = and <16 x i8> %and237, %src3
1561  %or16 = or <16 x i8> %2, %and9
1562  %or19 = or <16 x i8> %or16, %and6
1563  ret <16 x i8> %or19
1564}
1565
1566define <16 x i8> @eval110(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1567; CHECK-LABEL: eval110:
1568; CHECK:       # %bb.0: # %entry
1569; CHECK-NEXT:    vno %v0, %v24, %v24
1570; CHECK-NEXT:    vgbm %v1, 65535
1571; CHECK-NEXT:    vo %v2, %v28, %v24
1572; CHECK-NEXT:    veval %v0, %v0, %v28, %v26, 2
1573; CHECK-NEXT:    veval %v0, %v0, %v26, %v2, 47
1574; CHECK-NEXT:    veval %v1, %v26, %v1, %v28, 190
1575; CHECK-NEXT:    veval %v24, %v0, %v1, %v24, 31
1576; CHECK-NEXT:    br %r14
1577entry:
1578  %not = xor <16 x i8> %src1, splat(i8 -1)
1579  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1580  %and = and <16 x i8> %not1, %not
1581  %and2 = and <16 x i8> %and, %src3
1582  %not5 = xor <16 x i8> %src3, splat(i8 -1)
1583  %0 = or <16 x i8> %src3, %src1
1584  %1 = xor <16 x i8> %0, splat(i8 -1)
1585  %and6 = and <16 x i8> %1, %src2
1586  %or7 = or <16 x i8> %and6, %and2
1587  %and938 = or <16 x i8> %not5, %not1
1588  %2 = and <16 x i8> %and938, %src1
1589  %or20 = or <16 x i8> %or7, %2
1590  ret <16 x i8> %or20
1591}
1592
1593define <16 x i8> @eval111(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1594; CHECK-LABEL: eval111:
1595; CHECK:       # %bb.0: # %entry
1596; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 111
1597; CHECK-NEXT:    br %r14
1598entry:
1599  %0 = xor <16 x i8> %src3, %src2
1600  %or23 = or <16 x i8> %0, %src1
1601  ret <16 x i8> %or23
1602}
1603
1604define <16 x i8> @eval112(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1605; CHECK-LABEL: eval112:
1606; CHECK:       # %bb.0: # %entry
1607; CHECK-NEXT:    veval %v0, %v28, %v26, %v24, 8
1608; CHECK-NEXT:    veval %v24, %v0, %v26, %v24, 47
1609; CHECK-NEXT:    br %r14
1610entry:
1611  %not = xor <16 x i8> %src1, splat(i8 -1)
1612  %0 = or <16 x i8> %src2, %src1
1613  %1 = xor <16 x i8> %0, splat(i8 -1)
1614  %and2 = and <16 x i8> %1, %src3
1615  %and4 = and <16 x i8> %not, %src2
1616  %or11 = or <16 x i8> %and2, %and4
1617  ret <16 x i8> %or11
1618}
1619
1620define <16 x i8> @eval113(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1621; CHECK-LABEL: eval113:
1622; CHECK:       # %bb.0: # %entry
1623; CHECK-NEXT:    vgbm %v0, 65535
1624; CHECK-NEXT:    vn %v1, %v26, %v24
1625; CHECK-NEXT:    veval %v0, %v24, %v0, %v26, 40
1626; CHECK-NEXT:    veval %v0, %v28, %v0, %v1, 7
1627; CHECK-NEXT:    veval %v24, %v0, %v26, %v24, 47
1628; CHECK-NEXT:    br %r14
1629entry:
1630  %not = xor <16 x i8> %src1, splat(i8 -1)
1631  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1632  %and = and <16 x i8> %not1, %not
1633  %and4 = and <16 x i8> %not, %src2
1634  %and12 = and <16 x i8> %src2, %src1
1635  %and228 = or <16 x i8> %and, %and12
1636  %0 = and <16 x i8> %and228, %src3
1637  %or14 = or <16 x i8> %0, %and4
1638  ret <16 x i8> %or14
1639}
1640
1641define <16 x i8> @eval114(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1642; CHECK-LABEL: eval114:
1643; CHECK:       # %bb.0: # %entry
1644; CHECK-NEXT:    vno %v0, %v24, %v24
1645; CHECK-NEXT:    vgbm %v1, 65535
1646; CHECK-NEXT:    veval %v0, %v0, %v28, %v26, 2
1647; CHECK-NEXT:    veval %v1, %v24, %v1, %v28, 190
1648; CHECK-NEXT:    veval %v24, %v0, %v1, %v26, 31
1649; CHECK-NEXT:    br %r14
1650entry:
1651  %not = xor <16 x i8> %src1, splat(i8 -1)
1652  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1653  %and = and <16 x i8> %not1, %not
1654  %and2 = and <16 x i8> %and, %src3
1655  %not5 = xor <16 x i8> %src3, splat(i8 -1)
1656  %and429 = or <16 x i8> %not5, %not
1657  %0 = and <16 x i8> %and429, %src2
1658  %or15 = or <16 x i8> %and2, %0
1659  ret <16 x i8> %or15
1660}
1661
1662define <16 x i8> @eval115(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1663; CHECK-LABEL: eval115:
1664; CHECK:       # %bb.0: # %entry
1665; CHECK-NEXT:    vo %v0, %v26, %v24
1666; CHECK-NEXT:    veval %v24, %v26, %v28, %v0, 47
1667; CHECK-NEXT:    br %r14
1668entry:
1669  %and.demorgan = or <16 x i8> %src2, %src1
1670  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
1671  %and2 = and <16 x i8> %and, %src3
1672  %or18 = or <16 x i8> %and2, %src2
1673  ret <16 x i8> %or18
1674}
1675
1676define <16 x i8> @eval116(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1677; CHECK-LABEL: eval116:
1678; CHECK:       # %bb.0: # %entry
1679; CHECK-NEXT:    vno %v0, %v24, %v24
1680; CHECK-NEXT:    vsel %v24, %v0, %v28, %v26
1681; CHECK-NEXT:    br %r14
1682entry:
1683  %not = xor <16 x i8> %src1, splat(i8 -1)
1684  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1685  %and4 = and <16 x i8> %not, %src2
1686  %0 = and <16 x i8> %not1, %src3
1687  %or15 = or <16 x i8> %0, %and4
1688  ret <16 x i8> %or15
1689}
1690
1691define <16 x i8> @eval117(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1692; CHECK-LABEL: eval117:
1693; CHECK:       # %bb.0: # %entry
1694; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 47
1695; CHECK-NEXT:    br %r14
1696entry:
1697  %not = xor <16 x i8> %src1, splat(i8 -1)
1698  %and4 = and <16 x i8> %not, %src2
1699  %or18 = or <16 x i8> %and4, %src3
1700  ret <16 x i8> %or18
1701}
1702
1703define <16 x i8> @eval118(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1704; CHECK-LABEL: eval118:
1705; CHECK:       # %bb.0: # %entry
1706; CHECK-NEXT:    vnn %v0, %v28, %v24
1707; CHECK-NEXT:    vsel %v24, %v0, %v28, %v26
1708; CHECK-NEXT:    br %r14
1709entry:
1710  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1711  %0 = and <16 x i8> %not1, %src3
1712  %and438.demorgan = and <16 x i8> %src3, %src1
1713  %and438 = xor <16 x i8> %and438.demorgan, splat(i8 -1)
1714  %1 = and <16 x i8> %and438, %src2
1715  %or19 = or <16 x i8> %0, %1
1716  ret <16 x i8> %or19
1717}
1718
1719define <16 x i8> @eval119(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1720; CHECK-LABEL: eval119:
1721; CHECK:       # %bb.0: # %entry
1722; CHECK-NEXT:    vo %v24, %v28, %v26
1723; CHECK-NEXT:    br %r14
1724entry:
1725  %or22 = or <16 x i8> %src3, %src2
1726  ret <16 x i8> %or22
1727}
1728
1729define <16 x i8> @eval120(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1730; CHECK-LABEL: eval120:
1731; CHECK:       # %bb.0: # %entry
1732; CHECK-NEXT:    vno %v0, %v24, %v24
1733; CHECK-NEXT:    veval %v0, %v0, %v28, %v26, 2
1734; CHECK-NEXT:    vo %v1, %v28, %v26
1735; CHECK-NEXT:    veval %v0, %v0, %v26, %v24, 47
1736; CHECK-NEXT:    veval %v24, %v0, %v24, %v1, 47
1737; CHECK-NEXT:    br %r14
1738entry:
1739  %not = xor <16 x i8> %src1, splat(i8 -1)
1740  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1741  %and = and <16 x i8> %not1, %not
1742  %and2 = and <16 x i8> %and, %src3
1743  %and4 = and <16 x i8> %not, %src2
1744  %or11 = or <16 x i8> %and2, %and4
1745  %0 = or <16 x i8> %src3, %src2
1746  %1 = xor <16 x i8> %0, splat(i8 -1)
1747  %and15 = and <16 x i8> %1, %src1
1748  %or16 = or <16 x i8> %or11, %and15
1749  ret <16 x i8> %or16
1750}
1751
1752define <16 x i8> @eval121(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1753; CHECK-LABEL: eval121:
1754; CHECK:       # %bb.0: # %entry
1755; CHECK-NEXT:    vgbm %v0, 65535
1756; CHECK-NEXT:    vn %v2, %v26, %v24
1757; CHECK-NEXT:    veval %v0, %v24, %v0, %v26, 40
1758; CHECK-NEXT:    vo %v1, %v28, %v26
1759; CHECK-NEXT:    veval %v0, %v28, %v0, %v2, 7
1760; CHECK-NEXT:    veval %v0, %v0, %v26, %v24, 47
1761; CHECK-NEXT:    veval %v24, %v0, %v24, %v1, 47
1762; CHECK-NEXT:    br %r14
1763entry:
1764  %not = xor <16 x i8> %src1, splat(i8 -1)
1765  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1766  %and = and <16 x i8> %not1, %not
1767  %and4 = and <16 x i8> %not, %src2
1768  %0 = or <16 x i8> %src3, %src2
1769  %1 = xor <16 x i8> %0, splat(i8 -1)
1770  %and15 = and <16 x i8> %1, %src1
1771  %and17 = and <16 x i8> %src2, %src1
1772  %and237 = or <16 x i8> %and, %and17
1773  %2 = and <16 x i8> %and237, %src3
1774  %or16 = or <16 x i8> %2, %and4
1775  %or19 = or <16 x i8> %or16, %and15
1776  ret <16 x i8> %or19
1777}
1778
1779define <16 x i8> @eval122(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1780; CHECK-LABEL: eval122:
1781; CHECK:       # %bb.0: # %entry
1782; CHECK-NEXT:    vno %v0, %v24, %v24
1783; CHECK-NEXT:    veval %v0, %v0, %v28, %v26, 2
1784; CHECK-NEXT:    veval %v0, %v0, %v26, %v24, 47
1785; CHECK-NEXT:    veval %v24, %v0, %v24, %v28, 47
1786; CHECK-NEXT:    br %r14
1787entry:
1788  %not = xor <16 x i8> %src1, splat(i8 -1)
1789  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1790  %and = and <16 x i8> %not1, %not
1791  %and2 = and <16 x i8> %and, %src3
1792  %and4 = and <16 x i8> %not, %src2
1793  %not5 = xor <16 x i8> %src3, splat(i8 -1)
1794  %or11 = or <16 x i8> %and2, %and4
1795  %0 = and <16 x i8> %not5, %src1
1796  %or20 = or <16 x i8> %or11, %0
1797  ret <16 x i8> %or20
1798}
1799
1800define <16 x i8> @eval123(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1801; CHECK-LABEL: eval123:
1802; CHECK:       # %bb.0: # %entry
1803; CHECK-NEXT:    vno %v0, %v24, %v24
1804; CHECK-NEXT:    veval %v0, %v0, %v28, %v26, 2
1805; CHECK-NEXT:    voc %v1, %v26, %v28
1806; CHECK-NEXT:    veval %v0, %v0, %v26, %v24, 47
1807; CHECK-NEXT:    veval %v24, %v0, %v1, %v24, 31
1808; CHECK-NEXT:    br %r14
1809entry:
1810  %not = xor <16 x i8> %src1, splat(i8 -1)
1811  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1812  %and = and <16 x i8> %not1, %not
1813  %and2 = and <16 x i8> %and, %src3
1814  %and4 = and <16 x i8> %not, %src2
1815  %or11 = or <16 x i8> %and2, %and4
1816  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
1817  %and1545 = or <16 x i8> %src3.not, %src2
1818  %0 = and <16 x i8> %and1545, %src1
1819  %or23 = or <16 x i8> %or11, %0
1820  ret <16 x i8> %or23
1821}
1822
1823define <16 x i8> @eval124(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1824; CHECK-LABEL: eval124:
1825; CHECK:       # %bb.0: # %entry
1826; CHECK-NEXT:    vo %v0, %v26, %v24
1827; CHECK-NEXT:    vx %v1, %v24, %v26
1828; CHECK-NEXT:    veval %v24, %v1, %v28, %v0, 47
1829; CHECK-NEXT:    br %r14
1830entry:
1831  %0 = or <16 x i8> %src2, %src1
1832  %1 = xor <16 x i8> %0, splat(i8 -1)
1833  %and2 = and <16 x i8> %1, %src3
1834  %or11 = xor <16 x i8> %src1, %src2
1835  %or20 = or <16 x i8> %or11, %and2
1836  ret <16 x i8> %or20
1837}
1838
1839define <16 x i8> @eval125(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1840; CHECK-LABEL: eval125:
1841; CHECK:       # %bb.0: # %entry
1842; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 111
1843; CHECK-NEXT:    br %r14
1844entry:
1845  %or11 = xor <16 x i8> %src1, %src2
1846  %or23 = or <16 x i8> %or11, %src3
1847  ret <16 x i8> %or23
1848}
1849
1850define <16 x i8> @eval126(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1851; CHECK-LABEL: eval126:
1852; CHECK:       # %bb.0: # %entry
1853; CHECK-NEXT:    vno %v0, %v24, %v24
1854; CHECK-NEXT:    vgbm %v1, 65535
1855; CHECK-NEXT:    veval %v0, %v0, %v28, %v26, 2
1856; CHECK-NEXT:    veval %v0, %v0, %v26, %v24, 47
1857; CHECK-NEXT:    veval %v1, %v26, %v1, %v28, 190
1858; CHECK-NEXT:    veval %v24, %v0, %v1, %v24, 31
1859; CHECK-NEXT:    br %r14
1860entry:
1861  %not = xor <16 x i8> %src1, splat(i8 -1)
1862  %not1 = xor <16 x i8> %src2, splat(i8 -1)
1863  %and = and <16 x i8> %not1, %not
1864  %and2 = and <16 x i8> %and, %src3
1865  %and4 = and <16 x i8> %not, %src2
1866  %not5 = xor <16 x i8> %src3, splat(i8 -1)
1867  %or11 = or <16 x i8> %and2, %and4
1868  %and1346 = or <16 x i8> %not5, %not1
1869  %0 = and <16 x i8> %and1346, %src1
1870  %or24 = or <16 x i8> %or11, %0
1871  ret <16 x i8> %or24
1872}
1873
1874define <16 x i8> @eval127(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1875; CHECK-LABEL: eval127:
1876; CHECK:       # %bb.0: # %entry
1877; CHECK-NEXT:    veval %v0, %v28, %v26, %v24, 8
1878; CHECK-NEXT:    veval %v24, %v0, %v24, %v26, 127
1879; CHECK-NEXT:    br %r14
1880entry:
1881  %0 = or <16 x i8> %src2, %src1
1882  %1 = xor <16 x i8> %0, splat(i8 -1)
1883  %and2 = and <16 x i8> %1, %src3
1884  %2 = or <16 x i8> %and2, %src1
1885  %or27 = or <16 x i8> %2, %src2
1886  ret <16 x i8> %or27
1887}
1888
1889define <16 x i8> @eval128(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1890; CHECK-LABEL: eval128:
1891; CHECK:       # %bb.0: # %entry
1892; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 128
1893; CHECK-NEXT:    br %r14
1894entry:
1895  %and.demorgan = or <16 x i8> %src2, %src1
1896  %and3.demorgan = or <16 x i8> %and.demorgan, %src3
1897  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
1898  ret <16 x i8> %and3
1899}
1900
1901define <16 x i8> @eval129(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1902; CHECK-LABEL: eval129:
1903; CHECK:       # %bb.0: # %entry
1904; CHECK-NEXT:    vo %v0, %v26, %v24
1905; CHECK-NEXT:    vn %v1, %v26, %v24
1906; CHECK-NEXT:    veval %v24, %v1, %v28, %v0, 139
1907; CHECK-NEXT:    br %r14
1908entry:
1909  %and.demorgan = or <16 x i8> %src2, %src1
1910  %and3.demorgan = or <16 x i8> %and.demorgan, %src3
1911  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
1912  %and4 = and <16 x i8> %src2, %src1
1913  %and5 = and <16 x i8> %and4, %src3
1914  %or6 = or <16 x i8> %and5, %and3
1915  ret <16 x i8> %or6
1916}
1917
1918define <16 x i8> @eval130(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1919; CHECK-LABEL: eval130:
1920; CHECK:       # %bb.0: # %entry
1921; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 130
1922; CHECK-NEXT:    br %r14
1923entry:
1924  %0 = xor <16 x i8> %src2, %src1
1925  %or7.demorgan = or <16 x i8> %0, %src3
1926  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
1927  ret <16 x i8> %or7
1928}
1929
1930define <16 x i8> @eval131(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1931; CHECK-LABEL: eval131:
1932; CHECK:       # %bb.0: # %entry
1933; CHECK-NEXT:    vn %v0, %v26, %v24
1934; CHECK-NEXT:    vx %v1, %v26, %v24
1935; CHECK-NEXT:    veval %v24, %v0, %v28, %v1, 139
1936; CHECK-NEXT:    br %r14
1937entry:
1938  %and4 = and <16 x i8> %src2, %src1
1939  %0 = xor <16 x i8> %src2, %src1
1940  %or7.demorgan = or <16 x i8> %0, %src3
1941  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
1942  %and9 = and <16 x i8> %and4, %src3
1943  %or10 = or <16 x i8> %and9, %or7
1944  ret <16 x i8> %or10
1945}
1946
1947define <16 x i8> @eval132(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1948; CHECK-LABEL: eval132:
1949; CHECK:       # %bb.0: # %entry
1950; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 130
1951; CHECK-NEXT:    br %r14
1952entry:
1953  %0 = xor <16 x i8> %src3, %src1
1954  %1 = or <16 x i8> %0, %src2
1955  %or7 = xor <16 x i8> %1, splat(i8 -1)
1956  ret <16 x i8> %or7
1957}
1958
1959define <16 x i8> @eval133(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1960; CHECK-LABEL: eval133:
1961; CHECK:       # %bb.0: # %entry
1962; CHECK-NEXT:    vx %v0, %v28, %v24
1963; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
1964; CHECK-NEXT:    veval %v24, %v1, %v0, %v26, 143
1965; CHECK-NEXT:    br %r14
1966entry:
1967  %0 = xor <16 x i8> %src3, %src1
1968  %1 = or <16 x i8> %0, %src2
1969  %or7 = xor <16 x i8> %1, splat(i8 -1)
1970  %and8 = and <16 x i8> %src2, %src1
1971  %and9 = and <16 x i8> %and8, %src3
1972  %or10 = or <16 x i8> %and9, %or7
1973  ret <16 x i8> %or10
1974}
1975
1976define <16 x i8> @eval134(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1977; CHECK-LABEL: eval134:
1978; CHECK:       # %bb.0: # %entry
1979; CHECK-NEXT:    vx %v0, %v28, %v24
1980; CHECK-NEXT:    vnc %v1, %v24, %v28
1981; CHECK-NEXT:    veval %v24, %v1, %v26, %v0, 139
1982; CHECK-NEXT:    br %r14
1983entry:
1984  %not2 = xor <16 x i8> %src3, splat(i8 -1)
1985  %0 = xor <16 x i8> %src3, %src1
1986  %1 = or <16 x i8> %0, %src2
1987  %or7 = xor <16 x i8> %1, splat(i8 -1)
1988  %2 = and <16 x i8> %not2, %src1
1989  %and10 = and <16 x i8> %2, %src2
1990  %or11 = or <16 x i8> %and10, %or7
1991  ret <16 x i8> %or11
1992}
1993
1994define <16 x i8> @eval135(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
1995; CHECK-LABEL: eval135:
1996; CHECK:       # %bb.0: # %entry
1997; CHECK-NEXT:    vx %v0, %v28, %v24
1998; CHECK-NEXT:    veval %v24, %v24, %v26, %v0, 139
1999; CHECK-NEXT:    br %r14
2000entry:
2001  %0 = xor <16 x i8> %src3, %src1
2002  %1 = or <16 x i8> %0, %src2
2003  %or7 = xor <16 x i8> %1, splat(i8 -1)
2004  %and8 = and <16 x i8> %src2, %src1
2005  %or14 = or <16 x i8> %and8, %or7
2006  ret <16 x i8> %or14
2007}
2008
2009define <16 x i8> @eval136(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2010; CHECK-LABEL: eval136:
2011; CHECK:       # %bb.0: # %entry
2012; CHECK-NEXT:    vno %v24, %v28, %v26
2013; CHECK-NEXT:    br %r14
2014entry:
2015  %0 = or <16 x i8> %src3, %src2
2016  %1 = xor <16 x i8> %0, splat(i8 -1)
2017  ret <16 x i8> %1
2018}
2019
2020define <16 x i8> @eval137(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2021; CHECK-LABEL: eval137:
2022; CHECK:       # %bb.0: # %entry
2023; CHECK-NEXT:    veval %v24, %v24, %v26, %v28, 137
2024; CHECK-NEXT:    br %r14
2025entry:
2026  %0 = or <16 x i8> %src3, %src2
2027  %1 = xor <16 x i8> %0, splat(i8 -1)
2028  %and9 = and <16 x i8> %src2, %src1
2029  %and10 = and <16 x i8> %and9, %src3
2030  %or11 = or <16 x i8> %and10, %1
2031  ret <16 x i8> %or11
2032}
2033
2034define <16 x i8> @eval138(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2035; CHECK-LABEL: eval138:
2036; CHECK:       # %bb.0: # %entry
2037; CHECK-NEXT:    veval %v0, %v26, %v24, %v28, 127
2038; CHECK-NEXT:    veval %v24, %v24, %v28, %v0, 174
2039; CHECK-NEXT:    br %r14
2040entry:
2041  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2042  %0 = or <16 x i8> %src2, %src1
2043  %and3.demorgan = or <16 x i8> %0, %src3
2044  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
2045  %1 = and <16 x i8> %not2, %src1
2046  %or12 = or <16 x i8> %1, %and3
2047  ret <16 x i8> %or12
2048}
2049
2050define <16 x i8> @eval139(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2051; CHECK-LABEL: eval139:
2052; CHECK:       # %bb.0: # %entry
2053; CHECK-NEXT:    vo %v0, %v26, %v24
2054; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 11
2055; CHECK-NEXT:    veval %v24, %v1, %v0, %v28, 143
2056; CHECK-NEXT:    br %r14
2057entry:
2058  %0 = or <16 x i8> %src2, %src1
2059  %and3.demorgan = or <16 x i8> %0, %src3
2060  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
2061  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2062  %and729 = or <16 x i8> %src3.not, %src2
2063  %1 = and <16 x i8> %and729, %src1
2064  %or15 = or <16 x i8> %1, %and3
2065  ret <16 x i8> %or15
2066}
2067
2068define <16 x i8> @eval140(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2069; CHECK-LABEL: eval140:
2070; CHECK:       # %bb.0: # %entry
2071; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 127
2072; CHECK-NEXT:    veval %v24, %v24, %v26, %v0, 174
2073; CHECK-NEXT:    br %r14
2074entry:
2075  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2076  %0 = or <16 x i8> %src1, %src3
2077  %and3.demorgan = or <16 x i8> %0, %src2
2078  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
2079  %and5 = and <16 x i8> %not1, %src1
2080  %or12 = or <16 x i8> %and5, %and3
2081  ret <16 x i8> %or12
2082}
2083
2084define <16 x i8> @eval141(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2085; CHECK-LABEL: eval141:
2086; CHECK:       # %bb.0: # %entry
2087; CHECK-NEXT:    vo %v0, %v26, %v24
2088; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
2089; CHECK-NEXT:    veval %v1, %v1, %v24, %v26, 47
2090; CHECK-NEXT:    veval %v24, %v1, %v0, %v28, 143
2091; CHECK-NEXT:    br %r14
2092entry:
2093  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2094  %0 = or <16 x i8> %src2, %src1
2095  %and3.demorgan = or <16 x i8> %0, %src3
2096  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
2097  %and5 = and <16 x i8> %not1, %src1
2098  %and13 = and <16 x i8> %src2, %src1
2099  %and14 = and <16 x i8> %and13, %src3
2100  %or12 = or <16 x i8> %and14, %and5
2101  %or15 = or <16 x i8> %or12, %and3
2102  ret <16 x i8> %or15
2103}
2104
2105define <16 x i8> @eval142(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2106; CHECK-LABEL: eval142:
2107; CHECK:       # %bb.0: # %entry
2108; CHECK-NEXT:    vn %v1, %v28, %v26
2109; CHECK-NEXT:    veval %v0, %v26, %v24, %v28, 127
2110; CHECK-NEXT:    veval %v24, %v24, %v1, %v0, 174
2111; CHECK-NEXT:    br %r14
2112entry:
2113  %0 = or <16 x i8> %src2, %src1
2114  %and3.demorgan = or <16 x i8> %0, %src3
2115  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
2116  %and530.demorgan = and <16 x i8> %src3, %src2
2117  %and530 = xor <16 x i8> %and530.demorgan, splat(i8 -1)
2118  %1 = and <16 x i8> %and530, %src1
2119  %or16 = or <16 x i8> %1, %and3
2120  ret <16 x i8> %or16
2121}
2122
2123define <16 x i8> @eval143(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2124; CHECK-LABEL: eval143:
2125; CHECK:       # %bb.0: # %entry
2126; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 143
2127; CHECK-NEXT:    br %r14
2128entry:
2129  %0 = or <16 x i8> %src3, %src2
2130  %.not = xor <16 x i8> %0, splat(i8 -1)
2131  %or19 = or <16 x i8> %.not, %src1
2132  ret <16 x i8> %or19
2133}
2134
2135define <16 x i8> @eval144(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2136; CHECK-LABEL: eval144:
2137; CHECK:       # %bb.0: # %entry
2138; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 130
2139; CHECK-NEXT:    br %r14
2140entry:
2141  %0 = xor <16 x i8> %src3, %src2
2142  %or7.demorgan = or <16 x i8> %0, %src1
2143  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2144  ret <16 x i8> %or7
2145}
2146
2147define <16 x i8> @eval145(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2148; CHECK-LABEL: eval145:
2149; CHECK:       # %bb.0: # %entry
2150; CHECK-NEXT:    vx %v0, %v28, %v26
2151; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
2152; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 143
2153; CHECK-NEXT:    br %r14
2154entry:
2155  %0 = xor <16 x i8> %src3, %src2
2156  %or7.demorgan = or <16 x i8> %0, %src1
2157  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2158  %and8 = and <16 x i8> %src2, %src1
2159  %and9 = and <16 x i8> %and8, %src3
2160  %or10 = or <16 x i8> %and9, %or7
2161  ret <16 x i8> %or10
2162}
2163
2164define <16 x i8> @eval146(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2165; CHECK-LABEL: eval146:
2166; CHECK:       # %bb.0: # %entry
2167; CHECK-NEXT:    vx %v0, %v28, %v26
2168; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 2
2169; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 143
2170; CHECK-NEXT:    br %r14
2171entry:
2172  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2173  %0 = xor <16 x i8> %src3, %src2
2174  %or7.demorgan = or <16 x i8> %0, %src1
2175  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2176  %1 = and <16 x i8> %not2, %src1
2177  %and10 = and <16 x i8> %1, %src2
2178  %or11 = or <16 x i8> %and10, %or7
2179  ret <16 x i8> %or11
2180}
2181
2182define <16 x i8> @eval147(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2183; CHECK-LABEL: eval147:
2184; CHECK:       # %bb.0: # %entry
2185; CHECK-NEXT:    vx %v0, %v28, %v26
2186; CHECK-NEXT:    veval %v24, %v26, %v24, %v0, 139
2187; CHECK-NEXT:    br %r14
2188entry:
2189  %0 = xor <16 x i8> %src3, %src2
2190  %or7.demorgan = or <16 x i8> %0, %src1
2191  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2192  %and8 = and <16 x i8> %src2, %src1
2193  %or14 = or <16 x i8> %and8, %or7
2194  ret <16 x i8> %or14
2195}
2196
2197define <16 x i8> @eval148(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2198; CHECK-LABEL: eval148:
2199; CHECK:       # %bb.0: # %entry
2200; CHECK-NEXT:    vx %v0, %v28, %v26
2201; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
2202; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 143
2203; CHECK-NEXT:    br %r14
2204entry:
2205  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2206  %0 = xor <16 x i8> %src3, %src2
2207  %or7.demorgan = or <16 x i8> %0, %src1
2208  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2209  %and9 = and <16 x i8> %not1, %src1
2210  %and10 = and <16 x i8> %and9, %src3
2211  %or11 = or <16 x i8> %and10, %or7
2212  ret <16 x i8> %or11
2213}
2214
2215define <16 x i8> @eval149(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2216; CHECK-LABEL: eval149:
2217; CHECK:       # %bb.0: # %entry
2218; CHECK-NEXT:    vx %v0, %v28, %v26
2219; CHECK-NEXT:    veval %v24, %v28, %v24, %v0, 139
2220; CHECK-NEXT:    br %r14
2221entry:
2222  %0 = xor <16 x i8> %src3, %src2
2223  %or7.demorgan = or <16 x i8> %0, %src1
2224  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2225  %1 = and <16 x i8> %src3, %src1
2226  %or14 = or <16 x i8> %1, %or7
2227  ret <16 x i8> %or14
2228}
2229
2230define <16 x i8> @eval150(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2231; CHECK-LABEL: eval150:
2232; CHECK:       # %bb.0: # %entry
2233; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 111
2234; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
2235; CHECK-NEXT:    veval %v2, %v24, %v26, %v28, 2
2236; CHECK-NEXT:    veval %v24, %v1, %v2, %v0, 191
2237; CHECK-NEXT:    br %r14
2238entry:
2239  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2240  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2241  %0 = xor <16 x i8> %src3, %src2
2242  %or7.demorgan = or <16 x i8> %0, %src1
2243  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2244  %and9 = and <16 x i8> %not1, %src1
2245  %and10 = and <16 x i8> %and9, %src3
2246  %or11 = or <16 x i8> %and10, %or7
2247  %1 = and <16 x i8> %not2, %src1
2248  %and14 = and <16 x i8> %1, %src2
2249  %or15 = or <16 x i8> %or11, %and14
2250  ret <16 x i8> %or15
2251}
2252
2253define <16 x i8> @eval151(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2254; CHECK-LABEL: eval151:
2255; CHECK:       # %bb.0: # %entry
2256; CHECK-NEXT:    vx %v0, %v28, %v26
2257; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
2258; CHECK-NEXT:    veval %v1, %v1, %v26, %v24, 31
2259; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 143
2260; CHECK-NEXT:    br %r14
2261entry:
2262  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2263  %0 = xor <16 x i8> %src3, %src2
2264  %or7.demorgan = or <16 x i8> %0, %src1
2265  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2266  %and9 = and <16 x i8> %not1, %src1
2267  %and10 = and <16 x i8> %and9, %src3
2268  %and12 = and <16 x i8> %src2, %src1
2269  %or11 = or <16 x i8> %and10, %and12
2270  %or18 = or <16 x i8> %or11, %or7
2271  ret <16 x i8> %or18
2272}
2273
2274define <16 x i8> @eval152(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2275; CHECK-LABEL: eval152:
2276; CHECK:       # %bb.0: # %entry
2277; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 111
2278; CHECK-NEXT:    veval %v24, %v28, %v26, %v0, 234
2279; CHECK-NEXT:    br %r14
2280entry:
2281  %0 = xor <16 x i8> %src3, %src2
2282  %or7.demorgan = or <16 x i8> %0, %src1
2283  %1 = or <16 x i8> %src3, %src2
2284  %2 = and <16 x i8> %or7.demorgan, %1
2285  %or12 = xor <16 x i8> %2, splat(i8 -1)
2286  ret <16 x i8> %or12
2287}
2288
2289define <16 x i8> @eval153(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2290; CHECK-LABEL: eval153:
2291; CHECK:       # %bb.0: # %entry
2292; CHECK-NEXT:    vo %v1, %v28, %v26
2293; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 111
2294; CHECK-NEXT:    veval %v2, %v26, %v24, %v28, 1
2295; CHECK-NEXT:    veval %v24, %v2, %v0, %v1, 239
2296; CHECK-NEXT:    br %r14
2297entry:
2298  %0 = xor <16 x i8> %src3, %src2
2299  %or7.demorgan = or <16 x i8> %0, %src1
2300  %1 = or <16 x i8> %src3, %src2
2301  %2 = and <16 x i8> %or7.demorgan, %1
2302  %or12 = xor <16 x i8> %2, splat(i8 -1)
2303  %and13 = and <16 x i8> %src2, %src1
2304  %and14 = and <16 x i8> %and13, %src3
2305  %or15 = or <16 x i8> %and14, %or12
2306  ret <16 x i8> %or15
2307}
2308
2309define <16 x i8> @eval154(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2310; CHECK-LABEL: eval154:
2311; CHECK:       # %bb.0: # %entry
2312; CHECK-NEXT:    vo %v1, %v28, %v26
2313; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 111
2314; CHECK-NEXT:    veval %v2, %v24, %v26, %v28, 2
2315; CHECK-NEXT:    veval %v24, %v2, %v0, %v1, 239
2316; CHECK-NEXT:    br %r14
2317entry:
2318  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2319  %0 = xor <16 x i8> %src3, %src2
2320  %or7.demorgan = or <16 x i8> %0, %src1
2321  %1 = or <16 x i8> %src3, %src2
2322  %2 = and <16 x i8> %or7.demorgan, %1
2323  %or12 = xor <16 x i8> %2, splat(i8 -1)
2324  %3 = and <16 x i8> %not2, %src1
2325  %and15 = and <16 x i8> %3, %src2
2326  %or16 = or <16 x i8> %and15, %or12
2327  ret <16 x i8> %or16
2328}
2329
2330define <16 x i8> @eval155(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2331; CHECK-LABEL: eval155:
2332; CHECK:       # %bb.0: # %entry
2333; CHECK-NEXT:    vo %v1, %v28, %v26
2334; CHECK-NEXT:    vn %v2, %v26, %v24
2335; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 111
2336; CHECK-NEXT:    veval %v24, %v2, %v0, %v1, 239
2337; CHECK-NEXT:    br %r14
2338entry:
2339  %0 = xor <16 x i8> %src3, %src2
2340  %or7.demorgan = or <16 x i8> %0, %src1
2341  %1 = or <16 x i8> %src3, %src2
2342  %2 = and <16 x i8> %or7.demorgan, %1
2343  %or12 = xor <16 x i8> %2, splat(i8 -1)
2344  %and13 = and <16 x i8> %src2, %src1
2345  %or19 = or <16 x i8> %and13, %or12
2346  ret <16 x i8> %or19
2347}
2348
2349define <16 x i8> @eval156(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2350; CHECK-LABEL: eval156:
2351; CHECK:       # %bb.0: # %entry
2352; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 111
2353; CHECK-NEXT:    veval %v24, %v24, %v26, %v0, 174
2354; CHECK-NEXT:    br %r14
2355entry:
2356  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2357  %0 = xor <16 x i8> %src3, %src2
2358  %or7.demorgan = or <16 x i8> %0, %src1
2359  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2360  %and9 = and <16 x i8> %not1, %src1
2361  %or16 = or <16 x i8> %and9, %or7
2362  ret <16 x i8> %or16
2363}
2364
2365define <16 x i8> @eval157(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2366; CHECK-LABEL: eval157:
2367; CHECK:       # %bb.0: # %entry
2368; CHECK-NEXT:    vx %v0, %v28, %v26
2369; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
2370; CHECK-NEXT:    veval %v1, %v1, %v24, %v26, 47
2371; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 143
2372; CHECK-NEXT:    br %r14
2373entry:
2374  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2375  %0 = xor <16 x i8> %src3, %src2
2376  %or7.demorgan = or <16 x i8> %0, %src1
2377  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2378  %and9 = and <16 x i8> %not1, %src1
2379  %and17 = and <16 x i8> %src2, %src1
2380  %and18 = and <16 x i8> %and17, %src3
2381  %or16 = or <16 x i8> %and18, %and9
2382  %or19 = or <16 x i8> %or16, %or7
2383  ret <16 x i8> %or19
2384}
2385
2386define <16 x i8> @eval158(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2387; CHECK-LABEL: eval158:
2388; CHECK:       # %bb.0: # %entry
2389; CHECK-NEXT:    vn %v1, %v28, %v26
2390; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 111
2391; CHECK-NEXT:    veval %v24, %v24, %v1, %v0, 174
2392; CHECK-NEXT:    br %r14
2393entry:
2394  %0 = xor <16 x i8> %src3, %src2
2395  %or7.demorgan = or <16 x i8> %0, %src1
2396  %or7 = xor <16 x i8> %or7.demorgan, splat(i8 -1)
2397  %and938.demorgan = and <16 x i8> %src3, %src2
2398  %and938 = xor <16 x i8> %and938.demorgan, splat(i8 -1)
2399  %1 = and <16 x i8> %and938, %src1
2400  %or20 = or <16 x i8> %1, %or7
2401  ret <16 x i8> %or20
2402}
2403
2404define <16 x i8> @eval159(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2405; CHECK-LABEL: eval159:
2406; CHECK:       # %bb.0: # %entry
2407; CHECK-NEXT:    veval %v24, %v24, %v26, %v28, 159
2408; CHECK-NEXT:    br %r14
2409entry:
2410  %0 = xor <16 x i8> %src2, %src3
2411  %.not = xor <16 x i8> %0, splat(i8 -1)
2412  %or23 = or <16 x i8> %.not, %src1
2413  ret <16 x i8> %or23
2414}
2415
2416define <16 x i8> @eval160(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2417; CHECK-LABEL: eval160:
2418; CHECK:       # %bb.0: # %entry
2419; CHECK-NEXT:    vno %v24, %v28, %v24
2420; CHECK-NEXT:    br %r14
2421entry:
2422  %0 = or <16 x i8> %src3, %src1
2423  %1 = xor <16 x i8> %0, splat(i8 -1)
2424  ret <16 x i8> %1
2425}
2426
2427define <16 x i8> @eval161(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2428; CHECK-LABEL: eval161:
2429; CHECK:       # %bb.0: # %entry
2430; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 137
2431; CHECK-NEXT:    br %r14
2432entry:
2433  %0 = or <16 x i8> %src3, %src1
2434  %1 = xor <16 x i8> %0, splat(i8 -1)
2435  %and9 = and <16 x i8> %src2, %src1
2436  %and10 = and <16 x i8> %and9, %src3
2437  %or11 = or <16 x i8> %and10, %1
2438  ret <16 x i8> %or11
2439}
2440
2441define <16 x i8> @eval162(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2442; CHECK-LABEL: eval162:
2443; CHECK:       # %bb.0: # %entry
2444; CHECK-NEXT:    veval %v0, %v28, %v24, %v26, 127
2445; CHECK-NEXT:    veval %v24, %v26, %v28, %v0, 174
2446; CHECK-NEXT:    br %r14
2447entry:
2448  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2449  %0 = or <16 x i8> %src3, %src1
2450  %and3.demorgan = or <16 x i8> %0, %src2
2451  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
2452  %1 = and <16 x i8> %not2, %src2
2453  %or12 = or <16 x i8> %1, %and3
2454  ret <16 x i8> %or12
2455}
2456
2457define <16 x i8> @eval163(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2458; CHECK-LABEL: eval163:
2459; CHECK:       # %bb.0: # %entry
2460; CHECK-NEXT:    vo %v0, %v26, %v24
2461; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 11
2462; CHECK-NEXT:    veval %v24, %v1, %v0, %v28, 143
2463; CHECK-NEXT:    br %r14
2464entry:
2465  %0 = or <16 x i8> %src2, %src1
2466  %and3.demorgan = or <16 x i8> %0, %src3
2467  %and3 = xor <16 x i8> %and3.demorgan, splat(i8 -1)
2468  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2469  %and729 = or <16 x i8> %src3.not, %src1
2470  %1 = and <16 x i8> %and729, %src2
2471  %or15 = or <16 x i8> %1, %and3
2472  ret <16 x i8> %or15
2473}
2474
2475define <16 x i8> @eval164(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2476; CHECK-LABEL: eval164:
2477; CHECK:       # %bb.0: # %entry
2478; CHECK-NEXT:    vo %v0, %v28, %v24
2479; CHECK-NEXT:    vx %v1, %v28, %v24
2480; CHECK-NEXT:    veval %v24, %v1, %v26, %v0, 234
2481; CHECK-NEXT:    br %r14
2482entry:
2483  %0 = or <16 x i8> %src3, %src1
2484  %1 = xor <16 x i8> %src3, %src1
2485  %2 = or <16 x i8> %1, %src2
2486  %3 = and <16 x i8> %0, %2
2487  %or12 = xor <16 x i8> %3, splat(i8 -1)
2488  ret <16 x i8> %or12
2489}
2490
2491define <16 x i8> @eval165(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2492; CHECK-LABEL: eval165:
2493; CHECK:       # %bb.0: # %entry
2494; CHECK-NEXT:    vnx %v24, %v28, %v24
2495; CHECK-NEXT:    br %r14
2496entry:
2497  %0 = xor <16 x i8> %src3, %src1
2498  %or15 = xor <16 x i8> %0, splat(i8 -1)
2499  ret <16 x i8> %or15
2500}
2501
2502define <16 x i8> @eval166(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2503; CHECK-LABEL: eval166:
2504; CHECK:       # %bb.0: # %entry
2505; CHECK-NEXT:    vo %v0, %v28, %v24
2506; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 2
2507; CHECK-NEXT:    veval %v2, %v26, %v28, %v24, 111
2508; CHECK-NEXT:    veval %v24, %v1, %v0, %v2, 239
2509; CHECK-NEXT:    br %r14
2510entry:
2511  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2512  %0 = or <16 x i8> %src3, %src1
2513  %1 = and <16 x i8> %not2, %src1
2514  %and15 = and <16 x i8> %1, %src2
2515  %2 = xor <16 x i8> %src3, %src1
2516  %3 = or <16 x i8> %2, %src2
2517  %4 = and <16 x i8> %0, %3
2518  %or12 = xor <16 x i8> %4, splat(i8 -1)
2519  %or16 = or <16 x i8> %and15, %or12
2520  ret <16 x i8> %or16
2521}
2522
2523define <16 x i8> @eval167(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2524; CHECK-LABEL: eval167:
2525; CHECK:       # %bb.0: # %entry
2526; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 2
2527; CHECK-NEXT:    veval %v0, %v0, %v26, %v24, 31
2528; CHECK-NEXT:    veval %v24, %v0, %v28, %v24, 143
2529; CHECK-NEXT:    br %r14
2530entry:
2531  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2532  %0 = or <16 x i8> %src3, %src1
2533  %1 = xor <16 x i8> %0, splat(i8 -1)
2534  %and10 = and <16 x i8> %not1, %src1
2535  %and11 = and <16 x i8> %and10, %src3
2536  %and13 = and <16 x i8> %src2, %src1
2537  %or8 = or <16 x i8> %and11, %and13
2538  %or19 = or <16 x i8> %or8, %1
2539  ret <16 x i8> %or19
2540}
2541
2542define <16 x i8> @eval168(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2543; CHECK-LABEL: eval168:
2544; CHECK:       # %bb.0: # %entry
2545; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 168
2546; CHECK-NEXT:    br %r14
2547entry:
2548  %0 = and <16 x i8> %src2, %src1
2549  %1 = or <16 x i8> %0, %src3
2550  %or13 = xor <16 x i8> %1, splat(i8 -1)
2551  ret <16 x i8> %or13
2552}
2553
2554define <16 x i8> @eval169(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2555; CHECK-LABEL: eval169:
2556; CHECK:       # %bb.0: # %entry
2557; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 169
2558; CHECK-NEXT:    br %r14
2559entry:
2560  %0 = and <16 x i8> %src2, %src1
2561  %1 = xor <16 x i8> %0, %src3
2562  %or16 = xor <16 x i8> %1, splat(i8 -1)
2563  ret <16 x i8> %or16
2564}
2565
2566define <16 x i8> @eval170(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2567; CHECK-LABEL: eval170:
2568; CHECK:       # %bb.0: # %entry
2569; CHECK-NEXT:    vno %v24, %v28, %v28
2570; CHECK-NEXT:    br %r14
2571entry:
2572  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2573  ret <16 x i8> %not2
2574}
2575
2576define <16 x i8> @eval171(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2577; CHECK-LABEL: eval171:
2578; CHECK:       # %bb.0: # %entry
2579; CHECK-NEXT:    voc %v0, %v26, %v28
2580; CHECK-NEXT:    veval %v24, %v0, %v24, %v28, 139
2581; CHECK-NEXT:    br %r14
2582entry:
2583  %0 = or <16 x i8> %src3, %src1
2584  %1 = xor <16 x i8> %0, splat(i8 -1)
2585  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2586  %and1238 = or <16 x i8> %src3.not, %src2
2587  %2 = and <16 x i8> %and1238, %src1
2588  %or20 = or <16 x i8> %2, %1
2589  ret <16 x i8> %or20
2590}
2591
2592define <16 x i8> @eval172(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2593; CHECK-LABEL: eval172:
2594; CHECK:       # %bb.0: # %entry
2595; CHECK-NEXT:    vo %v0, %v28, %v24
2596; CHECK-NEXT:    veval %v24, %v24, %v26, %v0, 174
2597; CHECK-NEXT:    br %r14
2598entry:
2599  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2600  %0 = or <16 x i8> %src3, %src1
2601  %1 = xor <16 x i8> %0, splat(i8 -1)
2602  %and10 = and <16 x i8> %not1, %src1
2603  %or17 = or <16 x i8> %and10, %1
2604  ret <16 x i8> %or17
2605}
2606
2607define <16 x i8> @eval173(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2608; CHECK-LABEL: eval173:
2609; CHECK:       # %bb.0: # %entry
2610; CHECK-NEXT:    veval %v0, %v26, %v24, %v28, 1
2611; CHECK-NEXT:    veval %v0, %v0, %v24, %v26, 47
2612; CHECK-NEXT:    veval %v24, %v0, %v28, %v24, 143
2613; CHECK-NEXT:    br %r14
2614entry:
2615  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2616  %0 = or <16 x i8> %src3, %src1
2617  %1 = xor <16 x i8> %0, splat(i8 -1)
2618  %and10 = and <16 x i8> %not1, %src1
2619  %and18 = and <16 x i8> %src2, %src1
2620  %and19 = and <16 x i8> %and18, %src3
2621  %or8 = or <16 x i8> %and19, %and10
2622  %or20 = or <16 x i8> %or8, %1
2623  ret <16 x i8> %or20
2624}
2625
2626define <16 x i8> @eval174(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2627; CHECK-LABEL: eval174:
2628; CHECK:       # %bb.0: # %entry
2629; CHECK-NEXT:    vo %v0, %v28, %v24
2630; CHECK-NEXT:    vn %v1, %v28, %v26
2631; CHECK-NEXT:    veval %v24, %v24, %v1, %v0, 174
2632; CHECK-NEXT:    br %r14
2633entry:
2634  %0 = or <16 x i8> %src3, %src1
2635  %1 = xor <16 x i8> %0, splat(i8 -1)
2636  %and1039.demorgan = and <16 x i8> %src3, %src2
2637  %and1039 = xor <16 x i8> %and1039.demorgan, splat(i8 -1)
2638  %2 = and <16 x i8> %and1039, %src1
2639  %or21 = or <16 x i8> %2, %1
2640  ret <16 x i8> %or21
2641}
2642
2643define <16 x i8> @eval175(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2644; CHECK-LABEL: eval175:
2645; CHECK:       # %bb.0: # %entry
2646; CHECK-NEXT:    voc %v24, %v24, %v28
2647; CHECK-NEXT:    br %r14
2648entry:
2649  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2650  %or24 = or <16 x i8> %src3.not, %src1
2651  ret <16 x i8> %or24
2652}
2653
2654define <16 x i8> @eval176(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2655; CHECK-LABEL: eval176:
2656; CHECK:       # %bb.0: # %entry
2657; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 138
2658; CHECK-NEXT:    br %r14
2659entry:
2660  %not = xor <16 x i8> %src1, splat(i8 -1)
2661  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2662  %and522 = or <16 x i8> %src3.not, %src2
2663  %or12 = and <16 x i8> %and522, %not
2664  ret <16 x i8> %or12
2665}
2666
2667define <16 x i8> @eval177(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2668; CHECK-LABEL: eval177:
2669; CHECK:       # %bb.0: # %entry
2670; CHECK-NEXT:    voc %v0, %v26, %v28
2671; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
2672; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 47
2673; CHECK-NEXT:    br %r14
2674entry:
2675  %not = xor <16 x i8> %src1, splat(i8 -1)
2676  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2677  %and529 = or <16 x i8> %src3.not, %src2
2678  %or12 = and <16 x i8> %and529, %not
2679  %and13 = and <16 x i8> %src2, %src1
2680  %and14 = and <16 x i8> %and13, %src3
2681  %or15 = or <16 x i8> %or12, %and14
2682  ret <16 x i8> %or15
2683}
2684
2685define <16 x i8> @eval178(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2686; CHECK-LABEL: eval178:
2687; CHECK:       # %bb.0: # %entry
2688; CHECK-NEXT:    vn %v1, %v26, %v24
2689; CHECK-NEXT:    veval %v0, %v26, %v28, %v24, 138
2690; CHECK-NEXT:    veval %v24, %v0, %v1, %v28, 47
2691; CHECK-NEXT:    br %r14
2692entry:
2693  %not = xor <16 x i8> %src1, splat(i8 -1)
2694  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2695  %and530 = or <16 x i8> %not2, %src2
2696  %or12 = and <16 x i8> %and530, %not
2697  %0 = and <16 x i8> %src2, %src1
2698  %and15 = and <16 x i8> %0, %not2
2699  %or16 = or <16 x i8> %or12, %and15
2700  ret <16 x i8> %or16
2701}
2702
2703define <16 x i8> @eval179(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2704; CHECK-LABEL: eval179:
2705; CHECK:       # %bb.0: # %entry
2706; CHECK-NEXT:    voc %v0, %v26, %v28
2707; CHECK-NEXT:    vsel %v24, %v26, %v0, %v24
2708; CHECK-NEXT:    br %r14
2709entry:
2710  %not = xor <16 x i8> %src1, splat(i8 -1)
2711  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2712  %and537 = or <16 x i8> %src3.not, %src2
2713  %or12 = and <16 x i8> %and537, %not
2714  %and13 = and <16 x i8> %src2, %src1
2715  %or19 = or <16 x i8> %or12, %and13
2716  ret <16 x i8> %or19
2717}
2718
2719define <16 x i8> @eval180(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2720; CHECK-LABEL: eval180:
2721; CHECK:       # %bb.0: # %entry
2722; CHECK-NEXT:    voc %v0, %v26, %v28
2723; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
2724; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 47
2725; CHECK-NEXT:    br %r14
2726entry:
2727  %not = xor <16 x i8> %src1, splat(i8 -1)
2728  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2729  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2730  %and530 = or <16 x i8> %src3.not, %src2
2731  %or12 = and <16 x i8> %and530, %not
2732  %and14 = and <16 x i8> %not1, %src1
2733  %and15 = and <16 x i8> %and14, %src3
2734  %or16 = or <16 x i8> %or12, %and15
2735  ret <16 x i8> %or16
2736}
2737
2738define <16 x i8> @eval181(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2739; CHECK-LABEL: eval181:
2740; CHECK:       # %bb.0: # %entry
2741; CHECK-NEXT:    voc %v0, %v26, %v28
2742; CHECK-NEXT:    vsel %v24, %v28, %v0, %v24
2743; CHECK-NEXT:    br %r14
2744entry:
2745  %not = xor <16 x i8> %src1, splat(i8 -1)
2746  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2747  %and537 = or <16 x i8> %src3.not, %src2
2748  %or12 = and <16 x i8> %and537, %not
2749  %0 = and <16 x i8> %src3, %src1
2750  %or19 = or <16 x i8> %or12, %0
2751  ret <16 x i8> %or19
2752}
2753
2754define <16 x i8> @eval182(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2755; CHECK-LABEL: eval182:
2756; CHECK:       # %bb.0: # %entry
2757; CHECK-NEXT:    voc %v0, %v26, %v28
2758; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
2759; CHECK-NEXT:    veval %v0, %v1, %v0, %v24, 47
2760; CHECK-NEXT:    vn %v1, %v26, %v24
2761; CHECK-NEXT:    veval %v24, %v0, %v1, %v28, 47
2762; CHECK-NEXT:    br %r14
2763entry:
2764  %not = xor <16 x i8> %src1, splat(i8 -1)
2765  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2766  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2767  %and538 = or <16 x i8> %not2, %src2
2768  %or12 = and <16 x i8> %and538, %not
2769  %and14 = and <16 x i8> %not1, %src1
2770  %and15 = and <16 x i8> %and14, %src3
2771  %or16 = or <16 x i8> %or12, %and15
2772  %0 = and <16 x i8> %src2, %src1
2773  %and19 = and <16 x i8> %0, %not2
2774  %or20 = or <16 x i8> %or16, %and19
2775  ret <16 x i8> %or20
2776}
2777
2778define <16 x i8> @eval183(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2779; CHECK-LABEL: eval183:
2780; CHECK:       # %bb.0: # %entry
2781; CHECK-NEXT:    voc %v0, %v26, %v28
2782; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
2783; CHECK-NEXT:    veval %v1, %v1, %v26, %v24, 31
2784; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 47
2785; CHECK-NEXT:    br %r14
2786entry:
2787  %not = xor <16 x i8> %src1, splat(i8 -1)
2788  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2789  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2790  %and545 = or <16 x i8> %src3.not, %src2
2791  %or12 = and <16 x i8> %and545, %not
2792  %and14 = and <16 x i8> %not1, %src1
2793  %and15 = and <16 x i8> %and14, %src3
2794  %and17 = and <16 x i8> %src2, %src1
2795  %or16 = or <16 x i8> %and15, %and17
2796  %or23 = or <16 x i8> %or16, %or12
2797  ret <16 x i8> %or23
2798}
2799
2800define <16 x i8> @eval184(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2801; CHECK-LABEL: eval184:
2802; CHECK:       # %bb.0: # %entry
2803; CHECK-NEXT:    voc %v0, %v26, %v28
2804; CHECK-NEXT:    vno %v1, %v28, %v26
2805; CHECK-NEXT:    vsel %v24, %v1, %v0, %v24
2806; CHECK-NEXT:    br %r14
2807entry:
2808  %not = xor <16 x i8> %src1, splat(i8 -1)
2809  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2810  %and531 = or <16 x i8> %src3.not, %src2
2811  %or12 = and <16 x i8> %and531, %not
2812  %0 = or <16 x i8> %src3, %src2
2813  %1 = xor <16 x i8> %0, splat(i8 -1)
2814  %and16 = and <16 x i8> %1, %src1
2815  %or17 = or <16 x i8> %or12, %and16
2816  ret <16 x i8> %or17
2817}
2818
2819define <16 x i8> @eval185(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2820; CHECK-LABEL: eval185:
2821; CHECK:       # %bb.0: # %entry
2822; CHECK-NEXT:    voc %v0, %v26, %v28
2823; CHECK-NEXT:    vnx %v1, %v28, %v26
2824; CHECK-NEXT:    vsel %v24, %v1, %v0, %v24
2825; CHECK-NEXT:    br %r14
2826entry:
2827  %not = xor <16 x i8> %src1, splat(i8 -1)
2828  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2829  %and538 = or <16 x i8> %src3.not, %src2
2830  %or12 = and <16 x i8> %and538, %not
2831  %0 = xor <16 x i8> %src3, %src2
2832  %1 = xor <16 x i8> %0, splat(i8 -1)
2833  %or17 = and <16 x i8> %1, %src1
2834  %or20 = or <16 x i8> %or17, %or12
2835  ret <16 x i8> %or20
2836}
2837
2838define <16 x i8> @eval186(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2839; CHECK-LABEL: eval186:
2840; CHECK:       # %bb.0: # %entry
2841; CHECK-NEXT:    vno %v0, %v28, %v28
2842; CHECK-NEXT:    voc %v1, %v26, %v28
2843; CHECK-NEXT:    vsel %v24, %v0, %v1, %v24
2844; CHECK-NEXT:    br %r14
2845entry:
2846  %not = xor <16 x i8> %src1, splat(i8 -1)
2847  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2848  %and539 = or <16 x i8> %not2, %src2
2849  %or12 = and <16 x i8> %and539, %not
2850  %0 = and <16 x i8> %not2, %src1
2851  %or21 = or <16 x i8> %or12, %0
2852  ret <16 x i8> %or21
2853}
2854
2855define <16 x i8> @eval187(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2856; CHECK-LABEL: eval187:
2857; CHECK:       # %bb.0: # %entry
2858; CHECK-NEXT:    voc %v24, %v26, %v28
2859; CHECK-NEXT:    br %r14
2860entry:
2861  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2862  %and546 = or <16 x i8> %src3.not, %src2
2863  ret <16 x i8> %and546
2864}
2865
2866define <16 x i8> @eval188(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2867; CHECK-LABEL: eval188:
2868; CHECK:       # %bb.0: # %entry
2869; CHECK-NEXT:    vno %v0, %v26, %v26
2870; CHECK-NEXT:    voc %v1, %v26, %v28
2871; CHECK-NEXT:    vsel %v24, %v0, %v1, %v24
2872; CHECK-NEXT:    br %r14
2873entry:
2874  %not = xor <16 x i8> %src1, splat(i8 -1)
2875  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2876  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2877  %and539 = or <16 x i8> %src3.not, %src2
2878  %or12 = and <16 x i8> %and539, %not
2879  %and14 = and <16 x i8> %not1, %src1
2880  %or21 = or <16 x i8> %or12, %and14
2881  ret <16 x i8> %or21
2882}
2883
2884define <16 x i8> @eval189(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2885; CHECK-LABEL: eval189:
2886; CHECK:       # %bb.0: # %entry
2887; CHECK-NEXT:    voc %v0, %v26, %v28
2888; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
2889; CHECK-NEXT:    veval %v1, %v1, %v24, %v26, 47
2890; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 47
2891; CHECK-NEXT:    br %r14
2892entry:
2893  %not = xor <16 x i8> %src1, splat(i8 -1)
2894  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2895  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2896  %and546 = or <16 x i8> %src3.not, %src2
2897  %or12 = and <16 x i8> %and546, %not
2898  %and14 = and <16 x i8> %not1, %src1
2899  %and22 = and <16 x i8> %src2, %src1
2900  %and23 = and <16 x i8> %and22, %src3
2901  %or21 = or <16 x i8> %and23, %and14
2902  %or24 = or <16 x i8> %or21, %or12
2903  ret <16 x i8> %or24
2904}
2905
2906define <16 x i8> @eval190(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2907; CHECK-LABEL: eval190:
2908; CHECK:       # %bb.0: # %entry
2909; CHECK-NEXT:    voc %v0, %v26, %v28
2910; CHECK-NEXT:    vnn %v1, %v28, %v26
2911; CHECK-NEXT:    vsel %v24, %v1, %v0, %v24
2912; CHECK-NEXT:    br %r14
2913entry:
2914  %not = xor <16 x i8> %src1, splat(i8 -1)
2915  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2916  %and547 = or <16 x i8> %src3.not, %src2
2917  %or12 = and <16 x i8> %and547, %not
2918  %and1448.demorgan = and <16 x i8> %src3, %src2
2919  %and1448 = xor <16 x i8> %and1448.demorgan, splat(i8 -1)
2920  %0 = and <16 x i8> %and1448, %src1
2921  %or25 = or <16 x i8> %or12, %0
2922  ret <16 x i8> %or25
2923}
2924
2925define <16 x i8> @eval191(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2926; CHECK-LABEL: eval191:
2927; CHECK:       # %bb.0: # %entry
2928; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 191
2929; CHECK-NEXT:    br %r14
2930entry:
2931  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
2932  %and554 = or <16 x i8> %src2, %src1
2933  %or28 = or <16 x i8> %and554, %src3.not
2934  ret <16 x i8> %or28
2935}
2936
2937define <16 x i8> @eval192(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2938; CHECK-LABEL: eval192:
2939; CHECK:       # %bb.0: # %entry
2940; CHECK-NEXT:    vno %v24, %v26, %v24
2941; CHECK-NEXT:    br %r14
2942entry:
2943  %and.demorgan = or <16 x i8> %src2, %src1
2944  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
2945  ret <16 x i8> %and
2946}
2947
2948define <16 x i8> @eval193(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2949; CHECK-LABEL: eval193:
2950; CHECK:       # %bb.0: # %entry
2951; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 137
2952; CHECK-NEXT:    br %r14
2953entry:
2954  %and.demorgan = or <16 x i8> %src2, %src1
2955  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
2956  %0 = and <16 x i8> %src1, %src3
2957  %and10 = and <16 x i8> %0, %src2
2958  %or11 = or <16 x i8> %and10, %and
2959  ret <16 x i8> %or11
2960}
2961
2962define <16 x i8> @eval194(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2963; CHECK-LABEL: eval194:
2964; CHECK:       # %bb.0: # %entry
2965; CHECK-NEXT:    vno %v0, %v28, %v28
2966; CHECK-NEXT:    veval %v24, %v0, %v24, %v26, 137
2967; CHECK-NEXT:    br %r14
2968entry:
2969  %and.demorgan = or <16 x i8> %src2, %src1
2970  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
2971  %not2 = xor <16 x i8> %src3, splat(i8 -1)
2972  %0 = and <16 x i8> %not2, %src1
2973  %and11 = and <16 x i8> %0, %src2
2974  %or12 = or <16 x i8> %and11, %and
2975  ret <16 x i8> %or12
2976}
2977
2978define <16 x i8> @eval195(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2979; CHECK-LABEL: eval195:
2980; CHECK:       # %bb.0: # %entry
2981; CHECK-NEXT:    vnx %v24, %v24, %v26
2982; CHECK-NEXT:    br %r14
2983entry:
2984  %0 = xor <16 x i8> %src1, %src2
2985  %or15 = xor <16 x i8> %0, splat(i8 -1)
2986  ret <16 x i8> %or15
2987}
2988
2989define <16 x i8> @eval196(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
2990; CHECK-LABEL: eval196:
2991; CHECK:       # %bb.0: # %entry
2992; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 138
2993; CHECK-NEXT:    br %r14
2994entry:
2995  %not = xor <16 x i8> %src1, splat(i8 -1)
2996  %not1 = xor <16 x i8> %src2, splat(i8 -1)
2997  %and22 = or <16 x i8> %not, %src3
2998  %or12 = and <16 x i8> %and22, %not1
2999  ret <16 x i8> %or12
3000}
3001
3002define <16 x i8> @eval197(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3003; CHECK-LABEL: eval197:
3004; CHECK:       # %bb.0: # %entry
3005; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 139
3006; CHECK-NEXT:    br %r14
3007entry:
3008  %and.demorgan = or <16 x i8> %src2, %src1
3009  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
3010  %0 = and <16 x i8> %src3, %src1
3011  %or15 = or <16 x i8> %0, %and
3012  ret <16 x i8> %or15
3013}
3014
3015define <16 x i8> @eval198(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3016; CHECK-LABEL: eval198:
3017; CHECK:       # %bb.0: # %entry
3018; CHECK-NEXT:    vno %v0, %v26, %v26
3019; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
3020; CHECK-NEXT:    veval %v0, %v1, %v0, %v24, 47
3021; CHECK-NEXT:    vnc %v1, %v24, %v28
3022; CHECK-NEXT:    veval %v24, %v0, %v1, %v26, 31
3023; CHECK-NEXT:    br %r14
3024entry:
3025  %not = xor <16 x i8> %src1, splat(i8 -1)
3026  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3027  %and = and <16 x i8> %not1, %not
3028  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3029  %and10 = and <16 x i8> %not1, %src1
3030  %and11 = and <16 x i8> %and10, %src3
3031  %or12 = or <16 x i8> %and11, %and
3032  %0 = and <16 x i8> %not2, %src1
3033  %and15 = and <16 x i8> %0, %src2
3034  %or16 = or <16 x i8> %or12, %and15
3035  ret <16 x i8> %or16
3036}
3037
3038define <16 x i8> @eval199(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3039; CHECK-LABEL: eval199:
3040; CHECK:       # %bb.0: # %entry
3041; CHECK-NEXT:    voc %v0, %v28, %v24
3042; CHECK-NEXT:    vsel %v24, %v24, %v0, %v26
3043; CHECK-NEXT:    br %r14
3044entry:
3045  %not = xor <16 x i8> %src1, splat(i8 -1)
3046  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3047  %and37 = or <16 x i8> %not, %src3
3048  %or12 = and <16 x i8> %and37, %not1
3049  %and13 = and <16 x i8> %src2, %src1
3050  %or19 = or <16 x i8> %or12, %and13
3051  ret <16 x i8> %or19
3052}
3053
3054define <16 x i8> @eval200(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3055; CHECK-LABEL: eval200:
3056; CHECK:       # %bb.0: # %entry
3057; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 168
3058; CHECK-NEXT:    br %r14
3059entry:
3060  %0 = and <16 x i8> %src3, %src1
3061  %1 = or <16 x i8> %0, %src2
3062  %or13 = xor <16 x i8> %1, splat(i8 -1)
3063  ret <16 x i8> %or13
3064}
3065
3066define <16 x i8> @eval201(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3067; CHECK-LABEL: eval201:
3068; CHECK:       # %bb.0: # %entry
3069; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 169
3070; CHECK-NEXT:    br %r14
3071entry:
3072  %0 = and <16 x i8> %src3, %src1
3073  %1 = xor <16 x i8> %0, %src2
3074  %or16 = xor <16 x i8> %1, splat(i8 -1)
3075  ret <16 x i8> %or16
3076}
3077
3078define <16 x i8> @eval202(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3079; CHECK-LABEL: eval202:
3080; CHECK:       # %bb.0: # %entry
3081; CHECK-NEXT:    vn %v0, %v28, %v24
3082; CHECK-NEXT:    vnc %v1, %v24, %v28
3083; CHECK-NEXT:    veval %v24, %v1, %v26, %v0, 139
3084; CHECK-NEXT:    br %r14
3085entry:
3086  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3087  %0 = and <16 x i8> %src3, %src1
3088  %1 = or <16 x i8> %0, %src2
3089  %or13 = xor <16 x i8> %1, splat(i8 -1)
3090  %2 = and <16 x i8> %not2, %src1
3091  %and16 = and <16 x i8> %2, %src2
3092  %or17 = or <16 x i8> %and16, %or13
3093  ret <16 x i8> %or17
3094}
3095
3096define <16 x i8> @eval203(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3097; CHECK-LABEL: eval203:
3098; CHECK:       # %bb.0: # %entry
3099; CHECK-NEXT:    vn %v0, %v28, %v24
3100; CHECK-NEXT:    veval %v24, %v24, %v26, %v0, 139
3101; CHECK-NEXT:    br %r14
3102entry:
3103  %0 = and <16 x i8> %src3, %src1
3104  %1 = or <16 x i8> %0, %src2
3105  %or13 = xor <16 x i8> %1, splat(i8 -1)
3106  %and14 = and <16 x i8> %src2, %src1
3107  %or20 = or <16 x i8> %and14, %or13
3108  ret <16 x i8> %or20
3109}
3110
3111define <16 x i8> @eval204(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3112; CHECK-LABEL: eval204:
3113; CHECK:       # %bb.0: # %entry
3114; CHECK-NEXT:    vno %v24, %v26, %v26
3115; CHECK-NEXT:    br %r14
3116entry:
3117  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3118  ret <16 x i8> %not1
3119}
3120
3121define <16 x i8> @eval205(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3122; CHECK-LABEL: eval205:
3123; CHECK:       # %bb.0: # %entry
3124; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 171
3125; CHECK-NEXT:    br %r14
3126entry:
3127  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3128  %0 = and <16 x i8> %src3, %src1
3129  %or20 = or <16 x i8> %0, %not1
3130  ret <16 x i8> %or20
3131}
3132
3133define <16 x i8> @eval206(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3134; CHECK-LABEL: eval206:
3135; CHECK:       # %bb.0: # %entry
3136; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 174
3137; CHECK-NEXT:    br %r14
3138entry:
3139  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3140  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3141  %0 = and <16 x i8> %not2, %src1
3142  %or21 = or <16 x i8> %0, %not1
3143  ret <16 x i8> %or21
3144}
3145
3146define <16 x i8> @eval207(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3147; CHECK-LABEL: eval207:
3148; CHECK:       # %bb.0: # %entry
3149; CHECK-NEXT:    voc %v24, %v24, %v26
3150; CHECK-NEXT:    br %r14
3151entry:
3152  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3153  %or24 = or <16 x i8> %not1, %src1
3154  ret <16 x i8> %or24
3155}
3156
3157define <16 x i8> @eval208(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3158; CHECK-LABEL: eval208:
3159; CHECK:       # %bb.0: # %entry
3160; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 138
3161; CHECK-NEXT:    br %r14
3162entry:
3163  %not = xor <16 x i8> %src1, splat(i8 -1)
3164  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3165  %and1122 = or <16 x i8> %not1, %src3
3166  %or12 = and <16 x i8> %and1122, %not
3167  ret <16 x i8> %or12
3168}
3169
3170define <16 x i8> @eval209(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3171; CHECK-LABEL: eval209:
3172; CHECK:       # %bb.0: # %entry
3173; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 139
3174; CHECK-NEXT:    br %r14
3175entry:
3176  %and.demorgan = or <16 x i8> %src2, %src1
3177  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
3178  %0 = and <16 x i8> %src3, %src2
3179  %or15 = or <16 x i8> %0, %and
3180  ret <16 x i8> %or15
3181}
3182
3183define <16 x i8> @eval210(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3184; CHECK-LABEL: eval210:
3185; CHECK:       # %bb.0: # %entry
3186; CHECK-NEXT:    vno %v0, %v26, %v26
3187; CHECK-NEXT:    veval %v1, %v26, %v28, %v24, 2
3188; CHECK-NEXT:    veval %v0, %v1, %v0, %v24, 47
3189; CHECK-NEXT:    vnc %v1, %v24, %v28
3190; CHECK-NEXT:    veval %v24, %v0, %v1, %v26, 31
3191; CHECK-NEXT:    br %r14
3192entry:
3193  %not = xor <16 x i8> %src1, splat(i8 -1)
3194  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3195  %and = and <16 x i8> %not1, %not
3196  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3197  %and10 = and <16 x i8> %not, %src2
3198  %and11 = and <16 x i8> %and10, %src3
3199  %or12 = or <16 x i8> %and11, %and
3200  %0 = and <16 x i8> %not2, %src1
3201  %and15 = and <16 x i8> %0, %src2
3202  %or16 = or <16 x i8> %or12, %and15
3203  ret <16 x i8> %or16
3204}
3205
3206define <16 x i8> @eval211(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3207; CHECK-LABEL: eval211:
3208; CHECK:       # %bb.0: # %entry
3209; CHECK-NEXT:    voc %v0, %v28, %v26
3210; CHECK-NEXT:    vsel %v24, %v26, %v0, %v24
3211; CHECK-NEXT:    br %r14
3212entry:
3213  %not = xor <16 x i8> %src1, splat(i8 -1)
3214  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3215  %and1137 = or <16 x i8> %not1, %src3
3216  %or12 = and <16 x i8> %and1137, %not
3217  %and13 = and <16 x i8> %src2, %src1
3218  %or19 = or <16 x i8> %or12, %and13
3219  ret <16 x i8> %or19
3220}
3221
3222define <16 x i8> @eval212(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3223; CHECK-LABEL: eval212:
3224; CHECK:       # %bb.0: # %entry
3225; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 142
3226; CHECK-NEXT:    br %r14
3227entry:
3228  %and.demorgan = or <16 x i8> %src2, %src1
3229  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
3230  %0 = xor <16 x i8> %src2, %src1
3231  %1 = and <16 x i8> %0, %src3
3232  %or16 = or <16 x i8> %1, %and
3233  ret <16 x i8> %or16
3234}
3235
3236define <16 x i8> @eval213(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3237; CHECK-LABEL: eval213:
3238; CHECK:       # %bb.0: # %entry
3239; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 143
3240; CHECK-NEXT:    br %r14
3241entry:
3242  %and.demorgan = or <16 x i8> %src2, %src1
3243  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
3244  %or19 = or <16 x i8> %and, %src3
3245  ret <16 x i8> %or19
3246}
3247
3248define <16 x i8> @eval214(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3249; CHECK-LABEL: eval214:
3250; CHECK:       # %bb.0: # %entry
3251; CHECK-NEXT:    vo %v0, %v26, %v24
3252; CHECK-NEXT:    veval %v1, %v28, %v26, %v24, 6
3253; CHECK-NEXT:    veval %v2, %v24, %v26, %v28, 2
3254; CHECK-NEXT:    veval %v24, %v1, %v2, %v0, 191
3255; CHECK-NEXT:    br %r14
3256entry:
3257  %and.demorgan = or <16 x i8> %src2, %src1
3258  %and = xor <16 x i8> %and.demorgan, splat(i8 -1)
3259  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3260  %0 = xor <16 x i8> %src2, %src1
3261  %1 = and <16 x i8> %0, %src3
3262  %or16 = or <16 x i8> %1, %and
3263  %2 = and <16 x i8> %not2, %src1
3264  %and19 = and <16 x i8> %2, %src2
3265  %or20 = or <16 x i8> %or16, %and19
3266  ret <16 x i8> %or20
3267}
3268
3269define <16 x i8> @eval215(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3270; CHECK-LABEL: eval215:
3271; CHECK:       # %bb.0: # %entry
3272; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 159
3273; CHECK-NEXT:    br %r14
3274entry:
3275  %0 = xor <16 x i8> %src2, %src1
3276  %or16 = xor <16 x i8> %0, splat(i8 -1)
3277  %or23 = or <16 x i8> %or16, %src3
3278  ret <16 x i8> %or23
3279}
3280
3281define <16 x i8> @eval216(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3282; CHECK-LABEL: eval216:
3283; CHECK:       # %bb.0: # %entry
3284; CHECK-NEXT:    vno %v0, %v26, %v26
3285; CHECK-NEXT:    veval %v1, %v26, %v28, %v24, 2
3286; CHECK-NEXT:    veval %v0, %v1, %v0, %v24, 47
3287; CHECK-NEXT:    vo %v1, %v28, %v26
3288; CHECK-NEXT:    veval %v24, %v0, %v24, %v1, 47
3289; CHECK-NEXT:    br %r14
3290entry:
3291  %not = xor <16 x i8> %src1, splat(i8 -1)
3292  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3293  %and = and <16 x i8> %not1, %not
3294  %and10 = and <16 x i8> %not, %src2
3295  %and11 = and <16 x i8> %and10, %src3
3296  %or12 = or <16 x i8> %and11, %and
3297  %0 = or <16 x i8> %src3, %src2
3298  %1 = xor <16 x i8> %0, splat(i8 -1)
3299  %and16 = and <16 x i8> %1, %src1
3300  %or17 = or <16 x i8> %or12, %and16
3301  ret <16 x i8> %or17
3302}
3303
3304define <16 x i8> @eval217(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3305; CHECK-LABEL: eval217:
3306; CHECK:       # %bb.0: # %entry
3307; CHECK-NEXT:    voc %v0, %v28, %v26
3308; CHECK-NEXT:    vnx %v1, %v26, %v28
3309; CHECK-NEXT:    vsel %v24, %v1, %v0, %v24
3310; CHECK-NEXT:    br %r14
3311entry:
3312  %not = xor <16 x i8> %src1, splat(i8 -1)
3313  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3314  %and1138 = or <16 x i8> %not1, %src3
3315  %or12 = and <16 x i8> %and1138, %not
3316  %0 = xor <16 x i8> %src3, %src2
3317  %and1939 = xor <16 x i8> %0, splat(i8 -1)
3318  %1 = and <16 x i8> %and1939, %src1
3319  %or20 = or <16 x i8> %or12, %1
3320  ret <16 x i8> %or20
3321}
3322
3323define <16 x i8> @eval218(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3324; CHECK-LABEL: eval218:
3325; CHECK:       # %bb.0: # %entry
3326; CHECK-NEXT:    vno %v0, %v26, %v26
3327; CHECK-NEXT:    veval %v1, %v26, %v28, %v24, 2
3328; CHECK-NEXT:    veval %v0, %v1, %v0, %v24, 47
3329; CHECK-NEXT:    veval %v24, %v0, %v24, %v28, 47
3330; CHECK-NEXT:    br %r14
3331entry:
3332  %not = xor <16 x i8> %src1, splat(i8 -1)
3333  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3334  %and = and <16 x i8> %not1, %not
3335  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3336  %and10 = and <16 x i8> %not, %src2
3337  %and11 = and <16 x i8> %and10, %src3
3338  %or12 = or <16 x i8> %and11, %and
3339  %0 = and <16 x i8> %not2, %src1
3340  %or21 = or <16 x i8> %or12, %0
3341  ret <16 x i8> %or21
3342}
3343
3344define <16 x i8> @eval219(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3345; CHECK-LABEL: eval219:
3346; CHECK:       # %bb.0: # %entry
3347; CHECK-NEXT:    vno %v0, %v26, %v26
3348; CHECK-NEXT:    veval %v1, %v26, %v28, %v24, 2
3349; CHECK-NEXT:    veval %v0, %v1, %v0, %v24, 47
3350; CHECK-NEXT:    voc %v1, %v26, %v28
3351; CHECK-NEXT:    veval %v24, %v0, %v1, %v24, 31
3352; CHECK-NEXT:    br %r14
3353entry:
3354  %not = xor <16 x i8> %src1, splat(i8 -1)
3355  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3356  %and = and <16 x i8> %not1, %not
3357  %and10 = and <16 x i8> %not, %src2
3358  %and11 = and <16 x i8> %and10, %src3
3359  %or12 = or <16 x i8> %and11, %and
3360  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
3361  %and1646 = or <16 x i8> %src3.not, %src2
3362  %0 = and <16 x i8> %and1646, %src1
3363  %or24 = or <16 x i8> %or12, %0
3364  ret <16 x i8> %or24
3365}
3366
3367define <16 x i8> @eval220(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3368; CHECK-LABEL: eval220:
3369; CHECK:       # %bb.0: # %entry
3370; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 174
3371; CHECK-NEXT:    br %r14
3372entry:
3373  %not = xor <16 x i8> %src1, splat(i8 -1)
3374  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3375  %0 = and <16 x i8> %not, %src3
3376  %or21 = or <16 x i8> %0, %not1
3377  ret <16 x i8> %or21
3378}
3379
3380define <16 x i8> @eval221(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3381; CHECK-LABEL: eval221:
3382; CHECK:       # %bb.0: # %entry
3383; CHECK-NEXT:    voc %v24, %v28, %v26
3384; CHECK-NEXT:    br %r14
3385entry:
3386  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3387  %or24 = or <16 x i8> %not1, %src3
3388  ret <16 x i8> %or24
3389}
3390
3391define <16 x i8> @eval222(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3392; CHECK-LABEL: eval222:
3393; CHECK:       # %bb.0: # %entry
3394; CHECK-NEXT:    vnc %v0, %v26, %v24
3395; CHECK-NEXT:    veval %v0, %v0, %v28, %v26, 171
3396; CHECK-NEXT:    veval %v24, %v0, %v24, %v28, 47
3397; CHECK-NEXT:    br %r14
3398entry:
3399  %not = xor <16 x i8> %src1, splat(i8 -1)
3400  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3401  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3402  %and10 = and <16 x i8> %not, %src2
3403  %and11 = and <16 x i8> %and10, %src3
3404  %or21 = or <16 x i8> %and11, %not1
3405  %0 = and <16 x i8> %not2, %src1
3406  %or25 = or <16 x i8> %or21, %0
3407  ret <16 x i8> %or25
3408}
3409
3410define <16 x i8> @eval223(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3411; CHECK-LABEL: eval223:
3412; CHECK:       # %bb.0: # %entry
3413; CHECK-NEXT:    veval %v24, %v24, %v28, %v26, 191
3414; CHECK-NEXT:    br %r14
3415entry:
3416  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3417  %or21 = or <16 x i8> %not1, %src1
3418  %or28 = or <16 x i8> %or21, %src3
3419  ret <16 x i8> %or28
3420}
3421
3422define <16 x i8> @eval224(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3423; CHECK-LABEL: eval224:
3424; CHECK:       # %bb.0: # %entry
3425; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 168
3426; CHECK-NEXT:    br %r14
3427entry:
3428  %0 = and <16 x i8> %src3, %src2
3429  %1 = or <16 x i8> %0, %src1
3430  %or13 = xor <16 x i8> %1, splat(i8 -1)
3431  ret <16 x i8> %or13
3432}
3433
3434define <16 x i8> @eval225(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3435; CHECK-LABEL: eval225:
3436; CHECK:       # %bb.0: # %entry
3437; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 169
3438; CHECK-NEXT:    br %r14
3439entry:
3440  %0 = and <16 x i8> %src3, %src2
3441  %1 = xor <16 x i8> %0, %src1
3442  %or16 = xor <16 x i8> %1, splat(i8 -1)
3443  ret <16 x i8> %or16
3444}
3445
3446define <16 x i8> @eval226(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3447; CHECK-LABEL: eval226:
3448; CHECK:       # %bb.0: # %entry
3449; CHECK-NEXT:    vn %v0, %v28, %v26
3450; CHECK-NEXT:    veval %v1, %v24, %v26, %v28, 2
3451; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 143
3452; CHECK-NEXT:    br %r14
3453entry:
3454  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3455  %0 = and <16 x i8> %src3, %src2
3456  %1 = or <16 x i8> %0, %src1
3457  %or13 = xor <16 x i8> %1, splat(i8 -1)
3458  %2 = and <16 x i8> %not2, %src1
3459  %and16 = and <16 x i8> %2, %src2
3460  %or17 = or <16 x i8> %and16, %or13
3461  ret <16 x i8> %or17
3462}
3463
3464define <16 x i8> @eval227(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3465; CHECK-LABEL: eval227:
3466; CHECK:       # %bb.0: # %entry
3467; CHECK-NEXT:    vn %v0, %v28, %v26
3468; CHECK-NEXT:    veval %v24, %v26, %v24, %v0, 139
3469; CHECK-NEXT:    br %r14
3470entry:
3471  %0 = and <16 x i8> %src3, %src2
3472  %1 = or <16 x i8> %0, %src1
3473  %or13 = xor <16 x i8> %1, splat(i8 -1)
3474  %and14 = and <16 x i8> %src2, %src1
3475  %or20 = or <16 x i8> %and14, %or13
3476  ret <16 x i8> %or20
3477}
3478
3479define <16 x i8> @eval228(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3480; CHECK-LABEL: eval228:
3481; CHECK:       # %bb.0: # %entry
3482; CHECK-NEXT:    vno %v0, %v26, %v26
3483; CHECK-NEXT:    vo %v1, %v28, %v24
3484; CHECK-NEXT:    veval %v2, %v24, %v28, %v26, 2
3485; CHECK-NEXT:    veval %v0, %v2, %v0, %v24, 47
3486; CHECK-NEXT:    veval %v24, %v0, %v26, %v1, 47
3487; CHECK-NEXT:    br %r14
3488entry:
3489  %not = xor <16 x i8> %src1, splat(i8 -1)
3490  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3491  %and = and <16 x i8> %not1, %not
3492  %0 = or <16 x i8> %src3, %src1
3493  %1 = xor <16 x i8> %0, splat(i8 -1)
3494  %and12 = and <16 x i8> %1, %src2
3495  %and15 = and <16 x i8> %not1, %src1
3496  %and16 = and <16 x i8> %and15, %src3
3497  %or13 = or <16 x i8> %and16, %and
3498  %or17 = or <16 x i8> %or13, %and12
3499  ret <16 x i8> %or17
3500}
3501
3502define <16 x i8> @eval229(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3503; CHECK-LABEL: eval229:
3504; CHECK:       # %bb.0: # %entry
3505; CHECK-NEXT:    vn %v0, %v28, %v26
3506; CHECK-NEXT:    veval %v24, %v28, %v24, %v0, 139
3507; CHECK-NEXT:    br %r14
3508entry:
3509  %0 = and <16 x i8> %src3, %src2
3510  %1 = or <16 x i8> %0, %src1
3511  %or13 = xor <16 x i8> %1, splat(i8 -1)
3512  %2 = and <16 x i8> %src3, %src1
3513  %or20 = or <16 x i8> %2, %or13
3514  ret <16 x i8> %or20
3515}
3516
3517define <16 x i8> @eval230(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3518; CHECK-LABEL: eval230:
3519; CHECK:       # %bb.0: # %entry
3520; CHECK-NEXT:    vno %v0, %v26, %v26
3521; CHECK-NEXT:    veval %v1, %v24, %v28, %v26, 2
3522; CHECK-NEXT:    veval %v0, %v1, %v0, %v24, 47
3523; CHECK-NEXT:    veval %v24, %v0, %v26, %v28, 47
3524; CHECK-NEXT:    br %r14
3525entry:
3526  %not = xor <16 x i8> %src1, splat(i8 -1)
3527  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3528  %and = and <16 x i8> %not1, %not
3529  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3530  %and15 = and <16 x i8> %not1, %src1
3531  %and16 = and <16 x i8> %and15, %src3
3532  %or13 = or <16 x i8> %and16, %and
3533  %0 = and <16 x i8> %not2, %src2
3534  %or21 = or <16 x i8> %or13, %0
3535  ret <16 x i8> %or21
3536}
3537
3538define <16 x i8> @eval231(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3539; CHECK-LABEL: eval231:
3540; CHECK:       # %bb.0: # %entry
3541; CHECK-NEXT:    vno %v0, %v26, %v26
3542; CHECK-NEXT:    vnc %v2, %v24, %v26
3543; CHECK-NEXT:    vo %v1, %v28, %v24
3544; CHECK-NEXT:    vsel %v0, %v26, %v0, %v24
3545; CHECK-NEXT:    veval %v0, %v0, %v2, %v28, 31
3546; CHECK-NEXT:    veval %v24, %v0, %v26, %v1, 47
3547; CHECK-NEXT:    br %r14
3548entry:
3549  %not = xor <16 x i8> %src1, splat(i8 -1)
3550  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3551  %and = and <16 x i8> %not1, %not
3552  %0 = or <16 x i8> %src3, %src1
3553  %1 = xor <16 x i8> %0, splat(i8 -1)
3554  %and12 = and <16 x i8> %1, %src2
3555  %and15 = and <16 x i8> %not1, %src1
3556  %and16 = and <16 x i8> %and15, %src3
3557  %and18 = and <16 x i8> %src2, %src1
3558  %or13 = or <16 x i8> %and18, %and
3559  %or17 = or <16 x i8> %or13, %and16
3560  %or24 = or <16 x i8> %or17, %and12
3561  ret <16 x i8> %or24
3562}
3563
3564define <16 x i8> @eval232(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3565; CHECK-LABEL: eval232:
3566; CHECK:       # %bb.0: # %entry
3567; CHECK-NEXT:    vo %v1, %v28, %v26
3568; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 31
3569; CHECK-NEXT:    veval %v24, %v24, %v1, %v0, 174
3570; CHECK-NEXT:    br %r14
3571entry:
3572  %0 = and <16 x i8> %src3, %src2
3573  %1 = or <16 x i8> %0, %src1
3574  %or13 = xor <16 x i8> %1, splat(i8 -1)
3575  %2 = or <16 x i8> %src3, %src2
3576  %3 = xor <16 x i8> %2, splat(i8 -1)
3577  %and17 = and <16 x i8> %3, %src1
3578  %or18 = or <16 x i8> %and17, %or13
3579  ret <16 x i8> %or18
3580}
3581
3582define <16 x i8> @eval233(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3583; CHECK-LABEL: eval233:
3584; CHECK:       # %bb.0: # %entry
3585; CHECK-NEXT:    vx %v1, %v28, %v26
3586; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 31
3587; CHECK-NEXT:    veval %v24, %v24, %v1, %v0, 174
3588; CHECK-NEXT:    br %r14
3589entry:
3590  %0 = and <16 x i8> %src3, %src2
3591  %1 = or <16 x i8> %0, %src1
3592  %or13 = xor <16 x i8> %1, splat(i8 -1)
3593  %2 = xor <16 x i8> %src3, %src2
3594  %and2039 = xor <16 x i8> %2, splat(i8 -1)
3595  %3 = and <16 x i8> %and2039, %src1
3596  %or21 = or <16 x i8> %3, %or13
3597  ret <16 x i8> %or21
3598}
3599
3600define <16 x i8> @eval234(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3601; CHECK-LABEL: eval234:
3602; CHECK:       # %bb.0: # %entry
3603; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 31
3604; CHECK-NEXT:    veval %v24, %v24, %v28, %v0, 174
3605; CHECK-NEXT:    br %r14
3606entry:
3607  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3608  %0 = and <16 x i8> %src3, %src2
3609  %1 = or <16 x i8> %0, %src1
3610  %or13 = xor <16 x i8> %1, splat(i8 -1)
3611  %2 = and <16 x i8> %not2, %src1
3612  %or22 = or <16 x i8> %2, %or13
3613  ret <16 x i8> %or22
3614}
3615
3616define <16 x i8> @eval235(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3617; CHECK-LABEL: eval235:
3618; CHECK:       # %bb.0: # %entry
3619; CHECK-NEXT:    vn %v0, %v28, %v26
3620; CHECK-NEXT:    voc %v1, %v26, %v28
3621; CHECK-NEXT:    veval %v24, %v1, %v24, %v0, 139
3622; CHECK-NEXT:    br %r14
3623entry:
3624  %0 = and <16 x i8> %src3, %src2
3625  %1 = or <16 x i8> %0, %src1
3626  %or13 = xor <16 x i8> %1, splat(i8 -1)
3627  %src3.not = xor <16 x i8> %src3, splat(i8 -1)
3628  %and1747 = or <16 x i8> %src3.not, %src2
3629  %2 = and <16 x i8> %and1747, %src1
3630  %or25 = or <16 x i8> %2, %or13
3631  ret <16 x i8> %or25
3632}
3633
3634define <16 x i8> @eval236(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3635; CHECK-LABEL: eval236:
3636; CHECK:       # %bb.0: # %entry
3637; CHECK-NEXT:    veval %v24, %v28, %v24, %v26, 234
3638; CHECK-NEXT:    br %r14
3639entry:
3640  %0 = or <16 x i8> %src3, %src1
3641  %or22.demorgan = and <16 x i8> %0, %src2
3642  %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)
3643  ret <16 x i8> %or22
3644}
3645
3646define <16 x i8> @eval237(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3647; CHECK-LABEL: eval237:
3648; CHECK:       # %bb.0: # %entry
3649; CHECK-NEXT:    vo %v0, %v28, %v24
3650; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
3651; CHECK-NEXT:    veval %v24, %v1, %v0, %v26, 239
3652; CHECK-NEXT:    br %r14
3653entry:
3654  %0 = or <16 x i8> %src3, %src1
3655  %or22.demorgan = and <16 x i8> %0, %src2
3656  %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)
3657  %and23 = and <16 x i8> %src2, %src1
3658  %and24 = and <16 x i8> %and23, %src3
3659  %or25 = or <16 x i8> %and24, %or22
3660  ret <16 x i8> %or25
3661}
3662
3663define <16 x i8> @eval238(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3664; CHECK-LABEL: eval238:
3665; CHECK:       # %bb.0: # %entry
3666; CHECK-NEXT:    veval %v0, %v26, %v28, %v24, 7
3667; CHECK-NEXT:    veval %v24, %v24, %v28, %v0, 174
3668; CHECK-NEXT:    br %r14
3669entry:
3670  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3671  %0 = or <16 x i8> %src3, %src1
3672  %or22.demorgan = and <16 x i8> %0, %src2
3673  %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)
3674  %1 = and <16 x i8> %not2, %src1
3675  %or26 = or <16 x i8> %1, %or22
3676  ret <16 x i8> %or26
3677}
3678
3679define <16 x i8> @eval239(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3680; CHECK-LABEL: eval239:
3681; CHECK:       # %bb.0: # %entry
3682; CHECK-NEXT:    vo %v0, %v28, %v24
3683; CHECK-NEXT:    veval %v24, %v24, %v0, %v26, 239
3684; CHECK-NEXT:    br %r14
3685entry:
3686  %0 = or <16 x i8> %src3, %src1
3687  %or22.demorgan = and <16 x i8> %0, %src2
3688  %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)
3689  %or29 = or <16 x i8> %or22, %src1
3690  ret <16 x i8> %or29
3691}
3692
3693define <16 x i8> @eval240(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3694; CHECK-LABEL: eval240:
3695; CHECK:       # %bb.0: # %entry
3696; CHECK-NEXT:    vno %v24, %v24, %v24
3697; CHECK-NEXT:    br %r14
3698entry:
3699  %not = xor <16 x i8> %src1, splat(i8 -1)
3700  ret <16 x i8> %not
3701}
3702
3703define <16 x i8> @eval241(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3704; CHECK-LABEL: eval241:
3705; CHECK:       # %bb.0: # %entry
3706; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 171
3707; CHECK-NEXT:    br %r14
3708entry:
3709  %not = xor <16 x i8> %src1, splat(i8 -1)
3710  %0 = and <16 x i8> %src3, %src2
3711  %or20 = or <16 x i8> %0, %not
3712  ret <16 x i8> %or20
3713}
3714
3715define <16 x i8> @eval242(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3716; CHECK-LABEL: eval242:
3717; CHECK:       # %bb.0: # %entry
3718; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 174
3719; CHECK-NEXT:    br %r14
3720entry:
3721  %not = xor <16 x i8> %src1, splat(i8 -1)
3722  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3723  %0 = and <16 x i8> %not2, %src2
3724  %or21 = or <16 x i8> %0, %not
3725  ret <16 x i8> %or21
3726}
3727
3728define <16 x i8> @eval243(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3729; CHECK-LABEL: eval243:
3730; CHECK:       # %bb.0: # %entry
3731; CHECK-NEXT:    voc %v24, %v26, %v24
3732; CHECK-NEXT:    br %r14
3733entry:
3734  %not = xor <16 x i8> %src1, splat(i8 -1)
3735  %or24 = or <16 x i8> %not, %src2
3736  ret <16 x i8> %or24
3737}
3738
3739define <16 x i8> @eval244(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3740; CHECK-LABEL: eval244:
3741; CHECK:       # %bb.0: # %entry
3742; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 174
3743; CHECK-NEXT:    br %r14
3744entry:
3745  %not = xor <16 x i8> %src1, splat(i8 -1)
3746  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3747  %0 = and <16 x i8> %not1, %src3
3748  %or21 = or <16 x i8> %0, %not
3749  ret <16 x i8> %or21
3750}
3751
3752define <16 x i8> @eval245(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3753; CHECK-LABEL: eval245:
3754; CHECK:       # %bb.0: # %entry
3755; CHECK-NEXT:    voc %v24, %v28, %v24
3756; CHECK-NEXT:    br %r14
3757entry:
3758  %not = xor <16 x i8> %src1, splat(i8 -1)
3759  %or24 = or <16 x i8> %not, %src3
3760  ret <16 x i8> %or24
3761}
3762
3763define <16 x i8> @eval246(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3764; CHECK-LABEL: eval246:
3765; CHECK:       # %bb.0: # %entry
3766; CHECK-NEXT:    vnc %v0, %v24, %v26
3767; CHECK-NEXT:    veval %v0, %v0, %v28, %v24, 171
3768; CHECK-NEXT:    veval %v24, %v0, %v26, %v28, 47
3769; CHECK-NEXT:    br %r14
3770entry:
3771  %not = xor <16 x i8> %src1, splat(i8 -1)
3772  %not1 = xor <16 x i8> %src2, splat(i8 -1)
3773  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3774  %and19 = and <16 x i8> %not1, %src1
3775  %and20 = and <16 x i8> %and19, %src3
3776  %or21 = or <16 x i8> %and20, %not
3777  %0 = and <16 x i8> %not2, %src2
3778  %or25 = or <16 x i8> %or21, %0
3779  ret <16 x i8> %or25
3780}
3781
3782define <16 x i8> @eval247(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3783; CHECK-LABEL: eval247:
3784; CHECK:       # %bb.0: # %entry
3785; CHECK-NEXT:    veval %v24, %v26, %v28, %v24, 191
3786; CHECK-NEXT:    br %r14
3787entry:
3788  %not = xor <16 x i8> %src1, splat(i8 -1)
3789  %or21 = or <16 x i8> %not, %src2
3790  %or28 = or <16 x i8> %or21, %src3
3791  ret <16 x i8> %or28
3792}
3793
3794define <16 x i8> @eval248(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3795; CHECK-LABEL: eval248:
3796; CHECK:       # %bb.0: # %entry
3797; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 234
3798; CHECK-NEXT:    br %r14
3799entry:
3800  %0 = or <16 x i8> %src3, %src2
3801  %or22.demorgan = and <16 x i8> %0, %src1
3802  %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)
3803  ret <16 x i8> %or22
3804}
3805
3806define <16 x i8> @eval249(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3807; CHECK-LABEL: eval249:
3808; CHECK:       # %bb.0: # %entry
3809; CHECK-NEXT:    vo %v0, %v28, %v26
3810; CHECK-NEXT:    veval %v1, %v26, %v24, %v28, 1
3811; CHECK-NEXT:    veval %v24, %v1, %v0, %v24, 239
3812; CHECK-NEXT:    br %r14
3813entry:
3814  %0 = or <16 x i8> %src3, %src2
3815  %or22.demorgan = and <16 x i8> %0, %src1
3816  %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)
3817  %and23 = and <16 x i8> %src2, %src1
3818  %and24 = and <16 x i8> %and23, %src3
3819  %or25 = or <16 x i8> %and24, %or22
3820  ret <16 x i8> %or25
3821}
3822
3823define <16 x i8> @eval250(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3824; CHECK-LABEL: eval250:
3825; CHECK:       # %bb.0: # %entry
3826; CHECK-NEXT:    veval %v0, %v24, %v28, %v26, 7
3827; CHECK-NEXT:    veval %v24, %v26, %v28, %v0, 174
3828; CHECK-NEXT:    br %r14
3829entry:
3830  %not2 = xor <16 x i8> %src3, splat(i8 -1)
3831  %0 = or <16 x i8> %src3, %src2
3832  %or22.demorgan = and <16 x i8> %0, %src1
3833  %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)
3834  %1 = and <16 x i8> %not2, %src2
3835  %or26 = or <16 x i8> %1, %or22
3836  ret <16 x i8> %or26
3837}
3838
3839define <16 x i8> @eval251(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3840; CHECK-LABEL: eval251:
3841; CHECK:       # %bb.0: # %entry
3842; CHECK-NEXT:    vo %v0, %v28, %v26
3843; CHECK-NEXT:    veval %v24, %v26, %v0, %v24, 239
3844; CHECK-NEXT:    br %r14
3845entry:
3846  %0 = or <16 x i8> %src3, %src2
3847  %or22.demorgan = and <16 x i8> %0, %src1
3848  %or22 = xor <16 x i8> %or22.demorgan, splat(i8 -1)
3849  %or29 = or <16 x i8> %or22, %src2
3850  ret <16 x i8> %or29
3851}
3852
3853define <16 x i8> @eval252(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3854; CHECK-LABEL: eval252:
3855; CHECK:       # %bb.0: # %entry
3856; CHECK-NEXT:    vnn %v24, %v26, %v24
3857; CHECK-NEXT:    br %r14
3858entry:
3859  %or26.demorgan = and <16 x i8> %src2, %src1
3860  %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1)
3861  ret <16 x i8> %or26
3862}
3863
3864define <16 x i8> @eval253(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3865; CHECK-LABEL: eval253:
3866; CHECK:       # %bb.0: # %entry
3867; CHECK-NEXT:    veval %v24, %v28, %v26, %v24, 239
3868; CHECK-NEXT:    br %r14
3869entry:
3870  %or26.demorgan = and <16 x i8> %src2, %src1
3871  %or26 = xor <16 x i8> %or26.demorgan, splat(i8 -1)
3872  %or29 = or <16 x i8> %or26, %src3
3873  ret <16 x i8> %or29
3874}
3875
3876define <16 x i8> @eval254(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3877; CHECK-LABEL: eval254:
3878; CHECK:       # %bb.0: # %entry
3879; CHECK-NEXT:    veval %v24, %v26, %v24, %v28, 254
3880; CHECK-NEXT:    br %r14
3881entry:
3882  %or26.demorgan = and <16 x i8> %src2, %src1
3883  %or30.demorgan = and <16 x i8> %or26.demorgan, %src3
3884  %or30 = xor <16 x i8> %or30.demorgan, splat(i8 -1)
3885  ret <16 x i8> %or30
3886}
3887
3888define <16 x i8> @eval255(<16 x i8> %src1, <16 x i8> %src2, <16 x i8> %src3) {
3889; CHECK-LABEL: eval255:
3890; CHECK:       # %bb.0: # %entry
3891; CHECK-NEXT:    vgbm %v24, 65535
3892; CHECK-NEXT:    br %r14
3893entry:
3894  ret <16 x i8> splat(i8 -1)
3895}
3896
3897