xref: /llvm-project/llvm/test/CodeGen/Hexagon/isel/logical.ll (revision 2208c97c1bec2512d4e47b6223db6d95a7037956)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=hexagon < %s | FileCheck %s
3
4declare i32 @llvm.hexagon.S2.tstbit.i(i32, i32 immarg) #0
5
6define i1 @f0(i32 %a0, i32 %a1) #1 {
7; CHECK-LABEL: f0:
8; CHECK:       // %bb.0: // %b0
9; CHECK-NEXT:    {
10; CHECK-NEXT:     p0 = tstbit(r0,#3)
11; CHECK-NEXT:    }
12; CHECK-NEXT:    {
13; CHECK-NEXT:     p1 = tstbit(r1,#3)
14; CHECK-NEXT:    }
15; CHECK-NEXT:    {
16; CHECK-NEXT:     p0 = and(p0,p1)
17; CHECK-NEXT:    }
18; CHECK-NEXT:    {
19; CHECK-NEXT:     r0 = p0
20; CHECK-NEXT:    }
21; CHECK-NEXT:    {
22; CHECK-NEXT:     jumpr r31
23; CHECK-NEXT:    }
24b0:
25  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
26  %v1 = trunc i32 %v0 to i1
27  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
28  %v3 = trunc i32 %v2 to i1
29  %v4 = and i1 %v1, %v3
30  ret i1 %v4
31}
32
33define i1 @f1(i32 %a0, i32 %a1) #1 {
34; CHECK-LABEL: f1:
35; CHECK:       // %bb.0: // %b0
36; CHECK-NEXT:    {
37; CHECK-NEXT:     p0 = tstbit(r0,#3)
38; CHECK-NEXT:    }
39; CHECK-NEXT:    {
40; CHECK-NEXT:     p1 = tstbit(r1,#3)
41; CHECK-NEXT:    }
42; CHECK-NEXT:    {
43; CHECK-NEXT:     p0 = or(p0,p1)
44; CHECK-NEXT:    }
45; CHECK-NEXT:    {
46; CHECK-NEXT:     r0 = p0
47; CHECK-NEXT:    }
48; CHECK-NEXT:    {
49; CHECK-NEXT:     jumpr r31
50; CHECK-NEXT:    }
51b0:
52  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
53  %v1 = trunc i32 %v0 to i1
54  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
55  %v3 = trunc i32 %v2 to i1
56  %v4 = or i1 %v1, %v3
57  ret i1 %v4
58}
59
60define i1 @f2(i32 %a0, i32 %a1) #1 {
61; CHECK-LABEL: f2:
62; CHECK:       // %bb.0: // %b0
63; CHECK-NEXT:    {
64; CHECK-NEXT:     p0 = tstbit(r0,#3)
65; CHECK-NEXT:    }
66; CHECK-NEXT:    {
67; CHECK-NEXT:     p1 = tstbit(r1,#3)
68; CHECK-NEXT:    }
69; CHECK-NEXT:    {
70; CHECK-NEXT:     p0 = xor(p0,p1)
71; CHECK-NEXT:    }
72; CHECK-NEXT:    {
73; CHECK-NEXT:     r0 = p0
74; CHECK-NEXT:    }
75; CHECK-NEXT:    {
76; CHECK-NEXT:     jumpr r31
77; CHECK-NEXT:    }
78b0:
79  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
80  %v1 = trunc i32 %v0 to i1
81  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
82  %v3 = trunc i32 %v2 to i1
83  %v4 = xor i1 %v1, %v3
84  ret i1 %v4
85}
86
87define i1 @f3(i32 %a0, i32 %a1) #1 {
88; CHECK-LABEL: f3:
89; CHECK:       // %bb.0: // %b0
90; CHECK-NEXT:    {
91; CHECK-NEXT:     p0 = tstbit(r0,#3)
92; CHECK-NEXT:    }
93; CHECK-NEXT:    {
94; CHECK-NEXT:     p1 = tstbit(r1,#3)
95; CHECK-NEXT:    }
96; CHECK-NEXT:    {
97; CHECK-NEXT:     r0 = p0
98; CHECK-NEXT:    }
99; CHECK-NEXT:    {
100; CHECK-NEXT:     r1 = p1
101; CHECK-NEXT:    }
102; CHECK-NEXT:    {
103; CHECK-NEXT:     p0 = tstbit(r0,#0)
104; CHECK-NEXT:    }
105; CHECK-NEXT:    {
106; CHECK-NEXT:     p1 = tstbit(r1,#0)
107; CHECK-NEXT:    }
108; CHECK-NEXT:    {
109; CHECK-NEXT:     p0 = and(p0,!p1)
110; CHECK-NEXT:    }
111; CHECK-NEXT:    {
112; CHECK-NEXT:     r0 = mux(p0,#1,#0)
113; CHECK-NEXT:    }
114; CHECK-NEXT:    {
115; CHECK-NEXT:     jumpr r31
116; CHECK-NEXT:    }
117b0:
118  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
119  %v1 = trunc i32 %v0 to i1
120  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
121  %v3 = trunc i32 %v2 to i1
122  %v4 = xor i1 %v3, true
123  %v5 = and i1 %v1, %v4
124  ret i1 %v5
125}
126
127define i1 @f4(i32 %a0, i32 %a1) #1 {
128; CHECK-LABEL: f4:
129; CHECK:       // %bb.0: // %b0
130; CHECK-NEXT:    {
131; CHECK-NEXT:     p0 = tstbit(r0,#3)
132; CHECK-NEXT:    }
133; CHECK-NEXT:    {
134; CHECK-NEXT:     p1 = tstbit(r1,#3)
135; CHECK-NEXT:    }
136; CHECK-NEXT:    {
137; CHECK-NEXT:     r0 = p0
138; CHECK-NEXT:    }
139; CHECK-NEXT:    {
140; CHECK-NEXT:     r1 = p1
141; CHECK-NEXT:    }
142; CHECK-NEXT:    {
143; CHECK-NEXT:     p0 = tstbit(r0,#0)
144; CHECK-NEXT:    }
145; CHECK-NEXT:    {
146; CHECK-NEXT:     p1 = tstbit(r1,#0)
147; CHECK-NEXT:    }
148; CHECK-NEXT:    {
149; CHECK-NEXT:     p0 = or(p0,!p1)
150; CHECK-NEXT:    }
151; CHECK-NEXT:    {
152; CHECK-NEXT:     r0 = mux(p0,#1,#0)
153; CHECK-NEXT:    }
154; CHECK-NEXT:    {
155; CHECK-NEXT:     jumpr r31
156; CHECK-NEXT:    }
157b0:
158  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
159  %v1 = trunc i32 %v0 to i1
160  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
161  %v3 = trunc i32 %v2 to i1
162  %v4 = xor i1 %v3, true
163  %v5 = or i1 %v1, %v4
164  ret i1 %v5
165}
166
167define i1 @f5(i32 %a0, i32 %a1, i32 %a2) #1 {
168; CHECK-LABEL: f5:
169; CHECK:       // %bb.0: // %b0
170; CHECK-NEXT:    {
171; CHECK-NEXT:     p0 = tstbit(r0,#3)
172; CHECK-NEXT:    }
173; CHECK-NEXT:    {
174; CHECK-NEXT:     p1 = tstbit(r1,#3)
175; CHECK-NEXT:    }
176; CHECK-NEXT:    {
177; CHECK-NEXT:     p2 = tstbit(r2,#3)
178; CHECK-NEXT:    }
179; CHECK-NEXT:    {
180; CHECK-NEXT:     p0 = and(p2,and(p0,p1))
181; CHECK-NEXT:    }
182; CHECK-NEXT:    {
183; CHECK-NEXT:     r0 = p0
184; CHECK-NEXT:    }
185; CHECK-NEXT:    {
186; CHECK-NEXT:     jumpr r31
187; CHECK-NEXT:    }
188b0:
189  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
190  %v1 = trunc i32 %v0 to i1
191  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
192  %v3 = trunc i32 %v2 to i1
193  %v4 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3)
194  %v5 = trunc i32 %v4 to i1
195  %v6 = and i1 %v1, %v3
196  %v7 = and i1 %v5, %v6
197  ret i1 %v7
198}
199
200define i1 @f6(i32 %a0, i32 %a1, i32 %a2) #1 {
201; CHECK-LABEL: f6:
202; CHECK:       // %bb.0: // %b0
203; CHECK-NEXT:    {
204; CHECK-NEXT:     p0 = tstbit(r0,#3)
205; CHECK-NEXT:    }
206; CHECK-NEXT:    {
207; CHECK-NEXT:     p1 = tstbit(r1,#3)
208; CHECK-NEXT:    }
209; CHECK-NEXT:    {
210; CHECK-NEXT:     p2 = tstbit(r2,#3)
211; CHECK-NEXT:    }
212; CHECK-NEXT:    {
213; CHECK-NEXT:     p0 = and(p2,or(p0,p1))
214; CHECK-NEXT:    }
215; CHECK-NEXT:    {
216; CHECK-NEXT:     r0 = p0
217; CHECK-NEXT:    }
218; CHECK-NEXT:    {
219; CHECK-NEXT:     jumpr r31
220; CHECK-NEXT:    }
221b0:
222  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
223  %v1 = trunc i32 %v0 to i1
224  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
225  %v3 = trunc i32 %v2 to i1
226  %v4 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3)
227  %v5 = trunc i32 %v4 to i1
228  %v6 = or i1 %v1, %v3
229  %v7 = and i1 %v5, %v6
230  ret i1 %v7
231}
232
233define i1 @f7(i32 %a0, i32 %a1, i32 %a2) #1 {
234; CHECK-LABEL: f7:
235; CHECK:       // %bb.0: // %b0
236; CHECK-NEXT:    {
237; CHECK-NEXT:     p0 = tstbit(r0,#3)
238; CHECK-NEXT:    }
239; CHECK-NEXT:    {
240; CHECK-NEXT:     p1 = tstbit(r1,#3)
241; CHECK-NEXT:    }
242; CHECK-NEXT:    {
243; CHECK-NEXT:     p2 = tstbit(r2,#3)
244; CHECK-NEXT:    }
245; CHECK-NEXT:    {
246; CHECK-NEXT:     p0 = or(p2,and(p0,p1))
247; CHECK-NEXT:    }
248; CHECK-NEXT:    {
249; CHECK-NEXT:     r0 = p0
250; CHECK-NEXT:    }
251; CHECK-NEXT:    {
252; CHECK-NEXT:     jumpr r31
253; CHECK-NEXT:    }
254b0:
255  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
256  %v1 = trunc i32 %v0 to i1
257  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
258  %v3 = trunc i32 %v2 to i1
259  %v4 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3)
260  %v5 = trunc i32 %v4 to i1
261  %v6 = and i1 %v1, %v3
262  %v7 = or i1 %v5, %v6
263  ret i1 %v7
264}
265
266define i1 @f8(i32 %a0, i32 %a1, i32 %a2) #1 {
267; CHECK-LABEL: f8:
268; CHECK:       // %bb.0: // %b0
269; CHECK-NEXT:    {
270; CHECK-NEXT:     p0 = tstbit(r0,#3)
271; CHECK-NEXT:    }
272; CHECK-NEXT:    {
273; CHECK-NEXT:     p1 = tstbit(r1,#3)
274; CHECK-NEXT:    }
275; CHECK-NEXT:    {
276; CHECK-NEXT:     p2 = tstbit(r2,#3)
277; CHECK-NEXT:    }
278; CHECK-NEXT:    {
279; CHECK-NEXT:     p0 = or(p2,or(p0,p1))
280; CHECK-NEXT:    }
281; CHECK-NEXT:    {
282; CHECK-NEXT:     r0 = p0
283; CHECK-NEXT:    }
284; CHECK-NEXT:    {
285; CHECK-NEXT:     jumpr r31
286; CHECK-NEXT:    }
287b0:
288  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
289  %v1 = trunc i32 %v0 to i1
290  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
291  %v3 = trunc i32 %v2 to i1
292  %v4 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3)
293  %v5 = trunc i32 %v4 to i1
294  %v6 = or i1 %v1, %v3
295  %v7 = or i1 %v5, %v6
296  ret i1 %v7
297}
298
299define i1 @f9(i32 %a0, i32 %a1, i32 %a2) #1 {
300; CHECK-LABEL: f9:
301; CHECK:       // %bb.0: // %b0
302; CHECK-NEXT:    {
303; CHECK-NEXT:     p0 = tstbit(r0,#3)
304; CHECK-NEXT:    }
305; CHECK-NEXT:    {
306; CHECK-NEXT:     p1 = tstbit(r1,#3)
307; CHECK-NEXT:    }
308; CHECK-NEXT:    {
309; CHECK-NEXT:     p2 = tstbit(r2,#3)
310; CHECK-NEXT:    }
311; CHECK-NEXT:    {
312; CHECK-NEXT:     r0 = p0
313; CHECK-NEXT:    }
314; CHECK-NEXT:    {
315; CHECK-NEXT:     r1 = p1
316; CHECK-NEXT:    }
317; CHECK-NEXT:    {
318; CHECK-NEXT:     r2 = p2
319; CHECK-NEXT:    }
320; CHECK-NEXT:    {
321; CHECK-NEXT:     p0 = tstbit(r0,#0)
322; CHECK-NEXT:    }
323; CHECK-NEXT:    {
324; CHECK-NEXT:     p1 = tstbit(r1,#0)
325; CHECK-NEXT:    }
326; CHECK-NEXT:    {
327; CHECK-NEXT:     p2 = tstbit(r2,#0)
328; CHECK-NEXT:    }
329; CHECK-NEXT:    {
330; CHECK-NEXT:     p0 = and(p2,and(p0,!p1))
331; CHECK-NEXT:    }
332; CHECK-NEXT:    {
333; CHECK-NEXT:     r0 = mux(p0,#1,#0)
334; CHECK-NEXT:    }
335; CHECK-NEXT:    {
336; CHECK-NEXT:     jumpr r31
337; CHECK-NEXT:    }
338b0:
339  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
340  %v1 = trunc i32 %v0 to i1
341  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
342  %v3 = trunc i32 %v2 to i1
343  %v4 = xor i1 %v3, true
344  %v5 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3)
345  %v6 = trunc i32 %v5 to i1
346  %v7 = and i1 %v1, %v4
347  %v8 = and i1 %v6, %v7
348  ret i1 %v8
349}
350
351define i1 @f10(i32 %a0, i32 %a1, i32 %a2) #1 {
352; CHECK-LABEL: f10:
353; CHECK:       // %bb.0: // %b0
354; CHECK-NEXT:    {
355; CHECK-NEXT:     p0 = tstbit(r0,#3)
356; CHECK-NEXT:    }
357; CHECK-NEXT:    {
358; CHECK-NEXT:     p1 = tstbit(r1,#3)
359; CHECK-NEXT:    }
360; CHECK-NEXT:    {
361; CHECK-NEXT:     p2 = tstbit(r2,#3)
362; CHECK-NEXT:    }
363; CHECK-NEXT:    {
364; CHECK-NEXT:     r0 = p0
365; CHECK-NEXT:    }
366; CHECK-NEXT:    {
367; CHECK-NEXT:     r1 = p1
368; CHECK-NEXT:    }
369; CHECK-NEXT:    {
370; CHECK-NEXT:     r2 = p2
371; CHECK-NEXT:    }
372; CHECK-NEXT:    {
373; CHECK-NEXT:     p0 = tstbit(r0,#0)
374; CHECK-NEXT:    }
375; CHECK-NEXT:    {
376; CHECK-NEXT:     p1 = tstbit(r1,#0)
377; CHECK-NEXT:    }
378; CHECK-NEXT:    {
379; CHECK-NEXT:     p2 = tstbit(r2,#0)
380; CHECK-NEXT:    }
381; CHECK-NEXT:    {
382; CHECK-NEXT:     p0 = and(p2,or(p0,!p1))
383; CHECK-NEXT:    }
384; CHECK-NEXT:    {
385; CHECK-NEXT:     r0 = mux(p0,#1,#0)
386; CHECK-NEXT:    }
387; CHECK-NEXT:    {
388; CHECK-NEXT:     jumpr r31
389; CHECK-NEXT:    }
390b0:
391  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
392  %v1 = trunc i32 %v0 to i1
393  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
394  %v3 = trunc i32 %v2 to i1
395  %v4 = xor i1 %v3, true
396  %v5 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3)
397  %v6 = trunc i32 %v5 to i1
398  %v7 = or i1 %v1, %v4
399  %v8 = and i1 %v6, %v7
400  ret i1 %v8
401}
402
403define i1 @f11(i32 %a0, i32 %a1, i32 %a2) #1 {
404; CHECK-LABEL: f11:
405; CHECK:       // %bb.0: // %b0
406; CHECK-NEXT:    {
407; CHECK-NEXT:     p0 = tstbit(r0,#3)
408; CHECK-NEXT:    }
409; CHECK-NEXT:    {
410; CHECK-NEXT:     p1 = tstbit(r1,#3)
411; CHECK-NEXT:    }
412; CHECK-NEXT:    {
413; CHECK-NEXT:     p2 = tstbit(r2,#3)
414; CHECK-NEXT:    }
415; CHECK-NEXT:    {
416; CHECK-NEXT:     r0 = p0
417; CHECK-NEXT:    }
418; CHECK-NEXT:    {
419; CHECK-NEXT:     r1 = p1
420; CHECK-NEXT:    }
421; CHECK-NEXT:    {
422; CHECK-NEXT:     r2 = p2
423; CHECK-NEXT:    }
424; CHECK-NEXT:    {
425; CHECK-NEXT:     p0 = tstbit(r0,#0)
426; CHECK-NEXT:    }
427; CHECK-NEXT:    {
428; CHECK-NEXT:     p1 = tstbit(r1,#0)
429; CHECK-NEXT:    }
430; CHECK-NEXT:    {
431; CHECK-NEXT:     p2 = tstbit(r2,#0)
432; CHECK-NEXT:    }
433; CHECK-NEXT:    {
434; CHECK-NEXT:     p0 = or(p2,and(p0,!p1))
435; CHECK-NEXT:    }
436; CHECK-NEXT:    {
437; CHECK-NEXT:     r0 = mux(p0,#1,#0)
438; CHECK-NEXT:    }
439; CHECK-NEXT:    {
440; CHECK-NEXT:     jumpr r31
441; CHECK-NEXT:    }
442b0:
443  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
444  %v1 = trunc i32 %v0 to i1
445  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
446  %v3 = trunc i32 %v2 to i1
447  %v4 = xor i1 %v3, true
448  %v5 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3)
449  %v6 = trunc i32 %v5 to i1
450  %v7 = and i1 %v1, %v4
451  %v8 = or i1 %v6, %v7
452  ret i1 %v8
453}
454
455define i1 @f12(i32 %a0, i32 %a1, i32 %a2) #1 {
456; CHECK-LABEL: f12:
457; CHECK:       // %bb.0: // %b0
458; CHECK-NEXT:    {
459; CHECK-NEXT:     p0 = tstbit(r0,#3)
460; CHECK-NEXT:    }
461; CHECK-NEXT:    {
462; CHECK-NEXT:     p1 = tstbit(r1,#3)
463; CHECK-NEXT:    }
464; CHECK-NEXT:    {
465; CHECK-NEXT:     p2 = tstbit(r2,#3)
466; CHECK-NEXT:    }
467; CHECK-NEXT:    {
468; CHECK-NEXT:     r0 = p0
469; CHECK-NEXT:    }
470; CHECK-NEXT:    {
471; CHECK-NEXT:     r1 = p1
472; CHECK-NEXT:    }
473; CHECK-NEXT:    {
474; CHECK-NEXT:     r2 = p2
475; CHECK-NEXT:    }
476; CHECK-NEXT:    {
477; CHECK-NEXT:     p0 = tstbit(r0,#0)
478; CHECK-NEXT:    }
479; CHECK-NEXT:    {
480; CHECK-NEXT:     p1 = tstbit(r1,#0)
481; CHECK-NEXT:    }
482; CHECK-NEXT:    {
483; CHECK-NEXT:     p2 = tstbit(r2,#0)
484; CHECK-NEXT:    }
485; CHECK-NEXT:    {
486; CHECK-NEXT:     p0 = or(p2,or(p0,!p1))
487; CHECK-NEXT:    }
488; CHECK-NEXT:    {
489; CHECK-NEXT:     r0 = mux(p0,#1,#0)
490; CHECK-NEXT:    }
491; CHECK-NEXT:    {
492; CHECK-NEXT:     jumpr r31
493; CHECK-NEXT:    }
494b0:
495  %v0 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a0, i32 3)
496  %v1 = trunc i32 %v0 to i1
497  %v2 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a1, i32 3)
498  %v3 = trunc i32 %v2 to i1
499  %v4 = xor i1 %v3, true
500  %v5 = call i32 @llvm.hexagon.S2.tstbit.i(i32 %a2, i32 3)
501  %v6 = trunc i32 %v5 to i1
502  %v7 = or i1 %v1, %v4
503  %v8 = or i1 %v6, %v7
504  ret i1 %v8
505}
506
507define <2 x i32> @f13(<2 x i32> %a0, <2 x i32> %a1) #1 {
508; CHECK-LABEL: f13:
509; CHECK:       // %bb.0: // %b0
510; CHECK-NEXT:    {
511; CHECK-NEXT:     r5:4 = combine(#1,#1)
512; CHECK-NEXT:    }
513; CHECK-NEXT:    {
514; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r5:4)
515; CHECK-NEXT:    }
516; CHECK-NEXT:    {
517; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r5:4)
518; CHECK-NEXT:    }
519; CHECK-NEXT:    {
520; CHECK-NEXT:     p0 = and(p0,p1)
521; CHECK-NEXT:    }
522; CHECK-NEXT:    {
523; CHECK-NEXT:     r1:0 = mask(p0)
524; CHECK-NEXT:    }
525; CHECK-NEXT:    {
526; CHECK-NEXT:     jumpr r31
527; CHECK-NEXT:    }
528b0:
529  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
530  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
531  %v2 = and <2 x i1> %v0, %v1
532  %v3 = sext <2 x i1> %v2 to <2 x i32>
533  ret <2 x i32> %v3
534}
535
536define <2 x i32> @f14(<2 x i32> %a0, <2 x i32> %a1) #1 {
537; CHECK-LABEL: f14:
538; CHECK:       // %bb.0: // %b0
539; CHECK-NEXT:    {
540; CHECK-NEXT:     r5:4 = combine(#1,#1)
541; CHECK-NEXT:    }
542; CHECK-NEXT:    {
543; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r5:4)
544; CHECK-NEXT:    }
545; CHECK-NEXT:    {
546; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r5:4)
547; CHECK-NEXT:    }
548; CHECK-NEXT:    {
549; CHECK-NEXT:     p0 = or(p0,p1)
550; CHECK-NEXT:    }
551; CHECK-NEXT:    {
552; CHECK-NEXT:     r1:0 = mask(p0)
553; CHECK-NEXT:    }
554; CHECK-NEXT:    {
555; CHECK-NEXT:     jumpr r31
556; CHECK-NEXT:    }
557b0:
558  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
559  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
560  %v2 = or <2 x i1> %v0, %v1
561  %v3 = sext <2 x i1> %v2 to <2 x i32>
562  ret <2 x i32> %v3
563}
564
565define <2 x i32> @f15(<2 x i32> %a0, <2 x i32> %a1) #1 {
566; CHECK-LABEL: f15:
567; CHECK:       // %bb.0: // %b0
568; CHECK-NEXT:    {
569; CHECK-NEXT:     r5:4 = combine(#1,#1)
570; CHECK-NEXT:    }
571; CHECK-NEXT:    {
572; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r5:4)
573; CHECK-NEXT:    }
574; CHECK-NEXT:    {
575; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r5:4)
576; CHECK-NEXT:    }
577; CHECK-NEXT:    {
578; CHECK-NEXT:     p0 = xor(p0,p1)
579; CHECK-NEXT:    }
580; CHECK-NEXT:    {
581; CHECK-NEXT:     r1:0 = mask(p0)
582; CHECK-NEXT:    }
583; CHECK-NEXT:    {
584; CHECK-NEXT:     jumpr r31
585; CHECK-NEXT:    }
586b0:
587  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
588  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
589  %v2 = xor <2 x i1> %v0, %v1
590  %v3 = sext <2 x i1> %v2 to <2 x i32>
591  ret <2 x i32> %v3
592}
593
594define <2 x i32> @f16(<2 x i32> %a0, <2 x i32> %a1) #1 {
595; CHECK-LABEL: f16:
596; CHECK:       // %bb.0: // %b0
597; CHECK-NEXT:    {
598; CHECK-NEXT:     r5:4 = combine(#1,#1)
599; CHECK-NEXT:    }
600; CHECK-NEXT:    {
601; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r5:4)
602; CHECK-NEXT:    }
603; CHECK-NEXT:    {
604; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r5:4)
605; CHECK-NEXT:    }
606; CHECK-NEXT:    {
607; CHECK-NEXT:     p0 = and(p0,!p1)
608; CHECK-NEXT:    }
609; CHECK-NEXT:    {
610; CHECK-NEXT:     r1:0 = mask(p0)
611; CHECK-NEXT:    }
612; CHECK-NEXT:    {
613; CHECK-NEXT:     jumpr r31
614; CHECK-NEXT:    }
615b0:
616  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
617  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
618  %v2 = xor <2 x i1> %v1, <i1 true, i1 true>
619  %v3 = and <2 x i1> %v0, %v2
620  %v4 = sext <2 x i1> %v3 to <2 x i32>
621  ret <2 x i32> %v4
622}
623
624define <2 x i32> @f17(<2 x i32> %a0, <2 x i32> %a1) #1 {
625; CHECK-LABEL: f17:
626; CHECK:       // %bb.0: // %b0
627; CHECK-NEXT:    {
628; CHECK-NEXT:     r5:4 = combine(#1,#1)
629; CHECK-NEXT:    }
630; CHECK-NEXT:    {
631; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r5:4)
632; CHECK-NEXT:    }
633; CHECK-NEXT:    {
634; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r5:4)
635; CHECK-NEXT:    }
636; CHECK-NEXT:    {
637; CHECK-NEXT:     p0 = or(p0,!p1)
638; CHECK-NEXT:    }
639; CHECK-NEXT:    {
640; CHECK-NEXT:     r1:0 = mask(p0)
641; CHECK-NEXT:    }
642; CHECK-NEXT:    {
643; CHECK-NEXT:     jumpr r31
644; CHECK-NEXT:    }
645b0:
646  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
647  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
648  %v2 = xor <2 x i1> %v1, <i1 true, i1 true>
649  %v3 = or <2 x i1> %v0, %v2
650  %v4 = sext <2 x i1> %v3 to <2 x i32>
651  ret <2 x i32> %v4
652}
653
654define <2 x i32> @f18(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 {
655; CHECK-LABEL: f18:
656; CHECK:       // %bb.0: // %b0
657; CHECK-NEXT:    {
658; CHECK-NEXT:     r7:6 = combine(#1,#1)
659; CHECK-NEXT:    }
660; CHECK-NEXT:    {
661; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r7:6)
662; CHECK-NEXT:    }
663; CHECK-NEXT:    {
664; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r7:6)
665; CHECK-NEXT:    }
666; CHECK-NEXT:    {
667; CHECK-NEXT:     p2 = vcmpw.eq(r5:4,r7:6)
668; CHECK-NEXT:    }
669; CHECK-NEXT:    {
670; CHECK-NEXT:     p0 = and(p2,and(p0,p1))
671; CHECK-NEXT:    }
672; CHECK-NEXT:    {
673; CHECK-NEXT:     r1:0 = mask(p0)
674; CHECK-NEXT:    }
675; CHECK-NEXT:    {
676; CHECK-NEXT:     jumpr r31
677; CHECK-NEXT:    }
678b0:
679  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
680  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
681  %v2 = icmp eq <2 x i32> %a2, <i32 1, i32 1>
682  %v3 = and <2 x i1> %v0, %v1
683  %v4 = and <2 x i1> %v2, %v3
684  %v5 = sext <2 x i1> %v4 to <2 x i32>
685  ret <2 x i32> %v5
686}
687
688define <2 x i32> @f19(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 {
689; CHECK-LABEL: f19:
690; CHECK:       // %bb.0: // %b0
691; CHECK-NEXT:    {
692; CHECK-NEXT:     r7:6 = combine(#1,#1)
693; CHECK-NEXT:    }
694; CHECK-NEXT:    {
695; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r7:6)
696; CHECK-NEXT:    }
697; CHECK-NEXT:    {
698; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r7:6)
699; CHECK-NEXT:    }
700; CHECK-NEXT:    {
701; CHECK-NEXT:     p2 = vcmpw.eq(r5:4,r7:6)
702; CHECK-NEXT:    }
703; CHECK-NEXT:    {
704; CHECK-NEXT:     p0 = and(p2,or(p0,p1))
705; CHECK-NEXT:    }
706; CHECK-NEXT:    {
707; CHECK-NEXT:     r1:0 = mask(p0)
708; CHECK-NEXT:    }
709; CHECK-NEXT:    {
710; CHECK-NEXT:     jumpr r31
711; CHECK-NEXT:    }
712b0:
713  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
714  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
715  %v2 = icmp eq <2 x i32> %a2, <i32 1, i32 1>
716  %v3 = or <2 x i1> %v0, %v1
717  %v4 = and <2 x i1> %v2, %v3
718  %v5 = sext <2 x i1> %v4 to <2 x i32>
719  ret <2 x i32> %v5
720}
721
722define <2 x i32> @f20(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 {
723; CHECK-LABEL: f20:
724; CHECK:       // %bb.0: // %b0
725; CHECK-NEXT:    {
726; CHECK-NEXT:     r7:6 = combine(#1,#1)
727; CHECK-NEXT:    }
728; CHECK-NEXT:    {
729; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r7:6)
730; CHECK-NEXT:    }
731; CHECK-NEXT:    {
732; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r7:6)
733; CHECK-NEXT:    }
734; CHECK-NEXT:    {
735; CHECK-NEXT:     p2 = vcmpw.eq(r5:4,r7:6)
736; CHECK-NEXT:    }
737; CHECK-NEXT:    {
738; CHECK-NEXT:     p0 = or(p2,and(p0,p1))
739; CHECK-NEXT:    }
740; CHECK-NEXT:    {
741; CHECK-NEXT:     r1:0 = mask(p0)
742; CHECK-NEXT:    }
743; CHECK-NEXT:    {
744; CHECK-NEXT:     jumpr r31
745; CHECK-NEXT:    }
746b0:
747  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
748  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
749  %v2 = icmp eq <2 x i32> %a2, <i32 1, i32 1>
750  %v3 = and <2 x i1> %v0, %v1
751  %v4 = or <2 x i1> %v2, %v3
752  %v5 = sext <2 x i1> %v4 to <2 x i32>
753  ret <2 x i32> %v5
754}
755
756define <2 x i32> @f21(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 {
757; CHECK-LABEL: f21:
758; CHECK:       // %bb.0: // %b0
759; CHECK-NEXT:    {
760; CHECK-NEXT:     r7:6 = combine(#1,#1)
761; CHECK-NEXT:    }
762; CHECK-NEXT:    {
763; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r7:6)
764; CHECK-NEXT:    }
765; CHECK-NEXT:    {
766; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r7:6)
767; CHECK-NEXT:    }
768; CHECK-NEXT:    {
769; CHECK-NEXT:     p2 = vcmpw.eq(r5:4,r7:6)
770; CHECK-NEXT:    }
771; CHECK-NEXT:    {
772; CHECK-NEXT:     p0 = or(p2,or(p0,p1))
773; CHECK-NEXT:    }
774; CHECK-NEXT:    {
775; CHECK-NEXT:     r1:0 = mask(p0)
776; CHECK-NEXT:    }
777; CHECK-NEXT:    {
778; CHECK-NEXT:     jumpr r31
779; CHECK-NEXT:    }
780b0:
781  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
782  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
783  %v2 = icmp eq <2 x i32> %a2, <i32 1, i32 1>
784  %v3 = or <2 x i1> %v0, %v1
785  %v4 = or <2 x i1> %v2, %v3
786  %v5 = sext <2 x i1> %v4 to <2 x i32>
787  ret <2 x i32> %v5
788}
789
790define <2 x i32> @f22(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 {
791; CHECK-LABEL: f22:
792; CHECK:       // %bb.0: // %b0
793; CHECK-NEXT:    {
794; CHECK-NEXT:     r7:6 = combine(#1,#1)
795; CHECK-NEXT:    }
796; CHECK-NEXT:    {
797; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r7:6)
798; CHECK-NEXT:    }
799; CHECK-NEXT:    {
800; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r7:6)
801; CHECK-NEXT:    }
802; CHECK-NEXT:    {
803; CHECK-NEXT:     p2 = vcmpw.eq(r5:4,r7:6)
804; CHECK-NEXT:    }
805; CHECK-NEXT:    {
806; CHECK-NEXT:     p0 = and(p2,and(p0,!p1))
807; CHECK-NEXT:    }
808; CHECK-NEXT:    {
809; CHECK-NEXT:     r1:0 = mask(p0)
810; CHECK-NEXT:    }
811; CHECK-NEXT:    {
812; CHECK-NEXT:     jumpr r31
813; CHECK-NEXT:    }
814b0:
815  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
816  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
817  %v2 = xor <2 x i1> %v1, <i1 true, i1 true>
818  %v3 = icmp eq <2 x i32> %a2, <i32 1, i32 1>
819  %v4 = and <2 x i1> %v0, %v2
820  %v5 = and <2 x i1> %v3, %v4
821  %v6 = sext <2 x i1> %v5 to <2 x i32>
822  ret <2 x i32> %v6
823}
824
825define <2 x i32> @f23(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 {
826; CHECK-LABEL: f23:
827; CHECK:       // %bb.0: // %b0
828; CHECK-NEXT:    {
829; CHECK-NEXT:     r7:6 = combine(#1,#1)
830; CHECK-NEXT:    }
831; CHECK-NEXT:    {
832; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r7:6)
833; CHECK-NEXT:    }
834; CHECK-NEXT:    {
835; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r7:6)
836; CHECK-NEXT:    }
837; CHECK-NEXT:    {
838; CHECK-NEXT:     p2 = vcmpw.eq(r5:4,r7:6)
839; CHECK-NEXT:    }
840; CHECK-NEXT:    {
841; CHECK-NEXT:     p0 = and(p2,or(p0,!p1))
842; CHECK-NEXT:    }
843; CHECK-NEXT:    {
844; CHECK-NEXT:     r1:0 = mask(p0)
845; CHECK-NEXT:    }
846; CHECK-NEXT:    {
847; CHECK-NEXT:     jumpr r31
848; CHECK-NEXT:    }
849b0:
850  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
851  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
852  %v2 = xor <2 x i1> %v1, <i1 true, i1 true>
853  %v3 = icmp eq <2 x i32> %a2, <i32 1, i32 1>
854  %v4 = or <2 x i1> %v0, %v2
855  %v5 = and <2 x i1> %v3, %v4
856  %v6 = sext <2 x i1> %v5 to <2 x i32>
857  ret <2 x i32> %v6
858}
859
860define <2 x i32> @f24(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 {
861; CHECK-LABEL: f24:
862; CHECK:       // %bb.0: // %b0
863; CHECK-NEXT:    {
864; CHECK-NEXT:     r7:6 = combine(#1,#1)
865; CHECK-NEXT:    }
866; CHECK-NEXT:    {
867; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r7:6)
868; CHECK-NEXT:    }
869; CHECK-NEXT:    {
870; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r7:6)
871; CHECK-NEXT:    }
872; CHECK-NEXT:    {
873; CHECK-NEXT:     p2 = vcmpw.eq(r5:4,r7:6)
874; CHECK-NEXT:    }
875; CHECK-NEXT:    {
876; CHECK-NEXT:     p0 = or(p2,and(p0,!p1))
877; CHECK-NEXT:    }
878; CHECK-NEXT:    {
879; CHECK-NEXT:     r1:0 = mask(p0)
880; CHECK-NEXT:    }
881; CHECK-NEXT:    {
882; CHECK-NEXT:     jumpr r31
883; CHECK-NEXT:    }
884b0:
885  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
886  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
887  %v2 = xor <2 x i1> %v1, <i1 true, i1 true>
888  %v3 = icmp eq <2 x i32> %a2, <i32 1, i32 1>
889  %v4 = and <2 x i1> %v0, %v2
890  %v5 = or <2 x i1> %v3, %v4
891  %v6 = sext <2 x i1> %v5 to <2 x i32>
892  ret <2 x i32> %v6
893}
894
895define <2 x i32> @f25(<2 x i32> %a0, <2 x i32> %a1, <2 x i32> %a2) #1 {
896; CHECK-LABEL: f25:
897; CHECK:       // %bb.0: // %b0
898; CHECK-NEXT:    {
899; CHECK-NEXT:     r7:6 = combine(#1,#1)
900; CHECK-NEXT:    }
901; CHECK-NEXT:    {
902; CHECK-NEXT:     p0 = vcmpw.eq(r1:0,r7:6)
903; CHECK-NEXT:    }
904; CHECK-NEXT:    {
905; CHECK-NEXT:     p1 = vcmpw.eq(r3:2,r7:6)
906; CHECK-NEXT:    }
907; CHECK-NEXT:    {
908; CHECK-NEXT:     p2 = vcmpw.eq(r5:4,r7:6)
909; CHECK-NEXT:    }
910; CHECK-NEXT:    {
911; CHECK-NEXT:     p0 = or(p2,or(p0,!p1))
912; CHECK-NEXT:    }
913; CHECK-NEXT:    {
914; CHECK-NEXT:     r1:0 = mask(p0)
915; CHECK-NEXT:    }
916; CHECK-NEXT:    {
917; CHECK-NEXT:     jumpr r31
918; CHECK-NEXT:    }
919b0:
920  %v0 = icmp eq <2 x i32> %a0, <i32 1, i32 1>
921  %v1 = icmp eq <2 x i32> %a1, <i32 1, i32 1>
922  %v2 = xor <2 x i1> %v1, <i1 true, i1 true>
923  %v3 = icmp eq <2 x i32> %a2, <i32 1, i32 1>
924  %v4 = or <2 x i1> %v0, %v2
925  %v5 = or <2 x i1> %v3, %v4
926  %v6 = sext <2 x i1> %v5 to <2 x i32>
927  ret <2 x i32> %v6
928}
929
930define <4 x i16> @f26(<4 x i16> %a0, <4 x i16> %a1) #1 {
931; CHECK-LABEL: f26:
932; CHECK:       // %bb.0: // %b0
933; CHECK-NEXT:    {
934; CHECK-NEXT:     r4 = ##65537
935; CHECK-NEXT:    }
936; CHECK-NEXT:    {
937; CHECK-NEXT:     r5 = ##65537
938; CHECK-NEXT:    }
939; CHECK-NEXT:    {
940; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r5:4)
941; CHECK-NEXT:    }
942; CHECK-NEXT:    {
943; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r5:4)
944; CHECK-NEXT:    }
945; CHECK-NEXT:    {
946; CHECK-NEXT:     p0 = and(p0,p1)
947; CHECK-NEXT:    }
948; CHECK-NEXT:    {
949; CHECK-NEXT:     r1:0 = mask(p0)
950; CHECK-NEXT:    }
951; CHECK-NEXT:    {
952; CHECK-NEXT:     jumpr r31
953; CHECK-NEXT:    }
954b0:
955  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
956  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
957  %v2 = and <4 x i1> %v0, %v1
958  %v3 = sext <4 x i1> %v2 to <4 x i16>
959  ret <4 x i16> %v3
960}
961
962define <4 x i16> @f27(<4 x i16> %a0, <4 x i16> %a1) #1 {
963; CHECK-LABEL: f27:
964; CHECK:       // %bb.0: // %b0
965; CHECK-NEXT:    {
966; CHECK-NEXT:     r4 = ##65537
967; CHECK-NEXT:    }
968; CHECK-NEXT:    {
969; CHECK-NEXT:     r5 = ##65537
970; CHECK-NEXT:    }
971; CHECK-NEXT:    {
972; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r5:4)
973; CHECK-NEXT:    }
974; CHECK-NEXT:    {
975; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r5:4)
976; CHECK-NEXT:    }
977; CHECK-NEXT:    {
978; CHECK-NEXT:     p0 = or(p0,p1)
979; CHECK-NEXT:    }
980; CHECK-NEXT:    {
981; CHECK-NEXT:     r1:0 = mask(p0)
982; CHECK-NEXT:    }
983; CHECK-NEXT:    {
984; CHECK-NEXT:     jumpr r31
985; CHECK-NEXT:    }
986b0:
987  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
988  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
989  %v2 = or <4 x i1> %v0, %v1
990  %v3 = sext <4 x i1> %v2 to <4 x i16>
991  ret <4 x i16> %v3
992}
993
994define <4 x i16> @f28(<4 x i16> %a0, <4 x i16> %a1) #1 {
995; CHECK-LABEL: f28:
996; CHECK:       // %bb.0: // %b0
997; CHECK-NEXT:    {
998; CHECK-NEXT:     r4 = ##65537
999; CHECK-NEXT:    }
1000; CHECK-NEXT:    {
1001; CHECK-NEXT:     r5 = ##65537
1002; CHECK-NEXT:    }
1003; CHECK-NEXT:    {
1004; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r5:4)
1005; CHECK-NEXT:    }
1006; CHECK-NEXT:    {
1007; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r5:4)
1008; CHECK-NEXT:    }
1009; CHECK-NEXT:    {
1010; CHECK-NEXT:     p0 = xor(p0,p1)
1011; CHECK-NEXT:    }
1012; CHECK-NEXT:    {
1013; CHECK-NEXT:     r1:0 = mask(p0)
1014; CHECK-NEXT:    }
1015; CHECK-NEXT:    {
1016; CHECK-NEXT:     jumpr r31
1017; CHECK-NEXT:    }
1018b0:
1019  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1020  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1021  %v2 = xor <4 x i1> %v0, %v1
1022  %v3 = sext <4 x i1> %v2 to <4 x i16>
1023  ret <4 x i16> %v3
1024}
1025
1026define <4 x i16> @f29(<4 x i16> %a0, <4 x i16> %a1) #1 {
1027; CHECK-LABEL: f29:
1028; CHECK:       // %bb.0: // %b0
1029; CHECK-NEXT:    {
1030; CHECK-NEXT:     r4 = ##65537
1031; CHECK-NEXT:    }
1032; CHECK-NEXT:    {
1033; CHECK-NEXT:     r5 = ##65537
1034; CHECK-NEXT:    }
1035; CHECK-NEXT:    {
1036; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r5:4)
1037; CHECK-NEXT:    }
1038; CHECK-NEXT:    {
1039; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r5:4)
1040; CHECK-NEXT:    }
1041; CHECK-NEXT:    {
1042; CHECK-NEXT:     p0 = and(p0,!p1)
1043; CHECK-NEXT:    }
1044; CHECK-NEXT:    {
1045; CHECK-NEXT:     r1:0 = mask(p0)
1046; CHECK-NEXT:    }
1047; CHECK-NEXT:    {
1048; CHECK-NEXT:     jumpr r31
1049; CHECK-NEXT:    }
1050b0:
1051  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1052  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1053  %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true>
1054  %v3 = and <4 x i1> %v0, %v2
1055  %v4 = sext <4 x i1> %v3 to <4 x i16>
1056  ret <4 x i16> %v4
1057}
1058
1059define <4 x i16> @f30(<4 x i16> %a0, <4 x i16> %a1) #1 {
1060; CHECK-LABEL: f30:
1061; CHECK:       // %bb.0: // %b0
1062; CHECK-NEXT:    {
1063; CHECK-NEXT:     r4 = ##65537
1064; CHECK-NEXT:    }
1065; CHECK-NEXT:    {
1066; CHECK-NEXT:     r5 = ##65537
1067; CHECK-NEXT:    }
1068; CHECK-NEXT:    {
1069; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r5:4)
1070; CHECK-NEXT:    }
1071; CHECK-NEXT:    {
1072; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r5:4)
1073; CHECK-NEXT:    }
1074; CHECK-NEXT:    {
1075; CHECK-NEXT:     p0 = or(p0,!p1)
1076; CHECK-NEXT:    }
1077; CHECK-NEXT:    {
1078; CHECK-NEXT:     r1:0 = mask(p0)
1079; CHECK-NEXT:    }
1080; CHECK-NEXT:    {
1081; CHECK-NEXT:     jumpr r31
1082; CHECK-NEXT:    }
1083b0:
1084  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1085  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1086  %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true>
1087  %v3 = or <4 x i1> %v0, %v2
1088  %v4 = sext <4 x i1> %v3 to <4 x i16>
1089  ret <4 x i16> %v4
1090}
1091
1092define <4 x i16> @f31(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 {
1093; CHECK-LABEL: f31:
1094; CHECK:       // %bb.0: // %b0
1095; CHECK-NEXT:    {
1096; CHECK-NEXT:     r6 = ##65537
1097; CHECK-NEXT:    }
1098; CHECK-NEXT:    {
1099; CHECK-NEXT:     r7 = ##65537
1100; CHECK-NEXT:    }
1101; CHECK-NEXT:    {
1102; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r7:6)
1103; CHECK-NEXT:    }
1104; CHECK-NEXT:    {
1105; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r7:6)
1106; CHECK-NEXT:    }
1107; CHECK-NEXT:    {
1108; CHECK-NEXT:     p2 = vcmph.eq(r5:4,r7:6)
1109; CHECK-NEXT:    }
1110; CHECK-NEXT:    {
1111; CHECK-NEXT:     p0 = and(p2,and(p0,p1))
1112; CHECK-NEXT:    }
1113; CHECK-NEXT:    {
1114; CHECK-NEXT:     r1:0 = mask(p0)
1115; CHECK-NEXT:    }
1116; CHECK-NEXT:    {
1117; CHECK-NEXT:     jumpr r31
1118; CHECK-NEXT:    }
1119b0:
1120  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1121  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1122  %v2 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1>
1123  %v3 = and <4 x i1> %v0, %v1
1124  %v4 = and <4 x i1> %v2, %v3
1125  %v5 = sext <4 x i1> %v4 to <4 x i16>
1126  ret <4 x i16> %v5
1127}
1128
1129define <4 x i16> @f32(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 {
1130; CHECK-LABEL: f32:
1131; CHECK:       // %bb.0: // %b0
1132; CHECK-NEXT:    {
1133; CHECK-NEXT:     r6 = ##65537
1134; CHECK-NEXT:    }
1135; CHECK-NEXT:    {
1136; CHECK-NEXT:     r7 = ##65537
1137; CHECK-NEXT:    }
1138; CHECK-NEXT:    {
1139; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r7:6)
1140; CHECK-NEXT:    }
1141; CHECK-NEXT:    {
1142; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r7:6)
1143; CHECK-NEXT:    }
1144; CHECK-NEXT:    {
1145; CHECK-NEXT:     p2 = vcmph.eq(r5:4,r7:6)
1146; CHECK-NEXT:    }
1147; CHECK-NEXT:    {
1148; CHECK-NEXT:     p0 = and(p2,or(p0,p1))
1149; CHECK-NEXT:    }
1150; CHECK-NEXT:    {
1151; CHECK-NEXT:     r1:0 = mask(p0)
1152; CHECK-NEXT:    }
1153; CHECK-NEXT:    {
1154; CHECK-NEXT:     jumpr r31
1155; CHECK-NEXT:    }
1156b0:
1157  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1158  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1159  %v2 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1>
1160  %v3 = or <4 x i1> %v0, %v1
1161  %v4 = and <4 x i1> %v2, %v3
1162  %v5 = sext <4 x i1> %v4 to <4 x i16>
1163  ret <4 x i16> %v5
1164}
1165
1166define <4 x i16> @f33(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 {
1167; CHECK-LABEL: f33:
1168; CHECK:       // %bb.0: // %b0
1169; CHECK-NEXT:    {
1170; CHECK-NEXT:     r6 = ##65537
1171; CHECK-NEXT:    }
1172; CHECK-NEXT:    {
1173; CHECK-NEXT:     r7 = ##65537
1174; CHECK-NEXT:    }
1175; CHECK-NEXT:    {
1176; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r7:6)
1177; CHECK-NEXT:    }
1178; CHECK-NEXT:    {
1179; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r7:6)
1180; CHECK-NEXT:    }
1181; CHECK-NEXT:    {
1182; CHECK-NEXT:     p2 = vcmph.eq(r5:4,r7:6)
1183; CHECK-NEXT:    }
1184; CHECK-NEXT:    {
1185; CHECK-NEXT:     p0 = or(p2,and(p0,p1))
1186; CHECK-NEXT:    }
1187; CHECK-NEXT:    {
1188; CHECK-NEXT:     r1:0 = mask(p0)
1189; CHECK-NEXT:    }
1190; CHECK-NEXT:    {
1191; CHECK-NEXT:     jumpr r31
1192; CHECK-NEXT:    }
1193b0:
1194  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1195  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1196  %v2 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1>
1197  %v3 = and <4 x i1> %v0, %v1
1198  %v4 = or <4 x i1> %v2, %v3
1199  %v5 = sext <4 x i1> %v4 to <4 x i16>
1200  ret <4 x i16> %v5
1201}
1202
1203define <4 x i16> @f34(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 {
1204; CHECK-LABEL: f34:
1205; CHECK:       // %bb.0: // %b0
1206; CHECK-NEXT:    {
1207; CHECK-NEXT:     r6 = ##65537
1208; CHECK-NEXT:    }
1209; CHECK-NEXT:    {
1210; CHECK-NEXT:     r7 = ##65537
1211; CHECK-NEXT:    }
1212; CHECK-NEXT:    {
1213; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r7:6)
1214; CHECK-NEXT:    }
1215; CHECK-NEXT:    {
1216; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r7:6)
1217; CHECK-NEXT:    }
1218; CHECK-NEXT:    {
1219; CHECK-NEXT:     p2 = vcmph.eq(r5:4,r7:6)
1220; CHECK-NEXT:    }
1221; CHECK-NEXT:    {
1222; CHECK-NEXT:     p0 = or(p2,or(p0,p1))
1223; CHECK-NEXT:    }
1224; CHECK-NEXT:    {
1225; CHECK-NEXT:     r1:0 = mask(p0)
1226; CHECK-NEXT:    }
1227; CHECK-NEXT:    {
1228; CHECK-NEXT:     jumpr r31
1229; CHECK-NEXT:    }
1230b0:
1231  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1232  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1233  %v2 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1>
1234  %v3 = or <4 x i1> %v0, %v1
1235  %v4 = or <4 x i1> %v2, %v3
1236  %v5 = sext <4 x i1> %v4 to <4 x i16>
1237  ret <4 x i16> %v5
1238}
1239
1240define <4 x i16> @f35(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 {
1241; CHECK-LABEL: f35:
1242; CHECK:       // %bb.0: // %b0
1243; CHECK-NEXT:    {
1244; CHECK-NEXT:     r6 = ##65537
1245; CHECK-NEXT:    }
1246; CHECK-NEXT:    {
1247; CHECK-NEXT:     r7 = ##65537
1248; CHECK-NEXT:    }
1249; CHECK-NEXT:    {
1250; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r7:6)
1251; CHECK-NEXT:    }
1252; CHECK-NEXT:    {
1253; CHECK-NEXT:     p1 = vcmph.eq(r5:4,r7:6)
1254; CHECK-NEXT:    }
1255; CHECK-NEXT:    {
1256; CHECK-NEXT:     p2 = vcmph.eq(r3:2,r7:6)
1257; CHECK-NEXT:    }
1258; CHECK-NEXT:    {
1259; CHECK-NEXT:     p0 = and(p0,p1)
1260; CHECK-NEXT:    }
1261; CHECK-NEXT:    {
1262; CHECK-NEXT:     p0 = and(p0,!p2)
1263; CHECK-NEXT:    }
1264; CHECK-NEXT:    {
1265; CHECK-NEXT:     r1:0 = mask(p0)
1266; CHECK-NEXT:    }
1267; CHECK-NEXT:    {
1268; CHECK-NEXT:     jumpr r31
1269; CHECK-NEXT:    }
1270b0:
1271  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1272  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1273  %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true>
1274  %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1>
1275  %v4 = and <4 x i1> %v0, %v2
1276  %v5 = and <4 x i1> %v3, %v4
1277  %v6 = sext <4 x i1> %v5 to <4 x i16>
1278  ret <4 x i16> %v6
1279}
1280
1281define <4 x i16> @f36(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 {
1282; CHECK-LABEL: f36:
1283; CHECK:       // %bb.0: // %b0
1284; CHECK-NEXT:    {
1285; CHECK-NEXT:     r6 = ##65537
1286; CHECK-NEXT:    }
1287; CHECK-NEXT:    {
1288; CHECK-NEXT:     r7 = ##65537
1289; CHECK-NEXT:    }
1290; CHECK-NEXT:    {
1291; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r7:6)
1292; CHECK-NEXT:    }
1293; CHECK-NEXT:    {
1294; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r7:6)
1295; CHECK-NEXT:    }
1296; CHECK-NEXT:    {
1297; CHECK-NEXT:     p2 = vcmph.eq(r5:4,r7:6)
1298; CHECK-NEXT:    }
1299; CHECK-NEXT:    {
1300; CHECK-NEXT:     p0 = and(p2,or(p0,!p1))
1301; CHECK-NEXT:    }
1302; CHECK-NEXT:    {
1303; CHECK-NEXT:     r1:0 = mask(p0)
1304; CHECK-NEXT:    }
1305; CHECK-NEXT:    {
1306; CHECK-NEXT:     jumpr r31
1307; CHECK-NEXT:    }
1308b0:
1309  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1310  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1311  %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true>
1312  %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1>
1313  %v4 = or <4 x i1> %v0, %v2
1314  %v5 = and <4 x i1> %v3, %v4
1315  %v6 = sext <4 x i1> %v5 to <4 x i16>
1316  ret <4 x i16> %v6
1317}
1318
1319define <4 x i16> @f37(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 {
1320; CHECK-LABEL: f37:
1321; CHECK:       // %bb.0: // %b0
1322; CHECK-NEXT:    {
1323; CHECK-NEXT:     r6 = ##65537
1324; CHECK-NEXT:    }
1325; CHECK-NEXT:    {
1326; CHECK-NEXT:     r7 = ##65537
1327; CHECK-NEXT:    }
1328; CHECK-NEXT:    {
1329; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r7:6)
1330; CHECK-NEXT:    }
1331; CHECK-NEXT:    {
1332; CHECK-NEXT:     p1 = vcmph.eq(r3:2,r7:6)
1333; CHECK-NEXT:    }
1334; CHECK-NEXT:    {
1335; CHECK-NEXT:     p2 = vcmph.eq(r5:4,r7:6)
1336; CHECK-NEXT:    }
1337; CHECK-NEXT:    {
1338; CHECK-NEXT:     p0 = or(p2,and(p0,!p1))
1339; CHECK-NEXT:    }
1340; CHECK-NEXT:    {
1341; CHECK-NEXT:     r1:0 = mask(p0)
1342; CHECK-NEXT:    }
1343; CHECK-NEXT:    {
1344; CHECK-NEXT:     jumpr r31
1345; CHECK-NEXT:    }
1346b0:
1347  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1348  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1349  %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true>
1350  %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1>
1351  %v4 = and <4 x i1> %v0, %v2
1352  %v5 = or <4 x i1> %v3, %v4
1353  %v6 = sext <4 x i1> %v5 to <4 x i16>
1354  ret <4 x i16> %v6
1355}
1356
1357define <4 x i16> @f38(<4 x i16> %a0, <4 x i16> %a1, <4 x i16> %a2) #1 {
1358; CHECK-LABEL: f38:
1359; CHECK:       // %bb.0: // %b0
1360; CHECK-NEXT:    {
1361; CHECK-NEXT:     r6 = ##65537
1362; CHECK-NEXT:    }
1363; CHECK-NEXT:    {
1364; CHECK-NEXT:     r7 = ##65537
1365; CHECK-NEXT:    }
1366; CHECK-NEXT:    {
1367; CHECK-NEXT:     p0 = vcmph.eq(r1:0,r7:6)
1368; CHECK-NEXT:    }
1369; CHECK-NEXT:    {
1370; CHECK-NEXT:     p1 = vcmph.eq(r5:4,r7:6)
1371; CHECK-NEXT:    }
1372; CHECK-NEXT:    {
1373; CHECK-NEXT:     p2 = vcmph.eq(r3:2,r7:6)
1374; CHECK-NEXT:    }
1375; CHECK-NEXT:    {
1376; CHECK-NEXT:     p0 = or(p0,p1)
1377; CHECK-NEXT:    }
1378; CHECK-NEXT:    {
1379; CHECK-NEXT:     p0 = or(p0,!p2)
1380; CHECK-NEXT:    }
1381; CHECK-NEXT:    {
1382; CHECK-NEXT:     r1:0 = mask(p0)
1383; CHECK-NEXT:    }
1384; CHECK-NEXT:    {
1385; CHECK-NEXT:     jumpr r31
1386; CHECK-NEXT:    }
1387b0:
1388  %v0 = icmp eq <4 x i16> %a0, <i16 1, i16 1, i16 1, i16 1>
1389  %v1 = icmp eq <4 x i16> %a1, <i16 1, i16 1, i16 1, i16 1>
1390  %v2 = xor <4 x i1> %v1, <i1 true, i1 true, i1 true, i1 true>
1391  %v3 = icmp eq <4 x i16> %a2, <i16 1, i16 1, i16 1, i16 1>
1392  %v4 = or <4 x i1> %v0, %v2
1393  %v5 = or <4 x i1> %v3, %v4
1394  %v6 = sext <4 x i1> %v5 to <4 x i16>
1395  ret <4 x i16> %v6
1396}
1397
1398define <8 x i8> @f39(<8 x i8> %a0, <8 x i8> %a1) #1 {
1399; CHECK-LABEL: f39:
1400; CHECK:       // %bb.0: // %b0
1401; CHECK-NEXT:    {
1402; CHECK-NEXT:     r4 = ##16843009
1403; CHECK-NEXT:    }
1404; CHECK-NEXT:    {
1405; CHECK-NEXT:     r5 = ##16843009
1406; CHECK-NEXT:    }
1407; CHECK-NEXT:    {
1408; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r5:4)
1409; CHECK-NEXT:    }
1410; CHECK-NEXT:    {
1411; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r5:4)
1412; CHECK-NEXT:    }
1413; CHECK-NEXT:    {
1414; CHECK-NEXT:     p0 = and(p0,p1)
1415; CHECK-NEXT:    }
1416; CHECK-NEXT:    {
1417; CHECK-NEXT:     r1:0 = mask(p0)
1418; CHECK-NEXT:    }
1419; CHECK-NEXT:    {
1420; CHECK-NEXT:     jumpr r31
1421; CHECK-NEXT:    }
1422b0:
1423  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1424  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1425  %v2 = and <8 x i1> %v0, %v1
1426  %v3 = sext <8 x i1> %v2 to <8 x i8>
1427  ret <8 x i8> %v3
1428}
1429
1430define <8 x i8> @f40(<8 x i8> %a0, <8 x i8> %a1) #1 {
1431; CHECK-LABEL: f40:
1432; CHECK:       // %bb.0: // %b0
1433; CHECK-NEXT:    {
1434; CHECK-NEXT:     r4 = ##16843009
1435; CHECK-NEXT:    }
1436; CHECK-NEXT:    {
1437; CHECK-NEXT:     r5 = ##16843009
1438; CHECK-NEXT:    }
1439; CHECK-NEXT:    {
1440; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r5:4)
1441; CHECK-NEXT:    }
1442; CHECK-NEXT:    {
1443; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r5:4)
1444; CHECK-NEXT:    }
1445; CHECK-NEXT:    {
1446; CHECK-NEXT:     p0 = or(p0,p1)
1447; CHECK-NEXT:    }
1448; CHECK-NEXT:    {
1449; CHECK-NEXT:     r1:0 = mask(p0)
1450; CHECK-NEXT:    }
1451; CHECK-NEXT:    {
1452; CHECK-NEXT:     jumpr r31
1453; CHECK-NEXT:    }
1454b0:
1455  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1456  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1457  %v2 = or <8 x i1> %v0, %v1
1458  %v3 = sext <8 x i1> %v2 to <8 x i8>
1459  ret <8 x i8> %v3
1460}
1461
1462define <8 x i8> @f41(<8 x i8> %a0, <8 x i8> %a1) #1 {
1463; CHECK-LABEL: f41:
1464; CHECK:       // %bb.0: // %b0
1465; CHECK-NEXT:    {
1466; CHECK-NEXT:     r4 = ##16843009
1467; CHECK-NEXT:    }
1468; CHECK-NEXT:    {
1469; CHECK-NEXT:     r5 = ##16843009
1470; CHECK-NEXT:    }
1471; CHECK-NEXT:    {
1472; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r5:4)
1473; CHECK-NEXT:    }
1474; CHECK-NEXT:    {
1475; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r5:4)
1476; CHECK-NEXT:    }
1477; CHECK-NEXT:    {
1478; CHECK-NEXT:     p0 = xor(p0,p1)
1479; CHECK-NEXT:    }
1480; CHECK-NEXT:    {
1481; CHECK-NEXT:     r1:0 = mask(p0)
1482; CHECK-NEXT:    }
1483; CHECK-NEXT:    {
1484; CHECK-NEXT:     jumpr r31
1485; CHECK-NEXT:    }
1486b0:
1487  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1488  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1489  %v2 = xor <8 x i1> %v0, %v1
1490  %v3 = sext <8 x i1> %v2 to <8 x i8>
1491  ret <8 x i8> %v3
1492}
1493
1494define <8 x i8> @f42(<8 x i8> %a0, <8 x i8> %a1) #1 {
1495; CHECK-LABEL: f42:
1496; CHECK:       // %bb.0: // %b0
1497; CHECK-NEXT:    {
1498; CHECK-NEXT:     r4 = ##16843009
1499; CHECK-NEXT:    }
1500; CHECK-NEXT:    {
1501; CHECK-NEXT:     r5 = ##16843009
1502; CHECK-NEXT:    }
1503; CHECK-NEXT:    {
1504; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r5:4)
1505; CHECK-NEXT:    }
1506; CHECK-NEXT:    {
1507; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r5:4)
1508; CHECK-NEXT:    }
1509; CHECK-NEXT:    {
1510; CHECK-NEXT:     p0 = and(p0,!p1)
1511; CHECK-NEXT:    }
1512; CHECK-NEXT:    {
1513; CHECK-NEXT:     r1:0 = mask(p0)
1514; CHECK-NEXT:    }
1515; CHECK-NEXT:    {
1516; CHECK-NEXT:     jumpr r31
1517; CHECK-NEXT:    }
1518b0:
1519  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1520  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1521  %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
1522  %v3 = and <8 x i1> %v0, %v2
1523  %v4 = sext <8 x i1> %v3 to <8 x i8>
1524  ret <8 x i8> %v4
1525}
1526
1527define <8 x i8> @f43(<8 x i8> %a0, <8 x i8> %a1) #1 {
1528; CHECK-LABEL: f43:
1529; CHECK:       // %bb.0: // %b0
1530; CHECK-NEXT:    {
1531; CHECK-NEXT:     r4 = ##16843009
1532; CHECK-NEXT:    }
1533; CHECK-NEXT:    {
1534; CHECK-NEXT:     r5 = ##16843009
1535; CHECK-NEXT:    }
1536; CHECK-NEXT:    {
1537; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r5:4)
1538; CHECK-NEXT:    }
1539; CHECK-NEXT:    {
1540; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r5:4)
1541; CHECK-NEXT:    }
1542; CHECK-NEXT:    {
1543; CHECK-NEXT:     p0 = or(p0,!p1)
1544; CHECK-NEXT:    }
1545; CHECK-NEXT:    {
1546; CHECK-NEXT:     r1:0 = mask(p0)
1547; CHECK-NEXT:    }
1548; CHECK-NEXT:    {
1549; CHECK-NEXT:     jumpr r31
1550; CHECK-NEXT:    }
1551b0:
1552  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1553  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1554  %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
1555  %v3 = or <8 x i1> %v0, %v2
1556  %v4 = sext <8 x i1> %v3 to <8 x i8>
1557  ret <8 x i8> %v4
1558}
1559
1560define <8 x i8> @f44(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 {
1561; CHECK-LABEL: f44:
1562; CHECK:       // %bb.0: // %b0
1563; CHECK-NEXT:    {
1564; CHECK-NEXT:     r6 = ##16843009
1565; CHECK-NEXT:    }
1566; CHECK-NEXT:    {
1567; CHECK-NEXT:     r7 = ##16843009
1568; CHECK-NEXT:    }
1569; CHECK-NEXT:    {
1570; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r7:6)
1571; CHECK-NEXT:    }
1572; CHECK-NEXT:    {
1573; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r7:6)
1574; CHECK-NEXT:    }
1575; CHECK-NEXT:    {
1576; CHECK-NEXT:     p2 = vcmpb.eq(r5:4,r7:6)
1577; CHECK-NEXT:    }
1578; CHECK-NEXT:    {
1579; CHECK-NEXT:     p0 = and(p2,and(p0,p1))
1580; CHECK-NEXT:    }
1581; CHECK-NEXT:    {
1582; CHECK-NEXT:     r1:0 = mask(p0)
1583; CHECK-NEXT:    }
1584; CHECK-NEXT:    {
1585; CHECK-NEXT:     jumpr r31
1586; CHECK-NEXT:    }
1587b0:
1588  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1589  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1590  %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1591  %v3 = and <8 x i1> %v0, %v1
1592  %v4 = and <8 x i1> %v2, %v3
1593  %v5 = sext <8 x i1> %v4 to <8 x i8>
1594  ret <8 x i8> %v5
1595}
1596
1597define <8 x i8> @f45(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 {
1598; CHECK-LABEL: f45:
1599; CHECK:       // %bb.0: // %b0
1600; CHECK-NEXT:    {
1601; CHECK-NEXT:     r6 = ##16843009
1602; CHECK-NEXT:    }
1603; CHECK-NEXT:    {
1604; CHECK-NEXT:     r7 = ##16843009
1605; CHECK-NEXT:    }
1606; CHECK-NEXT:    {
1607; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r7:6)
1608; CHECK-NEXT:    }
1609; CHECK-NEXT:    {
1610; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r7:6)
1611; CHECK-NEXT:    }
1612; CHECK-NEXT:    {
1613; CHECK-NEXT:     p2 = vcmpb.eq(r5:4,r7:6)
1614; CHECK-NEXT:    }
1615; CHECK-NEXT:    {
1616; CHECK-NEXT:     p0 = and(p2,or(p0,p1))
1617; CHECK-NEXT:    }
1618; CHECK-NEXT:    {
1619; CHECK-NEXT:     r1:0 = mask(p0)
1620; CHECK-NEXT:    }
1621; CHECK-NEXT:    {
1622; CHECK-NEXT:     jumpr r31
1623; CHECK-NEXT:    }
1624b0:
1625  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1626  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1627  %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1628  %v3 = or <8 x i1> %v0, %v1
1629  %v4 = and <8 x i1> %v2, %v3
1630  %v5 = sext <8 x i1> %v4 to <8 x i8>
1631  ret <8 x i8> %v5
1632}
1633
1634define <8 x i8> @f46(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 {
1635; CHECK-LABEL: f46:
1636; CHECK:       // %bb.0: // %b0
1637; CHECK-NEXT:    {
1638; CHECK-NEXT:     r6 = ##16843009
1639; CHECK-NEXT:    }
1640; CHECK-NEXT:    {
1641; CHECK-NEXT:     r7 = ##16843009
1642; CHECK-NEXT:    }
1643; CHECK-NEXT:    {
1644; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r7:6)
1645; CHECK-NEXT:    }
1646; CHECK-NEXT:    {
1647; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r7:6)
1648; CHECK-NEXT:    }
1649; CHECK-NEXT:    {
1650; CHECK-NEXT:     p2 = vcmpb.eq(r5:4,r7:6)
1651; CHECK-NEXT:    }
1652; CHECK-NEXT:    {
1653; CHECK-NEXT:     p0 = or(p2,and(p0,p1))
1654; CHECK-NEXT:    }
1655; CHECK-NEXT:    {
1656; CHECK-NEXT:     r1:0 = mask(p0)
1657; CHECK-NEXT:    }
1658; CHECK-NEXT:    {
1659; CHECK-NEXT:     jumpr r31
1660; CHECK-NEXT:    }
1661b0:
1662  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1663  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1664  %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1665  %v3 = and <8 x i1> %v0, %v1
1666  %v4 = or <8 x i1> %v2, %v3
1667  %v5 = sext <8 x i1> %v4 to <8 x i8>
1668  ret <8 x i8> %v5
1669}
1670
1671define <8 x i8> @f47(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 {
1672; CHECK-LABEL: f47:
1673; CHECK:       // %bb.0: // %b0
1674; CHECK-NEXT:    {
1675; CHECK-NEXT:     r6 = ##16843009
1676; CHECK-NEXT:    }
1677; CHECK-NEXT:    {
1678; CHECK-NEXT:     r7 = ##16843009
1679; CHECK-NEXT:    }
1680; CHECK-NEXT:    {
1681; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r7:6)
1682; CHECK-NEXT:    }
1683; CHECK-NEXT:    {
1684; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r7:6)
1685; CHECK-NEXT:    }
1686; CHECK-NEXT:    {
1687; CHECK-NEXT:     p2 = vcmpb.eq(r5:4,r7:6)
1688; CHECK-NEXT:    }
1689; CHECK-NEXT:    {
1690; CHECK-NEXT:     p0 = or(p2,or(p0,p1))
1691; CHECK-NEXT:    }
1692; CHECK-NEXT:    {
1693; CHECK-NEXT:     r1:0 = mask(p0)
1694; CHECK-NEXT:    }
1695; CHECK-NEXT:    {
1696; CHECK-NEXT:     jumpr r31
1697; CHECK-NEXT:    }
1698b0:
1699  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1700  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1701  %v2 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1702  %v3 = or <8 x i1> %v0, %v1
1703  %v4 = or <8 x i1> %v2, %v3
1704  %v5 = sext <8 x i1> %v4 to <8 x i8>
1705  ret <8 x i8> %v5
1706}
1707
1708define <8 x i8> @f48(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 {
1709; CHECK-LABEL: f48:
1710; CHECK:       // %bb.0: // %b0
1711; CHECK-NEXT:    {
1712; CHECK-NEXT:     r6 = ##16843009
1713; CHECK-NEXT:    }
1714; CHECK-NEXT:    {
1715; CHECK-NEXT:     r7 = ##16843009
1716; CHECK-NEXT:    }
1717; CHECK-NEXT:    {
1718; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r7:6)
1719; CHECK-NEXT:    }
1720; CHECK-NEXT:    {
1721; CHECK-NEXT:     p1 = vcmpb.eq(r5:4,r7:6)
1722; CHECK-NEXT:    }
1723; CHECK-NEXT:    {
1724; CHECK-NEXT:     p2 = vcmpb.eq(r3:2,r7:6)
1725; CHECK-NEXT:    }
1726; CHECK-NEXT:    {
1727; CHECK-NEXT:     p0 = and(p0,p1)
1728; CHECK-NEXT:    }
1729; CHECK-NEXT:    {
1730; CHECK-NEXT:     p0 = and(p0,!p2)
1731; CHECK-NEXT:    }
1732; CHECK-NEXT:    {
1733; CHECK-NEXT:     r1:0 = mask(p0)
1734; CHECK-NEXT:    }
1735; CHECK-NEXT:    {
1736; CHECK-NEXT:     jumpr r31
1737; CHECK-NEXT:    }
1738b0:
1739  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1740  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1741  %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
1742  %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1743  %v4 = and <8 x i1> %v0, %v2
1744  %v5 = and <8 x i1> %v3, %v4
1745  %v6 = sext <8 x i1> %v5 to <8 x i8>
1746  ret <8 x i8> %v6
1747}
1748
1749define <8 x i8> @f49(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 {
1750; CHECK-LABEL: f49:
1751; CHECK:       // %bb.0: // %b0
1752; CHECK-NEXT:    {
1753; CHECK-NEXT:     r6 = ##16843009
1754; CHECK-NEXT:    }
1755; CHECK-NEXT:    {
1756; CHECK-NEXT:     r7 = ##16843009
1757; CHECK-NEXT:    }
1758; CHECK-NEXT:    {
1759; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r7:6)
1760; CHECK-NEXT:    }
1761; CHECK-NEXT:    {
1762; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r7:6)
1763; CHECK-NEXT:    }
1764; CHECK-NEXT:    {
1765; CHECK-NEXT:     p2 = vcmpb.eq(r5:4,r7:6)
1766; CHECK-NEXT:    }
1767; CHECK-NEXT:    {
1768; CHECK-NEXT:     p0 = and(p2,or(p0,!p1))
1769; CHECK-NEXT:    }
1770; CHECK-NEXT:    {
1771; CHECK-NEXT:     r1:0 = mask(p0)
1772; CHECK-NEXT:    }
1773; CHECK-NEXT:    {
1774; CHECK-NEXT:     jumpr r31
1775; CHECK-NEXT:    }
1776b0:
1777  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1778  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1779  %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
1780  %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1781  %v4 = or <8 x i1> %v0, %v2
1782  %v5 = and <8 x i1> %v3, %v4
1783  %v6 = sext <8 x i1> %v5 to <8 x i8>
1784  ret <8 x i8> %v6
1785}
1786
1787define <8 x i8> @f50(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 {
1788; CHECK-LABEL: f50:
1789; CHECK:       // %bb.0: // %b0
1790; CHECK-NEXT:    {
1791; CHECK-NEXT:     r6 = ##16843009
1792; CHECK-NEXT:    }
1793; CHECK-NEXT:    {
1794; CHECK-NEXT:     r7 = ##16843009
1795; CHECK-NEXT:    }
1796; CHECK-NEXT:    {
1797; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r7:6)
1798; CHECK-NEXT:    }
1799; CHECK-NEXT:    {
1800; CHECK-NEXT:     p1 = vcmpb.eq(r3:2,r7:6)
1801; CHECK-NEXT:    }
1802; CHECK-NEXT:    {
1803; CHECK-NEXT:     p2 = vcmpb.eq(r5:4,r7:6)
1804; CHECK-NEXT:    }
1805; CHECK-NEXT:    {
1806; CHECK-NEXT:     p0 = or(p2,and(p0,!p1))
1807; CHECK-NEXT:    }
1808; CHECK-NEXT:    {
1809; CHECK-NEXT:     r1:0 = mask(p0)
1810; CHECK-NEXT:    }
1811; CHECK-NEXT:    {
1812; CHECK-NEXT:     jumpr r31
1813; CHECK-NEXT:    }
1814b0:
1815  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1816  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1817  %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
1818  %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1819  %v4 = and <8 x i1> %v0, %v2
1820  %v5 = or <8 x i1> %v3, %v4
1821  %v6 = sext <8 x i1> %v5 to <8 x i8>
1822  ret <8 x i8> %v6
1823}
1824
1825define <8 x i8> @f51(<8 x i8> %a0, <8 x i8> %a1, <8 x i8> %a2) #1 {
1826; CHECK-LABEL: f51:
1827; CHECK:       // %bb.0: // %b0
1828; CHECK-NEXT:    {
1829; CHECK-NEXT:     r6 = ##16843009
1830; CHECK-NEXT:    }
1831; CHECK-NEXT:    {
1832; CHECK-NEXT:     r7 = ##16843009
1833; CHECK-NEXT:    }
1834; CHECK-NEXT:    {
1835; CHECK-NEXT:     p0 = vcmpb.eq(r1:0,r7:6)
1836; CHECK-NEXT:    }
1837; CHECK-NEXT:    {
1838; CHECK-NEXT:     p1 = vcmpb.eq(r5:4,r7:6)
1839; CHECK-NEXT:    }
1840; CHECK-NEXT:    {
1841; CHECK-NEXT:     p2 = vcmpb.eq(r3:2,r7:6)
1842; CHECK-NEXT:    }
1843; CHECK-NEXT:    {
1844; CHECK-NEXT:     p0 = or(p0,p1)
1845; CHECK-NEXT:    }
1846; CHECK-NEXT:    {
1847; CHECK-NEXT:     p0 = or(p0,!p2)
1848; CHECK-NEXT:    }
1849; CHECK-NEXT:    {
1850; CHECK-NEXT:     r1:0 = mask(p0)
1851; CHECK-NEXT:    }
1852; CHECK-NEXT:    {
1853; CHECK-NEXT:     jumpr r31
1854; CHECK-NEXT:    }
1855b0:
1856  %v0 = icmp eq <8 x i8> %a0, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1857  %v1 = icmp eq <8 x i8> %a1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1858  %v2 = xor <8 x i1> %v1, <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
1859  %v3 = icmp eq <8 x i8> %a2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
1860  %v4 = or <8 x i1> %v0, %v2
1861  %v5 = or <8 x i1> %v3, %v4
1862  %v6 = sext <8 x i1> %v5 to <8 x i8>
1863  ret <8 x i8> %v6
1864}
1865
1866attributes #0 = { nounwind readnone }
1867attributes #1 = { nounwind "target-features"="-small-data,-packets" }
1868