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