xref: /llvm-project/llvm/test/CodeGen/PowerPC/vector-popcnt-128-ult-ugt.ll (revision 69b056d5638bbe3c8098b5d3a4980eb9929b9bbe)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr5 < %s | FileCheck %s --check-prefix=PWR5
3; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr6 < %s | FileCheck %s --check-prefix=PWR6
4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 < %s | FileCheck %s --check-prefix=PWR7
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s --check-prefix=PWR8
6; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr9 < %s | FileCheck %s --check-prefix=PWR9
7
8
9define <16 x i8> @ugt_1_v16i8(<16 x i8> %0) {
10; PWR5-LABEL: ugt_1_v16i8:
11; PWR5:       # %bb.0:
12; PWR5-NEXT:    vspltisb 3, -1
13; PWR5-NEXT:    vaddubm 3, 2, 3
14; PWR5-NEXT:    vand 2, 2, 3
15; PWR5-NEXT:    vxor 3, 3, 3
16; PWR5-NEXT:    vcmpequb 2, 2, 3
17; PWR5-NEXT:    vnot 2, 2
18; PWR5-NEXT:    blr
19;
20; PWR6-LABEL: ugt_1_v16i8:
21; PWR6:       # %bb.0:
22; PWR6-NEXT:    vspltisb 3, -1
23; PWR6-NEXT:    vaddubm 3, 2, 3
24; PWR6-NEXT:    vand 2, 2, 3
25; PWR6-NEXT:    vxor 3, 3, 3
26; PWR6-NEXT:    vcmpequb 2, 2, 3
27; PWR6-NEXT:    vnot 2, 2
28; PWR6-NEXT:    blr
29;
30; PWR7-LABEL: ugt_1_v16i8:
31; PWR7:       # %bb.0:
32; PWR7-NEXT:    vspltisb 3, -1
33; PWR7-NEXT:    vaddubm 3, 2, 3
34; PWR7-NEXT:    xxland 34, 34, 35
35; PWR7-NEXT:    xxlxor 35, 35, 35
36; PWR7-NEXT:    vcmpequb 2, 2, 3
37; PWR7-NEXT:    xxlnor 34, 34, 34
38; PWR7-NEXT:    blr
39;
40; PWR8-LABEL: ugt_1_v16i8:
41; PWR8:       # %bb.0:
42; PWR8-NEXT:    vspltisb 3, 1
43; PWR8-NEXT:    vpopcntb 2, 2
44; PWR8-NEXT:    vcmpgtub 2, 2, 3
45; PWR8-NEXT:    blr
46;
47; PWR9-LABEL: ugt_1_v16i8:
48; PWR9:       # %bb.0:
49; PWR9-NEXT:    xxspltib 35, 1
50; PWR9-NEXT:    vpopcntb 2, 2
51; PWR9-NEXT:    vcmpgtub 2, 2, 3
52; PWR9-NEXT:    blr
53  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
54  %3 = icmp ugt <16 x i8> %2, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
55  %4 = sext <16 x i1> %3 to <16 x i8>
56  ret <16 x i8> %4
57}
58
59define <16 x i8> @ult_2_v16i8(<16 x i8> %0) {
60; PWR5-LABEL: ult_2_v16i8:
61; PWR5:       # %bb.0:
62; PWR5-NEXT:    vspltisb 3, -1
63; PWR5-NEXT:    vaddubm 3, 2, 3
64; PWR5-NEXT:    vand 2, 2, 3
65; PWR5-NEXT:    vxor 3, 3, 3
66; PWR5-NEXT:    vcmpequb 2, 2, 3
67; PWR5-NEXT:    blr
68;
69; PWR6-LABEL: ult_2_v16i8:
70; PWR6:       # %bb.0:
71; PWR6-NEXT:    vspltisb 3, -1
72; PWR6-NEXT:    vaddubm 3, 2, 3
73; PWR6-NEXT:    vand 2, 2, 3
74; PWR6-NEXT:    vxor 3, 3, 3
75; PWR6-NEXT:    vcmpequb 2, 2, 3
76; PWR6-NEXT:    blr
77;
78; PWR7-LABEL: ult_2_v16i8:
79; PWR7:       # %bb.0:
80; PWR7-NEXT:    vspltisb 3, -1
81; PWR7-NEXT:    vaddubm 3, 2, 3
82; PWR7-NEXT:    xxland 34, 34, 35
83; PWR7-NEXT:    xxlxor 35, 35, 35
84; PWR7-NEXT:    vcmpequb 2, 2, 3
85; PWR7-NEXT:    blr
86;
87; PWR8-LABEL: ult_2_v16i8:
88; PWR8:       # %bb.0:
89; PWR8-NEXT:    vspltisb 3, 2
90; PWR8-NEXT:    vpopcntb 2, 2
91; PWR8-NEXT:    vcmpgtub 2, 3, 2
92; PWR8-NEXT:    blr
93;
94; PWR9-LABEL: ult_2_v16i8:
95; PWR9:       # %bb.0:
96; PWR9-NEXT:    xxspltib 35, 2
97; PWR9-NEXT:    vpopcntb 2, 2
98; PWR9-NEXT:    vcmpgtub 2, 3, 2
99; PWR9-NEXT:    blr
100  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
101  %3 = icmp ult <16 x i8> %2, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
102  %4 = sext <16 x i1> %3 to <16 x i8>
103  ret <16 x i8> %4
104}
105
106define <16 x i8> @ugt_2_v16i8(<16 x i8> %0) {
107; PWR5-LABEL: ugt_2_v16i8:
108; PWR5:       # %bb.0:
109; PWR5-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
110; PWR5-NEXT:    vspltisb 3, 1
111; PWR5-NEXT:    addi 3, 3, .LCPI2_0@toc@l
112; PWR5-NEXT:    vsrb 3, 2, 3
113; PWR5-NEXT:    lvx 4, 0, 3
114; PWR5-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
115; PWR5-NEXT:    addi 3, 3, .LCPI2_1@toc@l
116; PWR5-NEXT:    vspltisb 5, 2
117; PWR5-NEXT:    vand 3, 3, 4
118; PWR5-NEXT:    lvx 4, 0, 3
119; PWR5-NEXT:    vsububm 2, 2, 3
120; PWR5-NEXT:    vand 3, 2, 4
121; PWR5-NEXT:    vsrb 2, 2, 5
122; PWR5-NEXT:    vand 2, 2, 4
123; PWR5-NEXT:    vspltisb 4, 4
124; PWR5-NEXT:    vaddubm 2, 3, 2
125; PWR5-NEXT:    vsrb 3, 2, 4
126; PWR5-NEXT:    vspltisb 4, 15
127; PWR5-NEXT:    vaddubm 2, 2, 3
128; PWR5-NEXT:    vand 2, 2, 4
129; PWR5-NEXT:    vcmpgtub 2, 2, 5
130; PWR5-NEXT:    blr
131;
132; PWR6-LABEL: ugt_2_v16i8:
133; PWR6:       # %bb.0:
134; PWR6-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
135; PWR6-NEXT:    vspltisb 3, 1
136; PWR6-NEXT:    addi 3, 3, .LCPI2_0@toc@l
137; PWR6-NEXT:    vsrb 3, 2, 3
138; PWR6-NEXT:    lvx 4, 0, 3
139; PWR6-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
140; PWR6-NEXT:    addi 3, 3, .LCPI2_1@toc@l
141; PWR6-NEXT:    vspltisb 5, 2
142; PWR6-NEXT:    vand 3, 3, 4
143; PWR6-NEXT:    lvx 4, 0, 3
144; PWR6-NEXT:    vsububm 2, 2, 3
145; PWR6-NEXT:    vand 3, 2, 4
146; PWR6-NEXT:    vsrb 2, 2, 5
147; PWR6-NEXT:    vand 2, 2, 4
148; PWR6-NEXT:    vspltisb 4, 4
149; PWR6-NEXT:    vaddubm 2, 3, 2
150; PWR6-NEXT:    vsrb 3, 2, 4
151; PWR6-NEXT:    vspltisb 4, 15
152; PWR6-NEXT:    vaddubm 2, 2, 3
153; PWR6-NEXT:    vand 2, 2, 4
154; PWR6-NEXT:    vcmpgtub 2, 2, 5
155; PWR6-NEXT:    blr
156;
157; PWR7-LABEL: ugt_2_v16i8:
158; PWR7:       # %bb.0:
159; PWR7-NEXT:    vspltisb 3, 1
160; PWR7-NEXT:    addis 3, 2, .LCPI2_0@toc@ha
161; PWR7-NEXT:    addi 3, 3, .LCPI2_0@toc@l
162; PWR7-NEXT:    vspltisb 4, 2
163; PWR7-NEXT:    lxvw4x 0, 0, 3
164; PWR7-NEXT:    addis 3, 2, .LCPI2_1@toc@ha
165; PWR7-NEXT:    vspltisb 5, 4
166; PWR7-NEXT:    addi 3, 3, .LCPI2_1@toc@l
167; PWR7-NEXT:    vsrb 3, 2, 3
168; PWR7-NEXT:    vspltisb 0, 15
169; PWR7-NEXT:    xxland 35, 35, 0
170; PWR7-NEXT:    lxvw4x 0, 0, 3
171; PWR7-NEXT:    vsububm 2, 2, 3
172; PWR7-NEXT:    xxland 35, 34, 0
173; PWR7-NEXT:    vsrb 2, 2, 4
174; PWR7-NEXT:    xxland 34, 34, 0
175; PWR7-NEXT:    vaddubm 2, 3, 2
176; PWR7-NEXT:    vsrb 3, 2, 5
177; PWR7-NEXT:    vaddubm 2, 2, 3
178; PWR7-NEXT:    xxland 34, 34, 32
179; PWR7-NEXT:    vcmpgtub 2, 2, 4
180; PWR7-NEXT:    blr
181;
182; PWR8-LABEL: ugt_2_v16i8:
183; PWR8:       # %bb.0:
184; PWR8-NEXT:    vspltisb 3, 2
185; PWR8-NEXT:    vpopcntb 2, 2
186; PWR8-NEXT:    vcmpgtub 2, 2, 3
187; PWR8-NEXT:    blr
188;
189; PWR9-LABEL: ugt_2_v16i8:
190; PWR9:       # %bb.0:
191; PWR9-NEXT:    xxspltib 35, 2
192; PWR9-NEXT:    vpopcntb 2, 2
193; PWR9-NEXT:    vcmpgtub 2, 2, 3
194; PWR9-NEXT:    blr
195  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
196  %3 = icmp ugt <16 x i8> %2, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
197  %4 = sext <16 x i1> %3 to <16 x i8>
198  ret <16 x i8> %4
199}
200
201define <16 x i8> @ult_3_v16i8(<16 x i8> %0) {
202; PWR5-LABEL: ult_3_v16i8:
203; PWR5:       # %bb.0:
204; PWR5-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
205; PWR5-NEXT:    vspltisb 3, 1
206; PWR5-NEXT:    addi 3, 3, .LCPI3_0@toc@l
207; PWR5-NEXT:    vsrb 3, 2, 3
208; PWR5-NEXT:    lvx 4, 0, 3
209; PWR5-NEXT:    addis 3, 2, .LCPI3_1@toc@ha
210; PWR5-NEXT:    addi 3, 3, .LCPI3_1@toc@l
211; PWR5-NEXT:    vspltisb 5, 2
212; PWR5-NEXT:    vand 3, 3, 4
213; PWR5-NEXT:    lvx 4, 0, 3
214; PWR5-NEXT:    vsububm 2, 2, 3
215; PWR5-NEXT:    vand 3, 2, 4
216; PWR5-NEXT:    vsrb 2, 2, 5
217; PWR5-NEXT:    vand 2, 2, 4
218; PWR5-NEXT:    vspltisb 4, 4
219; PWR5-NEXT:    vaddubm 2, 3, 2
220; PWR5-NEXT:    vsrb 3, 2, 4
221; PWR5-NEXT:    vspltisb 4, 15
222; PWR5-NEXT:    vaddubm 2, 2, 3
223; PWR5-NEXT:    vspltisb 3, 3
224; PWR5-NEXT:    vand 2, 2, 4
225; PWR5-NEXT:    vcmpgtub 2, 3, 2
226; PWR5-NEXT:    blr
227;
228; PWR6-LABEL: ult_3_v16i8:
229; PWR6:       # %bb.0:
230; PWR6-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
231; PWR6-NEXT:    vspltisb 3, 1
232; PWR6-NEXT:    addi 3, 3, .LCPI3_0@toc@l
233; PWR6-NEXT:    vsrb 3, 2, 3
234; PWR6-NEXT:    lvx 4, 0, 3
235; PWR6-NEXT:    addis 3, 2, .LCPI3_1@toc@ha
236; PWR6-NEXT:    addi 3, 3, .LCPI3_1@toc@l
237; PWR6-NEXT:    vspltisb 5, 2
238; PWR6-NEXT:    vand 3, 3, 4
239; PWR6-NEXT:    lvx 4, 0, 3
240; PWR6-NEXT:    vsububm 2, 2, 3
241; PWR6-NEXT:    vand 3, 2, 4
242; PWR6-NEXT:    vsrb 2, 2, 5
243; PWR6-NEXT:    vand 2, 2, 4
244; PWR6-NEXT:    vspltisb 4, 4
245; PWR6-NEXT:    vaddubm 2, 3, 2
246; PWR6-NEXT:    vsrb 3, 2, 4
247; PWR6-NEXT:    vspltisb 4, 15
248; PWR6-NEXT:    vaddubm 2, 2, 3
249; PWR6-NEXT:    vspltisb 3, 3
250; PWR6-NEXT:    vand 2, 2, 4
251; PWR6-NEXT:    vcmpgtub 2, 3, 2
252; PWR6-NEXT:    blr
253;
254; PWR7-LABEL: ult_3_v16i8:
255; PWR7:       # %bb.0:
256; PWR7-NEXT:    vspltisb 3, 1
257; PWR7-NEXT:    addis 3, 2, .LCPI3_0@toc@ha
258; PWR7-NEXT:    addi 3, 3, .LCPI3_0@toc@l
259; PWR7-NEXT:    vspltisb 4, 2
260; PWR7-NEXT:    lxvw4x 0, 0, 3
261; PWR7-NEXT:    addis 3, 2, .LCPI3_1@toc@ha
262; PWR7-NEXT:    vspltisb 5, 4
263; PWR7-NEXT:    addi 3, 3, .LCPI3_1@toc@l
264; PWR7-NEXT:    vsrb 3, 2, 3
265; PWR7-NEXT:    vspltisb 0, 15
266; PWR7-NEXT:    vspltisb 1, 3
267; PWR7-NEXT:    xxland 35, 35, 0
268; PWR7-NEXT:    lxvw4x 0, 0, 3
269; PWR7-NEXT:    vsububm 2, 2, 3
270; PWR7-NEXT:    vsrb 3, 2, 4
271; PWR7-NEXT:    xxland 34, 34, 0
272; PWR7-NEXT:    xxland 35, 35, 0
273; PWR7-NEXT:    vaddubm 2, 2, 3
274; PWR7-NEXT:    vsrb 3, 2, 5
275; PWR7-NEXT:    vaddubm 2, 2, 3
276; PWR7-NEXT:    xxland 34, 34, 32
277; PWR7-NEXT:    vcmpgtub 2, 1, 2
278; PWR7-NEXT:    blr
279;
280; PWR8-LABEL: ult_3_v16i8:
281; PWR8:       # %bb.0:
282; PWR8-NEXT:    vspltisb 3, 3
283; PWR8-NEXT:    vpopcntb 2, 2
284; PWR8-NEXT:    vcmpgtub 2, 3, 2
285; PWR8-NEXT:    blr
286;
287; PWR9-LABEL: ult_3_v16i8:
288; PWR9:       # %bb.0:
289; PWR9-NEXT:    xxspltib 35, 3
290; PWR9-NEXT:    vpopcntb 2, 2
291; PWR9-NEXT:    vcmpgtub 2, 3, 2
292; PWR9-NEXT:    blr
293  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
294  %3 = icmp ult <16 x i8> %2, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
295  %4 = sext <16 x i1> %3 to <16 x i8>
296  ret <16 x i8> %4
297}
298
299define <16 x i8> @ugt_3_v16i8(<16 x i8> %0) {
300; PWR5-LABEL: ugt_3_v16i8:
301; PWR5:       # %bb.0:
302; PWR5-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
303; PWR5-NEXT:    vspltisb 3, 1
304; PWR5-NEXT:    addi 3, 3, .LCPI4_0@toc@l
305; PWR5-NEXT:    vsrb 3, 2, 3
306; PWR5-NEXT:    lvx 4, 0, 3
307; PWR5-NEXT:    addis 3, 2, .LCPI4_1@toc@ha
308; PWR5-NEXT:    addi 3, 3, .LCPI4_1@toc@l
309; PWR5-NEXT:    vspltisb 5, 2
310; PWR5-NEXT:    vand 3, 3, 4
311; PWR5-NEXT:    lvx 4, 0, 3
312; PWR5-NEXT:    vsububm 2, 2, 3
313; PWR5-NEXT:    vand 3, 2, 4
314; PWR5-NEXT:    vsrb 2, 2, 5
315; PWR5-NEXT:    vand 2, 2, 4
316; PWR5-NEXT:    vspltisb 4, 4
317; PWR5-NEXT:    vaddubm 2, 3, 2
318; PWR5-NEXT:    vsrb 3, 2, 4
319; PWR5-NEXT:    vspltisb 4, 15
320; PWR5-NEXT:    vaddubm 2, 2, 3
321; PWR5-NEXT:    vspltisb 3, 3
322; PWR5-NEXT:    vand 2, 2, 4
323; PWR5-NEXT:    vcmpgtub 2, 2, 3
324; PWR5-NEXT:    blr
325;
326; PWR6-LABEL: ugt_3_v16i8:
327; PWR6:       # %bb.0:
328; PWR6-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
329; PWR6-NEXT:    vspltisb 3, 1
330; PWR6-NEXT:    addi 3, 3, .LCPI4_0@toc@l
331; PWR6-NEXT:    vsrb 3, 2, 3
332; PWR6-NEXT:    lvx 4, 0, 3
333; PWR6-NEXT:    addis 3, 2, .LCPI4_1@toc@ha
334; PWR6-NEXT:    addi 3, 3, .LCPI4_1@toc@l
335; PWR6-NEXT:    vspltisb 5, 2
336; PWR6-NEXT:    vand 3, 3, 4
337; PWR6-NEXT:    lvx 4, 0, 3
338; PWR6-NEXT:    vsububm 2, 2, 3
339; PWR6-NEXT:    vand 3, 2, 4
340; PWR6-NEXT:    vsrb 2, 2, 5
341; PWR6-NEXT:    vand 2, 2, 4
342; PWR6-NEXT:    vspltisb 4, 4
343; PWR6-NEXT:    vaddubm 2, 3, 2
344; PWR6-NEXT:    vsrb 3, 2, 4
345; PWR6-NEXT:    vspltisb 4, 15
346; PWR6-NEXT:    vaddubm 2, 2, 3
347; PWR6-NEXT:    vspltisb 3, 3
348; PWR6-NEXT:    vand 2, 2, 4
349; PWR6-NEXT:    vcmpgtub 2, 2, 3
350; PWR6-NEXT:    blr
351;
352; PWR7-LABEL: ugt_3_v16i8:
353; PWR7:       # %bb.0:
354; PWR7-NEXT:    vspltisb 3, 1
355; PWR7-NEXT:    addis 3, 2, .LCPI4_0@toc@ha
356; PWR7-NEXT:    addi 3, 3, .LCPI4_0@toc@l
357; PWR7-NEXT:    vspltisb 4, 2
358; PWR7-NEXT:    lxvw4x 0, 0, 3
359; PWR7-NEXT:    addis 3, 2, .LCPI4_1@toc@ha
360; PWR7-NEXT:    vspltisb 5, 4
361; PWR7-NEXT:    addi 3, 3, .LCPI4_1@toc@l
362; PWR7-NEXT:    vsrb 3, 2, 3
363; PWR7-NEXT:    vspltisb 0, 15
364; PWR7-NEXT:    vspltisb 1, 3
365; PWR7-NEXT:    xxland 35, 35, 0
366; PWR7-NEXT:    lxvw4x 0, 0, 3
367; PWR7-NEXT:    vsububm 2, 2, 3
368; PWR7-NEXT:    vsrb 3, 2, 4
369; PWR7-NEXT:    xxland 34, 34, 0
370; PWR7-NEXT:    xxland 35, 35, 0
371; PWR7-NEXT:    vaddubm 2, 2, 3
372; PWR7-NEXT:    vsrb 3, 2, 5
373; PWR7-NEXT:    vaddubm 2, 2, 3
374; PWR7-NEXT:    xxland 34, 34, 32
375; PWR7-NEXT:    vcmpgtub 2, 2, 1
376; PWR7-NEXT:    blr
377;
378; PWR8-LABEL: ugt_3_v16i8:
379; PWR8:       # %bb.0:
380; PWR8-NEXT:    vspltisb 3, 3
381; PWR8-NEXT:    vpopcntb 2, 2
382; PWR8-NEXT:    vcmpgtub 2, 2, 3
383; PWR8-NEXT:    blr
384;
385; PWR9-LABEL: ugt_3_v16i8:
386; PWR9:       # %bb.0:
387; PWR9-NEXT:    xxspltib 35, 3
388; PWR9-NEXT:    vpopcntb 2, 2
389; PWR9-NEXT:    vcmpgtub 2, 2, 3
390; PWR9-NEXT:    blr
391  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
392  %3 = icmp ugt <16 x i8> %2, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
393  %4 = sext <16 x i1> %3 to <16 x i8>
394  ret <16 x i8> %4
395}
396
397define <16 x i8> @ult_4_v16i8(<16 x i8> %0) {
398; PWR5-LABEL: ult_4_v16i8:
399; PWR5:       # %bb.0:
400; PWR5-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
401; PWR5-NEXT:    vspltisb 3, 1
402; PWR5-NEXT:    addi 3, 3, .LCPI5_0@toc@l
403; PWR5-NEXT:    vsrb 3, 2, 3
404; PWR5-NEXT:    lvx 4, 0, 3
405; PWR5-NEXT:    addis 3, 2, .LCPI5_1@toc@ha
406; PWR5-NEXT:    addi 3, 3, .LCPI5_1@toc@l
407; PWR5-NEXT:    vspltisb 5, 2
408; PWR5-NEXT:    vand 3, 3, 4
409; PWR5-NEXT:    lvx 4, 0, 3
410; PWR5-NEXT:    vsububm 2, 2, 3
411; PWR5-NEXT:    vand 3, 2, 4
412; PWR5-NEXT:    vsrb 2, 2, 5
413; PWR5-NEXT:    vspltisb 5, 15
414; PWR5-NEXT:    vand 2, 2, 4
415; PWR5-NEXT:    vspltisb 4, 4
416; PWR5-NEXT:    vaddubm 2, 3, 2
417; PWR5-NEXT:    vsrb 3, 2, 4
418; PWR5-NEXT:    vaddubm 2, 2, 3
419; PWR5-NEXT:    vand 2, 2, 5
420; PWR5-NEXT:    vcmpgtub 2, 4, 2
421; PWR5-NEXT:    blr
422;
423; PWR6-LABEL: ult_4_v16i8:
424; PWR6:       # %bb.0:
425; PWR6-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
426; PWR6-NEXT:    vspltisb 3, 1
427; PWR6-NEXT:    addi 3, 3, .LCPI5_0@toc@l
428; PWR6-NEXT:    vsrb 3, 2, 3
429; PWR6-NEXT:    lvx 4, 0, 3
430; PWR6-NEXT:    addis 3, 2, .LCPI5_1@toc@ha
431; PWR6-NEXT:    addi 3, 3, .LCPI5_1@toc@l
432; PWR6-NEXT:    vspltisb 5, 2
433; PWR6-NEXT:    vand 3, 3, 4
434; PWR6-NEXT:    lvx 4, 0, 3
435; PWR6-NEXT:    vsububm 2, 2, 3
436; PWR6-NEXT:    vand 3, 2, 4
437; PWR6-NEXT:    vsrb 2, 2, 5
438; PWR6-NEXT:    vspltisb 5, 15
439; PWR6-NEXT:    vand 2, 2, 4
440; PWR6-NEXT:    vspltisb 4, 4
441; PWR6-NEXT:    vaddubm 2, 3, 2
442; PWR6-NEXT:    vsrb 3, 2, 4
443; PWR6-NEXT:    vaddubm 2, 2, 3
444; PWR6-NEXT:    vand 2, 2, 5
445; PWR6-NEXT:    vcmpgtub 2, 4, 2
446; PWR6-NEXT:    blr
447;
448; PWR7-LABEL: ult_4_v16i8:
449; PWR7:       # %bb.0:
450; PWR7-NEXT:    vspltisb 3, 1
451; PWR7-NEXT:    addis 3, 2, .LCPI5_0@toc@ha
452; PWR7-NEXT:    addi 3, 3, .LCPI5_0@toc@l
453; PWR7-NEXT:    vspltisb 4, 2
454; PWR7-NEXT:    lxvw4x 0, 0, 3
455; PWR7-NEXT:    addis 3, 2, .LCPI5_1@toc@ha
456; PWR7-NEXT:    vspltisb 5, 4
457; PWR7-NEXT:    addi 3, 3, .LCPI5_1@toc@l
458; PWR7-NEXT:    vsrb 3, 2, 3
459; PWR7-NEXT:    vspltisb 0, 15
460; PWR7-NEXT:    xxland 35, 35, 0
461; PWR7-NEXT:    lxvw4x 0, 0, 3
462; PWR7-NEXT:    vsububm 2, 2, 3
463; PWR7-NEXT:    vsrb 3, 2, 4
464; PWR7-NEXT:    xxland 34, 34, 0
465; PWR7-NEXT:    xxland 35, 35, 0
466; PWR7-NEXT:    vaddubm 2, 2, 3
467; PWR7-NEXT:    vsrb 3, 2, 5
468; PWR7-NEXT:    vaddubm 2, 2, 3
469; PWR7-NEXT:    xxland 34, 34, 32
470; PWR7-NEXT:    vcmpgtub 2, 5, 2
471; PWR7-NEXT:    blr
472;
473; PWR8-LABEL: ult_4_v16i8:
474; PWR8:       # %bb.0:
475; PWR8-NEXT:    vspltisb 3, 4
476; PWR8-NEXT:    vpopcntb 2, 2
477; PWR8-NEXT:    vcmpgtub 2, 3, 2
478; PWR8-NEXT:    blr
479;
480; PWR9-LABEL: ult_4_v16i8:
481; PWR9:       # %bb.0:
482; PWR9-NEXT:    xxspltib 35, 4
483; PWR9-NEXT:    vpopcntb 2, 2
484; PWR9-NEXT:    vcmpgtub 2, 3, 2
485; PWR9-NEXT:    blr
486  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
487  %3 = icmp ult <16 x i8> %2, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
488  %4 = sext <16 x i1> %3 to <16 x i8>
489  ret <16 x i8> %4
490}
491
492define <16 x i8> @ugt_4_v16i8(<16 x i8> %0) {
493; PWR5-LABEL: ugt_4_v16i8:
494; PWR5:       # %bb.0:
495; PWR5-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
496; PWR5-NEXT:    vspltisb 3, 1
497; PWR5-NEXT:    addi 3, 3, .LCPI6_0@toc@l
498; PWR5-NEXT:    vsrb 3, 2, 3
499; PWR5-NEXT:    lvx 4, 0, 3
500; PWR5-NEXT:    addis 3, 2, .LCPI6_1@toc@ha
501; PWR5-NEXT:    addi 3, 3, .LCPI6_1@toc@l
502; PWR5-NEXT:    vspltisb 5, 2
503; PWR5-NEXT:    vand 3, 3, 4
504; PWR5-NEXT:    lvx 4, 0, 3
505; PWR5-NEXT:    vsububm 2, 2, 3
506; PWR5-NEXT:    vand 3, 2, 4
507; PWR5-NEXT:    vsrb 2, 2, 5
508; PWR5-NEXT:    vspltisb 5, 15
509; PWR5-NEXT:    vand 2, 2, 4
510; PWR5-NEXT:    vspltisb 4, 4
511; PWR5-NEXT:    vaddubm 2, 3, 2
512; PWR5-NEXT:    vsrb 3, 2, 4
513; PWR5-NEXT:    vaddubm 2, 2, 3
514; PWR5-NEXT:    vand 2, 2, 5
515; PWR5-NEXT:    vcmpgtub 2, 2, 4
516; PWR5-NEXT:    blr
517;
518; PWR6-LABEL: ugt_4_v16i8:
519; PWR6:       # %bb.0:
520; PWR6-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
521; PWR6-NEXT:    vspltisb 3, 1
522; PWR6-NEXT:    addi 3, 3, .LCPI6_0@toc@l
523; PWR6-NEXT:    vsrb 3, 2, 3
524; PWR6-NEXT:    lvx 4, 0, 3
525; PWR6-NEXT:    addis 3, 2, .LCPI6_1@toc@ha
526; PWR6-NEXT:    addi 3, 3, .LCPI6_1@toc@l
527; PWR6-NEXT:    vspltisb 5, 2
528; PWR6-NEXT:    vand 3, 3, 4
529; PWR6-NEXT:    lvx 4, 0, 3
530; PWR6-NEXT:    vsububm 2, 2, 3
531; PWR6-NEXT:    vand 3, 2, 4
532; PWR6-NEXT:    vsrb 2, 2, 5
533; PWR6-NEXT:    vspltisb 5, 15
534; PWR6-NEXT:    vand 2, 2, 4
535; PWR6-NEXT:    vspltisb 4, 4
536; PWR6-NEXT:    vaddubm 2, 3, 2
537; PWR6-NEXT:    vsrb 3, 2, 4
538; PWR6-NEXT:    vaddubm 2, 2, 3
539; PWR6-NEXT:    vand 2, 2, 5
540; PWR6-NEXT:    vcmpgtub 2, 2, 4
541; PWR6-NEXT:    blr
542;
543; PWR7-LABEL: ugt_4_v16i8:
544; PWR7:       # %bb.0:
545; PWR7-NEXT:    vspltisb 3, 1
546; PWR7-NEXT:    addis 3, 2, .LCPI6_0@toc@ha
547; PWR7-NEXT:    addi 3, 3, .LCPI6_0@toc@l
548; PWR7-NEXT:    vspltisb 4, 2
549; PWR7-NEXT:    lxvw4x 0, 0, 3
550; PWR7-NEXT:    addis 3, 2, .LCPI6_1@toc@ha
551; PWR7-NEXT:    vspltisb 5, 4
552; PWR7-NEXT:    addi 3, 3, .LCPI6_1@toc@l
553; PWR7-NEXT:    vsrb 3, 2, 3
554; PWR7-NEXT:    vspltisb 0, 15
555; PWR7-NEXT:    xxland 35, 35, 0
556; PWR7-NEXT:    lxvw4x 0, 0, 3
557; PWR7-NEXT:    vsububm 2, 2, 3
558; PWR7-NEXT:    vsrb 3, 2, 4
559; PWR7-NEXT:    xxland 34, 34, 0
560; PWR7-NEXT:    xxland 35, 35, 0
561; PWR7-NEXT:    vaddubm 2, 2, 3
562; PWR7-NEXT:    vsrb 3, 2, 5
563; PWR7-NEXT:    vaddubm 2, 2, 3
564; PWR7-NEXT:    xxland 34, 34, 32
565; PWR7-NEXT:    vcmpgtub 2, 2, 5
566; PWR7-NEXT:    blr
567;
568; PWR8-LABEL: ugt_4_v16i8:
569; PWR8:       # %bb.0:
570; PWR8-NEXT:    vspltisb 3, 4
571; PWR8-NEXT:    vpopcntb 2, 2
572; PWR8-NEXT:    vcmpgtub 2, 2, 3
573; PWR8-NEXT:    blr
574;
575; PWR9-LABEL: ugt_4_v16i8:
576; PWR9:       # %bb.0:
577; PWR9-NEXT:    xxspltib 35, 4
578; PWR9-NEXT:    vpopcntb 2, 2
579; PWR9-NEXT:    vcmpgtub 2, 2, 3
580; PWR9-NEXT:    blr
581  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
582  %3 = icmp ugt <16 x i8> %2, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
583  %4 = sext <16 x i1> %3 to <16 x i8>
584  ret <16 x i8> %4
585}
586
587define <16 x i8> @ult_5_v16i8(<16 x i8> %0) {
588; PWR5-LABEL: ult_5_v16i8:
589; PWR5:       # %bb.0:
590; PWR5-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
591; PWR5-NEXT:    vspltisb 3, 1
592; PWR5-NEXT:    addi 3, 3, .LCPI7_0@toc@l
593; PWR5-NEXT:    vsrb 3, 2, 3
594; PWR5-NEXT:    lvx 4, 0, 3
595; PWR5-NEXT:    addis 3, 2, .LCPI7_1@toc@ha
596; PWR5-NEXT:    addi 3, 3, .LCPI7_1@toc@l
597; PWR5-NEXT:    vspltisb 5, 2
598; PWR5-NEXT:    vand 3, 3, 4
599; PWR5-NEXT:    lvx 4, 0, 3
600; PWR5-NEXT:    vsububm 2, 2, 3
601; PWR5-NEXT:    vand 3, 2, 4
602; PWR5-NEXT:    vsrb 2, 2, 5
603; PWR5-NEXT:    vand 2, 2, 4
604; PWR5-NEXT:    vspltisb 4, 4
605; PWR5-NEXT:    vaddubm 2, 3, 2
606; PWR5-NEXT:    vsrb 3, 2, 4
607; PWR5-NEXT:    vspltisb 4, 15
608; PWR5-NEXT:    vaddubm 2, 2, 3
609; PWR5-NEXT:    vspltisb 3, 5
610; PWR5-NEXT:    vand 2, 2, 4
611; PWR5-NEXT:    vcmpgtub 2, 3, 2
612; PWR5-NEXT:    blr
613;
614; PWR6-LABEL: ult_5_v16i8:
615; PWR6:       # %bb.0:
616; PWR6-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
617; PWR6-NEXT:    vspltisb 3, 1
618; PWR6-NEXT:    addi 3, 3, .LCPI7_0@toc@l
619; PWR6-NEXT:    vsrb 3, 2, 3
620; PWR6-NEXT:    lvx 4, 0, 3
621; PWR6-NEXT:    addis 3, 2, .LCPI7_1@toc@ha
622; PWR6-NEXT:    addi 3, 3, .LCPI7_1@toc@l
623; PWR6-NEXT:    vspltisb 5, 2
624; PWR6-NEXT:    vand 3, 3, 4
625; PWR6-NEXT:    lvx 4, 0, 3
626; PWR6-NEXT:    vsububm 2, 2, 3
627; PWR6-NEXT:    vand 3, 2, 4
628; PWR6-NEXT:    vsrb 2, 2, 5
629; PWR6-NEXT:    vand 2, 2, 4
630; PWR6-NEXT:    vspltisb 4, 4
631; PWR6-NEXT:    vaddubm 2, 3, 2
632; PWR6-NEXT:    vsrb 3, 2, 4
633; PWR6-NEXT:    vspltisb 4, 15
634; PWR6-NEXT:    vaddubm 2, 2, 3
635; PWR6-NEXT:    vspltisb 3, 5
636; PWR6-NEXT:    vand 2, 2, 4
637; PWR6-NEXT:    vcmpgtub 2, 3, 2
638; PWR6-NEXT:    blr
639;
640; PWR7-LABEL: ult_5_v16i8:
641; PWR7:       # %bb.0:
642; PWR7-NEXT:    vspltisb 3, 1
643; PWR7-NEXT:    addis 3, 2, .LCPI7_0@toc@ha
644; PWR7-NEXT:    addi 3, 3, .LCPI7_0@toc@l
645; PWR7-NEXT:    vspltisb 4, 2
646; PWR7-NEXT:    lxvw4x 0, 0, 3
647; PWR7-NEXT:    addis 3, 2, .LCPI7_1@toc@ha
648; PWR7-NEXT:    vspltisb 5, 4
649; PWR7-NEXT:    addi 3, 3, .LCPI7_1@toc@l
650; PWR7-NEXT:    vsrb 3, 2, 3
651; PWR7-NEXT:    vspltisb 0, 15
652; PWR7-NEXT:    vspltisb 1, 5
653; PWR7-NEXT:    xxland 35, 35, 0
654; PWR7-NEXT:    lxvw4x 0, 0, 3
655; PWR7-NEXT:    vsububm 2, 2, 3
656; PWR7-NEXT:    vsrb 3, 2, 4
657; PWR7-NEXT:    xxland 34, 34, 0
658; PWR7-NEXT:    xxland 35, 35, 0
659; PWR7-NEXT:    vaddubm 2, 2, 3
660; PWR7-NEXT:    vsrb 3, 2, 5
661; PWR7-NEXT:    vaddubm 2, 2, 3
662; PWR7-NEXT:    xxland 34, 34, 32
663; PWR7-NEXT:    vcmpgtub 2, 1, 2
664; PWR7-NEXT:    blr
665;
666; PWR8-LABEL: ult_5_v16i8:
667; PWR8:       # %bb.0:
668; PWR8-NEXT:    vspltisb 3, 5
669; PWR8-NEXT:    vpopcntb 2, 2
670; PWR8-NEXT:    vcmpgtub 2, 3, 2
671; PWR8-NEXT:    blr
672;
673; PWR9-LABEL: ult_5_v16i8:
674; PWR9:       # %bb.0:
675; PWR9-NEXT:    xxspltib 35, 5
676; PWR9-NEXT:    vpopcntb 2, 2
677; PWR9-NEXT:    vcmpgtub 2, 3, 2
678; PWR9-NEXT:    blr
679  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
680  %3 = icmp ult <16 x i8> %2, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
681  %4 = sext <16 x i1> %3 to <16 x i8>
682  ret <16 x i8> %4
683}
684
685define <16 x i8> @ugt_5_v16i8(<16 x i8> %0) {
686; PWR5-LABEL: ugt_5_v16i8:
687; PWR5:       # %bb.0:
688; PWR5-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
689; PWR5-NEXT:    vspltisb 3, 1
690; PWR5-NEXT:    addi 3, 3, .LCPI8_0@toc@l
691; PWR5-NEXT:    vsrb 3, 2, 3
692; PWR5-NEXT:    lvx 4, 0, 3
693; PWR5-NEXT:    addis 3, 2, .LCPI8_1@toc@ha
694; PWR5-NEXT:    addi 3, 3, .LCPI8_1@toc@l
695; PWR5-NEXT:    vspltisb 5, 2
696; PWR5-NEXT:    vand 3, 3, 4
697; PWR5-NEXT:    lvx 4, 0, 3
698; PWR5-NEXT:    vsububm 2, 2, 3
699; PWR5-NEXT:    vand 3, 2, 4
700; PWR5-NEXT:    vsrb 2, 2, 5
701; PWR5-NEXT:    vand 2, 2, 4
702; PWR5-NEXT:    vspltisb 4, 4
703; PWR5-NEXT:    vaddubm 2, 3, 2
704; PWR5-NEXT:    vsrb 3, 2, 4
705; PWR5-NEXT:    vspltisb 4, 15
706; PWR5-NEXT:    vaddubm 2, 2, 3
707; PWR5-NEXT:    vspltisb 3, 5
708; PWR5-NEXT:    vand 2, 2, 4
709; PWR5-NEXT:    vcmpgtub 2, 2, 3
710; PWR5-NEXT:    blr
711;
712; PWR6-LABEL: ugt_5_v16i8:
713; PWR6:       # %bb.0:
714; PWR6-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
715; PWR6-NEXT:    vspltisb 3, 1
716; PWR6-NEXT:    addi 3, 3, .LCPI8_0@toc@l
717; PWR6-NEXT:    vsrb 3, 2, 3
718; PWR6-NEXT:    lvx 4, 0, 3
719; PWR6-NEXT:    addis 3, 2, .LCPI8_1@toc@ha
720; PWR6-NEXT:    addi 3, 3, .LCPI8_1@toc@l
721; PWR6-NEXT:    vspltisb 5, 2
722; PWR6-NEXT:    vand 3, 3, 4
723; PWR6-NEXT:    lvx 4, 0, 3
724; PWR6-NEXT:    vsububm 2, 2, 3
725; PWR6-NEXT:    vand 3, 2, 4
726; PWR6-NEXT:    vsrb 2, 2, 5
727; PWR6-NEXT:    vand 2, 2, 4
728; PWR6-NEXT:    vspltisb 4, 4
729; PWR6-NEXT:    vaddubm 2, 3, 2
730; PWR6-NEXT:    vsrb 3, 2, 4
731; PWR6-NEXT:    vspltisb 4, 15
732; PWR6-NEXT:    vaddubm 2, 2, 3
733; PWR6-NEXT:    vspltisb 3, 5
734; PWR6-NEXT:    vand 2, 2, 4
735; PWR6-NEXT:    vcmpgtub 2, 2, 3
736; PWR6-NEXT:    blr
737;
738; PWR7-LABEL: ugt_5_v16i8:
739; PWR7:       # %bb.0:
740; PWR7-NEXT:    vspltisb 3, 1
741; PWR7-NEXT:    addis 3, 2, .LCPI8_0@toc@ha
742; PWR7-NEXT:    addi 3, 3, .LCPI8_0@toc@l
743; PWR7-NEXT:    vspltisb 4, 2
744; PWR7-NEXT:    lxvw4x 0, 0, 3
745; PWR7-NEXT:    addis 3, 2, .LCPI8_1@toc@ha
746; PWR7-NEXT:    vspltisb 5, 4
747; PWR7-NEXT:    addi 3, 3, .LCPI8_1@toc@l
748; PWR7-NEXT:    vsrb 3, 2, 3
749; PWR7-NEXT:    vspltisb 0, 15
750; PWR7-NEXT:    vspltisb 1, 5
751; PWR7-NEXT:    xxland 35, 35, 0
752; PWR7-NEXT:    lxvw4x 0, 0, 3
753; PWR7-NEXT:    vsububm 2, 2, 3
754; PWR7-NEXT:    vsrb 3, 2, 4
755; PWR7-NEXT:    xxland 34, 34, 0
756; PWR7-NEXT:    xxland 35, 35, 0
757; PWR7-NEXT:    vaddubm 2, 2, 3
758; PWR7-NEXT:    vsrb 3, 2, 5
759; PWR7-NEXT:    vaddubm 2, 2, 3
760; PWR7-NEXT:    xxland 34, 34, 32
761; PWR7-NEXT:    vcmpgtub 2, 2, 1
762; PWR7-NEXT:    blr
763;
764; PWR8-LABEL: ugt_5_v16i8:
765; PWR8:       # %bb.0:
766; PWR8-NEXT:    vspltisb 3, 5
767; PWR8-NEXT:    vpopcntb 2, 2
768; PWR8-NEXT:    vcmpgtub 2, 2, 3
769; PWR8-NEXT:    blr
770;
771; PWR9-LABEL: ugt_5_v16i8:
772; PWR9:       # %bb.0:
773; PWR9-NEXT:    xxspltib 35, 5
774; PWR9-NEXT:    vpopcntb 2, 2
775; PWR9-NEXT:    vcmpgtub 2, 2, 3
776; PWR9-NEXT:    blr
777  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
778  %3 = icmp ugt <16 x i8> %2, <i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5, i8 5>
779  %4 = sext <16 x i1> %3 to <16 x i8>
780  ret <16 x i8> %4
781}
782
783define <16 x i8> @ult_6_v16i8(<16 x i8> %0) {
784; PWR5-LABEL: ult_6_v16i8:
785; PWR5:       # %bb.0:
786; PWR5-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
787; PWR5-NEXT:    vspltisb 3, 1
788; PWR5-NEXT:    addi 3, 3, .LCPI9_0@toc@l
789; PWR5-NEXT:    vsrb 3, 2, 3
790; PWR5-NEXT:    lvx 4, 0, 3
791; PWR5-NEXT:    addis 3, 2, .LCPI9_1@toc@ha
792; PWR5-NEXT:    addi 3, 3, .LCPI9_1@toc@l
793; PWR5-NEXT:    vspltisb 5, 2
794; PWR5-NEXT:    vand 3, 3, 4
795; PWR5-NEXT:    lvx 4, 0, 3
796; PWR5-NEXT:    vsububm 2, 2, 3
797; PWR5-NEXT:    vand 3, 2, 4
798; PWR5-NEXT:    vsrb 2, 2, 5
799; PWR5-NEXT:    vand 2, 2, 4
800; PWR5-NEXT:    vspltisb 4, 4
801; PWR5-NEXT:    vaddubm 2, 3, 2
802; PWR5-NEXT:    vsrb 3, 2, 4
803; PWR5-NEXT:    vspltisb 4, 15
804; PWR5-NEXT:    vaddubm 2, 2, 3
805; PWR5-NEXT:    vspltisb 3, 6
806; PWR5-NEXT:    vand 2, 2, 4
807; PWR5-NEXT:    vcmpgtub 2, 3, 2
808; PWR5-NEXT:    blr
809;
810; PWR6-LABEL: ult_6_v16i8:
811; PWR6:       # %bb.0:
812; PWR6-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
813; PWR6-NEXT:    vspltisb 3, 1
814; PWR6-NEXT:    addi 3, 3, .LCPI9_0@toc@l
815; PWR6-NEXT:    vsrb 3, 2, 3
816; PWR6-NEXT:    lvx 4, 0, 3
817; PWR6-NEXT:    addis 3, 2, .LCPI9_1@toc@ha
818; PWR6-NEXT:    addi 3, 3, .LCPI9_1@toc@l
819; PWR6-NEXT:    vspltisb 5, 2
820; PWR6-NEXT:    vand 3, 3, 4
821; PWR6-NEXT:    lvx 4, 0, 3
822; PWR6-NEXT:    vsububm 2, 2, 3
823; PWR6-NEXT:    vand 3, 2, 4
824; PWR6-NEXT:    vsrb 2, 2, 5
825; PWR6-NEXT:    vand 2, 2, 4
826; PWR6-NEXT:    vspltisb 4, 4
827; PWR6-NEXT:    vaddubm 2, 3, 2
828; PWR6-NEXT:    vsrb 3, 2, 4
829; PWR6-NEXT:    vspltisb 4, 15
830; PWR6-NEXT:    vaddubm 2, 2, 3
831; PWR6-NEXT:    vspltisb 3, 6
832; PWR6-NEXT:    vand 2, 2, 4
833; PWR6-NEXT:    vcmpgtub 2, 3, 2
834; PWR6-NEXT:    blr
835;
836; PWR7-LABEL: ult_6_v16i8:
837; PWR7:       # %bb.0:
838; PWR7-NEXT:    vspltisb 3, 1
839; PWR7-NEXT:    addis 3, 2, .LCPI9_0@toc@ha
840; PWR7-NEXT:    addi 3, 3, .LCPI9_0@toc@l
841; PWR7-NEXT:    vspltisb 4, 2
842; PWR7-NEXT:    lxvw4x 0, 0, 3
843; PWR7-NEXT:    addis 3, 2, .LCPI9_1@toc@ha
844; PWR7-NEXT:    vspltisb 5, 4
845; PWR7-NEXT:    addi 3, 3, .LCPI9_1@toc@l
846; PWR7-NEXT:    vsrb 3, 2, 3
847; PWR7-NEXT:    vspltisb 0, 15
848; PWR7-NEXT:    vspltisb 1, 6
849; PWR7-NEXT:    xxland 35, 35, 0
850; PWR7-NEXT:    lxvw4x 0, 0, 3
851; PWR7-NEXT:    vsububm 2, 2, 3
852; PWR7-NEXT:    vsrb 3, 2, 4
853; PWR7-NEXT:    xxland 34, 34, 0
854; PWR7-NEXT:    xxland 35, 35, 0
855; PWR7-NEXT:    vaddubm 2, 2, 3
856; PWR7-NEXT:    vsrb 3, 2, 5
857; PWR7-NEXT:    vaddubm 2, 2, 3
858; PWR7-NEXT:    xxland 34, 34, 32
859; PWR7-NEXT:    vcmpgtub 2, 1, 2
860; PWR7-NEXT:    blr
861;
862; PWR8-LABEL: ult_6_v16i8:
863; PWR8:       # %bb.0:
864; PWR8-NEXT:    vspltisb 3, 6
865; PWR8-NEXT:    vpopcntb 2, 2
866; PWR8-NEXT:    vcmpgtub 2, 3, 2
867; PWR8-NEXT:    blr
868;
869; PWR9-LABEL: ult_6_v16i8:
870; PWR9:       # %bb.0:
871; PWR9-NEXT:    xxspltib 35, 6
872; PWR9-NEXT:    vpopcntb 2, 2
873; PWR9-NEXT:    vcmpgtub 2, 3, 2
874; PWR9-NEXT:    blr
875  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
876  %3 = icmp ult <16 x i8> %2, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
877  %4 = sext <16 x i1> %3 to <16 x i8>
878  ret <16 x i8> %4
879}
880
881define <16 x i8> @ugt_6_v16i8(<16 x i8> %0) {
882; PWR5-LABEL: ugt_6_v16i8:
883; PWR5:       # %bb.0:
884; PWR5-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
885; PWR5-NEXT:    vspltisb 3, 1
886; PWR5-NEXT:    addi 3, 3, .LCPI10_0@toc@l
887; PWR5-NEXT:    vsrb 3, 2, 3
888; PWR5-NEXT:    lvx 4, 0, 3
889; PWR5-NEXT:    addis 3, 2, .LCPI10_1@toc@ha
890; PWR5-NEXT:    addi 3, 3, .LCPI10_1@toc@l
891; PWR5-NEXT:    vspltisb 5, 2
892; PWR5-NEXT:    vand 3, 3, 4
893; PWR5-NEXT:    lvx 4, 0, 3
894; PWR5-NEXT:    vsububm 2, 2, 3
895; PWR5-NEXT:    vand 3, 2, 4
896; PWR5-NEXT:    vsrb 2, 2, 5
897; PWR5-NEXT:    vand 2, 2, 4
898; PWR5-NEXT:    vspltisb 4, 4
899; PWR5-NEXT:    vaddubm 2, 3, 2
900; PWR5-NEXT:    vsrb 3, 2, 4
901; PWR5-NEXT:    vspltisb 4, 15
902; PWR5-NEXT:    vaddubm 2, 2, 3
903; PWR5-NEXT:    vspltisb 3, 6
904; PWR5-NEXT:    vand 2, 2, 4
905; PWR5-NEXT:    vcmpgtub 2, 2, 3
906; PWR5-NEXT:    blr
907;
908; PWR6-LABEL: ugt_6_v16i8:
909; PWR6:       # %bb.0:
910; PWR6-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
911; PWR6-NEXT:    vspltisb 3, 1
912; PWR6-NEXT:    addi 3, 3, .LCPI10_0@toc@l
913; PWR6-NEXT:    vsrb 3, 2, 3
914; PWR6-NEXT:    lvx 4, 0, 3
915; PWR6-NEXT:    addis 3, 2, .LCPI10_1@toc@ha
916; PWR6-NEXT:    addi 3, 3, .LCPI10_1@toc@l
917; PWR6-NEXT:    vspltisb 5, 2
918; PWR6-NEXT:    vand 3, 3, 4
919; PWR6-NEXT:    lvx 4, 0, 3
920; PWR6-NEXT:    vsububm 2, 2, 3
921; PWR6-NEXT:    vand 3, 2, 4
922; PWR6-NEXT:    vsrb 2, 2, 5
923; PWR6-NEXT:    vand 2, 2, 4
924; PWR6-NEXT:    vspltisb 4, 4
925; PWR6-NEXT:    vaddubm 2, 3, 2
926; PWR6-NEXT:    vsrb 3, 2, 4
927; PWR6-NEXT:    vspltisb 4, 15
928; PWR6-NEXT:    vaddubm 2, 2, 3
929; PWR6-NEXT:    vspltisb 3, 6
930; PWR6-NEXT:    vand 2, 2, 4
931; PWR6-NEXT:    vcmpgtub 2, 2, 3
932; PWR6-NEXT:    blr
933;
934; PWR7-LABEL: ugt_6_v16i8:
935; PWR7:       # %bb.0:
936; PWR7-NEXT:    vspltisb 3, 1
937; PWR7-NEXT:    addis 3, 2, .LCPI10_0@toc@ha
938; PWR7-NEXT:    addi 3, 3, .LCPI10_0@toc@l
939; PWR7-NEXT:    vspltisb 4, 2
940; PWR7-NEXT:    lxvw4x 0, 0, 3
941; PWR7-NEXT:    addis 3, 2, .LCPI10_1@toc@ha
942; PWR7-NEXT:    vspltisb 5, 4
943; PWR7-NEXT:    addi 3, 3, .LCPI10_1@toc@l
944; PWR7-NEXT:    vsrb 3, 2, 3
945; PWR7-NEXT:    vspltisb 0, 15
946; PWR7-NEXT:    vspltisb 1, 6
947; PWR7-NEXT:    xxland 35, 35, 0
948; PWR7-NEXT:    lxvw4x 0, 0, 3
949; PWR7-NEXT:    vsububm 2, 2, 3
950; PWR7-NEXT:    vsrb 3, 2, 4
951; PWR7-NEXT:    xxland 34, 34, 0
952; PWR7-NEXT:    xxland 35, 35, 0
953; PWR7-NEXT:    vaddubm 2, 2, 3
954; PWR7-NEXT:    vsrb 3, 2, 5
955; PWR7-NEXT:    vaddubm 2, 2, 3
956; PWR7-NEXT:    xxland 34, 34, 32
957; PWR7-NEXT:    vcmpgtub 2, 2, 1
958; PWR7-NEXT:    blr
959;
960; PWR8-LABEL: ugt_6_v16i8:
961; PWR8:       # %bb.0:
962; PWR8-NEXT:    vspltisb 3, 6
963; PWR8-NEXT:    vpopcntb 2, 2
964; PWR8-NEXT:    vcmpgtub 2, 2, 3
965; PWR8-NEXT:    blr
966;
967; PWR9-LABEL: ugt_6_v16i8:
968; PWR9:       # %bb.0:
969; PWR9-NEXT:    xxspltib 35, 6
970; PWR9-NEXT:    vpopcntb 2, 2
971; PWR9-NEXT:    vcmpgtub 2, 2, 3
972; PWR9-NEXT:    blr
973  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
974  %3 = icmp ugt <16 x i8> %2, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
975  %4 = sext <16 x i1> %3 to <16 x i8>
976  ret <16 x i8> %4
977}
978
979define <16 x i8> @ult_7_v16i8(<16 x i8> %0) {
980; PWR5-LABEL: ult_7_v16i8:
981; PWR5:       # %bb.0:
982; PWR5-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
983; PWR5-NEXT:    vspltisb 3, 1
984; PWR5-NEXT:    addi 3, 3, .LCPI11_0@toc@l
985; PWR5-NEXT:    vsrb 3, 2, 3
986; PWR5-NEXT:    lvx 4, 0, 3
987; PWR5-NEXT:    addis 3, 2, .LCPI11_1@toc@ha
988; PWR5-NEXT:    addi 3, 3, .LCPI11_1@toc@l
989; PWR5-NEXT:    vspltisb 5, 2
990; PWR5-NEXT:    vand 3, 3, 4
991; PWR5-NEXT:    lvx 4, 0, 3
992; PWR5-NEXT:    vsububm 2, 2, 3
993; PWR5-NEXT:    vand 3, 2, 4
994; PWR5-NEXT:    vsrb 2, 2, 5
995; PWR5-NEXT:    vand 2, 2, 4
996; PWR5-NEXT:    vspltisb 4, 4
997; PWR5-NEXT:    vaddubm 2, 3, 2
998; PWR5-NEXT:    vsrb 3, 2, 4
999; PWR5-NEXT:    vspltisb 4, 15
1000; PWR5-NEXT:    vaddubm 2, 2, 3
1001; PWR5-NEXT:    vspltisb 3, 7
1002; PWR5-NEXT:    vand 2, 2, 4
1003; PWR5-NEXT:    vcmpgtub 2, 3, 2
1004; PWR5-NEXT:    blr
1005;
1006; PWR6-LABEL: ult_7_v16i8:
1007; PWR6:       # %bb.0:
1008; PWR6-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
1009; PWR6-NEXT:    vspltisb 3, 1
1010; PWR6-NEXT:    addi 3, 3, .LCPI11_0@toc@l
1011; PWR6-NEXT:    vsrb 3, 2, 3
1012; PWR6-NEXT:    lvx 4, 0, 3
1013; PWR6-NEXT:    addis 3, 2, .LCPI11_1@toc@ha
1014; PWR6-NEXT:    addi 3, 3, .LCPI11_1@toc@l
1015; PWR6-NEXT:    vspltisb 5, 2
1016; PWR6-NEXT:    vand 3, 3, 4
1017; PWR6-NEXT:    lvx 4, 0, 3
1018; PWR6-NEXT:    vsububm 2, 2, 3
1019; PWR6-NEXT:    vand 3, 2, 4
1020; PWR6-NEXT:    vsrb 2, 2, 5
1021; PWR6-NEXT:    vand 2, 2, 4
1022; PWR6-NEXT:    vspltisb 4, 4
1023; PWR6-NEXT:    vaddubm 2, 3, 2
1024; PWR6-NEXT:    vsrb 3, 2, 4
1025; PWR6-NEXT:    vspltisb 4, 15
1026; PWR6-NEXT:    vaddubm 2, 2, 3
1027; PWR6-NEXT:    vspltisb 3, 7
1028; PWR6-NEXT:    vand 2, 2, 4
1029; PWR6-NEXT:    vcmpgtub 2, 3, 2
1030; PWR6-NEXT:    blr
1031;
1032; PWR7-LABEL: ult_7_v16i8:
1033; PWR7:       # %bb.0:
1034; PWR7-NEXT:    vspltisb 3, 1
1035; PWR7-NEXT:    addis 3, 2, .LCPI11_0@toc@ha
1036; PWR7-NEXT:    addi 3, 3, .LCPI11_0@toc@l
1037; PWR7-NEXT:    vspltisb 4, 2
1038; PWR7-NEXT:    lxvw4x 0, 0, 3
1039; PWR7-NEXT:    addis 3, 2, .LCPI11_1@toc@ha
1040; PWR7-NEXT:    vspltisb 5, 4
1041; PWR7-NEXT:    addi 3, 3, .LCPI11_1@toc@l
1042; PWR7-NEXT:    vsrb 3, 2, 3
1043; PWR7-NEXT:    vspltisb 0, 15
1044; PWR7-NEXT:    vspltisb 1, 7
1045; PWR7-NEXT:    xxland 35, 35, 0
1046; PWR7-NEXT:    lxvw4x 0, 0, 3
1047; PWR7-NEXT:    vsububm 2, 2, 3
1048; PWR7-NEXT:    vsrb 3, 2, 4
1049; PWR7-NEXT:    xxland 34, 34, 0
1050; PWR7-NEXT:    xxland 35, 35, 0
1051; PWR7-NEXT:    vaddubm 2, 2, 3
1052; PWR7-NEXT:    vsrb 3, 2, 5
1053; PWR7-NEXT:    vaddubm 2, 2, 3
1054; PWR7-NEXT:    xxland 34, 34, 32
1055; PWR7-NEXT:    vcmpgtub 2, 1, 2
1056; PWR7-NEXT:    blr
1057;
1058; PWR8-LABEL: ult_7_v16i8:
1059; PWR8:       # %bb.0:
1060; PWR8-NEXT:    vspltisb 3, 7
1061; PWR8-NEXT:    vpopcntb 2, 2
1062; PWR8-NEXT:    vcmpgtub 2, 3, 2
1063; PWR8-NEXT:    blr
1064;
1065; PWR9-LABEL: ult_7_v16i8:
1066; PWR9:       # %bb.0:
1067; PWR9-NEXT:    xxspltib 35, 7
1068; PWR9-NEXT:    vpopcntb 2, 2
1069; PWR9-NEXT:    vcmpgtub 2, 3, 2
1070; PWR9-NEXT:    blr
1071  %2 = tail call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> %0)
1072  %3 = icmp ult <16 x i8> %2, <i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7, i8 7>
1073  %4 = sext <16 x i1> %3 to <16 x i8>
1074  ret <16 x i8> %4
1075}
1076
1077define <8 x i16> @ugt_1_v8i16(<8 x i16> %0) {
1078; PWR5-LABEL: ugt_1_v8i16:
1079; PWR5:       # %bb.0:
1080; PWR5-NEXT:    vspltisb 3, -1
1081; PWR5-NEXT:    vadduhm 3, 2, 3
1082; PWR5-NEXT:    vand 2, 2, 3
1083; PWR5-NEXT:    vxor 3, 3, 3
1084; PWR5-NEXT:    vcmpequh 2, 2, 3
1085; PWR5-NEXT:    vnot 2, 2
1086; PWR5-NEXT:    blr
1087;
1088; PWR6-LABEL: ugt_1_v8i16:
1089; PWR6:       # %bb.0:
1090; PWR6-NEXT:    vspltisb 3, -1
1091; PWR6-NEXT:    vadduhm 3, 2, 3
1092; PWR6-NEXT:    vand 2, 2, 3
1093; PWR6-NEXT:    vxor 3, 3, 3
1094; PWR6-NEXT:    vcmpequh 2, 2, 3
1095; PWR6-NEXT:    vnot 2, 2
1096; PWR6-NEXT:    blr
1097;
1098; PWR7-LABEL: ugt_1_v8i16:
1099; PWR7:       # %bb.0:
1100; PWR7-NEXT:    vspltisb 3, -1
1101; PWR7-NEXT:    vadduhm 3, 2, 3
1102; PWR7-NEXT:    xxland 34, 34, 35
1103; PWR7-NEXT:    xxlxor 35, 35, 35
1104; PWR7-NEXT:    vcmpequh 2, 2, 3
1105; PWR7-NEXT:    xxlnor 34, 34, 34
1106; PWR7-NEXT:    blr
1107;
1108; PWR8-LABEL: ugt_1_v8i16:
1109; PWR8:       # %bb.0:
1110; PWR8-NEXT:    vspltish 3, 1
1111; PWR8-NEXT:    vpopcnth 2, 2
1112; PWR8-NEXT:    vcmpgtuh 2, 2, 3
1113; PWR8-NEXT:    blr
1114;
1115; PWR9-LABEL: ugt_1_v8i16:
1116; PWR9:       # %bb.0:
1117; PWR9-NEXT:    vspltish 3, 1
1118; PWR9-NEXT:    vpopcnth 2, 2
1119; PWR9-NEXT:    vcmpgtuh 2, 2, 3
1120; PWR9-NEXT:    blr
1121  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1122  %3 = icmp ugt <8 x i16> %2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
1123  %4 = sext <8 x i1> %3 to <8 x i16>
1124  ret <8 x i16> %4
1125}
1126
1127define <8 x i16> @ult_2_v8i16(<8 x i16> %0) {
1128; PWR5-LABEL: ult_2_v8i16:
1129; PWR5:       # %bb.0:
1130; PWR5-NEXT:    vspltisb 3, -1
1131; PWR5-NEXT:    vadduhm 3, 2, 3
1132; PWR5-NEXT:    vand 2, 2, 3
1133; PWR5-NEXT:    vxor 3, 3, 3
1134; PWR5-NEXT:    vcmpequh 2, 2, 3
1135; PWR5-NEXT:    blr
1136;
1137; PWR6-LABEL: ult_2_v8i16:
1138; PWR6:       # %bb.0:
1139; PWR6-NEXT:    vspltisb 3, -1
1140; PWR6-NEXT:    vadduhm 3, 2, 3
1141; PWR6-NEXT:    vand 2, 2, 3
1142; PWR6-NEXT:    vxor 3, 3, 3
1143; PWR6-NEXT:    vcmpequh 2, 2, 3
1144; PWR6-NEXT:    blr
1145;
1146; PWR7-LABEL: ult_2_v8i16:
1147; PWR7:       # %bb.0:
1148; PWR7-NEXT:    vspltisb 3, -1
1149; PWR7-NEXT:    vadduhm 3, 2, 3
1150; PWR7-NEXT:    xxland 34, 34, 35
1151; PWR7-NEXT:    xxlxor 35, 35, 35
1152; PWR7-NEXT:    vcmpequh 2, 2, 3
1153; PWR7-NEXT:    blr
1154;
1155; PWR8-LABEL: ult_2_v8i16:
1156; PWR8:       # %bb.0:
1157; PWR8-NEXT:    vspltish 3, 2
1158; PWR8-NEXT:    vpopcnth 2, 2
1159; PWR8-NEXT:    vcmpgtuh 2, 3, 2
1160; PWR8-NEXT:    blr
1161;
1162; PWR9-LABEL: ult_2_v8i16:
1163; PWR9:       # %bb.0:
1164; PWR9-NEXT:    vspltish 3, 2
1165; PWR9-NEXT:    vpopcnth 2, 2
1166; PWR9-NEXT:    vcmpgtuh 2, 3, 2
1167; PWR9-NEXT:    blr
1168  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1169  %3 = icmp ult <8 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1170  %4 = sext <8 x i1> %3 to <8 x i16>
1171  ret <8 x i16> %4
1172}
1173
1174define <8 x i16> @ugt_2_v8i16(<8 x i16> %0) {
1175; PWR5-LABEL: ugt_2_v8i16:
1176; PWR5:       # %bb.0:
1177; PWR5-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
1178; PWR5-NEXT:    vspltish 3, 1
1179; PWR5-NEXT:    addi 3, 3, .LCPI14_0@toc@l
1180; PWR5-NEXT:    vsrh 3, 2, 3
1181; PWR5-NEXT:    lvx 4, 0, 3
1182; PWR5-NEXT:    addis 3, 2, .LCPI14_1@toc@ha
1183; PWR5-NEXT:    addi 3, 3, .LCPI14_1@toc@l
1184; PWR5-NEXT:    vspltish 5, 2
1185; PWR5-NEXT:    vand 3, 3, 4
1186; PWR5-NEXT:    lvx 4, 0, 3
1187; PWR5-NEXT:    vsubuhm 2, 2, 3
1188; PWR5-NEXT:    vand 3, 2, 4
1189; PWR5-NEXT:    vsrh 2, 2, 5
1190; PWR5-NEXT:    vand 2, 2, 4
1191; PWR5-NEXT:    vadduhm 2, 3, 2
1192; PWR5-NEXT:    vspltish 3, 4
1193; PWR5-NEXT:    vsrh 3, 2, 3
1194; PWR5-NEXT:    vadduhm 2, 2, 3
1195; PWR5-NEXT:    vspltisb 3, 15
1196; PWR5-NEXT:    vxor 4, 4, 4
1197; PWR5-NEXT:    vand 2, 2, 3
1198; PWR5-NEXT:    vspltisb 3, 1
1199; PWR5-NEXT:    vmladduhm 2, 2, 3, 4
1200; PWR5-NEXT:    vspltish 3, 8
1201; PWR5-NEXT:    vsrh 2, 2, 3
1202; PWR5-NEXT:    vcmpgtuh 2, 2, 5
1203; PWR5-NEXT:    blr
1204;
1205; PWR6-LABEL: ugt_2_v8i16:
1206; PWR6:       # %bb.0:
1207; PWR6-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
1208; PWR6-NEXT:    vspltish 3, 1
1209; PWR6-NEXT:    addi 3, 3, .LCPI14_0@toc@l
1210; PWR6-NEXT:    vsrh 3, 2, 3
1211; PWR6-NEXT:    lvx 4, 0, 3
1212; PWR6-NEXT:    addis 3, 2, .LCPI14_1@toc@ha
1213; PWR6-NEXT:    addi 3, 3, .LCPI14_1@toc@l
1214; PWR6-NEXT:    vspltish 5, 2
1215; PWR6-NEXT:    vand 3, 3, 4
1216; PWR6-NEXT:    lvx 4, 0, 3
1217; PWR6-NEXT:    vsubuhm 2, 2, 3
1218; PWR6-NEXT:    vand 3, 2, 4
1219; PWR6-NEXT:    vsrh 2, 2, 5
1220; PWR6-NEXT:    vand 2, 2, 4
1221; PWR6-NEXT:    vadduhm 2, 3, 2
1222; PWR6-NEXT:    vspltish 3, 4
1223; PWR6-NEXT:    vsrh 3, 2, 3
1224; PWR6-NEXT:    vadduhm 2, 2, 3
1225; PWR6-NEXT:    vspltisb 3, 15
1226; PWR6-NEXT:    vxor 4, 4, 4
1227; PWR6-NEXT:    vand 2, 2, 3
1228; PWR6-NEXT:    vspltisb 3, 1
1229; PWR6-NEXT:    vmladduhm 2, 2, 3, 4
1230; PWR6-NEXT:    vspltish 3, 8
1231; PWR6-NEXT:    vsrh 2, 2, 3
1232; PWR6-NEXT:    vcmpgtuh 2, 2, 5
1233; PWR6-NEXT:    blr
1234;
1235; PWR7-LABEL: ugt_2_v8i16:
1236; PWR7:       # %bb.0:
1237; PWR7-NEXT:    vspltish 3, 1
1238; PWR7-NEXT:    addis 3, 2, .LCPI14_0@toc@ha
1239; PWR7-NEXT:    addi 3, 3, .LCPI14_0@toc@l
1240; PWR7-NEXT:    vspltish 4, 2
1241; PWR7-NEXT:    lxvw4x 0, 0, 3
1242; PWR7-NEXT:    addis 3, 2, .LCPI14_1@toc@ha
1243; PWR7-NEXT:    vspltish 5, 4
1244; PWR7-NEXT:    addi 3, 3, .LCPI14_1@toc@l
1245; PWR7-NEXT:    vsrh 3, 2, 3
1246; PWR7-NEXT:    vspltisb 0, 15
1247; PWR7-NEXT:    vspltisb 1, 1
1248; PWR7-NEXT:    vspltish 6, 8
1249; PWR7-NEXT:    xxland 35, 35, 0
1250; PWR7-NEXT:    lxvw4x 0, 0, 3
1251; PWR7-NEXT:    vsubuhm 2, 2, 3
1252; PWR7-NEXT:    xxland 35, 34, 0
1253; PWR7-NEXT:    vsrh 2, 2, 4
1254; PWR7-NEXT:    xxland 34, 34, 0
1255; PWR7-NEXT:    vadduhm 2, 3, 2
1256; PWR7-NEXT:    vsrh 3, 2, 5
1257; PWR7-NEXT:    vadduhm 2, 2, 3
1258; PWR7-NEXT:    vxor 3, 3, 3
1259; PWR7-NEXT:    xxland 34, 34, 32
1260; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
1261; PWR7-NEXT:    vsrh 2, 2, 6
1262; PWR7-NEXT:    vcmpgtuh 2, 2, 4
1263; PWR7-NEXT:    blr
1264;
1265; PWR8-LABEL: ugt_2_v8i16:
1266; PWR8:       # %bb.0:
1267; PWR8-NEXT:    vspltish 3, 2
1268; PWR8-NEXT:    vpopcnth 2, 2
1269; PWR8-NEXT:    vcmpgtuh 2, 2, 3
1270; PWR8-NEXT:    blr
1271;
1272; PWR9-LABEL: ugt_2_v8i16:
1273; PWR9:       # %bb.0:
1274; PWR9-NEXT:    vspltish 3, 2
1275; PWR9-NEXT:    vpopcnth 2, 2
1276; PWR9-NEXT:    vcmpgtuh 2, 2, 3
1277; PWR9-NEXT:    blr
1278  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1279  %3 = icmp ugt <8 x i16> %2, <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
1280  %4 = sext <8 x i1> %3 to <8 x i16>
1281  ret <8 x i16> %4
1282}
1283
1284define <8 x i16> @ult_3_v8i16(<8 x i16> %0) {
1285; PWR5-LABEL: ult_3_v8i16:
1286; PWR5:       # %bb.0:
1287; PWR5-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
1288; PWR5-NEXT:    vspltish 4, 1
1289; PWR5-NEXT:    vxor 3, 3, 3
1290; PWR5-NEXT:    addi 3, 3, .LCPI15_0@toc@l
1291; PWR5-NEXT:    lvx 5, 0, 3
1292; PWR5-NEXT:    addis 3, 2, .LCPI15_1@toc@ha
1293; PWR5-NEXT:    addi 3, 3, .LCPI15_1@toc@l
1294; PWR5-NEXT:    vsrh 4, 2, 4
1295; PWR5-NEXT:    vand 4, 4, 5
1296; PWR5-NEXT:    vspltish 5, 2
1297; PWR5-NEXT:    vsubuhm 2, 2, 4
1298; PWR5-NEXT:    vsrh 4, 2, 5
1299; PWR5-NEXT:    lvx 5, 0, 3
1300; PWR5-NEXT:    vand 2, 2, 5
1301; PWR5-NEXT:    vand 4, 4, 5
1302; PWR5-NEXT:    vspltish 5, 4
1303; PWR5-NEXT:    vadduhm 2, 2, 4
1304; PWR5-NEXT:    vsrh 4, 2, 5
1305; PWR5-NEXT:    vspltisb 5, 15
1306; PWR5-NEXT:    vadduhm 2, 2, 4
1307; PWR5-NEXT:    vspltisb 4, 1
1308; PWR5-NEXT:    vand 2, 2, 5
1309; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
1310; PWR5-NEXT:    vspltish 3, 8
1311; PWR5-NEXT:    vsrh 2, 2, 3
1312; PWR5-NEXT:    vspltish 3, 3
1313; PWR5-NEXT:    vcmpgtuh 2, 3, 2
1314; PWR5-NEXT:    blr
1315;
1316; PWR6-LABEL: ult_3_v8i16:
1317; PWR6:       # %bb.0:
1318; PWR6-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
1319; PWR6-NEXT:    vspltish 4, 1
1320; PWR6-NEXT:    vxor 3, 3, 3
1321; PWR6-NEXT:    addi 3, 3, .LCPI15_0@toc@l
1322; PWR6-NEXT:    lvx 5, 0, 3
1323; PWR6-NEXT:    addis 3, 2, .LCPI15_1@toc@ha
1324; PWR6-NEXT:    addi 3, 3, .LCPI15_1@toc@l
1325; PWR6-NEXT:    vsrh 4, 2, 4
1326; PWR6-NEXT:    vand 4, 4, 5
1327; PWR6-NEXT:    vspltish 5, 2
1328; PWR6-NEXT:    vsubuhm 2, 2, 4
1329; PWR6-NEXT:    vsrh 4, 2, 5
1330; PWR6-NEXT:    lvx 5, 0, 3
1331; PWR6-NEXT:    vand 2, 2, 5
1332; PWR6-NEXT:    vand 4, 4, 5
1333; PWR6-NEXT:    vspltish 5, 4
1334; PWR6-NEXT:    vadduhm 2, 2, 4
1335; PWR6-NEXT:    vsrh 4, 2, 5
1336; PWR6-NEXT:    vspltisb 5, 15
1337; PWR6-NEXT:    vadduhm 2, 2, 4
1338; PWR6-NEXT:    vspltisb 4, 1
1339; PWR6-NEXT:    vand 2, 2, 5
1340; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
1341; PWR6-NEXT:    vspltish 3, 8
1342; PWR6-NEXT:    vsrh 2, 2, 3
1343; PWR6-NEXT:    vspltish 3, 3
1344; PWR6-NEXT:    vcmpgtuh 2, 3, 2
1345; PWR6-NEXT:    blr
1346;
1347; PWR7-LABEL: ult_3_v8i16:
1348; PWR7:       # %bb.0:
1349; PWR7-NEXT:    vspltish 3, 1
1350; PWR7-NEXT:    addis 3, 2, .LCPI15_0@toc@ha
1351; PWR7-NEXT:    addi 3, 3, .LCPI15_0@toc@l
1352; PWR7-NEXT:    vspltish 4, 2
1353; PWR7-NEXT:    lxvw4x 0, 0, 3
1354; PWR7-NEXT:    addis 3, 2, .LCPI15_1@toc@ha
1355; PWR7-NEXT:    vspltish 5, 4
1356; PWR7-NEXT:    addi 3, 3, .LCPI15_1@toc@l
1357; PWR7-NEXT:    vsrh 3, 2, 3
1358; PWR7-NEXT:    vspltisb 0, 15
1359; PWR7-NEXT:    vspltisb 1, 1
1360; PWR7-NEXT:    vspltish 6, 8
1361; PWR7-NEXT:    vspltish 7, 3
1362; PWR7-NEXT:    xxland 35, 35, 0
1363; PWR7-NEXT:    lxvw4x 0, 0, 3
1364; PWR7-NEXT:    vsubuhm 2, 2, 3
1365; PWR7-NEXT:    vsrh 3, 2, 4
1366; PWR7-NEXT:    xxland 34, 34, 0
1367; PWR7-NEXT:    xxland 35, 35, 0
1368; PWR7-NEXT:    vadduhm 2, 2, 3
1369; PWR7-NEXT:    vsrh 3, 2, 5
1370; PWR7-NEXT:    vadduhm 2, 2, 3
1371; PWR7-NEXT:    vxor 3, 3, 3
1372; PWR7-NEXT:    xxland 34, 34, 32
1373; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
1374; PWR7-NEXT:    vsrh 2, 2, 6
1375; PWR7-NEXT:    vcmpgtuh 2, 7, 2
1376; PWR7-NEXT:    blr
1377;
1378; PWR8-LABEL: ult_3_v8i16:
1379; PWR8:       # %bb.0:
1380; PWR8-NEXT:    vspltish 3, 3
1381; PWR8-NEXT:    vpopcnth 2, 2
1382; PWR8-NEXT:    vcmpgtuh 2, 3, 2
1383; PWR8-NEXT:    blr
1384;
1385; PWR9-LABEL: ult_3_v8i16:
1386; PWR9:       # %bb.0:
1387; PWR9-NEXT:    vspltish 3, 3
1388; PWR9-NEXT:    vpopcnth 2, 2
1389; PWR9-NEXT:    vcmpgtuh 2, 3, 2
1390; PWR9-NEXT:    blr
1391  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1392  %3 = icmp ult <8 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1393  %4 = sext <8 x i1> %3 to <8 x i16>
1394  ret <8 x i16> %4
1395}
1396
1397define <8 x i16> @ugt_3_v8i16(<8 x i16> %0) {
1398; PWR5-LABEL: ugt_3_v8i16:
1399; PWR5:       # %bb.0:
1400; PWR5-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
1401; PWR5-NEXT:    vspltish 4, 1
1402; PWR5-NEXT:    vxor 3, 3, 3
1403; PWR5-NEXT:    addi 3, 3, .LCPI16_0@toc@l
1404; PWR5-NEXT:    lvx 5, 0, 3
1405; PWR5-NEXT:    addis 3, 2, .LCPI16_1@toc@ha
1406; PWR5-NEXT:    addi 3, 3, .LCPI16_1@toc@l
1407; PWR5-NEXT:    vsrh 4, 2, 4
1408; PWR5-NEXT:    vand 4, 4, 5
1409; PWR5-NEXT:    vspltish 5, 2
1410; PWR5-NEXT:    vsubuhm 2, 2, 4
1411; PWR5-NEXT:    vsrh 4, 2, 5
1412; PWR5-NEXT:    lvx 5, 0, 3
1413; PWR5-NEXT:    vand 2, 2, 5
1414; PWR5-NEXT:    vand 4, 4, 5
1415; PWR5-NEXT:    vspltish 5, 4
1416; PWR5-NEXT:    vadduhm 2, 2, 4
1417; PWR5-NEXT:    vsrh 4, 2, 5
1418; PWR5-NEXT:    vspltisb 5, 15
1419; PWR5-NEXT:    vadduhm 2, 2, 4
1420; PWR5-NEXT:    vspltisb 4, 1
1421; PWR5-NEXT:    vand 2, 2, 5
1422; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
1423; PWR5-NEXT:    vspltish 3, 8
1424; PWR5-NEXT:    vsrh 2, 2, 3
1425; PWR5-NEXT:    vspltish 3, 3
1426; PWR5-NEXT:    vcmpgtuh 2, 2, 3
1427; PWR5-NEXT:    blr
1428;
1429; PWR6-LABEL: ugt_3_v8i16:
1430; PWR6:       # %bb.0:
1431; PWR6-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
1432; PWR6-NEXT:    vspltish 4, 1
1433; PWR6-NEXT:    vxor 3, 3, 3
1434; PWR6-NEXT:    addi 3, 3, .LCPI16_0@toc@l
1435; PWR6-NEXT:    lvx 5, 0, 3
1436; PWR6-NEXT:    addis 3, 2, .LCPI16_1@toc@ha
1437; PWR6-NEXT:    addi 3, 3, .LCPI16_1@toc@l
1438; PWR6-NEXT:    vsrh 4, 2, 4
1439; PWR6-NEXT:    vand 4, 4, 5
1440; PWR6-NEXT:    vspltish 5, 2
1441; PWR6-NEXT:    vsubuhm 2, 2, 4
1442; PWR6-NEXT:    vsrh 4, 2, 5
1443; PWR6-NEXT:    lvx 5, 0, 3
1444; PWR6-NEXT:    vand 2, 2, 5
1445; PWR6-NEXT:    vand 4, 4, 5
1446; PWR6-NEXT:    vspltish 5, 4
1447; PWR6-NEXT:    vadduhm 2, 2, 4
1448; PWR6-NEXT:    vsrh 4, 2, 5
1449; PWR6-NEXT:    vspltisb 5, 15
1450; PWR6-NEXT:    vadduhm 2, 2, 4
1451; PWR6-NEXT:    vspltisb 4, 1
1452; PWR6-NEXT:    vand 2, 2, 5
1453; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
1454; PWR6-NEXT:    vspltish 3, 8
1455; PWR6-NEXT:    vsrh 2, 2, 3
1456; PWR6-NEXT:    vspltish 3, 3
1457; PWR6-NEXT:    vcmpgtuh 2, 2, 3
1458; PWR6-NEXT:    blr
1459;
1460; PWR7-LABEL: ugt_3_v8i16:
1461; PWR7:       # %bb.0:
1462; PWR7-NEXT:    vspltish 3, 1
1463; PWR7-NEXT:    addis 3, 2, .LCPI16_0@toc@ha
1464; PWR7-NEXT:    addi 3, 3, .LCPI16_0@toc@l
1465; PWR7-NEXT:    vspltish 4, 2
1466; PWR7-NEXT:    lxvw4x 0, 0, 3
1467; PWR7-NEXT:    addis 3, 2, .LCPI16_1@toc@ha
1468; PWR7-NEXT:    vspltish 5, 4
1469; PWR7-NEXT:    addi 3, 3, .LCPI16_1@toc@l
1470; PWR7-NEXT:    vsrh 3, 2, 3
1471; PWR7-NEXT:    vspltisb 0, 15
1472; PWR7-NEXT:    vspltisb 1, 1
1473; PWR7-NEXT:    vspltish 6, 8
1474; PWR7-NEXT:    vspltish 7, 3
1475; PWR7-NEXT:    xxland 35, 35, 0
1476; PWR7-NEXT:    lxvw4x 0, 0, 3
1477; PWR7-NEXT:    vsubuhm 2, 2, 3
1478; PWR7-NEXT:    vsrh 3, 2, 4
1479; PWR7-NEXT:    xxland 34, 34, 0
1480; PWR7-NEXT:    xxland 35, 35, 0
1481; PWR7-NEXT:    vadduhm 2, 2, 3
1482; PWR7-NEXT:    vsrh 3, 2, 5
1483; PWR7-NEXT:    vadduhm 2, 2, 3
1484; PWR7-NEXT:    vxor 3, 3, 3
1485; PWR7-NEXT:    xxland 34, 34, 32
1486; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
1487; PWR7-NEXT:    vsrh 2, 2, 6
1488; PWR7-NEXT:    vcmpgtuh 2, 2, 7
1489; PWR7-NEXT:    blr
1490;
1491; PWR8-LABEL: ugt_3_v8i16:
1492; PWR8:       # %bb.0:
1493; PWR8-NEXT:    vspltish 3, 3
1494; PWR8-NEXT:    vpopcnth 2, 2
1495; PWR8-NEXT:    vcmpgtuh 2, 2, 3
1496; PWR8-NEXT:    blr
1497;
1498; PWR9-LABEL: ugt_3_v8i16:
1499; PWR9:       # %bb.0:
1500; PWR9-NEXT:    vspltish 3, 3
1501; PWR9-NEXT:    vpopcnth 2, 2
1502; PWR9-NEXT:    vcmpgtuh 2, 2, 3
1503; PWR9-NEXT:    blr
1504  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1505  %3 = icmp ugt <8 x i16> %2, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
1506  %4 = sext <8 x i1> %3 to <8 x i16>
1507  ret <8 x i16> %4
1508}
1509
1510define <8 x i16> @ult_4_v8i16(<8 x i16> %0) {
1511; PWR5-LABEL: ult_4_v8i16:
1512; PWR5:       # %bb.0:
1513; PWR5-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
1514; PWR5-NEXT:    vspltish 4, 1
1515; PWR5-NEXT:    vxor 3, 3, 3
1516; PWR5-NEXT:    addi 3, 3, .LCPI17_0@toc@l
1517; PWR5-NEXT:    lvx 5, 0, 3
1518; PWR5-NEXT:    addis 3, 2, .LCPI17_1@toc@ha
1519; PWR5-NEXT:    addi 3, 3, .LCPI17_1@toc@l
1520; PWR5-NEXT:    vsrh 4, 2, 4
1521; PWR5-NEXT:    vand 4, 4, 5
1522; PWR5-NEXT:    vspltish 5, 2
1523; PWR5-NEXT:    vsubuhm 2, 2, 4
1524; PWR5-NEXT:    vsrh 4, 2, 5
1525; PWR5-NEXT:    lvx 5, 0, 3
1526; PWR5-NEXT:    vand 2, 2, 5
1527; PWR5-NEXT:    vand 4, 4, 5
1528; PWR5-NEXT:    vspltish 5, 4
1529; PWR5-NEXT:    vadduhm 2, 2, 4
1530; PWR5-NEXT:    vsrh 4, 2, 5
1531; PWR5-NEXT:    vadduhm 2, 2, 4
1532; PWR5-NEXT:    vspltisb 4, 15
1533; PWR5-NEXT:    vand 2, 2, 4
1534; PWR5-NEXT:    vspltisb 4, 1
1535; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
1536; PWR5-NEXT:    vspltish 3, 8
1537; PWR5-NEXT:    vsrh 2, 2, 3
1538; PWR5-NEXT:    vcmpgtuh 2, 5, 2
1539; PWR5-NEXT:    blr
1540;
1541; PWR6-LABEL: ult_4_v8i16:
1542; PWR6:       # %bb.0:
1543; PWR6-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
1544; PWR6-NEXT:    vspltish 4, 1
1545; PWR6-NEXT:    vxor 3, 3, 3
1546; PWR6-NEXT:    addi 3, 3, .LCPI17_0@toc@l
1547; PWR6-NEXT:    lvx 5, 0, 3
1548; PWR6-NEXT:    addis 3, 2, .LCPI17_1@toc@ha
1549; PWR6-NEXT:    addi 3, 3, .LCPI17_1@toc@l
1550; PWR6-NEXT:    vsrh 4, 2, 4
1551; PWR6-NEXT:    vand 4, 4, 5
1552; PWR6-NEXT:    vspltish 5, 2
1553; PWR6-NEXT:    vsubuhm 2, 2, 4
1554; PWR6-NEXT:    vsrh 4, 2, 5
1555; PWR6-NEXT:    lvx 5, 0, 3
1556; PWR6-NEXT:    vand 2, 2, 5
1557; PWR6-NEXT:    vand 4, 4, 5
1558; PWR6-NEXT:    vspltish 5, 4
1559; PWR6-NEXT:    vadduhm 2, 2, 4
1560; PWR6-NEXT:    vsrh 4, 2, 5
1561; PWR6-NEXT:    vadduhm 2, 2, 4
1562; PWR6-NEXT:    vspltisb 4, 15
1563; PWR6-NEXT:    vand 2, 2, 4
1564; PWR6-NEXT:    vspltisb 4, 1
1565; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
1566; PWR6-NEXT:    vspltish 3, 8
1567; PWR6-NEXT:    vsrh 2, 2, 3
1568; PWR6-NEXT:    vcmpgtuh 2, 5, 2
1569; PWR6-NEXT:    blr
1570;
1571; PWR7-LABEL: ult_4_v8i16:
1572; PWR7:       # %bb.0:
1573; PWR7-NEXT:    vspltish 3, 1
1574; PWR7-NEXT:    addis 3, 2, .LCPI17_0@toc@ha
1575; PWR7-NEXT:    addi 3, 3, .LCPI17_0@toc@l
1576; PWR7-NEXT:    vspltish 4, 2
1577; PWR7-NEXT:    lxvw4x 0, 0, 3
1578; PWR7-NEXT:    addis 3, 2, .LCPI17_1@toc@ha
1579; PWR7-NEXT:    vspltish 5, 4
1580; PWR7-NEXT:    addi 3, 3, .LCPI17_1@toc@l
1581; PWR7-NEXT:    vsrh 3, 2, 3
1582; PWR7-NEXT:    vspltisb 0, 15
1583; PWR7-NEXT:    vspltisb 1, 1
1584; PWR7-NEXT:    vspltish 6, 8
1585; PWR7-NEXT:    xxland 35, 35, 0
1586; PWR7-NEXT:    lxvw4x 0, 0, 3
1587; PWR7-NEXT:    vsubuhm 2, 2, 3
1588; PWR7-NEXT:    vsrh 3, 2, 4
1589; PWR7-NEXT:    xxland 34, 34, 0
1590; PWR7-NEXT:    xxland 35, 35, 0
1591; PWR7-NEXT:    vadduhm 2, 2, 3
1592; PWR7-NEXT:    vsrh 3, 2, 5
1593; PWR7-NEXT:    vadduhm 2, 2, 3
1594; PWR7-NEXT:    vxor 3, 3, 3
1595; PWR7-NEXT:    xxland 34, 34, 32
1596; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
1597; PWR7-NEXT:    vsrh 2, 2, 6
1598; PWR7-NEXT:    vcmpgtuh 2, 5, 2
1599; PWR7-NEXT:    blr
1600;
1601; PWR8-LABEL: ult_4_v8i16:
1602; PWR8:       # %bb.0:
1603; PWR8-NEXT:    vspltish 3, 4
1604; PWR8-NEXT:    vpopcnth 2, 2
1605; PWR8-NEXT:    vcmpgtuh 2, 3, 2
1606; PWR8-NEXT:    blr
1607;
1608; PWR9-LABEL: ult_4_v8i16:
1609; PWR9:       # %bb.0:
1610; PWR9-NEXT:    vspltish 3, 4
1611; PWR9-NEXT:    vpopcnth 2, 2
1612; PWR9-NEXT:    vcmpgtuh 2, 3, 2
1613; PWR9-NEXT:    blr
1614  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1615  %3 = icmp ult <8 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
1616  %4 = sext <8 x i1> %3 to <8 x i16>
1617  ret <8 x i16> %4
1618}
1619
1620define <8 x i16> @ugt_4_v8i16(<8 x i16> %0) {
1621; PWR5-LABEL: ugt_4_v8i16:
1622; PWR5:       # %bb.0:
1623; PWR5-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
1624; PWR5-NEXT:    vspltish 4, 1
1625; PWR5-NEXT:    vxor 3, 3, 3
1626; PWR5-NEXT:    addi 3, 3, .LCPI18_0@toc@l
1627; PWR5-NEXT:    lvx 5, 0, 3
1628; PWR5-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
1629; PWR5-NEXT:    addi 3, 3, .LCPI18_1@toc@l
1630; PWR5-NEXT:    vsrh 4, 2, 4
1631; PWR5-NEXT:    vand 4, 4, 5
1632; PWR5-NEXT:    vspltish 5, 2
1633; PWR5-NEXT:    vsubuhm 2, 2, 4
1634; PWR5-NEXT:    vsrh 4, 2, 5
1635; PWR5-NEXT:    lvx 5, 0, 3
1636; PWR5-NEXT:    vand 2, 2, 5
1637; PWR5-NEXT:    vand 4, 4, 5
1638; PWR5-NEXT:    vspltish 5, 4
1639; PWR5-NEXT:    vadduhm 2, 2, 4
1640; PWR5-NEXT:    vsrh 4, 2, 5
1641; PWR5-NEXT:    vadduhm 2, 2, 4
1642; PWR5-NEXT:    vspltisb 4, 15
1643; PWR5-NEXT:    vand 2, 2, 4
1644; PWR5-NEXT:    vspltisb 4, 1
1645; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
1646; PWR5-NEXT:    vspltish 3, 8
1647; PWR5-NEXT:    vsrh 2, 2, 3
1648; PWR5-NEXT:    vcmpgtuh 2, 2, 5
1649; PWR5-NEXT:    blr
1650;
1651; PWR6-LABEL: ugt_4_v8i16:
1652; PWR6:       # %bb.0:
1653; PWR6-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
1654; PWR6-NEXT:    vspltish 4, 1
1655; PWR6-NEXT:    vxor 3, 3, 3
1656; PWR6-NEXT:    addi 3, 3, .LCPI18_0@toc@l
1657; PWR6-NEXT:    lvx 5, 0, 3
1658; PWR6-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
1659; PWR6-NEXT:    addi 3, 3, .LCPI18_1@toc@l
1660; PWR6-NEXT:    vsrh 4, 2, 4
1661; PWR6-NEXT:    vand 4, 4, 5
1662; PWR6-NEXT:    vspltish 5, 2
1663; PWR6-NEXT:    vsubuhm 2, 2, 4
1664; PWR6-NEXT:    vsrh 4, 2, 5
1665; PWR6-NEXT:    lvx 5, 0, 3
1666; PWR6-NEXT:    vand 2, 2, 5
1667; PWR6-NEXT:    vand 4, 4, 5
1668; PWR6-NEXT:    vspltish 5, 4
1669; PWR6-NEXT:    vadduhm 2, 2, 4
1670; PWR6-NEXT:    vsrh 4, 2, 5
1671; PWR6-NEXT:    vadduhm 2, 2, 4
1672; PWR6-NEXT:    vspltisb 4, 15
1673; PWR6-NEXT:    vand 2, 2, 4
1674; PWR6-NEXT:    vspltisb 4, 1
1675; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
1676; PWR6-NEXT:    vspltish 3, 8
1677; PWR6-NEXT:    vsrh 2, 2, 3
1678; PWR6-NEXT:    vcmpgtuh 2, 2, 5
1679; PWR6-NEXT:    blr
1680;
1681; PWR7-LABEL: ugt_4_v8i16:
1682; PWR7:       # %bb.0:
1683; PWR7-NEXT:    vspltish 3, 1
1684; PWR7-NEXT:    addis 3, 2, .LCPI18_0@toc@ha
1685; PWR7-NEXT:    addi 3, 3, .LCPI18_0@toc@l
1686; PWR7-NEXT:    vspltish 4, 2
1687; PWR7-NEXT:    lxvw4x 0, 0, 3
1688; PWR7-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
1689; PWR7-NEXT:    vspltish 5, 4
1690; PWR7-NEXT:    addi 3, 3, .LCPI18_1@toc@l
1691; PWR7-NEXT:    vsrh 3, 2, 3
1692; PWR7-NEXT:    vspltisb 0, 15
1693; PWR7-NEXT:    vspltisb 1, 1
1694; PWR7-NEXT:    vspltish 6, 8
1695; PWR7-NEXT:    xxland 35, 35, 0
1696; PWR7-NEXT:    lxvw4x 0, 0, 3
1697; PWR7-NEXT:    vsubuhm 2, 2, 3
1698; PWR7-NEXT:    vsrh 3, 2, 4
1699; PWR7-NEXT:    xxland 34, 34, 0
1700; PWR7-NEXT:    xxland 35, 35, 0
1701; PWR7-NEXT:    vadduhm 2, 2, 3
1702; PWR7-NEXT:    vsrh 3, 2, 5
1703; PWR7-NEXT:    vadduhm 2, 2, 3
1704; PWR7-NEXT:    vxor 3, 3, 3
1705; PWR7-NEXT:    xxland 34, 34, 32
1706; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
1707; PWR7-NEXT:    vsrh 2, 2, 6
1708; PWR7-NEXT:    vcmpgtuh 2, 2, 5
1709; PWR7-NEXT:    blr
1710;
1711; PWR8-LABEL: ugt_4_v8i16:
1712; PWR8:       # %bb.0:
1713; PWR8-NEXT:    vspltish 3, 4
1714; PWR8-NEXT:    vpopcnth 2, 2
1715; PWR8-NEXT:    vcmpgtuh 2, 2, 3
1716; PWR8-NEXT:    blr
1717;
1718; PWR9-LABEL: ugt_4_v8i16:
1719; PWR9:       # %bb.0:
1720; PWR9-NEXT:    vspltish 3, 4
1721; PWR9-NEXT:    vpopcnth 2, 2
1722; PWR9-NEXT:    vcmpgtuh 2, 2, 3
1723; PWR9-NEXT:    blr
1724  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1725  %3 = icmp ugt <8 x i16> %2, <i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4, i16 4>
1726  %4 = sext <8 x i1> %3 to <8 x i16>
1727  ret <8 x i16> %4
1728}
1729
1730define <8 x i16> @ult_5_v8i16(<8 x i16> %0) {
1731; PWR5-LABEL: ult_5_v8i16:
1732; PWR5:       # %bb.0:
1733; PWR5-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
1734; PWR5-NEXT:    vspltish 4, 1
1735; PWR5-NEXT:    vxor 3, 3, 3
1736; PWR5-NEXT:    addi 3, 3, .LCPI19_0@toc@l
1737; PWR5-NEXT:    lvx 5, 0, 3
1738; PWR5-NEXT:    addis 3, 2, .LCPI19_1@toc@ha
1739; PWR5-NEXT:    addi 3, 3, .LCPI19_1@toc@l
1740; PWR5-NEXT:    vsrh 4, 2, 4
1741; PWR5-NEXT:    vand 4, 4, 5
1742; PWR5-NEXT:    vspltish 5, 2
1743; PWR5-NEXT:    vsubuhm 2, 2, 4
1744; PWR5-NEXT:    vsrh 4, 2, 5
1745; PWR5-NEXT:    lvx 5, 0, 3
1746; PWR5-NEXT:    vand 2, 2, 5
1747; PWR5-NEXT:    vand 4, 4, 5
1748; PWR5-NEXT:    vspltish 5, 4
1749; PWR5-NEXT:    vadduhm 2, 2, 4
1750; PWR5-NEXT:    vsrh 4, 2, 5
1751; PWR5-NEXT:    vspltisb 5, 15
1752; PWR5-NEXT:    vadduhm 2, 2, 4
1753; PWR5-NEXT:    vspltisb 4, 1
1754; PWR5-NEXT:    vand 2, 2, 5
1755; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
1756; PWR5-NEXT:    vspltish 3, 8
1757; PWR5-NEXT:    vsrh 2, 2, 3
1758; PWR5-NEXT:    vspltish 3, 5
1759; PWR5-NEXT:    vcmpgtuh 2, 3, 2
1760; PWR5-NEXT:    blr
1761;
1762; PWR6-LABEL: ult_5_v8i16:
1763; PWR6:       # %bb.0:
1764; PWR6-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
1765; PWR6-NEXT:    vspltish 4, 1
1766; PWR6-NEXT:    vxor 3, 3, 3
1767; PWR6-NEXT:    addi 3, 3, .LCPI19_0@toc@l
1768; PWR6-NEXT:    lvx 5, 0, 3
1769; PWR6-NEXT:    addis 3, 2, .LCPI19_1@toc@ha
1770; PWR6-NEXT:    addi 3, 3, .LCPI19_1@toc@l
1771; PWR6-NEXT:    vsrh 4, 2, 4
1772; PWR6-NEXT:    vand 4, 4, 5
1773; PWR6-NEXT:    vspltish 5, 2
1774; PWR6-NEXT:    vsubuhm 2, 2, 4
1775; PWR6-NEXT:    vsrh 4, 2, 5
1776; PWR6-NEXT:    lvx 5, 0, 3
1777; PWR6-NEXT:    vand 2, 2, 5
1778; PWR6-NEXT:    vand 4, 4, 5
1779; PWR6-NEXT:    vspltish 5, 4
1780; PWR6-NEXT:    vadduhm 2, 2, 4
1781; PWR6-NEXT:    vsrh 4, 2, 5
1782; PWR6-NEXT:    vspltisb 5, 15
1783; PWR6-NEXT:    vadduhm 2, 2, 4
1784; PWR6-NEXT:    vspltisb 4, 1
1785; PWR6-NEXT:    vand 2, 2, 5
1786; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
1787; PWR6-NEXT:    vspltish 3, 8
1788; PWR6-NEXT:    vsrh 2, 2, 3
1789; PWR6-NEXT:    vspltish 3, 5
1790; PWR6-NEXT:    vcmpgtuh 2, 3, 2
1791; PWR6-NEXT:    blr
1792;
1793; PWR7-LABEL: ult_5_v8i16:
1794; PWR7:       # %bb.0:
1795; PWR7-NEXT:    vspltish 3, 1
1796; PWR7-NEXT:    addis 3, 2, .LCPI19_0@toc@ha
1797; PWR7-NEXT:    addi 3, 3, .LCPI19_0@toc@l
1798; PWR7-NEXT:    vspltish 4, 2
1799; PWR7-NEXT:    lxvw4x 0, 0, 3
1800; PWR7-NEXT:    addis 3, 2, .LCPI19_1@toc@ha
1801; PWR7-NEXT:    vspltish 5, 4
1802; PWR7-NEXT:    addi 3, 3, .LCPI19_1@toc@l
1803; PWR7-NEXT:    vsrh 3, 2, 3
1804; PWR7-NEXT:    vspltisb 0, 15
1805; PWR7-NEXT:    vspltisb 1, 1
1806; PWR7-NEXT:    vspltish 6, 8
1807; PWR7-NEXT:    vspltish 7, 5
1808; PWR7-NEXT:    xxland 35, 35, 0
1809; PWR7-NEXT:    lxvw4x 0, 0, 3
1810; PWR7-NEXT:    vsubuhm 2, 2, 3
1811; PWR7-NEXT:    vsrh 3, 2, 4
1812; PWR7-NEXT:    xxland 34, 34, 0
1813; PWR7-NEXT:    xxland 35, 35, 0
1814; PWR7-NEXT:    vadduhm 2, 2, 3
1815; PWR7-NEXT:    vsrh 3, 2, 5
1816; PWR7-NEXT:    vadduhm 2, 2, 3
1817; PWR7-NEXT:    vxor 3, 3, 3
1818; PWR7-NEXT:    xxland 34, 34, 32
1819; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
1820; PWR7-NEXT:    vsrh 2, 2, 6
1821; PWR7-NEXT:    vcmpgtuh 2, 7, 2
1822; PWR7-NEXT:    blr
1823;
1824; PWR8-LABEL: ult_5_v8i16:
1825; PWR8:       # %bb.0:
1826; PWR8-NEXT:    vspltish 3, 5
1827; PWR8-NEXT:    vpopcnth 2, 2
1828; PWR8-NEXT:    vcmpgtuh 2, 3, 2
1829; PWR8-NEXT:    blr
1830;
1831; PWR9-LABEL: ult_5_v8i16:
1832; PWR9:       # %bb.0:
1833; PWR9-NEXT:    vspltish 3, 5
1834; PWR9-NEXT:    vpopcnth 2, 2
1835; PWR9-NEXT:    vcmpgtuh 2, 3, 2
1836; PWR9-NEXT:    blr
1837  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1838  %3 = icmp ult <8 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
1839  %4 = sext <8 x i1> %3 to <8 x i16>
1840  ret <8 x i16> %4
1841}
1842
1843define <8 x i16> @ugt_5_v8i16(<8 x i16> %0) {
1844; PWR5-LABEL: ugt_5_v8i16:
1845; PWR5:       # %bb.0:
1846; PWR5-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1847; PWR5-NEXT:    vspltish 4, 1
1848; PWR5-NEXT:    vxor 3, 3, 3
1849; PWR5-NEXT:    addi 3, 3, .LCPI20_0@toc@l
1850; PWR5-NEXT:    lvx 5, 0, 3
1851; PWR5-NEXT:    addis 3, 2, .LCPI20_1@toc@ha
1852; PWR5-NEXT:    addi 3, 3, .LCPI20_1@toc@l
1853; PWR5-NEXT:    vsrh 4, 2, 4
1854; PWR5-NEXT:    vand 4, 4, 5
1855; PWR5-NEXT:    vspltish 5, 2
1856; PWR5-NEXT:    vsubuhm 2, 2, 4
1857; PWR5-NEXT:    vsrh 4, 2, 5
1858; PWR5-NEXT:    lvx 5, 0, 3
1859; PWR5-NEXT:    vand 2, 2, 5
1860; PWR5-NEXT:    vand 4, 4, 5
1861; PWR5-NEXT:    vspltish 5, 4
1862; PWR5-NEXT:    vadduhm 2, 2, 4
1863; PWR5-NEXT:    vsrh 4, 2, 5
1864; PWR5-NEXT:    vspltisb 5, 15
1865; PWR5-NEXT:    vadduhm 2, 2, 4
1866; PWR5-NEXT:    vspltisb 4, 1
1867; PWR5-NEXT:    vand 2, 2, 5
1868; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
1869; PWR5-NEXT:    vspltish 3, 8
1870; PWR5-NEXT:    vsrh 2, 2, 3
1871; PWR5-NEXT:    vspltish 3, 5
1872; PWR5-NEXT:    vcmpgtuh 2, 2, 3
1873; PWR5-NEXT:    blr
1874;
1875; PWR6-LABEL: ugt_5_v8i16:
1876; PWR6:       # %bb.0:
1877; PWR6-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1878; PWR6-NEXT:    vspltish 4, 1
1879; PWR6-NEXT:    vxor 3, 3, 3
1880; PWR6-NEXT:    addi 3, 3, .LCPI20_0@toc@l
1881; PWR6-NEXT:    lvx 5, 0, 3
1882; PWR6-NEXT:    addis 3, 2, .LCPI20_1@toc@ha
1883; PWR6-NEXT:    addi 3, 3, .LCPI20_1@toc@l
1884; PWR6-NEXT:    vsrh 4, 2, 4
1885; PWR6-NEXT:    vand 4, 4, 5
1886; PWR6-NEXT:    vspltish 5, 2
1887; PWR6-NEXT:    vsubuhm 2, 2, 4
1888; PWR6-NEXT:    vsrh 4, 2, 5
1889; PWR6-NEXT:    lvx 5, 0, 3
1890; PWR6-NEXT:    vand 2, 2, 5
1891; PWR6-NEXT:    vand 4, 4, 5
1892; PWR6-NEXT:    vspltish 5, 4
1893; PWR6-NEXT:    vadduhm 2, 2, 4
1894; PWR6-NEXT:    vsrh 4, 2, 5
1895; PWR6-NEXT:    vspltisb 5, 15
1896; PWR6-NEXT:    vadduhm 2, 2, 4
1897; PWR6-NEXT:    vspltisb 4, 1
1898; PWR6-NEXT:    vand 2, 2, 5
1899; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
1900; PWR6-NEXT:    vspltish 3, 8
1901; PWR6-NEXT:    vsrh 2, 2, 3
1902; PWR6-NEXT:    vspltish 3, 5
1903; PWR6-NEXT:    vcmpgtuh 2, 2, 3
1904; PWR6-NEXT:    blr
1905;
1906; PWR7-LABEL: ugt_5_v8i16:
1907; PWR7:       # %bb.0:
1908; PWR7-NEXT:    vspltish 3, 1
1909; PWR7-NEXT:    addis 3, 2, .LCPI20_0@toc@ha
1910; PWR7-NEXT:    addi 3, 3, .LCPI20_0@toc@l
1911; PWR7-NEXT:    vspltish 4, 2
1912; PWR7-NEXT:    lxvw4x 0, 0, 3
1913; PWR7-NEXT:    addis 3, 2, .LCPI20_1@toc@ha
1914; PWR7-NEXT:    vspltish 5, 4
1915; PWR7-NEXT:    addi 3, 3, .LCPI20_1@toc@l
1916; PWR7-NEXT:    vsrh 3, 2, 3
1917; PWR7-NEXT:    vspltisb 0, 15
1918; PWR7-NEXT:    vspltisb 1, 1
1919; PWR7-NEXT:    vspltish 6, 8
1920; PWR7-NEXT:    vspltish 7, 5
1921; PWR7-NEXT:    xxland 35, 35, 0
1922; PWR7-NEXT:    lxvw4x 0, 0, 3
1923; PWR7-NEXT:    vsubuhm 2, 2, 3
1924; PWR7-NEXT:    vsrh 3, 2, 4
1925; PWR7-NEXT:    xxland 34, 34, 0
1926; PWR7-NEXT:    xxland 35, 35, 0
1927; PWR7-NEXT:    vadduhm 2, 2, 3
1928; PWR7-NEXT:    vsrh 3, 2, 5
1929; PWR7-NEXT:    vadduhm 2, 2, 3
1930; PWR7-NEXT:    vxor 3, 3, 3
1931; PWR7-NEXT:    xxland 34, 34, 32
1932; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
1933; PWR7-NEXT:    vsrh 2, 2, 6
1934; PWR7-NEXT:    vcmpgtuh 2, 2, 7
1935; PWR7-NEXT:    blr
1936;
1937; PWR8-LABEL: ugt_5_v8i16:
1938; PWR8:       # %bb.0:
1939; PWR8-NEXT:    vspltish 3, 5
1940; PWR8-NEXT:    vpopcnth 2, 2
1941; PWR8-NEXT:    vcmpgtuh 2, 2, 3
1942; PWR8-NEXT:    blr
1943;
1944; PWR9-LABEL: ugt_5_v8i16:
1945; PWR9:       # %bb.0:
1946; PWR9-NEXT:    vspltish 3, 5
1947; PWR9-NEXT:    vpopcnth 2, 2
1948; PWR9-NEXT:    vcmpgtuh 2, 2, 3
1949; PWR9-NEXT:    blr
1950  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
1951  %3 = icmp ugt <8 x i16> %2, <i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5, i16 5>
1952  %4 = sext <8 x i1> %3 to <8 x i16>
1953  ret <8 x i16> %4
1954}
1955
1956define <8 x i16> @ult_6_v8i16(<8 x i16> %0) {
1957; PWR5-LABEL: ult_6_v8i16:
1958; PWR5:       # %bb.0:
1959; PWR5-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
1960; PWR5-NEXT:    vspltish 4, 1
1961; PWR5-NEXT:    vxor 3, 3, 3
1962; PWR5-NEXT:    addi 3, 3, .LCPI21_0@toc@l
1963; PWR5-NEXT:    lvx 5, 0, 3
1964; PWR5-NEXT:    addis 3, 2, .LCPI21_1@toc@ha
1965; PWR5-NEXT:    addi 3, 3, .LCPI21_1@toc@l
1966; PWR5-NEXT:    vsrh 4, 2, 4
1967; PWR5-NEXT:    vand 4, 4, 5
1968; PWR5-NEXT:    vspltish 5, 2
1969; PWR5-NEXT:    vsubuhm 2, 2, 4
1970; PWR5-NEXT:    vsrh 4, 2, 5
1971; PWR5-NEXT:    lvx 5, 0, 3
1972; PWR5-NEXT:    vand 2, 2, 5
1973; PWR5-NEXT:    vand 4, 4, 5
1974; PWR5-NEXT:    vspltish 5, 4
1975; PWR5-NEXT:    vadduhm 2, 2, 4
1976; PWR5-NEXT:    vsrh 4, 2, 5
1977; PWR5-NEXT:    vspltisb 5, 15
1978; PWR5-NEXT:    vadduhm 2, 2, 4
1979; PWR5-NEXT:    vspltisb 4, 1
1980; PWR5-NEXT:    vand 2, 2, 5
1981; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
1982; PWR5-NEXT:    vspltish 3, 8
1983; PWR5-NEXT:    vsrh 2, 2, 3
1984; PWR5-NEXT:    vspltish 3, 6
1985; PWR5-NEXT:    vcmpgtuh 2, 3, 2
1986; PWR5-NEXT:    blr
1987;
1988; PWR6-LABEL: ult_6_v8i16:
1989; PWR6:       # %bb.0:
1990; PWR6-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
1991; PWR6-NEXT:    vspltish 4, 1
1992; PWR6-NEXT:    vxor 3, 3, 3
1993; PWR6-NEXT:    addi 3, 3, .LCPI21_0@toc@l
1994; PWR6-NEXT:    lvx 5, 0, 3
1995; PWR6-NEXT:    addis 3, 2, .LCPI21_1@toc@ha
1996; PWR6-NEXT:    addi 3, 3, .LCPI21_1@toc@l
1997; PWR6-NEXT:    vsrh 4, 2, 4
1998; PWR6-NEXT:    vand 4, 4, 5
1999; PWR6-NEXT:    vspltish 5, 2
2000; PWR6-NEXT:    vsubuhm 2, 2, 4
2001; PWR6-NEXT:    vsrh 4, 2, 5
2002; PWR6-NEXT:    lvx 5, 0, 3
2003; PWR6-NEXT:    vand 2, 2, 5
2004; PWR6-NEXT:    vand 4, 4, 5
2005; PWR6-NEXT:    vspltish 5, 4
2006; PWR6-NEXT:    vadduhm 2, 2, 4
2007; PWR6-NEXT:    vsrh 4, 2, 5
2008; PWR6-NEXT:    vspltisb 5, 15
2009; PWR6-NEXT:    vadduhm 2, 2, 4
2010; PWR6-NEXT:    vspltisb 4, 1
2011; PWR6-NEXT:    vand 2, 2, 5
2012; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2013; PWR6-NEXT:    vspltish 3, 8
2014; PWR6-NEXT:    vsrh 2, 2, 3
2015; PWR6-NEXT:    vspltish 3, 6
2016; PWR6-NEXT:    vcmpgtuh 2, 3, 2
2017; PWR6-NEXT:    blr
2018;
2019; PWR7-LABEL: ult_6_v8i16:
2020; PWR7:       # %bb.0:
2021; PWR7-NEXT:    vspltish 3, 1
2022; PWR7-NEXT:    addis 3, 2, .LCPI21_0@toc@ha
2023; PWR7-NEXT:    addi 3, 3, .LCPI21_0@toc@l
2024; PWR7-NEXT:    vspltish 4, 2
2025; PWR7-NEXT:    lxvw4x 0, 0, 3
2026; PWR7-NEXT:    addis 3, 2, .LCPI21_1@toc@ha
2027; PWR7-NEXT:    vspltish 5, 4
2028; PWR7-NEXT:    addi 3, 3, .LCPI21_1@toc@l
2029; PWR7-NEXT:    vsrh 3, 2, 3
2030; PWR7-NEXT:    vspltisb 0, 15
2031; PWR7-NEXT:    vspltisb 1, 1
2032; PWR7-NEXT:    vspltish 6, 8
2033; PWR7-NEXT:    vspltish 7, 6
2034; PWR7-NEXT:    xxland 35, 35, 0
2035; PWR7-NEXT:    lxvw4x 0, 0, 3
2036; PWR7-NEXT:    vsubuhm 2, 2, 3
2037; PWR7-NEXT:    vsrh 3, 2, 4
2038; PWR7-NEXT:    xxland 34, 34, 0
2039; PWR7-NEXT:    xxland 35, 35, 0
2040; PWR7-NEXT:    vadduhm 2, 2, 3
2041; PWR7-NEXT:    vsrh 3, 2, 5
2042; PWR7-NEXT:    vadduhm 2, 2, 3
2043; PWR7-NEXT:    vxor 3, 3, 3
2044; PWR7-NEXT:    xxland 34, 34, 32
2045; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2046; PWR7-NEXT:    vsrh 2, 2, 6
2047; PWR7-NEXT:    vcmpgtuh 2, 7, 2
2048; PWR7-NEXT:    blr
2049;
2050; PWR8-LABEL: ult_6_v8i16:
2051; PWR8:       # %bb.0:
2052; PWR8-NEXT:    vspltish 3, 6
2053; PWR8-NEXT:    vpopcnth 2, 2
2054; PWR8-NEXT:    vcmpgtuh 2, 3, 2
2055; PWR8-NEXT:    blr
2056;
2057; PWR9-LABEL: ult_6_v8i16:
2058; PWR9:       # %bb.0:
2059; PWR9-NEXT:    vspltish 3, 6
2060; PWR9-NEXT:    vpopcnth 2, 2
2061; PWR9-NEXT:    vcmpgtuh 2, 3, 2
2062; PWR9-NEXT:    blr
2063  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2064  %3 = icmp ult <8 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
2065  %4 = sext <8 x i1> %3 to <8 x i16>
2066  ret <8 x i16> %4
2067}
2068
2069define <8 x i16> @ugt_6_v8i16(<8 x i16> %0) {
2070; PWR5-LABEL: ugt_6_v8i16:
2071; PWR5:       # %bb.0:
2072; PWR5-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
2073; PWR5-NEXT:    vspltish 4, 1
2074; PWR5-NEXT:    vxor 3, 3, 3
2075; PWR5-NEXT:    addi 3, 3, .LCPI22_0@toc@l
2076; PWR5-NEXT:    lvx 5, 0, 3
2077; PWR5-NEXT:    addis 3, 2, .LCPI22_1@toc@ha
2078; PWR5-NEXT:    addi 3, 3, .LCPI22_1@toc@l
2079; PWR5-NEXT:    vsrh 4, 2, 4
2080; PWR5-NEXT:    vand 4, 4, 5
2081; PWR5-NEXT:    vspltish 5, 2
2082; PWR5-NEXT:    vsubuhm 2, 2, 4
2083; PWR5-NEXT:    vsrh 4, 2, 5
2084; PWR5-NEXT:    lvx 5, 0, 3
2085; PWR5-NEXT:    vand 2, 2, 5
2086; PWR5-NEXT:    vand 4, 4, 5
2087; PWR5-NEXT:    vspltish 5, 4
2088; PWR5-NEXT:    vadduhm 2, 2, 4
2089; PWR5-NEXT:    vsrh 4, 2, 5
2090; PWR5-NEXT:    vspltisb 5, 15
2091; PWR5-NEXT:    vadduhm 2, 2, 4
2092; PWR5-NEXT:    vspltisb 4, 1
2093; PWR5-NEXT:    vand 2, 2, 5
2094; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2095; PWR5-NEXT:    vspltish 3, 8
2096; PWR5-NEXT:    vsrh 2, 2, 3
2097; PWR5-NEXT:    vspltish 3, 6
2098; PWR5-NEXT:    vcmpgtuh 2, 2, 3
2099; PWR5-NEXT:    blr
2100;
2101; PWR6-LABEL: ugt_6_v8i16:
2102; PWR6:       # %bb.0:
2103; PWR6-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
2104; PWR6-NEXT:    vspltish 4, 1
2105; PWR6-NEXT:    vxor 3, 3, 3
2106; PWR6-NEXT:    addi 3, 3, .LCPI22_0@toc@l
2107; PWR6-NEXT:    lvx 5, 0, 3
2108; PWR6-NEXT:    addis 3, 2, .LCPI22_1@toc@ha
2109; PWR6-NEXT:    addi 3, 3, .LCPI22_1@toc@l
2110; PWR6-NEXT:    vsrh 4, 2, 4
2111; PWR6-NEXT:    vand 4, 4, 5
2112; PWR6-NEXT:    vspltish 5, 2
2113; PWR6-NEXT:    vsubuhm 2, 2, 4
2114; PWR6-NEXT:    vsrh 4, 2, 5
2115; PWR6-NEXT:    lvx 5, 0, 3
2116; PWR6-NEXT:    vand 2, 2, 5
2117; PWR6-NEXT:    vand 4, 4, 5
2118; PWR6-NEXT:    vspltish 5, 4
2119; PWR6-NEXT:    vadduhm 2, 2, 4
2120; PWR6-NEXT:    vsrh 4, 2, 5
2121; PWR6-NEXT:    vspltisb 5, 15
2122; PWR6-NEXT:    vadduhm 2, 2, 4
2123; PWR6-NEXT:    vspltisb 4, 1
2124; PWR6-NEXT:    vand 2, 2, 5
2125; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2126; PWR6-NEXT:    vspltish 3, 8
2127; PWR6-NEXT:    vsrh 2, 2, 3
2128; PWR6-NEXT:    vspltish 3, 6
2129; PWR6-NEXT:    vcmpgtuh 2, 2, 3
2130; PWR6-NEXT:    blr
2131;
2132; PWR7-LABEL: ugt_6_v8i16:
2133; PWR7:       # %bb.0:
2134; PWR7-NEXT:    vspltish 3, 1
2135; PWR7-NEXT:    addis 3, 2, .LCPI22_0@toc@ha
2136; PWR7-NEXT:    addi 3, 3, .LCPI22_0@toc@l
2137; PWR7-NEXT:    vspltish 4, 2
2138; PWR7-NEXT:    lxvw4x 0, 0, 3
2139; PWR7-NEXT:    addis 3, 2, .LCPI22_1@toc@ha
2140; PWR7-NEXT:    vspltish 5, 4
2141; PWR7-NEXT:    addi 3, 3, .LCPI22_1@toc@l
2142; PWR7-NEXT:    vsrh 3, 2, 3
2143; PWR7-NEXT:    vspltisb 0, 15
2144; PWR7-NEXT:    vspltisb 1, 1
2145; PWR7-NEXT:    vspltish 6, 8
2146; PWR7-NEXT:    vspltish 7, 6
2147; PWR7-NEXT:    xxland 35, 35, 0
2148; PWR7-NEXT:    lxvw4x 0, 0, 3
2149; PWR7-NEXT:    vsubuhm 2, 2, 3
2150; PWR7-NEXT:    vsrh 3, 2, 4
2151; PWR7-NEXT:    xxland 34, 34, 0
2152; PWR7-NEXT:    xxland 35, 35, 0
2153; PWR7-NEXT:    vadduhm 2, 2, 3
2154; PWR7-NEXT:    vsrh 3, 2, 5
2155; PWR7-NEXT:    vadduhm 2, 2, 3
2156; PWR7-NEXT:    vxor 3, 3, 3
2157; PWR7-NEXT:    xxland 34, 34, 32
2158; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2159; PWR7-NEXT:    vsrh 2, 2, 6
2160; PWR7-NEXT:    vcmpgtuh 2, 2, 7
2161; PWR7-NEXT:    blr
2162;
2163; PWR8-LABEL: ugt_6_v8i16:
2164; PWR8:       # %bb.0:
2165; PWR8-NEXT:    vspltish 3, 6
2166; PWR8-NEXT:    vpopcnth 2, 2
2167; PWR8-NEXT:    vcmpgtuh 2, 2, 3
2168; PWR8-NEXT:    blr
2169;
2170; PWR9-LABEL: ugt_6_v8i16:
2171; PWR9:       # %bb.0:
2172; PWR9-NEXT:    vspltish 3, 6
2173; PWR9-NEXT:    vpopcnth 2, 2
2174; PWR9-NEXT:    vcmpgtuh 2, 2, 3
2175; PWR9-NEXT:    blr
2176  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2177  %3 = icmp ugt <8 x i16> %2, <i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6, i16 6>
2178  %4 = sext <8 x i1> %3 to <8 x i16>
2179  ret <8 x i16> %4
2180}
2181
2182define <8 x i16> @ult_7_v8i16(<8 x i16> %0) {
2183; PWR5-LABEL: ult_7_v8i16:
2184; PWR5:       # %bb.0:
2185; PWR5-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
2186; PWR5-NEXT:    vspltish 4, 1
2187; PWR5-NEXT:    vxor 3, 3, 3
2188; PWR5-NEXT:    addi 3, 3, .LCPI23_0@toc@l
2189; PWR5-NEXT:    lvx 5, 0, 3
2190; PWR5-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
2191; PWR5-NEXT:    addi 3, 3, .LCPI23_1@toc@l
2192; PWR5-NEXT:    vsrh 4, 2, 4
2193; PWR5-NEXT:    vand 4, 4, 5
2194; PWR5-NEXT:    vspltish 5, 2
2195; PWR5-NEXT:    vsubuhm 2, 2, 4
2196; PWR5-NEXT:    vsrh 4, 2, 5
2197; PWR5-NEXT:    lvx 5, 0, 3
2198; PWR5-NEXT:    vand 2, 2, 5
2199; PWR5-NEXT:    vand 4, 4, 5
2200; PWR5-NEXT:    vspltish 5, 4
2201; PWR5-NEXT:    vadduhm 2, 2, 4
2202; PWR5-NEXT:    vsrh 4, 2, 5
2203; PWR5-NEXT:    vspltisb 5, 15
2204; PWR5-NEXT:    vadduhm 2, 2, 4
2205; PWR5-NEXT:    vspltisb 4, 1
2206; PWR5-NEXT:    vand 2, 2, 5
2207; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2208; PWR5-NEXT:    vspltish 3, 8
2209; PWR5-NEXT:    vsrh 2, 2, 3
2210; PWR5-NEXT:    vspltish 3, 7
2211; PWR5-NEXT:    vcmpgtuh 2, 3, 2
2212; PWR5-NEXT:    blr
2213;
2214; PWR6-LABEL: ult_7_v8i16:
2215; PWR6:       # %bb.0:
2216; PWR6-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
2217; PWR6-NEXT:    vspltish 4, 1
2218; PWR6-NEXT:    vxor 3, 3, 3
2219; PWR6-NEXT:    addi 3, 3, .LCPI23_0@toc@l
2220; PWR6-NEXT:    lvx 5, 0, 3
2221; PWR6-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
2222; PWR6-NEXT:    addi 3, 3, .LCPI23_1@toc@l
2223; PWR6-NEXT:    vsrh 4, 2, 4
2224; PWR6-NEXT:    vand 4, 4, 5
2225; PWR6-NEXT:    vspltish 5, 2
2226; PWR6-NEXT:    vsubuhm 2, 2, 4
2227; PWR6-NEXT:    vsrh 4, 2, 5
2228; PWR6-NEXT:    lvx 5, 0, 3
2229; PWR6-NEXT:    vand 2, 2, 5
2230; PWR6-NEXT:    vand 4, 4, 5
2231; PWR6-NEXT:    vspltish 5, 4
2232; PWR6-NEXT:    vadduhm 2, 2, 4
2233; PWR6-NEXT:    vsrh 4, 2, 5
2234; PWR6-NEXT:    vspltisb 5, 15
2235; PWR6-NEXT:    vadduhm 2, 2, 4
2236; PWR6-NEXT:    vspltisb 4, 1
2237; PWR6-NEXT:    vand 2, 2, 5
2238; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2239; PWR6-NEXT:    vspltish 3, 8
2240; PWR6-NEXT:    vsrh 2, 2, 3
2241; PWR6-NEXT:    vspltish 3, 7
2242; PWR6-NEXT:    vcmpgtuh 2, 3, 2
2243; PWR6-NEXT:    blr
2244;
2245; PWR7-LABEL: ult_7_v8i16:
2246; PWR7:       # %bb.0:
2247; PWR7-NEXT:    vspltish 3, 1
2248; PWR7-NEXT:    addis 3, 2, .LCPI23_0@toc@ha
2249; PWR7-NEXT:    addi 3, 3, .LCPI23_0@toc@l
2250; PWR7-NEXT:    vspltish 4, 2
2251; PWR7-NEXT:    lxvw4x 0, 0, 3
2252; PWR7-NEXT:    addis 3, 2, .LCPI23_1@toc@ha
2253; PWR7-NEXT:    vspltish 5, 4
2254; PWR7-NEXT:    addi 3, 3, .LCPI23_1@toc@l
2255; PWR7-NEXT:    vsrh 3, 2, 3
2256; PWR7-NEXT:    vspltisb 0, 15
2257; PWR7-NEXT:    vspltisb 1, 1
2258; PWR7-NEXT:    vspltish 6, 8
2259; PWR7-NEXT:    vspltish 7, 7
2260; PWR7-NEXT:    xxland 35, 35, 0
2261; PWR7-NEXT:    lxvw4x 0, 0, 3
2262; PWR7-NEXT:    vsubuhm 2, 2, 3
2263; PWR7-NEXT:    vsrh 3, 2, 4
2264; PWR7-NEXT:    xxland 34, 34, 0
2265; PWR7-NEXT:    xxland 35, 35, 0
2266; PWR7-NEXT:    vadduhm 2, 2, 3
2267; PWR7-NEXT:    vsrh 3, 2, 5
2268; PWR7-NEXT:    vadduhm 2, 2, 3
2269; PWR7-NEXT:    vxor 3, 3, 3
2270; PWR7-NEXT:    xxland 34, 34, 32
2271; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2272; PWR7-NEXT:    vsrh 2, 2, 6
2273; PWR7-NEXT:    vcmpgtuh 2, 7, 2
2274; PWR7-NEXT:    blr
2275;
2276; PWR8-LABEL: ult_7_v8i16:
2277; PWR8:       # %bb.0:
2278; PWR8-NEXT:    vspltish 3, 7
2279; PWR8-NEXT:    vpopcnth 2, 2
2280; PWR8-NEXT:    vcmpgtuh 2, 3, 2
2281; PWR8-NEXT:    blr
2282;
2283; PWR9-LABEL: ult_7_v8i16:
2284; PWR9:       # %bb.0:
2285; PWR9-NEXT:    vspltish 3, 7
2286; PWR9-NEXT:    vpopcnth 2, 2
2287; PWR9-NEXT:    vcmpgtuh 2, 3, 2
2288; PWR9-NEXT:    blr
2289  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2290  %3 = icmp ult <8 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
2291  %4 = sext <8 x i1> %3 to <8 x i16>
2292  ret <8 x i16> %4
2293}
2294
2295define <8 x i16> @ugt_7_v8i16(<8 x i16> %0) {
2296; PWR5-LABEL: ugt_7_v8i16:
2297; PWR5:       # %bb.0:
2298; PWR5-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
2299; PWR5-NEXT:    vspltish 4, 1
2300; PWR5-NEXT:    vxor 3, 3, 3
2301; PWR5-NEXT:    addi 3, 3, .LCPI24_0@toc@l
2302; PWR5-NEXT:    lvx 5, 0, 3
2303; PWR5-NEXT:    addis 3, 2, .LCPI24_1@toc@ha
2304; PWR5-NEXT:    addi 3, 3, .LCPI24_1@toc@l
2305; PWR5-NEXT:    vsrh 4, 2, 4
2306; PWR5-NEXT:    vand 4, 4, 5
2307; PWR5-NEXT:    vspltish 5, 2
2308; PWR5-NEXT:    vsubuhm 2, 2, 4
2309; PWR5-NEXT:    vsrh 4, 2, 5
2310; PWR5-NEXT:    lvx 5, 0, 3
2311; PWR5-NEXT:    vand 2, 2, 5
2312; PWR5-NEXT:    vand 4, 4, 5
2313; PWR5-NEXT:    vspltish 5, 4
2314; PWR5-NEXT:    vadduhm 2, 2, 4
2315; PWR5-NEXT:    vsrh 4, 2, 5
2316; PWR5-NEXT:    vspltisb 5, 15
2317; PWR5-NEXT:    vadduhm 2, 2, 4
2318; PWR5-NEXT:    vspltisb 4, 1
2319; PWR5-NEXT:    vand 2, 2, 5
2320; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2321; PWR5-NEXT:    vspltish 3, 8
2322; PWR5-NEXT:    vsrh 2, 2, 3
2323; PWR5-NEXT:    vspltish 3, 7
2324; PWR5-NEXT:    vcmpgtuh 2, 2, 3
2325; PWR5-NEXT:    blr
2326;
2327; PWR6-LABEL: ugt_7_v8i16:
2328; PWR6:       # %bb.0:
2329; PWR6-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
2330; PWR6-NEXT:    vspltish 4, 1
2331; PWR6-NEXT:    vxor 3, 3, 3
2332; PWR6-NEXT:    addi 3, 3, .LCPI24_0@toc@l
2333; PWR6-NEXT:    lvx 5, 0, 3
2334; PWR6-NEXT:    addis 3, 2, .LCPI24_1@toc@ha
2335; PWR6-NEXT:    addi 3, 3, .LCPI24_1@toc@l
2336; PWR6-NEXT:    vsrh 4, 2, 4
2337; PWR6-NEXT:    vand 4, 4, 5
2338; PWR6-NEXT:    vspltish 5, 2
2339; PWR6-NEXT:    vsubuhm 2, 2, 4
2340; PWR6-NEXT:    vsrh 4, 2, 5
2341; PWR6-NEXT:    lvx 5, 0, 3
2342; PWR6-NEXT:    vand 2, 2, 5
2343; PWR6-NEXT:    vand 4, 4, 5
2344; PWR6-NEXT:    vspltish 5, 4
2345; PWR6-NEXT:    vadduhm 2, 2, 4
2346; PWR6-NEXT:    vsrh 4, 2, 5
2347; PWR6-NEXT:    vspltisb 5, 15
2348; PWR6-NEXT:    vadduhm 2, 2, 4
2349; PWR6-NEXT:    vspltisb 4, 1
2350; PWR6-NEXT:    vand 2, 2, 5
2351; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2352; PWR6-NEXT:    vspltish 3, 8
2353; PWR6-NEXT:    vsrh 2, 2, 3
2354; PWR6-NEXT:    vspltish 3, 7
2355; PWR6-NEXT:    vcmpgtuh 2, 2, 3
2356; PWR6-NEXT:    blr
2357;
2358; PWR7-LABEL: ugt_7_v8i16:
2359; PWR7:       # %bb.0:
2360; PWR7-NEXT:    vspltish 3, 1
2361; PWR7-NEXT:    addis 3, 2, .LCPI24_0@toc@ha
2362; PWR7-NEXT:    addi 3, 3, .LCPI24_0@toc@l
2363; PWR7-NEXT:    vspltish 4, 2
2364; PWR7-NEXT:    lxvw4x 0, 0, 3
2365; PWR7-NEXT:    addis 3, 2, .LCPI24_1@toc@ha
2366; PWR7-NEXT:    vspltish 5, 4
2367; PWR7-NEXT:    addi 3, 3, .LCPI24_1@toc@l
2368; PWR7-NEXT:    vsrh 3, 2, 3
2369; PWR7-NEXT:    vspltisb 0, 15
2370; PWR7-NEXT:    vspltisb 1, 1
2371; PWR7-NEXT:    vspltish 6, 8
2372; PWR7-NEXT:    vspltish 7, 7
2373; PWR7-NEXT:    xxland 35, 35, 0
2374; PWR7-NEXT:    lxvw4x 0, 0, 3
2375; PWR7-NEXT:    vsubuhm 2, 2, 3
2376; PWR7-NEXT:    vsrh 3, 2, 4
2377; PWR7-NEXT:    xxland 34, 34, 0
2378; PWR7-NEXT:    xxland 35, 35, 0
2379; PWR7-NEXT:    vadduhm 2, 2, 3
2380; PWR7-NEXT:    vsrh 3, 2, 5
2381; PWR7-NEXT:    vadduhm 2, 2, 3
2382; PWR7-NEXT:    vxor 3, 3, 3
2383; PWR7-NEXT:    xxland 34, 34, 32
2384; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2385; PWR7-NEXT:    vsrh 2, 2, 6
2386; PWR7-NEXT:    vcmpgtuh 2, 2, 7
2387; PWR7-NEXT:    blr
2388;
2389; PWR8-LABEL: ugt_7_v8i16:
2390; PWR8:       # %bb.0:
2391; PWR8-NEXT:    vspltish 3, 7
2392; PWR8-NEXT:    vpopcnth 2, 2
2393; PWR8-NEXT:    vcmpgtuh 2, 2, 3
2394; PWR8-NEXT:    blr
2395;
2396; PWR9-LABEL: ugt_7_v8i16:
2397; PWR9:       # %bb.0:
2398; PWR9-NEXT:    vspltish 3, 7
2399; PWR9-NEXT:    vpopcnth 2, 2
2400; PWR9-NEXT:    vcmpgtuh 2, 2, 3
2401; PWR9-NEXT:    blr
2402  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2403  %3 = icmp ugt <8 x i16> %2, <i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7, i16 7>
2404  %4 = sext <8 x i1> %3 to <8 x i16>
2405  ret <8 x i16> %4
2406}
2407
2408define <8 x i16> @ult_8_v8i16(<8 x i16> %0) {
2409; PWR5-LABEL: ult_8_v8i16:
2410; PWR5:       # %bb.0:
2411; PWR5-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
2412; PWR5-NEXT:    vspltish 4, 1
2413; PWR5-NEXT:    vxor 3, 3, 3
2414; PWR5-NEXT:    addi 3, 3, .LCPI25_0@toc@l
2415; PWR5-NEXT:    lvx 5, 0, 3
2416; PWR5-NEXT:    addis 3, 2, .LCPI25_1@toc@ha
2417; PWR5-NEXT:    addi 3, 3, .LCPI25_1@toc@l
2418; PWR5-NEXT:    vsrh 4, 2, 4
2419; PWR5-NEXT:    vand 4, 4, 5
2420; PWR5-NEXT:    vspltish 5, 2
2421; PWR5-NEXT:    vsubuhm 2, 2, 4
2422; PWR5-NEXT:    vsrh 4, 2, 5
2423; PWR5-NEXT:    lvx 5, 0, 3
2424; PWR5-NEXT:    vand 2, 2, 5
2425; PWR5-NEXT:    vand 4, 4, 5
2426; PWR5-NEXT:    vspltish 5, 4
2427; PWR5-NEXT:    vadduhm 2, 2, 4
2428; PWR5-NEXT:    vsrh 4, 2, 5
2429; PWR5-NEXT:    vspltisb 5, 15
2430; PWR5-NEXT:    vadduhm 2, 2, 4
2431; PWR5-NEXT:    vspltisb 4, 1
2432; PWR5-NEXT:    vand 2, 2, 5
2433; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2434; PWR5-NEXT:    vspltish 3, 8
2435; PWR5-NEXT:    vsrh 2, 2, 3
2436; PWR5-NEXT:    vcmpgtuh 2, 3, 2
2437; PWR5-NEXT:    blr
2438;
2439; PWR6-LABEL: ult_8_v8i16:
2440; PWR6:       # %bb.0:
2441; PWR6-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
2442; PWR6-NEXT:    vspltish 4, 1
2443; PWR6-NEXT:    vxor 3, 3, 3
2444; PWR6-NEXT:    addi 3, 3, .LCPI25_0@toc@l
2445; PWR6-NEXT:    lvx 5, 0, 3
2446; PWR6-NEXT:    addis 3, 2, .LCPI25_1@toc@ha
2447; PWR6-NEXT:    addi 3, 3, .LCPI25_1@toc@l
2448; PWR6-NEXT:    vsrh 4, 2, 4
2449; PWR6-NEXT:    vand 4, 4, 5
2450; PWR6-NEXT:    vspltish 5, 2
2451; PWR6-NEXT:    vsubuhm 2, 2, 4
2452; PWR6-NEXT:    vsrh 4, 2, 5
2453; PWR6-NEXT:    lvx 5, 0, 3
2454; PWR6-NEXT:    vand 2, 2, 5
2455; PWR6-NEXT:    vand 4, 4, 5
2456; PWR6-NEXT:    vspltish 5, 4
2457; PWR6-NEXT:    vadduhm 2, 2, 4
2458; PWR6-NEXT:    vsrh 4, 2, 5
2459; PWR6-NEXT:    vspltisb 5, 15
2460; PWR6-NEXT:    vadduhm 2, 2, 4
2461; PWR6-NEXT:    vspltisb 4, 1
2462; PWR6-NEXT:    vand 2, 2, 5
2463; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2464; PWR6-NEXT:    vspltish 3, 8
2465; PWR6-NEXT:    vsrh 2, 2, 3
2466; PWR6-NEXT:    vcmpgtuh 2, 3, 2
2467; PWR6-NEXT:    blr
2468;
2469; PWR7-LABEL: ult_8_v8i16:
2470; PWR7:       # %bb.0:
2471; PWR7-NEXT:    vspltish 3, 1
2472; PWR7-NEXT:    addis 3, 2, .LCPI25_0@toc@ha
2473; PWR7-NEXT:    addi 3, 3, .LCPI25_0@toc@l
2474; PWR7-NEXT:    vspltish 4, 2
2475; PWR7-NEXT:    lxvw4x 0, 0, 3
2476; PWR7-NEXT:    addis 3, 2, .LCPI25_1@toc@ha
2477; PWR7-NEXT:    vspltish 5, 4
2478; PWR7-NEXT:    addi 3, 3, .LCPI25_1@toc@l
2479; PWR7-NEXT:    vsrh 3, 2, 3
2480; PWR7-NEXT:    vspltisb 0, 15
2481; PWR7-NEXT:    vspltisb 1, 1
2482; PWR7-NEXT:    vspltish 6, 8
2483; PWR7-NEXT:    xxland 35, 35, 0
2484; PWR7-NEXT:    lxvw4x 0, 0, 3
2485; PWR7-NEXT:    vsubuhm 2, 2, 3
2486; PWR7-NEXT:    vsrh 3, 2, 4
2487; PWR7-NEXT:    xxland 34, 34, 0
2488; PWR7-NEXT:    xxland 35, 35, 0
2489; PWR7-NEXT:    vadduhm 2, 2, 3
2490; PWR7-NEXT:    vsrh 3, 2, 5
2491; PWR7-NEXT:    vadduhm 2, 2, 3
2492; PWR7-NEXT:    vxor 3, 3, 3
2493; PWR7-NEXT:    xxland 34, 34, 32
2494; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2495; PWR7-NEXT:    vsrh 2, 2, 6
2496; PWR7-NEXT:    vcmpgtuh 2, 6, 2
2497; PWR7-NEXT:    blr
2498;
2499; PWR8-LABEL: ult_8_v8i16:
2500; PWR8:       # %bb.0:
2501; PWR8-NEXT:    vspltish 3, 8
2502; PWR8-NEXT:    vpopcnth 2, 2
2503; PWR8-NEXT:    vcmpgtuh 2, 3, 2
2504; PWR8-NEXT:    blr
2505;
2506; PWR9-LABEL: ult_8_v8i16:
2507; PWR9:       # %bb.0:
2508; PWR9-NEXT:    vspltish 3, 8
2509; PWR9-NEXT:    vpopcnth 2, 2
2510; PWR9-NEXT:    vcmpgtuh 2, 3, 2
2511; PWR9-NEXT:    blr
2512  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2513  %3 = icmp ult <8 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2514  %4 = sext <8 x i1> %3 to <8 x i16>
2515  ret <8 x i16> %4
2516}
2517
2518define <8 x i16> @ugt_8_v8i16(<8 x i16> %0) {
2519; PWR5-LABEL: ugt_8_v8i16:
2520; PWR5:       # %bb.0:
2521; PWR5-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
2522; PWR5-NEXT:    vspltish 4, 1
2523; PWR5-NEXT:    vxor 3, 3, 3
2524; PWR5-NEXT:    addi 3, 3, .LCPI26_0@toc@l
2525; PWR5-NEXT:    lvx 5, 0, 3
2526; PWR5-NEXT:    addis 3, 2, .LCPI26_1@toc@ha
2527; PWR5-NEXT:    addi 3, 3, .LCPI26_1@toc@l
2528; PWR5-NEXT:    vsrh 4, 2, 4
2529; PWR5-NEXT:    vand 4, 4, 5
2530; PWR5-NEXT:    vspltish 5, 2
2531; PWR5-NEXT:    vsubuhm 2, 2, 4
2532; PWR5-NEXT:    vsrh 4, 2, 5
2533; PWR5-NEXT:    lvx 5, 0, 3
2534; PWR5-NEXT:    vand 2, 2, 5
2535; PWR5-NEXT:    vand 4, 4, 5
2536; PWR5-NEXT:    vspltish 5, 4
2537; PWR5-NEXT:    vadduhm 2, 2, 4
2538; PWR5-NEXT:    vsrh 4, 2, 5
2539; PWR5-NEXT:    vspltisb 5, 15
2540; PWR5-NEXT:    vadduhm 2, 2, 4
2541; PWR5-NEXT:    vspltisb 4, 1
2542; PWR5-NEXT:    vand 2, 2, 5
2543; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2544; PWR5-NEXT:    vspltish 3, 8
2545; PWR5-NEXT:    vsrh 2, 2, 3
2546; PWR5-NEXT:    vcmpgtuh 2, 2, 3
2547; PWR5-NEXT:    blr
2548;
2549; PWR6-LABEL: ugt_8_v8i16:
2550; PWR6:       # %bb.0:
2551; PWR6-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
2552; PWR6-NEXT:    vspltish 4, 1
2553; PWR6-NEXT:    vxor 3, 3, 3
2554; PWR6-NEXT:    addi 3, 3, .LCPI26_0@toc@l
2555; PWR6-NEXT:    lvx 5, 0, 3
2556; PWR6-NEXT:    addis 3, 2, .LCPI26_1@toc@ha
2557; PWR6-NEXT:    addi 3, 3, .LCPI26_1@toc@l
2558; PWR6-NEXT:    vsrh 4, 2, 4
2559; PWR6-NEXT:    vand 4, 4, 5
2560; PWR6-NEXT:    vspltish 5, 2
2561; PWR6-NEXT:    vsubuhm 2, 2, 4
2562; PWR6-NEXT:    vsrh 4, 2, 5
2563; PWR6-NEXT:    lvx 5, 0, 3
2564; PWR6-NEXT:    vand 2, 2, 5
2565; PWR6-NEXT:    vand 4, 4, 5
2566; PWR6-NEXT:    vspltish 5, 4
2567; PWR6-NEXT:    vadduhm 2, 2, 4
2568; PWR6-NEXT:    vsrh 4, 2, 5
2569; PWR6-NEXT:    vspltisb 5, 15
2570; PWR6-NEXT:    vadduhm 2, 2, 4
2571; PWR6-NEXT:    vspltisb 4, 1
2572; PWR6-NEXT:    vand 2, 2, 5
2573; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2574; PWR6-NEXT:    vspltish 3, 8
2575; PWR6-NEXT:    vsrh 2, 2, 3
2576; PWR6-NEXT:    vcmpgtuh 2, 2, 3
2577; PWR6-NEXT:    blr
2578;
2579; PWR7-LABEL: ugt_8_v8i16:
2580; PWR7:       # %bb.0:
2581; PWR7-NEXT:    vspltish 3, 1
2582; PWR7-NEXT:    addis 3, 2, .LCPI26_0@toc@ha
2583; PWR7-NEXT:    addi 3, 3, .LCPI26_0@toc@l
2584; PWR7-NEXT:    vspltish 4, 2
2585; PWR7-NEXT:    lxvw4x 0, 0, 3
2586; PWR7-NEXT:    addis 3, 2, .LCPI26_1@toc@ha
2587; PWR7-NEXT:    vspltish 5, 4
2588; PWR7-NEXT:    addi 3, 3, .LCPI26_1@toc@l
2589; PWR7-NEXT:    vsrh 3, 2, 3
2590; PWR7-NEXT:    vspltisb 0, 15
2591; PWR7-NEXT:    vspltisb 1, 1
2592; PWR7-NEXT:    vspltish 6, 8
2593; PWR7-NEXT:    xxland 35, 35, 0
2594; PWR7-NEXT:    lxvw4x 0, 0, 3
2595; PWR7-NEXT:    vsubuhm 2, 2, 3
2596; PWR7-NEXT:    vsrh 3, 2, 4
2597; PWR7-NEXT:    xxland 34, 34, 0
2598; PWR7-NEXT:    xxland 35, 35, 0
2599; PWR7-NEXT:    vadduhm 2, 2, 3
2600; PWR7-NEXT:    vsrh 3, 2, 5
2601; PWR7-NEXT:    vadduhm 2, 2, 3
2602; PWR7-NEXT:    vxor 3, 3, 3
2603; PWR7-NEXT:    xxland 34, 34, 32
2604; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2605; PWR7-NEXT:    vsrh 2, 2, 6
2606; PWR7-NEXT:    vcmpgtuh 2, 2, 6
2607; PWR7-NEXT:    blr
2608;
2609; PWR8-LABEL: ugt_8_v8i16:
2610; PWR8:       # %bb.0:
2611; PWR8-NEXT:    vspltish 3, 8
2612; PWR8-NEXT:    vpopcnth 2, 2
2613; PWR8-NEXT:    vcmpgtuh 2, 2, 3
2614; PWR8-NEXT:    blr
2615;
2616; PWR9-LABEL: ugt_8_v8i16:
2617; PWR9:       # %bb.0:
2618; PWR9-NEXT:    vspltish 3, 8
2619; PWR9-NEXT:    vpopcnth 2, 2
2620; PWR9-NEXT:    vcmpgtuh 2, 2, 3
2621; PWR9-NEXT:    blr
2622  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2623  %3 = icmp ugt <8 x i16> %2, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
2624  %4 = sext <8 x i1> %3 to <8 x i16>
2625  ret <8 x i16> %4
2626}
2627
2628define <8 x i16> @ult_9_v8i16(<8 x i16> %0) {
2629; PWR5-LABEL: ult_9_v8i16:
2630; PWR5:       # %bb.0:
2631; PWR5-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
2632; PWR5-NEXT:    vspltish 4, 1
2633; PWR5-NEXT:    vxor 3, 3, 3
2634; PWR5-NEXT:    addi 3, 3, .LCPI27_0@toc@l
2635; PWR5-NEXT:    lvx 5, 0, 3
2636; PWR5-NEXT:    addis 3, 2, .LCPI27_1@toc@ha
2637; PWR5-NEXT:    addi 3, 3, .LCPI27_1@toc@l
2638; PWR5-NEXT:    vsrh 4, 2, 4
2639; PWR5-NEXT:    vand 4, 4, 5
2640; PWR5-NEXT:    vspltish 5, 2
2641; PWR5-NEXT:    vsubuhm 2, 2, 4
2642; PWR5-NEXT:    vsrh 4, 2, 5
2643; PWR5-NEXT:    lvx 5, 0, 3
2644; PWR5-NEXT:    vand 2, 2, 5
2645; PWR5-NEXT:    vand 4, 4, 5
2646; PWR5-NEXT:    vspltish 5, 4
2647; PWR5-NEXT:    vadduhm 2, 2, 4
2648; PWR5-NEXT:    vsrh 4, 2, 5
2649; PWR5-NEXT:    vspltisb 5, 15
2650; PWR5-NEXT:    vadduhm 2, 2, 4
2651; PWR5-NEXT:    vspltisb 4, 1
2652; PWR5-NEXT:    vand 2, 2, 5
2653; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2654; PWR5-NEXT:    vspltish 3, 8
2655; PWR5-NEXT:    vsrh 2, 2, 3
2656; PWR5-NEXT:    vspltish 3, 9
2657; PWR5-NEXT:    vcmpgtuh 2, 3, 2
2658; PWR5-NEXT:    blr
2659;
2660; PWR6-LABEL: ult_9_v8i16:
2661; PWR6:       # %bb.0:
2662; PWR6-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
2663; PWR6-NEXT:    vspltish 4, 1
2664; PWR6-NEXT:    vxor 3, 3, 3
2665; PWR6-NEXT:    addi 3, 3, .LCPI27_0@toc@l
2666; PWR6-NEXT:    lvx 5, 0, 3
2667; PWR6-NEXT:    addis 3, 2, .LCPI27_1@toc@ha
2668; PWR6-NEXT:    addi 3, 3, .LCPI27_1@toc@l
2669; PWR6-NEXT:    vsrh 4, 2, 4
2670; PWR6-NEXT:    vand 4, 4, 5
2671; PWR6-NEXT:    vspltish 5, 2
2672; PWR6-NEXT:    vsubuhm 2, 2, 4
2673; PWR6-NEXT:    vsrh 4, 2, 5
2674; PWR6-NEXT:    lvx 5, 0, 3
2675; PWR6-NEXT:    vand 2, 2, 5
2676; PWR6-NEXT:    vand 4, 4, 5
2677; PWR6-NEXT:    vspltish 5, 4
2678; PWR6-NEXT:    vadduhm 2, 2, 4
2679; PWR6-NEXT:    vsrh 4, 2, 5
2680; PWR6-NEXT:    vspltisb 5, 15
2681; PWR6-NEXT:    vadduhm 2, 2, 4
2682; PWR6-NEXT:    vspltisb 4, 1
2683; PWR6-NEXT:    vand 2, 2, 5
2684; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2685; PWR6-NEXT:    vspltish 3, 8
2686; PWR6-NEXT:    vsrh 2, 2, 3
2687; PWR6-NEXT:    vspltish 3, 9
2688; PWR6-NEXT:    vcmpgtuh 2, 3, 2
2689; PWR6-NEXT:    blr
2690;
2691; PWR7-LABEL: ult_9_v8i16:
2692; PWR7:       # %bb.0:
2693; PWR7-NEXT:    vspltish 3, 1
2694; PWR7-NEXT:    addis 3, 2, .LCPI27_0@toc@ha
2695; PWR7-NEXT:    addi 3, 3, .LCPI27_0@toc@l
2696; PWR7-NEXT:    vspltish 4, 2
2697; PWR7-NEXT:    lxvw4x 0, 0, 3
2698; PWR7-NEXT:    addis 3, 2, .LCPI27_1@toc@ha
2699; PWR7-NEXT:    vspltish 5, 4
2700; PWR7-NEXT:    addi 3, 3, .LCPI27_1@toc@l
2701; PWR7-NEXT:    vsrh 3, 2, 3
2702; PWR7-NEXT:    vspltisb 0, 15
2703; PWR7-NEXT:    vspltisb 1, 1
2704; PWR7-NEXT:    vspltish 6, 8
2705; PWR7-NEXT:    vspltish 7, 9
2706; PWR7-NEXT:    xxland 35, 35, 0
2707; PWR7-NEXT:    lxvw4x 0, 0, 3
2708; PWR7-NEXT:    vsubuhm 2, 2, 3
2709; PWR7-NEXT:    vsrh 3, 2, 4
2710; PWR7-NEXT:    xxland 34, 34, 0
2711; PWR7-NEXT:    xxland 35, 35, 0
2712; PWR7-NEXT:    vadduhm 2, 2, 3
2713; PWR7-NEXT:    vsrh 3, 2, 5
2714; PWR7-NEXT:    vadduhm 2, 2, 3
2715; PWR7-NEXT:    vxor 3, 3, 3
2716; PWR7-NEXT:    xxland 34, 34, 32
2717; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2718; PWR7-NEXT:    vsrh 2, 2, 6
2719; PWR7-NEXT:    vcmpgtuh 2, 7, 2
2720; PWR7-NEXT:    blr
2721;
2722; PWR8-LABEL: ult_9_v8i16:
2723; PWR8:       # %bb.0:
2724; PWR8-NEXT:    vspltish 3, 9
2725; PWR8-NEXT:    vpopcnth 2, 2
2726; PWR8-NEXT:    vcmpgtuh 2, 3, 2
2727; PWR8-NEXT:    blr
2728;
2729; PWR9-LABEL: ult_9_v8i16:
2730; PWR9:       # %bb.0:
2731; PWR9-NEXT:    vspltish 3, 9
2732; PWR9-NEXT:    vpopcnth 2, 2
2733; PWR9-NEXT:    vcmpgtuh 2, 3, 2
2734; PWR9-NEXT:    blr
2735  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2736  %3 = icmp ult <8 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
2737  %4 = sext <8 x i1> %3 to <8 x i16>
2738  ret <8 x i16> %4
2739}
2740
2741define <8 x i16> @ugt_9_v8i16(<8 x i16> %0) {
2742; PWR5-LABEL: ugt_9_v8i16:
2743; PWR5:       # %bb.0:
2744; PWR5-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
2745; PWR5-NEXT:    vspltish 4, 1
2746; PWR5-NEXT:    vxor 3, 3, 3
2747; PWR5-NEXT:    addi 3, 3, .LCPI28_0@toc@l
2748; PWR5-NEXT:    lvx 5, 0, 3
2749; PWR5-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
2750; PWR5-NEXT:    addi 3, 3, .LCPI28_1@toc@l
2751; PWR5-NEXT:    vsrh 4, 2, 4
2752; PWR5-NEXT:    vand 4, 4, 5
2753; PWR5-NEXT:    vspltish 5, 2
2754; PWR5-NEXT:    vsubuhm 2, 2, 4
2755; PWR5-NEXT:    vsrh 4, 2, 5
2756; PWR5-NEXT:    lvx 5, 0, 3
2757; PWR5-NEXT:    vand 2, 2, 5
2758; PWR5-NEXT:    vand 4, 4, 5
2759; PWR5-NEXT:    vspltish 5, 4
2760; PWR5-NEXT:    vadduhm 2, 2, 4
2761; PWR5-NEXT:    vsrh 4, 2, 5
2762; PWR5-NEXT:    vspltisb 5, 15
2763; PWR5-NEXT:    vadduhm 2, 2, 4
2764; PWR5-NEXT:    vspltisb 4, 1
2765; PWR5-NEXT:    vand 2, 2, 5
2766; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2767; PWR5-NEXT:    vspltish 3, 8
2768; PWR5-NEXT:    vsrh 2, 2, 3
2769; PWR5-NEXT:    vspltish 3, 9
2770; PWR5-NEXT:    vcmpgtuh 2, 2, 3
2771; PWR5-NEXT:    blr
2772;
2773; PWR6-LABEL: ugt_9_v8i16:
2774; PWR6:       # %bb.0:
2775; PWR6-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
2776; PWR6-NEXT:    vspltish 4, 1
2777; PWR6-NEXT:    vxor 3, 3, 3
2778; PWR6-NEXT:    addi 3, 3, .LCPI28_0@toc@l
2779; PWR6-NEXT:    lvx 5, 0, 3
2780; PWR6-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
2781; PWR6-NEXT:    addi 3, 3, .LCPI28_1@toc@l
2782; PWR6-NEXT:    vsrh 4, 2, 4
2783; PWR6-NEXT:    vand 4, 4, 5
2784; PWR6-NEXT:    vspltish 5, 2
2785; PWR6-NEXT:    vsubuhm 2, 2, 4
2786; PWR6-NEXT:    vsrh 4, 2, 5
2787; PWR6-NEXT:    lvx 5, 0, 3
2788; PWR6-NEXT:    vand 2, 2, 5
2789; PWR6-NEXT:    vand 4, 4, 5
2790; PWR6-NEXT:    vspltish 5, 4
2791; PWR6-NEXT:    vadduhm 2, 2, 4
2792; PWR6-NEXT:    vsrh 4, 2, 5
2793; PWR6-NEXT:    vspltisb 5, 15
2794; PWR6-NEXT:    vadduhm 2, 2, 4
2795; PWR6-NEXT:    vspltisb 4, 1
2796; PWR6-NEXT:    vand 2, 2, 5
2797; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2798; PWR6-NEXT:    vspltish 3, 8
2799; PWR6-NEXT:    vsrh 2, 2, 3
2800; PWR6-NEXT:    vspltish 3, 9
2801; PWR6-NEXT:    vcmpgtuh 2, 2, 3
2802; PWR6-NEXT:    blr
2803;
2804; PWR7-LABEL: ugt_9_v8i16:
2805; PWR7:       # %bb.0:
2806; PWR7-NEXT:    vspltish 3, 1
2807; PWR7-NEXT:    addis 3, 2, .LCPI28_0@toc@ha
2808; PWR7-NEXT:    addi 3, 3, .LCPI28_0@toc@l
2809; PWR7-NEXT:    vspltish 4, 2
2810; PWR7-NEXT:    lxvw4x 0, 0, 3
2811; PWR7-NEXT:    addis 3, 2, .LCPI28_1@toc@ha
2812; PWR7-NEXT:    vspltish 5, 4
2813; PWR7-NEXT:    addi 3, 3, .LCPI28_1@toc@l
2814; PWR7-NEXT:    vsrh 3, 2, 3
2815; PWR7-NEXT:    vspltisb 0, 15
2816; PWR7-NEXT:    vspltisb 1, 1
2817; PWR7-NEXT:    vspltish 6, 8
2818; PWR7-NEXT:    vspltish 7, 9
2819; PWR7-NEXT:    xxland 35, 35, 0
2820; PWR7-NEXT:    lxvw4x 0, 0, 3
2821; PWR7-NEXT:    vsubuhm 2, 2, 3
2822; PWR7-NEXT:    vsrh 3, 2, 4
2823; PWR7-NEXT:    xxland 34, 34, 0
2824; PWR7-NEXT:    xxland 35, 35, 0
2825; PWR7-NEXT:    vadduhm 2, 2, 3
2826; PWR7-NEXT:    vsrh 3, 2, 5
2827; PWR7-NEXT:    vadduhm 2, 2, 3
2828; PWR7-NEXT:    vxor 3, 3, 3
2829; PWR7-NEXT:    xxland 34, 34, 32
2830; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2831; PWR7-NEXT:    vsrh 2, 2, 6
2832; PWR7-NEXT:    vcmpgtuh 2, 2, 7
2833; PWR7-NEXT:    blr
2834;
2835; PWR8-LABEL: ugt_9_v8i16:
2836; PWR8:       # %bb.0:
2837; PWR8-NEXT:    vspltish 3, 9
2838; PWR8-NEXT:    vpopcnth 2, 2
2839; PWR8-NEXT:    vcmpgtuh 2, 2, 3
2840; PWR8-NEXT:    blr
2841;
2842; PWR9-LABEL: ugt_9_v8i16:
2843; PWR9:       # %bb.0:
2844; PWR9-NEXT:    vspltish 3, 9
2845; PWR9-NEXT:    vpopcnth 2, 2
2846; PWR9-NEXT:    vcmpgtuh 2, 2, 3
2847; PWR9-NEXT:    blr
2848  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2849  %3 = icmp ugt <8 x i16> %2, <i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9, i16 9>
2850  %4 = sext <8 x i1> %3 to <8 x i16>
2851  ret <8 x i16> %4
2852}
2853
2854define <8 x i16> @ult_10_v8i16(<8 x i16> %0) {
2855; PWR5-LABEL: ult_10_v8i16:
2856; PWR5:       # %bb.0:
2857; PWR5-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
2858; PWR5-NEXT:    vspltish 4, 1
2859; PWR5-NEXT:    vxor 3, 3, 3
2860; PWR5-NEXT:    addi 3, 3, .LCPI29_0@toc@l
2861; PWR5-NEXT:    lvx 5, 0, 3
2862; PWR5-NEXT:    addis 3, 2, .LCPI29_1@toc@ha
2863; PWR5-NEXT:    addi 3, 3, .LCPI29_1@toc@l
2864; PWR5-NEXT:    vsrh 4, 2, 4
2865; PWR5-NEXT:    vand 4, 4, 5
2866; PWR5-NEXT:    vspltish 5, 2
2867; PWR5-NEXT:    vsubuhm 2, 2, 4
2868; PWR5-NEXT:    vsrh 4, 2, 5
2869; PWR5-NEXT:    lvx 5, 0, 3
2870; PWR5-NEXT:    vand 2, 2, 5
2871; PWR5-NEXT:    vand 4, 4, 5
2872; PWR5-NEXT:    vspltish 5, 4
2873; PWR5-NEXT:    vadduhm 2, 2, 4
2874; PWR5-NEXT:    vsrh 4, 2, 5
2875; PWR5-NEXT:    vspltisb 5, 15
2876; PWR5-NEXT:    vadduhm 2, 2, 4
2877; PWR5-NEXT:    vspltisb 4, 1
2878; PWR5-NEXT:    vand 2, 2, 5
2879; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2880; PWR5-NEXT:    vspltish 3, 8
2881; PWR5-NEXT:    vsrh 2, 2, 3
2882; PWR5-NEXT:    vspltish 3, 10
2883; PWR5-NEXT:    vcmpgtuh 2, 3, 2
2884; PWR5-NEXT:    blr
2885;
2886; PWR6-LABEL: ult_10_v8i16:
2887; PWR6:       # %bb.0:
2888; PWR6-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
2889; PWR6-NEXT:    vspltish 4, 1
2890; PWR6-NEXT:    vxor 3, 3, 3
2891; PWR6-NEXT:    addi 3, 3, .LCPI29_0@toc@l
2892; PWR6-NEXT:    lvx 5, 0, 3
2893; PWR6-NEXT:    addis 3, 2, .LCPI29_1@toc@ha
2894; PWR6-NEXT:    addi 3, 3, .LCPI29_1@toc@l
2895; PWR6-NEXT:    vsrh 4, 2, 4
2896; PWR6-NEXT:    vand 4, 4, 5
2897; PWR6-NEXT:    vspltish 5, 2
2898; PWR6-NEXT:    vsubuhm 2, 2, 4
2899; PWR6-NEXT:    vsrh 4, 2, 5
2900; PWR6-NEXT:    lvx 5, 0, 3
2901; PWR6-NEXT:    vand 2, 2, 5
2902; PWR6-NEXT:    vand 4, 4, 5
2903; PWR6-NEXT:    vspltish 5, 4
2904; PWR6-NEXT:    vadduhm 2, 2, 4
2905; PWR6-NEXT:    vsrh 4, 2, 5
2906; PWR6-NEXT:    vspltisb 5, 15
2907; PWR6-NEXT:    vadduhm 2, 2, 4
2908; PWR6-NEXT:    vspltisb 4, 1
2909; PWR6-NEXT:    vand 2, 2, 5
2910; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
2911; PWR6-NEXT:    vspltish 3, 8
2912; PWR6-NEXT:    vsrh 2, 2, 3
2913; PWR6-NEXT:    vspltish 3, 10
2914; PWR6-NEXT:    vcmpgtuh 2, 3, 2
2915; PWR6-NEXT:    blr
2916;
2917; PWR7-LABEL: ult_10_v8i16:
2918; PWR7:       # %bb.0:
2919; PWR7-NEXT:    vspltish 3, 1
2920; PWR7-NEXT:    addis 3, 2, .LCPI29_0@toc@ha
2921; PWR7-NEXT:    addi 3, 3, .LCPI29_0@toc@l
2922; PWR7-NEXT:    vspltish 4, 2
2923; PWR7-NEXT:    lxvw4x 0, 0, 3
2924; PWR7-NEXT:    addis 3, 2, .LCPI29_1@toc@ha
2925; PWR7-NEXT:    vspltish 5, 4
2926; PWR7-NEXT:    addi 3, 3, .LCPI29_1@toc@l
2927; PWR7-NEXT:    vsrh 3, 2, 3
2928; PWR7-NEXT:    vspltisb 0, 15
2929; PWR7-NEXT:    vspltisb 1, 1
2930; PWR7-NEXT:    vspltish 6, 8
2931; PWR7-NEXT:    vspltish 7, 10
2932; PWR7-NEXT:    xxland 35, 35, 0
2933; PWR7-NEXT:    lxvw4x 0, 0, 3
2934; PWR7-NEXT:    vsubuhm 2, 2, 3
2935; PWR7-NEXT:    vsrh 3, 2, 4
2936; PWR7-NEXT:    xxland 34, 34, 0
2937; PWR7-NEXT:    xxland 35, 35, 0
2938; PWR7-NEXT:    vadduhm 2, 2, 3
2939; PWR7-NEXT:    vsrh 3, 2, 5
2940; PWR7-NEXT:    vadduhm 2, 2, 3
2941; PWR7-NEXT:    vxor 3, 3, 3
2942; PWR7-NEXT:    xxland 34, 34, 32
2943; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
2944; PWR7-NEXT:    vsrh 2, 2, 6
2945; PWR7-NEXT:    vcmpgtuh 2, 7, 2
2946; PWR7-NEXT:    blr
2947;
2948; PWR8-LABEL: ult_10_v8i16:
2949; PWR8:       # %bb.0:
2950; PWR8-NEXT:    vspltish 3, 10
2951; PWR8-NEXT:    vpopcnth 2, 2
2952; PWR8-NEXT:    vcmpgtuh 2, 3, 2
2953; PWR8-NEXT:    blr
2954;
2955; PWR9-LABEL: ult_10_v8i16:
2956; PWR9:       # %bb.0:
2957; PWR9-NEXT:    vspltish 3, 10
2958; PWR9-NEXT:    vpopcnth 2, 2
2959; PWR9-NEXT:    vcmpgtuh 2, 3, 2
2960; PWR9-NEXT:    blr
2961  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
2962  %3 = icmp ult <8 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
2963  %4 = sext <8 x i1> %3 to <8 x i16>
2964  ret <8 x i16> %4
2965}
2966
2967define <8 x i16> @ugt_10_v8i16(<8 x i16> %0) {
2968; PWR5-LABEL: ugt_10_v8i16:
2969; PWR5:       # %bb.0:
2970; PWR5-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
2971; PWR5-NEXT:    vspltish 4, 1
2972; PWR5-NEXT:    vxor 3, 3, 3
2973; PWR5-NEXT:    addi 3, 3, .LCPI30_0@toc@l
2974; PWR5-NEXT:    lvx 5, 0, 3
2975; PWR5-NEXT:    addis 3, 2, .LCPI30_1@toc@ha
2976; PWR5-NEXT:    addi 3, 3, .LCPI30_1@toc@l
2977; PWR5-NEXT:    vsrh 4, 2, 4
2978; PWR5-NEXT:    vand 4, 4, 5
2979; PWR5-NEXT:    vspltish 5, 2
2980; PWR5-NEXT:    vsubuhm 2, 2, 4
2981; PWR5-NEXT:    vsrh 4, 2, 5
2982; PWR5-NEXT:    lvx 5, 0, 3
2983; PWR5-NEXT:    vand 2, 2, 5
2984; PWR5-NEXT:    vand 4, 4, 5
2985; PWR5-NEXT:    vspltish 5, 4
2986; PWR5-NEXT:    vadduhm 2, 2, 4
2987; PWR5-NEXT:    vsrh 4, 2, 5
2988; PWR5-NEXT:    vspltisb 5, 15
2989; PWR5-NEXT:    vadduhm 2, 2, 4
2990; PWR5-NEXT:    vspltisb 4, 1
2991; PWR5-NEXT:    vand 2, 2, 5
2992; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
2993; PWR5-NEXT:    vspltish 3, 8
2994; PWR5-NEXT:    vsrh 2, 2, 3
2995; PWR5-NEXT:    vspltish 3, 10
2996; PWR5-NEXT:    vcmpgtuh 2, 2, 3
2997; PWR5-NEXT:    blr
2998;
2999; PWR6-LABEL: ugt_10_v8i16:
3000; PWR6:       # %bb.0:
3001; PWR6-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
3002; PWR6-NEXT:    vspltish 4, 1
3003; PWR6-NEXT:    vxor 3, 3, 3
3004; PWR6-NEXT:    addi 3, 3, .LCPI30_0@toc@l
3005; PWR6-NEXT:    lvx 5, 0, 3
3006; PWR6-NEXT:    addis 3, 2, .LCPI30_1@toc@ha
3007; PWR6-NEXT:    addi 3, 3, .LCPI30_1@toc@l
3008; PWR6-NEXT:    vsrh 4, 2, 4
3009; PWR6-NEXT:    vand 4, 4, 5
3010; PWR6-NEXT:    vspltish 5, 2
3011; PWR6-NEXT:    vsubuhm 2, 2, 4
3012; PWR6-NEXT:    vsrh 4, 2, 5
3013; PWR6-NEXT:    lvx 5, 0, 3
3014; PWR6-NEXT:    vand 2, 2, 5
3015; PWR6-NEXT:    vand 4, 4, 5
3016; PWR6-NEXT:    vspltish 5, 4
3017; PWR6-NEXT:    vadduhm 2, 2, 4
3018; PWR6-NEXT:    vsrh 4, 2, 5
3019; PWR6-NEXT:    vspltisb 5, 15
3020; PWR6-NEXT:    vadduhm 2, 2, 4
3021; PWR6-NEXT:    vspltisb 4, 1
3022; PWR6-NEXT:    vand 2, 2, 5
3023; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3024; PWR6-NEXT:    vspltish 3, 8
3025; PWR6-NEXT:    vsrh 2, 2, 3
3026; PWR6-NEXT:    vspltish 3, 10
3027; PWR6-NEXT:    vcmpgtuh 2, 2, 3
3028; PWR6-NEXT:    blr
3029;
3030; PWR7-LABEL: ugt_10_v8i16:
3031; PWR7:       # %bb.0:
3032; PWR7-NEXT:    vspltish 3, 1
3033; PWR7-NEXT:    addis 3, 2, .LCPI30_0@toc@ha
3034; PWR7-NEXT:    addi 3, 3, .LCPI30_0@toc@l
3035; PWR7-NEXT:    vspltish 4, 2
3036; PWR7-NEXT:    lxvw4x 0, 0, 3
3037; PWR7-NEXT:    addis 3, 2, .LCPI30_1@toc@ha
3038; PWR7-NEXT:    vspltish 5, 4
3039; PWR7-NEXT:    addi 3, 3, .LCPI30_1@toc@l
3040; PWR7-NEXT:    vsrh 3, 2, 3
3041; PWR7-NEXT:    vspltisb 0, 15
3042; PWR7-NEXT:    vspltisb 1, 1
3043; PWR7-NEXT:    vspltish 6, 8
3044; PWR7-NEXT:    vspltish 7, 10
3045; PWR7-NEXT:    xxland 35, 35, 0
3046; PWR7-NEXT:    lxvw4x 0, 0, 3
3047; PWR7-NEXT:    vsubuhm 2, 2, 3
3048; PWR7-NEXT:    vsrh 3, 2, 4
3049; PWR7-NEXT:    xxland 34, 34, 0
3050; PWR7-NEXT:    xxland 35, 35, 0
3051; PWR7-NEXT:    vadduhm 2, 2, 3
3052; PWR7-NEXT:    vsrh 3, 2, 5
3053; PWR7-NEXT:    vadduhm 2, 2, 3
3054; PWR7-NEXT:    vxor 3, 3, 3
3055; PWR7-NEXT:    xxland 34, 34, 32
3056; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3057; PWR7-NEXT:    vsrh 2, 2, 6
3058; PWR7-NEXT:    vcmpgtuh 2, 2, 7
3059; PWR7-NEXT:    blr
3060;
3061; PWR8-LABEL: ugt_10_v8i16:
3062; PWR8:       # %bb.0:
3063; PWR8-NEXT:    vspltish 3, 10
3064; PWR8-NEXT:    vpopcnth 2, 2
3065; PWR8-NEXT:    vcmpgtuh 2, 2, 3
3066; PWR8-NEXT:    blr
3067;
3068; PWR9-LABEL: ugt_10_v8i16:
3069; PWR9:       # %bb.0:
3070; PWR9-NEXT:    vspltish 3, 10
3071; PWR9-NEXT:    vpopcnth 2, 2
3072; PWR9-NEXT:    vcmpgtuh 2, 2, 3
3073; PWR9-NEXT:    blr
3074  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3075  %3 = icmp ugt <8 x i16> %2, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
3076  %4 = sext <8 x i1> %3 to <8 x i16>
3077  ret <8 x i16> %4
3078}
3079
3080define <8 x i16> @ult_11_v8i16(<8 x i16> %0) {
3081; PWR5-LABEL: ult_11_v8i16:
3082; PWR5:       # %bb.0:
3083; PWR5-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
3084; PWR5-NEXT:    vspltish 4, 1
3085; PWR5-NEXT:    vxor 3, 3, 3
3086; PWR5-NEXT:    addi 3, 3, .LCPI31_0@toc@l
3087; PWR5-NEXT:    lvx 5, 0, 3
3088; PWR5-NEXT:    addis 3, 2, .LCPI31_1@toc@ha
3089; PWR5-NEXT:    addi 3, 3, .LCPI31_1@toc@l
3090; PWR5-NEXT:    vsrh 4, 2, 4
3091; PWR5-NEXT:    vand 4, 4, 5
3092; PWR5-NEXT:    vspltish 5, 2
3093; PWR5-NEXT:    vsubuhm 2, 2, 4
3094; PWR5-NEXT:    vsrh 4, 2, 5
3095; PWR5-NEXT:    lvx 5, 0, 3
3096; PWR5-NEXT:    vand 2, 2, 5
3097; PWR5-NEXT:    vand 4, 4, 5
3098; PWR5-NEXT:    vspltish 5, 4
3099; PWR5-NEXT:    vadduhm 2, 2, 4
3100; PWR5-NEXT:    vsrh 4, 2, 5
3101; PWR5-NEXT:    vspltisb 5, 15
3102; PWR5-NEXT:    vadduhm 2, 2, 4
3103; PWR5-NEXT:    vspltisb 4, 1
3104; PWR5-NEXT:    vand 2, 2, 5
3105; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
3106; PWR5-NEXT:    vspltish 3, 8
3107; PWR5-NEXT:    vsrh 2, 2, 3
3108; PWR5-NEXT:    vspltish 3, 11
3109; PWR5-NEXT:    vcmpgtuh 2, 3, 2
3110; PWR5-NEXT:    blr
3111;
3112; PWR6-LABEL: ult_11_v8i16:
3113; PWR6:       # %bb.0:
3114; PWR6-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
3115; PWR6-NEXT:    vspltish 4, 1
3116; PWR6-NEXT:    vxor 3, 3, 3
3117; PWR6-NEXT:    addi 3, 3, .LCPI31_0@toc@l
3118; PWR6-NEXT:    lvx 5, 0, 3
3119; PWR6-NEXT:    addis 3, 2, .LCPI31_1@toc@ha
3120; PWR6-NEXT:    addi 3, 3, .LCPI31_1@toc@l
3121; PWR6-NEXT:    vsrh 4, 2, 4
3122; PWR6-NEXT:    vand 4, 4, 5
3123; PWR6-NEXT:    vspltish 5, 2
3124; PWR6-NEXT:    vsubuhm 2, 2, 4
3125; PWR6-NEXT:    vsrh 4, 2, 5
3126; PWR6-NEXT:    lvx 5, 0, 3
3127; PWR6-NEXT:    vand 2, 2, 5
3128; PWR6-NEXT:    vand 4, 4, 5
3129; PWR6-NEXT:    vspltish 5, 4
3130; PWR6-NEXT:    vadduhm 2, 2, 4
3131; PWR6-NEXT:    vsrh 4, 2, 5
3132; PWR6-NEXT:    vspltisb 5, 15
3133; PWR6-NEXT:    vadduhm 2, 2, 4
3134; PWR6-NEXT:    vspltisb 4, 1
3135; PWR6-NEXT:    vand 2, 2, 5
3136; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3137; PWR6-NEXT:    vspltish 3, 8
3138; PWR6-NEXT:    vsrh 2, 2, 3
3139; PWR6-NEXT:    vspltish 3, 11
3140; PWR6-NEXT:    vcmpgtuh 2, 3, 2
3141; PWR6-NEXT:    blr
3142;
3143; PWR7-LABEL: ult_11_v8i16:
3144; PWR7:       # %bb.0:
3145; PWR7-NEXT:    vspltish 3, 1
3146; PWR7-NEXT:    addis 3, 2, .LCPI31_0@toc@ha
3147; PWR7-NEXT:    addi 3, 3, .LCPI31_0@toc@l
3148; PWR7-NEXT:    vspltish 4, 2
3149; PWR7-NEXT:    lxvw4x 0, 0, 3
3150; PWR7-NEXT:    addis 3, 2, .LCPI31_1@toc@ha
3151; PWR7-NEXT:    vspltish 5, 4
3152; PWR7-NEXT:    addi 3, 3, .LCPI31_1@toc@l
3153; PWR7-NEXT:    vsrh 3, 2, 3
3154; PWR7-NEXT:    vspltisb 0, 15
3155; PWR7-NEXT:    vspltisb 1, 1
3156; PWR7-NEXT:    vspltish 6, 8
3157; PWR7-NEXT:    vspltish 7, 11
3158; PWR7-NEXT:    xxland 35, 35, 0
3159; PWR7-NEXT:    lxvw4x 0, 0, 3
3160; PWR7-NEXT:    vsubuhm 2, 2, 3
3161; PWR7-NEXT:    vsrh 3, 2, 4
3162; PWR7-NEXT:    xxland 34, 34, 0
3163; PWR7-NEXT:    xxland 35, 35, 0
3164; PWR7-NEXT:    vadduhm 2, 2, 3
3165; PWR7-NEXT:    vsrh 3, 2, 5
3166; PWR7-NEXT:    vadduhm 2, 2, 3
3167; PWR7-NEXT:    vxor 3, 3, 3
3168; PWR7-NEXT:    xxland 34, 34, 32
3169; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3170; PWR7-NEXT:    vsrh 2, 2, 6
3171; PWR7-NEXT:    vcmpgtuh 2, 7, 2
3172; PWR7-NEXT:    blr
3173;
3174; PWR8-LABEL: ult_11_v8i16:
3175; PWR8:       # %bb.0:
3176; PWR8-NEXT:    vspltish 3, 11
3177; PWR8-NEXT:    vpopcnth 2, 2
3178; PWR8-NEXT:    vcmpgtuh 2, 3, 2
3179; PWR8-NEXT:    blr
3180;
3181; PWR9-LABEL: ult_11_v8i16:
3182; PWR9:       # %bb.0:
3183; PWR9-NEXT:    vspltish 3, 11
3184; PWR9-NEXT:    vpopcnth 2, 2
3185; PWR9-NEXT:    vcmpgtuh 2, 3, 2
3186; PWR9-NEXT:    blr
3187  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3188  %3 = icmp ult <8 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>
3189  %4 = sext <8 x i1> %3 to <8 x i16>
3190  ret <8 x i16> %4
3191}
3192
3193define <8 x i16> @ugt_11_v8i16(<8 x i16> %0) {
3194; PWR5-LABEL: ugt_11_v8i16:
3195; PWR5:       # %bb.0:
3196; PWR5-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
3197; PWR5-NEXT:    vspltish 4, 1
3198; PWR5-NEXT:    vxor 3, 3, 3
3199; PWR5-NEXT:    addi 3, 3, .LCPI32_0@toc@l
3200; PWR5-NEXT:    lvx 5, 0, 3
3201; PWR5-NEXT:    addis 3, 2, .LCPI32_1@toc@ha
3202; PWR5-NEXT:    addi 3, 3, .LCPI32_1@toc@l
3203; PWR5-NEXT:    vsrh 4, 2, 4
3204; PWR5-NEXT:    vand 4, 4, 5
3205; PWR5-NEXT:    vspltish 5, 2
3206; PWR5-NEXT:    vsubuhm 2, 2, 4
3207; PWR5-NEXT:    vsrh 4, 2, 5
3208; PWR5-NEXT:    lvx 5, 0, 3
3209; PWR5-NEXT:    vand 2, 2, 5
3210; PWR5-NEXT:    vand 4, 4, 5
3211; PWR5-NEXT:    vspltish 5, 4
3212; PWR5-NEXT:    vadduhm 2, 2, 4
3213; PWR5-NEXT:    vsrh 4, 2, 5
3214; PWR5-NEXT:    vspltisb 5, 15
3215; PWR5-NEXT:    vadduhm 2, 2, 4
3216; PWR5-NEXT:    vspltisb 4, 1
3217; PWR5-NEXT:    vand 2, 2, 5
3218; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
3219; PWR5-NEXT:    vspltish 3, 8
3220; PWR5-NEXT:    vsrh 2, 2, 3
3221; PWR5-NEXT:    vspltish 3, 11
3222; PWR5-NEXT:    vcmpgtuh 2, 2, 3
3223; PWR5-NEXT:    blr
3224;
3225; PWR6-LABEL: ugt_11_v8i16:
3226; PWR6:       # %bb.0:
3227; PWR6-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
3228; PWR6-NEXT:    vspltish 4, 1
3229; PWR6-NEXT:    vxor 3, 3, 3
3230; PWR6-NEXT:    addi 3, 3, .LCPI32_0@toc@l
3231; PWR6-NEXT:    lvx 5, 0, 3
3232; PWR6-NEXT:    addis 3, 2, .LCPI32_1@toc@ha
3233; PWR6-NEXT:    addi 3, 3, .LCPI32_1@toc@l
3234; PWR6-NEXT:    vsrh 4, 2, 4
3235; PWR6-NEXT:    vand 4, 4, 5
3236; PWR6-NEXT:    vspltish 5, 2
3237; PWR6-NEXT:    vsubuhm 2, 2, 4
3238; PWR6-NEXT:    vsrh 4, 2, 5
3239; PWR6-NEXT:    lvx 5, 0, 3
3240; PWR6-NEXT:    vand 2, 2, 5
3241; PWR6-NEXT:    vand 4, 4, 5
3242; PWR6-NEXT:    vspltish 5, 4
3243; PWR6-NEXT:    vadduhm 2, 2, 4
3244; PWR6-NEXT:    vsrh 4, 2, 5
3245; PWR6-NEXT:    vspltisb 5, 15
3246; PWR6-NEXT:    vadduhm 2, 2, 4
3247; PWR6-NEXT:    vspltisb 4, 1
3248; PWR6-NEXT:    vand 2, 2, 5
3249; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3250; PWR6-NEXT:    vspltish 3, 8
3251; PWR6-NEXT:    vsrh 2, 2, 3
3252; PWR6-NEXT:    vspltish 3, 11
3253; PWR6-NEXT:    vcmpgtuh 2, 2, 3
3254; PWR6-NEXT:    blr
3255;
3256; PWR7-LABEL: ugt_11_v8i16:
3257; PWR7:       # %bb.0:
3258; PWR7-NEXT:    vspltish 3, 1
3259; PWR7-NEXT:    addis 3, 2, .LCPI32_0@toc@ha
3260; PWR7-NEXT:    addi 3, 3, .LCPI32_0@toc@l
3261; PWR7-NEXT:    vspltish 4, 2
3262; PWR7-NEXT:    lxvw4x 0, 0, 3
3263; PWR7-NEXT:    addis 3, 2, .LCPI32_1@toc@ha
3264; PWR7-NEXT:    vspltish 5, 4
3265; PWR7-NEXT:    addi 3, 3, .LCPI32_1@toc@l
3266; PWR7-NEXT:    vsrh 3, 2, 3
3267; PWR7-NEXT:    vspltisb 0, 15
3268; PWR7-NEXT:    vspltisb 1, 1
3269; PWR7-NEXT:    vspltish 6, 8
3270; PWR7-NEXT:    vspltish 7, 11
3271; PWR7-NEXT:    xxland 35, 35, 0
3272; PWR7-NEXT:    lxvw4x 0, 0, 3
3273; PWR7-NEXT:    vsubuhm 2, 2, 3
3274; PWR7-NEXT:    vsrh 3, 2, 4
3275; PWR7-NEXT:    xxland 34, 34, 0
3276; PWR7-NEXT:    xxland 35, 35, 0
3277; PWR7-NEXT:    vadduhm 2, 2, 3
3278; PWR7-NEXT:    vsrh 3, 2, 5
3279; PWR7-NEXT:    vadduhm 2, 2, 3
3280; PWR7-NEXT:    vxor 3, 3, 3
3281; PWR7-NEXT:    xxland 34, 34, 32
3282; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3283; PWR7-NEXT:    vsrh 2, 2, 6
3284; PWR7-NEXT:    vcmpgtuh 2, 2, 7
3285; PWR7-NEXT:    blr
3286;
3287; PWR8-LABEL: ugt_11_v8i16:
3288; PWR8:       # %bb.0:
3289; PWR8-NEXT:    vspltish 3, 11
3290; PWR8-NEXT:    vpopcnth 2, 2
3291; PWR8-NEXT:    vcmpgtuh 2, 2, 3
3292; PWR8-NEXT:    blr
3293;
3294; PWR9-LABEL: ugt_11_v8i16:
3295; PWR9:       # %bb.0:
3296; PWR9-NEXT:    vspltish 3, 11
3297; PWR9-NEXT:    vpopcnth 2, 2
3298; PWR9-NEXT:    vcmpgtuh 2, 2, 3
3299; PWR9-NEXT:    blr
3300  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3301  %3 = icmp ugt <8 x i16> %2, <i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11, i16 11>
3302  %4 = sext <8 x i1> %3 to <8 x i16>
3303  ret <8 x i16> %4
3304}
3305
3306define <8 x i16> @ult_12_v8i16(<8 x i16> %0) {
3307; PWR5-LABEL: ult_12_v8i16:
3308; PWR5:       # %bb.0:
3309; PWR5-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
3310; PWR5-NEXT:    vspltish 4, 1
3311; PWR5-NEXT:    vxor 3, 3, 3
3312; PWR5-NEXT:    addi 3, 3, .LCPI33_0@toc@l
3313; PWR5-NEXT:    lvx 5, 0, 3
3314; PWR5-NEXT:    addis 3, 2, .LCPI33_1@toc@ha
3315; PWR5-NEXT:    addi 3, 3, .LCPI33_1@toc@l
3316; PWR5-NEXT:    vsrh 4, 2, 4
3317; PWR5-NEXT:    vand 4, 4, 5
3318; PWR5-NEXT:    vspltish 5, 2
3319; PWR5-NEXT:    vsubuhm 2, 2, 4
3320; PWR5-NEXT:    vsrh 4, 2, 5
3321; PWR5-NEXT:    lvx 5, 0, 3
3322; PWR5-NEXT:    vand 2, 2, 5
3323; PWR5-NEXT:    vand 4, 4, 5
3324; PWR5-NEXT:    vspltish 5, 4
3325; PWR5-NEXT:    vadduhm 2, 2, 4
3326; PWR5-NEXT:    vsrh 4, 2, 5
3327; PWR5-NEXT:    vspltisb 5, 15
3328; PWR5-NEXT:    vadduhm 2, 2, 4
3329; PWR5-NEXT:    vspltisb 4, 1
3330; PWR5-NEXT:    vand 2, 2, 5
3331; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
3332; PWR5-NEXT:    vspltish 3, 8
3333; PWR5-NEXT:    vsrh 2, 2, 3
3334; PWR5-NEXT:    vspltish 3, 12
3335; PWR5-NEXT:    vcmpgtuh 2, 3, 2
3336; PWR5-NEXT:    blr
3337;
3338; PWR6-LABEL: ult_12_v8i16:
3339; PWR6:       # %bb.0:
3340; PWR6-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
3341; PWR6-NEXT:    vspltish 4, 1
3342; PWR6-NEXT:    vxor 3, 3, 3
3343; PWR6-NEXT:    addi 3, 3, .LCPI33_0@toc@l
3344; PWR6-NEXT:    lvx 5, 0, 3
3345; PWR6-NEXT:    addis 3, 2, .LCPI33_1@toc@ha
3346; PWR6-NEXT:    addi 3, 3, .LCPI33_1@toc@l
3347; PWR6-NEXT:    vsrh 4, 2, 4
3348; PWR6-NEXT:    vand 4, 4, 5
3349; PWR6-NEXT:    vspltish 5, 2
3350; PWR6-NEXT:    vsubuhm 2, 2, 4
3351; PWR6-NEXT:    vsrh 4, 2, 5
3352; PWR6-NEXT:    lvx 5, 0, 3
3353; PWR6-NEXT:    vand 2, 2, 5
3354; PWR6-NEXT:    vand 4, 4, 5
3355; PWR6-NEXT:    vspltish 5, 4
3356; PWR6-NEXT:    vadduhm 2, 2, 4
3357; PWR6-NEXT:    vsrh 4, 2, 5
3358; PWR6-NEXT:    vspltisb 5, 15
3359; PWR6-NEXT:    vadduhm 2, 2, 4
3360; PWR6-NEXT:    vspltisb 4, 1
3361; PWR6-NEXT:    vand 2, 2, 5
3362; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3363; PWR6-NEXT:    vspltish 3, 8
3364; PWR6-NEXT:    vsrh 2, 2, 3
3365; PWR6-NEXT:    vspltish 3, 12
3366; PWR6-NEXT:    vcmpgtuh 2, 3, 2
3367; PWR6-NEXT:    blr
3368;
3369; PWR7-LABEL: ult_12_v8i16:
3370; PWR7:       # %bb.0:
3371; PWR7-NEXT:    vspltish 3, 1
3372; PWR7-NEXT:    addis 3, 2, .LCPI33_0@toc@ha
3373; PWR7-NEXT:    addi 3, 3, .LCPI33_0@toc@l
3374; PWR7-NEXT:    vspltish 4, 2
3375; PWR7-NEXT:    lxvw4x 0, 0, 3
3376; PWR7-NEXT:    addis 3, 2, .LCPI33_1@toc@ha
3377; PWR7-NEXT:    vspltish 5, 4
3378; PWR7-NEXT:    addi 3, 3, .LCPI33_1@toc@l
3379; PWR7-NEXT:    vsrh 3, 2, 3
3380; PWR7-NEXT:    vspltisb 0, 15
3381; PWR7-NEXT:    vspltisb 1, 1
3382; PWR7-NEXT:    vspltish 6, 8
3383; PWR7-NEXT:    vspltish 7, 12
3384; PWR7-NEXT:    xxland 35, 35, 0
3385; PWR7-NEXT:    lxvw4x 0, 0, 3
3386; PWR7-NEXT:    vsubuhm 2, 2, 3
3387; PWR7-NEXT:    vsrh 3, 2, 4
3388; PWR7-NEXT:    xxland 34, 34, 0
3389; PWR7-NEXT:    xxland 35, 35, 0
3390; PWR7-NEXT:    vadduhm 2, 2, 3
3391; PWR7-NEXT:    vsrh 3, 2, 5
3392; PWR7-NEXT:    vadduhm 2, 2, 3
3393; PWR7-NEXT:    vxor 3, 3, 3
3394; PWR7-NEXT:    xxland 34, 34, 32
3395; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3396; PWR7-NEXT:    vsrh 2, 2, 6
3397; PWR7-NEXT:    vcmpgtuh 2, 7, 2
3398; PWR7-NEXT:    blr
3399;
3400; PWR8-LABEL: ult_12_v8i16:
3401; PWR8:       # %bb.0:
3402; PWR8-NEXT:    vspltish 3, 12
3403; PWR8-NEXT:    vpopcnth 2, 2
3404; PWR8-NEXT:    vcmpgtuh 2, 3, 2
3405; PWR8-NEXT:    blr
3406;
3407; PWR9-LABEL: ult_12_v8i16:
3408; PWR9:       # %bb.0:
3409; PWR9-NEXT:    vspltish 3, 12
3410; PWR9-NEXT:    vpopcnth 2, 2
3411; PWR9-NEXT:    vcmpgtuh 2, 3, 2
3412; PWR9-NEXT:    blr
3413  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3414  %3 = icmp ult <8 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>
3415  %4 = sext <8 x i1> %3 to <8 x i16>
3416  ret <8 x i16> %4
3417}
3418
3419define <8 x i16> @ugt_12_v8i16(<8 x i16> %0) {
3420; PWR5-LABEL: ugt_12_v8i16:
3421; PWR5:       # %bb.0:
3422; PWR5-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
3423; PWR5-NEXT:    vspltish 4, 1
3424; PWR5-NEXT:    vxor 3, 3, 3
3425; PWR5-NEXT:    addi 3, 3, .LCPI34_0@toc@l
3426; PWR5-NEXT:    lvx 5, 0, 3
3427; PWR5-NEXT:    addis 3, 2, .LCPI34_1@toc@ha
3428; PWR5-NEXT:    addi 3, 3, .LCPI34_1@toc@l
3429; PWR5-NEXT:    vsrh 4, 2, 4
3430; PWR5-NEXT:    vand 4, 4, 5
3431; PWR5-NEXT:    vspltish 5, 2
3432; PWR5-NEXT:    vsubuhm 2, 2, 4
3433; PWR5-NEXT:    vsrh 4, 2, 5
3434; PWR5-NEXT:    lvx 5, 0, 3
3435; PWR5-NEXT:    vand 2, 2, 5
3436; PWR5-NEXT:    vand 4, 4, 5
3437; PWR5-NEXT:    vspltish 5, 4
3438; PWR5-NEXT:    vadduhm 2, 2, 4
3439; PWR5-NEXT:    vsrh 4, 2, 5
3440; PWR5-NEXT:    vspltisb 5, 15
3441; PWR5-NEXT:    vadduhm 2, 2, 4
3442; PWR5-NEXT:    vspltisb 4, 1
3443; PWR5-NEXT:    vand 2, 2, 5
3444; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
3445; PWR5-NEXT:    vspltish 3, 8
3446; PWR5-NEXT:    vsrh 2, 2, 3
3447; PWR5-NEXT:    vspltish 3, 12
3448; PWR5-NEXT:    vcmpgtuh 2, 2, 3
3449; PWR5-NEXT:    blr
3450;
3451; PWR6-LABEL: ugt_12_v8i16:
3452; PWR6:       # %bb.0:
3453; PWR6-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
3454; PWR6-NEXT:    vspltish 4, 1
3455; PWR6-NEXT:    vxor 3, 3, 3
3456; PWR6-NEXT:    addi 3, 3, .LCPI34_0@toc@l
3457; PWR6-NEXT:    lvx 5, 0, 3
3458; PWR6-NEXT:    addis 3, 2, .LCPI34_1@toc@ha
3459; PWR6-NEXT:    addi 3, 3, .LCPI34_1@toc@l
3460; PWR6-NEXT:    vsrh 4, 2, 4
3461; PWR6-NEXT:    vand 4, 4, 5
3462; PWR6-NEXT:    vspltish 5, 2
3463; PWR6-NEXT:    vsubuhm 2, 2, 4
3464; PWR6-NEXT:    vsrh 4, 2, 5
3465; PWR6-NEXT:    lvx 5, 0, 3
3466; PWR6-NEXT:    vand 2, 2, 5
3467; PWR6-NEXT:    vand 4, 4, 5
3468; PWR6-NEXT:    vspltish 5, 4
3469; PWR6-NEXT:    vadduhm 2, 2, 4
3470; PWR6-NEXT:    vsrh 4, 2, 5
3471; PWR6-NEXT:    vspltisb 5, 15
3472; PWR6-NEXT:    vadduhm 2, 2, 4
3473; PWR6-NEXT:    vspltisb 4, 1
3474; PWR6-NEXT:    vand 2, 2, 5
3475; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3476; PWR6-NEXT:    vspltish 3, 8
3477; PWR6-NEXT:    vsrh 2, 2, 3
3478; PWR6-NEXT:    vspltish 3, 12
3479; PWR6-NEXT:    vcmpgtuh 2, 2, 3
3480; PWR6-NEXT:    blr
3481;
3482; PWR7-LABEL: ugt_12_v8i16:
3483; PWR7:       # %bb.0:
3484; PWR7-NEXT:    vspltish 3, 1
3485; PWR7-NEXT:    addis 3, 2, .LCPI34_0@toc@ha
3486; PWR7-NEXT:    addi 3, 3, .LCPI34_0@toc@l
3487; PWR7-NEXT:    vspltish 4, 2
3488; PWR7-NEXT:    lxvw4x 0, 0, 3
3489; PWR7-NEXT:    addis 3, 2, .LCPI34_1@toc@ha
3490; PWR7-NEXT:    vspltish 5, 4
3491; PWR7-NEXT:    addi 3, 3, .LCPI34_1@toc@l
3492; PWR7-NEXT:    vsrh 3, 2, 3
3493; PWR7-NEXT:    vspltisb 0, 15
3494; PWR7-NEXT:    vspltisb 1, 1
3495; PWR7-NEXT:    vspltish 6, 8
3496; PWR7-NEXT:    vspltish 7, 12
3497; PWR7-NEXT:    xxland 35, 35, 0
3498; PWR7-NEXT:    lxvw4x 0, 0, 3
3499; PWR7-NEXT:    vsubuhm 2, 2, 3
3500; PWR7-NEXT:    vsrh 3, 2, 4
3501; PWR7-NEXT:    xxland 34, 34, 0
3502; PWR7-NEXT:    xxland 35, 35, 0
3503; PWR7-NEXT:    vadduhm 2, 2, 3
3504; PWR7-NEXT:    vsrh 3, 2, 5
3505; PWR7-NEXT:    vadduhm 2, 2, 3
3506; PWR7-NEXT:    vxor 3, 3, 3
3507; PWR7-NEXT:    xxland 34, 34, 32
3508; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3509; PWR7-NEXT:    vsrh 2, 2, 6
3510; PWR7-NEXT:    vcmpgtuh 2, 2, 7
3511; PWR7-NEXT:    blr
3512;
3513; PWR8-LABEL: ugt_12_v8i16:
3514; PWR8:       # %bb.0:
3515; PWR8-NEXT:    vspltish 3, 12
3516; PWR8-NEXT:    vpopcnth 2, 2
3517; PWR8-NEXT:    vcmpgtuh 2, 2, 3
3518; PWR8-NEXT:    blr
3519;
3520; PWR9-LABEL: ugt_12_v8i16:
3521; PWR9:       # %bb.0:
3522; PWR9-NEXT:    vspltish 3, 12
3523; PWR9-NEXT:    vpopcnth 2, 2
3524; PWR9-NEXT:    vcmpgtuh 2, 2, 3
3525; PWR9-NEXT:    blr
3526  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3527  %3 = icmp ugt <8 x i16> %2, <i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12, i16 12>
3528  %4 = sext <8 x i1> %3 to <8 x i16>
3529  ret <8 x i16> %4
3530}
3531
3532define <8 x i16> @ult_13_v8i16(<8 x i16> %0) {
3533; PWR5-LABEL: ult_13_v8i16:
3534; PWR5:       # %bb.0:
3535; PWR5-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
3536; PWR5-NEXT:    vspltish 4, 1
3537; PWR5-NEXT:    vxor 3, 3, 3
3538; PWR5-NEXT:    addi 3, 3, .LCPI35_0@toc@l
3539; PWR5-NEXT:    lvx 5, 0, 3
3540; PWR5-NEXT:    addis 3, 2, .LCPI35_1@toc@ha
3541; PWR5-NEXT:    addi 3, 3, .LCPI35_1@toc@l
3542; PWR5-NEXT:    vsrh 4, 2, 4
3543; PWR5-NEXT:    vand 4, 4, 5
3544; PWR5-NEXT:    vspltish 5, 2
3545; PWR5-NEXT:    vsubuhm 2, 2, 4
3546; PWR5-NEXT:    vsrh 4, 2, 5
3547; PWR5-NEXT:    lvx 5, 0, 3
3548; PWR5-NEXT:    vand 2, 2, 5
3549; PWR5-NEXT:    vand 4, 4, 5
3550; PWR5-NEXT:    vspltish 5, 4
3551; PWR5-NEXT:    vadduhm 2, 2, 4
3552; PWR5-NEXT:    vsrh 4, 2, 5
3553; PWR5-NEXT:    vspltisb 5, 15
3554; PWR5-NEXT:    vadduhm 2, 2, 4
3555; PWR5-NEXT:    vspltisb 4, 1
3556; PWR5-NEXT:    vand 2, 2, 5
3557; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
3558; PWR5-NEXT:    vspltish 3, 8
3559; PWR5-NEXT:    vsrh 2, 2, 3
3560; PWR5-NEXT:    vspltish 3, 13
3561; PWR5-NEXT:    vcmpgtuh 2, 3, 2
3562; PWR5-NEXT:    blr
3563;
3564; PWR6-LABEL: ult_13_v8i16:
3565; PWR6:       # %bb.0:
3566; PWR6-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
3567; PWR6-NEXT:    vspltish 4, 1
3568; PWR6-NEXT:    vxor 3, 3, 3
3569; PWR6-NEXT:    addi 3, 3, .LCPI35_0@toc@l
3570; PWR6-NEXT:    lvx 5, 0, 3
3571; PWR6-NEXT:    addis 3, 2, .LCPI35_1@toc@ha
3572; PWR6-NEXT:    addi 3, 3, .LCPI35_1@toc@l
3573; PWR6-NEXT:    vsrh 4, 2, 4
3574; PWR6-NEXT:    vand 4, 4, 5
3575; PWR6-NEXT:    vspltish 5, 2
3576; PWR6-NEXT:    vsubuhm 2, 2, 4
3577; PWR6-NEXT:    vsrh 4, 2, 5
3578; PWR6-NEXT:    lvx 5, 0, 3
3579; PWR6-NEXT:    vand 2, 2, 5
3580; PWR6-NEXT:    vand 4, 4, 5
3581; PWR6-NEXT:    vspltish 5, 4
3582; PWR6-NEXT:    vadduhm 2, 2, 4
3583; PWR6-NEXT:    vsrh 4, 2, 5
3584; PWR6-NEXT:    vspltisb 5, 15
3585; PWR6-NEXT:    vadduhm 2, 2, 4
3586; PWR6-NEXT:    vspltisb 4, 1
3587; PWR6-NEXT:    vand 2, 2, 5
3588; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3589; PWR6-NEXT:    vspltish 3, 8
3590; PWR6-NEXT:    vsrh 2, 2, 3
3591; PWR6-NEXT:    vspltish 3, 13
3592; PWR6-NEXT:    vcmpgtuh 2, 3, 2
3593; PWR6-NEXT:    blr
3594;
3595; PWR7-LABEL: ult_13_v8i16:
3596; PWR7:       # %bb.0:
3597; PWR7-NEXT:    vspltish 3, 1
3598; PWR7-NEXT:    addis 3, 2, .LCPI35_0@toc@ha
3599; PWR7-NEXT:    addi 3, 3, .LCPI35_0@toc@l
3600; PWR7-NEXT:    vspltish 4, 2
3601; PWR7-NEXT:    lxvw4x 0, 0, 3
3602; PWR7-NEXT:    addis 3, 2, .LCPI35_1@toc@ha
3603; PWR7-NEXT:    vspltish 5, 4
3604; PWR7-NEXT:    addi 3, 3, .LCPI35_1@toc@l
3605; PWR7-NEXT:    vsrh 3, 2, 3
3606; PWR7-NEXT:    vspltisb 0, 15
3607; PWR7-NEXT:    vspltisb 1, 1
3608; PWR7-NEXT:    vspltish 6, 8
3609; PWR7-NEXT:    vspltish 7, 13
3610; PWR7-NEXT:    xxland 35, 35, 0
3611; PWR7-NEXT:    lxvw4x 0, 0, 3
3612; PWR7-NEXT:    vsubuhm 2, 2, 3
3613; PWR7-NEXT:    vsrh 3, 2, 4
3614; PWR7-NEXT:    xxland 34, 34, 0
3615; PWR7-NEXT:    xxland 35, 35, 0
3616; PWR7-NEXT:    vadduhm 2, 2, 3
3617; PWR7-NEXT:    vsrh 3, 2, 5
3618; PWR7-NEXT:    vadduhm 2, 2, 3
3619; PWR7-NEXT:    vxor 3, 3, 3
3620; PWR7-NEXT:    xxland 34, 34, 32
3621; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3622; PWR7-NEXT:    vsrh 2, 2, 6
3623; PWR7-NEXT:    vcmpgtuh 2, 7, 2
3624; PWR7-NEXT:    blr
3625;
3626; PWR8-LABEL: ult_13_v8i16:
3627; PWR8:       # %bb.0:
3628; PWR8-NEXT:    vspltish 3, 13
3629; PWR8-NEXT:    vpopcnth 2, 2
3630; PWR8-NEXT:    vcmpgtuh 2, 3, 2
3631; PWR8-NEXT:    blr
3632;
3633; PWR9-LABEL: ult_13_v8i16:
3634; PWR9:       # %bb.0:
3635; PWR9-NEXT:    vspltish 3, 13
3636; PWR9-NEXT:    vpopcnth 2, 2
3637; PWR9-NEXT:    vcmpgtuh 2, 3, 2
3638; PWR9-NEXT:    blr
3639  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3640  %3 = icmp ult <8 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>
3641  %4 = sext <8 x i1> %3 to <8 x i16>
3642  ret <8 x i16> %4
3643}
3644
3645define <8 x i16> @ugt_13_v8i16(<8 x i16> %0) {
3646; PWR5-LABEL: ugt_13_v8i16:
3647; PWR5:       # %bb.0:
3648; PWR5-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
3649; PWR5-NEXT:    vspltish 4, 1
3650; PWR5-NEXT:    vxor 3, 3, 3
3651; PWR5-NEXT:    addi 3, 3, .LCPI36_0@toc@l
3652; PWR5-NEXT:    lvx 5, 0, 3
3653; PWR5-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
3654; PWR5-NEXT:    addi 3, 3, .LCPI36_1@toc@l
3655; PWR5-NEXT:    vsrh 4, 2, 4
3656; PWR5-NEXT:    vand 4, 4, 5
3657; PWR5-NEXT:    vspltish 5, 2
3658; PWR5-NEXT:    vsubuhm 2, 2, 4
3659; PWR5-NEXT:    vsrh 4, 2, 5
3660; PWR5-NEXT:    lvx 5, 0, 3
3661; PWR5-NEXT:    vand 2, 2, 5
3662; PWR5-NEXT:    vand 4, 4, 5
3663; PWR5-NEXT:    vspltish 5, 4
3664; PWR5-NEXT:    vadduhm 2, 2, 4
3665; PWR5-NEXT:    vsrh 4, 2, 5
3666; PWR5-NEXT:    vspltisb 5, 15
3667; PWR5-NEXT:    vadduhm 2, 2, 4
3668; PWR5-NEXT:    vspltisb 4, 1
3669; PWR5-NEXT:    vand 2, 2, 5
3670; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
3671; PWR5-NEXT:    vspltish 3, 8
3672; PWR5-NEXT:    vsrh 2, 2, 3
3673; PWR5-NEXT:    vspltish 3, 13
3674; PWR5-NEXT:    vcmpgtuh 2, 2, 3
3675; PWR5-NEXT:    blr
3676;
3677; PWR6-LABEL: ugt_13_v8i16:
3678; PWR6:       # %bb.0:
3679; PWR6-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
3680; PWR6-NEXT:    vspltish 4, 1
3681; PWR6-NEXT:    vxor 3, 3, 3
3682; PWR6-NEXT:    addi 3, 3, .LCPI36_0@toc@l
3683; PWR6-NEXT:    lvx 5, 0, 3
3684; PWR6-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
3685; PWR6-NEXT:    addi 3, 3, .LCPI36_1@toc@l
3686; PWR6-NEXT:    vsrh 4, 2, 4
3687; PWR6-NEXT:    vand 4, 4, 5
3688; PWR6-NEXT:    vspltish 5, 2
3689; PWR6-NEXT:    vsubuhm 2, 2, 4
3690; PWR6-NEXT:    vsrh 4, 2, 5
3691; PWR6-NEXT:    lvx 5, 0, 3
3692; PWR6-NEXT:    vand 2, 2, 5
3693; PWR6-NEXT:    vand 4, 4, 5
3694; PWR6-NEXT:    vspltish 5, 4
3695; PWR6-NEXT:    vadduhm 2, 2, 4
3696; PWR6-NEXT:    vsrh 4, 2, 5
3697; PWR6-NEXT:    vspltisb 5, 15
3698; PWR6-NEXT:    vadduhm 2, 2, 4
3699; PWR6-NEXT:    vspltisb 4, 1
3700; PWR6-NEXT:    vand 2, 2, 5
3701; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3702; PWR6-NEXT:    vspltish 3, 8
3703; PWR6-NEXT:    vsrh 2, 2, 3
3704; PWR6-NEXT:    vspltish 3, 13
3705; PWR6-NEXT:    vcmpgtuh 2, 2, 3
3706; PWR6-NEXT:    blr
3707;
3708; PWR7-LABEL: ugt_13_v8i16:
3709; PWR7:       # %bb.0:
3710; PWR7-NEXT:    vspltish 3, 1
3711; PWR7-NEXT:    addis 3, 2, .LCPI36_0@toc@ha
3712; PWR7-NEXT:    addi 3, 3, .LCPI36_0@toc@l
3713; PWR7-NEXT:    vspltish 4, 2
3714; PWR7-NEXT:    lxvw4x 0, 0, 3
3715; PWR7-NEXT:    addis 3, 2, .LCPI36_1@toc@ha
3716; PWR7-NEXT:    vspltish 5, 4
3717; PWR7-NEXT:    addi 3, 3, .LCPI36_1@toc@l
3718; PWR7-NEXT:    vsrh 3, 2, 3
3719; PWR7-NEXT:    vspltisb 0, 15
3720; PWR7-NEXT:    vspltisb 1, 1
3721; PWR7-NEXT:    vspltish 6, 8
3722; PWR7-NEXT:    vspltish 7, 13
3723; PWR7-NEXT:    xxland 35, 35, 0
3724; PWR7-NEXT:    lxvw4x 0, 0, 3
3725; PWR7-NEXT:    vsubuhm 2, 2, 3
3726; PWR7-NEXT:    vsrh 3, 2, 4
3727; PWR7-NEXT:    xxland 34, 34, 0
3728; PWR7-NEXT:    xxland 35, 35, 0
3729; PWR7-NEXT:    vadduhm 2, 2, 3
3730; PWR7-NEXT:    vsrh 3, 2, 5
3731; PWR7-NEXT:    vadduhm 2, 2, 3
3732; PWR7-NEXT:    vxor 3, 3, 3
3733; PWR7-NEXT:    xxland 34, 34, 32
3734; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3735; PWR7-NEXT:    vsrh 2, 2, 6
3736; PWR7-NEXT:    vcmpgtuh 2, 2, 7
3737; PWR7-NEXT:    blr
3738;
3739; PWR8-LABEL: ugt_13_v8i16:
3740; PWR8:       # %bb.0:
3741; PWR8-NEXT:    vspltish 3, 13
3742; PWR8-NEXT:    vpopcnth 2, 2
3743; PWR8-NEXT:    vcmpgtuh 2, 2, 3
3744; PWR8-NEXT:    blr
3745;
3746; PWR9-LABEL: ugt_13_v8i16:
3747; PWR9:       # %bb.0:
3748; PWR9-NEXT:    vspltish 3, 13
3749; PWR9-NEXT:    vpopcnth 2, 2
3750; PWR9-NEXT:    vcmpgtuh 2, 2, 3
3751; PWR9-NEXT:    blr
3752  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3753  %3 = icmp ugt <8 x i16> %2, <i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13, i16 13>
3754  %4 = sext <8 x i1> %3 to <8 x i16>
3755  ret <8 x i16> %4
3756}
3757
3758define <8 x i16> @ult_14_v8i16(<8 x i16> %0) {
3759; PWR5-LABEL: ult_14_v8i16:
3760; PWR5:       # %bb.0:
3761; PWR5-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
3762; PWR5-NEXT:    vspltish 4, 1
3763; PWR5-NEXT:    vxor 3, 3, 3
3764; PWR5-NEXT:    addi 3, 3, .LCPI37_0@toc@l
3765; PWR5-NEXT:    lvx 5, 0, 3
3766; PWR5-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
3767; PWR5-NEXT:    addi 3, 3, .LCPI37_1@toc@l
3768; PWR5-NEXT:    vsrh 4, 2, 4
3769; PWR5-NEXT:    vand 4, 4, 5
3770; PWR5-NEXT:    vspltish 5, 2
3771; PWR5-NEXT:    vsubuhm 2, 2, 4
3772; PWR5-NEXT:    vsrh 4, 2, 5
3773; PWR5-NEXT:    lvx 5, 0, 3
3774; PWR5-NEXT:    vand 2, 2, 5
3775; PWR5-NEXT:    vand 4, 4, 5
3776; PWR5-NEXT:    vspltish 5, 4
3777; PWR5-NEXT:    vadduhm 2, 2, 4
3778; PWR5-NEXT:    vsrh 4, 2, 5
3779; PWR5-NEXT:    vspltisb 5, 15
3780; PWR5-NEXT:    vadduhm 2, 2, 4
3781; PWR5-NEXT:    vspltisb 4, 1
3782; PWR5-NEXT:    vand 2, 2, 5
3783; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
3784; PWR5-NEXT:    vspltish 3, 8
3785; PWR5-NEXT:    vsrh 2, 2, 3
3786; PWR5-NEXT:    vspltish 3, 14
3787; PWR5-NEXT:    vcmpgtuh 2, 3, 2
3788; PWR5-NEXT:    blr
3789;
3790; PWR6-LABEL: ult_14_v8i16:
3791; PWR6:       # %bb.0:
3792; PWR6-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
3793; PWR6-NEXT:    vspltish 4, 1
3794; PWR6-NEXT:    vxor 3, 3, 3
3795; PWR6-NEXT:    addi 3, 3, .LCPI37_0@toc@l
3796; PWR6-NEXT:    lvx 5, 0, 3
3797; PWR6-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
3798; PWR6-NEXT:    addi 3, 3, .LCPI37_1@toc@l
3799; PWR6-NEXT:    vsrh 4, 2, 4
3800; PWR6-NEXT:    vand 4, 4, 5
3801; PWR6-NEXT:    vspltish 5, 2
3802; PWR6-NEXT:    vsubuhm 2, 2, 4
3803; PWR6-NEXT:    vsrh 4, 2, 5
3804; PWR6-NEXT:    lvx 5, 0, 3
3805; PWR6-NEXT:    vand 2, 2, 5
3806; PWR6-NEXT:    vand 4, 4, 5
3807; PWR6-NEXT:    vspltish 5, 4
3808; PWR6-NEXT:    vadduhm 2, 2, 4
3809; PWR6-NEXT:    vsrh 4, 2, 5
3810; PWR6-NEXT:    vspltisb 5, 15
3811; PWR6-NEXT:    vadduhm 2, 2, 4
3812; PWR6-NEXT:    vspltisb 4, 1
3813; PWR6-NEXT:    vand 2, 2, 5
3814; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3815; PWR6-NEXT:    vspltish 3, 8
3816; PWR6-NEXT:    vsrh 2, 2, 3
3817; PWR6-NEXT:    vspltish 3, 14
3818; PWR6-NEXT:    vcmpgtuh 2, 3, 2
3819; PWR6-NEXT:    blr
3820;
3821; PWR7-LABEL: ult_14_v8i16:
3822; PWR7:       # %bb.0:
3823; PWR7-NEXT:    vspltish 3, 1
3824; PWR7-NEXT:    addis 3, 2, .LCPI37_0@toc@ha
3825; PWR7-NEXT:    addi 3, 3, .LCPI37_0@toc@l
3826; PWR7-NEXT:    vspltish 4, 2
3827; PWR7-NEXT:    lxvw4x 0, 0, 3
3828; PWR7-NEXT:    addis 3, 2, .LCPI37_1@toc@ha
3829; PWR7-NEXT:    vspltish 5, 4
3830; PWR7-NEXT:    addi 3, 3, .LCPI37_1@toc@l
3831; PWR7-NEXT:    vsrh 3, 2, 3
3832; PWR7-NEXT:    vspltisb 0, 15
3833; PWR7-NEXT:    vspltisb 1, 1
3834; PWR7-NEXT:    vspltish 6, 8
3835; PWR7-NEXT:    vspltish 7, 14
3836; PWR7-NEXT:    xxland 35, 35, 0
3837; PWR7-NEXT:    lxvw4x 0, 0, 3
3838; PWR7-NEXT:    vsubuhm 2, 2, 3
3839; PWR7-NEXT:    vsrh 3, 2, 4
3840; PWR7-NEXT:    xxland 34, 34, 0
3841; PWR7-NEXT:    xxland 35, 35, 0
3842; PWR7-NEXT:    vadduhm 2, 2, 3
3843; PWR7-NEXT:    vsrh 3, 2, 5
3844; PWR7-NEXT:    vadduhm 2, 2, 3
3845; PWR7-NEXT:    vxor 3, 3, 3
3846; PWR7-NEXT:    xxland 34, 34, 32
3847; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3848; PWR7-NEXT:    vsrh 2, 2, 6
3849; PWR7-NEXT:    vcmpgtuh 2, 7, 2
3850; PWR7-NEXT:    blr
3851;
3852; PWR8-LABEL: ult_14_v8i16:
3853; PWR8:       # %bb.0:
3854; PWR8-NEXT:    vspltish 3, 14
3855; PWR8-NEXT:    vpopcnth 2, 2
3856; PWR8-NEXT:    vcmpgtuh 2, 3, 2
3857; PWR8-NEXT:    blr
3858;
3859; PWR9-LABEL: ult_14_v8i16:
3860; PWR9:       # %bb.0:
3861; PWR9-NEXT:    vspltish 3, 14
3862; PWR9-NEXT:    vpopcnth 2, 2
3863; PWR9-NEXT:    vcmpgtuh 2, 3, 2
3864; PWR9-NEXT:    blr
3865  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3866  %3 = icmp ult <8 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>
3867  %4 = sext <8 x i1> %3 to <8 x i16>
3868  ret <8 x i16> %4
3869}
3870
3871define <8 x i16> @ugt_14_v8i16(<8 x i16> %0) {
3872; PWR5-LABEL: ugt_14_v8i16:
3873; PWR5:       # %bb.0:
3874; PWR5-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
3875; PWR5-NEXT:    vspltish 4, 1
3876; PWR5-NEXT:    vxor 3, 3, 3
3877; PWR5-NEXT:    addi 3, 3, .LCPI38_0@toc@l
3878; PWR5-NEXT:    lvx 5, 0, 3
3879; PWR5-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
3880; PWR5-NEXT:    addi 3, 3, .LCPI38_1@toc@l
3881; PWR5-NEXT:    vsrh 4, 2, 4
3882; PWR5-NEXT:    vand 4, 4, 5
3883; PWR5-NEXT:    vspltish 5, 2
3884; PWR5-NEXT:    vsubuhm 2, 2, 4
3885; PWR5-NEXT:    vsrh 4, 2, 5
3886; PWR5-NEXT:    lvx 5, 0, 3
3887; PWR5-NEXT:    vand 2, 2, 5
3888; PWR5-NEXT:    vand 4, 4, 5
3889; PWR5-NEXT:    vspltish 5, 4
3890; PWR5-NEXT:    vadduhm 2, 2, 4
3891; PWR5-NEXT:    vsrh 4, 2, 5
3892; PWR5-NEXT:    vspltisb 5, 15
3893; PWR5-NEXT:    vadduhm 2, 2, 4
3894; PWR5-NEXT:    vspltisb 4, 1
3895; PWR5-NEXT:    vand 2, 2, 5
3896; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
3897; PWR5-NEXT:    vspltish 3, 8
3898; PWR5-NEXT:    vsrh 2, 2, 3
3899; PWR5-NEXT:    vspltish 3, 14
3900; PWR5-NEXT:    vcmpgtuh 2, 2, 3
3901; PWR5-NEXT:    blr
3902;
3903; PWR6-LABEL: ugt_14_v8i16:
3904; PWR6:       # %bb.0:
3905; PWR6-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
3906; PWR6-NEXT:    vspltish 4, 1
3907; PWR6-NEXT:    vxor 3, 3, 3
3908; PWR6-NEXT:    addi 3, 3, .LCPI38_0@toc@l
3909; PWR6-NEXT:    lvx 5, 0, 3
3910; PWR6-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
3911; PWR6-NEXT:    addi 3, 3, .LCPI38_1@toc@l
3912; PWR6-NEXT:    vsrh 4, 2, 4
3913; PWR6-NEXT:    vand 4, 4, 5
3914; PWR6-NEXT:    vspltish 5, 2
3915; PWR6-NEXT:    vsubuhm 2, 2, 4
3916; PWR6-NEXT:    vsrh 4, 2, 5
3917; PWR6-NEXT:    lvx 5, 0, 3
3918; PWR6-NEXT:    vand 2, 2, 5
3919; PWR6-NEXT:    vand 4, 4, 5
3920; PWR6-NEXT:    vspltish 5, 4
3921; PWR6-NEXT:    vadduhm 2, 2, 4
3922; PWR6-NEXT:    vsrh 4, 2, 5
3923; PWR6-NEXT:    vspltisb 5, 15
3924; PWR6-NEXT:    vadduhm 2, 2, 4
3925; PWR6-NEXT:    vspltisb 4, 1
3926; PWR6-NEXT:    vand 2, 2, 5
3927; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
3928; PWR6-NEXT:    vspltish 3, 8
3929; PWR6-NEXT:    vsrh 2, 2, 3
3930; PWR6-NEXT:    vspltish 3, 14
3931; PWR6-NEXT:    vcmpgtuh 2, 2, 3
3932; PWR6-NEXT:    blr
3933;
3934; PWR7-LABEL: ugt_14_v8i16:
3935; PWR7:       # %bb.0:
3936; PWR7-NEXT:    vspltish 3, 1
3937; PWR7-NEXT:    addis 3, 2, .LCPI38_0@toc@ha
3938; PWR7-NEXT:    addi 3, 3, .LCPI38_0@toc@l
3939; PWR7-NEXT:    vspltish 4, 2
3940; PWR7-NEXT:    lxvw4x 0, 0, 3
3941; PWR7-NEXT:    addis 3, 2, .LCPI38_1@toc@ha
3942; PWR7-NEXT:    vspltish 5, 4
3943; PWR7-NEXT:    addi 3, 3, .LCPI38_1@toc@l
3944; PWR7-NEXT:    vsrh 3, 2, 3
3945; PWR7-NEXT:    vspltisb 0, 15
3946; PWR7-NEXT:    vspltisb 1, 1
3947; PWR7-NEXT:    vspltish 6, 8
3948; PWR7-NEXT:    vspltish 7, 14
3949; PWR7-NEXT:    xxland 35, 35, 0
3950; PWR7-NEXT:    lxvw4x 0, 0, 3
3951; PWR7-NEXT:    vsubuhm 2, 2, 3
3952; PWR7-NEXT:    vsrh 3, 2, 4
3953; PWR7-NEXT:    xxland 34, 34, 0
3954; PWR7-NEXT:    xxland 35, 35, 0
3955; PWR7-NEXT:    vadduhm 2, 2, 3
3956; PWR7-NEXT:    vsrh 3, 2, 5
3957; PWR7-NEXT:    vadduhm 2, 2, 3
3958; PWR7-NEXT:    vxor 3, 3, 3
3959; PWR7-NEXT:    xxland 34, 34, 32
3960; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
3961; PWR7-NEXT:    vsrh 2, 2, 6
3962; PWR7-NEXT:    vcmpgtuh 2, 2, 7
3963; PWR7-NEXT:    blr
3964;
3965; PWR8-LABEL: ugt_14_v8i16:
3966; PWR8:       # %bb.0:
3967; PWR8-NEXT:    vspltish 3, 14
3968; PWR8-NEXT:    vpopcnth 2, 2
3969; PWR8-NEXT:    vcmpgtuh 2, 2, 3
3970; PWR8-NEXT:    blr
3971;
3972; PWR9-LABEL: ugt_14_v8i16:
3973; PWR9:       # %bb.0:
3974; PWR9-NEXT:    vspltish 3, 14
3975; PWR9-NEXT:    vpopcnth 2, 2
3976; PWR9-NEXT:    vcmpgtuh 2, 2, 3
3977; PWR9-NEXT:    blr
3978  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
3979  %3 = icmp ugt <8 x i16> %2, <i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14, i16 14>
3980  %4 = sext <8 x i1> %3 to <8 x i16>
3981  ret <8 x i16> %4
3982}
3983
3984define <8 x i16> @ult_15_v8i16(<8 x i16> %0) {
3985; PWR5-LABEL: ult_15_v8i16:
3986; PWR5:       # %bb.0:
3987; PWR5-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
3988; PWR5-NEXT:    vspltish 4, 1
3989; PWR5-NEXT:    vxor 3, 3, 3
3990; PWR5-NEXT:    addi 3, 3, .LCPI39_0@toc@l
3991; PWR5-NEXT:    lvx 5, 0, 3
3992; PWR5-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
3993; PWR5-NEXT:    addi 3, 3, .LCPI39_1@toc@l
3994; PWR5-NEXT:    vsrh 4, 2, 4
3995; PWR5-NEXT:    vand 4, 4, 5
3996; PWR5-NEXT:    vspltish 5, 2
3997; PWR5-NEXT:    vsubuhm 2, 2, 4
3998; PWR5-NEXT:    vsrh 4, 2, 5
3999; PWR5-NEXT:    lvx 5, 0, 3
4000; PWR5-NEXT:    vand 2, 2, 5
4001; PWR5-NEXT:    vand 4, 4, 5
4002; PWR5-NEXT:    vspltish 5, 4
4003; PWR5-NEXT:    vadduhm 2, 2, 4
4004; PWR5-NEXT:    vsrh 4, 2, 5
4005; PWR5-NEXT:    vspltisb 5, 15
4006; PWR5-NEXT:    vadduhm 2, 2, 4
4007; PWR5-NEXT:    vspltisb 4, 1
4008; PWR5-NEXT:    vand 2, 2, 5
4009; PWR5-NEXT:    vmladduhm 2, 2, 4, 3
4010; PWR5-NEXT:    vspltish 3, 8
4011; PWR5-NEXT:    vsrh 2, 2, 3
4012; PWR5-NEXT:    vspltish 3, 15
4013; PWR5-NEXT:    vcmpgtuh 2, 3, 2
4014; PWR5-NEXT:    blr
4015;
4016; PWR6-LABEL: ult_15_v8i16:
4017; PWR6:       # %bb.0:
4018; PWR6-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
4019; PWR6-NEXT:    vspltish 4, 1
4020; PWR6-NEXT:    vxor 3, 3, 3
4021; PWR6-NEXT:    addi 3, 3, .LCPI39_0@toc@l
4022; PWR6-NEXT:    lvx 5, 0, 3
4023; PWR6-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
4024; PWR6-NEXT:    addi 3, 3, .LCPI39_1@toc@l
4025; PWR6-NEXT:    vsrh 4, 2, 4
4026; PWR6-NEXT:    vand 4, 4, 5
4027; PWR6-NEXT:    vspltish 5, 2
4028; PWR6-NEXT:    vsubuhm 2, 2, 4
4029; PWR6-NEXT:    vsrh 4, 2, 5
4030; PWR6-NEXT:    lvx 5, 0, 3
4031; PWR6-NEXT:    vand 2, 2, 5
4032; PWR6-NEXT:    vand 4, 4, 5
4033; PWR6-NEXT:    vspltish 5, 4
4034; PWR6-NEXT:    vadduhm 2, 2, 4
4035; PWR6-NEXT:    vsrh 4, 2, 5
4036; PWR6-NEXT:    vspltisb 5, 15
4037; PWR6-NEXT:    vadduhm 2, 2, 4
4038; PWR6-NEXT:    vspltisb 4, 1
4039; PWR6-NEXT:    vand 2, 2, 5
4040; PWR6-NEXT:    vmladduhm 2, 2, 4, 3
4041; PWR6-NEXT:    vspltish 3, 8
4042; PWR6-NEXT:    vsrh 2, 2, 3
4043; PWR6-NEXT:    vspltish 3, 15
4044; PWR6-NEXT:    vcmpgtuh 2, 3, 2
4045; PWR6-NEXT:    blr
4046;
4047; PWR7-LABEL: ult_15_v8i16:
4048; PWR7:       # %bb.0:
4049; PWR7-NEXT:    vspltish 3, 1
4050; PWR7-NEXT:    addis 3, 2, .LCPI39_0@toc@ha
4051; PWR7-NEXT:    addi 3, 3, .LCPI39_0@toc@l
4052; PWR7-NEXT:    vspltish 4, 2
4053; PWR7-NEXT:    lxvw4x 0, 0, 3
4054; PWR7-NEXT:    addis 3, 2, .LCPI39_1@toc@ha
4055; PWR7-NEXT:    vspltish 5, 4
4056; PWR7-NEXT:    addi 3, 3, .LCPI39_1@toc@l
4057; PWR7-NEXT:    vsrh 3, 2, 3
4058; PWR7-NEXT:    vspltisb 0, 15
4059; PWR7-NEXT:    vspltisb 1, 1
4060; PWR7-NEXT:    vspltish 6, 8
4061; PWR7-NEXT:    vspltish 7, 15
4062; PWR7-NEXT:    xxland 35, 35, 0
4063; PWR7-NEXT:    lxvw4x 0, 0, 3
4064; PWR7-NEXT:    vsubuhm 2, 2, 3
4065; PWR7-NEXT:    vsrh 3, 2, 4
4066; PWR7-NEXT:    xxland 34, 34, 0
4067; PWR7-NEXT:    xxland 35, 35, 0
4068; PWR7-NEXT:    vadduhm 2, 2, 3
4069; PWR7-NEXT:    vsrh 3, 2, 5
4070; PWR7-NEXT:    vadduhm 2, 2, 3
4071; PWR7-NEXT:    vxor 3, 3, 3
4072; PWR7-NEXT:    xxland 34, 34, 32
4073; PWR7-NEXT:    vmladduhm 2, 2, 1, 3
4074; PWR7-NEXT:    vsrh 2, 2, 6
4075; PWR7-NEXT:    vcmpgtuh 2, 7, 2
4076; PWR7-NEXT:    blr
4077;
4078; PWR8-LABEL: ult_15_v8i16:
4079; PWR8:       # %bb.0:
4080; PWR8-NEXT:    vspltish 3, 15
4081; PWR8-NEXT:    vpopcnth 2, 2
4082; PWR8-NEXT:    vcmpgtuh 2, 3, 2
4083; PWR8-NEXT:    blr
4084;
4085; PWR9-LABEL: ult_15_v8i16:
4086; PWR9:       # %bb.0:
4087; PWR9-NEXT:    vspltish 3, 15
4088; PWR9-NEXT:    vpopcnth 2, 2
4089; PWR9-NEXT:    vcmpgtuh 2, 3, 2
4090; PWR9-NEXT:    blr
4091  %2 = tail call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> %0)
4092  %3 = icmp ult <8 x i16> %2, <i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15, i16 15>
4093  %4 = sext <8 x i1> %3 to <8 x i16>
4094  ret <8 x i16> %4
4095}
4096
4097define <4 x i32> @ugt_1_v4i32(<4 x i32> %0) {
4098; PWR5-LABEL: ugt_1_v4i32:
4099; PWR5:       # %bb.0:
4100; PWR5-NEXT:    vspltisb 3, -1
4101; PWR5-NEXT:    vadduwm 3, 2, 3
4102; PWR5-NEXT:    vand 2, 2, 3
4103; PWR5-NEXT:    vxor 3, 3, 3
4104; PWR5-NEXT:    vcmpequw 2, 2, 3
4105; PWR5-NEXT:    vnot 2, 2
4106; PWR5-NEXT:    blr
4107;
4108; PWR6-LABEL: ugt_1_v4i32:
4109; PWR6:       # %bb.0:
4110; PWR6-NEXT:    vspltisb 3, -1
4111; PWR6-NEXT:    vadduwm 3, 2, 3
4112; PWR6-NEXT:    vand 2, 2, 3
4113; PWR6-NEXT:    vxor 3, 3, 3
4114; PWR6-NEXT:    vcmpequw 2, 2, 3
4115; PWR6-NEXT:    vnot 2, 2
4116; PWR6-NEXT:    blr
4117;
4118; PWR7-LABEL: ugt_1_v4i32:
4119; PWR7:       # %bb.0:
4120; PWR7-NEXT:    vspltisb 3, -1
4121; PWR7-NEXT:    vadduwm 3, 2, 3
4122; PWR7-NEXT:    xxland 34, 34, 35
4123; PWR7-NEXT:    xxlxor 35, 35, 35
4124; PWR7-NEXT:    vcmpequw 2, 2, 3
4125; PWR7-NEXT:    xxlnor 34, 34, 34
4126; PWR7-NEXT:    blr
4127;
4128; PWR8-LABEL: ugt_1_v4i32:
4129; PWR8:       # %bb.0:
4130; PWR8-NEXT:    vspltisw 3, 1
4131; PWR8-NEXT:    vpopcntw 2, 2
4132; PWR8-NEXT:    vcmpgtuw 2, 2, 3
4133; PWR8-NEXT:    blr
4134;
4135; PWR9-LABEL: ugt_1_v4i32:
4136; PWR9:       # %bb.0:
4137; PWR9-NEXT:    vpopcntw 2, 2
4138; PWR9-NEXT:    vspltisw 3, 1
4139; PWR9-NEXT:    vcmpgtuw 2, 2, 3
4140; PWR9-NEXT:    blr
4141  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
4142  %3 = icmp ugt <4 x i32> %2, <i32 1, i32 1, i32 1, i32 1>
4143  %4 = sext <4 x i1> %3 to <4 x i32>
4144  ret <4 x i32> %4
4145}
4146
4147define <4 x i32> @ult_2_v4i32(<4 x i32> %0) {
4148; PWR5-LABEL: ult_2_v4i32:
4149; PWR5:       # %bb.0:
4150; PWR5-NEXT:    vspltisb 3, -1
4151; PWR5-NEXT:    vadduwm 3, 2, 3
4152; PWR5-NEXT:    vand 2, 2, 3
4153; PWR5-NEXT:    vxor 3, 3, 3
4154; PWR5-NEXT:    vcmpequw 2, 2, 3
4155; PWR5-NEXT:    blr
4156;
4157; PWR6-LABEL: ult_2_v4i32:
4158; PWR6:       # %bb.0:
4159; PWR6-NEXT:    vspltisb 3, -1
4160; PWR6-NEXT:    vadduwm 3, 2, 3
4161; PWR6-NEXT:    vand 2, 2, 3
4162; PWR6-NEXT:    vxor 3, 3, 3
4163; PWR6-NEXT:    vcmpequw 2, 2, 3
4164; PWR6-NEXT:    blr
4165;
4166; PWR7-LABEL: ult_2_v4i32:
4167; PWR7:       # %bb.0:
4168; PWR7-NEXT:    vspltisb 3, -1
4169; PWR7-NEXT:    vadduwm 3, 2, 3
4170; PWR7-NEXT:    xxland 34, 34, 35
4171; PWR7-NEXT:    xxlxor 35, 35, 35
4172; PWR7-NEXT:    vcmpequw 2, 2, 3
4173; PWR7-NEXT:    blr
4174;
4175; PWR8-LABEL: ult_2_v4i32:
4176; PWR8:       # %bb.0:
4177; PWR8-NEXT:    vspltisw 3, 2
4178; PWR8-NEXT:    vpopcntw 2, 2
4179; PWR8-NEXT:    vcmpgtuw 2, 3, 2
4180; PWR8-NEXT:    blr
4181;
4182; PWR9-LABEL: ult_2_v4i32:
4183; PWR9:       # %bb.0:
4184; PWR9-NEXT:    vpopcntw 2, 2
4185; PWR9-NEXT:    vspltisw 3, 2
4186; PWR9-NEXT:    vcmpgtuw 2, 3, 2
4187; PWR9-NEXT:    blr
4188  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
4189  %3 = icmp ult <4 x i32> %2, <i32 2, i32 2, i32 2, i32 2>
4190  %4 = sext <4 x i1> %3 to <4 x i32>
4191  ret <4 x i32> %4
4192}
4193
4194define <4 x i32> @ugt_2_v4i32(<4 x i32> %0) {
4195; PWR5-LABEL: ugt_2_v4i32:
4196; PWR5:       # %bb.0:
4197; PWR5-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
4198; PWR5-NEXT:    vspltisw 4, 1
4199; PWR5-NEXT:    vxor 3, 3, 3
4200; PWR5-NEXT:    addi 3, 3, .LCPI42_0@toc@l
4201; PWR5-NEXT:    lvx 5, 0, 3
4202; PWR5-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
4203; PWR5-NEXT:    addi 3, 3, .LCPI42_1@toc@l
4204; PWR5-NEXT:    vspltisw 0, 2
4205; PWR5-NEXT:    vsrw 4, 2, 4
4206; PWR5-NEXT:    vand 4, 4, 5
4207; PWR5-NEXT:    lvx 5, 0, 3
4208; PWR5-NEXT:    vsubuwm 2, 2, 4
4209; PWR5-NEXT:    vand 4, 2, 5
4210; PWR5-NEXT:    vsrw 2, 2, 0
4211; PWR5-NEXT:    vand 2, 2, 5
4212; PWR5-NEXT:    vspltisw 5, 4
4213; PWR5-NEXT:    vadduwm 2, 4, 2
4214; PWR5-NEXT:    vsrw 4, 2, 5
4215; PWR5-NEXT:    vspltisb 5, 15
4216; PWR5-NEXT:    vadduwm 2, 2, 4
4217; PWR5-NEXT:    vspltisb 4, 1
4218; PWR5-NEXT:    vand 2, 2, 5
4219; PWR5-NEXT:    vspltisw 5, -16
4220; PWR5-NEXT:    vrlw 1, 4, 5
4221; PWR5-NEXT:    vmulouh 4, 2, 4
4222; PWR5-NEXT:    vmsumuhm 2, 2, 1, 3
4223; PWR5-NEXT:    vspltisw 3, 12
4224; PWR5-NEXT:    vadduwm 3, 3, 3
4225; PWR5-NEXT:    vslw 2, 2, 5
4226; PWR5-NEXT:    vadduwm 2, 4, 2
4227; PWR5-NEXT:    vsrw 2, 2, 3
4228; PWR5-NEXT:    vcmpgtuw 2, 2, 0
4229; PWR5-NEXT:    blr
4230;
4231; PWR6-LABEL: ugt_2_v4i32:
4232; PWR6:       # %bb.0:
4233; PWR6-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
4234; PWR6-NEXT:    vspltisw 4, 1
4235; PWR6-NEXT:    vxor 3, 3, 3
4236; PWR6-NEXT:    addi 3, 3, .LCPI42_0@toc@l
4237; PWR6-NEXT:    lvx 5, 0, 3
4238; PWR6-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
4239; PWR6-NEXT:    addi 3, 3, .LCPI42_1@toc@l
4240; PWR6-NEXT:    vspltisw 0, 2
4241; PWR6-NEXT:    vsrw 4, 2, 4
4242; PWR6-NEXT:    vand 4, 4, 5
4243; PWR6-NEXT:    lvx 5, 0, 3
4244; PWR6-NEXT:    vsubuwm 2, 2, 4
4245; PWR6-NEXT:    vand 4, 2, 5
4246; PWR6-NEXT:    vsrw 2, 2, 0
4247; PWR6-NEXT:    vand 2, 2, 5
4248; PWR6-NEXT:    vspltisw 5, 4
4249; PWR6-NEXT:    vadduwm 2, 4, 2
4250; PWR6-NEXT:    vsrw 4, 2, 5
4251; PWR6-NEXT:    vspltisb 5, 15
4252; PWR6-NEXT:    vadduwm 2, 2, 4
4253; PWR6-NEXT:    vspltisb 4, 1
4254; PWR6-NEXT:    vand 2, 2, 5
4255; PWR6-NEXT:    vspltisw 5, -16
4256; PWR6-NEXT:    vrlw 1, 4, 5
4257; PWR6-NEXT:    vmulouh 4, 2, 4
4258; PWR6-NEXT:    vmsumuhm 2, 2, 1, 3
4259; PWR6-NEXT:    vspltisw 3, 12
4260; PWR6-NEXT:    vadduwm 3, 3, 3
4261; PWR6-NEXT:    vslw 2, 2, 5
4262; PWR6-NEXT:    vadduwm 2, 4, 2
4263; PWR6-NEXT:    vsrw 2, 2, 3
4264; PWR6-NEXT:    vcmpgtuw 2, 2, 0
4265; PWR6-NEXT:    blr
4266;
4267; PWR7-LABEL: ugt_2_v4i32:
4268; PWR7:       # %bb.0:
4269; PWR7-NEXT:    vspltisw 3, 1
4270; PWR7-NEXT:    addis 3, 2, .LCPI42_0@toc@ha
4271; PWR7-NEXT:    addi 3, 3, .LCPI42_0@toc@l
4272; PWR7-NEXT:    vspltisw 4, 2
4273; PWR7-NEXT:    lxvw4x 0, 0, 3
4274; PWR7-NEXT:    addis 3, 2, .LCPI42_1@toc@ha
4275; PWR7-NEXT:    vspltisw 5, 4
4276; PWR7-NEXT:    addi 3, 3, .LCPI42_1@toc@l
4277; PWR7-NEXT:    vsrw 3, 2, 3
4278; PWR7-NEXT:    vspltisb 0, 15
4279; PWR7-NEXT:    vspltisb 1, 1
4280; PWR7-NEXT:    vspltisw 6, -16
4281; PWR7-NEXT:    vspltisw 7, 12
4282; PWR7-NEXT:    xxland 35, 35, 0
4283; PWR7-NEXT:    lxvw4x 0, 0, 3
4284; PWR7-NEXT:    vsubuwm 2, 2, 3
4285; PWR7-NEXT:    xxland 35, 34, 0
4286; PWR7-NEXT:    vsrw 2, 2, 4
4287; PWR7-NEXT:    xxland 34, 34, 0
4288; PWR7-NEXT:    vadduwm 2, 3, 2
4289; PWR7-NEXT:    vsrw 3, 2, 5
4290; PWR7-NEXT:    xxlxor 37, 37, 37
4291; PWR7-NEXT:    vadduwm 2, 2, 3
4292; PWR7-NEXT:    vrlw 3, 1, 6
4293; PWR7-NEXT:    xxland 34, 34, 32
4294; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
4295; PWR7-NEXT:    vmulouh 2, 2, 1
4296; PWR7-NEXT:    vslw 3, 3, 6
4297; PWR7-NEXT:    vadduwm 2, 2, 3
4298; PWR7-NEXT:    vadduwm 3, 7, 7
4299; PWR7-NEXT:    vsrw 2, 2, 3
4300; PWR7-NEXT:    vcmpgtuw 2, 2, 4
4301; PWR7-NEXT:    blr
4302;
4303; PWR8-LABEL: ugt_2_v4i32:
4304; PWR8:       # %bb.0:
4305; PWR8-NEXT:    vspltisw 3, 2
4306; PWR8-NEXT:    vpopcntw 2, 2
4307; PWR8-NEXT:    vcmpgtuw 2, 2, 3
4308; PWR8-NEXT:    blr
4309;
4310; PWR9-LABEL: ugt_2_v4i32:
4311; PWR9:       # %bb.0:
4312; PWR9-NEXT:    vpopcntw 2, 2
4313; PWR9-NEXT:    vspltisw 3, 2
4314; PWR9-NEXT:    vcmpgtuw 2, 2, 3
4315; PWR9-NEXT:    blr
4316  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
4317  %3 = icmp ugt <4 x i32> %2, <i32 2, i32 2, i32 2, i32 2>
4318  %4 = sext <4 x i1> %3 to <4 x i32>
4319  ret <4 x i32> %4
4320}
4321
4322define <4 x i32> @ult_3_v4i32(<4 x i32> %0) {
4323; PWR5-LABEL: ult_3_v4i32:
4324; PWR5:       # %bb.0:
4325; PWR5-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
4326; PWR5-NEXT:    vspltisw 4, 1
4327; PWR5-NEXT:    vxor 3, 3, 3
4328; PWR5-NEXT:    addi 3, 3, .LCPI43_0@toc@l
4329; PWR5-NEXT:    lvx 5, 0, 3
4330; PWR5-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
4331; PWR5-NEXT:    addi 3, 3, .LCPI43_1@toc@l
4332; PWR5-NEXT:    vspltisw 0, 2
4333; PWR5-NEXT:    vsrw 4, 2, 4
4334; PWR5-NEXT:    vand 4, 4, 5
4335; PWR5-NEXT:    lvx 5, 0, 3
4336; PWR5-NEXT:    vsubuwm 2, 2, 4
4337; PWR5-NEXT:    vand 4, 2, 5
4338; PWR5-NEXT:    vsrw 2, 2, 0
4339; PWR5-NEXT:    vand 2, 2, 5
4340; PWR5-NEXT:    vspltisw 5, 4
4341; PWR5-NEXT:    vadduwm 2, 4, 2
4342; PWR5-NEXT:    vsrw 4, 2, 5
4343; PWR5-NEXT:    vspltisb 5, 15
4344; PWR5-NEXT:    vadduwm 2, 2, 4
4345; PWR5-NEXT:    vspltisb 4, 1
4346; PWR5-NEXT:    vand 2, 2, 5
4347; PWR5-NEXT:    vspltisw 5, -16
4348; PWR5-NEXT:    vrlw 0, 4, 5
4349; PWR5-NEXT:    vmulouh 4, 2, 4
4350; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
4351; PWR5-NEXT:    vspltisw 3, 12
4352; PWR5-NEXT:    vadduwm 3, 3, 3
4353; PWR5-NEXT:    vslw 2, 2, 5
4354; PWR5-NEXT:    vadduwm 2, 4, 2
4355; PWR5-NEXT:    vsrw 2, 2, 3
4356; PWR5-NEXT:    vspltisw 3, 3
4357; PWR5-NEXT:    vcmpgtuw 2, 3, 2
4358; PWR5-NEXT:    blr
4359;
4360; PWR6-LABEL: ult_3_v4i32:
4361; PWR6:       # %bb.0:
4362; PWR6-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
4363; PWR6-NEXT:    vspltisw 4, 1
4364; PWR6-NEXT:    vxor 3, 3, 3
4365; PWR6-NEXT:    addi 3, 3, .LCPI43_0@toc@l
4366; PWR6-NEXT:    lvx 5, 0, 3
4367; PWR6-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
4368; PWR6-NEXT:    addi 3, 3, .LCPI43_1@toc@l
4369; PWR6-NEXT:    vspltisw 0, 2
4370; PWR6-NEXT:    vsrw 4, 2, 4
4371; PWR6-NEXT:    vand 4, 4, 5
4372; PWR6-NEXT:    lvx 5, 0, 3
4373; PWR6-NEXT:    vsubuwm 2, 2, 4
4374; PWR6-NEXT:    vand 4, 2, 5
4375; PWR6-NEXT:    vsrw 2, 2, 0
4376; PWR6-NEXT:    vand 2, 2, 5
4377; PWR6-NEXT:    vspltisw 5, 4
4378; PWR6-NEXT:    vadduwm 2, 4, 2
4379; PWR6-NEXT:    vsrw 4, 2, 5
4380; PWR6-NEXT:    vspltisb 5, 15
4381; PWR6-NEXT:    vadduwm 2, 2, 4
4382; PWR6-NEXT:    vspltisb 4, 1
4383; PWR6-NEXT:    vand 2, 2, 5
4384; PWR6-NEXT:    vspltisw 5, -16
4385; PWR6-NEXT:    vrlw 0, 4, 5
4386; PWR6-NEXT:    vmulouh 4, 2, 4
4387; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
4388; PWR6-NEXT:    vspltisw 3, 12
4389; PWR6-NEXT:    vadduwm 3, 3, 3
4390; PWR6-NEXT:    vslw 2, 2, 5
4391; PWR6-NEXT:    vadduwm 2, 4, 2
4392; PWR6-NEXT:    vsrw 2, 2, 3
4393; PWR6-NEXT:    vspltisw 3, 3
4394; PWR6-NEXT:    vcmpgtuw 2, 3, 2
4395; PWR6-NEXT:    blr
4396;
4397; PWR7-LABEL: ult_3_v4i32:
4398; PWR7:       # %bb.0:
4399; PWR7-NEXT:    vspltisw 3, 1
4400; PWR7-NEXT:    addis 3, 2, .LCPI43_0@toc@ha
4401; PWR7-NEXT:    addi 3, 3, .LCPI43_0@toc@l
4402; PWR7-NEXT:    vspltisw 4, 2
4403; PWR7-NEXT:    lxvw4x 0, 0, 3
4404; PWR7-NEXT:    addis 3, 2, .LCPI43_1@toc@ha
4405; PWR7-NEXT:    vspltisw 5, 4
4406; PWR7-NEXT:    addi 3, 3, .LCPI43_1@toc@l
4407; PWR7-NEXT:    vsrw 3, 2, 3
4408; PWR7-NEXT:    vspltisb 0, 15
4409; PWR7-NEXT:    vspltisb 1, 1
4410; PWR7-NEXT:    vspltisw 6, -16
4411; PWR7-NEXT:    vspltisw 7, 12
4412; PWR7-NEXT:    xxland 35, 35, 0
4413; PWR7-NEXT:    lxvw4x 0, 0, 3
4414; PWR7-NEXT:    vsubuwm 2, 2, 3
4415; PWR7-NEXT:    vsrw 3, 2, 4
4416; PWR7-NEXT:    xxland 34, 34, 0
4417; PWR7-NEXT:    xxland 35, 35, 0
4418; PWR7-NEXT:    vadduwm 2, 2, 3
4419; PWR7-NEXT:    vsrw 3, 2, 5
4420; PWR7-NEXT:    xxlxor 37, 37, 37
4421; PWR7-NEXT:    vadduwm 2, 2, 3
4422; PWR7-NEXT:    vrlw 3, 1, 6
4423; PWR7-NEXT:    xxland 34, 34, 32
4424; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
4425; PWR7-NEXT:    vmulouh 2, 2, 1
4426; PWR7-NEXT:    vslw 3, 3, 6
4427; PWR7-NEXT:    vadduwm 2, 2, 3
4428; PWR7-NEXT:    vadduwm 3, 7, 7
4429; PWR7-NEXT:    vspltisw 4, 3
4430; PWR7-NEXT:    vsrw 2, 2, 3
4431; PWR7-NEXT:    vcmpgtuw 2, 4, 2
4432; PWR7-NEXT:    blr
4433;
4434; PWR8-LABEL: ult_3_v4i32:
4435; PWR8:       # %bb.0:
4436; PWR8-NEXT:    vspltisw 3, 3
4437; PWR8-NEXT:    vpopcntw 2, 2
4438; PWR8-NEXT:    vcmpgtuw 2, 3, 2
4439; PWR8-NEXT:    blr
4440;
4441; PWR9-LABEL: ult_3_v4i32:
4442; PWR9:       # %bb.0:
4443; PWR9-NEXT:    vpopcntw 2, 2
4444; PWR9-NEXT:    vspltisw 3, 3
4445; PWR9-NEXT:    vcmpgtuw 2, 3, 2
4446; PWR9-NEXT:    blr
4447  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
4448  %3 = icmp ult <4 x i32> %2, <i32 3, i32 3, i32 3, i32 3>
4449  %4 = sext <4 x i1> %3 to <4 x i32>
4450  ret <4 x i32> %4
4451}
4452
4453define <4 x i32> @ugt_3_v4i32(<4 x i32> %0) {
4454; PWR5-LABEL: ugt_3_v4i32:
4455; PWR5:       # %bb.0:
4456; PWR5-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
4457; PWR5-NEXT:    vspltisw 4, 1
4458; PWR5-NEXT:    vxor 3, 3, 3
4459; PWR5-NEXT:    addi 3, 3, .LCPI44_0@toc@l
4460; PWR5-NEXT:    lvx 5, 0, 3
4461; PWR5-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
4462; PWR5-NEXT:    addi 3, 3, .LCPI44_1@toc@l
4463; PWR5-NEXT:    vspltisw 0, 2
4464; PWR5-NEXT:    vsrw 4, 2, 4
4465; PWR5-NEXT:    vand 4, 4, 5
4466; PWR5-NEXT:    lvx 5, 0, 3
4467; PWR5-NEXT:    vsubuwm 2, 2, 4
4468; PWR5-NEXT:    vand 4, 2, 5
4469; PWR5-NEXT:    vsrw 2, 2, 0
4470; PWR5-NEXT:    vand 2, 2, 5
4471; PWR5-NEXT:    vspltisw 5, 4
4472; PWR5-NEXT:    vadduwm 2, 4, 2
4473; PWR5-NEXT:    vsrw 4, 2, 5
4474; PWR5-NEXT:    vspltisb 5, 15
4475; PWR5-NEXT:    vadduwm 2, 2, 4
4476; PWR5-NEXT:    vspltisb 4, 1
4477; PWR5-NEXT:    vand 2, 2, 5
4478; PWR5-NEXT:    vspltisw 5, -16
4479; PWR5-NEXT:    vrlw 0, 4, 5
4480; PWR5-NEXT:    vmulouh 4, 2, 4
4481; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
4482; PWR5-NEXT:    vspltisw 3, 12
4483; PWR5-NEXT:    vadduwm 3, 3, 3
4484; PWR5-NEXT:    vslw 2, 2, 5
4485; PWR5-NEXT:    vadduwm 2, 4, 2
4486; PWR5-NEXT:    vsrw 2, 2, 3
4487; PWR5-NEXT:    vspltisw 3, 3
4488; PWR5-NEXT:    vcmpgtuw 2, 2, 3
4489; PWR5-NEXT:    blr
4490;
4491; PWR6-LABEL: ugt_3_v4i32:
4492; PWR6:       # %bb.0:
4493; PWR6-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
4494; PWR6-NEXT:    vspltisw 4, 1
4495; PWR6-NEXT:    vxor 3, 3, 3
4496; PWR6-NEXT:    addi 3, 3, .LCPI44_0@toc@l
4497; PWR6-NEXT:    lvx 5, 0, 3
4498; PWR6-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
4499; PWR6-NEXT:    addi 3, 3, .LCPI44_1@toc@l
4500; PWR6-NEXT:    vspltisw 0, 2
4501; PWR6-NEXT:    vsrw 4, 2, 4
4502; PWR6-NEXT:    vand 4, 4, 5
4503; PWR6-NEXT:    lvx 5, 0, 3
4504; PWR6-NEXT:    vsubuwm 2, 2, 4
4505; PWR6-NEXT:    vand 4, 2, 5
4506; PWR6-NEXT:    vsrw 2, 2, 0
4507; PWR6-NEXT:    vand 2, 2, 5
4508; PWR6-NEXT:    vspltisw 5, 4
4509; PWR6-NEXT:    vadduwm 2, 4, 2
4510; PWR6-NEXT:    vsrw 4, 2, 5
4511; PWR6-NEXT:    vspltisb 5, 15
4512; PWR6-NEXT:    vadduwm 2, 2, 4
4513; PWR6-NEXT:    vspltisb 4, 1
4514; PWR6-NEXT:    vand 2, 2, 5
4515; PWR6-NEXT:    vspltisw 5, -16
4516; PWR6-NEXT:    vrlw 0, 4, 5
4517; PWR6-NEXT:    vmulouh 4, 2, 4
4518; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
4519; PWR6-NEXT:    vspltisw 3, 12
4520; PWR6-NEXT:    vadduwm 3, 3, 3
4521; PWR6-NEXT:    vslw 2, 2, 5
4522; PWR6-NEXT:    vadduwm 2, 4, 2
4523; PWR6-NEXT:    vsrw 2, 2, 3
4524; PWR6-NEXT:    vspltisw 3, 3
4525; PWR6-NEXT:    vcmpgtuw 2, 2, 3
4526; PWR6-NEXT:    blr
4527;
4528; PWR7-LABEL: ugt_3_v4i32:
4529; PWR7:       # %bb.0:
4530; PWR7-NEXT:    vspltisw 3, 1
4531; PWR7-NEXT:    addis 3, 2, .LCPI44_0@toc@ha
4532; PWR7-NEXT:    addi 3, 3, .LCPI44_0@toc@l
4533; PWR7-NEXT:    vspltisw 4, 2
4534; PWR7-NEXT:    lxvw4x 0, 0, 3
4535; PWR7-NEXT:    addis 3, 2, .LCPI44_1@toc@ha
4536; PWR7-NEXT:    vspltisw 5, 4
4537; PWR7-NEXT:    addi 3, 3, .LCPI44_1@toc@l
4538; PWR7-NEXT:    vsrw 3, 2, 3
4539; PWR7-NEXT:    vspltisb 0, 15
4540; PWR7-NEXT:    vspltisb 1, 1
4541; PWR7-NEXT:    vspltisw 6, -16
4542; PWR7-NEXT:    vspltisw 7, 12
4543; PWR7-NEXT:    xxland 35, 35, 0
4544; PWR7-NEXT:    lxvw4x 0, 0, 3
4545; PWR7-NEXT:    vsubuwm 2, 2, 3
4546; PWR7-NEXT:    vsrw 3, 2, 4
4547; PWR7-NEXT:    xxland 34, 34, 0
4548; PWR7-NEXT:    xxland 35, 35, 0
4549; PWR7-NEXT:    vadduwm 2, 2, 3
4550; PWR7-NEXT:    vsrw 3, 2, 5
4551; PWR7-NEXT:    xxlxor 37, 37, 37
4552; PWR7-NEXT:    vadduwm 2, 2, 3
4553; PWR7-NEXT:    vrlw 3, 1, 6
4554; PWR7-NEXT:    xxland 34, 34, 32
4555; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
4556; PWR7-NEXT:    vmulouh 2, 2, 1
4557; PWR7-NEXT:    vslw 3, 3, 6
4558; PWR7-NEXT:    vadduwm 2, 2, 3
4559; PWR7-NEXT:    vadduwm 3, 7, 7
4560; PWR7-NEXT:    vspltisw 4, 3
4561; PWR7-NEXT:    vsrw 2, 2, 3
4562; PWR7-NEXT:    vcmpgtuw 2, 2, 4
4563; PWR7-NEXT:    blr
4564;
4565; PWR8-LABEL: ugt_3_v4i32:
4566; PWR8:       # %bb.0:
4567; PWR8-NEXT:    vspltisw 3, 3
4568; PWR8-NEXT:    vpopcntw 2, 2
4569; PWR8-NEXT:    vcmpgtuw 2, 2, 3
4570; PWR8-NEXT:    blr
4571;
4572; PWR9-LABEL: ugt_3_v4i32:
4573; PWR9:       # %bb.0:
4574; PWR9-NEXT:    vpopcntw 2, 2
4575; PWR9-NEXT:    vspltisw 3, 3
4576; PWR9-NEXT:    vcmpgtuw 2, 2, 3
4577; PWR9-NEXT:    blr
4578  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
4579  %3 = icmp ugt <4 x i32> %2, <i32 3, i32 3, i32 3, i32 3>
4580  %4 = sext <4 x i1> %3 to <4 x i32>
4581  ret <4 x i32> %4
4582}
4583
4584define <4 x i32> @ult_4_v4i32(<4 x i32> %0) {
4585; PWR5-LABEL: ult_4_v4i32:
4586; PWR5:       # %bb.0:
4587; PWR5-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
4588; PWR5-NEXT:    vspltisw 4, 1
4589; PWR5-NEXT:    vxor 3, 3, 3
4590; PWR5-NEXT:    addi 3, 3, .LCPI45_0@toc@l
4591; PWR5-NEXT:    lvx 5, 0, 3
4592; PWR5-NEXT:    addis 3, 2, .LCPI45_1@toc@ha
4593; PWR5-NEXT:    addi 3, 3, .LCPI45_1@toc@l
4594; PWR5-NEXT:    vspltisw 0, 2
4595; PWR5-NEXT:    vsrw 4, 2, 4
4596; PWR5-NEXT:    vand 4, 4, 5
4597; PWR5-NEXT:    lvx 5, 0, 3
4598; PWR5-NEXT:    vsubuwm 2, 2, 4
4599; PWR5-NEXT:    vand 4, 2, 5
4600; PWR5-NEXT:    vsrw 2, 2, 0
4601; PWR5-NEXT:    vspltisb 0, 15
4602; PWR5-NEXT:    vand 2, 2, 5
4603; PWR5-NEXT:    vspltisw 5, 4
4604; PWR5-NEXT:    vadduwm 2, 4, 2
4605; PWR5-NEXT:    vsrw 4, 2, 5
4606; PWR5-NEXT:    vadduwm 2, 2, 4
4607; PWR5-NEXT:    vspltisb 4, 1
4608; PWR5-NEXT:    vand 2, 2, 0
4609; PWR5-NEXT:    vspltisw 0, -16
4610; PWR5-NEXT:    vrlw 1, 4, 0
4611; PWR5-NEXT:    vmulouh 4, 2, 4
4612; PWR5-NEXT:    vmsumuhm 2, 2, 1, 3
4613; PWR5-NEXT:    vspltisw 3, 12
4614; PWR5-NEXT:    vadduwm 3, 3, 3
4615; PWR5-NEXT:    vslw 2, 2, 0
4616; PWR5-NEXT:    vadduwm 2, 4, 2
4617; PWR5-NEXT:    vsrw 2, 2, 3
4618; PWR5-NEXT:    vcmpgtuw 2, 5, 2
4619; PWR5-NEXT:    blr
4620;
4621; PWR6-LABEL: ult_4_v4i32:
4622; PWR6:       # %bb.0:
4623; PWR6-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
4624; PWR6-NEXT:    vspltisw 4, 1
4625; PWR6-NEXT:    vxor 3, 3, 3
4626; PWR6-NEXT:    addi 3, 3, .LCPI45_0@toc@l
4627; PWR6-NEXT:    lvx 5, 0, 3
4628; PWR6-NEXT:    addis 3, 2, .LCPI45_1@toc@ha
4629; PWR6-NEXT:    addi 3, 3, .LCPI45_1@toc@l
4630; PWR6-NEXT:    vspltisw 0, 2
4631; PWR6-NEXT:    vsrw 4, 2, 4
4632; PWR6-NEXT:    vand 4, 4, 5
4633; PWR6-NEXT:    lvx 5, 0, 3
4634; PWR6-NEXT:    vsubuwm 2, 2, 4
4635; PWR6-NEXT:    vand 4, 2, 5
4636; PWR6-NEXT:    vsrw 2, 2, 0
4637; PWR6-NEXT:    vspltisb 0, 15
4638; PWR6-NEXT:    vand 2, 2, 5
4639; PWR6-NEXT:    vspltisw 5, 4
4640; PWR6-NEXT:    vadduwm 2, 4, 2
4641; PWR6-NEXT:    vsrw 4, 2, 5
4642; PWR6-NEXT:    vadduwm 2, 2, 4
4643; PWR6-NEXT:    vspltisb 4, 1
4644; PWR6-NEXT:    vand 2, 2, 0
4645; PWR6-NEXT:    vspltisw 0, -16
4646; PWR6-NEXT:    vrlw 1, 4, 0
4647; PWR6-NEXT:    vmulouh 4, 2, 4
4648; PWR6-NEXT:    vmsumuhm 2, 2, 1, 3
4649; PWR6-NEXT:    vspltisw 3, 12
4650; PWR6-NEXT:    vadduwm 3, 3, 3
4651; PWR6-NEXT:    vslw 2, 2, 0
4652; PWR6-NEXT:    vadduwm 2, 4, 2
4653; PWR6-NEXT:    vsrw 2, 2, 3
4654; PWR6-NEXT:    vcmpgtuw 2, 5, 2
4655; PWR6-NEXT:    blr
4656;
4657; PWR7-LABEL: ult_4_v4i32:
4658; PWR7:       # %bb.0:
4659; PWR7-NEXT:    vspltisw 3, 1
4660; PWR7-NEXT:    addis 3, 2, .LCPI45_0@toc@ha
4661; PWR7-NEXT:    addi 3, 3, .LCPI45_0@toc@l
4662; PWR7-NEXT:    vspltisw 4, 2
4663; PWR7-NEXT:    lxvw4x 0, 0, 3
4664; PWR7-NEXT:    addis 3, 2, .LCPI45_1@toc@ha
4665; PWR7-NEXT:    vspltisw 5, 4
4666; PWR7-NEXT:    addi 3, 3, .LCPI45_1@toc@l
4667; PWR7-NEXT:    vsrw 3, 2, 3
4668; PWR7-NEXT:    vspltisb 0, 15
4669; PWR7-NEXT:    vspltisb 1, 1
4670; PWR7-NEXT:    vspltisw 6, -16
4671; PWR7-NEXT:    vspltisw 7, 12
4672; PWR7-NEXT:    xxland 35, 35, 0
4673; PWR7-NEXT:    lxvw4x 0, 0, 3
4674; PWR7-NEXT:    vsubuwm 2, 2, 3
4675; PWR7-NEXT:    vsrw 3, 2, 4
4676; PWR7-NEXT:    xxland 34, 34, 0
4677; PWR7-NEXT:    xxlxor 36, 36, 36
4678; PWR7-NEXT:    xxland 35, 35, 0
4679; PWR7-NEXT:    vadduwm 2, 2, 3
4680; PWR7-NEXT:    vsrw 3, 2, 5
4681; PWR7-NEXT:    vadduwm 2, 2, 3
4682; PWR7-NEXT:    vrlw 3, 1, 6
4683; PWR7-NEXT:    xxland 34, 34, 32
4684; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
4685; PWR7-NEXT:    vmulouh 2, 2, 1
4686; PWR7-NEXT:    vslw 3, 3, 6
4687; PWR7-NEXT:    vadduwm 2, 2, 3
4688; PWR7-NEXT:    vadduwm 3, 7, 7
4689; PWR7-NEXT:    vsrw 2, 2, 3
4690; PWR7-NEXT:    vcmpgtuw 2, 5, 2
4691; PWR7-NEXT:    blr
4692;
4693; PWR8-LABEL: ult_4_v4i32:
4694; PWR8:       # %bb.0:
4695; PWR8-NEXT:    vspltisw 3, 4
4696; PWR8-NEXT:    vpopcntw 2, 2
4697; PWR8-NEXT:    vcmpgtuw 2, 3, 2
4698; PWR8-NEXT:    blr
4699;
4700; PWR9-LABEL: ult_4_v4i32:
4701; PWR9:       # %bb.0:
4702; PWR9-NEXT:    vpopcntw 2, 2
4703; PWR9-NEXT:    vspltisw 3, 4
4704; PWR9-NEXT:    vcmpgtuw 2, 3, 2
4705; PWR9-NEXT:    blr
4706  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
4707  %3 = icmp ult <4 x i32> %2, <i32 4, i32 4, i32 4, i32 4>
4708  %4 = sext <4 x i1> %3 to <4 x i32>
4709  ret <4 x i32> %4
4710}
4711
4712define <4 x i32> @ugt_4_v4i32(<4 x i32> %0) {
4713; PWR5-LABEL: ugt_4_v4i32:
4714; PWR5:       # %bb.0:
4715; PWR5-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
4716; PWR5-NEXT:    vspltisw 4, 1
4717; PWR5-NEXT:    vxor 3, 3, 3
4718; PWR5-NEXT:    addi 3, 3, .LCPI46_0@toc@l
4719; PWR5-NEXT:    lvx 5, 0, 3
4720; PWR5-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
4721; PWR5-NEXT:    addi 3, 3, .LCPI46_1@toc@l
4722; PWR5-NEXT:    vspltisw 0, 2
4723; PWR5-NEXT:    vsrw 4, 2, 4
4724; PWR5-NEXT:    vand 4, 4, 5
4725; PWR5-NEXT:    lvx 5, 0, 3
4726; PWR5-NEXT:    vsubuwm 2, 2, 4
4727; PWR5-NEXT:    vand 4, 2, 5
4728; PWR5-NEXT:    vsrw 2, 2, 0
4729; PWR5-NEXT:    vspltisb 0, 15
4730; PWR5-NEXT:    vand 2, 2, 5
4731; PWR5-NEXT:    vspltisw 5, 4
4732; PWR5-NEXT:    vadduwm 2, 4, 2
4733; PWR5-NEXT:    vsrw 4, 2, 5
4734; PWR5-NEXT:    vadduwm 2, 2, 4
4735; PWR5-NEXT:    vspltisb 4, 1
4736; PWR5-NEXT:    vand 2, 2, 0
4737; PWR5-NEXT:    vspltisw 0, -16
4738; PWR5-NEXT:    vrlw 1, 4, 0
4739; PWR5-NEXT:    vmulouh 4, 2, 4
4740; PWR5-NEXT:    vmsumuhm 2, 2, 1, 3
4741; PWR5-NEXT:    vspltisw 3, 12
4742; PWR5-NEXT:    vadduwm 3, 3, 3
4743; PWR5-NEXT:    vslw 2, 2, 0
4744; PWR5-NEXT:    vadduwm 2, 4, 2
4745; PWR5-NEXT:    vsrw 2, 2, 3
4746; PWR5-NEXT:    vcmpgtuw 2, 2, 5
4747; PWR5-NEXT:    blr
4748;
4749; PWR6-LABEL: ugt_4_v4i32:
4750; PWR6:       # %bb.0:
4751; PWR6-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
4752; PWR6-NEXT:    vspltisw 4, 1
4753; PWR6-NEXT:    vxor 3, 3, 3
4754; PWR6-NEXT:    addi 3, 3, .LCPI46_0@toc@l
4755; PWR6-NEXT:    lvx 5, 0, 3
4756; PWR6-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
4757; PWR6-NEXT:    addi 3, 3, .LCPI46_1@toc@l
4758; PWR6-NEXT:    vspltisw 0, 2
4759; PWR6-NEXT:    vsrw 4, 2, 4
4760; PWR6-NEXT:    vand 4, 4, 5
4761; PWR6-NEXT:    lvx 5, 0, 3
4762; PWR6-NEXT:    vsubuwm 2, 2, 4
4763; PWR6-NEXT:    vand 4, 2, 5
4764; PWR6-NEXT:    vsrw 2, 2, 0
4765; PWR6-NEXT:    vspltisb 0, 15
4766; PWR6-NEXT:    vand 2, 2, 5
4767; PWR6-NEXT:    vspltisw 5, 4
4768; PWR6-NEXT:    vadduwm 2, 4, 2
4769; PWR6-NEXT:    vsrw 4, 2, 5
4770; PWR6-NEXT:    vadduwm 2, 2, 4
4771; PWR6-NEXT:    vspltisb 4, 1
4772; PWR6-NEXT:    vand 2, 2, 0
4773; PWR6-NEXT:    vspltisw 0, -16
4774; PWR6-NEXT:    vrlw 1, 4, 0
4775; PWR6-NEXT:    vmulouh 4, 2, 4
4776; PWR6-NEXT:    vmsumuhm 2, 2, 1, 3
4777; PWR6-NEXT:    vspltisw 3, 12
4778; PWR6-NEXT:    vadduwm 3, 3, 3
4779; PWR6-NEXT:    vslw 2, 2, 0
4780; PWR6-NEXT:    vadduwm 2, 4, 2
4781; PWR6-NEXT:    vsrw 2, 2, 3
4782; PWR6-NEXT:    vcmpgtuw 2, 2, 5
4783; PWR6-NEXT:    blr
4784;
4785; PWR7-LABEL: ugt_4_v4i32:
4786; PWR7:       # %bb.0:
4787; PWR7-NEXT:    vspltisw 3, 1
4788; PWR7-NEXT:    addis 3, 2, .LCPI46_0@toc@ha
4789; PWR7-NEXT:    addi 3, 3, .LCPI46_0@toc@l
4790; PWR7-NEXT:    vspltisw 4, 2
4791; PWR7-NEXT:    lxvw4x 0, 0, 3
4792; PWR7-NEXT:    addis 3, 2, .LCPI46_1@toc@ha
4793; PWR7-NEXT:    vspltisw 5, 4
4794; PWR7-NEXT:    addi 3, 3, .LCPI46_1@toc@l
4795; PWR7-NEXT:    vsrw 3, 2, 3
4796; PWR7-NEXT:    vspltisb 0, 15
4797; PWR7-NEXT:    vspltisb 1, 1
4798; PWR7-NEXT:    vspltisw 6, -16
4799; PWR7-NEXT:    vspltisw 7, 12
4800; PWR7-NEXT:    xxland 35, 35, 0
4801; PWR7-NEXT:    lxvw4x 0, 0, 3
4802; PWR7-NEXT:    vsubuwm 2, 2, 3
4803; PWR7-NEXT:    vsrw 3, 2, 4
4804; PWR7-NEXT:    xxland 34, 34, 0
4805; PWR7-NEXT:    xxlxor 36, 36, 36
4806; PWR7-NEXT:    xxland 35, 35, 0
4807; PWR7-NEXT:    vadduwm 2, 2, 3
4808; PWR7-NEXT:    vsrw 3, 2, 5
4809; PWR7-NEXT:    vadduwm 2, 2, 3
4810; PWR7-NEXT:    vrlw 3, 1, 6
4811; PWR7-NEXT:    xxland 34, 34, 32
4812; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
4813; PWR7-NEXT:    vmulouh 2, 2, 1
4814; PWR7-NEXT:    vslw 3, 3, 6
4815; PWR7-NEXT:    vadduwm 2, 2, 3
4816; PWR7-NEXT:    vadduwm 3, 7, 7
4817; PWR7-NEXT:    vsrw 2, 2, 3
4818; PWR7-NEXT:    vcmpgtuw 2, 2, 5
4819; PWR7-NEXT:    blr
4820;
4821; PWR8-LABEL: ugt_4_v4i32:
4822; PWR8:       # %bb.0:
4823; PWR8-NEXT:    vspltisw 3, 4
4824; PWR8-NEXT:    vpopcntw 2, 2
4825; PWR8-NEXT:    vcmpgtuw 2, 2, 3
4826; PWR8-NEXT:    blr
4827;
4828; PWR9-LABEL: ugt_4_v4i32:
4829; PWR9:       # %bb.0:
4830; PWR9-NEXT:    vpopcntw 2, 2
4831; PWR9-NEXT:    vspltisw 3, 4
4832; PWR9-NEXT:    vcmpgtuw 2, 2, 3
4833; PWR9-NEXT:    blr
4834  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
4835  %3 = icmp ugt <4 x i32> %2, <i32 4, i32 4, i32 4, i32 4>
4836  %4 = sext <4 x i1> %3 to <4 x i32>
4837  ret <4 x i32> %4
4838}
4839
4840define <4 x i32> @ult_5_v4i32(<4 x i32> %0) {
4841; PWR5-LABEL: ult_5_v4i32:
4842; PWR5:       # %bb.0:
4843; PWR5-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
4844; PWR5-NEXT:    vspltisw 4, 1
4845; PWR5-NEXT:    vxor 3, 3, 3
4846; PWR5-NEXT:    addi 3, 3, .LCPI47_0@toc@l
4847; PWR5-NEXT:    lvx 5, 0, 3
4848; PWR5-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
4849; PWR5-NEXT:    addi 3, 3, .LCPI47_1@toc@l
4850; PWR5-NEXT:    vspltisw 0, 2
4851; PWR5-NEXT:    vsrw 4, 2, 4
4852; PWR5-NEXT:    vand 4, 4, 5
4853; PWR5-NEXT:    lvx 5, 0, 3
4854; PWR5-NEXT:    vsubuwm 2, 2, 4
4855; PWR5-NEXT:    vand 4, 2, 5
4856; PWR5-NEXT:    vsrw 2, 2, 0
4857; PWR5-NEXT:    vand 2, 2, 5
4858; PWR5-NEXT:    vspltisw 5, 4
4859; PWR5-NEXT:    vadduwm 2, 4, 2
4860; PWR5-NEXT:    vsrw 4, 2, 5
4861; PWR5-NEXT:    vspltisb 5, 15
4862; PWR5-NEXT:    vadduwm 2, 2, 4
4863; PWR5-NEXT:    vspltisb 4, 1
4864; PWR5-NEXT:    vand 2, 2, 5
4865; PWR5-NEXT:    vspltisw 5, -16
4866; PWR5-NEXT:    vrlw 0, 4, 5
4867; PWR5-NEXT:    vmulouh 4, 2, 4
4868; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
4869; PWR5-NEXT:    vspltisw 3, 12
4870; PWR5-NEXT:    vadduwm 3, 3, 3
4871; PWR5-NEXT:    vslw 2, 2, 5
4872; PWR5-NEXT:    vadduwm 2, 4, 2
4873; PWR5-NEXT:    vsrw 2, 2, 3
4874; PWR5-NEXT:    vspltisw 3, 5
4875; PWR5-NEXT:    vcmpgtuw 2, 3, 2
4876; PWR5-NEXT:    blr
4877;
4878; PWR6-LABEL: ult_5_v4i32:
4879; PWR6:       # %bb.0:
4880; PWR6-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
4881; PWR6-NEXT:    vspltisw 4, 1
4882; PWR6-NEXT:    vxor 3, 3, 3
4883; PWR6-NEXT:    addi 3, 3, .LCPI47_0@toc@l
4884; PWR6-NEXT:    lvx 5, 0, 3
4885; PWR6-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
4886; PWR6-NEXT:    addi 3, 3, .LCPI47_1@toc@l
4887; PWR6-NEXT:    vspltisw 0, 2
4888; PWR6-NEXT:    vsrw 4, 2, 4
4889; PWR6-NEXT:    vand 4, 4, 5
4890; PWR6-NEXT:    lvx 5, 0, 3
4891; PWR6-NEXT:    vsubuwm 2, 2, 4
4892; PWR6-NEXT:    vand 4, 2, 5
4893; PWR6-NEXT:    vsrw 2, 2, 0
4894; PWR6-NEXT:    vand 2, 2, 5
4895; PWR6-NEXT:    vspltisw 5, 4
4896; PWR6-NEXT:    vadduwm 2, 4, 2
4897; PWR6-NEXT:    vsrw 4, 2, 5
4898; PWR6-NEXT:    vspltisb 5, 15
4899; PWR6-NEXT:    vadduwm 2, 2, 4
4900; PWR6-NEXT:    vspltisb 4, 1
4901; PWR6-NEXT:    vand 2, 2, 5
4902; PWR6-NEXT:    vspltisw 5, -16
4903; PWR6-NEXT:    vrlw 0, 4, 5
4904; PWR6-NEXT:    vmulouh 4, 2, 4
4905; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
4906; PWR6-NEXT:    vspltisw 3, 12
4907; PWR6-NEXT:    vadduwm 3, 3, 3
4908; PWR6-NEXT:    vslw 2, 2, 5
4909; PWR6-NEXT:    vadduwm 2, 4, 2
4910; PWR6-NEXT:    vsrw 2, 2, 3
4911; PWR6-NEXT:    vspltisw 3, 5
4912; PWR6-NEXT:    vcmpgtuw 2, 3, 2
4913; PWR6-NEXT:    blr
4914;
4915; PWR7-LABEL: ult_5_v4i32:
4916; PWR7:       # %bb.0:
4917; PWR7-NEXT:    vspltisw 3, 1
4918; PWR7-NEXT:    addis 3, 2, .LCPI47_0@toc@ha
4919; PWR7-NEXT:    addi 3, 3, .LCPI47_0@toc@l
4920; PWR7-NEXT:    vspltisw 4, 2
4921; PWR7-NEXT:    lxvw4x 0, 0, 3
4922; PWR7-NEXT:    addis 3, 2, .LCPI47_1@toc@ha
4923; PWR7-NEXT:    vspltisw 5, 4
4924; PWR7-NEXT:    addi 3, 3, .LCPI47_1@toc@l
4925; PWR7-NEXT:    vsrw 3, 2, 3
4926; PWR7-NEXT:    vspltisb 0, 15
4927; PWR7-NEXT:    vspltisb 1, 1
4928; PWR7-NEXT:    vspltisw 6, -16
4929; PWR7-NEXT:    vspltisw 7, 12
4930; PWR7-NEXT:    xxland 35, 35, 0
4931; PWR7-NEXT:    lxvw4x 0, 0, 3
4932; PWR7-NEXT:    vsubuwm 2, 2, 3
4933; PWR7-NEXT:    vsrw 3, 2, 4
4934; PWR7-NEXT:    xxland 34, 34, 0
4935; PWR7-NEXT:    xxland 35, 35, 0
4936; PWR7-NEXT:    vadduwm 2, 2, 3
4937; PWR7-NEXT:    vsrw 3, 2, 5
4938; PWR7-NEXT:    xxlxor 37, 37, 37
4939; PWR7-NEXT:    vadduwm 2, 2, 3
4940; PWR7-NEXT:    vrlw 3, 1, 6
4941; PWR7-NEXT:    xxland 34, 34, 32
4942; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
4943; PWR7-NEXT:    vmulouh 2, 2, 1
4944; PWR7-NEXT:    vslw 3, 3, 6
4945; PWR7-NEXT:    vadduwm 2, 2, 3
4946; PWR7-NEXT:    vadduwm 3, 7, 7
4947; PWR7-NEXT:    vspltisw 4, 5
4948; PWR7-NEXT:    vsrw 2, 2, 3
4949; PWR7-NEXT:    vcmpgtuw 2, 4, 2
4950; PWR7-NEXT:    blr
4951;
4952; PWR8-LABEL: ult_5_v4i32:
4953; PWR8:       # %bb.0:
4954; PWR8-NEXT:    vspltisw 3, 5
4955; PWR8-NEXT:    vpopcntw 2, 2
4956; PWR8-NEXT:    vcmpgtuw 2, 3, 2
4957; PWR8-NEXT:    blr
4958;
4959; PWR9-LABEL: ult_5_v4i32:
4960; PWR9:       # %bb.0:
4961; PWR9-NEXT:    vpopcntw 2, 2
4962; PWR9-NEXT:    vspltisw 3, 5
4963; PWR9-NEXT:    vcmpgtuw 2, 3, 2
4964; PWR9-NEXT:    blr
4965  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
4966  %3 = icmp ult <4 x i32> %2, <i32 5, i32 5, i32 5, i32 5>
4967  %4 = sext <4 x i1> %3 to <4 x i32>
4968  ret <4 x i32> %4
4969}
4970
4971define <4 x i32> @ugt_5_v4i32(<4 x i32> %0) {
4972; PWR5-LABEL: ugt_5_v4i32:
4973; PWR5:       # %bb.0:
4974; PWR5-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
4975; PWR5-NEXT:    vspltisw 4, 1
4976; PWR5-NEXT:    vxor 3, 3, 3
4977; PWR5-NEXT:    addi 3, 3, .LCPI48_0@toc@l
4978; PWR5-NEXT:    lvx 5, 0, 3
4979; PWR5-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
4980; PWR5-NEXT:    addi 3, 3, .LCPI48_1@toc@l
4981; PWR5-NEXT:    vspltisw 0, 2
4982; PWR5-NEXT:    vsrw 4, 2, 4
4983; PWR5-NEXT:    vand 4, 4, 5
4984; PWR5-NEXT:    lvx 5, 0, 3
4985; PWR5-NEXT:    vsubuwm 2, 2, 4
4986; PWR5-NEXT:    vand 4, 2, 5
4987; PWR5-NEXT:    vsrw 2, 2, 0
4988; PWR5-NEXT:    vand 2, 2, 5
4989; PWR5-NEXT:    vspltisw 5, 4
4990; PWR5-NEXT:    vadduwm 2, 4, 2
4991; PWR5-NEXT:    vsrw 4, 2, 5
4992; PWR5-NEXT:    vspltisb 5, 15
4993; PWR5-NEXT:    vadduwm 2, 2, 4
4994; PWR5-NEXT:    vspltisb 4, 1
4995; PWR5-NEXT:    vand 2, 2, 5
4996; PWR5-NEXT:    vspltisw 5, -16
4997; PWR5-NEXT:    vrlw 0, 4, 5
4998; PWR5-NEXT:    vmulouh 4, 2, 4
4999; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
5000; PWR5-NEXT:    vspltisw 3, 12
5001; PWR5-NEXT:    vadduwm 3, 3, 3
5002; PWR5-NEXT:    vslw 2, 2, 5
5003; PWR5-NEXT:    vadduwm 2, 4, 2
5004; PWR5-NEXT:    vsrw 2, 2, 3
5005; PWR5-NEXT:    vspltisw 3, 5
5006; PWR5-NEXT:    vcmpgtuw 2, 2, 3
5007; PWR5-NEXT:    blr
5008;
5009; PWR6-LABEL: ugt_5_v4i32:
5010; PWR6:       # %bb.0:
5011; PWR6-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
5012; PWR6-NEXT:    vspltisw 4, 1
5013; PWR6-NEXT:    vxor 3, 3, 3
5014; PWR6-NEXT:    addi 3, 3, .LCPI48_0@toc@l
5015; PWR6-NEXT:    lvx 5, 0, 3
5016; PWR6-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
5017; PWR6-NEXT:    addi 3, 3, .LCPI48_1@toc@l
5018; PWR6-NEXT:    vspltisw 0, 2
5019; PWR6-NEXT:    vsrw 4, 2, 4
5020; PWR6-NEXT:    vand 4, 4, 5
5021; PWR6-NEXT:    lvx 5, 0, 3
5022; PWR6-NEXT:    vsubuwm 2, 2, 4
5023; PWR6-NEXT:    vand 4, 2, 5
5024; PWR6-NEXT:    vsrw 2, 2, 0
5025; PWR6-NEXT:    vand 2, 2, 5
5026; PWR6-NEXT:    vspltisw 5, 4
5027; PWR6-NEXT:    vadduwm 2, 4, 2
5028; PWR6-NEXT:    vsrw 4, 2, 5
5029; PWR6-NEXT:    vspltisb 5, 15
5030; PWR6-NEXT:    vadduwm 2, 2, 4
5031; PWR6-NEXT:    vspltisb 4, 1
5032; PWR6-NEXT:    vand 2, 2, 5
5033; PWR6-NEXT:    vspltisw 5, -16
5034; PWR6-NEXT:    vrlw 0, 4, 5
5035; PWR6-NEXT:    vmulouh 4, 2, 4
5036; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
5037; PWR6-NEXT:    vspltisw 3, 12
5038; PWR6-NEXT:    vadduwm 3, 3, 3
5039; PWR6-NEXT:    vslw 2, 2, 5
5040; PWR6-NEXT:    vadduwm 2, 4, 2
5041; PWR6-NEXT:    vsrw 2, 2, 3
5042; PWR6-NEXT:    vspltisw 3, 5
5043; PWR6-NEXT:    vcmpgtuw 2, 2, 3
5044; PWR6-NEXT:    blr
5045;
5046; PWR7-LABEL: ugt_5_v4i32:
5047; PWR7:       # %bb.0:
5048; PWR7-NEXT:    vspltisw 3, 1
5049; PWR7-NEXT:    addis 3, 2, .LCPI48_0@toc@ha
5050; PWR7-NEXT:    addi 3, 3, .LCPI48_0@toc@l
5051; PWR7-NEXT:    vspltisw 4, 2
5052; PWR7-NEXT:    lxvw4x 0, 0, 3
5053; PWR7-NEXT:    addis 3, 2, .LCPI48_1@toc@ha
5054; PWR7-NEXT:    vspltisw 5, 4
5055; PWR7-NEXT:    addi 3, 3, .LCPI48_1@toc@l
5056; PWR7-NEXT:    vsrw 3, 2, 3
5057; PWR7-NEXT:    vspltisb 0, 15
5058; PWR7-NEXT:    vspltisb 1, 1
5059; PWR7-NEXT:    vspltisw 6, -16
5060; PWR7-NEXT:    vspltisw 7, 12
5061; PWR7-NEXT:    xxland 35, 35, 0
5062; PWR7-NEXT:    lxvw4x 0, 0, 3
5063; PWR7-NEXT:    vsubuwm 2, 2, 3
5064; PWR7-NEXT:    vsrw 3, 2, 4
5065; PWR7-NEXT:    xxland 34, 34, 0
5066; PWR7-NEXT:    xxland 35, 35, 0
5067; PWR7-NEXT:    vadduwm 2, 2, 3
5068; PWR7-NEXT:    vsrw 3, 2, 5
5069; PWR7-NEXT:    xxlxor 37, 37, 37
5070; PWR7-NEXT:    vadduwm 2, 2, 3
5071; PWR7-NEXT:    vrlw 3, 1, 6
5072; PWR7-NEXT:    xxland 34, 34, 32
5073; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
5074; PWR7-NEXT:    vmulouh 2, 2, 1
5075; PWR7-NEXT:    vslw 3, 3, 6
5076; PWR7-NEXT:    vadduwm 2, 2, 3
5077; PWR7-NEXT:    vadduwm 3, 7, 7
5078; PWR7-NEXT:    vspltisw 4, 5
5079; PWR7-NEXT:    vsrw 2, 2, 3
5080; PWR7-NEXT:    vcmpgtuw 2, 2, 4
5081; PWR7-NEXT:    blr
5082;
5083; PWR8-LABEL: ugt_5_v4i32:
5084; PWR8:       # %bb.0:
5085; PWR8-NEXT:    vspltisw 3, 5
5086; PWR8-NEXT:    vpopcntw 2, 2
5087; PWR8-NEXT:    vcmpgtuw 2, 2, 3
5088; PWR8-NEXT:    blr
5089;
5090; PWR9-LABEL: ugt_5_v4i32:
5091; PWR9:       # %bb.0:
5092; PWR9-NEXT:    vpopcntw 2, 2
5093; PWR9-NEXT:    vspltisw 3, 5
5094; PWR9-NEXT:    vcmpgtuw 2, 2, 3
5095; PWR9-NEXT:    blr
5096  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5097  %3 = icmp ugt <4 x i32> %2, <i32 5, i32 5, i32 5, i32 5>
5098  %4 = sext <4 x i1> %3 to <4 x i32>
5099  ret <4 x i32> %4
5100}
5101
5102define <4 x i32> @ult_6_v4i32(<4 x i32> %0) {
5103; PWR5-LABEL: ult_6_v4i32:
5104; PWR5:       # %bb.0:
5105; PWR5-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
5106; PWR5-NEXT:    vspltisw 4, 1
5107; PWR5-NEXT:    vxor 3, 3, 3
5108; PWR5-NEXT:    addi 3, 3, .LCPI49_0@toc@l
5109; PWR5-NEXT:    lvx 5, 0, 3
5110; PWR5-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
5111; PWR5-NEXT:    addi 3, 3, .LCPI49_1@toc@l
5112; PWR5-NEXT:    vspltisw 0, 2
5113; PWR5-NEXT:    vsrw 4, 2, 4
5114; PWR5-NEXT:    vand 4, 4, 5
5115; PWR5-NEXT:    lvx 5, 0, 3
5116; PWR5-NEXT:    vsubuwm 2, 2, 4
5117; PWR5-NEXT:    vand 4, 2, 5
5118; PWR5-NEXT:    vsrw 2, 2, 0
5119; PWR5-NEXT:    vand 2, 2, 5
5120; PWR5-NEXT:    vspltisw 5, 4
5121; PWR5-NEXT:    vadduwm 2, 4, 2
5122; PWR5-NEXT:    vsrw 4, 2, 5
5123; PWR5-NEXT:    vspltisb 5, 15
5124; PWR5-NEXT:    vadduwm 2, 2, 4
5125; PWR5-NEXT:    vspltisb 4, 1
5126; PWR5-NEXT:    vand 2, 2, 5
5127; PWR5-NEXT:    vspltisw 5, -16
5128; PWR5-NEXT:    vrlw 0, 4, 5
5129; PWR5-NEXT:    vmulouh 4, 2, 4
5130; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
5131; PWR5-NEXT:    vspltisw 3, 12
5132; PWR5-NEXT:    vadduwm 3, 3, 3
5133; PWR5-NEXT:    vslw 2, 2, 5
5134; PWR5-NEXT:    vadduwm 2, 4, 2
5135; PWR5-NEXT:    vsrw 2, 2, 3
5136; PWR5-NEXT:    vspltisw 3, 6
5137; PWR5-NEXT:    vcmpgtuw 2, 3, 2
5138; PWR5-NEXT:    blr
5139;
5140; PWR6-LABEL: ult_6_v4i32:
5141; PWR6:       # %bb.0:
5142; PWR6-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
5143; PWR6-NEXT:    vspltisw 4, 1
5144; PWR6-NEXT:    vxor 3, 3, 3
5145; PWR6-NEXT:    addi 3, 3, .LCPI49_0@toc@l
5146; PWR6-NEXT:    lvx 5, 0, 3
5147; PWR6-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
5148; PWR6-NEXT:    addi 3, 3, .LCPI49_1@toc@l
5149; PWR6-NEXT:    vspltisw 0, 2
5150; PWR6-NEXT:    vsrw 4, 2, 4
5151; PWR6-NEXT:    vand 4, 4, 5
5152; PWR6-NEXT:    lvx 5, 0, 3
5153; PWR6-NEXT:    vsubuwm 2, 2, 4
5154; PWR6-NEXT:    vand 4, 2, 5
5155; PWR6-NEXT:    vsrw 2, 2, 0
5156; PWR6-NEXT:    vand 2, 2, 5
5157; PWR6-NEXT:    vspltisw 5, 4
5158; PWR6-NEXT:    vadduwm 2, 4, 2
5159; PWR6-NEXT:    vsrw 4, 2, 5
5160; PWR6-NEXT:    vspltisb 5, 15
5161; PWR6-NEXT:    vadduwm 2, 2, 4
5162; PWR6-NEXT:    vspltisb 4, 1
5163; PWR6-NEXT:    vand 2, 2, 5
5164; PWR6-NEXT:    vspltisw 5, -16
5165; PWR6-NEXT:    vrlw 0, 4, 5
5166; PWR6-NEXT:    vmulouh 4, 2, 4
5167; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
5168; PWR6-NEXT:    vspltisw 3, 12
5169; PWR6-NEXT:    vadduwm 3, 3, 3
5170; PWR6-NEXT:    vslw 2, 2, 5
5171; PWR6-NEXT:    vadduwm 2, 4, 2
5172; PWR6-NEXT:    vsrw 2, 2, 3
5173; PWR6-NEXT:    vspltisw 3, 6
5174; PWR6-NEXT:    vcmpgtuw 2, 3, 2
5175; PWR6-NEXT:    blr
5176;
5177; PWR7-LABEL: ult_6_v4i32:
5178; PWR7:       # %bb.0:
5179; PWR7-NEXT:    vspltisw 3, 1
5180; PWR7-NEXT:    addis 3, 2, .LCPI49_0@toc@ha
5181; PWR7-NEXT:    addi 3, 3, .LCPI49_0@toc@l
5182; PWR7-NEXT:    vspltisw 4, 2
5183; PWR7-NEXT:    lxvw4x 0, 0, 3
5184; PWR7-NEXT:    addis 3, 2, .LCPI49_1@toc@ha
5185; PWR7-NEXT:    vspltisw 5, 4
5186; PWR7-NEXT:    addi 3, 3, .LCPI49_1@toc@l
5187; PWR7-NEXT:    vsrw 3, 2, 3
5188; PWR7-NEXT:    vspltisb 0, 15
5189; PWR7-NEXT:    vspltisb 1, 1
5190; PWR7-NEXT:    vspltisw 6, -16
5191; PWR7-NEXT:    vspltisw 7, 12
5192; PWR7-NEXT:    xxland 35, 35, 0
5193; PWR7-NEXT:    lxvw4x 0, 0, 3
5194; PWR7-NEXT:    vsubuwm 2, 2, 3
5195; PWR7-NEXT:    vsrw 3, 2, 4
5196; PWR7-NEXT:    xxland 34, 34, 0
5197; PWR7-NEXT:    xxland 35, 35, 0
5198; PWR7-NEXT:    vadduwm 2, 2, 3
5199; PWR7-NEXT:    vsrw 3, 2, 5
5200; PWR7-NEXT:    xxlxor 37, 37, 37
5201; PWR7-NEXT:    vadduwm 2, 2, 3
5202; PWR7-NEXT:    vrlw 3, 1, 6
5203; PWR7-NEXT:    xxland 34, 34, 32
5204; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
5205; PWR7-NEXT:    vmulouh 2, 2, 1
5206; PWR7-NEXT:    vslw 3, 3, 6
5207; PWR7-NEXT:    vadduwm 2, 2, 3
5208; PWR7-NEXT:    vadduwm 3, 7, 7
5209; PWR7-NEXT:    vspltisw 4, 6
5210; PWR7-NEXT:    vsrw 2, 2, 3
5211; PWR7-NEXT:    vcmpgtuw 2, 4, 2
5212; PWR7-NEXT:    blr
5213;
5214; PWR8-LABEL: ult_6_v4i32:
5215; PWR8:       # %bb.0:
5216; PWR8-NEXT:    vspltisw 3, 6
5217; PWR8-NEXT:    vpopcntw 2, 2
5218; PWR8-NEXT:    vcmpgtuw 2, 3, 2
5219; PWR8-NEXT:    blr
5220;
5221; PWR9-LABEL: ult_6_v4i32:
5222; PWR9:       # %bb.0:
5223; PWR9-NEXT:    vpopcntw 2, 2
5224; PWR9-NEXT:    vspltisw 3, 6
5225; PWR9-NEXT:    vcmpgtuw 2, 3, 2
5226; PWR9-NEXT:    blr
5227  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5228  %3 = icmp ult <4 x i32> %2, <i32 6, i32 6, i32 6, i32 6>
5229  %4 = sext <4 x i1> %3 to <4 x i32>
5230  ret <4 x i32> %4
5231}
5232
5233define <4 x i32> @ugt_6_v4i32(<4 x i32> %0) {
5234; PWR5-LABEL: ugt_6_v4i32:
5235; PWR5:       # %bb.0:
5236; PWR5-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
5237; PWR5-NEXT:    vspltisw 4, 1
5238; PWR5-NEXT:    vxor 3, 3, 3
5239; PWR5-NEXT:    addi 3, 3, .LCPI50_0@toc@l
5240; PWR5-NEXT:    lvx 5, 0, 3
5241; PWR5-NEXT:    addis 3, 2, .LCPI50_1@toc@ha
5242; PWR5-NEXT:    addi 3, 3, .LCPI50_1@toc@l
5243; PWR5-NEXT:    vspltisw 0, 2
5244; PWR5-NEXT:    vsrw 4, 2, 4
5245; PWR5-NEXT:    vand 4, 4, 5
5246; PWR5-NEXT:    lvx 5, 0, 3
5247; PWR5-NEXT:    vsubuwm 2, 2, 4
5248; PWR5-NEXT:    vand 4, 2, 5
5249; PWR5-NEXT:    vsrw 2, 2, 0
5250; PWR5-NEXT:    vand 2, 2, 5
5251; PWR5-NEXT:    vspltisw 5, 4
5252; PWR5-NEXT:    vadduwm 2, 4, 2
5253; PWR5-NEXT:    vsrw 4, 2, 5
5254; PWR5-NEXT:    vspltisb 5, 15
5255; PWR5-NEXT:    vadduwm 2, 2, 4
5256; PWR5-NEXT:    vspltisb 4, 1
5257; PWR5-NEXT:    vand 2, 2, 5
5258; PWR5-NEXT:    vspltisw 5, -16
5259; PWR5-NEXT:    vrlw 0, 4, 5
5260; PWR5-NEXT:    vmulouh 4, 2, 4
5261; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
5262; PWR5-NEXT:    vspltisw 3, 12
5263; PWR5-NEXT:    vadduwm 3, 3, 3
5264; PWR5-NEXT:    vslw 2, 2, 5
5265; PWR5-NEXT:    vadduwm 2, 4, 2
5266; PWR5-NEXT:    vsrw 2, 2, 3
5267; PWR5-NEXT:    vspltisw 3, 6
5268; PWR5-NEXT:    vcmpgtuw 2, 2, 3
5269; PWR5-NEXT:    blr
5270;
5271; PWR6-LABEL: ugt_6_v4i32:
5272; PWR6:       # %bb.0:
5273; PWR6-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
5274; PWR6-NEXT:    vspltisw 4, 1
5275; PWR6-NEXT:    vxor 3, 3, 3
5276; PWR6-NEXT:    addi 3, 3, .LCPI50_0@toc@l
5277; PWR6-NEXT:    lvx 5, 0, 3
5278; PWR6-NEXT:    addis 3, 2, .LCPI50_1@toc@ha
5279; PWR6-NEXT:    addi 3, 3, .LCPI50_1@toc@l
5280; PWR6-NEXT:    vspltisw 0, 2
5281; PWR6-NEXT:    vsrw 4, 2, 4
5282; PWR6-NEXT:    vand 4, 4, 5
5283; PWR6-NEXT:    lvx 5, 0, 3
5284; PWR6-NEXT:    vsubuwm 2, 2, 4
5285; PWR6-NEXT:    vand 4, 2, 5
5286; PWR6-NEXT:    vsrw 2, 2, 0
5287; PWR6-NEXT:    vand 2, 2, 5
5288; PWR6-NEXT:    vspltisw 5, 4
5289; PWR6-NEXT:    vadduwm 2, 4, 2
5290; PWR6-NEXT:    vsrw 4, 2, 5
5291; PWR6-NEXT:    vspltisb 5, 15
5292; PWR6-NEXT:    vadduwm 2, 2, 4
5293; PWR6-NEXT:    vspltisb 4, 1
5294; PWR6-NEXT:    vand 2, 2, 5
5295; PWR6-NEXT:    vspltisw 5, -16
5296; PWR6-NEXT:    vrlw 0, 4, 5
5297; PWR6-NEXT:    vmulouh 4, 2, 4
5298; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
5299; PWR6-NEXT:    vspltisw 3, 12
5300; PWR6-NEXT:    vadduwm 3, 3, 3
5301; PWR6-NEXT:    vslw 2, 2, 5
5302; PWR6-NEXT:    vadduwm 2, 4, 2
5303; PWR6-NEXT:    vsrw 2, 2, 3
5304; PWR6-NEXT:    vspltisw 3, 6
5305; PWR6-NEXT:    vcmpgtuw 2, 2, 3
5306; PWR6-NEXT:    blr
5307;
5308; PWR7-LABEL: ugt_6_v4i32:
5309; PWR7:       # %bb.0:
5310; PWR7-NEXT:    vspltisw 3, 1
5311; PWR7-NEXT:    addis 3, 2, .LCPI50_0@toc@ha
5312; PWR7-NEXT:    addi 3, 3, .LCPI50_0@toc@l
5313; PWR7-NEXT:    vspltisw 4, 2
5314; PWR7-NEXT:    lxvw4x 0, 0, 3
5315; PWR7-NEXT:    addis 3, 2, .LCPI50_1@toc@ha
5316; PWR7-NEXT:    vspltisw 5, 4
5317; PWR7-NEXT:    addi 3, 3, .LCPI50_1@toc@l
5318; PWR7-NEXT:    vsrw 3, 2, 3
5319; PWR7-NEXT:    vspltisb 0, 15
5320; PWR7-NEXT:    vspltisb 1, 1
5321; PWR7-NEXT:    vspltisw 6, -16
5322; PWR7-NEXT:    vspltisw 7, 12
5323; PWR7-NEXT:    xxland 35, 35, 0
5324; PWR7-NEXT:    lxvw4x 0, 0, 3
5325; PWR7-NEXT:    vsubuwm 2, 2, 3
5326; PWR7-NEXT:    vsrw 3, 2, 4
5327; PWR7-NEXT:    xxland 34, 34, 0
5328; PWR7-NEXT:    xxland 35, 35, 0
5329; PWR7-NEXT:    vadduwm 2, 2, 3
5330; PWR7-NEXT:    vsrw 3, 2, 5
5331; PWR7-NEXT:    xxlxor 37, 37, 37
5332; PWR7-NEXT:    vadduwm 2, 2, 3
5333; PWR7-NEXT:    vrlw 3, 1, 6
5334; PWR7-NEXT:    xxland 34, 34, 32
5335; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
5336; PWR7-NEXT:    vmulouh 2, 2, 1
5337; PWR7-NEXT:    vslw 3, 3, 6
5338; PWR7-NEXT:    vadduwm 2, 2, 3
5339; PWR7-NEXT:    vadduwm 3, 7, 7
5340; PWR7-NEXT:    vspltisw 4, 6
5341; PWR7-NEXT:    vsrw 2, 2, 3
5342; PWR7-NEXT:    vcmpgtuw 2, 2, 4
5343; PWR7-NEXT:    blr
5344;
5345; PWR8-LABEL: ugt_6_v4i32:
5346; PWR8:       # %bb.0:
5347; PWR8-NEXT:    vspltisw 3, 6
5348; PWR8-NEXT:    vpopcntw 2, 2
5349; PWR8-NEXT:    vcmpgtuw 2, 2, 3
5350; PWR8-NEXT:    blr
5351;
5352; PWR9-LABEL: ugt_6_v4i32:
5353; PWR9:       # %bb.0:
5354; PWR9-NEXT:    vpopcntw 2, 2
5355; PWR9-NEXT:    vspltisw 3, 6
5356; PWR9-NEXT:    vcmpgtuw 2, 2, 3
5357; PWR9-NEXT:    blr
5358  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5359  %3 = icmp ugt <4 x i32> %2, <i32 6, i32 6, i32 6, i32 6>
5360  %4 = sext <4 x i1> %3 to <4 x i32>
5361  ret <4 x i32> %4
5362}
5363
5364define <4 x i32> @ult_7_v4i32(<4 x i32> %0) {
5365; PWR5-LABEL: ult_7_v4i32:
5366; PWR5:       # %bb.0:
5367; PWR5-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
5368; PWR5-NEXT:    vspltisw 4, 1
5369; PWR5-NEXT:    vxor 3, 3, 3
5370; PWR5-NEXT:    addi 3, 3, .LCPI51_0@toc@l
5371; PWR5-NEXT:    lvx 5, 0, 3
5372; PWR5-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
5373; PWR5-NEXT:    addi 3, 3, .LCPI51_1@toc@l
5374; PWR5-NEXT:    vspltisw 0, 2
5375; PWR5-NEXT:    vsrw 4, 2, 4
5376; PWR5-NEXT:    vand 4, 4, 5
5377; PWR5-NEXT:    lvx 5, 0, 3
5378; PWR5-NEXT:    vsubuwm 2, 2, 4
5379; PWR5-NEXT:    vand 4, 2, 5
5380; PWR5-NEXT:    vsrw 2, 2, 0
5381; PWR5-NEXT:    vand 2, 2, 5
5382; PWR5-NEXT:    vspltisw 5, 4
5383; PWR5-NEXT:    vadduwm 2, 4, 2
5384; PWR5-NEXT:    vsrw 4, 2, 5
5385; PWR5-NEXT:    vspltisb 5, 15
5386; PWR5-NEXT:    vadduwm 2, 2, 4
5387; PWR5-NEXT:    vspltisb 4, 1
5388; PWR5-NEXT:    vand 2, 2, 5
5389; PWR5-NEXT:    vspltisw 5, -16
5390; PWR5-NEXT:    vrlw 0, 4, 5
5391; PWR5-NEXT:    vmulouh 4, 2, 4
5392; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
5393; PWR5-NEXT:    vspltisw 3, 12
5394; PWR5-NEXT:    vadduwm 3, 3, 3
5395; PWR5-NEXT:    vslw 2, 2, 5
5396; PWR5-NEXT:    vadduwm 2, 4, 2
5397; PWR5-NEXT:    vsrw 2, 2, 3
5398; PWR5-NEXT:    vspltisw 3, 7
5399; PWR5-NEXT:    vcmpgtuw 2, 3, 2
5400; PWR5-NEXT:    blr
5401;
5402; PWR6-LABEL: ult_7_v4i32:
5403; PWR6:       # %bb.0:
5404; PWR6-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
5405; PWR6-NEXT:    vspltisw 4, 1
5406; PWR6-NEXT:    vxor 3, 3, 3
5407; PWR6-NEXT:    addi 3, 3, .LCPI51_0@toc@l
5408; PWR6-NEXT:    lvx 5, 0, 3
5409; PWR6-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
5410; PWR6-NEXT:    addi 3, 3, .LCPI51_1@toc@l
5411; PWR6-NEXT:    vspltisw 0, 2
5412; PWR6-NEXT:    vsrw 4, 2, 4
5413; PWR6-NEXT:    vand 4, 4, 5
5414; PWR6-NEXT:    lvx 5, 0, 3
5415; PWR6-NEXT:    vsubuwm 2, 2, 4
5416; PWR6-NEXT:    vand 4, 2, 5
5417; PWR6-NEXT:    vsrw 2, 2, 0
5418; PWR6-NEXT:    vand 2, 2, 5
5419; PWR6-NEXT:    vspltisw 5, 4
5420; PWR6-NEXT:    vadduwm 2, 4, 2
5421; PWR6-NEXT:    vsrw 4, 2, 5
5422; PWR6-NEXT:    vspltisb 5, 15
5423; PWR6-NEXT:    vadduwm 2, 2, 4
5424; PWR6-NEXT:    vspltisb 4, 1
5425; PWR6-NEXT:    vand 2, 2, 5
5426; PWR6-NEXT:    vspltisw 5, -16
5427; PWR6-NEXT:    vrlw 0, 4, 5
5428; PWR6-NEXT:    vmulouh 4, 2, 4
5429; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
5430; PWR6-NEXT:    vspltisw 3, 12
5431; PWR6-NEXT:    vadduwm 3, 3, 3
5432; PWR6-NEXT:    vslw 2, 2, 5
5433; PWR6-NEXT:    vadduwm 2, 4, 2
5434; PWR6-NEXT:    vsrw 2, 2, 3
5435; PWR6-NEXT:    vspltisw 3, 7
5436; PWR6-NEXT:    vcmpgtuw 2, 3, 2
5437; PWR6-NEXT:    blr
5438;
5439; PWR7-LABEL: ult_7_v4i32:
5440; PWR7:       # %bb.0:
5441; PWR7-NEXT:    vspltisw 3, 1
5442; PWR7-NEXT:    addis 3, 2, .LCPI51_0@toc@ha
5443; PWR7-NEXT:    addi 3, 3, .LCPI51_0@toc@l
5444; PWR7-NEXT:    vspltisw 4, 2
5445; PWR7-NEXT:    lxvw4x 0, 0, 3
5446; PWR7-NEXT:    addis 3, 2, .LCPI51_1@toc@ha
5447; PWR7-NEXT:    vspltisw 5, 4
5448; PWR7-NEXT:    addi 3, 3, .LCPI51_1@toc@l
5449; PWR7-NEXT:    vsrw 3, 2, 3
5450; PWR7-NEXT:    vspltisb 0, 15
5451; PWR7-NEXT:    vspltisb 1, 1
5452; PWR7-NEXT:    vspltisw 6, -16
5453; PWR7-NEXT:    vspltisw 7, 12
5454; PWR7-NEXT:    xxland 35, 35, 0
5455; PWR7-NEXT:    lxvw4x 0, 0, 3
5456; PWR7-NEXT:    vsubuwm 2, 2, 3
5457; PWR7-NEXT:    vsrw 3, 2, 4
5458; PWR7-NEXT:    xxland 34, 34, 0
5459; PWR7-NEXT:    xxland 35, 35, 0
5460; PWR7-NEXT:    vadduwm 2, 2, 3
5461; PWR7-NEXT:    vsrw 3, 2, 5
5462; PWR7-NEXT:    xxlxor 37, 37, 37
5463; PWR7-NEXT:    vadduwm 2, 2, 3
5464; PWR7-NEXT:    vrlw 3, 1, 6
5465; PWR7-NEXT:    xxland 34, 34, 32
5466; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
5467; PWR7-NEXT:    vmulouh 2, 2, 1
5468; PWR7-NEXT:    vslw 3, 3, 6
5469; PWR7-NEXT:    vadduwm 2, 2, 3
5470; PWR7-NEXT:    vadduwm 3, 7, 7
5471; PWR7-NEXT:    vspltisw 4, 7
5472; PWR7-NEXT:    vsrw 2, 2, 3
5473; PWR7-NEXT:    vcmpgtuw 2, 4, 2
5474; PWR7-NEXT:    blr
5475;
5476; PWR8-LABEL: ult_7_v4i32:
5477; PWR8:       # %bb.0:
5478; PWR8-NEXT:    vspltisw 3, 7
5479; PWR8-NEXT:    vpopcntw 2, 2
5480; PWR8-NEXT:    vcmpgtuw 2, 3, 2
5481; PWR8-NEXT:    blr
5482;
5483; PWR9-LABEL: ult_7_v4i32:
5484; PWR9:       # %bb.0:
5485; PWR9-NEXT:    vpopcntw 2, 2
5486; PWR9-NEXT:    vspltisw 3, 7
5487; PWR9-NEXT:    vcmpgtuw 2, 3, 2
5488; PWR9-NEXT:    blr
5489  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5490  %3 = icmp ult <4 x i32> %2, <i32 7, i32 7, i32 7, i32 7>
5491  %4 = sext <4 x i1> %3 to <4 x i32>
5492  ret <4 x i32> %4
5493}
5494
5495define <4 x i32> @ugt_7_v4i32(<4 x i32> %0) {
5496; PWR5-LABEL: ugt_7_v4i32:
5497; PWR5:       # %bb.0:
5498; PWR5-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
5499; PWR5-NEXT:    vspltisw 4, 1
5500; PWR5-NEXT:    vxor 3, 3, 3
5501; PWR5-NEXT:    addi 3, 3, .LCPI52_0@toc@l
5502; PWR5-NEXT:    lvx 5, 0, 3
5503; PWR5-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
5504; PWR5-NEXT:    addi 3, 3, .LCPI52_1@toc@l
5505; PWR5-NEXT:    vspltisw 0, 2
5506; PWR5-NEXT:    vsrw 4, 2, 4
5507; PWR5-NEXT:    vand 4, 4, 5
5508; PWR5-NEXT:    lvx 5, 0, 3
5509; PWR5-NEXT:    vsubuwm 2, 2, 4
5510; PWR5-NEXT:    vand 4, 2, 5
5511; PWR5-NEXT:    vsrw 2, 2, 0
5512; PWR5-NEXT:    vand 2, 2, 5
5513; PWR5-NEXT:    vspltisw 5, 4
5514; PWR5-NEXT:    vadduwm 2, 4, 2
5515; PWR5-NEXT:    vsrw 4, 2, 5
5516; PWR5-NEXT:    vspltisb 5, 15
5517; PWR5-NEXT:    vadduwm 2, 2, 4
5518; PWR5-NEXT:    vspltisb 4, 1
5519; PWR5-NEXT:    vand 2, 2, 5
5520; PWR5-NEXT:    vspltisw 5, -16
5521; PWR5-NEXT:    vrlw 0, 4, 5
5522; PWR5-NEXT:    vmulouh 4, 2, 4
5523; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
5524; PWR5-NEXT:    vspltisw 3, 12
5525; PWR5-NEXT:    vadduwm 3, 3, 3
5526; PWR5-NEXT:    vslw 2, 2, 5
5527; PWR5-NEXT:    vadduwm 2, 4, 2
5528; PWR5-NEXT:    vsrw 2, 2, 3
5529; PWR5-NEXT:    vspltisw 3, 7
5530; PWR5-NEXT:    vcmpgtuw 2, 2, 3
5531; PWR5-NEXT:    blr
5532;
5533; PWR6-LABEL: ugt_7_v4i32:
5534; PWR6:       # %bb.0:
5535; PWR6-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
5536; PWR6-NEXT:    vspltisw 4, 1
5537; PWR6-NEXT:    vxor 3, 3, 3
5538; PWR6-NEXT:    addi 3, 3, .LCPI52_0@toc@l
5539; PWR6-NEXT:    lvx 5, 0, 3
5540; PWR6-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
5541; PWR6-NEXT:    addi 3, 3, .LCPI52_1@toc@l
5542; PWR6-NEXT:    vspltisw 0, 2
5543; PWR6-NEXT:    vsrw 4, 2, 4
5544; PWR6-NEXT:    vand 4, 4, 5
5545; PWR6-NEXT:    lvx 5, 0, 3
5546; PWR6-NEXT:    vsubuwm 2, 2, 4
5547; PWR6-NEXT:    vand 4, 2, 5
5548; PWR6-NEXT:    vsrw 2, 2, 0
5549; PWR6-NEXT:    vand 2, 2, 5
5550; PWR6-NEXT:    vspltisw 5, 4
5551; PWR6-NEXT:    vadduwm 2, 4, 2
5552; PWR6-NEXT:    vsrw 4, 2, 5
5553; PWR6-NEXT:    vspltisb 5, 15
5554; PWR6-NEXT:    vadduwm 2, 2, 4
5555; PWR6-NEXT:    vspltisb 4, 1
5556; PWR6-NEXT:    vand 2, 2, 5
5557; PWR6-NEXT:    vspltisw 5, -16
5558; PWR6-NEXT:    vrlw 0, 4, 5
5559; PWR6-NEXT:    vmulouh 4, 2, 4
5560; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
5561; PWR6-NEXT:    vspltisw 3, 12
5562; PWR6-NEXT:    vadduwm 3, 3, 3
5563; PWR6-NEXT:    vslw 2, 2, 5
5564; PWR6-NEXT:    vadduwm 2, 4, 2
5565; PWR6-NEXT:    vsrw 2, 2, 3
5566; PWR6-NEXT:    vspltisw 3, 7
5567; PWR6-NEXT:    vcmpgtuw 2, 2, 3
5568; PWR6-NEXT:    blr
5569;
5570; PWR7-LABEL: ugt_7_v4i32:
5571; PWR7:       # %bb.0:
5572; PWR7-NEXT:    vspltisw 3, 1
5573; PWR7-NEXT:    addis 3, 2, .LCPI52_0@toc@ha
5574; PWR7-NEXT:    addi 3, 3, .LCPI52_0@toc@l
5575; PWR7-NEXT:    vspltisw 4, 2
5576; PWR7-NEXT:    lxvw4x 0, 0, 3
5577; PWR7-NEXT:    addis 3, 2, .LCPI52_1@toc@ha
5578; PWR7-NEXT:    vspltisw 5, 4
5579; PWR7-NEXT:    addi 3, 3, .LCPI52_1@toc@l
5580; PWR7-NEXT:    vsrw 3, 2, 3
5581; PWR7-NEXT:    vspltisb 0, 15
5582; PWR7-NEXT:    vspltisb 1, 1
5583; PWR7-NEXT:    vspltisw 6, -16
5584; PWR7-NEXT:    vspltisw 7, 12
5585; PWR7-NEXT:    xxland 35, 35, 0
5586; PWR7-NEXT:    lxvw4x 0, 0, 3
5587; PWR7-NEXT:    vsubuwm 2, 2, 3
5588; PWR7-NEXT:    vsrw 3, 2, 4
5589; PWR7-NEXT:    xxland 34, 34, 0
5590; PWR7-NEXT:    xxland 35, 35, 0
5591; PWR7-NEXT:    vadduwm 2, 2, 3
5592; PWR7-NEXT:    vsrw 3, 2, 5
5593; PWR7-NEXT:    xxlxor 37, 37, 37
5594; PWR7-NEXT:    vadduwm 2, 2, 3
5595; PWR7-NEXT:    vrlw 3, 1, 6
5596; PWR7-NEXT:    xxland 34, 34, 32
5597; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
5598; PWR7-NEXT:    vmulouh 2, 2, 1
5599; PWR7-NEXT:    vslw 3, 3, 6
5600; PWR7-NEXT:    vadduwm 2, 2, 3
5601; PWR7-NEXT:    vadduwm 3, 7, 7
5602; PWR7-NEXT:    vspltisw 4, 7
5603; PWR7-NEXT:    vsrw 2, 2, 3
5604; PWR7-NEXT:    vcmpgtuw 2, 2, 4
5605; PWR7-NEXT:    blr
5606;
5607; PWR8-LABEL: ugt_7_v4i32:
5608; PWR8:       # %bb.0:
5609; PWR8-NEXT:    vspltisw 3, 7
5610; PWR8-NEXT:    vpopcntw 2, 2
5611; PWR8-NEXT:    vcmpgtuw 2, 2, 3
5612; PWR8-NEXT:    blr
5613;
5614; PWR9-LABEL: ugt_7_v4i32:
5615; PWR9:       # %bb.0:
5616; PWR9-NEXT:    vpopcntw 2, 2
5617; PWR9-NEXT:    vspltisw 3, 7
5618; PWR9-NEXT:    vcmpgtuw 2, 2, 3
5619; PWR9-NEXT:    blr
5620  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5621  %3 = icmp ugt <4 x i32> %2, <i32 7, i32 7, i32 7, i32 7>
5622  %4 = sext <4 x i1> %3 to <4 x i32>
5623  ret <4 x i32> %4
5624}
5625
5626define <4 x i32> @ult_8_v4i32(<4 x i32> %0) {
5627; PWR5-LABEL: ult_8_v4i32:
5628; PWR5:       # %bb.0:
5629; PWR5-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
5630; PWR5-NEXT:    vspltisw 4, 1
5631; PWR5-NEXT:    vxor 3, 3, 3
5632; PWR5-NEXT:    addi 3, 3, .LCPI53_0@toc@l
5633; PWR5-NEXT:    lvx 5, 0, 3
5634; PWR5-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
5635; PWR5-NEXT:    addi 3, 3, .LCPI53_1@toc@l
5636; PWR5-NEXT:    vspltisw 0, 2
5637; PWR5-NEXT:    vsrw 4, 2, 4
5638; PWR5-NEXT:    vand 4, 4, 5
5639; PWR5-NEXT:    lvx 5, 0, 3
5640; PWR5-NEXT:    vsubuwm 2, 2, 4
5641; PWR5-NEXT:    vand 4, 2, 5
5642; PWR5-NEXT:    vsrw 2, 2, 0
5643; PWR5-NEXT:    vand 2, 2, 5
5644; PWR5-NEXT:    vspltisw 5, 4
5645; PWR5-NEXT:    vadduwm 2, 4, 2
5646; PWR5-NEXT:    vsrw 4, 2, 5
5647; PWR5-NEXT:    vspltisb 5, 15
5648; PWR5-NEXT:    vadduwm 2, 2, 4
5649; PWR5-NEXT:    vspltisb 4, 1
5650; PWR5-NEXT:    vand 2, 2, 5
5651; PWR5-NEXT:    vspltisw 5, -16
5652; PWR5-NEXT:    vrlw 0, 4, 5
5653; PWR5-NEXT:    vmulouh 4, 2, 4
5654; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
5655; PWR5-NEXT:    vspltisw 3, 12
5656; PWR5-NEXT:    vadduwm 3, 3, 3
5657; PWR5-NEXT:    vslw 2, 2, 5
5658; PWR5-NEXT:    vadduwm 2, 4, 2
5659; PWR5-NEXT:    vsrw 2, 2, 3
5660; PWR5-NEXT:    vspltisw 3, 8
5661; PWR5-NEXT:    vcmpgtuw 2, 3, 2
5662; PWR5-NEXT:    blr
5663;
5664; PWR6-LABEL: ult_8_v4i32:
5665; PWR6:       # %bb.0:
5666; PWR6-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
5667; PWR6-NEXT:    vspltisw 4, 1
5668; PWR6-NEXT:    vxor 3, 3, 3
5669; PWR6-NEXT:    addi 3, 3, .LCPI53_0@toc@l
5670; PWR6-NEXT:    lvx 5, 0, 3
5671; PWR6-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
5672; PWR6-NEXT:    addi 3, 3, .LCPI53_1@toc@l
5673; PWR6-NEXT:    vspltisw 0, 2
5674; PWR6-NEXT:    vsrw 4, 2, 4
5675; PWR6-NEXT:    vand 4, 4, 5
5676; PWR6-NEXT:    lvx 5, 0, 3
5677; PWR6-NEXT:    vsubuwm 2, 2, 4
5678; PWR6-NEXT:    vand 4, 2, 5
5679; PWR6-NEXT:    vsrw 2, 2, 0
5680; PWR6-NEXT:    vand 2, 2, 5
5681; PWR6-NEXT:    vspltisw 5, 4
5682; PWR6-NEXT:    vadduwm 2, 4, 2
5683; PWR6-NEXT:    vsrw 4, 2, 5
5684; PWR6-NEXT:    vspltisb 5, 15
5685; PWR6-NEXT:    vadduwm 2, 2, 4
5686; PWR6-NEXT:    vspltisb 4, 1
5687; PWR6-NEXT:    vand 2, 2, 5
5688; PWR6-NEXT:    vspltisw 5, -16
5689; PWR6-NEXT:    vrlw 0, 4, 5
5690; PWR6-NEXT:    vmulouh 4, 2, 4
5691; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
5692; PWR6-NEXT:    vspltisw 3, 12
5693; PWR6-NEXT:    vadduwm 3, 3, 3
5694; PWR6-NEXT:    vslw 2, 2, 5
5695; PWR6-NEXT:    vadduwm 2, 4, 2
5696; PWR6-NEXT:    vsrw 2, 2, 3
5697; PWR6-NEXT:    vspltisw 3, 8
5698; PWR6-NEXT:    vcmpgtuw 2, 3, 2
5699; PWR6-NEXT:    blr
5700;
5701; PWR7-LABEL: ult_8_v4i32:
5702; PWR7:       # %bb.0:
5703; PWR7-NEXT:    vspltisw 3, 1
5704; PWR7-NEXT:    addis 3, 2, .LCPI53_0@toc@ha
5705; PWR7-NEXT:    addi 3, 3, .LCPI53_0@toc@l
5706; PWR7-NEXT:    vspltisw 4, 2
5707; PWR7-NEXT:    lxvw4x 0, 0, 3
5708; PWR7-NEXT:    addis 3, 2, .LCPI53_1@toc@ha
5709; PWR7-NEXT:    vspltisw 5, 4
5710; PWR7-NEXT:    addi 3, 3, .LCPI53_1@toc@l
5711; PWR7-NEXT:    vsrw 3, 2, 3
5712; PWR7-NEXT:    vspltisb 0, 15
5713; PWR7-NEXT:    vspltisb 1, 1
5714; PWR7-NEXT:    vspltisw 6, -16
5715; PWR7-NEXT:    vspltisw 7, 12
5716; PWR7-NEXT:    xxland 35, 35, 0
5717; PWR7-NEXT:    lxvw4x 0, 0, 3
5718; PWR7-NEXT:    vsubuwm 2, 2, 3
5719; PWR7-NEXT:    vsrw 3, 2, 4
5720; PWR7-NEXT:    xxland 34, 34, 0
5721; PWR7-NEXT:    xxland 35, 35, 0
5722; PWR7-NEXT:    vadduwm 2, 2, 3
5723; PWR7-NEXT:    vsrw 3, 2, 5
5724; PWR7-NEXT:    xxlxor 37, 37, 37
5725; PWR7-NEXT:    vadduwm 2, 2, 3
5726; PWR7-NEXT:    vrlw 3, 1, 6
5727; PWR7-NEXT:    xxland 34, 34, 32
5728; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
5729; PWR7-NEXT:    vmulouh 2, 2, 1
5730; PWR7-NEXT:    vslw 3, 3, 6
5731; PWR7-NEXT:    vadduwm 2, 2, 3
5732; PWR7-NEXT:    vadduwm 3, 7, 7
5733; PWR7-NEXT:    vspltisw 4, 8
5734; PWR7-NEXT:    vsrw 2, 2, 3
5735; PWR7-NEXT:    vcmpgtuw 2, 4, 2
5736; PWR7-NEXT:    blr
5737;
5738; PWR8-LABEL: ult_8_v4i32:
5739; PWR8:       # %bb.0:
5740; PWR8-NEXT:    vspltisw 3, 8
5741; PWR8-NEXT:    vpopcntw 2, 2
5742; PWR8-NEXT:    vcmpgtuw 2, 3, 2
5743; PWR8-NEXT:    blr
5744;
5745; PWR9-LABEL: ult_8_v4i32:
5746; PWR9:       # %bb.0:
5747; PWR9-NEXT:    vpopcntw 2, 2
5748; PWR9-NEXT:    vspltisw 3, 8
5749; PWR9-NEXT:    vcmpgtuw 2, 3, 2
5750; PWR9-NEXT:    blr
5751  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5752  %3 = icmp ult <4 x i32> %2, <i32 8, i32 8, i32 8, i32 8>
5753  %4 = sext <4 x i1> %3 to <4 x i32>
5754  ret <4 x i32> %4
5755}
5756
5757define <4 x i32> @ugt_8_v4i32(<4 x i32> %0) {
5758; PWR5-LABEL: ugt_8_v4i32:
5759; PWR5:       # %bb.0:
5760; PWR5-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
5761; PWR5-NEXT:    vspltisw 4, 1
5762; PWR5-NEXT:    vxor 3, 3, 3
5763; PWR5-NEXT:    addi 3, 3, .LCPI54_0@toc@l
5764; PWR5-NEXT:    lvx 5, 0, 3
5765; PWR5-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
5766; PWR5-NEXT:    addi 3, 3, .LCPI54_1@toc@l
5767; PWR5-NEXT:    vspltisw 0, 2
5768; PWR5-NEXT:    vsrw 4, 2, 4
5769; PWR5-NEXT:    vand 4, 4, 5
5770; PWR5-NEXT:    lvx 5, 0, 3
5771; PWR5-NEXT:    vsubuwm 2, 2, 4
5772; PWR5-NEXT:    vand 4, 2, 5
5773; PWR5-NEXT:    vsrw 2, 2, 0
5774; PWR5-NEXT:    vand 2, 2, 5
5775; PWR5-NEXT:    vspltisw 5, 4
5776; PWR5-NEXT:    vadduwm 2, 4, 2
5777; PWR5-NEXT:    vsrw 4, 2, 5
5778; PWR5-NEXT:    vspltisb 5, 15
5779; PWR5-NEXT:    vadduwm 2, 2, 4
5780; PWR5-NEXT:    vspltisb 4, 1
5781; PWR5-NEXT:    vand 2, 2, 5
5782; PWR5-NEXT:    vspltisw 5, -16
5783; PWR5-NEXT:    vrlw 0, 4, 5
5784; PWR5-NEXT:    vmulouh 4, 2, 4
5785; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
5786; PWR5-NEXT:    vspltisw 3, 12
5787; PWR5-NEXT:    vadduwm 3, 3, 3
5788; PWR5-NEXT:    vslw 2, 2, 5
5789; PWR5-NEXT:    vadduwm 2, 4, 2
5790; PWR5-NEXT:    vsrw 2, 2, 3
5791; PWR5-NEXT:    vspltisw 3, 8
5792; PWR5-NEXT:    vcmpgtuw 2, 2, 3
5793; PWR5-NEXT:    blr
5794;
5795; PWR6-LABEL: ugt_8_v4i32:
5796; PWR6:       # %bb.0:
5797; PWR6-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
5798; PWR6-NEXT:    vspltisw 4, 1
5799; PWR6-NEXT:    vxor 3, 3, 3
5800; PWR6-NEXT:    addi 3, 3, .LCPI54_0@toc@l
5801; PWR6-NEXT:    lvx 5, 0, 3
5802; PWR6-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
5803; PWR6-NEXT:    addi 3, 3, .LCPI54_1@toc@l
5804; PWR6-NEXT:    vspltisw 0, 2
5805; PWR6-NEXT:    vsrw 4, 2, 4
5806; PWR6-NEXT:    vand 4, 4, 5
5807; PWR6-NEXT:    lvx 5, 0, 3
5808; PWR6-NEXT:    vsubuwm 2, 2, 4
5809; PWR6-NEXT:    vand 4, 2, 5
5810; PWR6-NEXT:    vsrw 2, 2, 0
5811; PWR6-NEXT:    vand 2, 2, 5
5812; PWR6-NEXT:    vspltisw 5, 4
5813; PWR6-NEXT:    vadduwm 2, 4, 2
5814; PWR6-NEXT:    vsrw 4, 2, 5
5815; PWR6-NEXT:    vspltisb 5, 15
5816; PWR6-NEXT:    vadduwm 2, 2, 4
5817; PWR6-NEXT:    vspltisb 4, 1
5818; PWR6-NEXT:    vand 2, 2, 5
5819; PWR6-NEXT:    vspltisw 5, -16
5820; PWR6-NEXT:    vrlw 0, 4, 5
5821; PWR6-NEXT:    vmulouh 4, 2, 4
5822; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
5823; PWR6-NEXT:    vspltisw 3, 12
5824; PWR6-NEXT:    vadduwm 3, 3, 3
5825; PWR6-NEXT:    vslw 2, 2, 5
5826; PWR6-NEXT:    vadduwm 2, 4, 2
5827; PWR6-NEXT:    vsrw 2, 2, 3
5828; PWR6-NEXT:    vspltisw 3, 8
5829; PWR6-NEXT:    vcmpgtuw 2, 2, 3
5830; PWR6-NEXT:    blr
5831;
5832; PWR7-LABEL: ugt_8_v4i32:
5833; PWR7:       # %bb.0:
5834; PWR7-NEXT:    vspltisw 3, 1
5835; PWR7-NEXT:    addis 3, 2, .LCPI54_0@toc@ha
5836; PWR7-NEXT:    addi 3, 3, .LCPI54_0@toc@l
5837; PWR7-NEXT:    vspltisw 4, 2
5838; PWR7-NEXT:    lxvw4x 0, 0, 3
5839; PWR7-NEXT:    addis 3, 2, .LCPI54_1@toc@ha
5840; PWR7-NEXT:    vspltisw 5, 4
5841; PWR7-NEXT:    addi 3, 3, .LCPI54_1@toc@l
5842; PWR7-NEXT:    vsrw 3, 2, 3
5843; PWR7-NEXT:    vspltisb 0, 15
5844; PWR7-NEXT:    vspltisb 1, 1
5845; PWR7-NEXT:    vspltisw 6, -16
5846; PWR7-NEXT:    vspltisw 7, 12
5847; PWR7-NEXT:    xxland 35, 35, 0
5848; PWR7-NEXT:    lxvw4x 0, 0, 3
5849; PWR7-NEXT:    vsubuwm 2, 2, 3
5850; PWR7-NEXT:    vsrw 3, 2, 4
5851; PWR7-NEXT:    xxland 34, 34, 0
5852; PWR7-NEXT:    xxland 35, 35, 0
5853; PWR7-NEXT:    vadduwm 2, 2, 3
5854; PWR7-NEXT:    vsrw 3, 2, 5
5855; PWR7-NEXT:    xxlxor 37, 37, 37
5856; PWR7-NEXT:    vadduwm 2, 2, 3
5857; PWR7-NEXT:    vrlw 3, 1, 6
5858; PWR7-NEXT:    xxland 34, 34, 32
5859; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
5860; PWR7-NEXT:    vmulouh 2, 2, 1
5861; PWR7-NEXT:    vslw 3, 3, 6
5862; PWR7-NEXT:    vadduwm 2, 2, 3
5863; PWR7-NEXT:    vadduwm 3, 7, 7
5864; PWR7-NEXT:    vspltisw 4, 8
5865; PWR7-NEXT:    vsrw 2, 2, 3
5866; PWR7-NEXT:    vcmpgtuw 2, 2, 4
5867; PWR7-NEXT:    blr
5868;
5869; PWR8-LABEL: ugt_8_v4i32:
5870; PWR8:       # %bb.0:
5871; PWR8-NEXT:    vspltisw 3, 8
5872; PWR8-NEXT:    vpopcntw 2, 2
5873; PWR8-NEXT:    vcmpgtuw 2, 2, 3
5874; PWR8-NEXT:    blr
5875;
5876; PWR9-LABEL: ugt_8_v4i32:
5877; PWR9:       # %bb.0:
5878; PWR9-NEXT:    vpopcntw 2, 2
5879; PWR9-NEXT:    vspltisw 3, 8
5880; PWR9-NEXT:    vcmpgtuw 2, 2, 3
5881; PWR9-NEXT:    blr
5882  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
5883  %3 = icmp ugt <4 x i32> %2, <i32 8, i32 8, i32 8, i32 8>
5884  %4 = sext <4 x i1> %3 to <4 x i32>
5885  ret <4 x i32> %4
5886}
5887
5888define <4 x i32> @ult_9_v4i32(<4 x i32> %0) {
5889; PWR5-LABEL: ult_9_v4i32:
5890; PWR5:       # %bb.0:
5891; PWR5-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
5892; PWR5-NEXT:    vspltisw 4, 1
5893; PWR5-NEXT:    vxor 3, 3, 3
5894; PWR5-NEXT:    addi 3, 3, .LCPI55_0@toc@l
5895; PWR5-NEXT:    lvx 5, 0, 3
5896; PWR5-NEXT:    addis 3, 2, .LCPI55_1@toc@ha
5897; PWR5-NEXT:    addi 3, 3, .LCPI55_1@toc@l
5898; PWR5-NEXT:    vspltisw 0, 2
5899; PWR5-NEXT:    vsrw 4, 2, 4
5900; PWR5-NEXT:    vand 4, 4, 5
5901; PWR5-NEXT:    lvx 5, 0, 3
5902; PWR5-NEXT:    vsubuwm 2, 2, 4
5903; PWR5-NEXT:    vand 4, 2, 5
5904; PWR5-NEXT:    vsrw 2, 2, 0
5905; PWR5-NEXT:    vand 2, 2, 5
5906; PWR5-NEXT:    vspltisw 5, 4
5907; PWR5-NEXT:    vadduwm 2, 4, 2
5908; PWR5-NEXT:    vsrw 4, 2, 5
5909; PWR5-NEXT:    vspltisb 5, 15
5910; PWR5-NEXT:    vadduwm 2, 2, 4
5911; PWR5-NEXT:    vspltisb 4, 1
5912; PWR5-NEXT:    vand 2, 2, 5
5913; PWR5-NEXT:    vspltisw 5, -16
5914; PWR5-NEXT:    vrlw 0, 4, 5
5915; PWR5-NEXT:    vmulouh 4, 2, 4
5916; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
5917; PWR5-NEXT:    vspltisw 3, 12
5918; PWR5-NEXT:    vadduwm 3, 3, 3
5919; PWR5-NEXT:    vslw 2, 2, 5
5920; PWR5-NEXT:    vadduwm 2, 4, 2
5921; PWR5-NEXT:    vsrw 2, 2, 3
5922; PWR5-NEXT:    vspltisw 3, 9
5923; PWR5-NEXT:    vcmpgtuw 2, 3, 2
5924; PWR5-NEXT:    blr
5925;
5926; PWR6-LABEL: ult_9_v4i32:
5927; PWR6:       # %bb.0:
5928; PWR6-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
5929; PWR6-NEXT:    vspltisw 4, 1
5930; PWR6-NEXT:    vxor 3, 3, 3
5931; PWR6-NEXT:    addi 3, 3, .LCPI55_0@toc@l
5932; PWR6-NEXT:    lvx 5, 0, 3
5933; PWR6-NEXT:    addis 3, 2, .LCPI55_1@toc@ha
5934; PWR6-NEXT:    addi 3, 3, .LCPI55_1@toc@l
5935; PWR6-NEXT:    vspltisw 0, 2
5936; PWR6-NEXT:    vsrw 4, 2, 4
5937; PWR6-NEXT:    vand 4, 4, 5
5938; PWR6-NEXT:    lvx 5, 0, 3
5939; PWR6-NEXT:    vsubuwm 2, 2, 4
5940; PWR6-NEXT:    vand 4, 2, 5
5941; PWR6-NEXT:    vsrw 2, 2, 0
5942; PWR6-NEXT:    vand 2, 2, 5
5943; PWR6-NEXT:    vspltisw 5, 4
5944; PWR6-NEXT:    vadduwm 2, 4, 2
5945; PWR6-NEXT:    vsrw 4, 2, 5
5946; PWR6-NEXT:    vspltisb 5, 15
5947; PWR6-NEXT:    vadduwm 2, 2, 4
5948; PWR6-NEXT:    vspltisb 4, 1
5949; PWR6-NEXT:    vand 2, 2, 5
5950; PWR6-NEXT:    vspltisw 5, -16
5951; PWR6-NEXT:    vrlw 0, 4, 5
5952; PWR6-NEXT:    vmulouh 4, 2, 4
5953; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
5954; PWR6-NEXT:    vspltisw 3, 12
5955; PWR6-NEXT:    vadduwm 3, 3, 3
5956; PWR6-NEXT:    vslw 2, 2, 5
5957; PWR6-NEXT:    vadduwm 2, 4, 2
5958; PWR6-NEXT:    vsrw 2, 2, 3
5959; PWR6-NEXT:    vspltisw 3, 9
5960; PWR6-NEXT:    vcmpgtuw 2, 3, 2
5961; PWR6-NEXT:    blr
5962;
5963; PWR7-LABEL: ult_9_v4i32:
5964; PWR7:       # %bb.0:
5965; PWR7-NEXT:    vspltisw 3, 1
5966; PWR7-NEXT:    addis 3, 2, .LCPI55_0@toc@ha
5967; PWR7-NEXT:    addi 3, 3, .LCPI55_0@toc@l
5968; PWR7-NEXT:    vspltisw 4, 2
5969; PWR7-NEXT:    lxvw4x 0, 0, 3
5970; PWR7-NEXT:    addis 3, 2, .LCPI55_1@toc@ha
5971; PWR7-NEXT:    vspltisw 5, 4
5972; PWR7-NEXT:    addi 3, 3, .LCPI55_1@toc@l
5973; PWR7-NEXT:    vsrw 3, 2, 3
5974; PWR7-NEXT:    vspltisb 0, 15
5975; PWR7-NEXT:    vspltisb 1, 1
5976; PWR7-NEXT:    vspltisw 6, -16
5977; PWR7-NEXT:    vspltisw 7, 12
5978; PWR7-NEXT:    xxland 35, 35, 0
5979; PWR7-NEXT:    lxvw4x 0, 0, 3
5980; PWR7-NEXT:    vsubuwm 2, 2, 3
5981; PWR7-NEXT:    vsrw 3, 2, 4
5982; PWR7-NEXT:    xxland 34, 34, 0
5983; PWR7-NEXT:    xxland 35, 35, 0
5984; PWR7-NEXT:    vadduwm 2, 2, 3
5985; PWR7-NEXT:    vsrw 3, 2, 5
5986; PWR7-NEXT:    xxlxor 37, 37, 37
5987; PWR7-NEXT:    vadduwm 2, 2, 3
5988; PWR7-NEXT:    vrlw 3, 1, 6
5989; PWR7-NEXT:    xxland 34, 34, 32
5990; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
5991; PWR7-NEXT:    vmulouh 2, 2, 1
5992; PWR7-NEXT:    vslw 3, 3, 6
5993; PWR7-NEXT:    vadduwm 2, 2, 3
5994; PWR7-NEXT:    vadduwm 3, 7, 7
5995; PWR7-NEXT:    vspltisw 4, 9
5996; PWR7-NEXT:    vsrw 2, 2, 3
5997; PWR7-NEXT:    vcmpgtuw 2, 4, 2
5998; PWR7-NEXT:    blr
5999;
6000; PWR8-LABEL: ult_9_v4i32:
6001; PWR8:       # %bb.0:
6002; PWR8-NEXT:    vspltisw 3, 9
6003; PWR8-NEXT:    vpopcntw 2, 2
6004; PWR8-NEXT:    vcmpgtuw 2, 3, 2
6005; PWR8-NEXT:    blr
6006;
6007; PWR9-LABEL: ult_9_v4i32:
6008; PWR9:       # %bb.0:
6009; PWR9-NEXT:    vpopcntw 2, 2
6010; PWR9-NEXT:    vspltisw 3, 9
6011; PWR9-NEXT:    vcmpgtuw 2, 3, 2
6012; PWR9-NEXT:    blr
6013  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6014  %3 = icmp ult <4 x i32> %2, <i32 9, i32 9, i32 9, i32 9>
6015  %4 = sext <4 x i1> %3 to <4 x i32>
6016  ret <4 x i32> %4
6017}
6018
6019define <4 x i32> @ugt_9_v4i32(<4 x i32> %0) {
6020; PWR5-LABEL: ugt_9_v4i32:
6021; PWR5:       # %bb.0:
6022; PWR5-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
6023; PWR5-NEXT:    vspltisw 4, 1
6024; PWR5-NEXT:    vxor 3, 3, 3
6025; PWR5-NEXT:    addi 3, 3, .LCPI56_0@toc@l
6026; PWR5-NEXT:    lvx 5, 0, 3
6027; PWR5-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
6028; PWR5-NEXT:    addi 3, 3, .LCPI56_1@toc@l
6029; PWR5-NEXT:    vspltisw 0, 2
6030; PWR5-NEXT:    vsrw 4, 2, 4
6031; PWR5-NEXT:    vand 4, 4, 5
6032; PWR5-NEXT:    lvx 5, 0, 3
6033; PWR5-NEXT:    vsubuwm 2, 2, 4
6034; PWR5-NEXT:    vand 4, 2, 5
6035; PWR5-NEXT:    vsrw 2, 2, 0
6036; PWR5-NEXT:    vand 2, 2, 5
6037; PWR5-NEXT:    vspltisw 5, 4
6038; PWR5-NEXT:    vadduwm 2, 4, 2
6039; PWR5-NEXT:    vsrw 4, 2, 5
6040; PWR5-NEXT:    vspltisb 5, 15
6041; PWR5-NEXT:    vadduwm 2, 2, 4
6042; PWR5-NEXT:    vspltisb 4, 1
6043; PWR5-NEXT:    vand 2, 2, 5
6044; PWR5-NEXT:    vspltisw 5, -16
6045; PWR5-NEXT:    vrlw 0, 4, 5
6046; PWR5-NEXT:    vmulouh 4, 2, 4
6047; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
6048; PWR5-NEXT:    vspltisw 3, 12
6049; PWR5-NEXT:    vadduwm 3, 3, 3
6050; PWR5-NEXT:    vslw 2, 2, 5
6051; PWR5-NEXT:    vadduwm 2, 4, 2
6052; PWR5-NEXT:    vsrw 2, 2, 3
6053; PWR5-NEXT:    vspltisw 3, 9
6054; PWR5-NEXT:    vcmpgtuw 2, 2, 3
6055; PWR5-NEXT:    blr
6056;
6057; PWR6-LABEL: ugt_9_v4i32:
6058; PWR6:       # %bb.0:
6059; PWR6-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
6060; PWR6-NEXT:    vspltisw 4, 1
6061; PWR6-NEXT:    vxor 3, 3, 3
6062; PWR6-NEXT:    addi 3, 3, .LCPI56_0@toc@l
6063; PWR6-NEXT:    lvx 5, 0, 3
6064; PWR6-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
6065; PWR6-NEXT:    addi 3, 3, .LCPI56_1@toc@l
6066; PWR6-NEXT:    vspltisw 0, 2
6067; PWR6-NEXT:    vsrw 4, 2, 4
6068; PWR6-NEXT:    vand 4, 4, 5
6069; PWR6-NEXT:    lvx 5, 0, 3
6070; PWR6-NEXT:    vsubuwm 2, 2, 4
6071; PWR6-NEXT:    vand 4, 2, 5
6072; PWR6-NEXT:    vsrw 2, 2, 0
6073; PWR6-NEXT:    vand 2, 2, 5
6074; PWR6-NEXT:    vspltisw 5, 4
6075; PWR6-NEXT:    vadduwm 2, 4, 2
6076; PWR6-NEXT:    vsrw 4, 2, 5
6077; PWR6-NEXT:    vspltisb 5, 15
6078; PWR6-NEXT:    vadduwm 2, 2, 4
6079; PWR6-NEXT:    vspltisb 4, 1
6080; PWR6-NEXT:    vand 2, 2, 5
6081; PWR6-NEXT:    vspltisw 5, -16
6082; PWR6-NEXT:    vrlw 0, 4, 5
6083; PWR6-NEXT:    vmulouh 4, 2, 4
6084; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
6085; PWR6-NEXT:    vspltisw 3, 12
6086; PWR6-NEXT:    vadduwm 3, 3, 3
6087; PWR6-NEXT:    vslw 2, 2, 5
6088; PWR6-NEXT:    vadduwm 2, 4, 2
6089; PWR6-NEXT:    vsrw 2, 2, 3
6090; PWR6-NEXT:    vspltisw 3, 9
6091; PWR6-NEXT:    vcmpgtuw 2, 2, 3
6092; PWR6-NEXT:    blr
6093;
6094; PWR7-LABEL: ugt_9_v4i32:
6095; PWR7:       # %bb.0:
6096; PWR7-NEXT:    vspltisw 3, 1
6097; PWR7-NEXT:    addis 3, 2, .LCPI56_0@toc@ha
6098; PWR7-NEXT:    addi 3, 3, .LCPI56_0@toc@l
6099; PWR7-NEXT:    vspltisw 4, 2
6100; PWR7-NEXT:    lxvw4x 0, 0, 3
6101; PWR7-NEXT:    addis 3, 2, .LCPI56_1@toc@ha
6102; PWR7-NEXT:    vspltisw 5, 4
6103; PWR7-NEXT:    addi 3, 3, .LCPI56_1@toc@l
6104; PWR7-NEXT:    vsrw 3, 2, 3
6105; PWR7-NEXT:    vspltisb 0, 15
6106; PWR7-NEXT:    vspltisb 1, 1
6107; PWR7-NEXT:    vspltisw 6, -16
6108; PWR7-NEXT:    vspltisw 7, 12
6109; PWR7-NEXT:    xxland 35, 35, 0
6110; PWR7-NEXT:    lxvw4x 0, 0, 3
6111; PWR7-NEXT:    vsubuwm 2, 2, 3
6112; PWR7-NEXT:    vsrw 3, 2, 4
6113; PWR7-NEXT:    xxland 34, 34, 0
6114; PWR7-NEXT:    xxland 35, 35, 0
6115; PWR7-NEXT:    vadduwm 2, 2, 3
6116; PWR7-NEXT:    vsrw 3, 2, 5
6117; PWR7-NEXT:    xxlxor 37, 37, 37
6118; PWR7-NEXT:    vadduwm 2, 2, 3
6119; PWR7-NEXT:    vrlw 3, 1, 6
6120; PWR7-NEXT:    xxland 34, 34, 32
6121; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
6122; PWR7-NEXT:    vmulouh 2, 2, 1
6123; PWR7-NEXT:    vslw 3, 3, 6
6124; PWR7-NEXT:    vadduwm 2, 2, 3
6125; PWR7-NEXT:    vadduwm 3, 7, 7
6126; PWR7-NEXT:    vspltisw 4, 9
6127; PWR7-NEXT:    vsrw 2, 2, 3
6128; PWR7-NEXT:    vcmpgtuw 2, 2, 4
6129; PWR7-NEXT:    blr
6130;
6131; PWR8-LABEL: ugt_9_v4i32:
6132; PWR8:       # %bb.0:
6133; PWR8-NEXT:    vspltisw 3, 9
6134; PWR8-NEXT:    vpopcntw 2, 2
6135; PWR8-NEXT:    vcmpgtuw 2, 2, 3
6136; PWR8-NEXT:    blr
6137;
6138; PWR9-LABEL: ugt_9_v4i32:
6139; PWR9:       # %bb.0:
6140; PWR9-NEXT:    vpopcntw 2, 2
6141; PWR9-NEXT:    vspltisw 3, 9
6142; PWR9-NEXT:    vcmpgtuw 2, 2, 3
6143; PWR9-NEXT:    blr
6144  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6145  %3 = icmp ugt <4 x i32> %2, <i32 9, i32 9, i32 9, i32 9>
6146  %4 = sext <4 x i1> %3 to <4 x i32>
6147  ret <4 x i32> %4
6148}
6149
6150define <4 x i32> @ult_10_v4i32(<4 x i32> %0) {
6151; PWR5-LABEL: ult_10_v4i32:
6152; PWR5:       # %bb.0:
6153; PWR5-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
6154; PWR5-NEXT:    vspltisw 4, 1
6155; PWR5-NEXT:    vxor 3, 3, 3
6156; PWR5-NEXT:    addi 3, 3, .LCPI57_0@toc@l
6157; PWR5-NEXT:    lvx 5, 0, 3
6158; PWR5-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
6159; PWR5-NEXT:    addi 3, 3, .LCPI57_1@toc@l
6160; PWR5-NEXT:    vspltisw 0, 2
6161; PWR5-NEXT:    vsrw 4, 2, 4
6162; PWR5-NEXT:    vand 4, 4, 5
6163; PWR5-NEXT:    lvx 5, 0, 3
6164; PWR5-NEXT:    vsubuwm 2, 2, 4
6165; PWR5-NEXT:    vand 4, 2, 5
6166; PWR5-NEXT:    vsrw 2, 2, 0
6167; PWR5-NEXT:    vand 2, 2, 5
6168; PWR5-NEXT:    vspltisw 5, 4
6169; PWR5-NEXT:    vadduwm 2, 4, 2
6170; PWR5-NEXT:    vsrw 4, 2, 5
6171; PWR5-NEXT:    vspltisb 5, 15
6172; PWR5-NEXT:    vadduwm 2, 2, 4
6173; PWR5-NEXT:    vspltisb 4, 1
6174; PWR5-NEXT:    vand 2, 2, 5
6175; PWR5-NEXT:    vspltisw 5, -16
6176; PWR5-NEXT:    vrlw 0, 4, 5
6177; PWR5-NEXT:    vmulouh 4, 2, 4
6178; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
6179; PWR5-NEXT:    vspltisw 3, 12
6180; PWR5-NEXT:    vadduwm 3, 3, 3
6181; PWR5-NEXT:    vslw 2, 2, 5
6182; PWR5-NEXT:    vadduwm 2, 4, 2
6183; PWR5-NEXT:    vsrw 2, 2, 3
6184; PWR5-NEXT:    vspltisw 3, 10
6185; PWR5-NEXT:    vcmpgtuw 2, 3, 2
6186; PWR5-NEXT:    blr
6187;
6188; PWR6-LABEL: ult_10_v4i32:
6189; PWR6:       # %bb.0:
6190; PWR6-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
6191; PWR6-NEXT:    vspltisw 4, 1
6192; PWR6-NEXT:    vxor 3, 3, 3
6193; PWR6-NEXT:    addi 3, 3, .LCPI57_0@toc@l
6194; PWR6-NEXT:    lvx 5, 0, 3
6195; PWR6-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
6196; PWR6-NEXT:    addi 3, 3, .LCPI57_1@toc@l
6197; PWR6-NEXT:    vspltisw 0, 2
6198; PWR6-NEXT:    vsrw 4, 2, 4
6199; PWR6-NEXT:    vand 4, 4, 5
6200; PWR6-NEXT:    lvx 5, 0, 3
6201; PWR6-NEXT:    vsubuwm 2, 2, 4
6202; PWR6-NEXT:    vand 4, 2, 5
6203; PWR6-NEXT:    vsrw 2, 2, 0
6204; PWR6-NEXT:    vand 2, 2, 5
6205; PWR6-NEXT:    vspltisw 5, 4
6206; PWR6-NEXT:    vadduwm 2, 4, 2
6207; PWR6-NEXT:    vsrw 4, 2, 5
6208; PWR6-NEXT:    vspltisb 5, 15
6209; PWR6-NEXT:    vadduwm 2, 2, 4
6210; PWR6-NEXT:    vspltisb 4, 1
6211; PWR6-NEXT:    vand 2, 2, 5
6212; PWR6-NEXT:    vspltisw 5, -16
6213; PWR6-NEXT:    vrlw 0, 4, 5
6214; PWR6-NEXT:    vmulouh 4, 2, 4
6215; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
6216; PWR6-NEXT:    vspltisw 3, 12
6217; PWR6-NEXT:    vadduwm 3, 3, 3
6218; PWR6-NEXT:    vslw 2, 2, 5
6219; PWR6-NEXT:    vadduwm 2, 4, 2
6220; PWR6-NEXT:    vsrw 2, 2, 3
6221; PWR6-NEXT:    vspltisw 3, 10
6222; PWR6-NEXT:    vcmpgtuw 2, 3, 2
6223; PWR6-NEXT:    blr
6224;
6225; PWR7-LABEL: ult_10_v4i32:
6226; PWR7:       # %bb.0:
6227; PWR7-NEXT:    vspltisw 3, 1
6228; PWR7-NEXT:    addis 3, 2, .LCPI57_0@toc@ha
6229; PWR7-NEXT:    addi 3, 3, .LCPI57_0@toc@l
6230; PWR7-NEXT:    vspltisw 4, 2
6231; PWR7-NEXT:    lxvw4x 0, 0, 3
6232; PWR7-NEXT:    addis 3, 2, .LCPI57_1@toc@ha
6233; PWR7-NEXT:    vspltisw 5, 4
6234; PWR7-NEXT:    addi 3, 3, .LCPI57_1@toc@l
6235; PWR7-NEXT:    vsrw 3, 2, 3
6236; PWR7-NEXT:    vspltisb 0, 15
6237; PWR7-NEXT:    vspltisb 1, 1
6238; PWR7-NEXT:    vspltisw 6, -16
6239; PWR7-NEXT:    vspltisw 7, 12
6240; PWR7-NEXT:    xxland 35, 35, 0
6241; PWR7-NEXT:    lxvw4x 0, 0, 3
6242; PWR7-NEXT:    vsubuwm 2, 2, 3
6243; PWR7-NEXT:    vsrw 3, 2, 4
6244; PWR7-NEXT:    xxland 34, 34, 0
6245; PWR7-NEXT:    xxland 35, 35, 0
6246; PWR7-NEXT:    vadduwm 2, 2, 3
6247; PWR7-NEXT:    vsrw 3, 2, 5
6248; PWR7-NEXT:    xxlxor 37, 37, 37
6249; PWR7-NEXT:    vadduwm 2, 2, 3
6250; PWR7-NEXT:    vrlw 3, 1, 6
6251; PWR7-NEXT:    xxland 34, 34, 32
6252; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
6253; PWR7-NEXT:    vmulouh 2, 2, 1
6254; PWR7-NEXT:    vslw 3, 3, 6
6255; PWR7-NEXT:    vadduwm 2, 2, 3
6256; PWR7-NEXT:    vadduwm 3, 7, 7
6257; PWR7-NEXT:    vspltisw 4, 10
6258; PWR7-NEXT:    vsrw 2, 2, 3
6259; PWR7-NEXT:    vcmpgtuw 2, 4, 2
6260; PWR7-NEXT:    blr
6261;
6262; PWR8-LABEL: ult_10_v4i32:
6263; PWR8:       # %bb.0:
6264; PWR8-NEXT:    vspltisw 3, 10
6265; PWR8-NEXT:    vpopcntw 2, 2
6266; PWR8-NEXT:    vcmpgtuw 2, 3, 2
6267; PWR8-NEXT:    blr
6268;
6269; PWR9-LABEL: ult_10_v4i32:
6270; PWR9:       # %bb.0:
6271; PWR9-NEXT:    vpopcntw 2, 2
6272; PWR9-NEXT:    vspltisw 3, 10
6273; PWR9-NEXT:    vcmpgtuw 2, 3, 2
6274; PWR9-NEXT:    blr
6275  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6276  %3 = icmp ult <4 x i32> %2, <i32 10, i32 10, i32 10, i32 10>
6277  %4 = sext <4 x i1> %3 to <4 x i32>
6278  ret <4 x i32> %4
6279}
6280
6281define <4 x i32> @ugt_10_v4i32(<4 x i32> %0) {
6282; PWR5-LABEL: ugt_10_v4i32:
6283; PWR5:       # %bb.0:
6284; PWR5-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
6285; PWR5-NEXT:    vspltisw 4, 1
6286; PWR5-NEXT:    vxor 3, 3, 3
6287; PWR5-NEXT:    addi 3, 3, .LCPI58_0@toc@l
6288; PWR5-NEXT:    lvx 5, 0, 3
6289; PWR5-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
6290; PWR5-NEXT:    addi 3, 3, .LCPI58_1@toc@l
6291; PWR5-NEXT:    vspltisw 0, 2
6292; PWR5-NEXT:    vsrw 4, 2, 4
6293; PWR5-NEXT:    vand 4, 4, 5
6294; PWR5-NEXT:    lvx 5, 0, 3
6295; PWR5-NEXT:    vsubuwm 2, 2, 4
6296; PWR5-NEXT:    vand 4, 2, 5
6297; PWR5-NEXT:    vsrw 2, 2, 0
6298; PWR5-NEXT:    vand 2, 2, 5
6299; PWR5-NEXT:    vspltisw 5, 4
6300; PWR5-NEXT:    vadduwm 2, 4, 2
6301; PWR5-NEXT:    vsrw 4, 2, 5
6302; PWR5-NEXT:    vspltisb 5, 15
6303; PWR5-NEXT:    vadduwm 2, 2, 4
6304; PWR5-NEXT:    vspltisb 4, 1
6305; PWR5-NEXT:    vand 2, 2, 5
6306; PWR5-NEXT:    vspltisw 5, -16
6307; PWR5-NEXT:    vrlw 0, 4, 5
6308; PWR5-NEXT:    vmulouh 4, 2, 4
6309; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
6310; PWR5-NEXT:    vspltisw 3, 12
6311; PWR5-NEXT:    vadduwm 3, 3, 3
6312; PWR5-NEXT:    vslw 2, 2, 5
6313; PWR5-NEXT:    vadduwm 2, 4, 2
6314; PWR5-NEXT:    vsrw 2, 2, 3
6315; PWR5-NEXT:    vspltisw 3, 10
6316; PWR5-NEXT:    vcmpgtuw 2, 2, 3
6317; PWR5-NEXT:    blr
6318;
6319; PWR6-LABEL: ugt_10_v4i32:
6320; PWR6:       # %bb.0:
6321; PWR6-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
6322; PWR6-NEXT:    vspltisw 4, 1
6323; PWR6-NEXT:    vxor 3, 3, 3
6324; PWR6-NEXT:    addi 3, 3, .LCPI58_0@toc@l
6325; PWR6-NEXT:    lvx 5, 0, 3
6326; PWR6-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
6327; PWR6-NEXT:    addi 3, 3, .LCPI58_1@toc@l
6328; PWR6-NEXT:    vspltisw 0, 2
6329; PWR6-NEXT:    vsrw 4, 2, 4
6330; PWR6-NEXT:    vand 4, 4, 5
6331; PWR6-NEXT:    lvx 5, 0, 3
6332; PWR6-NEXT:    vsubuwm 2, 2, 4
6333; PWR6-NEXT:    vand 4, 2, 5
6334; PWR6-NEXT:    vsrw 2, 2, 0
6335; PWR6-NEXT:    vand 2, 2, 5
6336; PWR6-NEXT:    vspltisw 5, 4
6337; PWR6-NEXT:    vadduwm 2, 4, 2
6338; PWR6-NEXT:    vsrw 4, 2, 5
6339; PWR6-NEXT:    vspltisb 5, 15
6340; PWR6-NEXT:    vadduwm 2, 2, 4
6341; PWR6-NEXT:    vspltisb 4, 1
6342; PWR6-NEXT:    vand 2, 2, 5
6343; PWR6-NEXT:    vspltisw 5, -16
6344; PWR6-NEXT:    vrlw 0, 4, 5
6345; PWR6-NEXT:    vmulouh 4, 2, 4
6346; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
6347; PWR6-NEXT:    vspltisw 3, 12
6348; PWR6-NEXT:    vadduwm 3, 3, 3
6349; PWR6-NEXT:    vslw 2, 2, 5
6350; PWR6-NEXT:    vadduwm 2, 4, 2
6351; PWR6-NEXT:    vsrw 2, 2, 3
6352; PWR6-NEXT:    vspltisw 3, 10
6353; PWR6-NEXT:    vcmpgtuw 2, 2, 3
6354; PWR6-NEXT:    blr
6355;
6356; PWR7-LABEL: ugt_10_v4i32:
6357; PWR7:       # %bb.0:
6358; PWR7-NEXT:    vspltisw 3, 1
6359; PWR7-NEXT:    addis 3, 2, .LCPI58_0@toc@ha
6360; PWR7-NEXT:    addi 3, 3, .LCPI58_0@toc@l
6361; PWR7-NEXT:    vspltisw 4, 2
6362; PWR7-NEXT:    lxvw4x 0, 0, 3
6363; PWR7-NEXT:    addis 3, 2, .LCPI58_1@toc@ha
6364; PWR7-NEXT:    vspltisw 5, 4
6365; PWR7-NEXT:    addi 3, 3, .LCPI58_1@toc@l
6366; PWR7-NEXT:    vsrw 3, 2, 3
6367; PWR7-NEXT:    vspltisb 0, 15
6368; PWR7-NEXT:    vspltisb 1, 1
6369; PWR7-NEXT:    vspltisw 6, -16
6370; PWR7-NEXT:    vspltisw 7, 12
6371; PWR7-NEXT:    xxland 35, 35, 0
6372; PWR7-NEXT:    lxvw4x 0, 0, 3
6373; PWR7-NEXT:    vsubuwm 2, 2, 3
6374; PWR7-NEXT:    vsrw 3, 2, 4
6375; PWR7-NEXT:    xxland 34, 34, 0
6376; PWR7-NEXT:    xxland 35, 35, 0
6377; PWR7-NEXT:    vadduwm 2, 2, 3
6378; PWR7-NEXT:    vsrw 3, 2, 5
6379; PWR7-NEXT:    xxlxor 37, 37, 37
6380; PWR7-NEXT:    vadduwm 2, 2, 3
6381; PWR7-NEXT:    vrlw 3, 1, 6
6382; PWR7-NEXT:    xxland 34, 34, 32
6383; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
6384; PWR7-NEXT:    vmulouh 2, 2, 1
6385; PWR7-NEXT:    vslw 3, 3, 6
6386; PWR7-NEXT:    vadduwm 2, 2, 3
6387; PWR7-NEXT:    vadduwm 3, 7, 7
6388; PWR7-NEXT:    vspltisw 4, 10
6389; PWR7-NEXT:    vsrw 2, 2, 3
6390; PWR7-NEXT:    vcmpgtuw 2, 2, 4
6391; PWR7-NEXT:    blr
6392;
6393; PWR8-LABEL: ugt_10_v4i32:
6394; PWR8:       # %bb.0:
6395; PWR8-NEXT:    vspltisw 3, 10
6396; PWR8-NEXT:    vpopcntw 2, 2
6397; PWR8-NEXT:    vcmpgtuw 2, 2, 3
6398; PWR8-NEXT:    blr
6399;
6400; PWR9-LABEL: ugt_10_v4i32:
6401; PWR9:       # %bb.0:
6402; PWR9-NEXT:    vpopcntw 2, 2
6403; PWR9-NEXT:    vspltisw 3, 10
6404; PWR9-NEXT:    vcmpgtuw 2, 2, 3
6405; PWR9-NEXT:    blr
6406  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6407  %3 = icmp ugt <4 x i32> %2, <i32 10, i32 10, i32 10, i32 10>
6408  %4 = sext <4 x i1> %3 to <4 x i32>
6409  ret <4 x i32> %4
6410}
6411
6412define <4 x i32> @ult_11_v4i32(<4 x i32> %0) {
6413; PWR5-LABEL: ult_11_v4i32:
6414; PWR5:       # %bb.0:
6415; PWR5-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
6416; PWR5-NEXT:    vspltisw 4, 1
6417; PWR5-NEXT:    vxor 3, 3, 3
6418; PWR5-NEXT:    addi 3, 3, .LCPI59_0@toc@l
6419; PWR5-NEXT:    lvx 5, 0, 3
6420; PWR5-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
6421; PWR5-NEXT:    addi 3, 3, .LCPI59_1@toc@l
6422; PWR5-NEXT:    vspltisw 0, 2
6423; PWR5-NEXT:    vsrw 4, 2, 4
6424; PWR5-NEXT:    vand 4, 4, 5
6425; PWR5-NEXT:    lvx 5, 0, 3
6426; PWR5-NEXT:    vsubuwm 2, 2, 4
6427; PWR5-NEXT:    vand 4, 2, 5
6428; PWR5-NEXT:    vsrw 2, 2, 0
6429; PWR5-NEXT:    vand 2, 2, 5
6430; PWR5-NEXT:    vspltisw 5, 4
6431; PWR5-NEXT:    vadduwm 2, 4, 2
6432; PWR5-NEXT:    vsrw 4, 2, 5
6433; PWR5-NEXT:    vspltisb 5, 15
6434; PWR5-NEXT:    vadduwm 2, 2, 4
6435; PWR5-NEXT:    vspltisb 4, 1
6436; PWR5-NEXT:    vand 2, 2, 5
6437; PWR5-NEXT:    vspltisw 5, -16
6438; PWR5-NEXT:    vrlw 0, 4, 5
6439; PWR5-NEXT:    vmulouh 4, 2, 4
6440; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
6441; PWR5-NEXT:    vspltisw 3, 12
6442; PWR5-NEXT:    vadduwm 3, 3, 3
6443; PWR5-NEXT:    vslw 2, 2, 5
6444; PWR5-NEXT:    vadduwm 2, 4, 2
6445; PWR5-NEXT:    vsrw 2, 2, 3
6446; PWR5-NEXT:    vspltisw 3, 11
6447; PWR5-NEXT:    vcmpgtuw 2, 3, 2
6448; PWR5-NEXT:    blr
6449;
6450; PWR6-LABEL: ult_11_v4i32:
6451; PWR6:       # %bb.0:
6452; PWR6-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
6453; PWR6-NEXT:    vspltisw 4, 1
6454; PWR6-NEXT:    vxor 3, 3, 3
6455; PWR6-NEXT:    addi 3, 3, .LCPI59_0@toc@l
6456; PWR6-NEXT:    lvx 5, 0, 3
6457; PWR6-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
6458; PWR6-NEXT:    addi 3, 3, .LCPI59_1@toc@l
6459; PWR6-NEXT:    vspltisw 0, 2
6460; PWR6-NEXT:    vsrw 4, 2, 4
6461; PWR6-NEXT:    vand 4, 4, 5
6462; PWR6-NEXT:    lvx 5, 0, 3
6463; PWR6-NEXT:    vsubuwm 2, 2, 4
6464; PWR6-NEXT:    vand 4, 2, 5
6465; PWR6-NEXT:    vsrw 2, 2, 0
6466; PWR6-NEXT:    vand 2, 2, 5
6467; PWR6-NEXT:    vspltisw 5, 4
6468; PWR6-NEXT:    vadduwm 2, 4, 2
6469; PWR6-NEXT:    vsrw 4, 2, 5
6470; PWR6-NEXT:    vspltisb 5, 15
6471; PWR6-NEXT:    vadduwm 2, 2, 4
6472; PWR6-NEXT:    vspltisb 4, 1
6473; PWR6-NEXT:    vand 2, 2, 5
6474; PWR6-NEXT:    vspltisw 5, -16
6475; PWR6-NEXT:    vrlw 0, 4, 5
6476; PWR6-NEXT:    vmulouh 4, 2, 4
6477; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
6478; PWR6-NEXT:    vspltisw 3, 12
6479; PWR6-NEXT:    vadduwm 3, 3, 3
6480; PWR6-NEXT:    vslw 2, 2, 5
6481; PWR6-NEXT:    vadduwm 2, 4, 2
6482; PWR6-NEXT:    vsrw 2, 2, 3
6483; PWR6-NEXT:    vspltisw 3, 11
6484; PWR6-NEXT:    vcmpgtuw 2, 3, 2
6485; PWR6-NEXT:    blr
6486;
6487; PWR7-LABEL: ult_11_v4i32:
6488; PWR7:       # %bb.0:
6489; PWR7-NEXT:    vspltisw 3, 1
6490; PWR7-NEXT:    addis 3, 2, .LCPI59_0@toc@ha
6491; PWR7-NEXT:    addi 3, 3, .LCPI59_0@toc@l
6492; PWR7-NEXT:    vspltisw 4, 2
6493; PWR7-NEXT:    lxvw4x 0, 0, 3
6494; PWR7-NEXT:    addis 3, 2, .LCPI59_1@toc@ha
6495; PWR7-NEXT:    vspltisw 5, 4
6496; PWR7-NEXT:    addi 3, 3, .LCPI59_1@toc@l
6497; PWR7-NEXT:    vsrw 3, 2, 3
6498; PWR7-NEXT:    vspltisb 0, 15
6499; PWR7-NEXT:    vspltisb 1, 1
6500; PWR7-NEXT:    vspltisw 6, -16
6501; PWR7-NEXT:    vspltisw 7, 12
6502; PWR7-NEXT:    xxland 35, 35, 0
6503; PWR7-NEXT:    lxvw4x 0, 0, 3
6504; PWR7-NEXT:    vsubuwm 2, 2, 3
6505; PWR7-NEXT:    vsrw 3, 2, 4
6506; PWR7-NEXT:    xxland 34, 34, 0
6507; PWR7-NEXT:    xxland 35, 35, 0
6508; PWR7-NEXT:    vadduwm 2, 2, 3
6509; PWR7-NEXT:    vsrw 3, 2, 5
6510; PWR7-NEXT:    xxlxor 37, 37, 37
6511; PWR7-NEXT:    vadduwm 2, 2, 3
6512; PWR7-NEXT:    vrlw 3, 1, 6
6513; PWR7-NEXT:    xxland 34, 34, 32
6514; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
6515; PWR7-NEXT:    vmulouh 2, 2, 1
6516; PWR7-NEXT:    vslw 3, 3, 6
6517; PWR7-NEXT:    vadduwm 2, 2, 3
6518; PWR7-NEXT:    vadduwm 3, 7, 7
6519; PWR7-NEXT:    vspltisw 4, 11
6520; PWR7-NEXT:    vsrw 2, 2, 3
6521; PWR7-NEXT:    vcmpgtuw 2, 4, 2
6522; PWR7-NEXT:    blr
6523;
6524; PWR8-LABEL: ult_11_v4i32:
6525; PWR8:       # %bb.0:
6526; PWR8-NEXT:    vspltisw 3, 11
6527; PWR8-NEXT:    vpopcntw 2, 2
6528; PWR8-NEXT:    vcmpgtuw 2, 3, 2
6529; PWR8-NEXT:    blr
6530;
6531; PWR9-LABEL: ult_11_v4i32:
6532; PWR9:       # %bb.0:
6533; PWR9-NEXT:    vpopcntw 2, 2
6534; PWR9-NEXT:    vspltisw 3, 11
6535; PWR9-NEXT:    vcmpgtuw 2, 3, 2
6536; PWR9-NEXT:    blr
6537  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6538  %3 = icmp ult <4 x i32> %2, <i32 11, i32 11, i32 11, i32 11>
6539  %4 = sext <4 x i1> %3 to <4 x i32>
6540  ret <4 x i32> %4
6541}
6542
6543define <4 x i32> @ugt_11_v4i32(<4 x i32> %0) {
6544; PWR5-LABEL: ugt_11_v4i32:
6545; PWR5:       # %bb.0:
6546; PWR5-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
6547; PWR5-NEXT:    vspltisw 4, 1
6548; PWR5-NEXT:    vxor 3, 3, 3
6549; PWR5-NEXT:    addi 3, 3, .LCPI60_0@toc@l
6550; PWR5-NEXT:    lvx 5, 0, 3
6551; PWR5-NEXT:    addis 3, 2, .LCPI60_1@toc@ha
6552; PWR5-NEXT:    addi 3, 3, .LCPI60_1@toc@l
6553; PWR5-NEXT:    vspltisw 0, 2
6554; PWR5-NEXT:    vsrw 4, 2, 4
6555; PWR5-NEXT:    vand 4, 4, 5
6556; PWR5-NEXT:    lvx 5, 0, 3
6557; PWR5-NEXT:    vsubuwm 2, 2, 4
6558; PWR5-NEXT:    vand 4, 2, 5
6559; PWR5-NEXT:    vsrw 2, 2, 0
6560; PWR5-NEXT:    vand 2, 2, 5
6561; PWR5-NEXT:    vspltisw 5, 4
6562; PWR5-NEXT:    vadduwm 2, 4, 2
6563; PWR5-NEXT:    vsrw 4, 2, 5
6564; PWR5-NEXT:    vspltisb 5, 15
6565; PWR5-NEXT:    vadduwm 2, 2, 4
6566; PWR5-NEXT:    vspltisb 4, 1
6567; PWR5-NEXT:    vand 2, 2, 5
6568; PWR5-NEXT:    vspltisw 5, -16
6569; PWR5-NEXT:    vrlw 0, 4, 5
6570; PWR5-NEXT:    vmulouh 4, 2, 4
6571; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
6572; PWR5-NEXT:    vspltisw 3, 12
6573; PWR5-NEXT:    vadduwm 3, 3, 3
6574; PWR5-NEXT:    vslw 2, 2, 5
6575; PWR5-NEXT:    vadduwm 2, 4, 2
6576; PWR5-NEXT:    vsrw 2, 2, 3
6577; PWR5-NEXT:    vspltisw 3, 11
6578; PWR5-NEXT:    vcmpgtuw 2, 2, 3
6579; PWR5-NEXT:    blr
6580;
6581; PWR6-LABEL: ugt_11_v4i32:
6582; PWR6:       # %bb.0:
6583; PWR6-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
6584; PWR6-NEXT:    vspltisw 4, 1
6585; PWR6-NEXT:    vxor 3, 3, 3
6586; PWR6-NEXT:    addi 3, 3, .LCPI60_0@toc@l
6587; PWR6-NEXT:    lvx 5, 0, 3
6588; PWR6-NEXT:    addis 3, 2, .LCPI60_1@toc@ha
6589; PWR6-NEXT:    addi 3, 3, .LCPI60_1@toc@l
6590; PWR6-NEXT:    vspltisw 0, 2
6591; PWR6-NEXT:    vsrw 4, 2, 4
6592; PWR6-NEXT:    vand 4, 4, 5
6593; PWR6-NEXT:    lvx 5, 0, 3
6594; PWR6-NEXT:    vsubuwm 2, 2, 4
6595; PWR6-NEXT:    vand 4, 2, 5
6596; PWR6-NEXT:    vsrw 2, 2, 0
6597; PWR6-NEXT:    vand 2, 2, 5
6598; PWR6-NEXT:    vspltisw 5, 4
6599; PWR6-NEXT:    vadduwm 2, 4, 2
6600; PWR6-NEXT:    vsrw 4, 2, 5
6601; PWR6-NEXT:    vspltisb 5, 15
6602; PWR6-NEXT:    vadduwm 2, 2, 4
6603; PWR6-NEXT:    vspltisb 4, 1
6604; PWR6-NEXT:    vand 2, 2, 5
6605; PWR6-NEXT:    vspltisw 5, -16
6606; PWR6-NEXT:    vrlw 0, 4, 5
6607; PWR6-NEXT:    vmulouh 4, 2, 4
6608; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
6609; PWR6-NEXT:    vspltisw 3, 12
6610; PWR6-NEXT:    vadduwm 3, 3, 3
6611; PWR6-NEXT:    vslw 2, 2, 5
6612; PWR6-NEXT:    vadduwm 2, 4, 2
6613; PWR6-NEXT:    vsrw 2, 2, 3
6614; PWR6-NEXT:    vspltisw 3, 11
6615; PWR6-NEXT:    vcmpgtuw 2, 2, 3
6616; PWR6-NEXT:    blr
6617;
6618; PWR7-LABEL: ugt_11_v4i32:
6619; PWR7:       # %bb.0:
6620; PWR7-NEXT:    vspltisw 3, 1
6621; PWR7-NEXT:    addis 3, 2, .LCPI60_0@toc@ha
6622; PWR7-NEXT:    addi 3, 3, .LCPI60_0@toc@l
6623; PWR7-NEXT:    vspltisw 4, 2
6624; PWR7-NEXT:    lxvw4x 0, 0, 3
6625; PWR7-NEXT:    addis 3, 2, .LCPI60_1@toc@ha
6626; PWR7-NEXT:    vspltisw 5, 4
6627; PWR7-NEXT:    addi 3, 3, .LCPI60_1@toc@l
6628; PWR7-NEXT:    vsrw 3, 2, 3
6629; PWR7-NEXT:    vspltisb 0, 15
6630; PWR7-NEXT:    vspltisb 1, 1
6631; PWR7-NEXT:    vspltisw 6, -16
6632; PWR7-NEXT:    vspltisw 7, 12
6633; PWR7-NEXT:    xxland 35, 35, 0
6634; PWR7-NEXT:    lxvw4x 0, 0, 3
6635; PWR7-NEXT:    vsubuwm 2, 2, 3
6636; PWR7-NEXT:    vsrw 3, 2, 4
6637; PWR7-NEXT:    xxland 34, 34, 0
6638; PWR7-NEXT:    xxland 35, 35, 0
6639; PWR7-NEXT:    vadduwm 2, 2, 3
6640; PWR7-NEXT:    vsrw 3, 2, 5
6641; PWR7-NEXT:    xxlxor 37, 37, 37
6642; PWR7-NEXT:    vadduwm 2, 2, 3
6643; PWR7-NEXT:    vrlw 3, 1, 6
6644; PWR7-NEXT:    xxland 34, 34, 32
6645; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
6646; PWR7-NEXT:    vmulouh 2, 2, 1
6647; PWR7-NEXT:    vslw 3, 3, 6
6648; PWR7-NEXT:    vadduwm 2, 2, 3
6649; PWR7-NEXT:    vadduwm 3, 7, 7
6650; PWR7-NEXT:    vspltisw 4, 11
6651; PWR7-NEXT:    vsrw 2, 2, 3
6652; PWR7-NEXT:    vcmpgtuw 2, 2, 4
6653; PWR7-NEXT:    blr
6654;
6655; PWR8-LABEL: ugt_11_v4i32:
6656; PWR8:       # %bb.0:
6657; PWR8-NEXT:    vspltisw 3, 11
6658; PWR8-NEXT:    vpopcntw 2, 2
6659; PWR8-NEXT:    vcmpgtuw 2, 2, 3
6660; PWR8-NEXT:    blr
6661;
6662; PWR9-LABEL: ugt_11_v4i32:
6663; PWR9:       # %bb.0:
6664; PWR9-NEXT:    vpopcntw 2, 2
6665; PWR9-NEXT:    vspltisw 3, 11
6666; PWR9-NEXT:    vcmpgtuw 2, 2, 3
6667; PWR9-NEXT:    blr
6668  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6669  %3 = icmp ugt <4 x i32> %2, <i32 11, i32 11, i32 11, i32 11>
6670  %4 = sext <4 x i1> %3 to <4 x i32>
6671  ret <4 x i32> %4
6672}
6673
6674define <4 x i32> @ult_12_v4i32(<4 x i32> %0) {
6675; PWR5-LABEL: ult_12_v4i32:
6676; PWR5:       # %bb.0:
6677; PWR5-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
6678; PWR5-NEXT:    vspltisw 4, 1
6679; PWR5-NEXT:    vxor 3, 3, 3
6680; PWR5-NEXT:    addi 3, 3, .LCPI61_0@toc@l
6681; PWR5-NEXT:    lvx 5, 0, 3
6682; PWR5-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
6683; PWR5-NEXT:    addi 3, 3, .LCPI61_1@toc@l
6684; PWR5-NEXT:    vspltisw 0, 2
6685; PWR5-NEXT:    vsrw 4, 2, 4
6686; PWR5-NEXT:    vand 4, 4, 5
6687; PWR5-NEXT:    lvx 5, 0, 3
6688; PWR5-NEXT:    vsubuwm 2, 2, 4
6689; PWR5-NEXT:    vand 4, 2, 5
6690; PWR5-NEXT:    vsrw 2, 2, 0
6691; PWR5-NEXT:    vand 2, 2, 5
6692; PWR5-NEXT:    vspltisw 5, 4
6693; PWR5-NEXT:    vadduwm 2, 4, 2
6694; PWR5-NEXT:    vsrw 4, 2, 5
6695; PWR5-NEXT:    vspltisb 5, 15
6696; PWR5-NEXT:    vadduwm 2, 2, 4
6697; PWR5-NEXT:    vspltisb 4, 1
6698; PWR5-NEXT:    vand 2, 2, 5
6699; PWR5-NEXT:    vspltisw 5, -16
6700; PWR5-NEXT:    vrlw 0, 4, 5
6701; PWR5-NEXT:    vmulouh 4, 2, 4
6702; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
6703; PWR5-NEXT:    vspltisw 3, 12
6704; PWR5-NEXT:    vslw 2, 2, 5
6705; PWR5-NEXT:    vadduwm 5, 3, 3
6706; PWR5-NEXT:    vadduwm 2, 4, 2
6707; PWR5-NEXT:    vsrw 2, 2, 5
6708; PWR5-NEXT:    vcmpgtuw 2, 3, 2
6709; PWR5-NEXT:    blr
6710;
6711; PWR6-LABEL: ult_12_v4i32:
6712; PWR6:       # %bb.0:
6713; PWR6-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
6714; PWR6-NEXT:    vspltisw 4, 1
6715; PWR6-NEXT:    vxor 3, 3, 3
6716; PWR6-NEXT:    addi 3, 3, .LCPI61_0@toc@l
6717; PWR6-NEXT:    lvx 5, 0, 3
6718; PWR6-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
6719; PWR6-NEXT:    addi 3, 3, .LCPI61_1@toc@l
6720; PWR6-NEXT:    vspltisw 0, 2
6721; PWR6-NEXT:    vsrw 4, 2, 4
6722; PWR6-NEXT:    vand 4, 4, 5
6723; PWR6-NEXT:    lvx 5, 0, 3
6724; PWR6-NEXT:    vsubuwm 2, 2, 4
6725; PWR6-NEXT:    vand 4, 2, 5
6726; PWR6-NEXT:    vsrw 2, 2, 0
6727; PWR6-NEXT:    vand 2, 2, 5
6728; PWR6-NEXT:    vspltisw 5, 4
6729; PWR6-NEXT:    vadduwm 2, 4, 2
6730; PWR6-NEXT:    vsrw 4, 2, 5
6731; PWR6-NEXT:    vspltisb 5, 15
6732; PWR6-NEXT:    vadduwm 2, 2, 4
6733; PWR6-NEXT:    vspltisb 4, 1
6734; PWR6-NEXT:    vand 2, 2, 5
6735; PWR6-NEXT:    vspltisw 5, -16
6736; PWR6-NEXT:    vrlw 0, 4, 5
6737; PWR6-NEXT:    vmulouh 4, 2, 4
6738; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
6739; PWR6-NEXT:    vspltisw 3, 12
6740; PWR6-NEXT:    vslw 2, 2, 5
6741; PWR6-NEXT:    vadduwm 5, 3, 3
6742; PWR6-NEXT:    vadduwm 2, 4, 2
6743; PWR6-NEXT:    vsrw 2, 2, 5
6744; PWR6-NEXT:    vcmpgtuw 2, 3, 2
6745; PWR6-NEXT:    blr
6746;
6747; PWR7-LABEL: ult_12_v4i32:
6748; PWR7:       # %bb.0:
6749; PWR7-NEXT:    vspltisw 3, 1
6750; PWR7-NEXT:    addis 3, 2, .LCPI61_0@toc@ha
6751; PWR7-NEXT:    addi 3, 3, .LCPI61_0@toc@l
6752; PWR7-NEXT:    vspltisw 4, 2
6753; PWR7-NEXT:    lxvw4x 0, 0, 3
6754; PWR7-NEXT:    addis 3, 2, .LCPI61_1@toc@ha
6755; PWR7-NEXT:    vspltisw 5, 4
6756; PWR7-NEXT:    addi 3, 3, .LCPI61_1@toc@l
6757; PWR7-NEXT:    vsrw 3, 2, 3
6758; PWR7-NEXT:    vspltisb 0, 15
6759; PWR7-NEXT:    vspltisb 1, 1
6760; PWR7-NEXT:    vspltisw 6, -16
6761; PWR7-NEXT:    vspltisw 7, 12
6762; PWR7-NEXT:    xxland 35, 35, 0
6763; PWR7-NEXT:    lxvw4x 0, 0, 3
6764; PWR7-NEXT:    vsubuwm 2, 2, 3
6765; PWR7-NEXT:    vsrw 3, 2, 4
6766; PWR7-NEXT:    xxland 34, 34, 0
6767; PWR7-NEXT:    xxlxor 36, 36, 36
6768; PWR7-NEXT:    xxland 35, 35, 0
6769; PWR7-NEXT:    vadduwm 2, 2, 3
6770; PWR7-NEXT:    vsrw 3, 2, 5
6771; PWR7-NEXT:    vadduwm 2, 2, 3
6772; PWR7-NEXT:    vrlw 3, 1, 6
6773; PWR7-NEXT:    xxland 34, 34, 32
6774; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
6775; PWR7-NEXT:    vmulouh 2, 2, 1
6776; PWR7-NEXT:    vslw 3, 3, 6
6777; PWR7-NEXT:    vadduwm 2, 2, 3
6778; PWR7-NEXT:    vadduwm 3, 7, 7
6779; PWR7-NEXT:    vsrw 2, 2, 3
6780; PWR7-NEXT:    vcmpgtuw 2, 7, 2
6781; PWR7-NEXT:    blr
6782;
6783; PWR8-LABEL: ult_12_v4i32:
6784; PWR8:       # %bb.0:
6785; PWR8-NEXT:    vspltisw 3, 12
6786; PWR8-NEXT:    vpopcntw 2, 2
6787; PWR8-NEXT:    vcmpgtuw 2, 3, 2
6788; PWR8-NEXT:    blr
6789;
6790; PWR9-LABEL: ult_12_v4i32:
6791; PWR9:       # %bb.0:
6792; PWR9-NEXT:    vpopcntw 2, 2
6793; PWR9-NEXT:    vspltisw 3, 12
6794; PWR9-NEXT:    vcmpgtuw 2, 3, 2
6795; PWR9-NEXT:    blr
6796  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6797  %3 = icmp ult <4 x i32> %2, <i32 12, i32 12, i32 12, i32 12>
6798  %4 = sext <4 x i1> %3 to <4 x i32>
6799  ret <4 x i32> %4
6800}
6801
6802define <4 x i32> @ugt_12_v4i32(<4 x i32> %0) {
6803; PWR5-LABEL: ugt_12_v4i32:
6804; PWR5:       # %bb.0:
6805; PWR5-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
6806; PWR5-NEXT:    vspltisw 4, 1
6807; PWR5-NEXT:    vxor 3, 3, 3
6808; PWR5-NEXT:    addi 3, 3, .LCPI62_0@toc@l
6809; PWR5-NEXT:    lvx 5, 0, 3
6810; PWR5-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
6811; PWR5-NEXT:    addi 3, 3, .LCPI62_1@toc@l
6812; PWR5-NEXT:    vspltisw 0, 2
6813; PWR5-NEXT:    vsrw 4, 2, 4
6814; PWR5-NEXT:    vand 4, 4, 5
6815; PWR5-NEXT:    lvx 5, 0, 3
6816; PWR5-NEXT:    vsubuwm 2, 2, 4
6817; PWR5-NEXT:    vand 4, 2, 5
6818; PWR5-NEXT:    vsrw 2, 2, 0
6819; PWR5-NEXT:    vand 2, 2, 5
6820; PWR5-NEXT:    vspltisw 5, 4
6821; PWR5-NEXT:    vadduwm 2, 4, 2
6822; PWR5-NEXT:    vsrw 4, 2, 5
6823; PWR5-NEXT:    vspltisb 5, 15
6824; PWR5-NEXT:    vadduwm 2, 2, 4
6825; PWR5-NEXT:    vspltisb 4, 1
6826; PWR5-NEXT:    vand 2, 2, 5
6827; PWR5-NEXT:    vspltisw 5, -16
6828; PWR5-NEXT:    vrlw 0, 4, 5
6829; PWR5-NEXT:    vmulouh 4, 2, 4
6830; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
6831; PWR5-NEXT:    vspltisw 3, 12
6832; PWR5-NEXT:    vslw 2, 2, 5
6833; PWR5-NEXT:    vadduwm 5, 3, 3
6834; PWR5-NEXT:    vadduwm 2, 4, 2
6835; PWR5-NEXT:    vsrw 2, 2, 5
6836; PWR5-NEXT:    vcmpgtuw 2, 2, 3
6837; PWR5-NEXT:    blr
6838;
6839; PWR6-LABEL: ugt_12_v4i32:
6840; PWR6:       # %bb.0:
6841; PWR6-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
6842; PWR6-NEXT:    vspltisw 4, 1
6843; PWR6-NEXT:    vxor 3, 3, 3
6844; PWR6-NEXT:    addi 3, 3, .LCPI62_0@toc@l
6845; PWR6-NEXT:    lvx 5, 0, 3
6846; PWR6-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
6847; PWR6-NEXT:    addi 3, 3, .LCPI62_1@toc@l
6848; PWR6-NEXT:    vspltisw 0, 2
6849; PWR6-NEXT:    vsrw 4, 2, 4
6850; PWR6-NEXT:    vand 4, 4, 5
6851; PWR6-NEXT:    lvx 5, 0, 3
6852; PWR6-NEXT:    vsubuwm 2, 2, 4
6853; PWR6-NEXT:    vand 4, 2, 5
6854; PWR6-NEXT:    vsrw 2, 2, 0
6855; PWR6-NEXT:    vand 2, 2, 5
6856; PWR6-NEXT:    vspltisw 5, 4
6857; PWR6-NEXT:    vadduwm 2, 4, 2
6858; PWR6-NEXT:    vsrw 4, 2, 5
6859; PWR6-NEXT:    vspltisb 5, 15
6860; PWR6-NEXT:    vadduwm 2, 2, 4
6861; PWR6-NEXT:    vspltisb 4, 1
6862; PWR6-NEXT:    vand 2, 2, 5
6863; PWR6-NEXT:    vspltisw 5, -16
6864; PWR6-NEXT:    vrlw 0, 4, 5
6865; PWR6-NEXT:    vmulouh 4, 2, 4
6866; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
6867; PWR6-NEXT:    vspltisw 3, 12
6868; PWR6-NEXT:    vslw 2, 2, 5
6869; PWR6-NEXT:    vadduwm 5, 3, 3
6870; PWR6-NEXT:    vadduwm 2, 4, 2
6871; PWR6-NEXT:    vsrw 2, 2, 5
6872; PWR6-NEXT:    vcmpgtuw 2, 2, 3
6873; PWR6-NEXT:    blr
6874;
6875; PWR7-LABEL: ugt_12_v4i32:
6876; PWR7:       # %bb.0:
6877; PWR7-NEXT:    vspltisw 3, 1
6878; PWR7-NEXT:    addis 3, 2, .LCPI62_0@toc@ha
6879; PWR7-NEXT:    addi 3, 3, .LCPI62_0@toc@l
6880; PWR7-NEXT:    vspltisw 4, 2
6881; PWR7-NEXT:    lxvw4x 0, 0, 3
6882; PWR7-NEXT:    addis 3, 2, .LCPI62_1@toc@ha
6883; PWR7-NEXT:    vspltisw 5, 4
6884; PWR7-NEXT:    addi 3, 3, .LCPI62_1@toc@l
6885; PWR7-NEXT:    vsrw 3, 2, 3
6886; PWR7-NEXT:    vspltisb 0, 15
6887; PWR7-NEXT:    vspltisb 1, 1
6888; PWR7-NEXT:    vspltisw 6, -16
6889; PWR7-NEXT:    vspltisw 7, 12
6890; PWR7-NEXT:    xxland 35, 35, 0
6891; PWR7-NEXT:    lxvw4x 0, 0, 3
6892; PWR7-NEXT:    vsubuwm 2, 2, 3
6893; PWR7-NEXT:    vsrw 3, 2, 4
6894; PWR7-NEXT:    xxland 34, 34, 0
6895; PWR7-NEXT:    xxlxor 36, 36, 36
6896; PWR7-NEXT:    xxland 35, 35, 0
6897; PWR7-NEXT:    vadduwm 2, 2, 3
6898; PWR7-NEXT:    vsrw 3, 2, 5
6899; PWR7-NEXT:    vadduwm 2, 2, 3
6900; PWR7-NEXT:    vrlw 3, 1, 6
6901; PWR7-NEXT:    xxland 34, 34, 32
6902; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
6903; PWR7-NEXT:    vmulouh 2, 2, 1
6904; PWR7-NEXT:    vslw 3, 3, 6
6905; PWR7-NEXT:    vadduwm 2, 2, 3
6906; PWR7-NEXT:    vadduwm 3, 7, 7
6907; PWR7-NEXT:    vsrw 2, 2, 3
6908; PWR7-NEXT:    vcmpgtuw 2, 2, 7
6909; PWR7-NEXT:    blr
6910;
6911; PWR8-LABEL: ugt_12_v4i32:
6912; PWR8:       # %bb.0:
6913; PWR8-NEXT:    vspltisw 3, 12
6914; PWR8-NEXT:    vpopcntw 2, 2
6915; PWR8-NEXT:    vcmpgtuw 2, 2, 3
6916; PWR8-NEXT:    blr
6917;
6918; PWR9-LABEL: ugt_12_v4i32:
6919; PWR9:       # %bb.0:
6920; PWR9-NEXT:    vpopcntw 2, 2
6921; PWR9-NEXT:    vspltisw 3, 12
6922; PWR9-NEXT:    vcmpgtuw 2, 2, 3
6923; PWR9-NEXT:    blr
6924  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
6925  %3 = icmp ugt <4 x i32> %2, <i32 12, i32 12, i32 12, i32 12>
6926  %4 = sext <4 x i1> %3 to <4 x i32>
6927  ret <4 x i32> %4
6928}
6929
6930define <4 x i32> @ult_13_v4i32(<4 x i32> %0) {
6931; PWR5-LABEL: ult_13_v4i32:
6932; PWR5:       # %bb.0:
6933; PWR5-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
6934; PWR5-NEXT:    vspltisw 4, 1
6935; PWR5-NEXT:    vxor 3, 3, 3
6936; PWR5-NEXT:    addi 3, 3, .LCPI63_0@toc@l
6937; PWR5-NEXT:    lvx 5, 0, 3
6938; PWR5-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
6939; PWR5-NEXT:    addi 3, 3, .LCPI63_1@toc@l
6940; PWR5-NEXT:    vspltisw 0, 2
6941; PWR5-NEXT:    vsrw 4, 2, 4
6942; PWR5-NEXT:    vand 4, 4, 5
6943; PWR5-NEXT:    lvx 5, 0, 3
6944; PWR5-NEXT:    vsubuwm 2, 2, 4
6945; PWR5-NEXT:    vand 4, 2, 5
6946; PWR5-NEXT:    vsrw 2, 2, 0
6947; PWR5-NEXT:    vand 2, 2, 5
6948; PWR5-NEXT:    vspltisw 5, 4
6949; PWR5-NEXT:    vadduwm 2, 4, 2
6950; PWR5-NEXT:    vsrw 4, 2, 5
6951; PWR5-NEXT:    vspltisb 5, 15
6952; PWR5-NEXT:    vadduwm 2, 2, 4
6953; PWR5-NEXT:    vspltisb 4, 1
6954; PWR5-NEXT:    vand 2, 2, 5
6955; PWR5-NEXT:    vspltisw 5, -16
6956; PWR5-NEXT:    vrlw 0, 4, 5
6957; PWR5-NEXT:    vmulouh 4, 2, 4
6958; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
6959; PWR5-NEXT:    vspltisw 3, 12
6960; PWR5-NEXT:    vadduwm 3, 3, 3
6961; PWR5-NEXT:    vslw 2, 2, 5
6962; PWR5-NEXT:    vadduwm 2, 4, 2
6963; PWR5-NEXT:    vsrw 2, 2, 3
6964; PWR5-NEXT:    vspltisw 3, 13
6965; PWR5-NEXT:    vcmpgtuw 2, 3, 2
6966; PWR5-NEXT:    blr
6967;
6968; PWR6-LABEL: ult_13_v4i32:
6969; PWR6:       # %bb.0:
6970; PWR6-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
6971; PWR6-NEXT:    vspltisw 4, 1
6972; PWR6-NEXT:    vxor 3, 3, 3
6973; PWR6-NEXT:    addi 3, 3, .LCPI63_0@toc@l
6974; PWR6-NEXT:    lvx 5, 0, 3
6975; PWR6-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
6976; PWR6-NEXT:    addi 3, 3, .LCPI63_1@toc@l
6977; PWR6-NEXT:    vspltisw 0, 2
6978; PWR6-NEXT:    vsrw 4, 2, 4
6979; PWR6-NEXT:    vand 4, 4, 5
6980; PWR6-NEXT:    lvx 5, 0, 3
6981; PWR6-NEXT:    vsubuwm 2, 2, 4
6982; PWR6-NEXT:    vand 4, 2, 5
6983; PWR6-NEXT:    vsrw 2, 2, 0
6984; PWR6-NEXT:    vand 2, 2, 5
6985; PWR6-NEXT:    vspltisw 5, 4
6986; PWR6-NEXT:    vadduwm 2, 4, 2
6987; PWR6-NEXT:    vsrw 4, 2, 5
6988; PWR6-NEXT:    vspltisb 5, 15
6989; PWR6-NEXT:    vadduwm 2, 2, 4
6990; PWR6-NEXT:    vspltisb 4, 1
6991; PWR6-NEXT:    vand 2, 2, 5
6992; PWR6-NEXT:    vspltisw 5, -16
6993; PWR6-NEXT:    vrlw 0, 4, 5
6994; PWR6-NEXT:    vmulouh 4, 2, 4
6995; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
6996; PWR6-NEXT:    vspltisw 3, 12
6997; PWR6-NEXT:    vadduwm 3, 3, 3
6998; PWR6-NEXT:    vslw 2, 2, 5
6999; PWR6-NEXT:    vadduwm 2, 4, 2
7000; PWR6-NEXT:    vsrw 2, 2, 3
7001; PWR6-NEXT:    vspltisw 3, 13
7002; PWR6-NEXT:    vcmpgtuw 2, 3, 2
7003; PWR6-NEXT:    blr
7004;
7005; PWR7-LABEL: ult_13_v4i32:
7006; PWR7:       # %bb.0:
7007; PWR7-NEXT:    vspltisw 3, 1
7008; PWR7-NEXT:    addis 3, 2, .LCPI63_0@toc@ha
7009; PWR7-NEXT:    addi 3, 3, .LCPI63_0@toc@l
7010; PWR7-NEXT:    vspltisw 4, 2
7011; PWR7-NEXT:    lxvw4x 0, 0, 3
7012; PWR7-NEXT:    addis 3, 2, .LCPI63_1@toc@ha
7013; PWR7-NEXT:    vspltisw 5, 4
7014; PWR7-NEXT:    addi 3, 3, .LCPI63_1@toc@l
7015; PWR7-NEXT:    vsrw 3, 2, 3
7016; PWR7-NEXT:    vspltisb 0, 15
7017; PWR7-NEXT:    vspltisb 1, 1
7018; PWR7-NEXT:    vspltisw 6, -16
7019; PWR7-NEXT:    vspltisw 7, 12
7020; PWR7-NEXT:    xxland 35, 35, 0
7021; PWR7-NEXT:    lxvw4x 0, 0, 3
7022; PWR7-NEXT:    vsubuwm 2, 2, 3
7023; PWR7-NEXT:    vsrw 3, 2, 4
7024; PWR7-NEXT:    xxland 34, 34, 0
7025; PWR7-NEXT:    xxland 35, 35, 0
7026; PWR7-NEXT:    vadduwm 2, 2, 3
7027; PWR7-NEXT:    vsrw 3, 2, 5
7028; PWR7-NEXT:    xxlxor 37, 37, 37
7029; PWR7-NEXT:    vadduwm 2, 2, 3
7030; PWR7-NEXT:    vrlw 3, 1, 6
7031; PWR7-NEXT:    xxland 34, 34, 32
7032; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
7033; PWR7-NEXT:    vmulouh 2, 2, 1
7034; PWR7-NEXT:    vslw 3, 3, 6
7035; PWR7-NEXT:    vadduwm 2, 2, 3
7036; PWR7-NEXT:    vadduwm 3, 7, 7
7037; PWR7-NEXT:    vspltisw 4, 13
7038; PWR7-NEXT:    vsrw 2, 2, 3
7039; PWR7-NEXT:    vcmpgtuw 2, 4, 2
7040; PWR7-NEXT:    blr
7041;
7042; PWR8-LABEL: ult_13_v4i32:
7043; PWR8:       # %bb.0:
7044; PWR8-NEXT:    vspltisw 3, 13
7045; PWR8-NEXT:    vpopcntw 2, 2
7046; PWR8-NEXT:    vcmpgtuw 2, 3, 2
7047; PWR8-NEXT:    blr
7048;
7049; PWR9-LABEL: ult_13_v4i32:
7050; PWR9:       # %bb.0:
7051; PWR9-NEXT:    vpopcntw 2, 2
7052; PWR9-NEXT:    vspltisw 3, 13
7053; PWR9-NEXT:    vcmpgtuw 2, 3, 2
7054; PWR9-NEXT:    blr
7055  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7056  %3 = icmp ult <4 x i32> %2, <i32 13, i32 13, i32 13, i32 13>
7057  %4 = sext <4 x i1> %3 to <4 x i32>
7058  ret <4 x i32> %4
7059}
7060
7061define <4 x i32> @ugt_13_v4i32(<4 x i32> %0) {
7062; PWR5-LABEL: ugt_13_v4i32:
7063; PWR5:       # %bb.0:
7064; PWR5-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
7065; PWR5-NEXT:    vspltisw 4, 1
7066; PWR5-NEXT:    vxor 3, 3, 3
7067; PWR5-NEXT:    addi 3, 3, .LCPI64_0@toc@l
7068; PWR5-NEXT:    lvx 5, 0, 3
7069; PWR5-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
7070; PWR5-NEXT:    addi 3, 3, .LCPI64_1@toc@l
7071; PWR5-NEXT:    vspltisw 0, 2
7072; PWR5-NEXT:    vsrw 4, 2, 4
7073; PWR5-NEXT:    vand 4, 4, 5
7074; PWR5-NEXT:    lvx 5, 0, 3
7075; PWR5-NEXT:    vsubuwm 2, 2, 4
7076; PWR5-NEXT:    vand 4, 2, 5
7077; PWR5-NEXT:    vsrw 2, 2, 0
7078; PWR5-NEXT:    vand 2, 2, 5
7079; PWR5-NEXT:    vspltisw 5, 4
7080; PWR5-NEXT:    vadduwm 2, 4, 2
7081; PWR5-NEXT:    vsrw 4, 2, 5
7082; PWR5-NEXT:    vspltisb 5, 15
7083; PWR5-NEXT:    vadduwm 2, 2, 4
7084; PWR5-NEXT:    vspltisb 4, 1
7085; PWR5-NEXT:    vand 2, 2, 5
7086; PWR5-NEXT:    vspltisw 5, -16
7087; PWR5-NEXT:    vrlw 0, 4, 5
7088; PWR5-NEXT:    vmulouh 4, 2, 4
7089; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
7090; PWR5-NEXT:    vspltisw 3, 12
7091; PWR5-NEXT:    vadduwm 3, 3, 3
7092; PWR5-NEXT:    vslw 2, 2, 5
7093; PWR5-NEXT:    vadduwm 2, 4, 2
7094; PWR5-NEXT:    vsrw 2, 2, 3
7095; PWR5-NEXT:    vspltisw 3, 13
7096; PWR5-NEXT:    vcmpgtuw 2, 2, 3
7097; PWR5-NEXT:    blr
7098;
7099; PWR6-LABEL: ugt_13_v4i32:
7100; PWR6:       # %bb.0:
7101; PWR6-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
7102; PWR6-NEXT:    vspltisw 4, 1
7103; PWR6-NEXT:    vxor 3, 3, 3
7104; PWR6-NEXT:    addi 3, 3, .LCPI64_0@toc@l
7105; PWR6-NEXT:    lvx 5, 0, 3
7106; PWR6-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
7107; PWR6-NEXT:    addi 3, 3, .LCPI64_1@toc@l
7108; PWR6-NEXT:    vspltisw 0, 2
7109; PWR6-NEXT:    vsrw 4, 2, 4
7110; PWR6-NEXT:    vand 4, 4, 5
7111; PWR6-NEXT:    lvx 5, 0, 3
7112; PWR6-NEXT:    vsubuwm 2, 2, 4
7113; PWR6-NEXT:    vand 4, 2, 5
7114; PWR6-NEXT:    vsrw 2, 2, 0
7115; PWR6-NEXT:    vand 2, 2, 5
7116; PWR6-NEXT:    vspltisw 5, 4
7117; PWR6-NEXT:    vadduwm 2, 4, 2
7118; PWR6-NEXT:    vsrw 4, 2, 5
7119; PWR6-NEXT:    vspltisb 5, 15
7120; PWR6-NEXT:    vadduwm 2, 2, 4
7121; PWR6-NEXT:    vspltisb 4, 1
7122; PWR6-NEXT:    vand 2, 2, 5
7123; PWR6-NEXT:    vspltisw 5, -16
7124; PWR6-NEXT:    vrlw 0, 4, 5
7125; PWR6-NEXT:    vmulouh 4, 2, 4
7126; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
7127; PWR6-NEXT:    vspltisw 3, 12
7128; PWR6-NEXT:    vadduwm 3, 3, 3
7129; PWR6-NEXT:    vslw 2, 2, 5
7130; PWR6-NEXT:    vadduwm 2, 4, 2
7131; PWR6-NEXT:    vsrw 2, 2, 3
7132; PWR6-NEXT:    vspltisw 3, 13
7133; PWR6-NEXT:    vcmpgtuw 2, 2, 3
7134; PWR6-NEXT:    blr
7135;
7136; PWR7-LABEL: ugt_13_v4i32:
7137; PWR7:       # %bb.0:
7138; PWR7-NEXT:    vspltisw 3, 1
7139; PWR7-NEXT:    addis 3, 2, .LCPI64_0@toc@ha
7140; PWR7-NEXT:    addi 3, 3, .LCPI64_0@toc@l
7141; PWR7-NEXT:    vspltisw 4, 2
7142; PWR7-NEXT:    lxvw4x 0, 0, 3
7143; PWR7-NEXT:    addis 3, 2, .LCPI64_1@toc@ha
7144; PWR7-NEXT:    vspltisw 5, 4
7145; PWR7-NEXT:    addi 3, 3, .LCPI64_1@toc@l
7146; PWR7-NEXT:    vsrw 3, 2, 3
7147; PWR7-NEXT:    vspltisb 0, 15
7148; PWR7-NEXT:    vspltisb 1, 1
7149; PWR7-NEXT:    vspltisw 6, -16
7150; PWR7-NEXT:    vspltisw 7, 12
7151; PWR7-NEXT:    xxland 35, 35, 0
7152; PWR7-NEXT:    lxvw4x 0, 0, 3
7153; PWR7-NEXT:    vsubuwm 2, 2, 3
7154; PWR7-NEXT:    vsrw 3, 2, 4
7155; PWR7-NEXT:    xxland 34, 34, 0
7156; PWR7-NEXT:    xxland 35, 35, 0
7157; PWR7-NEXT:    vadduwm 2, 2, 3
7158; PWR7-NEXT:    vsrw 3, 2, 5
7159; PWR7-NEXT:    xxlxor 37, 37, 37
7160; PWR7-NEXT:    vadduwm 2, 2, 3
7161; PWR7-NEXT:    vrlw 3, 1, 6
7162; PWR7-NEXT:    xxland 34, 34, 32
7163; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
7164; PWR7-NEXT:    vmulouh 2, 2, 1
7165; PWR7-NEXT:    vslw 3, 3, 6
7166; PWR7-NEXT:    vadduwm 2, 2, 3
7167; PWR7-NEXT:    vadduwm 3, 7, 7
7168; PWR7-NEXT:    vspltisw 4, 13
7169; PWR7-NEXT:    vsrw 2, 2, 3
7170; PWR7-NEXT:    vcmpgtuw 2, 2, 4
7171; PWR7-NEXT:    blr
7172;
7173; PWR8-LABEL: ugt_13_v4i32:
7174; PWR8:       # %bb.0:
7175; PWR8-NEXT:    vspltisw 3, 13
7176; PWR8-NEXT:    vpopcntw 2, 2
7177; PWR8-NEXT:    vcmpgtuw 2, 2, 3
7178; PWR8-NEXT:    blr
7179;
7180; PWR9-LABEL: ugt_13_v4i32:
7181; PWR9:       # %bb.0:
7182; PWR9-NEXT:    vpopcntw 2, 2
7183; PWR9-NEXT:    vspltisw 3, 13
7184; PWR9-NEXT:    vcmpgtuw 2, 2, 3
7185; PWR9-NEXT:    blr
7186  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7187  %3 = icmp ugt <4 x i32> %2, <i32 13, i32 13, i32 13, i32 13>
7188  %4 = sext <4 x i1> %3 to <4 x i32>
7189  ret <4 x i32> %4
7190}
7191
7192define <4 x i32> @ult_14_v4i32(<4 x i32> %0) {
7193; PWR5-LABEL: ult_14_v4i32:
7194; PWR5:       # %bb.0:
7195; PWR5-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
7196; PWR5-NEXT:    vspltisw 4, 1
7197; PWR5-NEXT:    vxor 3, 3, 3
7198; PWR5-NEXT:    addi 3, 3, .LCPI65_0@toc@l
7199; PWR5-NEXT:    lvx 5, 0, 3
7200; PWR5-NEXT:    addis 3, 2, .LCPI65_1@toc@ha
7201; PWR5-NEXT:    addi 3, 3, .LCPI65_1@toc@l
7202; PWR5-NEXT:    vspltisw 0, 2
7203; PWR5-NEXT:    vsrw 4, 2, 4
7204; PWR5-NEXT:    vand 4, 4, 5
7205; PWR5-NEXT:    lvx 5, 0, 3
7206; PWR5-NEXT:    vsubuwm 2, 2, 4
7207; PWR5-NEXT:    vand 4, 2, 5
7208; PWR5-NEXT:    vsrw 2, 2, 0
7209; PWR5-NEXT:    vand 2, 2, 5
7210; PWR5-NEXT:    vspltisw 5, 4
7211; PWR5-NEXT:    vadduwm 2, 4, 2
7212; PWR5-NEXT:    vsrw 4, 2, 5
7213; PWR5-NEXT:    vspltisb 5, 15
7214; PWR5-NEXT:    vadduwm 2, 2, 4
7215; PWR5-NEXT:    vspltisb 4, 1
7216; PWR5-NEXT:    vand 2, 2, 5
7217; PWR5-NEXT:    vspltisw 5, -16
7218; PWR5-NEXT:    vrlw 0, 4, 5
7219; PWR5-NEXT:    vmulouh 4, 2, 4
7220; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
7221; PWR5-NEXT:    vspltisw 3, 12
7222; PWR5-NEXT:    vadduwm 3, 3, 3
7223; PWR5-NEXT:    vslw 2, 2, 5
7224; PWR5-NEXT:    vadduwm 2, 4, 2
7225; PWR5-NEXT:    vsrw 2, 2, 3
7226; PWR5-NEXT:    vspltisw 3, 14
7227; PWR5-NEXT:    vcmpgtuw 2, 3, 2
7228; PWR5-NEXT:    blr
7229;
7230; PWR6-LABEL: ult_14_v4i32:
7231; PWR6:       # %bb.0:
7232; PWR6-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
7233; PWR6-NEXT:    vspltisw 4, 1
7234; PWR6-NEXT:    vxor 3, 3, 3
7235; PWR6-NEXT:    addi 3, 3, .LCPI65_0@toc@l
7236; PWR6-NEXT:    lvx 5, 0, 3
7237; PWR6-NEXT:    addis 3, 2, .LCPI65_1@toc@ha
7238; PWR6-NEXT:    addi 3, 3, .LCPI65_1@toc@l
7239; PWR6-NEXT:    vspltisw 0, 2
7240; PWR6-NEXT:    vsrw 4, 2, 4
7241; PWR6-NEXT:    vand 4, 4, 5
7242; PWR6-NEXT:    lvx 5, 0, 3
7243; PWR6-NEXT:    vsubuwm 2, 2, 4
7244; PWR6-NEXT:    vand 4, 2, 5
7245; PWR6-NEXT:    vsrw 2, 2, 0
7246; PWR6-NEXT:    vand 2, 2, 5
7247; PWR6-NEXT:    vspltisw 5, 4
7248; PWR6-NEXT:    vadduwm 2, 4, 2
7249; PWR6-NEXT:    vsrw 4, 2, 5
7250; PWR6-NEXT:    vspltisb 5, 15
7251; PWR6-NEXT:    vadduwm 2, 2, 4
7252; PWR6-NEXT:    vspltisb 4, 1
7253; PWR6-NEXT:    vand 2, 2, 5
7254; PWR6-NEXT:    vspltisw 5, -16
7255; PWR6-NEXT:    vrlw 0, 4, 5
7256; PWR6-NEXT:    vmulouh 4, 2, 4
7257; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
7258; PWR6-NEXT:    vspltisw 3, 12
7259; PWR6-NEXT:    vadduwm 3, 3, 3
7260; PWR6-NEXT:    vslw 2, 2, 5
7261; PWR6-NEXT:    vadduwm 2, 4, 2
7262; PWR6-NEXT:    vsrw 2, 2, 3
7263; PWR6-NEXT:    vspltisw 3, 14
7264; PWR6-NEXT:    vcmpgtuw 2, 3, 2
7265; PWR6-NEXT:    blr
7266;
7267; PWR7-LABEL: ult_14_v4i32:
7268; PWR7:       # %bb.0:
7269; PWR7-NEXT:    vspltisw 3, 1
7270; PWR7-NEXT:    addis 3, 2, .LCPI65_0@toc@ha
7271; PWR7-NEXT:    addi 3, 3, .LCPI65_0@toc@l
7272; PWR7-NEXT:    vspltisw 4, 2
7273; PWR7-NEXT:    lxvw4x 0, 0, 3
7274; PWR7-NEXT:    addis 3, 2, .LCPI65_1@toc@ha
7275; PWR7-NEXT:    vspltisw 5, 4
7276; PWR7-NEXT:    addi 3, 3, .LCPI65_1@toc@l
7277; PWR7-NEXT:    vsrw 3, 2, 3
7278; PWR7-NEXT:    vspltisb 0, 15
7279; PWR7-NEXT:    vspltisb 1, 1
7280; PWR7-NEXT:    vspltisw 6, -16
7281; PWR7-NEXT:    vspltisw 7, 12
7282; PWR7-NEXT:    xxland 35, 35, 0
7283; PWR7-NEXT:    lxvw4x 0, 0, 3
7284; PWR7-NEXT:    vsubuwm 2, 2, 3
7285; PWR7-NEXT:    vsrw 3, 2, 4
7286; PWR7-NEXT:    xxland 34, 34, 0
7287; PWR7-NEXT:    xxland 35, 35, 0
7288; PWR7-NEXT:    vadduwm 2, 2, 3
7289; PWR7-NEXT:    vsrw 3, 2, 5
7290; PWR7-NEXT:    xxlxor 37, 37, 37
7291; PWR7-NEXT:    vadduwm 2, 2, 3
7292; PWR7-NEXT:    vrlw 3, 1, 6
7293; PWR7-NEXT:    xxland 34, 34, 32
7294; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
7295; PWR7-NEXT:    vmulouh 2, 2, 1
7296; PWR7-NEXT:    vslw 3, 3, 6
7297; PWR7-NEXT:    vadduwm 2, 2, 3
7298; PWR7-NEXT:    vadduwm 3, 7, 7
7299; PWR7-NEXT:    vspltisw 4, 14
7300; PWR7-NEXT:    vsrw 2, 2, 3
7301; PWR7-NEXT:    vcmpgtuw 2, 4, 2
7302; PWR7-NEXT:    blr
7303;
7304; PWR8-LABEL: ult_14_v4i32:
7305; PWR8:       # %bb.0:
7306; PWR8-NEXT:    vspltisw 3, 14
7307; PWR8-NEXT:    vpopcntw 2, 2
7308; PWR8-NEXT:    vcmpgtuw 2, 3, 2
7309; PWR8-NEXT:    blr
7310;
7311; PWR9-LABEL: ult_14_v4i32:
7312; PWR9:       # %bb.0:
7313; PWR9-NEXT:    vpopcntw 2, 2
7314; PWR9-NEXT:    vspltisw 3, 14
7315; PWR9-NEXT:    vcmpgtuw 2, 3, 2
7316; PWR9-NEXT:    blr
7317  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7318  %3 = icmp ult <4 x i32> %2, <i32 14, i32 14, i32 14, i32 14>
7319  %4 = sext <4 x i1> %3 to <4 x i32>
7320  ret <4 x i32> %4
7321}
7322
7323define <4 x i32> @ugt_14_v4i32(<4 x i32> %0) {
7324; PWR5-LABEL: ugt_14_v4i32:
7325; PWR5:       # %bb.0:
7326; PWR5-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
7327; PWR5-NEXT:    vspltisw 4, 1
7328; PWR5-NEXT:    vxor 3, 3, 3
7329; PWR5-NEXT:    addi 3, 3, .LCPI66_0@toc@l
7330; PWR5-NEXT:    lvx 5, 0, 3
7331; PWR5-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
7332; PWR5-NEXT:    addi 3, 3, .LCPI66_1@toc@l
7333; PWR5-NEXT:    vspltisw 0, 2
7334; PWR5-NEXT:    vsrw 4, 2, 4
7335; PWR5-NEXT:    vand 4, 4, 5
7336; PWR5-NEXT:    lvx 5, 0, 3
7337; PWR5-NEXT:    vsubuwm 2, 2, 4
7338; PWR5-NEXT:    vand 4, 2, 5
7339; PWR5-NEXT:    vsrw 2, 2, 0
7340; PWR5-NEXT:    vand 2, 2, 5
7341; PWR5-NEXT:    vspltisw 5, 4
7342; PWR5-NEXT:    vadduwm 2, 4, 2
7343; PWR5-NEXT:    vsrw 4, 2, 5
7344; PWR5-NEXT:    vspltisb 5, 15
7345; PWR5-NEXT:    vadduwm 2, 2, 4
7346; PWR5-NEXT:    vspltisb 4, 1
7347; PWR5-NEXT:    vand 2, 2, 5
7348; PWR5-NEXT:    vspltisw 5, -16
7349; PWR5-NEXT:    vrlw 0, 4, 5
7350; PWR5-NEXT:    vmulouh 4, 2, 4
7351; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
7352; PWR5-NEXT:    vspltisw 3, 12
7353; PWR5-NEXT:    vadduwm 3, 3, 3
7354; PWR5-NEXT:    vslw 2, 2, 5
7355; PWR5-NEXT:    vadduwm 2, 4, 2
7356; PWR5-NEXT:    vsrw 2, 2, 3
7357; PWR5-NEXT:    vspltisw 3, 14
7358; PWR5-NEXT:    vcmpgtuw 2, 2, 3
7359; PWR5-NEXT:    blr
7360;
7361; PWR6-LABEL: ugt_14_v4i32:
7362; PWR6:       # %bb.0:
7363; PWR6-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
7364; PWR6-NEXT:    vspltisw 4, 1
7365; PWR6-NEXT:    vxor 3, 3, 3
7366; PWR6-NEXT:    addi 3, 3, .LCPI66_0@toc@l
7367; PWR6-NEXT:    lvx 5, 0, 3
7368; PWR6-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
7369; PWR6-NEXT:    addi 3, 3, .LCPI66_1@toc@l
7370; PWR6-NEXT:    vspltisw 0, 2
7371; PWR6-NEXT:    vsrw 4, 2, 4
7372; PWR6-NEXT:    vand 4, 4, 5
7373; PWR6-NEXT:    lvx 5, 0, 3
7374; PWR6-NEXT:    vsubuwm 2, 2, 4
7375; PWR6-NEXT:    vand 4, 2, 5
7376; PWR6-NEXT:    vsrw 2, 2, 0
7377; PWR6-NEXT:    vand 2, 2, 5
7378; PWR6-NEXT:    vspltisw 5, 4
7379; PWR6-NEXT:    vadduwm 2, 4, 2
7380; PWR6-NEXT:    vsrw 4, 2, 5
7381; PWR6-NEXT:    vspltisb 5, 15
7382; PWR6-NEXT:    vadduwm 2, 2, 4
7383; PWR6-NEXT:    vspltisb 4, 1
7384; PWR6-NEXT:    vand 2, 2, 5
7385; PWR6-NEXT:    vspltisw 5, -16
7386; PWR6-NEXT:    vrlw 0, 4, 5
7387; PWR6-NEXT:    vmulouh 4, 2, 4
7388; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
7389; PWR6-NEXT:    vspltisw 3, 12
7390; PWR6-NEXT:    vadduwm 3, 3, 3
7391; PWR6-NEXT:    vslw 2, 2, 5
7392; PWR6-NEXT:    vadduwm 2, 4, 2
7393; PWR6-NEXT:    vsrw 2, 2, 3
7394; PWR6-NEXT:    vspltisw 3, 14
7395; PWR6-NEXT:    vcmpgtuw 2, 2, 3
7396; PWR6-NEXT:    blr
7397;
7398; PWR7-LABEL: ugt_14_v4i32:
7399; PWR7:       # %bb.0:
7400; PWR7-NEXT:    vspltisw 3, 1
7401; PWR7-NEXT:    addis 3, 2, .LCPI66_0@toc@ha
7402; PWR7-NEXT:    addi 3, 3, .LCPI66_0@toc@l
7403; PWR7-NEXT:    vspltisw 4, 2
7404; PWR7-NEXT:    lxvw4x 0, 0, 3
7405; PWR7-NEXT:    addis 3, 2, .LCPI66_1@toc@ha
7406; PWR7-NEXT:    vspltisw 5, 4
7407; PWR7-NEXT:    addi 3, 3, .LCPI66_1@toc@l
7408; PWR7-NEXT:    vsrw 3, 2, 3
7409; PWR7-NEXT:    vspltisb 0, 15
7410; PWR7-NEXT:    vspltisb 1, 1
7411; PWR7-NEXT:    vspltisw 6, -16
7412; PWR7-NEXT:    vspltisw 7, 12
7413; PWR7-NEXT:    xxland 35, 35, 0
7414; PWR7-NEXT:    lxvw4x 0, 0, 3
7415; PWR7-NEXT:    vsubuwm 2, 2, 3
7416; PWR7-NEXT:    vsrw 3, 2, 4
7417; PWR7-NEXT:    xxland 34, 34, 0
7418; PWR7-NEXT:    xxland 35, 35, 0
7419; PWR7-NEXT:    vadduwm 2, 2, 3
7420; PWR7-NEXT:    vsrw 3, 2, 5
7421; PWR7-NEXT:    xxlxor 37, 37, 37
7422; PWR7-NEXT:    vadduwm 2, 2, 3
7423; PWR7-NEXT:    vrlw 3, 1, 6
7424; PWR7-NEXT:    xxland 34, 34, 32
7425; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
7426; PWR7-NEXT:    vmulouh 2, 2, 1
7427; PWR7-NEXT:    vslw 3, 3, 6
7428; PWR7-NEXT:    vadduwm 2, 2, 3
7429; PWR7-NEXT:    vadduwm 3, 7, 7
7430; PWR7-NEXT:    vspltisw 4, 14
7431; PWR7-NEXT:    vsrw 2, 2, 3
7432; PWR7-NEXT:    vcmpgtuw 2, 2, 4
7433; PWR7-NEXT:    blr
7434;
7435; PWR8-LABEL: ugt_14_v4i32:
7436; PWR8:       # %bb.0:
7437; PWR8-NEXT:    vspltisw 3, 14
7438; PWR8-NEXT:    vpopcntw 2, 2
7439; PWR8-NEXT:    vcmpgtuw 2, 2, 3
7440; PWR8-NEXT:    blr
7441;
7442; PWR9-LABEL: ugt_14_v4i32:
7443; PWR9:       # %bb.0:
7444; PWR9-NEXT:    vpopcntw 2, 2
7445; PWR9-NEXT:    vspltisw 3, 14
7446; PWR9-NEXT:    vcmpgtuw 2, 2, 3
7447; PWR9-NEXT:    blr
7448  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7449  %3 = icmp ugt <4 x i32> %2, <i32 14, i32 14, i32 14, i32 14>
7450  %4 = sext <4 x i1> %3 to <4 x i32>
7451  ret <4 x i32> %4
7452}
7453
7454define <4 x i32> @ult_15_v4i32(<4 x i32> %0) {
7455; PWR5-LABEL: ult_15_v4i32:
7456; PWR5:       # %bb.0:
7457; PWR5-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
7458; PWR5-NEXT:    vspltisw 4, 1
7459; PWR5-NEXT:    vxor 3, 3, 3
7460; PWR5-NEXT:    addi 3, 3, .LCPI67_0@toc@l
7461; PWR5-NEXT:    lvx 5, 0, 3
7462; PWR5-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
7463; PWR5-NEXT:    addi 3, 3, .LCPI67_1@toc@l
7464; PWR5-NEXT:    vspltisw 0, 2
7465; PWR5-NEXT:    vsrw 4, 2, 4
7466; PWR5-NEXT:    vand 4, 4, 5
7467; PWR5-NEXT:    lvx 5, 0, 3
7468; PWR5-NEXT:    vsubuwm 2, 2, 4
7469; PWR5-NEXT:    vand 4, 2, 5
7470; PWR5-NEXT:    vsrw 2, 2, 0
7471; PWR5-NEXT:    vand 2, 2, 5
7472; PWR5-NEXT:    vspltisw 5, 4
7473; PWR5-NEXT:    vadduwm 2, 4, 2
7474; PWR5-NEXT:    vsrw 4, 2, 5
7475; PWR5-NEXT:    vspltisb 5, 15
7476; PWR5-NEXT:    vadduwm 2, 2, 4
7477; PWR5-NEXT:    vspltisb 4, 1
7478; PWR5-NEXT:    vand 2, 2, 5
7479; PWR5-NEXT:    vspltisw 5, -16
7480; PWR5-NEXT:    vrlw 0, 4, 5
7481; PWR5-NEXT:    vmulouh 4, 2, 4
7482; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
7483; PWR5-NEXT:    vspltisw 3, 12
7484; PWR5-NEXT:    vadduwm 3, 3, 3
7485; PWR5-NEXT:    vslw 2, 2, 5
7486; PWR5-NEXT:    vadduwm 2, 4, 2
7487; PWR5-NEXT:    vsrw 2, 2, 3
7488; PWR5-NEXT:    vspltisw 3, 15
7489; PWR5-NEXT:    vcmpgtuw 2, 3, 2
7490; PWR5-NEXT:    blr
7491;
7492; PWR6-LABEL: ult_15_v4i32:
7493; PWR6:       # %bb.0:
7494; PWR6-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
7495; PWR6-NEXT:    vspltisw 4, 1
7496; PWR6-NEXT:    vxor 3, 3, 3
7497; PWR6-NEXT:    addi 3, 3, .LCPI67_0@toc@l
7498; PWR6-NEXT:    lvx 5, 0, 3
7499; PWR6-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
7500; PWR6-NEXT:    addi 3, 3, .LCPI67_1@toc@l
7501; PWR6-NEXT:    vspltisw 0, 2
7502; PWR6-NEXT:    vsrw 4, 2, 4
7503; PWR6-NEXT:    vand 4, 4, 5
7504; PWR6-NEXT:    lvx 5, 0, 3
7505; PWR6-NEXT:    vsubuwm 2, 2, 4
7506; PWR6-NEXT:    vand 4, 2, 5
7507; PWR6-NEXT:    vsrw 2, 2, 0
7508; PWR6-NEXT:    vand 2, 2, 5
7509; PWR6-NEXT:    vspltisw 5, 4
7510; PWR6-NEXT:    vadduwm 2, 4, 2
7511; PWR6-NEXT:    vsrw 4, 2, 5
7512; PWR6-NEXT:    vspltisb 5, 15
7513; PWR6-NEXT:    vadduwm 2, 2, 4
7514; PWR6-NEXT:    vspltisb 4, 1
7515; PWR6-NEXT:    vand 2, 2, 5
7516; PWR6-NEXT:    vspltisw 5, -16
7517; PWR6-NEXT:    vrlw 0, 4, 5
7518; PWR6-NEXT:    vmulouh 4, 2, 4
7519; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
7520; PWR6-NEXT:    vspltisw 3, 12
7521; PWR6-NEXT:    vadduwm 3, 3, 3
7522; PWR6-NEXT:    vslw 2, 2, 5
7523; PWR6-NEXT:    vadduwm 2, 4, 2
7524; PWR6-NEXT:    vsrw 2, 2, 3
7525; PWR6-NEXT:    vspltisw 3, 15
7526; PWR6-NEXT:    vcmpgtuw 2, 3, 2
7527; PWR6-NEXT:    blr
7528;
7529; PWR7-LABEL: ult_15_v4i32:
7530; PWR7:       # %bb.0:
7531; PWR7-NEXT:    vspltisw 3, 1
7532; PWR7-NEXT:    addis 3, 2, .LCPI67_0@toc@ha
7533; PWR7-NEXT:    addi 3, 3, .LCPI67_0@toc@l
7534; PWR7-NEXT:    vspltisw 4, 2
7535; PWR7-NEXT:    lxvw4x 0, 0, 3
7536; PWR7-NEXT:    addis 3, 2, .LCPI67_1@toc@ha
7537; PWR7-NEXT:    vspltisw 5, 4
7538; PWR7-NEXT:    addi 3, 3, .LCPI67_1@toc@l
7539; PWR7-NEXT:    vsrw 3, 2, 3
7540; PWR7-NEXT:    vspltisb 0, 15
7541; PWR7-NEXT:    vspltisb 1, 1
7542; PWR7-NEXT:    vspltisw 6, -16
7543; PWR7-NEXT:    vspltisw 7, 12
7544; PWR7-NEXT:    xxland 35, 35, 0
7545; PWR7-NEXT:    lxvw4x 0, 0, 3
7546; PWR7-NEXT:    vsubuwm 2, 2, 3
7547; PWR7-NEXT:    vsrw 3, 2, 4
7548; PWR7-NEXT:    xxland 34, 34, 0
7549; PWR7-NEXT:    xxland 35, 35, 0
7550; PWR7-NEXT:    vadduwm 2, 2, 3
7551; PWR7-NEXT:    vsrw 3, 2, 5
7552; PWR7-NEXT:    xxlxor 37, 37, 37
7553; PWR7-NEXT:    vadduwm 2, 2, 3
7554; PWR7-NEXT:    vrlw 3, 1, 6
7555; PWR7-NEXT:    xxland 34, 34, 32
7556; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
7557; PWR7-NEXT:    vmulouh 2, 2, 1
7558; PWR7-NEXT:    vslw 3, 3, 6
7559; PWR7-NEXT:    vadduwm 2, 2, 3
7560; PWR7-NEXT:    vadduwm 3, 7, 7
7561; PWR7-NEXT:    vspltisw 4, 15
7562; PWR7-NEXT:    vsrw 2, 2, 3
7563; PWR7-NEXT:    vcmpgtuw 2, 4, 2
7564; PWR7-NEXT:    blr
7565;
7566; PWR8-LABEL: ult_15_v4i32:
7567; PWR8:       # %bb.0:
7568; PWR8-NEXT:    vspltisw 3, 15
7569; PWR8-NEXT:    vpopcntw 2, 2
7570; PWR8-NEXT:    vcmpgtuw 2, 3, 2
7571; PWR8-NEXT:    blr
7572;
7573; PWR9-LABEL: ult_15_v4i32:
7574; PWR9:       # %bb.0:
7575; PWR9-NEXT:    vpopcntw 2, 2
7576; PWR9-NEXT:    vspltisw 3, 15
7577; PWR9-NEXT:    vcmpgtuw 2, 3, 2
7578; PWR9-NEXT:    blr
7579  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7580  %3 = icmp ult <4 x i32> %2, <i32 15, i32 15, i32 15, i32 15>
7581  %4 = sext <4 x i1> %3 to <4 x i32>
7582  ret <4 x i32> %4
7583}
7584
7585define <4 x i32> @ugt_15_v4i32(<4 x i32> %0) {
7586; PWR5-LABEL: ugt_15_v4i32:
7587; PWR5:       # %bb.0:
7588; PWR5-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
7589; PWR5-NEXT:    vspltisw 4, 1
7590; PWR5-NEXT:    vxor 3, 3, 3
7591; PWR5-NEXT:    addi 3, 3, .LCPI68_0@toc@l
7592; PWR5-NEXT:    lvx 5, 0, 3
7593; PWR5-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
7594; PWR5-NEXT:    addi 3, 3, .LCPI68_1@toc@l
7595; PWR5-NEXT:    vspltisw 0, 2
7596; PWR5-NEXT:    vsrw 4, 2, 4
7597; PWR5-NEXT:    vand 4, 4, 5
7598; PWR5-NEXT:    lvx 5, 0, 3
7599; PWR5-NEXT:    vsubuwm 2, 2, 4
7600; PWR5-NEXT:    vand 4, 2, 5
7601; PWR5-NEXT:    vsrw 2, 2, 0
7602; PWR5-NEXT:    vand 2, 2, 5
7603; PWR5-NEXT:    vspltisw 5, 4
7604; PWR5-NEXT:    vadduwm 2, 4, 2
7605; PWR5-NEXT:    vsrw 4, 2, 5
7606; PWR5-NEXT:    vspltisb 5, 15
7607; PWR5-NEXT:    vadduwm 2, 2, 4
7608; PWR5-NEXT:    vspltisb 4, 1
7609; PWR5-NEXT:    vand 2, 2, 5
7610; PWR5-NEXT:    vspltisw 5, -16
7611; PWR5-NEXT:    vrlw 0, 4, 5
7612; PWR5-NEXT:    vmulouh 4, 2, 4
7613; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
7614; PWR5-NEXT:    vspltisw 3, 12
7615; PWR5-NEXT:    vadduwm 3, 3, 3
7616; PWR5-NEXT:    vslw 2, 2, 5
7617; PWR5-NEXT:    vadduwm 2, 4, 2
7618; PWR5-NEXT:    vsrw 2, 2, 3
7619; PWR5-NEXT:    vspltisw 3, 15
7620; PWR5-NEXT:    vcmpgtuw 2, 2, 3
7621; PWR5-NEXT:    blr
7622;
7623; PWR6-LABEL: ugt_15_v4i32:
7624; PWR6:       # %bb.0:
7625; PWR6-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
7626; PWR6-NEXT:    vspltisw 4, 1
7627; PWR6-NEXT:    vxor 3, 3, 3
7628; PWR6-NEXT:    addi 3, 3, .LCPI68_0@toc@l
7629; PWR6-NEXT:    lvx 5, 0, 3
7630; PWR6-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
7631; PWR6-NEXT:    addi 3, 3, .LCPI68_1@toc@l
7632; PWR6-NEXT:    vspltisw 0, 2
7633; PWR6-NEXT:    vsrw 4, 2, 4
7634; PWR6-NEXT:    vand 4, 4, 5
7635; PWR6-NEXT:    lvx 5, 0, 3
7636; PWR6-NEXT:    vsubuwm 2, 2, 4
7637; PWR6-NEXT:    vand 4, 2, 5
7638; PWR6-NEXT:    vsrw 2, 2, 0
7639; PWR6-NEXT:    vand 2, 2, 5
7640; PWR6-NEXT:    vspltisw 5, 4
7641; PWR6-NEXT:    vadduwm 2, 4, 2
7642; PWR6-NEXT:    vsrw 4, 2, 5
7643; PWR6-NEXT:    vspltisb 5, 15
7644; PWR6-NEXT:    vadduwm 2, 2, 4
7645; PWR6-NEXT:    vspltisb 4, 1
7646; PWR6-NEXT:    vand 2, 2, 5
7647; PWR6-NEXT:    vspltisw 5, -16
7648; PWR6-NEXT:    vrlw 0, 4, 5
7649; PWR6-NEXT:    vmulouh 4, 2, 4
7650; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
7651; PWR6-NEXT:    vspltisw 3, 12
7652; PWR6-NEXT:    vadduwm 3, 3, 3
7653; PWR6-NEXT:    vslw 2, 2, 5
7654; PWR6-NEXT:    vadduwm 2, 4, 2
7655; PWR6-NEXT:    vsrw 2, 2, 3
7656; PWR6-NEXT:    vspltisw 3, 15
7657; PWR6-NEXT:    vcmpgtuw 2, 2, 3
7658; PWR6-NEXT:    blr
7659;
7660; PWR7-LABEL: ugt_15_v4i32:
7661; PWR7:       # %bb.0:
7662; PWR7-NEXT:    vspltisw 3, 1
7663; PWR7-NEXT:    addis 3, 2, .LCPI68_0@toc@ha
7664; PWR7-NEXT:    addi 3, 3, .LCPI68_0@toc@l
7665; PWR7-NEXT:    vspltisw 4, 2
7666; PWR7-NEXT:    lxvw4x 0, 0, 3
7667; PWR7-NEXT:    addis 3, 2, .LCPI68_1@toc@ha
7668; PWR7-NEXT:    vspltisw 5, 4
7669; PWR7-NEXT:    addi 3, 3, .LCPI68_1@toc@l
7670; PWR7-NEXT:    vsrw 3, 2, 3
7671; PWR7-NEXT:    vspltisb 0, 15
7672; PWR7-NEXT:    vspltisb 1, 1
7673; PWR7-NEXT:    vspltisw 6, -16
7674; PWR7-NEXT:    vspltisw 7, 12
7675; PWR7-NEXT:    xxland 35, 35, 0
7676; PWR7-NEXT:    lxvw4x 0, 0, 3
7677; PWR7-NEXT:    vsubuwm 2, 2, 3
7678; PWR7-NEXT:    vsrw 3, 2, 4
7679; PWR7-NEXT:    xxland 34, 34, 0
7680; PWR7-NEXT:    xxland 35, 35, 0
7681; PWR7-NEXT:    vadduwm 2, 2, 3
7682; PWR7-NEXT:    vsrw 3, 2, 5
7683; PWR7-NEXT:    xxlxor 37, 37, 37
7684; PWR7-NEXT:    vadduwm 2, 2, 3
7685; PWR7-NEXT:    vrlw 3, 1, 6
7686; PWR7-NEXT:    xxland 34, 34, 32
7687; PWR7-NEXT:    vmsumuhm 3, 2, 3, 5
7688; PWR7-NEXT:    vmulouh 2, 2, 1
7689; PWR7-NEXT:    vslw 3, 3, 6
7690; PWR7-NEXT:    vadduwm 2, 2, 3
7691; PWR7-NEXT:    vadduwm 3, 7, 7
7692; PWR7-NEXT:    vspltisw 4, 15
7693; PWR7-NEXT:    vsrw 2, 2, 3
7694; PWR7-NEXT:    vcmpgtuw 2, 2, 4
7695; PWR7-NEXT:    blr
7696;
7697; PWR8-LABEL: ugt_15_v4i32:
7698; PWR8:       # %bb.0:
7699; PWR8-NEXT:    vspltisw 3, 15
7700; PWR8-NEXT:    vpopcntw 2, 2
7701; PWR8-NEXT:    vcmpgtuw 2, 2, 3
7702; PWR8-NEXT:    blr
7703;
7704; PWR9-LABEL: ugt_15_v4i32:
7705; PWR9:       # %bb.0:
7706; PWR9-NEXT:    vpopcntw 2, 2
7707; PWR9-NEXT:    vspltisw 3, 15
7708; PWR9-NEXT:    vcmpgtuw 2, 2, 3
7709; PWR9-NEXT:    blr
7710  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7711  %3 = icmp ugt <4 x i32> %2, <i32 15, i32 15, i32 15, i32 15>
7712  %4 = sext <4 x i1> %3 to <4 x i32>
7713  ret <4 x i32> %4
7714}
7715
7716define <4 x i32> @ult_16_v4i32(<4 x i32> %0) {
7717; PWR5-LABEL: ult_16_v4i32:
7718; PWR5:       # %bb.0:
7719; PWR5-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
7720; PWR5-NEXT:    vspltisw 4, 1
7721; PWR5-NEXT:    vxor 3, 3, 3
7722; PWR5-NEXT:    addi 3, 3, .LCPI69_0@toc@l
7723; PWR5-NEXT:    lvx 5, 0, 3
7724; PWR5-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
7725; PWR5-NEXT:    addi 3, 3, .LCPI69_1@toc@l
7726; PWR5-NEXT:    vspltisw 0, 2
7727; PWR5-NEXT:    vsrw 4, 2, 4
7728; PWR5-NEXT:    vand 4, 4, 5
7729; PWR5-NEXT:    lvx 5, 0, 3
7730; PWR5-NEXT:    vsubuwm 2, 2, 4
7731; PWR5-NEXT:    vand 4, 2, 5
7732; PWR5-NEXT:    vsrw 2, 2, 0
7733; PWR5-NEXT:    vand 2, 2, 5
7734; PWR5-NEXT:    vspltisw 5, 4
7735; PWR5-NEXT:    vadduwm 2, 4, 2
7736; PWR5-NEXT:    vsrw 4, 2, 5
7737; PWR5-NEXT:    vspltisb 5, 15
7738; PWR5-NEXT:    vadduwm 2, 2, 4
7739; PWR5-NEXT:    vspltisb 4, 1
7740; PWR5-NEXT:    vand 2, 2, 5
7741; PWR5-NEXT:    vspltisw 5, -16
7742; PWR5-NEXT:    vrlw 0, 4, 5
7743; PWR5-NEXT:    vmulouh 4, 2, 4
7744; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
7745; PWR5-NEXT:    vspltisw 3, 12
7746; PWR5-NEXT:    vadduwm 3, 3, 3
7747; PWR5-NEXT:    vslw 2, 2, 5
7748; PWR5-NEXT:    vadduwm 2, 4, 2
7749; PWR5-NEXT:    vsrw 2, 2, 3
7750; PWR5-NEXT:    vspltisw 3, 8
7751; PWR5-NEXT:    vadduwm 3, 3, 3
7752; PWR5-NEXT:    vcmpgtuw 2, 3, 2
7753; PWR5-NEXT:    blr
7754;
7755; PWR6-LABEL: ult_16_v4i32:
7756; PWR6:       # %bb.0:
7757; PWR6-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
7758; PWR6-NEXT:    vspltisw 4, 1
7759; PWR6-NEXT:    vxor 3, 3, 3
7760; PWR6-NEXT:    addi 3, 3, .LCPI69_0@toc@l
7761; PWR6-NEXT:    lvx 5, 0, 3
7762; PWR6-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
7763; PWR6-NEXT:    addi 3, 3, .LCPI69_1@toc@l
7764; PWR6-NEXT:    vspltisw 0, 2
7765; PWR6-NEXT:    vsrw 4, 2, 4
7766; PWR6-NEXT:    vand 4, 4, 5
7767; PWR6-NEXT:    lvx 5, 0, 3
7768; PWR6-NEXT:    vsubuwm 2, 2, 4
7769; PWR6-NEXT:    vand 4, 2, 5
7770; PWR6-NEXT:    vsrw 2, 2, 0
7771; PWR6-NEXT:    vand 2, 2, 5
7772; PWR6-NEXT:    vspltisw 5, 4
7773; PWR6-NEXT:    vadduwm 2, 4, 2
7774; PWR6-NEXT:    vsrw 4, 2, 5
7775; PWR6-NEXT:    vspltisb 5, 15
7776; PWR6-NEXT:    vadduwm 2, 2, 4
7777; PWR6-NEXT:    vspltisb 4, 1
7778; PWR6-NEXT:    vand 2, 2, 5
7779; PWR6-NEXT:    vspltisw 5, -16
7780; PWR6-NEXT:    vrlw 0, 4, 5
7781; PWR6-NEXT:    vmulouh 4, 2, 4
7782; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
7783; PWR6-NEXT:    vspltisw 3, 12
7784; PWR6-NEXT:    vadduwm 3, 3, 3
7785; PWR6-NEXT:    vslw 2, 2, 5
7786; PWR6-NEXT:    vadduwm 2, 4, 2
7787; PWR6-NEXT:    vsrw 2, 2, 3
7788; PWR6-NEXT:    vspltisw 3, 8
7789; PWR6-NEXT:    vadduwm 3, 3, 3
7790; PWR6-NEXT:    vcmpgtuw 2, 3, 2
7791; PWR6-NEXT:    blr
7792;
7793; PWR7-LABEL: ult_16_v4i32:
7794; PWR7:       # %bb.0:
7795; PWR7-NEXT:    vspltisw 3, 1
7796; PWR7-NEXT:    addis 3, 2, .LCPI69_0@toc@ha
7797; PWR7-NEXT:    addi 3, 3, .LCPI69_0@toc@l
7798; PWR7-NEXT:    vspltisw 4, 2
7799; PWR7-NEXT:    lxvw4x 0, 0, 3
7800; PWR7-NEXT:    addis 3, 2, .LCPI69_1@toc@ha
7801; PWR7-NEXT:    vspltisw 5, 4
7802; PWR7-NEXT:    addi 3, 3, .LCPI69_1@toc@l
7803; PWR7-NEXT:    vsrw 3, 2, 3
7804; PWR7-NEXT:    vspltisb 0, 15
7805; PWR7-NEXT:    vspltisb 1, 1
7806; PWR7-NEXT:    vspltisw 6, -16
7807; PWR7-NEXT:    vspltisw 7, 12
7808; PWR7-NEXT:    vspltisw 8, 8
7809; PWR7-NEXT:    xxland 35, 35, 0
7810; PWR7-NEXT:    lxvw4x 0, 0, 3
7811; PWR7-NEXT:    vsubuwm 2, 2, 3
7812; PWR7-NEXT:    vsrw 3, 2, 4
7813; PWR7-NEXT:    xxland 34, 34, 0
7814; PWR7-NEXT:    xxlxor 36, 36, 36
7815; PWR7-NEXT:    xxland 35, 35, 0
7816; PWR7-NEXT:    vadduwm 2, 2, 3
7817; PWR7-NEXT:    vsrw 3, 2, 5
7818; PWR7-NEXT:    vadduwm 2, 2, 3
7819; PWR7-NEXT:    vrlw 3, 1, 6
7820; PWR7-NEXT:    xxland 34, 34, 32
7821; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
7822; PWR7-NEXT:    vmulouh 2, 2, 1
7823; PWR7-NEXT:    vslw 3, 3, 6
7824; PWR7-NEXT:    vadduwm 2, 2, 3
7825; PWR7-NEXT:    vadduwm 3, 7, 7
7826; PWR7-NEXT:    vsrw 2, 2, 3
7827; PWR7-NEXT:    vadduwm 3, 8, 8
7828; PWR7-NEXT:    vcmpgtuw 2, 3, 2
7829; PWR7-NEXT:    blr
7830;
7831; PWR8-LABEL: ult_16_v4i32:
7832; PWR8:       # %bb.0:
7833; PWR8-NEXT:    vspltisw 3, 8
7834; PWR8-NEXT:    vpopcntw 2, 2
7835; PWR8-NEXT:    vadduwm 3, 3, 3
7836; PWR8-NEXT:    vcmpgtuw 2, 3, 2
7837; PWR8-NEXT:    blr
7838;
7839; PWR9-LABEL: ult_16_v4i32:
7840; PWR9:       # %bb.0:
7841; PWR9-NEXT:    vspltisw 3, 8
7842; PWR9-NEXT:    vpopcntw 2, 2
7843; PWR9-NEXT:    vadduwm 3, 3, 3
7844; PWR9-NEXT:    vcmpgtuw 2, 3, 2
7845; PWR9-NEXT:    blr
7846  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7847  %3 = icmp ult <4 x i32> %2, <i32 16, i32 16, i32 16, i32 16>
7848  %4 = sext <4 x i1> %3 to <4 x i32>
7849  ret <4 x i32> %4
7850}
7851
7852define <4 x i32> @ugt_16_v4i32(<4 x i32> %0) {
7853; PWR5-LABEL: ugt_16_v4i32:
7854; PWR5:       # %bb.0:
7855; PWR5-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
7856; PWR5-NEXT:    vspltisw 4, 1
7857; PWR5-NEXT:    vxor 3, 3, 3
7858; PWR5-NEXT:    addi 3, 3, .LCPI70_0@toc@l
7859; PWR5-NEXT:    lvx 5, 0, 3
7860; PWR5-NEXT:    addis 3, 2, .LCPI70_1@toc@ha
7861; PWR5-NEXT:    addi 3, 3, .LCPI70_1@toc@l
7862; PWR5-NEXT:    vspltisw 0, 2
7863; PWR5-NEXT:    vsrw 4, 2, 4
7864; PWR5-NEXT:    vand 4, 4, 5
7865; PWR5-NEXT:    lvx 5, 0, 3
7866; PWR5-NEXT:    vsubuwm 2, 2, 4
7867; PWR5-NEXT:    vand 4, 2, 5
7868; PWR5-NEXT:    vsrw 2, 2, 0
7869; PWR5-NEXT:    vand 2, 2, 5
7870; PWR5-NEXT:    vspltisw 5, 4
7871; PWR5-NEXT:    vadduwm 2, 4, 2
7872; PWR5-NEXT:    vsrw 4, 2, 5
7873; PWR5-NEXT:    vspltisb 5, 15
7874; PWR5-NEXT:    vadduwm 2, 2, 4
7875; PWR5-NEXT:    vspltisb 4, 1
7876; PWR5-NEXT:    vand 2, 2, 5
7877; PWR5-NEXT:    vspltisw 5, -16
7878; PWR5-NEXT:    vrlw 0, 4, 5
7879; PWR5-NEXT:    vmulouh 4, 2, 4
7880; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
7881; PWR5-NEXT:    vspltisw 3, 12
7882; PWR5-NEXT:    vadduwm 3, 3, 3
7883; PWR5-NEXT:    vslw 2, 2, 5
7884; PWR5-NEXT:    vadduwm 2, 4, 2
7885; PWR5-NEXT:    vsrw 2, 2, 3
7886; PWR5-NEXT:    vspltisw 3, 8
7887; PWR5-NEXT:    vadduwm 3, 3, 3
7888; PWR5-NEXT:    vcmpgtuw 2, 2, 3
7889; PWR5-NEXT:    blr
7890;
7891; PWR6-LABEL: ugt_16_v4i32:
7892; PWR6:       # %bb.0:
7893; PWR6-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
7894; PWR6-NEXT:    vspltisw 4, 1
7895; PWR6-NEXT:    vxor 3, 3, 3
7896; PWR6-NEXT:    addi 3, 3, .LCPI70_0@toc@l
7897; PWR6-NEXT:    lvx 5, 0, 3
7898; PWR6-NEXT:    addis 3, 2, .LCPI70_1@toc@ha
7899; PWR6-NEXT:    addi 3, 3, .LCPI70_1@toc@l
7900; PWR6-NEXT:    vspltisw 0, 2
7901; PWR6-NEXT:    vsrw 4, 2, 4
7902; PWR6-NEXT:    vand 4, 4, 5
7903; PWR6-NEXT:    lvx 5, 0, 3
7904; PWR6-NEXT:    vsubuwm 2, 2, 4
7905; PWR6-NEXT:    vand 4, 2, 5
7906; PWR6-NEXT:    vsrw 2, 2, 0
7907; PWR6-NEXT:    vand 2, 2, 5
7908; PWR6-NEXT:    vspltisw 5, 4
7909; PWR6-NEXT:    vadduwm 2, 4, 2
7910; PWR6-NEXT:    vsrw 4, 2, 5
7911; PWR6-NEXT:    vspltisb 5, 15
7912; PWR6-NEXT:    vadduwm 2, 2, 4
7913; PWR6-NEXT:    vspltisb 4, 1
7914; PWR6-NEXT:    vand 2, 2, 5
7915; PWR6-NEXT:    vspltisw 5, -16
7916; PWR6-NEXT:    vrlw 0, 4, 5
7917; PWR6-NEXT:    vmulouh 4, 2, 4
7918; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
7919; PWR6-NEXT:    vspltisw 3, 12
7920; PWR6-NEXT:    vadduwm 3, 3, 3
7921; PWR6-NEXT:    vslw 2, 2, 5
7922; PWR6-NEXT:    vadduwm 2, 4, 2
7923; PWR6-NEXT:    vsrw 2, 2, 3
7924; PWR6-NEXT:    vspltisw 3, 8
7925; PWR6-NEXT:    vadduwm 3, 3, 3
7926; PWR6-NEXT:    vcmpgtuw 2, 2, 3
7927; PWR6-NEXT:    blr
7928;
7929; PWR7-LABEL: ugt_16_v4i32:
7930; PWR7:       # %bb.0:
7931; PWR7-NEXT:    vspltisw 3, 1
7932; PWR7-NEXT:    addis 3, 2, .LCPI70_0@toc@ha
7933; PWR7-NEXT:    addi 3, 3, .LCPI70_0@toc@l
7934; PWR7-NEXT:    vspltisw 4, 2
7935; PWR7-NEXT:    lxvw4x 0, 0, 3
7936; PWR7-NEXT:    addis 3, 2, .LCPI70_1@toc@ha
7937; PWR7-NEXT:    vspltisw 5, 4
7938; PWR7-NEXT:    addi 3, 3, .LCPI70_1@toc@l
7939; PWR7-NEXT:    vsrw 3, 2, 3
7940; PWR7-NEXT:    vspltisb 0, 15
7941; PWR7-NEXT:    vspltisb 1, 1
7942; PWR7-NEXT:    vspltisw 6, -16
7943; PWR7-NEXT:    vspltisw 7, 12
7944; PWR7-NEXT:    vspltisw 8, 8
7945; PWR7-NEXT:    xxland 35, 35, 0
7946; PWR7-NEXT:    lxvw4x 0, 0, 3
7947; PWR7-NEXT:    vsubuwm 2, 2, 3
7948; PWR7-NEXT:    vsrw 3, 2, 4
7949; PWR7-NEXT:    xxland 34, 34, 0
7950; PWR7-NEXT:    xxlxor 36, 36, 36
7951; PWR7-NEXT:    xxland 35, 35, 0
7952; PWR7-NEXT:    vadduwm 2, 2, 3
7953; PWR7-NEXT:    vsrw 3, 2, 5
7954; PWR7-NEXT:    vadduwm 2, 2, 3
7955; PWR7-NEXT:    vrlw 3, 1, 6
7956; PWR7-NEXT:    xxland 34, 34, 32
7957; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
7958; PWR7-NEXT:    vmulouh 2, 2, 1
7959; PWR7-NEXT:    vslw 3, 3, 6
7960; PWR7-NEXT:    vadduwm 2, 2, 3
7961; PWR7-NEXT:    vadduwm 3, 7, 7
7962; PWR7-NEXT:    vsrw 2, 2, 3
7963; PWR7-NEXT:    vadduwm 3, 8, 8
7964; PWR7-NEXT:    vcmpgtuw 2, 2, 3
7965; PWR7-NEXT:    blr
7966;
7967; PWR8-LABEL: ugt_16_v4i32:
7968; PWR8:       # %bb.0:
7969; PWR8-NEXT:    vspltisw 3, 8
7970; PWR8-NEXT:    vpopcntw 2, 2
7971; PWR8-NEXT:    vadduwm 3, 3, 3
7972; PWR8-NEXT:    vcmpgtuw 2, 2, 3
7973; PWR8-NEXT:    blr
7974;
7975; PWR9-LABEL: ugt_16_v4i32:
7976; PWR9:       # %bb.0:
7977; PWR9-NEXT:    vspltisw 3, 8
7978; PWR9-NEXT:    vpopcntw 2, 2
7979; PWR9-NEXT:    vadduwm 3, 3, 3
7980; PWR9-NEXT:    vcmpgtuw 2, 2, 3
7981; PWR9-NEXT:    blr
7982  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
7983  %3 = icmp ugt <4 x i32> %2, <i32 16, i32 16, i32 16, i32 16>
7984  %4 = sext <4 x i1> %3 to <4 x i32>
7985  ret <4 x i32> %4
7986}
7987
7988define <4 x i32> @ult_17_v4i32(<4 x i32> %0) {
7989; PWR5-LABEL: ult_17_v4i32:
7990; PWR5:       # %bb.0:
7991; PWR5-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
7992; PWR5-NEXT:    vspltisw 4, 1
7993; PWR5-NEXT:    vxor 3, 3, 3
7994; PWR5-NEXT:    addi 3, 3, .LCPI71_0@toc@l
7995; PWR5-NEXT:    lvx 0, 0, 3
7996; PWR5-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
7997; PWR5-NEXT:    addi 3, 3, .LCPI71_1@toc@l
7998; PWR5-NEXT:    vspltisw 1, 2
7999; PWR5-NEXT:    vsrw 5, 2, 4
8000; PWR5-NEXT:    vand 5, 5, 0
8001; PWR5-NEXT:    lvx 0, 0, 3
8002; PWR5-NEXT:    vsubuwm 2, 2, 5
8003; PWR5-NEXT:    vand 5, 2, 0
8004; PWR5-NEXT:    vsrw 2, 2, 1
8005; PWR5-NEXT:    vand 2, 2, 0
8006; PWR5-NEXT:    vspltisw 0, 4
8007; PWR5-NEXT:    vadduwm 2, 5, 2
8008; PWR5-NEXT:    vsrw 5, 2, 0
8009; PWR5-NEXT:    vspltisb 0, 15
8010; PWR5-NEXT:    vadduwm 2, 2, 5
8011; PWR5-NEXT:    vspltisb 5, 1
8012; PWR5-NEXT:    vand 2, 2, 0
8013; PWR5-NEXT:    vspltisw 0, -16
8014; PWR5-NEXT:    vrlw 1, 5, 0
8015; PWR5-NEXT:    vmulouh 5, 2, 5
8016; PWR5-NEXT:    vmsumuhm 2, 2, 1, 3
8017; PWR5-NEXT:    vspltisw 3, 12
8018; PWR5-NEXT:    vadduwm 3, 3, 3
8019; PWR5-NEXT:    vslw 2, 2, 0
8020; PWR5-NEXT:    vadduwm 2, 5, 2
8021; PWR5-NEXT:    vsrw 2, 2, 3
8022; PWR5-NEXT:    vsubuwm 3, 4, 0
8023; PWR5-NEXT:    vcmpgtuw 2, 3, 2
8024; PWR5-NEXT:    blr
8025;
8026; PWR6-LABEL: ult_17_v4i32:
8027; PWR6:       # %bb.0:
8028; PWR6-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
8029; PWR6-NEXT:    vspltisw 4, 1
8030; PWR6-NEXT:    vxor 3, 3, 3
8031; PWR6-NEXT:    addi 3, 3, .LCPI71_0@toc@l
8032; PWR6-NEXT:    lvx 0, 0, 3
8033; PWR6-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
8034; PWR6-NEXT:    addi 3, 3, .LCPI71_1@toc@l
8035; PWR6-NEXT:    vspltisw 1, 2
8036; PWR6-NEXT:    vsrw 5, 2, 4
8037; PWR6-NEXT:    vand 5, 5, 0
8038; PWR6-NEXT:    lvx 0, 0, 3
8039; PWR6-NEXT:    vsubuwm 2, 2, 5
8040; PWR6-NEXT:    vand 5, 2, 0
8041; PWR6-NEXT:    vsrw 2, 2, 1
8042; PWR6-NEXT:    vand 2, 2, 0
8043; PWR6-NEXT:    vspltisw 0, 4
8044; PWR6-NEXT:    vadduwm 2, 5, 2
8045; PWR6-NEXT:    vsrw 5, 2, 0
8046; PWR6-NEXT:    vspltisb 0, 15
8047; PWR6-NEXT:    vadduwm 2, 2, 5
8048; PWR6-NEXT:    vspltisb 5, 1
8049; PWR6-NEXT:    vand 2, 2, 0
8050; PWR6-NEXT:    vspltisw 0, -16
8051; PWR6-NEXT:    vrlw 1, 5, 0
8052; PWR6-NEXT:    vmulouh 5, 2, 5
8053; PWR6-NEXT:    vmsumuhm 2, 2, 1, 3
8054; PWR6-NEXT:    vspltisw 3, 12
8055; PWR6-NEXT:    vadduwm 3, 3, 3
8056; PWR6-NEXT:    vslw 2, 2, 0
8057; PWR6-NEXT:    vadduwm 2, 5, 2
8058; PWR6-NEXT:    vsrw 2, 2, 3
8059; PWR6-NEXT:    vsubuwm 3, 4, 0
8060; PWR6-NEXT:    vcmpgtuw 2, 3, 2
8061; PWR6-NEXT:    blr
8062;
8063; PWR7-LABEL: ult_17_v4i32:
8064; PWR7:       # %bb.0:
8065; PWR7-NEXT:    vspltisw 3, 1
8066; PWR7-NEXT:    addis 3, 2, .LCPI71_0@toc@ha
8067; PWR7-NEXT:    addi 3, 3, .LCPI71_0@toc@l
8068; PWR7-NEXT:    vspltisw 4, 2
8069; PWR7-NEXT:    lxvw4x 0, 0, 3
8070; PWR7-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
8071; PWR7-NEXT:    vspltisw 5, 4
8072; PWR7-NEXT:    addi 3, 3, .LCPI71_1@toc@l
8073; PWR7-NEXT:    vsrw 8, 2, 3
8074; PWR7-NEXT:    vspltisb 0, 15
8075; PWR7-NEXT:    vspltisb 1, 1
8076; PWR7-NEXT:    vspltisw 6, -16
8077; PWR7-NEXT:    vspltisw 7, 12
8078; PWR7-NEXT:    vsubuwm 3, 3, 6
8079; PWR7-NEXT:    xxland 40, 40, 0
8080; PWR7-NEXT:    lxvw4x 0, 0, 3
8081; PWR7-NEXT:    vsubuwm 2, 2, 8
8082; PWR7-NEXT:    vsrw 4, 2, 4
8083; PWR7-NEXT:    xxland 34, 34, 0
8084; PWR7-NEXT:    xxland 36, 36, 0
8085; PWR7-NEXT:    vadduwm 2, 2, 4
8086; PWR7-NEXT:    vsrw 4, 2, 5
8087; PWR7-NEXT:    xxlxor 37, 37, 37
8088; PWR7-NEXT:    vadduwm 2, 2, 4
8089; PWR7-NEXT:    vrlw 4, 1, 6
8090; PWR7-NEXT:    xxland 34, 34, 32
8091; PWR7-NEXT:    vmsumuhm 4, 2, 4, 5
8092; PWR7-NEXT:    vmulouh 2, 2, 1
8093; PWR7-NEXT:    vslw 4, 4, 6
8094; PWR7-NEXT:    vadduwm 2, 2, 4
8095; PWR7-NEXT:    vadduwm 4, 7, 7
8096; PWR7-NEXT:    vsrw 2, 2, 4
8097; PWR7-NEXT:    vcmpgtuw 2, 3, 2
8098; PWR7-NEXT:    blr
8099;
8100; PWR8-LABEL: ult_17_v4i32:
8101; PWR8:       # %bb.0:
8102; PWR8-NEXT:    vspltisw 3, -16
8103; PWR8-NEXT:    vspltisw 4, 1
8104; PWR8-NEXT:    vpopcntw 2, 2
8105; PWR8-NEXT:    vsubuwm 3, 4, 3
8106; PWR8-NEXT:    vcmpgtuw 2, 3, 2
8107; PWR8-NEXT:    blr
8108;
8109; PWR9-LABEL: ult_17_v4i32:
8110; PWR9:       # %bb.0:
8111; PWR9-NEXT:    vspltisw 3, -16
8112; PWR9-NEXT:    vspltisw 4, 1
8113; PWR9-NEXT:    vpopcntw 2, 2
8114; PWR9-NEXT:    vsubuwm 3, 4, 3
8115; PWR9-NEXT:    vcmpgtuw 2, 3, 2
8116; PWR9-NEXT:    blr
8117  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8118  %3 = icmp ult <4 x i32> %2, <i32 17, i32 17, i32 17, i32 17>
8119  %4 = sext <4 x i1> %3 to <4 x i32>
8120  ret <4 x i32> %4
8121}
8122
8123define <4 x i32> @ugt_17_v4i32(<4 x i32> %0) {
8124; PWR5-LABEL: ugt_17_v4i32:
8125; PWR5:       # %bb.0:
8126; PWR5-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
8127; PWR5-NEXT:    vspltisw 4, 1
8128; PWR5-NEXT:    vxor 3, 3, 3
8129; PWR5-NEXT:    addi 3, 3, .LCPI72_0@toc@l
8130; PWR5-NEXT:    lvx 0, 0, 3
8131; PWR5-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
8132; PWR5-NEXT:    addi 3, 3, .LCPI72_1@toc@l
8133; PWR5-NEXT:    vspltisw 1, 2
8134; PWR5-NEXT:    vsrw 5, 2, 4
8135; PWR5-NEXT:    vand 5, 5, 0
8136; PWR5-NEXT:    lvx 0, 0, 3
8137; PWR5-NEXT:    vsubuwm 2, 2, 5
8138; PWR5-NEXT:    vand 5, 2, 0
8139; PWR5-NEXT:    vsrw 2, 2, 1
8140; PWR5-NEXT:    vand 2, 2, 0
8141; PWR5-NEXT:    vspltisw 0, 4
8142; PWR5-NEXT:    vadduwm 2, 5, 2
8143; PWR5-NEXT:    vsrw 5, 2, 0
8144; PWR5-NEXT:    vspltisb 0, 15
8145; PWR5-NEXT:    vadduwm 2, 2, 5
8146; PWR5-NEXT:    vspltisb 5, 1
8147; PWR5-NEXT:    vand 2, 2, 0
8148; PWR5-NEXT:    vspltisw 0, -16
8149; PWR5-NEXT:    vrlw 1, 5, 0
8150; PWR5-NEXT:    vmulouh 5, 2, 5
8151; PWR5-NEXT:    vmsumuhm 2, 2, 1, 3
8152; PWR5-NEXT:    vspltisw 3, 12
8153; PWR5-NEXT:    vadduwm 3, 3, 3
8154; PWR5-NEXT:    vslw 2, 2, 0
8155; PWR5-NEXT:    vadduwm 2, 5, 2
8156; PWR5-NEXT:    vsrw 2, 2, 3
8157; PWR5-NEXT:    vsubuwm 3, 4, 0
8158; PWR5-NEXT:    vcmpgtuw 2, 2, 3
8159; PWR5-NEXT:    blr
8160;
8161; PWR6-LABEL: ugt_17_v4i32:
8162; PWR6:       # %bb.0:
8163; PWR6-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
8164; PWR6-NEXT:    vspltisw 4, 1
8165; PWR6-NEXT:    vxor 3, 3, 3
8166; PWR6-NEXT:    addi 3, 3, .LCPI72_0@toc@l
8167; PWR6-NEXT:    lvx 0, 0, 3
8168; PWR6-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
8169; PWR6-NEXT:    addi 3, 3, .LCPI72_1@toc@l
8170; PWR6-NEXT:    vspltisw 1, 2
8171; PWR6-NEXT:    vsrw 5, 2, 4
8172; PWR6-NEXT:    vand 5, 5, 0
8173; PWR6-NEXT:    lvx 0, 0, 3
8174; PWR6-NEXT:    vsubuwm 2, 2, 5
8175; PWR6-NEXT:    vand 5, 2, 0
8176; PWR6-NEXT:    vsrw 2, 2, 1
8177; PWR6-NEXT:    vand 2, 2, 0
8178; PWR6-NEXT:    vspltisw 0, 4
8179; PWR6-NEXT:    vadduwm 2, 5, 2
8180; PWR6-NEXT:    vsrw 5, 2, 0
8181; PWR6-NEXT:    vspltisb 0, 15
8182; PWR6-NEXT:    vadduwm 2, 2, 5
8183; PWR6-NEXT:    vspltisb 5, 1
8184; PWR6-NEXT:    vand 2, 2, 0
8185; PWR6-NEXT:    vspltisw 0, -16
8186; PWR6-NEXT:    vrlw 1, 5, 0
8187; PWR6-NEXT:    vmulouh 5, 2, 5
8188; PWR6-NEXT:    vmsumuhm 2, 2, 1, 3
8189; PWR6-NEXT:    vspltisw 3, 12
8190; PWR6-NEXT:    vadduwm 3, 3, 3
8191; PWR6-NEXT:    vslw 2, 2, 0
8192; PWR6-NEXT:    vadduwm 2, 5, 2
8193; PWR6-NEXT:    vsrw 2, 2, 3
8194; PWR6-NEXT:    vsubuwm 3, 4, 0
8195; PWR6-NEXT:    vcmpgtuw 2, 2, 3
8196; PWR6-NEXT:    blr
8197;
8198; PWR7-LABEL: ugt_17_v4i32:
8199; PWR7:       # %bb.0:
8200; PWR7-NEXT:    vspltisw 3, 1
8201; PWR7-NEXT:    addis 3, 2, .LCPI72_0@toc@ha
8202; PWR7-NEXT:    addi 3, 3, .LCPI72_0@toc@l
8203; PWR7-NEXT:    vspltisw 4, 2
8204; PWR7-NEXT:    lxvw4x 0, 0, 3
8205; PWR7-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
8206; PWR7-NEXT:    vspltisw 5, 4
8207; PWR7-NEXT:    addi 3, 3, .LCPI72_1@toc@l
8208; PWR7-NEXT:    vsrw 8, 2, 3
8209; PWR7-NEXT:    vspltisb 0, 15
8210; PWR7-NEXT:    vspltisb 1, 1
8211; PWR7-NEXT:    vspltisw 6, -16
8212; PWR7-NEXT:    vspltisw 7, 12
8213; PWR7-NEXT:    vsubuwm 3, 3, 6
8214; PWR7-NEXT:    xxland 40, 40, 0
8215; PWR7-NEXT:    lxvw4x 0, 0, 3
8216; PWR7-NEXT:    vsubuwm 2, 2, 8
8217; PWR7-NEXT:    vsrw 4, 2, 4
8218; PWR7-NEXT:    xxland 34, 34, 0
8219; PWR7-NEXT:    xxland 36, 36, 0
8220; PWR7-NEXT:    vadduwm 2, 2, 4
8221; PWR7-NEXT:    vsrw 4, 2, 5
8222; PWR7-NEXT:    xxlxor 37, 37, 37
8223; PWR7-NEXT:    vadduwm 2, 2, 4
8224; PWR7-NEXT:    vrlw 4, 1, 6
8225; PWR7-NEXT:    xxland 34, 34, 32
8226; PWR7-NEXT:    vmsumuhm 4, 2, 4, 5
8227; PWR7-NEXT:    vmulouh 2, 2, 1
8228; PWR7-NEXT:    vslw 4, 4, 6
8229; PWR7-NEXT:    vadduwm 2, 2, 4
8230; PWR7-NEXT:    vadduwm 4, 7, 7
8231; PWR7-NEXT:    vsrw 2, 2, 4
8232; PWR7-NEXT:    vcmpgtuw 2, 2, 3
8233; PWR7-NEXT:    blr
8234;
8235; PWR8-LABEL: ugt_17_v4i32:
8236; PWR8:       # %bb.0:
8237; PWR8-NEXT:    vspltisw 3, -16
8238; PWR8-NEXT:    vspltisw 4, 1
8239; PWR8-NEXT:    vpopcntw 2, 2
8240; PWR8-NEXT:    vsubuwm 3, 4, 3
8241; PWR8-NEXT:    vcmpgtuw 2, 2, 3
8242; PWR8-NEXT:    blr
8243;
8244; PWR9-LABEL: ugt_17_v4i32:
8245; PWR9:       # %bb.0:
8246; PWR9-NEXT:    vspltisw 3, -16
8247; PWR9-NEXT:    vspltisw 4, 1
8248; PWR9-NEXT:    vpopcntw 2, 2
8249; PWR9-NEXT:    vsubuwm 3, 4, 3
8250; PWR9-NEXT:    vcmpgtuw 2, 2, 3
8251; PWR9-NEXT:    blr
8252  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8253  %3 = icmp ugt <4 x i32> %2, <i32 17, i32 17, i32 17, i32 17>
8254  %4 = sext <4 x i1> %3 to <4 x i32>
8255  ret <4 x i32> %4
8256}
8257
8258define <4 x i32> @ult_18_v4i32(<4 x i32> %0) {
8259; PWR5-LABEL: ult_18_v4i32:
8260; PWR5:       # %bb.0:
8261; PWR5-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
8262; PWR5-NEXT:    vspltisw 4, 1
8263; PWR5-NEXT:    vxor 3, 3, 3
8264; PWR5-NEXT:    addi 3, 3, .LCPI73_0@toc@l
8265; PWR5-NEXT:    lvx 5, 0, 3
8266; PWR5-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
8267; PWR5-NEXT:    addi 3, 3, .LCPI73_1@toc@l
8268; PWR5-NEXT:    vspltisw 0, 2
8269; PWR5-NEXT:    vsrw 4, 2, 4
8270; PWR5-NEXT:    vand 4, 4, 5
8271; PWR5-NEXT:    lvx 5, 0, 3
8272; PWR5-NEXT:    vsubuwm 2, 2, 4
8273; PWR5-NEXT:    vand 4, 2, 5
8274; PWR5-NEXT:    vsrw 2, 2, 0
8275; PWR5-NEXT:    vand 2, 2, 5
8276; PWR5-NEXT:    vspltisw 5, 4
8277; PWR5-NEXT:    vadduwm 2, 4, 2
8278; PWR5-NEXT:    vsrw 4, 2, 5
8279; PWR5-NEXT:    vspltisb 5, 15
8280; PWR5-NEXT:    vadduwm 2, 2, 4
8281; PWR5-NEXT:    vspltisb 4, 1
8282; PWR5-NEXT:    vand 2, 2, 5
8283; PWR5-NEXT:    vspltisw 5, -16
8284; PWR5-NEXT:    vrlw 0, 4, 5
8285; PWR5-NEXT:    vmulouh 4, 2, 4
8286; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
8287; PWR5-NEXT:    vspltisw 3, 12
8288; PWR5-NEXT:    vadduwm 3, 3, 3
8289; PWR5-NEXT:    vslw 2, 2, 5
8290; PWR5-NEXT:    vadduwm 2, 4, 2
8291; PWR5-NEXT:    vsrw 2, 2, 3
8292; PWR5-NEXT:    vspltisw 3, 9
8293; PWR5-NEXT:    vadduwm 3, 3, 3
8294; PWR5-NEXT:    vcmpgtuw 2, 3, 2
8295; PWR5-NEXT:    blr
8296;
8297; PWR6-LABEL: ult_18_v4i32:
8298; PWR6:       # %bb.0:
8299; PWR6-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
8300; PWR6-NEXT:    vspltisw 4, 1
8301; PWR6-NEXT:    vxor 3, 3, 3
8302; PWR6-NEXT:    addi 3, 3, .LCPI73_0@toc@l
8303; PWR6-NEXT:    lvx 5, 0, 3
8304; PWR6-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
8305; PWR6-NEXT:    addi 3, 3, .LCPI73_1@toc@l
8306; PWR6-NEXT:    vspltisw 0, 2
8307; PWR6-NEXT:    vsrw 4, 2, 4
8308; PWR6-NEXT:    vand 4, 4, 5
8309; PWR6-NEXT:    lvx 5, 0, 3
8310; PWR6-NEXT:    vsubuwm 2, 2, 4
8311; PWR6-NEXT:    vand 4, 2, 5
8312; PWR6-NEXT:    vsrw 2, 2, 0
8313; PWR6-NEXT:    vand 2, 2, 5
8314; PWR6-NEXT:    vspltisw 5, 4
8315; PWR6-NEXT:    vadduwm 2, 4, 2
8316; PWR6-NEXT:    vsrw 4, 2, 5
8317; PWR6-NEXT:    vspltisb 5, 15
8318; PWR6-NEXT:    vadduwm 2, 2, 4
8319; PWR6-NEXT:    vspltisb 4, 1
8320; PWR6-NEXT:    vand 2, 2, 5
8321; PWR6-NEXT:    vspltisw 5, -16
8322; PWR6-NEXT:    vrlw 0, 4, 5
8323; PWR6-NEXT:    vmulouh 4, 2, 4
8324; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
8325; PWR6-NEXT:    vspltisw 3, 12
8326; PWR6-NEXT:    vadduwm 3, 3, 3
8327; PWR6-NEXT:    vslw 2, 2, 5
8328; PWR6-NEXT:    vadduwm 2, 4, 2
8329; PWR6-NEXT:    vsrw 2, 2, 3
8330; PWR6-NEXT:    vspltisw 3, 9
8331; PWR6-NEXT:    vadduwm 3, 3, 3
8332; PWR6-NEXT:    vcmpgtuw 2, 3, 2
8333; PWR6-NEXT:    blr
8334;
8335; PWR7-LABEL: ult_18_v4i32:
8336; PWR7:       # %bb.0:
8337; PWR7-NEXT:    vspltisw 3, 1
8338; PWR7-NEXT:    addis 3, 2, .LCPI73_0@toc@ha
8339; PWR7-NEXT:    addi 3, 3, .LCPI73_0@toc@l
8340; PWR7-NEXT:    vspltisw 4, 2
8341; PWR7-NEXT:    lxvw4x 0, 0, 3
8342; PWR7-NEXT:    addis 3, 2, .LCPI73_1@toc@ha
8343; PWR7-NEXT:    vspltisw 5, 4
8344; PWR7-NEXT:    addi 3, 3, .LCPI73_1@toc@l
8345; PWR7-NEXT:    vsrw 3, 2, 3
8346; PWR7-NEXT:    vspltisb 0, 15
8347; PWR7-NEXT:    vspltisb 1, 1
8348; PWR7-NEXT:    vspltisw 6, -16
8349; PWR7-NEXT:    vspltisw 7, 12
8350; PWR7-NEXT:    vspltisw 8, 9
8351; PWR7-NEXT:    xxland 35, 35, 0
8352; PWR7-NEXT:    lxvw4x 0, 0, 3
8353; PWR7-NEXT:    vsubuwm 2, 2, 3
8354; PWR7-NEXT:    vsrw 3, 2, 4
8355; PWR7-NEXT:    xxland 34, 34, 0
8356; PWR7-NEXT:    xxlxor 36, 36, 36
8357; PWR7-NEXT:    xxland 35, 35, 0
8358; PWR7-NEXT:    vadduwm 2, 2, 3
8359; PWR7-NEXT:    vsrw 3, 2, 5
8360; PWR7-NEXT:    vadduwm 2, 2, 3
8361; PWR7-NEXT:    vrlw 3, 1, 6
8362; PWR7-NEXT:    xxland 34, 34, 32
8363; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
8364; PWR7-NEXT:    vmulouh 2, 2, 1
8365; PWR7-NEXT:    vslw 3, 3, 6
8366; PWR7-NEXT:    vadduwm 2, 2, 3
8367; PWR7-NEXT:    vadduwm 3, 7, 7
8368; PWR7-NEXT:    vsrw 2, 2, 3
8369; PWR7-NEXT:    vadduwm 3, 8, 8
8370; PWR7-NEXT:    vcmpgtuw 2, 3, 2
8371; PWR7-NEXT:    blr
8372;
8373; PWR8-LABEL: ult_18_v4i32:
8374; PWR8:       # %bb.0:
8375; PWR8-NEXT:    vspltisw 3, 9
8376; PWR8-NEXT:    vpopcntw 2, 2
8377; PWR8-NEXT:    vadduwm 3, 3, 3
8378; PWR8-NEXT:    vcmpgtuw 2, 3, 2
8379; PWR8-NEXT:    blr
8380;
8381; PWR9-LABEL: ult_18_v4i32:
8382; PWR9:       # %bb.0:
8383; PWR9-NEXT:    vspltisw 3, 9
8384; PWR9-NEXT:    vpopcntw 2, 2
8385; PWR9-NEXT:    vadduwm 3, 3, 3
8386; PWR9-NEXT:    vcmpgtuw 2, 3, 2
8387; PWR9-NEXT:    blr
8388  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8389  %3 = icmp ult <4 x i32> %2, <i32 18, i32 18, i32 18, i32 18>
8390  %4 = sext <4 x i1> %3 to <4 x i32>
8391  ret <4 x i32> %4
8392}
8393
8394define <4 x i32> @ugt_18_v4i32(<4 x i32> %0) {
8395; PWR5-LABEL: ugt_18_v4i32:
8396; PWR5:       # %bb.0:
8397; PWR5-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
8398; PWR5-NEXT:    vspltisw 4, 1
8399; PWR5-NEXT:    vxor 3, 3, 3
8400; PWR5-NEXT:    addi 3, 3, .LCPI74_0@toc@l
8401; PWR5-NEXT:    lvx 5, 0, 3
8402; PWR5-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
8403; PWR5-NEXT:    addi 3, 3, .LCPI74_1@toc@l
8404; PWR5-NEXT:    vspltisw 0, 2
8405; PWR5-NEXT:    vsrw 4, 2, 4
8406; PWR5-NEXT:    vand 4, 4, 5
8407; PWR5-NEXT:    lvx 5, 0, 3
8408; PWR5-NEXT:    vsubuwm 2, 2, 4
8409; PWR5-NEXT:    vand 4, 2, 5
8410; PWR5-NEXT:    vsrw 2, 2, 0
8411; PWR5-NEXT:    vand 2, 2, 5
8412; PWR5-NEXT:    vspltisw 5, 4
8413; PWR5-NEXT:    vadduwm 2, 4, 2
8414; PWR5-NEXT:    vsrw 4, 2, 5
8415; PWR5-NEXT:    vspltisb 5, 15
8416; PWR5-NEXT:    vadduwm 2, 2, 4
8417; PWR5-NEXT:    vspltisb 4, 1
8418; PWR5-NEXT:    vand 2, 2, 5
8419; PWR5-NEXT:    vspltisw 5, -16
8420; PWR5-NEXT:    vrlw 0, 4, 5
8421; PWR5-NEXT:    vmulouh 4, 2, 4
8422; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
8423; PWR5-NEXT:    vspltisw 3, 12
8424; PWR5-NEXT:    vadduwm 3, 3, 3
8425; PWR5-NEXT:    vslw 2, 2, 5
8426; PWR5-NEXT:    vadduwm 2, 4, 2
8427; PWR5-NEXT:    vsrw 2, 2, 3
8428; PWR5-NEXT:    vspltisw 3, 9
8429; PWR5-NEXT:    vadduwm 3, 3, 3
8430; PWR5-NEXT:    vcmpgtuw 2, 2, 3
8431; PWR5-NEXT:    blr
8432;
8433; PWR6-LABEL: ugt_18_v4i32:
8434; PWR6:       # %bb.0:
8435; PWR6-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
8436; PWR6-NEXT:    vspltisw 4, 1
8437; PWR6-NEXT:    vxor 3, 3, 3
8438; PWR6-NEXT:    addi 3, 3, .LCPI74_0@toc@l
8439; PWR6-NEXT:    lvx 5, 0, 3
8440; PWR6-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
8441; PWR6-NEXT:    addi 3, 3, .LCPI74_1@toc@l
8442; PWR6-NEXT:    vspltisw 0, 2
8443; PWR6-NEXT:    vsrw 4, 2, 4
8444; PWR6-NEXT:    vand 4, 4, 5
8445; PWR6-NEXT:    lvx 5, 0, 3
8446; PWR6-NEXT:    vsubuwm 2, 2, 4
8447; PWR6-NEXT:    vand 4, 2, 5
8448; PWR6-NEXT:    vsrw 2, 2, 0
8449; PWR6-NEXT:    vand 2, 2, 5
8450; PWR6-NEXT:    vspltisw 5, 4
8451; PWR6-NEXT:    vadduwm 2, 4, 2
8452; PWR6-NEXT:    vsrw 4, 2, 5
8453; PWR6-NEXT:    vspltisb 5, 15
8454; PWR6-NEXT:    vadduwm 2, 2, 4
8455; PWR6-NEXT:    vspltisb 4, 1
8456; PWR6-NEXT:    vand 2, 2, 5
8457; PWR6-NEXT:    vspltisw 5, -16
8458; PWR6-NEXT:    vrlw 0, 4, 5
8459; PWR6-NEXT:    vmulouh 4, 2, 4
8460; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
8461; PWR6-NEXT:    vspltisw 3, 12
8462; PWR6-NEXT:    vadduwm 3, 3, 3
8463; PWR6-NEXT:    vslw 2, 2, 5
8464; PWR6-NEXT:    vadduwm 2, 4, 2
8465; PWR6-NEXT:    vsrw 2, 2, 3
8466; PWR6-NEXT:    vspltisw 3, 9
8467; PWR6-NEXT:    vadduwm 3, 3, 3
8468; PWR6-NEXT:    vcmpgtuw 2, 2, 3
8469; PWR6-NEXT:    blr
8470;
8471; PWR7-LABEL: ugt_18_v4i32:
8472; PWR7:       # %bb.0:
8473; PWR7-NEXT:    vspltisw 3, 1
8474; PWR7-NEXT:    addis 3, 2, .LCPI74_0@toc@ha
8475; PWR7-NEXT:    addi 3, 3, .LCPI74_0@toc@l
8476; PWR7-NEXT:    vspltisw 4, 2
8477; PWR7-NEXT:    lxvw4x 0, 0, 3
8478; PWR7-NEXT:    addis 3, 2, .LCPI74_1@toc@ha
8479; PWR7-NEXT:    vspltisw 5, 4
8480; PWR7-NEXT:    addi 3, 3, .LCPI74_1@toc@l
8481; PWR7-NEXT:    vsrw 3, 2, 3
8482; PWR7-NEXT:    vspltisb 0, 15
8483; PWR7-NEXT:    vspltisb 1, 1
8484; PWR7-NEXT:    vspltisw 6, -16
8485; PWR7-NEXT:    vspltisw 7, 12
8486; PWR7-NEXT:    vspltisw 8, 9
8487; PWR7-NEXT:    xxland 35, 35, 0
8488; PWR7-NEXT:    lxvw4x 0, 0, 3
8489; PWR7-NEXT:    vsubuwm 2, 2, 3
8490; PWR7-NEXT:    vsrw 3, 2, 4
8491; PWR7-NEXT:    xxland 34, 34, 0
8492; PWR7-NEXT:    xxlxor 36, 36, 36
8493; PWR7-NEXT:    xxland 35, 35, 0
8494; PWR7-NEXT:    vadduwm 2, 2, 3
8495; PWR7-NEXT:    vsrw 3, 2, 5
8496; PWR7-NEXT:    vadduwm 2, 2, 3
8497; PWR7-NEXT:    vrlw 3, 1, 6
8498; PWR7-NEXT:    xxland 34, 34, 32
8499; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
8500; PWR7-NEXT:    vmulouh 2, 2, 1
8501; PWR7-NEXT:    vslw 3, 3, 6
8502; PWR7-NEXT:    vadduwm 2, 2, 3
8503; PWR7-NEXT:    vadduwm 3, 7, 7
8504; PWR7-NEXT:    vsrw 2, 2, 3
8505; PWR7-NEXT:    vadduwm 3, 8, 8
8506; PWR7-NEXT:    vcmpgtuw 2, 2, 3
8507; PWR7-NEXT:    blr
8508;
8509; PWR8-LABEL: ugt_18_v4i32:
8510; PWR8:       # %bb.0:
8511; PWR8-NEXT:    vspltisw 3, 9
8512; PWR8-NEXT:    vpopcntw 2, 2
8513; PWR8-NEXT:    vadduwm 3, 3, 3
8514; PWR8-NEXT:    vcmpgtuw 2, 2, 3
8515; PWR8-NEXT:    blr
8516;
8517; PWR9-LABEL: ugt_18_v4i32:
8518; PWR9:       # %bb.0:
8519; PWR9-NEXT:    vspltisw 3, 9
8520; PWR9-NEXT:    vpopcntw 2, 2
8521; PWR9-NEXT:    vadduwm 3, 3, 3
8522; PWR9-NEXT:    vcmpgtuw 2, 2, 3
8523; PWR9-NEXT:    blr
8524  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8525  %3 = icmp ugt <4 x i32> %2, <i32 18, i32 18, i32 18, i32 18>
8526  %4 = sext <4 x i1> %3 to <4 x i32>
8527  ret <4 x i32> %4
8528}
8529
8530define <4 x i32> @ult_19_v4i32(<4 x i32> %0) {
8531; PWR5-LABEL: ult_19_v4i32:
8532; PWR5:       # %bb.0:
8533; PWR5-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
8534; PWR5-NEXT:    vspltisw 4, 1
8535; PWR5-NEXT:    vxor 3, 3, 3
8536; PWR5-NEXT:    addi 3, 3, .LCPI75_0@toc@l
8537; PWR5-NEXT:    lvx 5, 0, 3
8538; PWR5-NEXT:    addis 3, 2, .LCPI75_1@toc@ha
8539; PWR5-NEXT:    addi 3, 3, .LCPI75_1@toc@l
8540; PWR5-NEXT:    vspltisw 0, 2
8541; PWR5-NEXT:    vsrw 4, 2, 4
8542; PWR5-NEXT:    vand 4, 4, 5
8543; PWR5-NEXT:    lvx 5, 0, 3
8544; PWR5-NEXT:    vsubuwm 2, 2, 4
8545; PWR5-NEXT:    vand 4, 2, 5
8546; PWR5-NEXT:    vsrw 2, 2, 0
8547; PWR5-NEXT:    vand 2, 2, 5
8548; PWR5-NEXT:    vspltisw 5, 4
8549; PWR5-NEXT:    vadduwm 2, 4, 2
8550; PWR5-NEXT:    vsrw 4, 2, 5
8551; PWR5-NEXT:    vspltisb 5, 15
8552; PWR5-NEXT:    vadduwm 2, 2, 4
8553; PWR5-NEXT:    vspltisb 4, 1
8554; PWR5-NEXT:    vand 2, 2, 5
8555; PWR5-NEXT:    vspltisw 5, -16
8556; PWR5-NEXT:    vrlw 0, 4, 5
8557; PWR5-NEXT:    vmulouh 4, 2, 4
8558; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
8559; PWR5-NEXT:    vspltisw 3, 12
8560; PWR5-NEXT:    vadduwm 3, 3, 3
8561; PWR5-NEXT:    vslw 2, 2, 5
8562; PWR5-NEXT:    vadduwm 2, 4, 2
8563; PWR5-NEXT:    vsrw 2, 2, 3
8564; PWR5-NEXT:    vspltisw 3, 3
8565; PWR5-NEXT:    vsubuwm 3, 3, 5
8566; PWR5-NEXT:    vcmpgtuw 2, 3, 2
8567; PWR5-NEXT:    blr
8568;
8569; PWR6-LABEL: ult_19_v4i32:
8570; PWR6:       # %bb.0:
8571; PWR6-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
8572; PWR6-NEXT:    vspltisw 4, 1
8573; PWR6-NEXT:    vxor 3, 3, 3
8574; PWR6-NEXT:    addi 3, 3, .LCPI75_0@toc@l
8575; PWR6-NEXT:    lvx 5, 0, 3
8576; PWR6-NEXT:    addis 3, 2, .LCPI75_1@toc@ha
8577; PWR6-NEXT:    addi 3, 3, .LCPI75_1@toc@l
8578; PWR6-NEXT:    vspltisw 0, 2
8579; PWR6-NEXT:    vsrw 4, 2, 4
8580; PWR6-NEXT:    vand 4, 4, 5
8581; PWR6-NEXT:    lvx 5, 0, 3
8582; PWR6-NEXT:    vsubuwm 2, 2, 4
8583; PWR6-NEXT:    vand 4, 2, 5
8584; PWR6-NEXT:    vsrw 2, 2, 0
8585; PWR6-NEXT:    vand 2, 2, 5
8586; PWR6-NEXT:    vspltisw 5, 4
8587; PWR6-NEXT:    vadduwm 2, 4, 2
8588; PWR6-NEXT:    vsrw 4, 2, 5
8589; PWR6-NEXT:    vspltisb 5, 15
8590; PWR6-NEXT:    vadduwm 2, 2, 4
8591; PWR6-NEXT:    vspltisb 4, 1
8592; PWR6-NEXT:    vand 2, 2, 5
8593; PWR6-NEXT:    vspltisw 5, -16
8594; PWR6-NEXT:    vrlw 0, 4, 5
8595; PWR6-NEXT:    vmulouh 4, 2, 4
8596; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
8597; PWR6-NEXT:    vspltisw 3, 12
8598; PWR6-NEXT:    vadduwm 3, 3, 3
8599; PWR6-NEXT:    vslw 2, 2, 5
8600; PWR6-NEXT:    vadduwm 2, 4, 2
8601; PWR6-NEXT:    vsrw 2, 2, 3
8602; PWR6-NEXT:    vspltisw 3, 3
8603; PWR6-NEXT:    vsubuwm 3, 3, 5
8604; PWR6-NEXT:    vcmpgtuw 2, 3, 2
8605; PWR6-NEXT:    blr
8606;
8607; PWR7-LABEL: ult_19_v4i32:
8608; PWR7:       # %bb.0:
8609; PWR7-NEXT:    vspltisw 3, 1
8610; PWR7-NEXT:    addis 3, 2, .LCPI75_0@toc@ha
8611; PWR7-NEXT:    addi 3, 3, .LCPI75_0@toc@l
8612; PWR7-NEXT:    vspltisw 4, 2
8613; PWR7-NEXT:    lxvw4x 0, 0, 3
8614; PWR7-NEXT:    addis 3, 2, .LCPI75_1@toc@ha
8615; PWR7-NEXT:    vspltisw 5, 4
8616; PWR7-NEXT:    addi 3, 3, .LCPI75_1@toc@l
8617; PWR7-NEXT:    vsrw 3, 2, 3
8618; PWR7-NEXT:    vspltisb 0, 15
8619; PWR7-NEXT:    vspltisb 1, 1
8620; PWR7-NEXT:    vspltisw 6, -16
8621; PWR7-NEXT:    vspltisw 7, 12
8622; PWR7-NEXT:    vspltisw 8, 3
8623; PWR7-NEXT:    xxland 35, 35, 0
8624; PWR7-NEXT:    lxvw4x 0, 0, 3
8625; PWR7-NEXT:    vsubuwm 2, 2, 3
8626; PWR7-NEXT:    vsrw 3, 2, 4
8627; PWR7-NEXT:    xxland 34, 34, 0
8628; PWR7-NEXT:    xxlxor 36, 36, 36
8629; PWR7-NEXT:    xxland 35, 35, 0
8630; PWR7-NEXT:    vadduwm 2, 2, 3
8631; PWR7-NEXT:    vsrw 3, 2, 5
8632; PWR7-NEXT:    vadduwm 2, 2, 3
8633; PWR7-NEXT:    vrlw 3, 1, 6
8634; PWR7-NEXT:    xxland 34, 34, 32
8635; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
8636; PWR7-NEXT:    vmulouh 2, 2, 1
8637; PWR7-NEXT:    vslw 3, 3, 6
8638; PWR7-NEXT:    vadduwm 2, 2, 3
8639; PWR7-NEXT:    vadduwm 3, 7, 7
8640; PWR7-NEXT:    vsrw 2, 2, 3
8641; PWR7-NEXT:    vsubuwm 3, 8, 6
8642; PWR7-NEXT:    vcmpgtuw 2, 3, 2
8643; PWR7-NEXT:    blr
8644;
8645; PWR8-LABEL: ult_19_v4i32:
8646; PWR8:       # %bb.0:
8647; PWR8-NEXT:    vspltisw 3, -16
8648; PWR8-NEXT:    vspltisw 4, 3
8649; PWR8-NEXT:    vpopcntw 2, 2
8650; PWR8-NEXT:    vsubuwm 3, 4, 3
8651; PWR8-NEXT:    vcmpgtuw 2, 3, 2
8652; PWR8-NEXT:    blr
8653;
8654; PWR9-LABEL: ult_19_v4i32:
8655; PWR9:       # %bb.0:
8656; PWR9-NEXT:    vspltisw 3, -16
8657; PWR9-NEXT:    vspltisw 4, 3
8658; PWR9-NEXT:    vpopcntw 2, 2
8659; PWR9-NEXT:    vsubuwm 3, 4, 3
8660; PWR9-NEXT:    vcmpgtuw 2, 3, 2
8661; PWR9-NEXT:    blr
8662  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8663  %3 = icmp ult <4 x i32> %2, <i32 19, i32 19, i32 19, i32 19>
8664  %4 = sext <4 x i1> %3 to <4 x i32>
8665  ret <4 x i32> %4
8666}
8667
8668define <4 x i32> @ugt_19_v4i32(<4 x i32> %0) {
8669; PWR5-LABEL: ugt_19_v4i32:
8670; PWR5:       # %bb.0:
8671; PWR5-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
8672; PWR5-NEXT:    vspltisw 4, 1
8673; PWR5-NEXT:    vxor 3, 3, 3
8674; PWR5-NEXT:    addi 3, 3, .LCPI76_0@toc@l
8675; PWR5-NEXT:    lvx 5, 0, 3
8676; PWR5-NEXT:    addis 3, 2, .LCPI76_1@toc@ha
8677; PWR5-NEXT:    addi 3, 3, .LCPI76_1@toc@l
8678; PWR5-NEXT:    vspltisw 0, 2
8679; PWR5-NEXT:    vsrw 4, 2, 4
8680; PWR5-NEXT:    vand 4, 4, 5
8681; PWR5-NEXT:    lvx 5, 0, 3
8682; PWR5-NEXT:    vsubuwm 2, 2, 4
8683; PWR5-NEXT:    vand 4, 2, 5
8684; PWR5-NEXT:    vsrw 2, 2, 0
8685; PWR5-NEXT:    vand 2, 2, 5
8686; PWR5-NEXT:    vspltisw 5, 4
8687; PWR5-NEXT:    vadduwm 2, 4, 2
8688; PWR5-NEXT:    vsrw 4, 2, 5
8689; PWR5-NEXT:    vspltisb 5, 15
8690; PWR5-NEXT:    vadduwm 2, 2, 4
8691; PWR5-NEXT:    vspltisb 4, 1
8692; PWR5-NEXT:    vand 2, 2, 5
8693; PWR5-NEXT:    vspltisw 5, -16
8694; PWR5-NEXT:    vrlw 0, 4, 5
8695; PWR5-NEXT:    vmulouh 4, 2, 4
8696; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
8697; PWR5-NEXT:    vspltisw 3, 12
8698; PWR5-NEXT:    vadduwm 3, 3, 3
8699; PWR5-NEXT:    vslw 2, 2, 5
8700; PWR5-NEXT:    vadduwm 2, 4, 2
8701; PWR5-NEXT:    vsrw 2, 2, 3
8702; PWR5-NEXT:    vspltisw 3, 3
8703; PWR5-NEXT:    vsubuwm 3, 3, 5
8704; PWR5-NEXT:    vcmpgtuw 2, 2, 3
8705; PWR5-NEXT:    blr
8706;
8707; PWR6-LABEL: ugt_19_v4i32:
8708; PWR6:       # %bb.0:
8709; PWR6-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
8710; PWR6-NEXT:    vspltisw 4, 1
8711; PWR6-NEXT:    vxor 3, 3, 3
8712; PWR6-NEXT:    addi 3, 3, .LCPI76_0@toc@l
8713; PWR6-NEXT:    lvx 5, 0, 3
8714; PWR6-NEXT:    addis 3, 2, .LCPI76_1@toc@ha
8715; PWR6-NEXT:    addi 3, 3, .LCPI76_1@toc@l
8716; PWR6-NEXT:    vspltisw 0, 2
8717; PWR6-NEXT:    vsrw 4, 2, 4
8718; PWR6-NEXT:    vand 4, 4, 5
8719; PWR6-NEXT:    lvx 5, 0, 3
8720; PWR6-NEXT:    vsubuwm 2, 2, 4
8721; PWR6-NEXT:    vand 4, 2, 5
8722; PWR6-NEXT:    vsrw 2, 2, 0
8723; PWR6-NEXT:    vand 2, 2, 5
8724; PWR6-NEXT:    vspltisw 5, 4
8725; PWR6-NEXT:    vadduwm 2, 4, 2
8726; PWR6-NEXT:    vsrw 4, 2, 5
8727; PWR6-NEXT:    vspltisb 5, 15
8728; PWR6-NEXT:    vadduwm 2, 2, 4
8729; PWR6-NEXT:    vspltisb 4, 1
8730; PWR6-NEXT:    vand 2, 2, 5
8731; PWR6-NEXT:    vspltisw 5, -16
8732; PWR6-NEXT:    vrlw 0, 4, 5
8733; PWR6-NEXT:    vmulouh 4, 2, 4
8734; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
8735; PWR6-NEXT:    vspltisw 3, 12
8736; PWR6-NEXT:    vadduwm 3, 3, 3
8737; PWR6-NEXT:    vslw 2, 2, 5
8738; PWR6-NEXT:    vadduwm 2, 4, 2
8739; PWR6-NEXT:    vsrw 2, 2, 3
8740; PWR6-NEXT:    vspltisw 3, 3
8741; PWR6-NEXT:    vsubuwm 3, 3, 5
8742; PWR6-NEXT:    vcmpgtuw 2, 2, 3
8743; PWR6-NEXT:    blr
8744;
8745; PWR7-LABEL: ugt_19_v4i32:
8746; PWR7:       # %bb.0:
8747; PWR7-NEXT:    vspltisw 3, 1
8748; PWR7-NEXT:    addis 3, 2, .LCPI76_0@toc@ha
8749; PWR7-NEXT:    addi 3, 3, .LCPI76_0@toc@l
8750; PWR7-NEXT:    vspltisw 4, 2
8751; PWR7-NEXT:    lxvw4x 0, 0, 3
8752; PWR7-NEXT:    addis 3, 2, .LCPI76_1@toc@ha
8753; PWR7-NEXT:    vspltisw 5, 4
8754; PWR7-NEXT:    addi 3, 3, .LCPI76_1@toc@l
8755; PWR7-NEXT:    vsrw 3, 2, 3
8756; PWR7-NEXT:    vspltisb 0, 15
8757; PWR7-NEXT:    vspltisb 1, 1
8758; PWR7-NEXT:    vspltisw 6, -16
8759; PWR7-NEXT:    vspltisw 7, 12
8760; PWR7-NEXT:    vspltisw 8, 3
8761; PWR7-NEXT:    xxland 35, 35, 0
8762; PWR7-NEXT:    lxvw4x 0, 0, 3
8763; PWR7-NEXT:    vsubuwm 2, 2, 3
8764; PWR7-NEXT:    vsrw 3, 2, 4
8765; PWR7-NEXT:    xxland 34, 34, 0
8766; PWR7-NEXT:    xxlxor 36, 36, 36
8767; PWR7-NEXT:    xxland 35, 35, 0
8768; PWR7-NEXT:    vadduwm 2, 2, 3
8769; PWR7-NEXT:    vsrw 3, 2, 5
8770; PWR7-NEXT:    vadduwm 2, 2, 3
8771; PWR7-NEXT:    vrlw 3, 1, 6
8772; PWR7-NEXT:    xxland 34, 34, 32
8773; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
8774; PWR7-NEXT:    vmulouh 2, 2, 1
8775; PWR7-NEXT:    vslw 3, 3, 6
8776; PWR7-NEXT:    vadduwm 2, 2, 3
8777; PWR7-NEXT:    vadduwm 3, 7, 7
8778; PWR7-NEXT:    vsrw 2, 2, 3
8779; PWR7-NEXT:    vsubuwm 3, 8, 6
8780; PWR7-NEXT:    vcmpgtuw 2, 2, 3
8781; PWR7-NEXT:    blr
8782;
8783; PWR8-LABEL: ugt_19_v4i32:
8784; PWR8:       # %bb.0:
8785; PWR8-NEXT:    vspltisw 3, -16
8786; PWR8-NEXT:    vspltisw 4, 3
8787; PWR8-NEXT:    vpopcntw 2, 2
8788; PWR8-NEXT:    vsubuwm 3, 4, 3
8789; PWR8-NEXT:    vcmpgtuw 2, 2, 3
8790; PWR8-NEXT:    blr
8791;
8792; PWR9-LABEL: ugt_19_v4i32:
8793; PWR9:       # %bb.0:
8794; PWR9-NEXT:    vspltisw 3, -16
8795; PWR9-NEXT:    vspltisw 4, 3
8796; PWR9-NEXT:    vpopcntw 2, 2
8797; PWR9-NEXT:    vsubuwm 3, 4, 3
8798; PWR9-NEXT:    vcmpgtuw 2, 2, 3
8799; PWR9-NEXT:    blr
8800  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8801  %3 = icmp ugt <4 x i32> %2, <i32 19, i32 19, i32 19, i32 19>
8802  %4 = sext <4 x i1> %3 to <4 x i32>
8803  ret <4 x i32> %4
8804}
8805
8806define <4 x i32> @ult_20_v4i32(<4 x i32> %0) {
8807; PWR5-LABEL: ult_20_v4i32:
8808; PWR5:       # %bb.0:
8809; PWR5-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
8810; PWR5-NEXT:    vspltisw 4, 1
8811; PWR5-NEXT:    vxor 3, 3, 3
8812; PWR5-NEXT:    addi 3, 3, .LCPI77_0@toc@l
8813; PWR5-NEXT:    lvx 5, 0, 3
8814; PWR5-NEXT:    addis 3, 2, .LCPI77_1@toc@ha
8815; PWR5-NEXT:    addi 3, 3, .LCPI77_1@toc@l
8816; PWR5-NEXT:    vspltisw 0, 2
8817; PWR5-NEXT:    vsrw 4, 2, 4
8818; PWR5-NEXT:    vand 4, 4, 5
8819; PWR5-NEXT:    lvx 5, 0, 3
8820; PWR5-NEXT:    vsubuwm 2, 2, 4
8821; PWR5-NEXT:    vand 4, 2, 5
8822; PWR5-NEXT:    vsrw 2, 2, 0
8823; PWR5-NEXT:    vand 2, 2, 5
8824; PWR5-NEXT:    vspltisw 5, 4
8825; PWR5-NEXT:    vadduwm 2, 4, 2
8826; PWR5-NEXT:    vsrw 4, 2, 5
8827; PWR5-NEXT:    vspltisb 5, 15
8828; PWR5-NEXT:    vadduwm 2, 2, 4
8829; PWR5-NEXT:    vspltisb 4, 1
8830; PWR5-NEXT:    vand 2, 2, 5
8831; PWR5-NEXT:    vspltisw 5, -16
8832; PWR5-NEXT:    vrlw 0, 4, 5
8833; PWR5-NEXT:    vmulouh 4, 2, 4
8834; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
8835; PWR5-NEXT:    vspltisw 3, 12
8836; PWR5-NEXT:    vadduwm 3, 3, 3
8837; PWR5-NEXT:    vslw 2, 2, 5
8838; PWR5-NEXT:    vadduwm 2, 4, 2
8839; PWR5-NEXT:    vsrw 2, 2, 3
8840; PWR5-NEXT:    vspltisw 3, 10
8841; PWR5-NEXT:    vadduwm 3, 3, 3
8842; PWR5-NEXT:    vcmpgtuw 2, 3, 2
8843; PWR5-NEXT:    blr
8844;
8845; PWR6-LABEL: ult_20_v4i32:
8846; PWR6:       # %bb.0:
8847; PWR6-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
8848; PWR6-NEXT:    vspltisw 4, 1
8849; PWR6-NEXT:    vxor 3, 3, 3
8850; PWR6-NEXT:    addi 3, 3, .LCPI77_0@toc@l
8851; PWR6-NEXT:    lvx 5, 0, 3
8852; PWR6-NEXT:    addis 3, 2, .LCPI77_1@toc@ha
8853; PWR6-NEXT:    addi 3, 3, .LCPI77_1@toc@l
8854; PWR6-NEXT:    vspltisw 0, 2
8855; PWR6-NEXT:    vsrw 4, 2, 4
8856; PWR6-NEXT:    vand 4, 4, 5
8857; PWR6-NEXT:    lvx 5, 0, 3
8858; PWR6-NEXT:    vsubuwm 2, 2, 4
8859; PWR6-NEXT:    vand 4, 2, 5
8860; PWR6-NEXT:    vsrw 2, 2, 0
8861; PWR6-NEXT:    vand 2, 2, 5
8862; PWR6-NEXT:    vspltisw 5, 4
8863; PWR6-NEXT:    vadduwm 2, 4, 2
8864; PWR6-NEXT:    vsrw 4, 2, 5
8865; PWR6-NEXT:    vspltisb 5, 15
8866; PWR6-NEXT:    vadduwm 2, 2, 4
8867; PWR6-NEXT:    vspltisb 4, 1
8868; PWR6-NEXT:    vand 2, 2, 5
8869; PWR6-NEXT:    vspltisw 5, -16
8870; PWR6-NEXT:    vrlw 0, 4, 5
8871; PWR6-NEXT:    vmulouh 4, 2, 4
8872; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
8873; PWR6-NEXT:    vspltisw 3, 12
8874; PWR6-NEXT:    vadduwm 3, 3, 3
8875; PWR6-NEXT:    vslw 2, 2, 5
8876; PWR6-NEXT:    vadduwm 2, 4, 2
8877; PWR6-NEXT:    vsrw 2, 2, 3
8878; PWR6-NEXT:    vspltisw 3, 10
8879; PWR6-NEXT:    vadduwm 3, 3, 3
8880; PWR6-NEXT:    vcmpgtuw 2, 3, 2
8881; PWR6-NEXT:    blr
8882;
8883; PWR7-LABEL: ult_20_v4i32:
8884; PWR7:       # %bb.0:
8885; PWR7-NEXT:    vspltisw 3, 1
8886; PWR7-NEXT:    addis 3, 2, .LCPI77_0@toc@ha
8887; PWR7-NEXT:    addi 3, 3, .LCPI77_0@toc@l
8888; PWR7-NEXT:    vspltisw 4, 2
8889; PWR7-NEXT:    lxvw4x 0, 0, 3
8890; PWR7-NEXT:    addis 3, 2, .LCPI77_1@toc@ha
8891; PWR7-NEXT:    vspltisw 5, 4
8892; PWR7-NEXT:    addi 3, 3, .LCPI77_1@toc@l
8893; PWR7-NEXT:    vsrw 3, 2, 3
8894; PWR7-NEXT:    vspltisb 0, 15
8895; PWR7-NEXT:    vspltisb 1, 1
8896; PWR7-NEXT:    vspltisw 6, -16
8897; PWR7-NEXT:    vspltisw 7, 12
8898; PWR7-NEXT:    vspltisw 8, 10
8899; PWR7-NEXT:    xxland 35, 35, 0
8900; PWR7-NEXT:    lxvw4x 0, 0, 3
8901; PWR7-NEXT:    vsubuwm 2, 2, 3
8902; PWR7-NEXT:    vsrw 3, 2, 4
8903; PWR7-NEXT:    xxland 34, 34, 0
8904; PWR7-NEXT:    xxlxor 36, 36, 36
8905; PWR7-NEXT:    xxland 35, 35, 0
8906; PWR7-NEXT:    vadduwm 2, 2, 3
8907; PWR7-NEXT:    vsrw 3, 2, 5
8908; PWR7-NEXT:    vadduwm 2, 2, 3
8909; PWR7-NEXT:    vrlw 3, 1, 6
8910; PWR7-NEXT:    xxland 34, 34, 32
8911; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
8912; PWR7-NEXT:    vmulouh 2, 2, 1
8913; PWR7-NEXT:    vslw 3, 3, 6
8914; PWR7-NEXT:    vadduwm 2, 2, 3
8915; PWR7-NEXT:    vadduwm 3, 7, 7
8916; PWR7-NEXT:    vsrw 2, 2, 3
8917; PWR7-NEXT:    vadduwm 3, 8, 8
8918; PWR7-NEXT:    vcmpgtuw 2, 3, 2
8919; PWR7-NEXT:    blr
8920;
8921; PWR8-LABEL: ult_20_v4i32:
8922; PWR8:       # %bb.0:
8923; PWR8-NEXT:    vspltisw 3, 10
8924; PWR8-NEXT:    vpopcntw 2, 2
8925; PWR8-NEXT:    vadduwm 3, 3, 3
8926; PWR8-NEXT:    vcmpgtuw 2, 3, 2
8927; PWR8-NEXT:    blr
8928;
8929; PWR9-LABEL: ult_20_v4i32:
8930; PWR9:       # %bb.0:
8931; PWR9-NEXT:    vspltisw 3, 10
8932; PWR9-NEXT:    vpopcntw 2, 2
8933; PWR9-NEXT:    vadduwm 3, 3, 3
8934; PWR9-NEXT:    vcmpgtuw 2, 3, 2
8935; PWR9-NEXT:    blr
8936  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
8937  %3 = icmp ult <4 x i32> %2, <i32 20, i32 20, i32 20, i32 20>
8938  %4 = sext <4 x i1> %3 to <4 x i32>
8939  ret <4 x i32> %4
8940}
8941
8942define <4 x i32> @ugt_20_v4i32(<4 x i32> %0) {
8943; PWR5-LABEL: ugt_20_v4i32:
8944; PWR5:       # %bb.0:
8945; PWR5-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
8946; PWR5-NEXT:    vspltisw 4, 1
8947; PWR5-NEXT:    vxor 3, 3, 3
8948; PWR5-NEXT:    addi 3, 3, .LCPI78_0@toc@l
8949; PWR5-NEXT:    lvx 5, 0, 3
8950; PWR5-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
8951; PWR5-NEXT:    addi 3, 3, .LCPI78_1@toc@l
8952; PWR5-NEXT:    vspltisw 0, 2
8953; PWR5-NEXT:    vsrw 4, 2, 4
8954; PWR5-NEXT:    vand 4, 4, 5
8955; PWR5-NEXT:    lvx 5, 0, 3
8956; PWR5-NEXT:    vsubuwm 2, 2, 4
8957; PWR5-NEXT:    vand 4, 2, 5
8958; PWR5-NEXT:    vsrw 2, 2, 0
8959; PWR5-NEXT:    vand 2, 2, 5
8960; PWR5-NEXT:    vspltisw 5, 4
8961; PWR5-NEXT:    vadduwm 2, 4, 2
8962; PWR5-NEXT:    vsrw 4, 2, 5
8963; PWR5-NEXT:    vspltisb 5, 15
8964; PWR5-NEXT:    vadduwm 2, 2, 4
8965; PWR5-NEXT:    vspltisb 4, 1
8966; PWR5-NEXT:    vand 2, 2, 5
8967; PWR5-NEXT:    vspltisw 5, -16
8968; PWR5-NEXT:    vrlw 0, 4, 5
8969; PWR5-NEXT:    vmulouh 4, 2, 4
8970; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
8971; PWR5-NEXT:    vspltisw 3, 12
8972; PWR5-NEXT:    vadduwm 3, 3, 3
8973; PWR5-NEXT:    vslw 2, 2, 5
8974; PWR5-NEXT:    vadduwm 2, 4, 2
8975; PWR5-NEXT:    vsrw 2, 2, 3
8976; PWR5-NEXT:    vspltisw 3, 10
8977; PWR5-NEXT:    vadduwm 3, 3, 3
8978; PWR5-NEXT:    vcmpgtuw 2, 2, 3
8979; PWR5-NEXT:    blr
8980;
8981; PWR6-LABEL: ugt_20_v4i32:
8982; PWR6:       # %bb.0:
8983; PWR6-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
8984; PWR6-NEXT:    vspltisw 4, 1
8985; PWR6-NEXT:    vxor 3, 3, 3
8986; PWR6-NEXT:    addi 3, 3, .LCPI78_0@toc@l
8987; PWR6-NEXT:    lvx 5, 0, 3
8988; PWR6-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
8989; PWR6-NEXT:    addi 3, 3, .LCPI78_1@toc@l
8990; PWR6-NEXT:    vspltisw 0, 2
8991; PWR6-NEXT:    vsrw 4, 2, 4
8992; PWR6-NEXT:    vand 4, 4, 5
8993; PWR6-NEXT:    lvx 5, 0, 3
8994; PWR6-NEXT:    vsubuwm 2, 2, 4
8995; PWR6-NEXT:    vand 4, 2, 5
8996; PWR6-NEXT:    vsrw 2, 2, 0
8997; PWR6-NEXT:    vand 2, 2, 5
8998; PWR6-NEXT:    vspltisw 5, 4
8999; PWR6-NEXT:    vadduwm 2, 4, 2
9000; PWR6-NEXT:    vsrw 4, 2, 5
9001; PWR6-NEXT:    vspltisb 5, 15
9002; PWR6-NEXT:    vadduwm 2, 2, 4
9003; PWR6-NEXT:    vspltisb 4, 1
9004; PWR6-NEXT:    vand 2, 2, 5
9005; PWR6-NEXT:    vspltisw 5, -16
9006; PWR6-NEXT:    vrlw 0, 4, 5
9007; PWR6-NEXT:    vmulouh 4, 2, 4
9008; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
9009; PWR6-NEXT:    vspltisw 3, 12
9010; PWR6-NEXT:    vadduwm 3, 3, 3
9011; PWR6-NEXT:    vslw 2, 2, 5
9012; PWR6-NEXT:    vadduwm 2, 4, 2
9013; PWR6-NEXT:    vsrw 2, 2, 3
9014; PWR6-NEXT:    vspltisw 3, 10
9015; PWR6-NEXT:    vadduwm 3, 3, 3
9016; PWR6-NEXT:    vcmpgtuw 2, 2, 3
9017; PWR6-NEXT:    blr
9018;
9019; PWR7-LABEL: ugt_20_v4i32:
9020; PWR7:       # %bb.0:
9021; PWR7-NEXT:    vspltisw 3, 1
9022; PWR7-NEXT:    addis 3, 2, .LCPI78_0@toc@ha
9023; PWR7-NEXT:    addi 3, 3, .LCPI78_0@toc@l
9024; PWR7-NEXT:    vspltisw 4, 2
9025; PWR7-NEXT:    lxvw4x 0, 0, 3
9026; PWR7-NEXT:    addis 3, 2, .LCPI78_1@toc@ha
9027; PWR7-NEXT:    vspltisw 5, 4
9028; PWR7-NEXT:    addi 3, 3, .LCPI78_1@toc@l
9029; PWR7-NEXT:    vsrw 3, 2, 3
9030; PWR7-NEXT:    vspltisb 0, 15
9031; PWR7-NEXT:    vspltisb 1, 1
9032; PWR7-NEXT:    vspltisw 6, -16
9033; PWR7-NEXT:    vspltisw 7, 12
9034; PWR7-NEXT:    vspltisw 8, 10
9035; PWR7-NEXT:    xxland 35, 35, 0
9036; PWR7-NEXT:    lxvw4x 0, 0, 3
9037; PWR7-NEXT:    vsubuwm 2, 2, 3
9038; PWR7-NEXT:    vsrw 3, 2, 4
9039; PWR7-NEXT:    xxland 34, 34, 0
9040; PWR7-NEXT:    xxlxor 36, 36, 36
9041; PWR7-NEXT:    xxland 35, 35, 0
9042; PWR7-NEXT:    vadduwm 2, 2, 3
9043; PWR7-NEXT:    vsrw 3, 2, 5
9044; PWR7-NEXT:    vadduwm 2, 2, 3
9045; PWR7-NEXT:    vrlw 3, 1, 6
9046; PWR7-NEXT:    xxland 34, 34, 32
9047; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
9048; PWR7-NEXT:    vmulouh 2, 2, 1
9049; PWR7-NEXT:    vslw 3, 3, 6
9050; PWR7-NEXT:    vadduwm 2, 2, 3
9051; PWR7-NEXT:    vadduwm 3, 7, 7
9052; PWR7-NEXT:    vsrw 2, 2, 3
9053; PWR7-NEXT:    vadduwm 3, 8, 8
9054; PWR7-NEXT:    vcmpgtuw 2, 2, 3
9055; PWR7-NEXT:    blr
9056;
9057; PWR8-LABEL: ugt_20_v4i32:
9058; PWR8:       # %bb.0:
9059; PWR8-NEXT:    vspltisw 3, 10
9060; PWR8-NEXT:    vpopcntw 2, 2
9061; PWR8-NEXT:    vadduwm 3, 3, 3
9062; PWR8-NEXT:    vcmpgtuw 2, 2, 3
9063; PWR8-NEXT:    blr
9064;
9065; PWR9-LABEL: ugt_20_v4i32:
9066; PWR9:       # %bb.0:
9067; PWR9-NEXT:    vspltisw 3, 10
9068; PWR9-NEXT:    vpopcntw 2, 2
9069; PWR9-NEXT:    vadduwm 3, 3, 3
9070; PWR9-NEXT:    vcmpgtuw 2, 2, 3
9071; PWR9-NEXT:    blr
9072  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9073  %3 = icmp ugt <4 x i32> %2, <i32 20, i32 20, i32 20, i32 20>
9074  %4 = sext <4 x i1> %3 to <4 x i32>
9075  ret <4 x i32> %4
9076}
9077
9078define <4 x i32> @ult_21_v4i32(<4 x i32> %0) {
9079; PWR5-LABEL: ult_21_v4i32:
9080; PWR5:       # %bb.0:
9081; PWR5-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
9082; PWR5-NEXT:    vspltisw 4, 1
9083; PWR5-NEXT:    vxor 3, 3, 3
9084; PWR5-NEXT:    addi 3, 3, .LCPI79_0@toc@l
9085; PWR5-NEXT:    lvx 5, 0, 3
9086; PWR5-NEXT:    addis 3, 2, .LCPI79_1@toc@ha
9087; PWR5-NEXT:    addi 3, 3, .LCPI79_1@toc@l
9088; PWR5-NEXT:    vspltisw 0, 2
9089; PWR5-NEXT:    vsrw 4, 2, 4
9090; PWR5-NEXT:    vand 4, 4, 5
9091; PWR5-NEXT:    lvx 5, 0, 3
9092; PWR5-NEXT:    vsubuwm 2, 2, 4
9093; PWR5-NEXT:    vand 4, 2, 5
9094; PWR5-NEXT:    vsrw 2, 2, 0
9095; PWR5-NEXT:    vand 2, 2, 5
9096; PWR5-NEXT:    vspltisw 5, 4
9097; PWR5-NEXT:    vadduwm 2, 4, 2
9098; PWR5-NEXT:    vsrw 4, 2, 5
9099; PWR5-NEXT:    vspltisb 5, 15
9100; PWR5-NEXT:    vadduwm 2, 2, 4
9101; PWR5-NEXT:    vspltisb 4, 1
9102; PWR5-NEXT:    vand 2, 2, 5
9103; PWR5-NEXT:    vspltisw 5, -16
9104; PWR5-NEXT:    vrlw 0, 4, 5
9105; PWR5-NEXT:    vmulouh 4, 2, 4
9106; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
9107; PWR5-NEXT:    vspltisw 3, 12
9108; PWR5-NEXT:    vadduwm 3, 3, 3
9109; PWR5-NEXT:    vslw 2, 2, 5
9110; PWR5-NEXT:    vadduwm 2, 4, 2
9111; PWR5-NEXT:    vsrw 2, 2, 3
9112; PWR5-NEXT:    vspltisw 3, 5
9113; PWR5-NEXT:    vsubuwm 3, 3, 5
9114; PWR5-NEXT:    vcmpgtuw 2, 3, 2
9115; PWR5-NEXT:    blr
9116;
9117; PWR6-LABEL: ult_21_v4i32:
9118; PWR6:       # %bb.0:
9119; PWR6-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
9120; PWR6-NEXT:    vspltisw 4, 1
9121; PWR6-NEXT:    vxor 3, 3, 3
9122; PWR6-NEXT:    addi 3, 3, .LCPI79_0@toc@l
9123; PWR6-NEXT:    lvx 5, 0, 3
9124; PWR6-NEXT:    addis 3, 2, .LCPI79_1@toc@ha
9125; PWR6-NEXT:    addi 3, 3, .LCPI79_1@toc@l
9126; PWR6-NEXT:    vspltisw 0, 2
9127; PWR6-NEXT:    vsrw 4, 2, 4
9128; PWR6-NEXT:    vand 4, 4, 5
9129; PWR6-NEXT:    lvx 5, 0, 3
9130; PWR6-NEXT:    vsubuwm 2, 2, 4
9131; PWR6-NEXT:    vand 4, 2, 5
9132; PWR6-NEXT:    vsrw 2, 2, 0
9133; PWR6-NEXT:    vand 2, 2, 5
9134; PWR6-NEXT:    vspltisw 5, 4
9135; PWR6-NEXT:    vadduwm 2, 4, 2
9136; PWR6-NEXT:    vsrw 4, 2, 5
9137; PWR6-NEXT:    vspltisb 5, 15
9138; PWR6-NEXT:    vadduwm 2, 2, 4
9139; PWR6-NEXT:    vspltisb 4, 1
9140; PWR6-NEXT:    vand 2, 2, 5
9141; PWR6-NEXT:    vspltisw 5, -16
9142; PWR6-NEXT:    vrlw 0, 4, 5
9143; PWR6-NEXT:    vmulouh 4, 2, 4
9144; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
9145; PWR6-NEXT:    vspltisw 3, 12
9146; PWR6-NEXT:    vadduwm 3, 3, 3
9147; PWR6-NEXT:    vslw 2, 2, 5
9148; PWR6-NEXT:    vadduwm 2, 4, 2
9149; PWR6-NEXT:    vsrw 2, 2, 3
9150; PWR6-NEXT:    vspltisw 3, 5
9151; PWR6-NEXT:    vsubuwm 3, 3, 5
9152; PWR6-NEXT:    vcmpgtuw 2, 3, 2
9153; PWR6-NEXT:    blr
9154;
9155; PWR7-LABEL: ult_21_v4i32:
9156; PWR7:       # %bb.0:
9157; PWR7-NEXT:    vspltisw 3, 1
9158; PWR7-NEXT:    addis 3, 2, .LCPI79_0@toc@ha
9159; PWR7-NEXT:    addi 3, 3, .LCPI79_0@toc@l
9160; PWR7-NEXT:    vspltisw 4, 2
9161; PWR7-NEXT:    lxvw4x 0, 0, 3
9162; PWR7-NEXT:    addis 3, 2, .LCPI79_1@toc@ha
9163; PWR7-NEXT:    vspltisw 5, 4
9164; PWR7-NEXT:    addi 3, 3, .LCPI79_1@toc@l
9165; PWR7-NEXT:    vsrw 3, 2, 3
9166; PWR7-NEXT:    vspltisb 0, 15
9167; PWR7-NEXT:    vspltisb 1, 1
9168; PWR7-NEXT:    vspltisw 6, -16
9169; PWR7-NEXT:    vspltisw 7, 12
9170; PWR7-NEXT:    vspltisw 8, 5
9171; PWR7-NEXT:    xxland 35, 35, 0
9172; PWR7-NEXT:    lxvw4x 0, 0, 3
9173; PWR7-NEXT:    vsubuwm 2, 2, 3
9174; PWR7-NEXT:    vsrw 3, 2, 4
9175; PWR7-NEXT:    xxland 34, 34, 0
9176; PWR7-NEXT:    xxlxor 36, 36, 36
9177; PWR7-NEXT:    xxland 35, 35, 0
9178; PWR7-NEXT:    vadduwm 2, 2, 3
9179; PWR7-NEXT:    vsrw 3, 2, 5
9180; PWR7-NEXT:    vadduwm 2, 2, 3
9181; PWR7-NEXT:    vrlw 3, 1, 6
9182; PWR7-NEXT:    xxland 34, 34, 32
9183; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
9184; PWR7-NEXT:    vmulouh 2, 2, 1
9185; PWR7-NEXT:    vslw 3, 3, 6
9186; PWR7-NEXT:    vadduwm 2, 2, 3
9187; PWR7-NEXT:    vadduwm 3, 7, 7
9188; PWR7-NEXT:    vsrw 2, 2, 3
9189; PWR7-NEXT:    vsubuwm 3, 8, 6
9190; PWR7-NEXT:    vcmpgtuw 2, 3, 2
9191; PWR7-NEXT:    blr
9192;
9193; PWR8-LABEL: ult_21_v4i32:
9194; PWR8:       # %bb.0:
9195; PWR8-NEXT:    vspltisw 3, -16
9196; PWR8-NEXT:    vspltisw 4, 5
9197; PWR8-NEXT:    vpopcntw 2, 2
9198; PWR8-NEXT:    vsubuwm 3, 4, 3
9199; PWR8-NEXT:    vcmpgtuw 2, 3, 2
9200; PWR8-NEXT:    blr
9201;
9202; PWR9-LABEL: ult_21_v4i32:
9203; PWR9:       # %bb.0:
9204; PWR9-NEXT:    vspltisw 3, -16
9205; PWR9-NEXT:    vspltisw 4, 5
9206; PWR9-NEXT:    vpopcntw 2, 2
9207; PWR9-NEXT:    vsubuwm 3, 4, 3
9208; PWR9-NEXT:    vcmpgtuw 2, 3, 2
9209; PWR9-NEXT:    blr
9210  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9211  %3 = icmp ult <4 x i32> %2, <i32 21, i32 21, i32 21, i32 21>
9212  %4 = sext <4 x i1> %3 to <4 x i32>
9213  ret <4 x i32> %4
9214}
9215
9216define <4 x i32> @ugt_21_v4i32(<4 x i32> %0) {
9217; PWR5-LABEL: ugt_21_v4i32:
9218; PWR5:       # %bb.0:
9219; PWR5-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
9220; PWR5-NEXT:    vspltisw 4, 1
9221; PWR5-NEXT:    vxor 3, 3, 3
9222; PWR5-NEXT:    addi 3, 3, .LCPI80_0@toc@l
9223; PWR5-NEXT:    lvx 5, 0, 3
9224; PWR5-NEXT:    addis 3, 2, .LCPI80_1@toc@ha
9225; PWR5-NEXT:    addi 3, 3, .LCPI80_1@toc@l
9226; PWR5-NEXT:    vspltisw 0, 2
9227; PWR5-NEXT:    vsrw 4, 2, 4
9228; PWR5-NEXT:    vand 4, 4, 5
9229; PWR5-NEXT:    lvx 5, 0, 3
9230; PWR5-NEXT:    vsubuwm 2, 2, 4
9231; PWR5-NEXT:    vand 4, 2, 5
9232; PWR5-NEXT:    vsrw 2, 2, 0
9233; PWR5-NEXT:    vand 2, 2, 5
9234; PWR5-NEXT:    vspltisw 5, 4
9235; PWR5-NEXT:    vadduwm 2, 4, 2
9236; PWR5-NEXT:    vsrw 4, 2, 5
9237; PWR5-NEXT:    vspltisb 5, 15
9238; PWR5-NEXT:    vadduwm 2, 2, 4
9239; PWR5-NEXT:    vspltisb 4, 1
9240; PWR5-NEXT:    vand 2, 2, 5
9241; PWR5-NEXT:    vspltisw 5, -16
9242; PWR5-NEXT:    vrlw 0, 4, 5
9243; PWR5-NEXT:    vmulouh 4, 2, 4
9244; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
9245; PWR5-NEXT:    vspltisw 3, 12
9246; PWR5-NEXT:    vadduwm 3, 3, 3
9247; PWR5-NEXT:    vslw 2, 2, 5
9248; PWR5-NEXT:    vadduwm 2, 4, 2
9249; PWR5-NEXT:    vsrw 2, 2, 3
9250; PWR5-NEXT:    vspltisw 3, 5
9251; PWR5-NEXT:    vsubuwm 3, 3, 5
9252; PWR5-NEXT:    vcmpgtuw 2, 2, 3
9253; PWR5-NEXT:    blr
9254;
9255; PWR6-LABEL: ugt_21_v4i32:
9256; PWR6:       # %bb.0:
9257; PWR6-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
9258; PWR6-NEXT:    vspltisw 4, 1
9259; PWR6-NEXT:    vxor 3, 3, 3
9260; PWR6-NEXT:    addi 3, 3, .LCPI80_0@toc@l
9261; PWR6-NEXT:    lvx 5, 0, 3
9262; PWR6-NEXT:    addis 3, 2, .LCPI80_1@toc@ha
9263; PWR6-NEXT:    addi 3, 3, .LCPI80_1@toc@l
9264; PWR6-NEXT:    vspltisw 0, 2
9265; PWR6-NEXT:    vsrw 4, 2, 4
9266; PWR6-NEXT:    vand 4, 4, 5
9267; PWR6-NEXT:    lvx 5, 0, 3
9268; PWR6-NEXT:    vsubuwm 2, 2, 4
9269; PWR6-NEXT:    vand 4, 2, 5
9270; PWR6-NEXT:    vsrw 2, 2, 0
9271; PWR6-NEXT:    vand 2, 2, 5
9272; PWR6-NEXT:    vspltisw 5, 4
9273; PWR6-NEXT:    vadduwm 2, 4, 2
9274; PWR6-NEXT:    vsrw 4, 2, 5
9275; PWR6-NEXT:    vspltisb 5, 15
9276; PWR6-NEXT:    vadduwm 2, 2, 4
9277; PWR6-NEXT:    vspltisb 4, 1
9278; PWR6-NEXT:    vand 2, 2, 5
9279; PWR6-NEXT:    vspltisw 5, -16
9280; PWR6-NEXT:    vrlw 0, 4, 5
9281; PWR6-NEXT:    vmulouh 4, 2, 4
9282; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
9283; PWR6-NEXT:    vspltisw 3, 12
9284; PWR6-NEXT:    vadduwm 3, 3, 3
9285; PWR6-NEXT:    vslw 2, 2, 5
9286; PWR6-NEXT:    vadduwm 2, 4, 2
9287; PWR6-NEXT:    vsrw 2, 2, 3
9288; PWR6-NEXT:    vspltisw 3, 5
9289; PWR6-NEXT:    vsubuwm 3, 3, 5
9290; PWR6-NEXT:    vcmpgtuw 2, 2, 3
9291; PWR6-NEXT:    blr
9292;
9293; PWR7-LABEL: ugt_21_v4i32:
9294; PWR7:       # %bb.0:
9295; PWR7-NEXT:    vspltisw 3, 1
9296; PWR7-NEXT:    addis 3, 2, .LCPI80_0@toc@ha
9297; PWR7-NEXT:    addi 3, 3, .LCPI80_0@toc@l
9298; PWR7-NEXT:    vspltisw 4, 2
9299; PWR7-NEXT:    lxvw4x 0, 0, 3
9300; PWR7-NEXT:    addis 3, 2, .LCPI80_1@toc@ha
9301; PWR7-NEXT:    vspltisw 5, 4
9302; PWR7-NEXT:    addi 3, 3, .LCPI80_1@toc@l
9303; PWR7-NEXT:    vsrw 3, 2, 3
9304; PWR7-NEXT:    vspltisb 0, 15
9305; PWR7-NEXT:    vspltisb 1, 1
9306; PWR7-NEXT:    vspltisw 6, -16
9307; PWR7-NEXT:    vspltisw 7, 12
9308; PWR7-NEXT:    vspltisw 8, 5
9309; PWR7-NEXT:    xxland 35, 35, 0
9310; PWR7-NEXT:    lxvw4x 0, 0, 3
9311; PWR7-NEXT:    vsubuwm 2, 2, 3
9312; PWR7-NEXT:    vsrw 3, 2, 4
9313; PWR7-NEXT:    xxland 34, 34, 0
9314; PWR7-NEXT:    xxlxor 36, 36, 36
9315; PWR7-NEXT:    xxland 35, 35, 0
9316; PWR7-NEXT:    vadduwm 2, 2, 3
9317; PWR7-NEXT:    vsrw 3, 2, 5
9318; PWR7-NEXT:    vadduwm 2, 2, 3
9319; PWR7-NEXT:    vrlw 3, 1, 6
9320; PWR7-NEXT:    xxland 34, 34, 32
9321; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
9322; PWR7-NEXT:    vmulouh 2, 2, 1
9323; PWR7-NEXT:    vslw 3, 3, 6
9324; PWR7-NEXT:    vadduwm 2, 2, 3
9325; PWR7-NEXT:    vadduwm 3, 7, 7
9326; PWR7-NEXT:    vsrw 2, 2, 3
9327; PWR7-NEXT:    vsubuwm 3, 8, 6
9328; PWR7-NEXT:    vcmpgtuw 2, 2, 3
9329; PWR7-NEXT:    blr
9330;
9331; PWR8-LABEL: ugt_21_v4i32:
9332; PWR8:       # %bb.0:
9333; PWR8-NEXT:    vspltisw 3, -16
9334; PWR8-NEXT:    vspltisw 4, 5
9335; PWR8-NEXT:    vpopcntw 2, 2
9336; PWR8-NEXT:    vsubuwm 3, 4, 3
9337; PWR8-NEXT:    vcmpgtuw 2, 2, 3
9338; PWR8-NEXT:    blr
9339;
9340; PWR9-LABEL: ugt_21_v4i32:
9341; PWR9:       # %bb.0:
9342; PWR9-NEXT:    vspltisw 3, -16
9343; PWR9-NEXT:    vspltisw 4, 5
9344; PWR9-NEXT:    vpopcntw 2, 2
9345; PWR9-NEXT:    vsubuwm 3, 4, 3
9346; PWR9-NEXT:    vcmpgtuw 2, 2, 3
9347; PWR9-NEXT:    blr
9348  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9349  %3 = icmp ugt <4 x i32> %2, <i32 21, i32 21, i32 21, i32 21>
9350  %4 = sext <4 x i1> %3 to <4 x i32>
9351  ret <4 x i32> %4
9352}
9353
9354define <4 x i32> @ult_22_v4i32(<4 x i32> %0) {
9355; PWR5-LABEL: ult_22_v4i32:
9356; PWR5:       # %bb.0:
9357; PWR5-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
9358; PWR5-NEXT:    vspltisw 4, 1
9359; PWR5-NEXT:    vxor 3, 3, 3
9360; PWR5-NEXT:    addi 3, 3, .LCPI81_0@toc@l
9361; PWR5-NEXT:    lvx 5, 0, 3
9362; PWR5-NEXT:    addis 3, 2, .LCPI81_1@toc@ha
9363; PWR5-NEXT:    addi 3, 3, .LCPI81_1@toc@l
9364; PWR5-NEXT:    vspltisw 0, 2
9365; PWR5-NEXT:    vsrw 4, 2, 4
9366; PWR5-NEXT:    vand 4, 4, 5
9367; PWR5-NEXT:    lvx 5, 0, 3
9368; PWR5-NEXT:    vsubuwm 2, 2, 4
9369; PWR5-NEXT:    vand 4, 2, 5
9370; PWR5-NEXT:    vsrw 2, 2, 0
9371; PWR5-NEXT:    vand 2, 2, 5
9372; PWR5-NEXT:    vspltisw 5, 4
9373; PWR5-NEXT:    vadduwm 2, 4, 2
9374; PWR5-NEXT:    vsrw 4, 2, 5
9375; PWR5-NEXT:    vspltisb 5, 15
9376; PWR5-NEXT:    vadduwm 2, 2, 4
9377; PWR5-NEXT:    vspltisb 4, 1
9378; PWR5-NEXT:    vand 2, 2, 5
9379; PWR5-NEXT:    vspltisw 5, -16
9380; PWR5-NEXT:    vrlw 0, 4, 5
9381; PWR5-NEXT:    vmulouh 4, 2, 4
9382; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
9383; PWR5-NEXT:    vspltisw 3, 12
9384; PWR5-NEXT:    vadduwm 3, 3, 3
9385; PWR5-NEXT:    vslw 2, 2, 5
9386; PWR5-NEXT:    vadduwm 2, 4, 2
9387; PWR5-NEXT:    vsrw 2, 2, 3
9388; PWR5-NEXT:    vspltisw 3, 11
9389; PWR5-NEXT:    vadduwm 3, 3, 3
9390; PWR5-NEXT:    vcmpgtuw 2, 3, 2
9391; PWR5-NEXT:    blr
9392;
9393; PWR6-LABEL: ult_22_v4i32:
9394; PWR6:       # %bb.0:
9395; PWR6-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
9396; PWR6-NEXT:    vspltisw 4, 1
9397; PWR6-NEXT:    vxor 3, 3, 3
9398; PWR6-NEXT:    addi 3, 3, .LCPI81_0@toc@l
9399; PWR6-NEXT:    lvx 5, 0, 3
9400; PWR6-NEXT:    addis 3, 2, .LCPI81_1@toc@ha
9401; PWR6-NEXT:    addi 3, 3, .LCPI81_1@toc@l
9402; PWR6-NEXT:    vspltisw 0, 2
9403; PWR6-NEXT:    vsrw 4, 2, 4
9404; PWR6-NEXT:    vand 4, 4, 5
9405; PWR6-NEXT:    lvx 5, 0, 3
9406; PWR6-NEXT:    vsubuwm 2, 2, 4
9407; PWR6-NEXT:    vand 4, 2, 5
9408; PWR6-NEXT:    vsrw 2, 2, 0
9409; PWR6-NEXT:    vand 2, 2, 5
9410; PWR6-NEXT:    vspltisw 5, 4
9411; PWR6-NEXT:    vadduwm 2, 4, 2
9412; PWR6-NEXT:    vsrw 4, 2, 5
9413; PWR6-NEXT:    vspltisb 5, 15
9414; PWR6-NEXT:    vadduwm 2, 2, 4
9415; PWR6-NEXT:    vspltisb 4, 1
9416; PWR6-NEXT:    vand 2, 2, 5
9417; PWR6-NEXT:    vspltisw 5, -16
9418; PWR6-NEXT:    vrlw 0, 4, 5
9419; PWR6-NEXT:    vmulouh 4, 2, 4
9420; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
9421; PWR6-NEXT:    vspltisw 3, 12
9422; PWR6-NEXT:    vadduwm 3, 3, 3
9423; PWR6-NEXT:    vslw 2, 2, 5
9424; PWR6-NEXT:    vadduwm 2, 4, 2
9425; PWR6-NEXT:    vsrw 2, 2, 3
9426; PWR6-NEXT:    vspltisw 3, 11
9427; PWR6-NEXT:    vadduwm 3, 3, 3
9428; PWR6-NEXT:    vcmpgtuw 2, 3, 2
9429; PWR6-NEXT:    blr
9430;
9431; PWR7-LABEL: ult_22_v4i32:
9432; PWR7:       # %bb.0:
9433; PWR7-NEXT:    vspltisw 3, 1
9434; PWR7-NEXT:    addis 3, 2, .LCPI81_0@toc@ha
9435; PWR7-NEXT:    addi 3, 3, .LCPI81_0@toc@l
9436; PWR7-NEXT:    vspltisw 4, 2
9437; PWR7-NEXT:    lxvw4x 0, 0, 3
9438; PWR7-NEXT:    addis 3, 2, .LCPI81_1@toc@ha
9439; PWR7-NEXT:    vspltisw 5, 4
9440; PWR7-NEXT:    addi 3, 3, .LCPI81_1@toc@l
9441; PWR7-NEXT:    vsrw 3, 2, 3
9442; PWR7-NEXT:    vspltisb 0, 15
9443; PWR7-NEXT:    vspltisb 1, 1
9444; PWR7-NEXT:    vspltisw 6, -16
9445; PWR7-NEXT:    vspltisw 7, 12
9446; PWR7-NEXT:    vspltisw 8, 11
9447; PWR7-NEXT:    xxland 35, 35, 0
9448; PWR7-NEXT:    lxvw4x 0, 0, 3
9449; PWR7-NEXT:    vsubuwm 2, 2, 3
9450; PWR7-NEXT:    vsrw 3, 2, 4
9451; PWR7-NEXT:    xxland 34, 34, 0
9452; PWR7-NEXT:    xxlxor 36, 36, 36
9453; PWR7-NEXT:    xxland 35, 35, 0
9454; PWR7-NEXT:    vadduwm 2, 2, 3
9455; PWR7-NEXT:    vsrw 3, 2, 5
9456; PWR7-NEXT:    vadduwm 2, 2, 3
9457; PWR7-NEXT:    vrlw 3, 1, 6
9458; PWR7-NEXT:    xxland 34, 34, 32
9459; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
9460; PWR7-NEXT:    vmulouh 2, 2, 1
9461; PWR7-NEXT:    vslw 3, 3, 6
9462; PWR7-NEXT:    vadduwm 2, 2, 3
9463; PWR7-NEXT:    vadduwm 3, 7, 7
9464; PWR7-NEXT:    vsrw 2, 2, 3
9465; PWR7-NEXT:    vadduwm 3, 8, 8
9466; PWR7-NEXT:    vcmpgtuw 2, 3, 2
9467; PWR7-NEXT:    blr
9468;
9469; PWR8-LABEL: ult_22_v4i32:
9470; PWR8:       # %bb.0:
9471; PWR8-NEXT:    vspltisw 3, 11
9472; PWR8-NEXT:    vpopcntw 2, 2
9473; PWR8-NEXT:    vadduwm 3, 3, 3
9474; PWR8-NEXT:    vcmpgtuw 2, 3, 2
9475; PWR8-NEXT:    blr
9476;
9477; PWR9-LABEL: ult_22_v4i32:
9478; PWR9:       # %bb.0:
9479; PWR9-NEXT:    vspltisw 3, 11
9480; PWR9-NEXT:    vpopcntw 2, 2
9481; PWR9-NEXT:    vadduwm 3, 3, 3
9482; PWR9-NEXT:    vcmpgtuw 2, 3, 2
9483; PWR9-NEXT:    blr
9484  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9485  %3 = icmp ult <4 x i32> %2, <i32 22, i32 22, i32 22, i32 22>
9486  %4 = sext <4 x i1> %3 to <4 x i32>
9487  ret <4 x i32> %4
9488}
9489
9490define <4 x i32> @ugt_22_v4i32(<4 x i32> %0) {
9491; PWR5-LABEL: ugt_22_v4i32:
9492; PWR5:       # %bb.0:
9493; PWR5-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
9494; PWR5-NEXT:    vspltisw 4, 1
9495; PWR5-NEXT:    vxor 3, 3, 3
9496; PWR5-NEXT:    addi 3, 3, .LCPI82_0@toc@l
9497; PWR5-NEXT:    lvx 5, 0, 3
9498; PWR5-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
9499; PWR5-NEXT:    addi 3, 3, .LCPI82_1@toc@l
9500; PWR5-NEXT:    vspltisw 0, 2
9501; PWR5-NEXT:    vsrw 4, 2, 4
9502; PWR5-NEXT:    vand 4, 4, 5
9503; PWR5-NEXT:    lvx 5, 0, 3
9504; PWR5-NEXT:    vsubuwm 2, 2, 4
9505; PWR5-NEXT:    vand 4, 2, 5
9506; PWR5-NEXT:    vsrw 2, 2, 0
9507; PWR5-NEXT:    vand 2, 2, 5
9508; PWR5-NEXT:    vspltisw 5, 4
9509; PWR5-NEXT:    vadduwm 2, 4, 2
9510; PWR5-NEXT:    vsrw 4, 2, 5
9511; PWR5-NEXT:    vspltisb 5, 15
9512; PWR5-NEXT:    vadduwm 2, 2, 4
9513; PWR5-NEXT:    vspltisb 4, 1
9514; PWR5-NEXT:    vand 2, 2, 5
9515; PWR5-NEXT:    vspltisw 5, -16
9516; PWR5-NEXT:    vrlw 0, 4, 5
9517; PWR5-NEXT:    vmulouh 4, 2, 4
9518; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
9519; PWR5-NEXT:    vspltisw 3, 12
9520; PWR5-NEXT:    vadduwm 3, 3, 3
9521; PWR5-NEXT:    vslw 2, 2, 5
9522; PWR5-NEXT:    vadduwm 2, 4, 2
9523; PWR5-NEXT:    vsrw 2, 2, 3
9524; PWR5-NEXT:    vspltisw 3, 11
9525; PWR5-NEXT:    vadduwm 3, 3, 3
9526; PWR5-NEXT:    vcmpgtuw 2, 2, 3
9527; PWR5-NEXT:    blr
9528;
9529; PWR6-LABEL: ugt_22_v4i32:
9530; PWR6:       # %bb.0:
9531; PWR6-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
9532; PWR6-NEXT:    vspltisw 4, 1
9533; PWR6-NEXT:    vxor 3, 3, 3
9534; PWR6-NEXT:    addi 3, 3, .LCPI82_0@toc@l
9535; PWR6-NEXT:    lvx 5, 0, 3
9536; PWR6-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
9537; PWR6-NEXT:    addi 3, 3, .LCPI82_1@toc@l
9538; PWR6-NEXT:    vspltisw 0, 2
9539; PWR6-NEXT:    vsrw 4, 2, 4
9540; PWR6-NEXT:    vand 4, 4, 5
9541; PWR6-NEXT:    lvx 5, 0, 3
9542; PWR6-NEXT:    vsubuwm 2, 2, 4
9543; PWR6-NEXT:    vand 4, 2, 5
9544; PWR6-NEXT:    vsrw 2, 2, 0
9545; PWR6-NEXT:    vand 2, 2, 5
9546; PWR6-NEXT:    vspltisw 5, 4
9547; PWR6-NEXT:    vadduwm 2, 4, 2
9548; PWR6-NEXT:    vsrw 4, 2, 5
9549; PWR6-NEXT:    vspltisb 5, 15
9550; PWR6-NEXT:    vadduwm 2, 2, 4
9551; PWR6-NEXT:    vspltisb 4, 1
9552; PWR6-NEXT:    vand 2, 2, 5
9553; PWR6-NEXT:    vspltisw 5, -16
9554; PWR6-NEXT:    vrlw 0, 4, 5
9555; PWR6-NEXT:    vmulouh 4, 2, 4
9556; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
9557; PWR6-NEXT:    vspltisw 3, 12
9558; PWR6-NEXT:    vadduwm 3, 3, 3
9559; PWR6-NEXT:    vslw 2, 2, 5
9560; PWR6-NEXT:    vadduwm 2, 4, 2
9561; PWR6-NEXT:    vsrw 2, 2, 3
9562; PWR6-NEXT:    vspltisw 3, 11
9563; PWR6-NEXT:    vadduwm 3, 3, 3
9564; PWR6-NEXT:    vcmpgtuw 2, 2, 3
9565; PWR6-NEXT:    blr
9566;
9567; PWR7-LABEL: ugt_22_v4i32:
9568; PWR7:       # %bb.0:
9569; PWR7-NEXT:    vspltisw 3, 1
9570; PWR7-NEXT:    addis 3, 2, .LCPI82_0@toc@ha
9571; PWR7-NEXT:    addi 3, 3, .LCPI82_0@toc@l
9572; PWR7-NEXT:    vspltisw 4, 2
9573; PWR7-NEXT:    lxvw4x 0, 0, 3
9574; PWR7-NEXT:    addis 3, 2, .LCPI82_1@toc@ha
9575; PWR7-NEXT:    vspltisw 5, 4
9576; PWR7-NEXT:    addi 3, 3, .LCPI82_1@toc@l
9577; PWR7-NEXT:    vsrw 3, 2, 3
9578; PWR7-NEXT:    vspltisb 0, 15
9579; PWR7-NEXT:    vspltisb 1, 1
9580; PWR7-NEXT:    vspltisw 6, -16
9581; PWR7-NEXT:    vspltisw 7, 12
9582; PWR7-NEXT:    vspltisw 8, 11
9583; PWR7-NEXT:    xxland 35, 35, 0
9584; PWR7-NEXT:    lxvw4x 0, 0, 3
9585; PWR7-NEXT:    vsubuwm 2, 2, 3
9586; PWR7-NEXT:    vsrw 3, 2, 4
9587; PWR7-NEXT:    xxland 34, 34, 0
9588; PWR7-NEXT:    xxlxor 36, 36, 36
9589; PWR7-NEXT:    xxland 35, 35, 0
9590; PWR7-NEXT:    vadduwm 2, 2, 3
9591; PWR7-NEXT:    vsrw 3, 2, 5
9592; PWR7-NEXT:    vadduwm 2, 2, 3
9593; PWR7-NEXT:    vrlw 3, 1, 6
9594; PWR7-NEXT:    xxland 34, 34, 32
9595; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
9596; PWR7-NEXT:    vmulouh 2, 2, 1
9597; PWR7-NEXT:    vslw 3, 3, 6
9598; PWR7-NEXT:    vadduwm 2, 2, 3
9599; PWR7-NEXT:    vadduwm 3, 7, 7
9600; PWR7-NEXT:    vsrw 2, 2, 3
9601; PWR7-NEXT:    vadduwm 3, 8, 8
9602; PWR7-NEXT:    vcmpgtuw 2, 2, 3
9603; PWR7-NEXT:    blr
9604;
9605; PWR8-LABEL: ugt_22_v4i32:
9606; PWR8:       # %bb.0:
9607; PWR8-NEXT:    vspltisw 3, 11
9608; PWR8-NEXT:    vpopcntw 2, 2
9609; PWR8-NEXT:    vadduwm 3, 3, 3
9610; PWR8-NEXT:    vcmpgtuw 2, 2, 3
9611; PWR8-NEXT:    blr
9612;
9613; PWR9-LABEL: ugt_22_v4i32:
9614; PWR9:       # %bb.0:
9615; PWR9-NEXT:    vspltisw 3, 11
9616; PWR9-NEXT:    vpopcntw 2, 2
9617; PWR9-NEXT:    vadduwm 3, 3, 3
9618; PWR9-NEXT:    vcmpgtuw 2, 2, 3
9619; PWR9-NEXT:    blr
9620  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9621  %3 = icmp ugt <4 x i32> %2, <i32 22, i32 22, i32 22, i32 22>
9622  %4 = sext <4 x i1> %3 to <4 x i32>
9623  ret <4 x i32> %4
9624}
9625
9626define <4 x i32> @ult_23_v4i32(<4 x i32> %0) {
9627; PWR5-LABEL: ult_23_v4i32:
9628; PWR5:       # %bb.0:
9629; PWR5-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
9630; PWR5-NEXT:    vspltisw 4, 1
9631; PWR5-NEXT:    vxor 3, 3, 3
9632; PWR5-NEXT:    addi 3, 3, .LCPI83_0@toc@l
9633; PWR5-NEXT:    lvx 5, 0, 3
9634; PWR5-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
9635; PWR5-NEXT:    addi 3, 3, .LCPI83_1@toc@l
9636; PWR5-NEXT:    vspltisw 0, 2
9637; PWR5-NEXT:    vsrw 4, 2, 4
9638; PWR5-NEXT:    vand 4, 4, 5
9639; PWR5-NEXT:    lvx 5, 0, 3
9640; PWR5-NEXT:    vsubuwm 2, 2, 4
9641; PWR5-NEXT:    vand 4, 2, 5
9642; PWR5-NEXT:    vsrw 2, 2, 0
9643; PWR5-NEXT:    vand 2, 2, 5
9644; PWR5-NEXT:    vspltisw 5, 4
9645; PWR5-NEXT:    vadduwm 2, 4, 2
9646; PWR5-NEXT:    vsrw 4, 2, 5
9647; PWR5-NEXT:    vspltisb 5, 15
9648; PWR5-NEXT:    vadduwm 2, 2, 4
9649; PWR5-NEXT:    vspltisb 4, 1
9650; PWR5-NEXT:    vand 2, 2, 5
9651; PWR5-NEXT:    vspltisw 5, -16
9652; PWR5-NEXT:    vrlw 0, 4, 5
9653; PWR5-NEXT:    vmulouh 4, 2, 4
9654; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
9655; PWR5-NEXT:    vspltisw 3, 12
9656; PWR5-NEXT:    vadduwm 3, 3, 3
9657; PWR5-NEXT:    vslw 2, 2, 5
9658; PWR5-NEXT:    vadduwm 2, 4, 2
9659; PWR5-NEXT:    vsrw 2, 2, 3
9660; PWR5-NEXT:    vspltisw 3, 7
9661; PWR5-NEXT:    vsubuwm 3, 3, 5
9662; PWR5-NEXT:    vcmpgtuw 2, 3, 2
9663; PWR5-NEXT:    blr
9664;
9665; PWR6-LABEL: ult_23_v4i32:
9666; PWR6:       # %bb.0:
9667; PWR6-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
9668; PWR6-NEXT:    vspltisw 4, 1
9669; PWR6-NEXT:    vxor 3, 3, 3
9670; PWR6-NEXT:    addi 3, 3, .LCPI83_0@toc@l
9671; PWR6-NEXT:    lvx 5, 0, 3
9672; PWR6-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
9673; PWR6-NEXT:    addi 3, 3, .LCPI83_1@toc@l
9674; PWR6-NEXT:    vspltisw 0, 2
9675; PWR6-NEXT:    vsrw 4, 2, 4
9676; PWR6-NEXT:    vand 4, 4, 5
9677; PWR6-NEXT:    lvx 5, 0, 3
9678; PWR6-NEXT:    vsubuwm 2, 2, 4
9679; PWR6-NEXT:    vand 4, 2, 5
9680; PWR6-NEXT:    vsrw 2, 2, 0
9681; PWR6-NEXT:    vand 2, 2, 5
9682; PWR6-NEXT:    vspltisw 5, 4
9683; PWR6-NEXT:    vadduwm 2, 4, 2
9684; PWR6-NEXT:    vsrw 4, 2, 5
9685; PWR6-NEXT:    vspltisb 5, 15
9686; PWR6-NEXT:    vadduwm 2, 2, 4
9687; PWR6-NEXT:    vspltisb 4, 1
9688; PWR6-NEXT:    vand 2, 2, 5
9689; PWR6-NEXT:    vspltisw 5, -16
9690; PWR6-NEXT:    vrlw 0, 4, 5
9691; PWR6-NEXT:    vmulouh 4, 2, 4
9692; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
9693; PWR6-NEXT:    vspltisw 3, 12
9694; PWR6-NEXT:    vadduwm 3, 3, 3
9695; PWR6-NEXT:    vslw 2, 2, 5
9696; PWR6-NEXT:    vadduwm 2, 4, 2
9697; PWR6-NEXT:    vsrw 2, 2, 3
9698; PWR6-NEXT:    vspltisw 3, 7
9699; PWR6-NEXT:    vsubuwm 3, 3, 5
9700; PWR6-NEXT:    vcmpgtuw 2, 3, 2
9701; PWR6-NEXT:    blr
9702;
9703; PWR7-LABEL: ult_23_v4i32:
9704; PWR7:       # %bb.0:
9705; PWR7-NEXT:    vspltisw 3, 1
9706; PWR7-NEXT:    addis 3, 2, .LCPI83_0@toc@ha
9707; PWR7-NEXT:    addi 3, 3, .LCPI83_0@toc@l
9708; PWR7-NEXT:    vspltisw 4, 2
9709; PWR7-NEXT:    lxvw4x 0, 0, 3
9710; PWR7-NEXT:    addis 3, 2, .LCPI83_1@toc@ha
9711; PWR7-NEXT:    vspltisw 5, 4
9712; PWR7-NEXT:    addi 3, 3, .LCPI83_1@toc@l
9713; PWR7-NEXT:    vsrw 3, 2, 3
9714; PWR7-NEXT:    vspltisb 0, 15
9715; PWR7-NEXT:    vspltisb 1, 1
9716; PWR7-NEXT:    vspltisw 6, -16
9717; PWR7-NEXT:    vspltisw 7, 12
9718; PWR7-NEXT:    vspltisw 8, 7
9719; PWR7-NEXT:    xxland 35, 35, 0
9720; PWR7-NEXT:    lxvw4x 0, 0, 3
9721; PWR7-NEXT:    vsubuwm 2, 2, 3
9722; PWR7-NEXT:    vsrw 3, 2, 4
9723; PWR7-NEXT:    xxland 34, 34, 0
9724; PWR7-NEXT:    xxlxor 36, 36, 36
9725; PWR7-NEXT:    xxland 35, 35, 0
9726; PWR7-NEXT:    vadduwm 2, 2, 3
9727; PWR7-NEXT:    vsrw 3, 2, 5
9728; PWR7-NEXT:    vadduwm 2, 2, 3
9729; PWR7-NEXT:    vrlw 3, 1, 6
9730; PWR7-NEXT:    xxland 34, 34, 32
9731; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
9732; PWR7-NEXT:    vmulouh 2, 2, 1
9733; PWR7-NEXT:    vslw 3, 3, 6
9734; PWR7-NEXT:    vadduwm 2, 2, 3
9735; PWR7-NEXT:    vadduwm 3, 7, 7
9736; PWR7-NEXT:    vsrw 2, 2, 3
9737; PWR7-NEXT:    vsubuwm 3, 8, 6
9738; PWR7-NEXT:    vcmpgtuw 2, 3, 2
9739; PWR7-NEXT:    blr
9740;
9741; PWR8-LABEL: ult_23_v4i32:
9742; PWR8:       # %bb.0:
9743; PWR8-NEXT:    vspltisw 3, -16
9744; PWR8-NEXT:    vspltisw 4, 7
9745; PWR8-NEXT:    vpopcntw 2, 2
9746; PWR8-NEXT:    vsubuwm 3, 4, 3
9747; PWR8-NEXT:    vcmpgtuw 2, 3, 2
9748; PWR8-NEXT:    blr
9749;
9750; PWR9-LABEL: ult_23_v4i32:
9751; PWR9:       # %bb.0:
9752; PWR9-NEXT:    vspltisw 3, -16
9753; PWR9-NEXT:    vspltisw 4, 7
9754; PWR9-NEXT:    vpopcntw 2, 2
9755; PWR9-NEXT:    vsubuwm 3, 4, 3
9756; PWR9-NEXT:    vcmpgtuw 2, 3, 2
9757; PWR9-NEXT:    blr
9758  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9759  %3 = icmp ult <4 x i32> %2, <i32 23, i32 23, i32 23, i32 23>
9760  %4 = sext <4 x i1> %3 to <4 x i32>
9761  ret <4 x i32> %4
9762}
9763
9764define <4 x i32> @ugt_23_v4i32(<4 x i32> %0) {
9765; PWR5-LABEL: ugt_23_v4i32:
9766; PWR5:       # %bb.0:
9767; PWR5-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
9768; PWR5-NEXT:    vspltisw 4, 1
9769; PWR5-NEXT:    vxor 3, 3, 3
9770; PWR5-NEXT:    addi 3, 3, .LCPI84_0@toc@l
9771; PWR5-NEXT:    lvx 5, 0, 3
9772; PWR5-NEXT:    addis 3, 2, .LCPI84_1@toc@ha
9773; PWR5-NEXT:    addi 3, 3, .LCPI84_1@toc@l
9774; PWR5-NEXT:    vspltisw 0, 2
9775; PWR5-NEXT:    vsrw 4, 2, 4
9776; PWR5-NEXT:    vand 4, 4, 5
9777; PWR5-NEXT:    lvx 5, 0, 3
9778; PWR5-NEXT:    vsubuwm 2, 2, 4
9779; PWR5-NEXT:    vand 4, 2, 5
9780; PWR5-NEXT:    vsrw 2, 2, 0
9781; PWR5-NEXT:    vand 2, 2, 5
9782; PWR5-NEXT:    vspltisw 5, 4
9783; PWR5-NEXT:    vadduwm 2, 4, 2
9784; PWR5-NEXT:    vsrw 4, 2, 5
9785; PWR5-NEXT:    vspltisb 5, 15
9786; PWR5-NEXT:    vadduwm 2, 2, 4
9787; PWR5-NEXT:    vspltisb 4, 1
9788; PWR5-NEXT:    vand 2, 2, 5
9789; PWR5-NEXT:    vspltisw 5, -16
9790; PWR5-NEXT:    vrlw 0, 4, 5
9791; PWR5-NEXT:    vmulouh 4, 2, 4
9792; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
9793; PWR5-NEXT:    vspltisw 3, 12
9794; PWR5-NEXT:    vadduwm 3, 3, 3
9795; PWR5-NEXT:    vslw 2, 2, 5
9796; PWR5-NEXT:    vadduwm 2, 4, 2
9797; PWR5-NEXT:    vsrw 2, 2, 3
9798; PWR5-NEXT:    vspltisw 3, 7
9799; PWR5-NEXT:    vsubuwm 3, 3, 5
9800; PWR5-NEXT:    vcmpgtuw 2, 2, 3
9801; PWR5-NEXT:    blr
9802;
9803; PWR6-LABEL: ugt_23_v4i32:
9804; PWR6:       # %bb.0:
9805; PWR6-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
9806; PWR6-NEXT:    vspltisw 4, 1
9807; PWR6-NEXT:    vxor 3, 3, 3
9808; PWR6-NEXT:    addi 3, 3, .LCPI84_0@toc@l
9809; PWR6-NEXT:    lvx 5, 0, 3
9810; PWR6-NEXT:    addis 3, 2, .LCPI84_1@toc@ha
9811; PWR6-NEXT:    addi 3, 3, .LCPI84_1@toc@l
9812; PWR6-NEXT:    vspltisw 0, 2
9813; PWR6-NEXT:    vsrw 4, 2, 4
9814; PWR6-NEXT:    vand 4, 4, 5
9815; PWR6-NEXT:    lvx 5, 0, 3
9816; PWR6-NEXT:    vsubuwm 2, 2, 4
9817; PWR6-NEXT:    vand 4, 2, 5
9818; PWR6-NEXT:    vsrw 2, 2, 0
9819; PWR6-NEXT:    vand 2, 2, 5
9820; PWR6-NEXT:    vspltisw 5, 4
9821; PWR6-NEXT:    vadduwm 2, 4, 2
9822; PWR6-NEXT:    vsrw 4, 2, 5
9823; PWR6-NEXT:    vspltisb 5, 15
9824; PWR6-NEXT:    vadduwm 2, 2, 4
9825; PWR6-NEXT:    vspltisb 4, 1
9826; PWR6-NEXT:    vand 2, 2, 5
9827; PWR6-NEXT:    vspltisw 5, -16
9828; PWR6-NEXT:    vrlw 0, 4, 5
9829; PWR6-NEXT:    vmulouh 4, 2, 4
9830; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
9831; PWR6-NEXT:    vspltisw 3, 12
9832; PWR6-NEXT:    vadduwm 3, 3, 3
9833; PWR6-NEXT:    vslw 2, 2, 5
9834; PWR6-NEXT:    vadduwm 2, 4, 2
9835; PWR6-NEXT:    vsrw 2, 2, 3
9836; PWR6-NEXT:    vspltisw 3, 7
9837; PWR6-NEXT:    vsubuwm 3, 3, 5
9838; PWR6-NEXT:    vcmpgtuw 2, 2, 3
9839; PWR6-NEXT:    blr
9840;
9841; PWR7-LABEL: ugt_23_v4i32:
9842; PWR7:       # %bb.0:
9843; PWR7-NEXT:    vspltisw 3, 1
9844; PWR7-NEXT:    addis 3, 2, .LCPI84_0@toc@ha
9845; PWR7-NEXT:    addi 3, 3, .LCPI84_0@toc@l
9846; PWR7-NEXT:    vspltisw 4, 2
9847; PWR7-NEXT:    lxvw4x 0, 0, 3
9848; PWR7-NEXT:    addis 3, 2, .LCPI84_1@toc@ha
9849; PWR7-NEXT:    vspltisw 5, 4
9850; PWR7-NEXT:    addi 3, 3, .LCPI84_1@toc@l
9851; PWR7-NEXT:    vsrw 3, 2, 3
9852; PWR7-NEXT:    vspltisb 0, 15
9853; PWR7-NEXT:    vspltisb 1, 1
9854; PWR7-NEXT:    vspltisw 6, -16
9855; PWR7-NEXT:    vspltisw 7, 12
9856; PWR7-NEXT:    vspltisw 8, 7
9857; PWR7-NEXT:    xxland 35, 35, 0
9858; PWR7-NEXT:    lxvw4x 0, 0, 3
9859; PWR7-NEXT:    vsubuwm 2, 2, 3
9860; PWR7-NEXT:    vsrw 3, 2, 4
9861; PWR7-NEXT:    xxland 34, 34, 0
9862; PWR7-NEXT:    xxlxor 36, 36, 36
9863; PWR7-NEXT:    xxland 35, 35, 0
9864; PWR7-NEXT:    vadduwm 2, 2, 3
9865; PWR7-NEXT:    vsrw 3, 2, 5
9866; PWR7-NEXT:    vadduwm 2, 2, 3
9867; PWR7-NEXT:    vrlw 3, 1, 6
9868; PWR7-NEXT:    xxland 34, 34, 32
9869; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
9870; PWR7-NEXT:    vmulouh 2, 2, 1
9871; PWR7-NEXT:    vslw 3, 3, 6
9872; PWR7-NEXT:    vadduwm 2, 2, 3
9873; PWR7-NEXT:    vadduwm 3, 7, 7
9874; PWR7-NEXT:    vsrw 2, 2, 3
9875; PWR7-NEXT:    vsubuwm 3, 8, 6
9876; PWR7-NEXT:    vcmpgtuw 2, 2, 3
9877; PWR7-NEXT:    blr
9878;
9879; PWR8-LABEL: ugt_23_v4i32:
9880; PWR8:       # %bb.0:
9881; PWR8-NEXT:    vspltisw 3, -16
9882; PWR8-NEXT:    vspltisw 4, 7
9883; PWR8-NEXT:    vpopcntw 2, 2
9884; PWR8-NEXT:    vsubuwm 3, 4, 3
9885; PWR8-NEXT:    vcmpgtuw 2, 2, 3
9886; PWR8-NEXT:    blr
9887;
9888; PWR9-LABEL: ugt_23_v4i32:
9889; PWR9:       # %bb.0:
9890; PWR9-NEXT:    vspltisw 3, -16
9891; PWR9-NEXT:    vspltisw 4, 7
9892; PWR9-NEXT:    vpopcntw 2, 2
9893; PWR9-NEXT:    vsubuwm 3, 4, 3
9894; PWR9-NEXT:    vcmpgtuw 2, 2, 3
9895; PWR9-NEXT:    blr
9896  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
9897  %3 = icmp ugt <4 x i32> %2, <i32 23, i32 23, i32 23, i32 23>
9898  %4 = sext <4 x i1> %3 to <4 x i32>
9899  ret <4 x i32> %4
9900}
9901
9902define <4 x i32> @ult_24_v4i32(<4 x i32> %0) {
9903; PWR5-LABEL: ult_24_v4i32:
9904; PWR5:       # %bb.0:
9905; PWR5-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
9906; PWR5-NEXT:    vspltisw 4, 1
9907; PWR5-NEXT:    vxor 3, 3, 3
9908; PWR5-NEXT:    addi 3, 3, .LCPI85_0@toc@l
9909; PWR5-NEXT:    lvx 5, 0, 3
9910; PWR5-NEXT:    addis 3, 2, .LCPI85_1@toc@ha
9911; PWR5-NEXT:    addi 3, 3, .LCPI85_1@toc@l
9912; PWR5-NEXT:    vspltisw 0, 2
9913; PWR5-NEXT:    vsrw 4, 2, 4
9914; PWR5-NEXT:    vand 4, 4, 5
9915; PWR5-NEXT:    lvx 5, 0, 3
9916; PWR5-NEXT:    vsubuwm 2, 2, 4
9917; PWR5-NEXT:    vand 4, 2, 5
9918; PWR5-NEXT:    vsrw 2, 2, 0
9919; PWR5-NEXT:    vand 2, 2, 5
9920; PWR5-NEXT:    vspltisw 5, 4
9921; PWR5-NEXT:    vadduwm 2, 4, 2
9922; PWR5-NEXT:    vsrw 4, 2, 5
9923; PWR5-NEXT:    vspltisb 5, 15
9924; PWR5-NEXT:    vadduwm 2, 2, 4
9925; PWR5-NEXT:    vspltisb 4, 1
9926; PWR5-NEXT:    vand 2, 2, 5
9927; PWR5-NEXT:    vspltisw 5, -16
9928; PWR5-NEXT:    vrlw 0, 4, 5
9929; PWR5-NEXT:    vmulouh 4, 2, 4
9930; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
9931; PWR5-NEXT:    vspltisw 3, 12
9932; PWR5-NEXT:    vadduwm 3, 3, 3
9933; PWR5-NEXT:    vslw 2, 2, 5
9934; PWR5-NEXT:    vadduwm 2, 4, 2
9935; PWR5-NEXT:    vsrw 2, 2, 3
9936; PWR5-NEXT:    vcmpgtuw 2, 3, 2
9937; PWR5-NEXT:    blr
9938;
9939; PWR6-LABEL: ult_24_v4i32:
9940; PWR6:       # %bb.0:
9941; PWR6-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
9942; PWR6-NEXT:    vspltisw 4, 1
9943; PWR6-NEXT:    vxor 3, 3, 3
9944; PWR6-NEXT:    addi 3, 3, .LCPI85_0@toc@l
9945; PWR6-NEXT:    lvx 5, 0, 3
9946; PWR6-NEXT:    addis 3, 2, .LCPI85_1@toc@ha
9947; PWR6-NEXT:    addi 3, 3, .LCPI85_1@toc@l
9948; PWR6-NEXT:    vspltisw 0, 2
9949; PWR6-NEXT:    vsrw 4, 2, 4
9950; PWR6-NEXT:    vand 4, 4, 5
9951; PWR6-NEXT:    lvx 5, 0, 3
9952; PWR6-NEXT:    vsubuwm 2, 2, 4
9953; PWR6-NEXT:    vand 4, 2, 5
9954; PWR6-NEXT:    vsrw 2, 2, 0
9955; PWR6-NEXT:    vand 2, 2, 5
9956; PWR6-NEXT:    vspltisw 5, 4
9957; PWR6-NEXT:    vadduwm 2, 4, 2
9958; PWR6-NEXT:    vsrw 4, 2, 5
9959; PWR6-NEXT:    vspltisb 5, 15
9960; PWR6-NEXT:    vadduwm 2, 2, 4
9961; PWR6-NEXT:    vspltisb 4, 1
9962; PWR6-NEXT:    vand 2, 2, 5
9963; PWR6-NEXT:    vspltisw 5, -16
9964; PWR6-NEXT:    vrlw 0, 4, 5
9965; PWR6-NEXT:    vmulouh 4, 2, 4
9966; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
9967; PWR6-NEXT:    vspltisw 3, 12
9968; PWR6-NEXT:    vadduwm 3, 3, 3
9969; PWR6-NEXT:    vslw 2, 2, 5
9970; PWR6-NEXT:    vadduwm 2, 4, 2
9971; PWR6-NEXT:    vsrw 2, 2, 3
9972; PWR6-NEXT:    vcmpgtuw 2, 3, 2
9973; PWR6-NEXT:    blr
9974;
9975; PWR7-LABEL: ult_24_v4i32:
9976; PWR7:       # %bb.0:
9977; PWR7-NEXT:    vspltisw 3, 1
9978; PWR7-NEXT:    addis 3, 2, .LCPI85_0@toc@ha
9979; PWR7-NEXT:    addi 3, 3, .LCPI85_0@toc@l
9980; PWR7-NEXT:    vspltisw 4, 2
9981; PWR7-NEXT:    lxvw4x 0, 0, 3
9982; PWR7-NEXT:    addis 3, 2, .LCPI85_1@toc@ha
9983; PWR7-NEXT:    vspltisw 5, 4
9984; PWR7-NEXT:    addi 3, 3, .LCPI85_1@toc@l
9985; PWR7-NEXT:    vsrw 3, 2, 3
9986; PWR7-NEXT:    vspltisb 0, 15
9987; PWR7-NEXT:    vspltisb 1, 1
9988; PWR7-NEXT:    vspltisw 6, -16
9989; PWR7-NEXT:    vspltisw 7, 12
9990; PWR7-NEXT:    xxland 35, 35, 0
9991; PWR7-NEXT:    lxvw4x 0, 0, 3
9992; PWR7-NEXT:    vsubuwm 2, 2, 3
9993; PWR7-NEXT:    vsrw 3, 2, 4
9994; PWR7-NEXT:    xxland 34, 34, 0
9995; PWR7-NEXT:    xxlxor 36, 36, 36
9996; PWR7-NEXT:    xxland 35, 35, 0
9997; PWR7-NEXT:    vadduwm 2, 2, 3
9998; PWR7-NEXT:    vsrw 3, 2, 5
9999; PWR7-NEXT:    vadduwm 2, 2, 3
10000; PWR7-NEXT:    vrlw 3, 1, 6
10001; PWR7-NEXT:    xxland 34, 34, 32
10002; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
10003; PWR7-NEXT:    vmulouh 2, 2, 1
10004; PWR7-NEXT:    vslw 3, 3, 6
10005; PWR7-NEXT:    vadduwm 2, 2, 3
10006; PWR7-NEXT:    vadduwm 3, 7, 7
10007; PWR7-NEXT:    vsrw 2, 2, 3
10008; PWR7-NEXT:    vcmpgtuw 2, 3, 2
10009; PWR7-NEXT:    blr
10010;
10011; PWR8-LABEL: ult_24_v4i32:
10012; PWR8:       # %bb.0:
10013; PWR8-NEXT:    vspltisw 3, 12
10014; PWR8-NEXT:    vpopcntw 2, 2
10015; PWR8-NEXT:    vadduwm 3, 3, 3
10016; PWR8-NEXT:    vcmpgtuw 2, 3, 2
10017; PWR8-NEXT:    blr
10018;
10019; PWR9-LABEL: ult_24_v4i32:
10020; PWR9:       # %bb.0:
10021; PWR9-NEXT:    vspltisw 3, 12
10022; PWR9-NEXT:    vpopcntw 2, 2
10023; PWR9-NEXT:    vadduwm 3, 3, 3
10024; PWR9-NEXT:    vcmpgtuw 2, 3, 2
10025; PWR9-NEXT:    blr
10026  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10027  %3 = icmp ult <4 x i32> %2, <i32 24, i32 24, i32 24, i32 24>
10028  %4 = sext <4 x i1> %3 to <4 x i32>
10029  ret <4 x i32> %4
10030}
10031
10032define <4 x i32> @ugt_24_v4i32(<4 x i32> %0) {
10033; PWR5-LABEL: ugt_24_v4i32:
10034; PWR5:       # %bb.0:
10035; PWR5-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
10036; PWR5-NEXT:    vspltisw 4, 1
10037; PWR5-NEXT:    vxor 3, 3, 3
10038; PWR5-NEXT:    addi 3, 3, .LCPI86_0@toc@l
10039; PWR5-NEXT:    lvx 5, 0, 3
10040; PWR5-NEXT:    addis 3, 2, .LCPI86_1@toc@ha
10041; PWR5-NEXT:    addi 3, 3, .LCPI86_1@toc@l
10042; PWR5-NEXT:    vspltisw 0, 2
10043; PWR5-NEXT:    vsrw 4, 2, 4
10044; PWR5-NEXT:    vand 4, 4, 5
10045; PWR5-NEXT:    lvx 5, 0, 3
10046; PWR5-NEXT:    vsubuwm 2, 2, 4
10047; PWR5-NEXT:    vand 4, 2, 5
10048; PWR5-NEXT:    vsrw 2, 2, 0
10049; PWR5-NEXT:    vand 2, 2, 5
10050; PWR5-NEXT:    vspltisw 5, 4
10051; PWR5-NEXT:    vadduwm 2, 4, 2
10052; PWR5-NEXT:    vsrw 4, 2, 5
10053; PWR5-NEXT:    vspltisb 5, 15
10054; PWR5-NEXT:    vadduwm 2, 2, 4
10055; PWR5-NEXT:    vspltisb 4, 1
10056; PWR5-NEXT:    vand 2, 2, 5
10057; PWR5-NEXT:    vspltisw 5, -16
10058; PWR5-NEXT:    vrlw 0, 4, 5
10059; PWR5-NEXT:    vmulouh 4, 2, 4
10060; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
10061; PWR5-NEXT:    vspltisw 3, 12
10062; PWR5-NEXT:    vadduwm 3, 3, 3
10063; PWR5-NEXT:    vslw 2, 2, 5
10064; PWR5-NEXT:    vadduwm 2, 4, 2
10065; PWR5-NEXT:    vsrw 2, 2, 3
10066; PWR5-NEXT:    vcmpgtuw 2, 2, 3
10067; PWR5-NEXT:    blr
10068;
10069; PWR6-LABEL: ugt_24_v4i32:
10070; PWR6:       # %bb.0:
10071; PWR6-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
10072; PWR6-NEXT:    vspltisw 4, 1
10073; PWR6-NEXT:    vxor 3, 3, 3
10074; PWR6-NEXT:    addi 3, 3, .LCPI86_0@toc@l
10075; PWR6-NEXT:    lvx 5, 0, 3
10076; PWR6-NEXT:    addis 3, 2, .LCPI86_1@toc@ha
10077; PWR6-NEXT:    addi 3, 3, .LCPI86_1@toc@l
10078; PWR6-NEXT:    vspltisw 0, 2
10079; PWR6-NEXT:    vsrw 4, 2, 4
10080; PWR6-NEXT:    vand 4, 4, 5
10081; PWR6-NEXT:    lvx 5, 0, 3
10082; PWR6-NEXT:    vsubuwm 2, 2, 4
10083; PWR6-NEXT:    vand 4, 2, 5
10084; PWR6-NEXT:    vsrw 2, 2, 0
10085; PWR6-NEXT:    vand 2, 2, 5
10086; PWR6-NEXT:    vspltisw 5, 4
10087; PWR6-NEXT:    vadduwm 2, 4, 2
10088; PWR6-NEXT:    vsrw 4, 2, 5
10089; PWR6-NEXT:    vspltisb 5, 15
10090; PWR6-NEXT:    vadduwm 2, 2, 4
10091; PWR6-NEXT:    vspltisb 4, 1
10092; PWR6-NEXT:    vand 2, 2, 5
10093; PWR6-NEXT:    vspltisw 5, -16
10094; PWR6-NEXT:    vrlw 0, 4, 5
10095; PWR6-NEXT:    vmulouh 4, 2, 4
10096; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
10097; PWR6-NEXT:    vspltisw 3, 12
10098; PWR6-NEXT:    vadduwm 3, 3, 3
10099; PWR6-NEXT:    vslw 2, 2, 5
10100; PWR6-NEXT:    vadduwm 2, 4, 2
10101; PWR6-NEXT:    vsrw 2, 2, 3
10102; PWR6-NEXT:    vcmpgtuw 2, 2, 3
10103; PWR6-NEXT:    blr
10104;
10105; PWR7-LABEL: ugt_24_v4i32:
10106; PWR7:       # %bb.0:
10107; PWR7-NEXT:    vspltisw 3, 1
10108; PWR7-NEXT:    addis 3, 2, .LCPI86_0@toc@ha
10109; PWR7-NEXT:    addi 3, 3, .LCPI86_0@toc@l
10110; PWR7-NEXT:    vspltisw 4, 2
10111; PWR7-NEXT:    lxvw4x 0, 0, 3
10112; PWR7-NEXT:    addis 3, 2, .LCPI86_1@toc@ha
10113; PWR7-NEXT:    vspltisw 5, 4
10114; PWR7-NEXT:    addi 3, 3, .LCPI86_1@toc@l
10115; PWR7-NEXT:    vsrw 3, 2, 3
10116; PWR7-NEXT:    vspltisb 0, 15
10117; PWR7-NEXT:    vspltisb 1, 1
10118; PWR7-NEXT:    vspltisw 6, -16
10119; PWR7-NEXT:    vspltisw 7, 12
10120; PWR7-NEXT:    xxland 35, 35, 0
10121; PWR7-NEXT:    lxvw4x 0, 0, 3
10122; PWR7-NEXT:    vsubuwm 2, 2, 3
10123; PWR7-NEXT:    vsrw 3, 2, 4
10124; PWR7-NEXT:    xxland 34, 34, 0
10125; PWR7-NEXT:    xxlxor 36, 36, 36
10126; PWR7-NEXT:    xxland 35, 35, 0
10127; PWR7-NEXT:    vadduwm 2, 2, 3
10128; PWR7-NEXT:    vsrw 3, 2, 5
10129; PWR7-NEXT:    vadduwm 2, 2, 3
10130; PWR7-NEXT:    vrlw 3, 1, 6
10131; PWR7-NEXT:    xxland 34, 34, 32
10132; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
10133; PWR7-NEXT:    vmulouh 2, 2, 1
10134; PWR7-NEXT:    vslw 3, 3, 6
10135; PWR7-NEXT:    vadduwm 2, 2, 3
10136; PWR7-NEXT:    vadduwm 3, 7, 7
10137; PWR7-NEXT:    vsrw 2, 2, 3
10138; PWR7-NEXT:    vcmpgtuw 2, 2, 3
10139; PWR7-NEXT:    blr
10140;
10141; PWR8-LABEL: ugt_24_v4i32:
10142; PWR8:       # %bb.0:
10143; PWR8-NEXT:    vspltisw 3, 12
10144; PWR8-NEXT:    vpopcntw 2, 2
10145; PWR8-NEXT:    vadduwm 3, 3, 3
10146; PWR8-NEXT:    vcmpgtuw 2, 2, 3
10147; PWR8-NEXT:    blr
10148;
10149; PWR9-LABEL: ugt_24_v4i32:
10150; PWR9:       # %bb.0:
10151; PWR9-NEXT:    vspltisw 3, 12
10152; PWR9-NEXT:    vpopcntw 2, 2
10153; PWR9-NEXT:    vadduwm 3, 3, 3
10154; PWR9-NEXT:    vcmpgtuw 2, 2, 3
10155; PWR9-NEXT:    blr
10156  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10157  %3 = icmp ugt <4 x i32> %2, <i32 24, i32 24, i32 24, i32 24>
10158  %4 = sext <4 x i1> %3 to <4 x i32>
10159  ret <4 x i32> %4
10160}
10161
10162define <4 x i32> @ult_25_v4i32(<4 x i32> %0) {
10163; PWR5-LABEL: ult_25_v4i32:
10164; PWR5:       # %bb.0:
10165; PWR5-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
10166; PWR5-NEXT:    vspltisw 4, 1
10167; PWR5-NEXT:    vxor 3, 3, 3
10168; PWR5-NEXT:    addi 3, 3, .LCPI87_0@toc@l
10169; PWR5-NEXT:    lvx 5, 0, 3
10170; PWR5-NEXT:    addis 3, 2, .LCPI87_1@toc@ha
10171; PWR5-NEXT:    addi 3, 3, .LCPI87_1@toc@l
10172; PWR5-NEXT:    vspltisw 0, 2
10173; PWR5-NEXT:    vsrw 4, 2, 4
10174; PWR5-NEXT:    vand 4, 4, 5
10175; PWR5-NEXT:    lvx 5, 0, 3
10176; PWR5-NEXT:    vsubuwm 2, 2, 4
10177; PWR5-NEXT:    vand 4, 2, 5
10178; PWR5-NEXT:    vsrw 2, 2, 0
10179; PWR5-NEXT:    vand 2, 2, 5
10180; PWR5-NEXT:    vspltisw 5, 4
10181; PWR5-NEXT:    vadduwm 2, 4, 2
10182; PWR5-NEXT:    vsrw 4, 2, 5
10183; PWR5-NEXT:    vspltisb 5, 15
10184; PWR5-NEXT:    vadduwm 2, 2, 4
10185; PWR5-NEXT:    vspltisb 4, 1
10186; PWR5-NEXT:    vand 2, 2, 5
10187; PWR5-NEXT:    vspltisw 5, -16
10188; PWR5-NEXT:    vrlw 0, 4, 5
10189; PWR5-NEXT:    vmulouh 4, 2, 4
10190; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
10191; PWR5-NEXT:    vspltisw 3, 12
10192; PWR5-NEXT:    vadduwm 3, 3, 3
10193; PWR5-NEXT:    vslw 2, 2, 5
10194; PWR5-NEXT:    vadduwm 2, 4, 2
10195; PWR5-NEXT:    vsrw 2, 2, 3
10196; PWR5-NEXT:    vspltisw 3, 9
10197; PWR5-NEXT:    vsubuwm 3, 3, 5
10198; PWR5-NEXT:    vcmpgtuw 2, 3, 2
10199; PWR5-NEXT:    blr
10200;
10201; PWR6-LABEL: ult_25_v4i32:
10202; PWR6:       # %bb.0:
10203; PWR6-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
10204; PWR6-NEXT:    vspltisw 4, 1
10205; PWR6-NEXT:    vxor 3, 3, 3
10206; PWR6-NEXT:    addi 3, 3, .LCPI87_0@toc@l
10207; PWR6-NEXT:    lvx 5, 0, 3
10208; PWR6-NEXT:    addis 3, 2, .LCPI87_1@toc@ha
10209; PWR6-NEXT:    addi 3, 3, .LCPI87_1@toc@l
10210; PWR6-NEXT:    vspltisw 0, 2
10211; PWR6-NEXT:    vsrw 4, 2, 4
10212; PWR6-NEXT:    vand 4, 4, 5
10213; PWR6-NEXT:    lvx 5, 0, 3
10214; PWR6-NEXT:    vsubuwm 2, 2, 4
10215; PWR6-NEXT:    vand 4, 2, 5
10216; PWR6-NEXT:    vsrw 2, 2, 0
10217; PWR6-NEXT:    vand 2, 2, 5
10218; PWR6-NEXT:    vspltisw 5, 4
10219; PWR6-NEXT:    vadduwm 2, 4, 2
10220; PWR6-NEXT:    vsrw 4, 2, 5
10221; PWR6-NEXT:    vspltisb 5, 15
10222; PWR6-NEXT:    vadduwm 2, 2, 4
10223; PWR6-NEXT:    vspltisb 4, 1
10224; PWR6-NEXT:    vand 2, 2, 5
10225; PWR6-NEXT:    vspltisw 5, -16
10226; PWR6-NEXT:    vrlw 0, 4, 5
10227; PWR6-NEXT:    vmulouh 4, 2, 4
10228; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
10229; PWR6-NEXT:    vspltisw 3, 12
10230; PWR6-NEXT:    vadduwm 3, 3, 3
10231; PWR6-NEXT:    vslw 2, 2, 5
10232; PWR6-NEXT:    vadduwm 2, 4, 2
10233; PWR6-NEXT:    vsrw 2, 2, 3
10234; PWR6-NEXT:    vspltisw 3, 9
10235; PWR6-NEXT:    vsubuwm 3, 3, 5
10236; PWR6-NEXT:    vcmpgtuw 2, 3, 2
10237; PWR6-NEXT:    blr
10238;
10239; PWR7-LABEL: ult_25_v4i32:
10240; PWR7:       # %bb.0:
10241; PWR7-NEXT:    vspltisw 3, 1
10242; PWR7-NEXT:    addis 3, 2, .LCPI87_0@toc@ha
10243; PWR7-NEXT:    addi 3, 3, .LCPI87_0@toc@l
10244; PWR7-NEXT:    vspltisw 4, 2
10245; PWR7-NEXT:    lxvw4x 0, 0, 3
10246; PWR7-NEXT:    addis 3, 2, .LCPI87_1@toc@ha
10247; PWR7-NEXT:    vspltisw 5, 4
10248; PWR7-NEXT:    addi 3, 3, .LCPI87_1@toc@l
10249; PWR7-NEXT:    vsrw 3, 2, 3
10250; PWR7-NEXT:    vspltisb 0, 15
10251; PWR7-NEXT:    vspltisb 1, 1
10252; PWR7-NEXT:    vspltisw 6, -16
10253; PWR7-NEXT:    vspltisw 7, 12
10254; PWR7-NEXT:    vspltisw 8, 9
10255; PWR7-NEXT:    xxland 35, 35, 0
10256; PWR7-NEXT:    lxvw4x 0, 0, 3
10257; PWR7-NEXT:    vsubuwm 2, 2, 3
10258; PWR7-NEXT:    vsrw 3, 2, 4
10259; PWR7-NEXT:    xxland 34, 34, 0
10260; PWR7-NEXT:    xxlxor 36, 36, 36
10261; PWR7-NEXT:    xxland 35, 35, 0
10262; PWR7-NEXT:    vadduwm 2, 2, 3
10263; PWR7-NEXT:    vsrw 3, 2, 5
10264; PWR7-NEXT:    vadduwm 2, 2, 3
10265; PWR7-NEXT:    vrlw 3, 1, 6
10266; PWR7-NEXT:    xxland 34, 34, 32
10267; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
10268; PWR7-NEXT:    vmulouh 2, 2, 1
10269; PWR7-NEXT:    vslw 3, 3, 6
10270; PWR7-NEXT:    vadduwm 2, 2, 3
10271; PWR7-NEXT:    vadduwm 3, 7, 7
10272; PWR7-NEXT:    vsrw 2, 2, 3
10273; PWR7-NEXT:    vsubuwm 3, 8, 6
10274; PWR7-NEXT:    vcmpgtuw 2, 3, 2
10275; PWR7-NEXT:    blr
10276;
10277; PWR8-LABEL: ult_25_v4i32:
10278; PWR8:       # %bb.0:
10279; PWR8-NEXT:    vspltisw 3, -16
10280; PWR8-NEXT:    vspltisw 4, 9
10281; PWR8-NEXT:    vpopcntw 2, 2
10282; PWR8-NEXT:    vsubuwm 3, 4, 3
10283; PWR8-NEXT:    vcmpgtuw 2, 3, 2
10284; PWR8-NEXT:    blr
10285;
10286; PWR9-LABEL: ult_25_v4i32:
10287; PWR9:       # %bb.0:
10288; PWR9-NEXT:    vspltisw 3, -16
10289; PWR9-NEXT:    vspltisw 4, 9
10290; PWR9-NEXT:    vpopcntw 2, 2
10291; PWR9-NEXT:    vsubuwm 3, 4, 3
10292; PWR9-NEXT:    vcmpgtuw 2, 3, 2
10293; PWR9-NEXT:    blr
10294  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10295  %3 = icmp ult <4 x i32> %2, <i32 25, i32 25, i32 25, i32 25>
10296  %4 = sext <4 x i1> %3 to <4 x i32>
10297  ret <4 x i32> %4
10298}
10299
10300define <4 x i32> @ugt_25_v4i32(<4 x i32> %0) {
10301; PWR5-LABEL: ugt_25_v4i32:
10302; PWR5:       # %bb.0:
10303; PWR5-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
10304; PWR5-NEXT:    vspltisw 4, 1
10305; PWR5-NEXT:    vxor 3, 3, 3
10306; PWR5-NEXT:    addi 3, 3, .LCPI88_0@toc@l
10307; PWR5-NEXT:    lvx 5, 0, 3
10308; PWR5-NEXT:    addis 3, 2, .LCPI88_1@toc@ha
10309; PWR5-NEXT:    addi 3, 3, .LCPI88_1@toc@l
10310; PWR5-NEXT:    vspltisw 0, 2
10311; PWR5-NEXT:    vsrw 4, 2, 4
10312; PWR5-NEXT:    vand 4, 4, 5
10313; PWR5-NEXT:    lvx 5, 0, 3
10314; PWR5-NEXT:    vsubuwm 2, 2, 4
10315; PWR5-NEXT:    vand 4, 2, 5
10316; PWR5-NEXT:    vsrw 2, 2, 0
10317; PWR5-NEXT:    vand 2, 2, 5
10318; PWR5-NEXT:    vspltisw 5, 4
10319; PWR5-NEXT:    vadduwm 2, 4, 2
10320; PWR5-NEXT:    vsrw 4, 2, 5
10321; PWR5-NEXT:    vspltisb 5, 15
10322; PWR5-NEXT:    vadduwm 2, 2, 4
10323; PWR5-NEXT:    vspltisb 4, 1
10324; PWR5-NEXT:    vand 2, 2, 5
10325; PWR5-NEXT:    vspltisw 5, -16
10326; PWR5-NEXT:    vrlw 0, 4, 5
10327; PWR5-NEXT:    vmulouh 4, 2, 4
10328; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
10329; PWR5-NEXT:    vspltisw 3, 12
10330; PWR5-NEXT:    vadduwm 3, 3, 3
10331; PWR5-NEXT:    vslw 2, 2, 5
10332; PWR5-NEXT:    vadduwm 2, 4, 2
10333; PWR5-NEXT:    vsrw 2, 2, 3
10334; PWR5-NEXT:    vspltisw 3, 9
10335; PWR5-NEXT:    vsubuwm 3, 3, 5
10336; PWR5-NEXT:    vcmpgtuw 2, 2, 3
10337; PWR5-NEXT:    blr
10338;
10339; PWR6-LABEL: ugt_25_v4i32:
10340; PWR6:       # %bb.0:
10341; PWR6-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
10342; PWR6-NEXT:    vspltisw 4, 1
10343; PWR6-NEXT:    vxor 3, 3, 3
10344; PWR6-NEXT:    addi 3, 3, .LCPI88_0@toc@l
10345; PWR6-NEXT:    lvx 5, 0, 3
10346; PWR6-NEXT:    addis 3, 2, .LCPI88_1@toc@ha
10347; PWR6-NEXT:    addi 3, 3, .LCPI88_1@toc@l
10348; PWR6-NEXT:    vspltisw 0, 2
10349; PWR6-NEXT:    vsrw 4, 2, 4
10350; PWR6-NEXT:    vand 4, 4, 5
10351; PWR6-NEXT:    lvx 5, 0, 3
10352; PWR6-NEXT:    vsubuwm 2, 2, 4
10353; PWR6-NEXT:    vand 4, 2, 5
10354; PWR6-NEXT:    vsrw 2, 2, 0
10355; PWR6-NEXT:    vand 2, 2, 5
10356; PWR6-NEXT:    vspltisw 5, 4
10357; PWR6-NEXT:    vadduwm 2, 4, 2
10358; PWR6-NEXT:    vsrw 4, 2, 5
10359; PWR6-NEXT:    vspltisb 5, 15
10360; PWR6-NEXT:    vadduwm 2, 2, 4
10361; PWR6-NEXT:    vspltisb 4, 1
10362; PWR6-NEXT:    vand 2, 2, 5
10363; PWR6-NEXT:    vspltisw 5, -16
10364; PWR6-NEXT:    vrlw 0, 4, 5
10365; PWR6-NEXT:    vmulouh 4, 2, 4
10366; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
10367; PWR6-NEXT:    vspltisw 3, 12
10368; PWR6-NEXT:    vadduwm 3, 3, 3
10369; PWR6-NEXT:    vslw 2, 2, 5
10370; PWR6-NEXT:    vadduwm 2, 4, 2
10371; PWR6-NEXT:    vsrw 2, 2, 3
10372; PWR6-NEXT:    vspltisw 3, 9
10373; PWR6-NEXT:    vsubuwm 3, 3, 5
10374; PWR6-NEXT:    vcmpgtuw 2, 2, 3
10375; PWR6-NEXT:    blr
10376;
10377; PWR7-LABEL: ugt_25_v4i32:
10378; PWR7:       # %bb.0:
10379; PWR7-NEXT:    vspltisw 3, 1
10380; PWR7-NEXT:    addis 3, 2, .LCPI88_0@toc@ha
10381; PWR7-NEXT:    addi 3, 3, .LCPI88_0@toc@l
10382; PWR7-NEXT:    vspltisw 4, 2
10383; PWR7-NEXT:    lxvw4x 0, 0, 3
10384; PWR7-NEXT:    addis 3, 2, .LCPI88_1@toc@ha
10385; PWR7-NEXT:    vspltisw 5, 4
10386; PWR7-NEXT:    addi 3, 3, .LCPI88_1@toc@l
10387; PWR7-NEXT:    vsrw 3, 2, 3
10388; PWR7-NEXT:    vspltisb 0, 15
10389; PWR7-NEXT:    vspltisb 1, 1
10390; PWR7-NEXT:    vspltisw 6, -16
10391; PWR7-NEXT:    vspltisw 7, 12
10392; PWR7-NEXT:    vspltisw 8, 9
10393; PWR7-NEXT:    xxland 35, 35, 0
10394; PWR7-NEXT:    lxvw4x 0, 0, 3
10395; PWR7-NEXT:    vsubuwm 2, 2, 3
10396; PWR7-NEXT:    vsrw 3, 2, 4
10397; PWR7-NEXT:    xxland 34, 34, 0
10398; PWR7-NEXT:    xxlxor 36, 36, 36
10399; PWR7-NEXT:    xxland 35, 35, 0
10400; PWR7-NEXT:    vadduwm 2, 2, 3
10401; PWR7-NEXT:    vsrw 3, 2, 5
10402; PWR7-NEXT:    vadduwm 2, 2, 3
10403; PWR7-NEXT:    vrlw 3, 1, 6
10404; PWR7-NEXT:    xxland 34, 34, 32
10405; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
10406; PWR7-NEXT:    vmulouh 2, 2, 1
10407; PWR7-NEXT:    vslw 3, 3, 6
10408; PWR7-NEXT:    vadduwm 2, 2, 3
10409; PWR7-NEXT:    vadduwm 3, 7, 7
10410; PWR7-NEXT:    vsrw 2, 2, 3
10411; PWR7-NEXT:    vsubuwm 3, 8, 6
10412; PWR7-NEXT:    vcmpgtuw 2, 2, 3
10413; PWR7-NEXT:    blr
10414;
10415; PWR8-LABEL: ugt_25_v4i32:
10416; PWR8:       # %bb.0:
10417; PWR8-NEXT:    vspltisw 3, -16
10418; PWR8-NEXT:    vspltisw 4, 9
10419; PWR8-NEXT:    vpopcntw 2, 2
10420; PWR8-NEXT:    vsubuwm 3, 4, 3
10421; PWR8-NEXT:    vcmpgtuw 2, 2, 3
10422; PWR8-NEXT:    blr
10423;
10424; PWR9-LABEL: ugt_25_v4i32:
10425; PWR9:       # %bb.0:
10426; PWR9-NEXT:    vspltisw 3, -16
10427; PWR9-NEXT:    vspltisw 4, 9
10428; PWR9-NEXT:    vpopcntw 2, 2
10429; PWR9-NEXT:    vsubuwm 3, 4, 3
10430; PWR9-NEXT:    vcmpgtuw 2, 2, 3
10431; PWR9-NEXT:    blr
10432  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10433  %3 = icmp ugt <4 x i32> %2, <i32 25, i32 25, i32 25, i32 25>
10434  %4 = sext <4 x i1> %3 to <4 x i32>
10435  ret <4 x i32> %4
10436}
10437
10438define <4 x i32> @ult_26_v4i32(<4 x i32> %0) {
10439; PWR5-LABEL: ult_26_v4i32:
10440; PWR5:       # %bb.0:
10441; PWR5-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
10442; PWR5-NEXT:    vspltisw 4, 1
10443; PWR5-NEXT:    vxor 3, 3, 3
10444; PWR5-NEXT:    addi 3, 3, .LCPI89_0@toc@l
10445; PWR5-NEXT:    lvx 5, 0, 3
10446; PWR5-NEXT:    addis 3, 2, .LCPI89_1@toc@ha
10447; PWR5-NEXT:    addi 3, 3, .LCPI89_1@toc@l
10448; PWR5-NEXT:    vspltisw 0, 2
10449; PWR5-NEXT:    vsrw 4, 2, 4
10450; PWR5-NEXT:    vand 4, 4, 5
10451; PWR5-NEXT:    lvx 5, 0, 3
10452; PWR5-NEXT:    vsubuwm 2, 2, 4
10453; PWR5-NEXT:    vand 4, 2, 5
10454; PWR5-NEXT:    vsrw 2, 2, 0
10455; PWR5-NEXT:    vand 2, 2, 5
10456; PWR5-NEXT:    vspltisw 5, 4
10457; PWR5-NEXT:    vadduwm 2, 4, 2
10458; PWR5-NEXT:    vsrw 4, 2, 5
10459; PWR5-NEXT:    vspltisb 5, 15
10460; PWR5-NEXT:    vadduwm 2, 2, 4
10461; PWR5-NEXT:    vspltisb 4, 1
10462; PWR5-NEXT:    vand 2, 2, 5
10463; PWR5-NEXT:    vspltisw 5, -16
10464; PWR5-NEXT:    vrlw 0, 4, 5
10465; PWR5-NEXT:    vmulouh 4, 2, 4
10466; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
10467; PWR5-NEXT:    vspltisw 3, 12
10468; PWR5-NEXT:    vadduwm 3, 3, 3
10469; PWR5-NEXT:    vslw 2, 2, 5
10470; PWR5-NEXT:    vadduwm 2, 4, 2
10471; PWR5-NEXT:    vsrw 2, 2, 3
10472; PWR5-NEXT:    vspltisw 3, 13
10473; PWR5-NEXT:    vadduwm 3, 3, 3
10474; PWR5-NEXT:    vcmpgtuw 2, 3, 2
10475; PWR5-NEXT:    blr
10476;
10477; PWR6-LABEL: ult_26_v4i32:
10478; PWR6:       # %bb.0:
10479; PWR6-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
10480; PWR6-NEXT:    vspltisw 4, 1
10481; PWR6-NEXT:    vxor 3, 3, 3
10482; PWR6-NEXT:    addi 3, 3, .LCPI89_0@toc@l
10483; PWR6-NEXT:    lvx 5, 0, 3
10484; PWR6-NEXT:    addis 3, 2, .LCPI89_1@toc@ha
10485; PWR6-NEXT:    addi 3, 3, .LCPI89_1@toc@l
10486; PWR6-NEXT:    vspltisw 0, 2
10487; PWR6-NEXT:    vsrw 4, 2, 4
10488; PWR6-NEXT:    vand 4, 4, 5
10489; PWR6-NEXT:    lvx 5, 0, 3
10490; PWR6-NEXT:    vsubuwm 2, 2, 4
10491; PWR6-NEXT:    vand 4, 2, 5
10492; PWR6-NEXT:    vsrw 2, 2, 0
10493; PWR6-NEXT:    vand 2, 2, 5
10494; PWR6-NEXT:    vspltisw 5, 4
10495; PWR6-NEXT:    vadduwm 2, 4, 2
10496; PWR6-NEXT:    vsrw 4, 2, 5
10497; PWR6-NEXT:    vspltisb 5, 15
10498; PWR6-NEXT:    vadduwm 2, 2, 4
10499; PWR6-NEXT:    vspltisb 4, 1
10500; PWR6-NEXT:    vand 2, 2, 5
10501; PWR6-NEXT:    vspltisw 5, -16
10502; PWR6-NEXT:    vrlw 0, 4, 5
10503; PWR6-NEXT:    vmulouh 4, 2, 4
10504; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
10505; PWR6-NEXT:    vspltisw 3, 12
10506; PWR6-NEXT:    vadduwm 3, 3, 3
10507; PWR6-NEXT:    vslw 2, 2, 5
10508; PWR6-NEXT:    vadduwm 2, 4, 2
10509; PWR6-NEXT:    vsrw 2, 2, 3
10510; PWR6-NEXT:    vspltisw 3, 13
10511; PWR6-NEXT:    vadduwm 3, 3, 3
10512; PWR6-NEXT:    vcmpgtuw 2, 3, 2
10513; PWR6-NEXT:    blr
10514;
10515; PWR7-LABEL: ult_26_v4i32:
10516; PWR7:       # %bb.0:
10517; PWR7-NEXT:    vspltisw 3, 1
10518; PWR7-NEXT:    addis 3, 2, .LCPI89_0@toc@ha
10519; PWR7-NEXT:    addi 3, 3, .LCPI89_0@toc@l
10520; PWR7-NEXT:    vspltisw 4, 2
10521; PWR7-NEXT:    lxvw4x 0, 0, 3
10522; PWR7-NEXT:    addis 3, 2, .LCPI89_1@toc@ha
10523; PWR7-NEXT:    vspltisw 5, 4
10524; PWR7-NEXT:    addi 3, 3, .LCPI89_1@toc@l
10525; PWR7-NEXT:    vsrw 3, 2, 3
10526; PWR7-NEXT:    vspltisb 0, 15
10527; PWR7-NEXT:    vspltisb 1, 1
10528; PWR7-NEXT:    vspltisw 6, -16
10529; PWR7-NEXT:    vspltisw 7, 12
10530; PWR7-NEXT:    vspltisw 8, 13
10531; PWR7-NEXT:    xxland 35, 35, 0
10532; PWR7-NEXT:    lxvw4x 0, 0, 3
10533; PWR7-NEXT:    vsubuwm 2, 2, 3
10534; PWR7-NEXT:    vsrw 3, 2, 4
10535; PWR7-NEXT:    xxland 34, 34, 0
10536; PWR7-NEXT:    xxlxor 36, 36, 36
10537; PWR7-NEXT:    xxland 35, 35, 0
10538; PWR7-NEXT:    vadduwm 2, 2, 3
10539; PWR7-NEXT:    vsrw 3, 2, 5
10540; PWR7-NEXT:    vadduwm 2, 2, 3
10541; PWR7-NEXT:    vrlw 3, 1, 6
10542; PWR7-NEXT:    xxland 34, 34, 32
10543; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
10544; PWR7-NEXT:    vmulouh 2, 2, 1
10545; PWR7-NEXT:    vslw 3, 3, 6
10546; PWR7-NEXT:    vadduwm 2, 2, 3
10547; PWR7-NEXT:    vadduwm 3, 7, 7
10548; PWR7-NEXT:    vsrw 2, 2, 3
10549; PWR7-NEXT:    vadduwm 3, 8, 8
10550; PWR7-NEXT:    vcmpgtuw 2, 3, 2
10551; PWR7-NEXT:    blr
10552;
10553; PWR8-LABEL: ult_26_v4i32:
10554; PWR8:       # %bb.0:
10555; PWR8-NEXT:    vspltisw 3, 13
10556; PWR8-NEXT:    vpopcntw 2, 2
10557; PWR8-NEXT:    vadduwm 3, 3, 3
10558; PWR8-NEXT:    vcmpgtuw 2, 3, 2
10559; PWR8-NEXT:    blr
10560;
10561; PWR9-LABEL: ult_26_v4i32:
10562; PWR9:       # %bb.0:
10563; PWR9-NEXT:    vspltisw 3, 13
10564; PWR9-NEXT:    vpopcntw 2, 2
10565; PWR9-NEXT:    vadduwm 3, 3, 3
10566; PWR9-NEXT:    vcmpgtuw 2, 3, 2
10567; PWR9-NEXT:    blr
10568  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10569  %3 = icmp ult <4 x i32> %2, <i32 26, i32 26, i32 26, i32 26>
10570  %4 = sext <4 x i1> %3 to <4 x i32>
10571  ret <4 x i32> %4
10572}
10573
10574define <4 x i32> @ugt_26_v4i32(<4 x i32> %0) {
10575; PWR5-LABEL: ugt_26_v4i32:
10576; PWR5:       # %bb.0:
10577; PWR5-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
10578; PWR5-NEXT:    vspltisw 4, 1
10579; PWR5-NEXT:    vxor 3, 3, 3
10580; PWR5-NEXT:    addi 3, 3, .LCPI90_0@toc@l
10581; PWR5-NEXT:    lvx 5, 0, 3
10582; PWR5-NEXT:    addis 3, 2, .LCPI90_1@toc@ha
10583; PWR5-NEXT:    addi 3, 3, .LCPI90_1@toc@l
10584; PWR5-NEXT:    vspltisw 0, 2
10585; PWR5-NEXT:    vsrw 4, 2, 4
10586; PWR5-NEXT:    vand 4, 4, 5
10587; PWR5-NEXT:    lvx 5, 0, 3
10588; PWR5-NEXT:    vsubuwm 2, 2, 4
10589; PWR5-NEXT:    vand 4, 2, 5
10590; PWR5-NEXT:    vsrw 2, 2, 0
10591; PWR5-NEXT:    vand 2, 2, 5
10592; PWR5-NEXT:    vspltisw 5, 4
10593; PWR5-NEXT:    vadduwm 2, 4, 2
10594; PWR5-NEXT:    vsrw 4, 2, 5
10595; PWR5-NEXT:    vspltisb 5, 15
10596; PWR5-NEXT:    vadduwm 2, 2, 4
10597; PWR5-NEXT:    vspltisb 4, 1
10598; PWR5-NEXT:    vand 2, 2, 5
10599; PWR5-NEXT:    vspltisw 5, -16
10600; PWR5-NEXT:    vrlw 0, 4, 5
10601; PWR5-NEXT:    vmulouh 4, 2, 4
10602; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
10603; PWR5-NEXT:    vspltisw 3, 12
10604; PWR5-NEXT:    vadduwm 3, 3, 3
10605; PWR5-NEXT:    vslw 2, 2, 5
10606; PWR5-NEXT:    vadduwm 2, 4, 2
10607; PWR5-NEXT:    vsrw 2, 2, 3
10608; PWR5-NEXT:    vspltisw 3, 13
10609; PWR5-NEXT:    vadduwm 3, 3, 3
10610; PWR5-NEXT:    vcmpgtuw 2, 2, 3
10611; PWR5-NEXT:    blr
10612;
10613; PWR6-LABEL: ugt_26_v4i32:
10614; PWR6:       # %bb.0:
10615; PWR6-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
10616; PWR6-NEXT:    vspltisw 4, 1
10617; PWR6-NEXT:    vxor 3, 3, 3
10618; PWR6-NEXT:    addi 3, 3, .LCPI90_0@toc@l
10619; PWR6-NEXT:    lvx 5, 0, 3
10620; PWR6-NEXT:    addis 3, 2, .LCPI90_1@toc@ha
10621; PWR6-NEXT:    addi 3, 3, .LCPI90_1@toc@l
10622; PWR6-NEXT:    vspltisw 0, 2
10623; PWR6-NEXT:    vsrw 4, 2, 4
10624; PWR6-NEXT:    vand 4, 4, 5
10625; PWR6-NEXT:    lvx 5, 0, 3
10626; PWR6-NEXT:    vsubuwm 2, 2, 4
10627; PWR6-NEXT:    vand 4, 2, 5
10628; PWR6-NEXT:    vsrw 2, 2, 0
10629; PWR6-NEXT:    vand 2, 2, 5
10630; PWR6-NEXT:    vspltisw 5, 4
10631; PWR6-NEXT:    vadduwm 2, 4, 2
10632; PWR6-NEXT:    vsrw 4, 2, 5
10633; PWR6-NEXT:    vspltisb 5, 15
10634; PWR6-NEXT:    vadduwm 2, 2, 4
10635; PWR6-NEXT:    vspltisb 4, 1
10636; PWR6-NEXT:    vand 2, 2, 5
10637; PWR6-NEXT:    vspltisw 5, -16
10638; PWR6-NEXT:    vrlw 0, 4, 5
10639; PWR6-NEXT:    vmulouh 4, 2, 4
10640; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
10641; PWR6-NEXT:    vspltisw 3, 12
10642; PWR6-NEXT:    vadduwm 3, 3, 3
10643; PWR6-NEXT:    vslw 2, 2, 5
10644; PWR6-NEXT:    vadduwm 2, 4, 2
10645; PWR6-NEXT:    vsrw 2, 2, 3
10646; PWR6-NEXT:    vspltisw 3, 13
10647; PWR6-NEXT:    vadduwm 3, 3, 3
10648; PWR6-NEXT:    vcmpgtuw 2, 2, 3
10649; PWR6-NEXT:    blr
10650;
10651; PWR7-LABEL: ugt_26_v4i32:
10652; PWR7:       # %bb.0:
10653; PWR7-NEXT:    vspltisw 3, 1
10654; PWR7-NEXT:    addis 3, 2, .LCPI90_0@toc@ha
10655; PWR7-NEXT:    addi 3, 3, .LCPI90_0@toc@l
10656; PWR7-NEXT:    vspltisw 4, 2
10657; PWR7-NEXT:    lxvw4x 0, 0, 3
10658; PWR7-NEXT:    addis 3, 2, .LCPI90_1@toc@ha
10659; PWR7-NEXT:    vspltisw 5, 4
10660; PWR7-NEXT:    addi 3, 3, .LCPI90_1@toc@l
10661; PWR7-NEXT:    vsrw 3, 2, 3
10662; PWR7-NEXT:    vspltisb 0, 15
10663; PWR7-NEXT:    vspltisb 1, 1
10664; PWR7-NEXT:    vspltisw 6, -16
10665; PWR7-NEXT:    vspltisw 7, 12
10666; PWR7-NEXT:    vspltisw 8, 13
10667; PWR7-NEXT:    xxland 35, 35, 0
10668; PWR7-NEXT:    lxvw4x 0, 0, 3
10669; PWR7-NEXT:    vsubuwm 2, 2, 3
10670; PWR7-NEXT:    vsrw 3, 2, 4
10671; PWR7-NEXT:    xxland 34, 34, 0
10672; PWR7-NEXT:    xxlxor 36, 36, 36
10673; PWR7-NEXT:    xxland 35, 35, 0
10674; PWR7-NEXT:    vadduwm 2, 2, 3
10675; PWR7-NEXT:    vsrw 3, 2, 5
10676; PWR7-NEXT:    vadduwm 2, 2, 3
10677; PWR7-NEXT:    vrlw 3, 1, 6
10678; PWR7-NEXT:    xxland 34, 34, 32
10679; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
10680; PWR7-NEXT:    vmulouh 2, 2, 1
10681; PWR7-NEXT:    vslw 3, 3, 6
10682; PWR7-NEXT:    vadduwm 2, 2, 3
10683; PWR7-NEXT:    vadduwm 3, 7, 7
10684; PWR7-NEXT:    vsrw 2, 2, 3
10685; PWR7-NEXT:    vadduwm 3, 8, 8
10686; PWR7-NEXT:    vcmpgtuw 2, 2, 3
10687; PWR7-NEXT:    blr
10688;
10689; PWR8-LABEL: ugt_26_v4i32:
10690; PWR8:       # %bb.0:
10691; PWR8-NEXT:    vspltisw 3, 13
10692; PWR8-NEXT:    vpopcntw 2, 2
10693; PWR8-NEXT:    vadduwm 3, 3, 3
10694; PWR8-NEXT:    vcmpgtuw 2, 2, 3
10695; PWR8-NEXT:    blr
10696;
10697; PWR9-LABEL: ugt_26_v4i32:
10698; PWR9:       # %bb.0:
10699; PWR9-NEXT:    vspltisw 3, 13
10700; PWR9-NEXT:    vpopcntw 2, 2
10701; PWR9-NEXT:    vadduwm 3, 3, 3
10702; PWR9-NEXT:    vcmpgtuw 2, 2, 3
10703; PWR9-NEXT:    blr
10704  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10705  %3 = icmp ugt <4 x i32> %2, <i32 26, i32 26, i32 26, i32 26>
10706  %4 = sext <4 x i1> %3 to <4 x i32>
10707  ret <4 x i32> %4
10708}
10709
10710define <4 x i32> @ult_27_v4i32(<4 x i32> %0) {
10711; PWR5-LABEL: ult_27_v4i32:
10712; PWR5:       # %bb.0:
10713; PWR5-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
10714; PWR5-NEXT:    vspltisw 4, 1
10715; PWR5-NEXT:    vxor 3, 3, 3
10716; PWR5-NEXT:    addi 3, 3, .LCPI91_0@toc@l
10717; PWR5-NEXT:    lvx 5, 0, 3
10718; PWR5-NEXT:    addis 3, 2, .LCPI91_1@toc@ha
10719; PWR5-NEXT:    addi 3, 3, .LCPI91_1@toc@l
10720; PWR5-NEXT:    vspltisw 0, 2
10721; PWR5-NEXT:    vsrw 4, 2, 4
10722; PWR5-NEXT:    vand 4, 4, 5
10723; PWR5-NEXT:    lvx 5, 0, 3
10724; PWR5-NEXT:    vsubuwm 2, 2, 4
10725; PWR5-NEXT:    vand 4, 2, 5
10726; PWR5-NEXT:    vsrw 2, 2, 0
10727; PWR5-NEXT:    vand 2, 2, 5
10728; PWR5-NEXT:    vspltisw 5, 4
10729; PWR5-NEXT:    vadduwm 2, 4, 2
10730; PWR5-NEXT:    vsrw 4, 2, 5
10731; PWR5-NEXT:    vspltisb 5, 15
10732; PWR5-NEXT:    vadduwm 2, 2, 4
10733; PWR5-NEXT:    vspltisb 4, 1
10734; PWR5-NEXT:    vand 2, 2, 5
10735; PWR5-NEXT:    vspltisw 5, -16
10736; PWR5-NEXT:    vrlw 0, 4, 5
10737; PWR5-NEXT:    vmulouh 4, 2, 4
10738; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
10739; PWR5-NEXT:    vspltisw 3, 12
10740; PWR5-NEXT:    vadduwm 3, 3, 3
10741; PWR5-NEXT:    vslw 2, 2, 5
10742; PWR5-NEXT:    vadduwm 2, 4, 2
10743; PWR5-NEXT:    vsrw 2, 2, 3
10744; PWR5-NEXT:    vspltisw 3, 11
10745; PWR5-NEXT:    vsubuwm 3, 3, 5
10746; PWR5-NEXT:    vcmpgtuw 2, 3, 2
10747; PWR5-NEXT:    blr
10748;
10749; PWR6-LABEL: ult_27_v4i32:
10750; PWR6:       # %bb.0:
10751; PWR6-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
10752; PWR6-NEXT:    vspltisw 4, 1
10753; PWR6-NEXT:    vxor 3, 3, 3
10754; PWR6-NEXT:    addi 3, 3, .LCPI91_0@toc@l
10755; PWR6-NEXT:    lvx 5, 0, 3
10756; PWR6-NEXT:    addis 3, 2, .LCPI91_1@toc@ha
10757; PWR6-NEXT:    addi 3, 3, .LCPI91_1@toc@l
10758; PWR6-NEXT:    vspltisw 0, 2
10759; PWR6-NEXT:    vsrw 4, 2, 4
10760; PWR6-NEXT:    vand 4, 4, 5
10761; PWR6-NEXT:    lvx 5, 0, 3
10762; PWR6-NEXT:    vsubuwm 2, 2, 4
10763; PWR6-NEXT:    vand 4, 2, 5
10764; PWR6-NEXT:    vsrw 2, 2, 0
10765; PWR6-NEXT:    vand 2, 2, 5
10766; PWR6-NEXT:    vspltisw 5, 4
10767; PWR6-NEXT:    vadduwm 2, 4, 2
10768; PWR6-NEXT:    vsrw 4, 2, 5
10769; PWR6-NEXT:    vspltisb 5, 15
10770; PWR6-NEXT:    vadduwm 2, 2, 4
10771; PWR6-NEXT:    vspltisb 4, 1
10772; PWR6-NEXT:    vand 2, 2, 5
10773; PWR6-NEXT:    vspltisw 5, -16
10774; PWR6-NEXT:    vrlw 0, 4, 5
10775; PWR6-NEXT:    vmulouh 4, 2, 4
10776; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
10777; PWR6-NEXT:    vspltisw 3, 12
10778; PWR6-NEXT:    vadduwm 3, 3, 3
10779; PWR6-NEXT:    vslw 2, 2, 5
10780; PWR6-NEXT:    vadduwm 2, 4, 2
10781; PWR6-NEXT:    vsrw 2, 2, 3
10782; PWR6-NEXT:    vspltisw 3, 11
10783; PWR6-NEXT:    vsubuwm 3, 3, 5
10784; PWR6-NEXT:    vcmpgtuw 2, 3, 2
10785; PWR6-NEXT:    blr
10786;
10787; PWR7-LABEL: ult_27_v4i32:
10788; PWR7:       # %bb.0:
10789; PWR7-NEXT:    vspltisw 3, 1
10790; PWR7-NEXT:    addis 3, 2, .LCPI91_0@toc@ha
10791; PWR7-NEXT:    addi 3, 3, .LCPI91_0@toc@l
10792; PWR7-NEXT:    vspltisw 4, 2
10793; PWR7-NEXT:    lxvw4x 0, 0, 3
10794; PWR7-NEXT:    addis 3, 2, .LCPI91_1@toc@ha
10795; PWR7-NEXT:    vspltisw 5, 4
10796; PWR7-NEXT:    addi 3, 3, .LCPI91_1@toc@l
10797; PWR7-NEXT:    vsrw 3, 2, 3
10798; PWR7-NEXT:    vspltisb 0, 15
10799; PWR7-NEXT:    vspltisb 1, 1
10800; PWR7-NEXT:    vspltisw 6, -16
10801; PWR7-NEXT:    vspltisw 7, 12
10802; PWR7-NEXT:    vspltisw 8, 11
10803; PWR7-NEXT:    xxland 35, 35, 0
10804; PWR7-NEXT:    lxvw4x 0, 0, 3
10805; PWR7-NEXT:    vsubuwm 2, 2, 3
10806; PWR7-NEXT:    vsrw 3, 2, 4
10807; PWR7-NEXT:    xxland 34, 34, 0
10808; PWR7-NEXT:    xxlxor 36, 36, 36
10809; PWR7-NEXT:    xxland 35, 35, 0
10810; PWR7-NEXT:    vadduwm 2, 2, 3
10811; PWR7-NEXT:    vsrw 3, 2, 5
10812; PWR7-NEXT:    vadduwm 2, 2, 3
10813; PWR7-NEXT:    vrlw 3, 1, 6
10814; PWR7-NEXT:    xxland 34, 34, 32
10815; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
10816; PWR7-NEXT:    vmulouh 2, 2, 1
10817; PWR7-NEXT:    vslw 3, 3, 6
10818; PWR7-NEXT:    vadduwm 2, 2, 3
10819; PWR7-NEXT:    vadduwm 3, 7, 7
10820; PWR7-NEXT:    vsrw 2, 2, 3
10821; PWR7-NEXT:    vsubuwm 3, 8, 6
10822; PWR7-NEXT:    vcmpgtuw 2, 3, 2
10823; PWR7-NEXT:    blr
10824;
10825; PWR8-LABEL: ult_27_v4i32:
10826; PWR8:       # %bb.0:
10827; PWR8-NEXT:    vspltisw 3, -16
10828; PWR8-NEXT:    vspltisw 4, 11
10829; PWR8-NEXT:    vpopcntw 2, 2
10830; PWR8-NEXT:    vsubuwm 3, 4, 3
10831; PWR8-NEXT:    vcmpgtuw 2, 3, 2
10832; PWR8-NEXT:    blr
10833;
10834; PWR9-LABEL: ult_27_v4i32:
10835; PWR9:       # %bb.0:
10836; PWR9-NEXT:    vspltisw 3, -16
10837; PWR9-NEXT:    vspltisw 4, 11
10838; PWR9-NEXT:    vpopcntw 2, 2
10839; PWR9-NEXT:    vsubuwm 3, 4, 3
10840; PWR9-NEXT:    vcmpgtuw 2, 3, 2
10841; PWR9-NEXT:    blr
10842  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10843  %3 = icmp ult <4 x i32> %2, <i32 27, i32 27, i32 27, i32 27>
10844  %4 = sext <4 x i1> %3 to <4 x i32>
10845  ret <4 x i32> %4
10846}
10847
10848define <4 x i32> @ugt_27_v4i32(<4 x i32> %0) {
10849; PWR5-LABEL: ugt_27_v4i32:
10850; PWR5:       # %bb.0:
10851; PWR5-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
10852; PWR5-NEXT:    vspltisw 4, 1
10853; PWR5-NEXT:    vxor 3, 3, 3
10854; PWR5-NEXT:    addi 3, 3, .LCPI92_0@toc@l
10855; PWR5-NEXT:    lvx 5, 0, 3
10856; PWR5-NEXT:    addis 3, 2, .LCPI92_1@toc@ha
10857; PWR5-NEXT:    addi 3, 3, .LCPI92_1@toc@l
10858; PWR5-NEXT:    vspltisw 0, 2
10859; PWR5-NEXT:    vsrw 4, 2, 4
10860; PWR5-NEXT:    vand 4, 4, 5
10861; PWR5-NEXT:    lvx 5, 0, 3
10862; PWR5-NEXT:    vsubuwm 2, 2, 4
10863; PWR5-NEXT:    vand 4, 2, 5
10864; PWR5-NEXT:    vsrw 2, 2, 0
10865; PWR5-NEXT:    vand 2, 2, 5
10866; PWR5-NEXT:    vspltisw 5, 4
10867; PWR5-NEXT:    vadduwm 2, 4, 2
10868; PWR5-NEXT:    vsrw 4, 2, 5
10869; PWR5-NEXT:    vspltisb 5, 15
10870; PWR5-NEXT:    vadduwm 2, 2, 4
10871; PWR5-NEXT:    vspltisb 4, 1
10872; PWR5-NEXT:    vand 2, 2, 5
10873; PWR5-NEXT:    vspltisw 5, -16
10874; PWR5-NEXT:    vrlw 0, 4, 5
10875; PWR5-NEXT:    vmulouh 4, 2, 4
10876; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
10877; PWR5-NEXT:    vspltisw 3, 12
10878; PWR5-NEXT:    vadduwm 3, 3, 3
10879; PWR5-NEXT:    vslw 2, 2, 5
10880; PWR5-NEXT:    vadduwm 2, 4, 2
10881; PWR5-NEXT:    vsrw 2, 2, 3
10882; PWR5-NEXT:    vspltisw 3, 11
10883; PWR5-NEXT:    vsubuwm 3, 3, 5
10884; PWR5-NEXT:    vcmpgtuw 2, 2, 3
10885; PWR5-NEXT:    blr
10886;
10887; PWR6-LABEL: ugt_27_v4i32:
10888; PWR6:       # %bb.0:
10889; PWR6-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
10890; PWR6-NEXT:    vspltisw 4, 1
10891; PWR6-NEXT:    vxor 3, 3, 3
10892; PWR6-NEXT:    addi 3, 3, .LCPI92_0@toc@l
10893; PWR6-NEXT:    lvx 5, 0, 3
10894; PWR6-NEXT:    addis 3, 2, .LCPI92_1@toc@ha
10895; PWR6-NEXT:    addi 3, 3, .LCPI92_1@toc@l
10896; PWR6-NEXT:    vspltisw 0, 2
10897; PWR6-NEXT:    vsrw 4, 2, 4
10898; PWR6-NEXT:    vand 4, 4, 5
10899; PWR6-NEXT:    lvx 5, 0, 3
10900; PWR6-NEXT:    vsubuwm 2, 2, 4
10901; PWR6-NEXT:    vand 4, 2, 5
10902; PWR6-NEXT:    vsrw 2, 2, 0
10903; PWR6-NEXT:    vand 2, 2, 5
10904; PWR6-NEXT:    vspltisw 5, 4
10905; PWR6-NEXT:    vadduwm 2, 4, 2
10906; PWR6-NEXT:    vsrw 4, 2, 5
10907; PWR6-NEXT:    vspltisb 5, 15
10908; PWR6-NEXT:    vadduwm 2, 2, 4
10909; PWR6-NEXT:    vspltisb 4, 1
10910; PWR6-NEXT:    vand 2, 2, 5
10911; PWR6-NEXT:    vspltisw 5, -16
10912; PWR6-NEXT:    vrlw 0, 4, 5
10913; PWR6-NEXT:    vmulouh 4, 2, 4
10914; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
10915; PWR6-NEXT:    vspltisw 3, 12
10916; PWR6-NEXT:    vadduwm 3, 3, 3
10917; PWR6-NEXT:    vslw 2, 2, 5
10918; PWR6-NEXT:    vadduwm 2, 4, 2
10919; PWR6-NEXT:    vsrw 2, 2, 3
10920; PWR6-NEXT:    vspltisw 3, 11
10921; PWR6-NEXT:    vsubuwm 3, 3, 5
10922; PWR6-NEXT:    vcmpgtuw 2, 2, 3
10923; PWR6-NEXT:    blr
10924;
10925; PWR7-LABEL: ugt_27_v4i32:
10926; PWR7:       # %bb.0:
10927; PWR7-NEXT:    vspltisw 3, 1
10928; PWR7-NEXT:    addis 3, 2, .LCPI92_0@toc@ha
10929; PWR7-NEXT:    addi 3, 3, .LCPI92_0@toc@l
10930; PWR7-NEXT:    vspltisw 4, 2
10931; PWR7-NEXT:    lxvw4x 0, 0, 3
10932; PWR7-NEXT:    addis 3, 2, .LCPI92_1@toc@ha
10933; PWR7-NEXT:    vspltisw 5, 4
10934; PWR7-NEXT:    addi 3, 3, .LCPI92_1@toc@l
10935; PWR7-NEXT:    vsrw 3, 2, 3
10936; PWR7-NEXT:    vspltisb 0, 15
10937; PWR7-NEXT:    vspltisb 1, 1
10938; PWR7-NEXT:    vspltisw 6, -16
10939; PWR7-NEXT:    vspltisw 7, 12
10940; PWR7-NEXT:    vspltisw 8, 11
10941; PWR7-NEXT:    xxland 35, 35, 0
10942; PWR7-NEXT:    lxvw4x 0, 0, 3
10943; PWR7-NEXT:    vsubuwm 2, 2, 3
10944; PWR7-NEXT:    vsrw 3, 2, 4
10945; PWR7-NEXT:    xxland 34, 34, 0
10946; PWR7-NEXT:    xxlxor 36, 36, 36
10947; PWR7-NEXT:    xxland 35, 35, 0
10948; PWR7-NEXT:    vadduwm 2, 2, 3
10949; PWR7-NEXT:    vsrw 3, 2, 5
10950; PWR7-NEXT:    vadduwm 2, 2, 3
10951; PWR7-NEXT:    vrlw 3, 1, 6
10952; PWR7-NEXT:    xxland 34, 34, 32
10953; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
10954; PWR7-NEXT:    vmulouh 2, 2, 1
10955; PWR7-NEXT:    vslw 3, 3, 6
10956; PWR7-NEXT:    vadduwm 2, 2, 3
10957; PWR7-NEXT:    vadduwm 3, 7, 7
10958; PWR7-NEXT:    vsrw 2, 2, 3
10959; PWR7-NEXT:    vsubuwm 3, 8, 6
10960; PWR7-NEXT:    vcmpgtuw 2, 2, 3
10961; PWR7-NEXT:    blr
10962;
10963; PWR8-LABEL: ugt_27_v4i32:
10964; PWR8:       # %bb.0:
10965; PWR8-NEXT:    vspltisw 3, -16
10966; PWR8-NEXT:    vspltisw 4, 11
10967; PWR8-NEXT:    vpopcntw 2, 2
10968; PWR8-NEXT:    vsubuwm 3, 4, 3
10969; PWR8-NEXT:    vcmpgtuw 2, 2, 3
10970; PWR8-NEXT:    blr
10971;
10972; PWR9-LABEL: ugt_27_v4i32:
10973; PWR9:       # %bb.0:
10974; PWR9-NEXT:    vspltisw 3, -16
10975; PWR9-NEXT:    vspltisw 4, 11
10976; PWR9-NEXT:    vpopcntw 2, 2
10977; PWR9-NEXT:    vsubuwm 3, 4, 3
10978; PWR9-NEXT:    vcmpgtuw 2, 2, 3
10979; PWR9-NEXT:    blr
10980  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
10981  %3 = icmp ugt <4 x i32> %2, <i32 27, i32 27, i32 27, i32 27>
10982  %4 = sext <4 x i1> %3 to <4 x i32>
10983  ret <4 x i32> %4
10984}
10985
10986define <4 x i32> @ult_28_v4i32(<4 x i32> %0) {
10987; PWR5-LABEL: ult_28_v4i32:
10988; PWR5:       # %bb.0:
10989; PWR5-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
10990; PWR5-NEXT:    vspltisw 4, 1
10991; PWR5-NEXT:    vxor 3, 3, 3
10992; PWR5-NEXT:    addi 3, 3, .LCPI93_0@toc@l
10993; PWR5-NEXT:    lvx 5, 0, 3
10994; PWR5-NEXT:    addis 3, 2, .LCPI93_1@toc@ha
10995; PWR5-NEXT:    addi 3, 3, .LCPI93_1@toc@l
10996; PWR5-NEXT:    vspltisw 0, 2
10997; PWR5-NEXT:    vsrw 4, 2, 4
10998; PWR5-NEXT:    vand 4, 4, 5
10999; PWR5-NEXT:    lvx 5, 0, 3
11000; PWR5-NEXT:    vsubuwm 2, 2, 4
11001; PWR5-NEXT:    vand 4, 2, 5
11002; PWR5-NEXT:    vsrw 2, 2, 0
11003; PWR5-NEXT:    vand 2, 2, 5
11004; PWR5-NEXT:    vspltisw 5, 4
11005; PWR5-NEXT:    vadduwm 2, 4, 2
11006; PWR5-NEXT:    vsrw 4, 2, 5
11007; PWR5-NEXT:    vspltisb 5, 15
11008; PWR5-NEXT:    vadduwm 2, 2, 4
11009; PWR5-NEXT:    vspltisb 4, 1
11010; PWR5-NEXT:    vand 2, 2, 5
11011; PWR5-NEXT:    vspltisw 5, -16
11012; PWR5-NEXT:    vrlw 0, 4, 5
11013; PWR5-NEXT:    vmulouh 4, 2, 4
11014; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
11015; PWR5-NEXT:    vspltisw 3, 12
11016; PWR5-NEXT:    vadduwm 3, 3, 3
11017; PWR5-NEXT:    vslw 2, 2, 5
11018; PWR5-NEXT:    vadduwm 2, 4, 2
11019; PWR5-NEXT:    vsrw 2, 2, 3
11020; PWR5-NEXT:    vspltisw 3, 14
11021; PWR5-NEXT:    vadduwm 3, 3, 3
11022; PWR5-NEXT:    vcmpgtuw 2, 3, 2
11023; PWR5-NEXT:    blr
11024;
11025; PWR6-LABEL: ult_28_v4i32:
11026; PWR6:       # %bb.0:
11027; PWR6-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
11028; PWR6-NEXT:    vspltisw 4, 1
11029; PWR6-NEXT:    vxor 3, 3, 3
11030; PWR6-NEXT:    addi 3, 3, .LCPI93_0@toc@l
11031; PWR6-NEXT:    lvx 5, 0, 3
11032; PWR6-NEXT:    addis 3, 2, .LCPI93_1@toc@ha
11033; PWR6-NEXT:    addi 3, 3, .LCPI93_1@toc@l
11034; PWR6-NEXT:    vspltisw 0, 2
11035; PWR6-NEXT:    vsrw 4, 2, 4
11036; PWR6-NEXT:    vand 4, 4, 5
11037; PWR6-NEXT:    lvx 5, 0, 3
11038; PWR6-NEXT:    vsubuwm 2, 2, 4
11039; PWR6-NEXT:    vand 4, 2, 5
11040; PWR6-NEXT:    vsrw 2, 2, 0
11041; PWR6-NEXT:    vand 2, 2, 5
11042; PWR6-NEXT:    vspltisw 5, 4
11043; PWR6-NEXT:    vadduwm 2, 4, 2
11044; PWR6-NEXT:    vsrw 4, 2, 5
11045; PWR6-NEXT:    vspltisb 5, 15
11046; PWR6-NEXT:    vadduwm 2, 2, 4
11047; PWR6-NEXT:    vspltisb 4, 1
11048; PWR6-NEXT:    vand 2, 2, 5
11049; PWR6-NEXT:    vspltisw 5, -16
11050; PWR6-NEXT:    vrlw 0, 4, 5
11051; PWR6-NEXT:    vmulouh 4, 2, 4
11052; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
11053; PWR6-NEXT:    vspltisw 3, 12
11054; PWR6-NEXT:    vadduwm 3, 3, 3
11055; PWR6-NEXT:    vslw 2, 2, 5
11056; PWR6-NEXT:    vadduwm 2, 4, 2
11057; PWR6-NEXT:    vsrw 2, 2, 3
11058; PWR6-NEXT:    vspltisw 3, 14
11059; PWR6-NEXT:    vadduwm 3, 3, 3
11060; PWR6-NEXT:    vcmpgtuw 2, 3, 2
11061; PWR6-NEXT:    blr
11062;
11063; PWR7-LABEL: ult_28_v4i32:
11064; PWR7:       # %bb.0:
11065; PWR7-NEXT:    vspltisw 3, 1
11066; PWR7-NEXT:    addis 3, 2, .LCPI93_0@toc@ha
11067; PWR7-NEXT:    addi 3, 3, .LCPI93_0@toc@l
11068; PWR7-NEXT:    vspltisw 4, 2
11069; PWR7-NEXT:    lxvw4x 0, 0, 3
11070; PWR7-NEXT:    addis 3, 2, .LCPI93_1@toc@ha
11071; PWR7-NEXT:    vspltisw 5, 4
11072; PWR7-NEXT:    addi 3, 3, .LCPI93_1@toc@l
11073; PWR7-NEXT:    vsrw 3, 2, 3
11074; PWR7-NEXT:    vspltisb 0, 15
11075; PWR7-NEXT:    vspltisb 1, 1
11076; PWR7-NEXT:    vspltisw 6, -16
11077; PWR7-NEXT:    vspltisw 7, 12
11078; PWR7-NEXT:    vspltisw 8, 14
11079; PWR7-NEXT:    xxland 35, 35, 0
11080; PWR7-NEXT:    lxvw4x 0, 0, 3
11081; PWR7-NEXT:    vsubuwm 2, 2, 3
11082; PWR7-NEXT:    vsrw 3, 2, 4
11083; PWR7-NEXT:    xxland 34, 34, 0
11084; PWR7-NEXT:    xxlxor 36, 36, 36
11085; PWR7-NEXT:    xxland 35, 35, 0
11086; PWR7-NEXT:    vadduwm 2, 2, 3
11087; PWR7-NEXT:    vsrw 3, 2, 5
11088; PWR7-NEXT:    vadduwm 2, 2, 3
11089; PWR7-NEXT:    vrlw 3, 1, 6
11090; PWR7-NEXT:    xxland 34, 34, 32
11091; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
11092; PWR7-NEXT:    vmulouh 2, 2, 1
11093; PWR7-NEXT:    vslw 3, 3, 6
11094; PWR7-NEXT:    vadduwm 2, 2, 3
11095; PWR7-NEXT:    vadduwm 3, 7, 7
11096; PWR7-NEXT:    vsrw 2, 2, 3
11097; PWR7-NEXT:    vadduwm 3, 8, 8
11098; PWR7-NEXT:    vcmpgtuw 2, 3, 2
11099; PWR7-NEXT:    blr
11100;
11101; PWR8-LABEL: ult_28_v4i32:
11102; PWR8:       # %bb.0:
11103; PWR8-NEXT:    vspltisw 3, 14
11104; PWR8-NEXT:    vpopcntw 2, 2
11105; PWR8-NEXT:    vadduwm 3, 3, 3
11106; PWR8-NEXT:    vcmpgtuw 2, 3, 2
11107; PWR8-NEXT:    blr
11108;
11109; PWR9-LABEL: ult_28_v4i32:
11110; PWR9:       # %bb.0:
11111; PWR9-NEXT:    vspltisw 3, 14
11112; PWR9-NEXT:    vpopcntw 2, 2
11113; PWR9-NEXT:    vadduwm 3, 3, 3
11114; PWR9-NEXT:    vcmpgtuw 2, 3, 2
11115; PWR9-NEXT:    blr
11116  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11117  %3 = icmp ult <4 x i32> %2, <i32 28, i32 28, i32 28, i32 28>
11118  %4 = sext <4 x i1> %3 to <4 x i32>
11119  ret <4 x i32> %4
11120}
11121
11122define <4 x i32> @ugt_28_v4i32(<4 x i32> %0) {
11123; PWR5-LABEL: ugt_28_v4i32:
11124; PWR5:       # %bb.0:
11125; PWR5-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
11126; PWR5-NEXT:    vspltisw 4, 1
11127; PWR5-NEXT:    vxor 3, 3, 3
11128; PWR5-NEXT:    addi 3, 3, .LCPI94_0@toc@l
11129; PWR5-NEXT:    lvx 5, 0, 3
11130; PWR5-NEXT:    addis 3, 2, .LCPI94_1@toc@ha
11131; PWR5-NEXT:    addi 3, 3, .LCPI94_1@toc@l
11132; PWR5-NEXT:    vspltisw 0, 2
11133; PWR5-NEXT:    vsrw 4, 2, 4
11134; PWR5-NEXT:    vand 4, 4, 5
11135; PWR5-NEXT:    lvx 5, 0, 3
11136; PWR5-NEXT:    vsubuwm 2, 2, 4
11137; PWR5-NEXT:    vand 4, 2, 5
11138; PWR5-NEXT:    vsrw 2, 2, 0
11139; PWR5-NEXT:    vand 2, 2, 5
11140; PWR5-NEXT:    vspltisw 5, 4
11141; PWR5-NEXT:    vadduwm 2, 4, 2
11142; PWR5-NEXT:    vsrw 4, 2, 5
11143; PWR5-NEXT:    vspltisb 5, 15
11144; PWR5-NEXT:    vadduwm 2, 2, 4
11145; PWR5-NEXT:    vspltisb 4, 1
11146; PWR5-NEXT:    vand 2, 2, 5
11147; PWR5-NEXT:    vspltisw 5, -16
11148; PWR5-NEXT:    vrlw 0, 4, 5
11149; PWR5-NEXT:    vmulouh 4, 2, 4
11150; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
11151; PWR5-NEXT:    vspltisw 3, 12
11152; PWR5-NEXT:    vadduwm 3, 3, 3
11153; PWR5-NEXT:    vslw 2, 2, 5
11154; PWR5-NEXT:    vadduwm 2, 4, 2
11155; PWR5-NEXT:    vsrw 2, 2, 3
11156; PWR5-NEXT:    vspltisw 3, 14
11157; PWR5-NEXT:    vadduwm 3, 3, 3
11158; PWR5-NEXT:    vcmpgtuw 2, 2, 3
11159; PWR5-NEXT:    blr
11160;
11161; PWR6-LABEL: ugt_28_v4i32:
11162; PWR6:       # %bb.0:
11163; PWR6-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
11164; PWR6-NEXT:    vspltisw 4, 1
11165; PWR6-NEXT:    vxor 3, 3, 3
11166; PWR6-NEXT:    addi 3, 3, .LCPI94_0@toc@l
11167; PWR6-NEXT:    lvx 5, 0, 3
11168; PWR6-NEXT:    addis 3, 2, .LCPI94_1@toc@ha
11169; PWR6-NEXT:    addi 3, 3, .LCPI94_1@toc@l
11170; PWR6-NEXT:    vspltisw 0, 2
11171; PWR6-NEXT:    vsrw 4, 2, 4
11172; PWR6-NEXT:    vand 4, 4, 5
11173; PWR6-NEXT:    lvx 5, 0, 3
11174; PWR6-NEXT:    vsubuwm 2, 2, 4
11175; PWR6-NEXT:    vand 4, 2, 5
11176; PWR6-NEXT:    vsrw 2, 2, 0
11177; PWR6-NEXT:    vand 2, 2, 5
11178; PWR6-NEXT:    vspltisw 5, 4
11179; PWR6-NEXT:    vadduwm 2, 4, 2
11180; PWR6-NEXT:    vsrw 4, 2, 5
11181; PWR6-NEXT:    vspltisb 5, 15
11182; PWR6-NEXT:    vadduwm 2, 2, 4
11183; PWR6-NEXT:    vspltisb 4, 1
11184; PWR6-NEXT:    vand 2, 2, 5
11185; PWR6-NEXT:    vspltisw 5, -16
11186; PWR6-NEXT:    vrlw 0, 4, 5
11187; PWR6-NEXT:    vmulouh 4, 2, 4
11188; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
11189; PWR6-NEXT:    vspltisw 3, 12
11190; PWR6-NEXT:    vadduwm 3, 3, 3
11191; PWR6-NEXT:    vslw 2, 2, 5
11192; PWR6-NEXT:    vadduwm 2, 4, 2
11193; PWR6-NEXT:    vsrw 2, 2, 3
11194; PWR6-NEXT:    vspltisw 3, 14
11195; PWR6-NEXT:    vadduwm 3, 3, 3
11196; PWR6-NEXT:    vcmpgtuw 2, 2, 3
11197; PWR6-NEXT:    blr
11198;
11199; PWR7-LABEL: ugt_28_v4i32:
11200; PWR7:       # %bb.0:
11201; PWR7-NEXT:    vspltisw 3, 1
11202; PWR7-NEXT:    addis 3, 2, .LCPI94_0@toc@ha
11203; PWR7-NEXT:    addi 3, 3, .LCPI94_0@toc@l
11204; PWR7-NEXT:    vspltisw 4, 2
11205; PWR7-NEXT:    lxvw4x 0, 0, 3
11206; PWR7-NEXT:    addis 3, 2, .LCPI94_1@toc@ha
11207; PWR7-NEXT:    vspltisw 5, 4
11208; PWR7-NEXT:    addi 3, 3, .LCPI94_1@toc@l
11209; PWR7-NEXT:    vsrw 3, 2, 3
11210; PWR7-NEXT:    vspltisb 0, 15
11211; PWR7-NEXT:    vspltisb 1, 1
11212; PWR7-NEXT:    vspltisw 6, -16
11213; PWR7-NEXT:    vspltisw 7, 12
11214; PWR7-NEXT:    vspltisw 8, 14
11215; PWR7-NEXT:    xxland 35, 35, 0
11216; PWR7-NEXT:    lxvw4x 0, 0, 3
11217; PWR7-NEXT:    vsubuwm 2, 2, 3
11218; PWR7-NEXT:    vsrw 3, 2, 4
11219; PWR7-NEXT:    xxland 34, 34, 0
11220; PWR7-NEXT:    xxlxor 36, 36, 36
11221; PWR7-NEXT:    xxland 35, 35, 0
11222; PWR7-NEXT:    vadduwm 2, 2, 3
11223; PWR7-NEXT:    vsrw 3, 2, 5
11224; PWR7-NEXT:    vadduwm 2, 2, 3
11225; PWR7-NEXT:    vrlw 3, 1, 6
11226; PWR7-NEXT:    xxland 34, 34, 32
11227; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
11228; PWR7-NEXT:    vmulouh 2, 2, 1
11229; PWR7-NEXT:    vslw 3, 3, 6
11230; PWR7-NEXT:    vadduwm 2, 2, 3
11231; PWR7-NEXT:    vadduwm 3, 7, 7
11232; PWR7-NEXT:    vsrw 2, 2, 3
11233; PWR7-NEXT:    vadduwm 3, 8, 8
11234; PWR7-NEXT:    vcmpgtuw 2, 2, 3
11235; PWR7-NEXT:    blr
11236;
11237; PWR8-LABEL: ugt_28_v4i32:
11238; PWR8:       # %bb.0:
11239; PWR8-NEXT:    vspltisw 3, 14
11240; PWR8-NEXT:    vpopcntw 2, 2
11241; PWR8-NEXT:    vadduwm 3, 3, 3
11242; PWR8-NEXT:    vcmpgtuw 2, 2, 3
11243; PWR8-NEXT:    blr
11244;
11245; PWR9-LABEL: ugt_28_v4i32:
11246; PWR9:       # %bb.0:
11247; PWR9-NEXT:    vspltisw 3, 14
11248; PWR9-NEXT:    vpopcntw 2, 2
11249; PWR9-NEXT:    vadduwm 3, 3, 3
11250; PWR9-NEXT:    vcmpgtuw 2, 2, 3
11251; PWR9-NEXT:    blr
11252  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11253  %3 = icmp ugt <4 x i32> %2, <i32 28, i32 28, i32 28, i32 28>
11254  %4 = sext <4 x i1> %3 to <4 x i32>
11255  ret <4 x i32> %4
11256}
11257
11258define <4 x i32> @ult_29_v4i32(<4 x i32> %0) {
11259; PWR5-LABEL: ult_29_v4i32:
11260; PWR5:       # %bb.0:
11261; PWR5-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
11262; PWR5-NEXT:    vspltisw 4, 1
11263; PWR5-NEXT:    vxor 3, 3, 3
11264; PWR5-NEXT:    addi 3, 3, .LCPI95_0@toc@l
11265; PWR5-NEXT:    lvx 5, 0, 3
11266; PWR5-NEXT:    addis 3, 2, .LCPI95_1@toc@ha
11267; PWR5-NEXT:    addi 3, 3, .LCPI95_1@toc@l
11268; PWR5-NEXT:    vspltisw 0, 2
11269; PWR5-NEXT:    vsrw 4, 2, 4
11270; PWR5-NEXT:    vand 4, 4, 5
11271; PWR5-NEXT:    lvx 5, 0, 3
11272; PWR5-NEXT:    vsubuwm 2, 2, 4
11273; PWR5-NEXT:    vand 4, 2, 5
11274; PWR5-NEXT:    vsrw 2, 2, 0
11275; PWR5-NEXT:    vand 2, 2, 5
11276; PWR5-NEXT:    vspltisw 5, 4
11277; PWR5-NEXT:    vadduwm 2, 4, 2
11278; PWR5-NEXT:    vsrw 4, 2, 5
11279; PWR5-NEXT:    vspltisb 5, 15
11280; PWR5-NEXT:    vadduwm 2, 2, 4
11281; PWR5-NEXT:    vspltisb 4, 1
11282; PWR5-NEXT:    vand 2, 2, 5
11283; PWR5-NEXT:    vspltisw 5, -16
11284; PWR5-NEXT:    vrlw 0, 4, 5
11285; PWR5-NEXT:    vmulouh 4, 2, 4
11286; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
11287; PWR5-NEXT:    vspltisw 3, 12
11288; PWR5-NEXT:    vadduwm 3, 3, 3
11289; PWR5-NEXT:    vslw 2, 2, 5
11290; PWR5-NEXT:    vadduwm 2, 4, 2
11291; PWR5-NEXT:    vsrw 2, 2, 3
11292; PWR5-NEXT:    vspltisw 3, 13
11293; PWR5-NEXT:    vsubuwm 3, 3, 5
11294; PWR5-NEXT:    vcmpgtuw 2, 3, 2
11295; PWR5-NEXT:    blr
11296;
11297; PWR6-LABEL: ult_29_v4i32:
11298; PWR6:       # %bb.0:
11299; PWR6-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
11300; PWR6-NEXT:    vspltisw 4, 1
11301; PWR6-NEXT:    vxor 3, 3, 3
11302; PWR6-NEXT:    addi 3, 3, .LCPI95_0@toc@l
11303; PWR6-NEXT:    lvx 5, 0, 3
11304; PWR6-NEXT:    addis 3, 2, .LCPI95_1@toc@ha
11305; PWR6-NEXT:    addi 3, 3, .LCPI95_1@toc@l
11306; PWR6-NEXT:    vspltisw 0, 2
11307; PWR6-NEXT:    vsrw 4, 2, 4
11308; PWR6-NEXT:    vand 4, 4, 5
11309; PWR6-NEXT:    lvx 5, 0, 3
11310; PWR6-NEXT:    vsubuwm 2, 2, 4
11311; PWR6-NEXT:    vand 4, 2, 5
11312; PWR6-NEXT:    vsrw 2, 2, 0
11313; PWR6-NEXT:    vand 2, 2, 5
11314; PWR6-NEXT:    vspltisw 5, 4
11315; PWR6-NEXT:    vadduwm 2, 4, 2
11316; PWR6-NEXT:    vsrw 4, 2, 5
11317; PWR6-NEXT:    vspltisb 5, 15
11318; PWR6-NEXT:    vadduwm 2, 2, 4
11319; PWR6-NEXT:    vspltisb 4, 1
11320; PWR6-NEXT:    vand 2, 2, 5
11321; PWR6-NEXT:    vspltisw 5, -16
11322; PWR6-NEXT:    vrlw 0, 4, 5
11323; PWR6-NEXT:    vmulouh 4, 2, 4
11324; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
11325; PWR6-NEXT:    vspltisw 3, 12
11326; PWR6-NEXT:    vadduwm 3, 3, 3
11327; PWR6-NEXT:    vslw 2, 2, 5
11328; PWR6-NEXT:    vadduwm 2, 4, 2
11329; PWR6-NEXT:    vsrw 2, 2, 3
11330; PWR6-NEXT:    vspltisw 3, 13
11331; PWR6-NEXT:    vsubuwm 3, 3, 5
11332; PWR6-NEXT:    vcmpgtuw 2, 3, 2
11333; PWR6-NEXT:    blr
11334;
11335; PWR7-LABEL: ult_29_v4i32:
11336; PWR7:       # %bb.0:
11337; PWR7-NEXT:    vspltisw 3, 1
11338; PWR7-NEXT:    addis 3, 2, .LCPI95_0@toc@ha
11339; PWR7-NEXT:    addi 3, 3, .LCPI95_0@toc@l
11340; PWR7-NEXT:    vspltisw 4, 2
11341; PWR7-NEXT:    lxvw4x 0, 0, 3
11342; PWR7-NEXT:    addis 3, 2, .LCPI95_1@toc@ha
11343; PWR7-NEXT:    vspltisw 5, 4
11344; PWR7-NEXT:    addi 3, 3, .LCPI95_1@toc@l
11345; PWR7-NEXT:    vsrw 3, 2, 3
11346; PWR7-NEXT:    vspltisb 0, 15
11347; PWR7-NEXT:    vspltisb 1, 1
11348; PWR7-NEXT:    vspltisw 6, -16
11349; PWR7-NEXT:    vspltisw 7, 12
11350; PWR7-NEXT:    vspltisw 8, 13
11351; PWR7-NEXT:    xxland 35, 35, 0
11352; PWR7-NEXT:    lxvw4x 0, 0, 3
11353; PWR7-NEXT:    vsubuwm 2, 2, 3
11354; PWR7-NEXT:    vsrw 3, 2, 4
11355; PWR7-NEXT:    xxland 34, 34, 0
11356; PWR7-NEXT:    xxlxor 36, 36, 36
11357; PWR7-NEXT:    xxland 35, 35, 0
11358; PWR7-NEXT:    vadduwm 2, 2, 3
11359; PWR7-NEXT:    vsrw 3, 2, 5
11360; PWR7-NEXT:    vadduwm 2, 2, 3
11361; PWR7-NEXT:    vrlw 3, 1, 6
11362; PWR7-NEXT:    xxland 34, 34, 32
11363; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
11364; PWR7-NEXT:    vmulouh 2, 2, 1
11365; PWR7-NEXT:    vslw 3, 3, 6
11366; PWR7-NEXT:    vadduwm 2, 2, 3
11367; PWR7-NEXT:    vadduwm 3, 7, 7
11368; PWR7-NEXT:    vsrw 2, 2, 3
11369; PWR7-NEXT:    vsubuwm 3, 8, 6
11370; PWR7-NEXT:    vcmpgtuw 2, 3, 2
11371; PWR7-NEXT:    blr
11372;
11373; PWR8-LABEL: ult_29_v4i32:
11374; PWR8:       # %bb.0:
11375; PWR8-NEXT:    vspltisw 3, -16
11376; PWR8-NEXT:    vspltisw 4, 13
11377; PWR8-NEXT:    vpopcntw 2, 2
11378; PWR8-NEXT:    vsubuwm 3, 4, 3
11379; PWR8-NEXT:    vcmpgtuw 2, 3, 2
11380; PWR8-NEXT:    blr
11381;
11382; PWR9-LABEL: ult_29_v4i32:
11383; PWR9:       # %bb.0:
11384; PWR9-NEXT:    vspltisw 3, -16
11385; PWR9-NEXT:    vspltisw 4, 13
11386; PWR9-NEXT:    vpopcntw 2, 2
11387; PWR9-NEXT:    vsubuwm 3, 4, 3
11388; PWR9-NEXT:    vcmpgtuw 2, 3, 2
11389; PWR9-NEXT:    blr
11390  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11391  %3 = icmp ult <4 x i32> %2, <i32 29, i32 29, i32 29, i32 29>
11392  %4 = sext <4 x i1> %3 to <4 x i32>
11393  ret <4 x i32> %4
11394}
11395
11396define <4 x i32> @ugt_29_v4i32(<4 x i32> %0) {
11397; PWR5-LABEL: ugt_29_v4i32:
11398; PWR5:       # %bb.0:
11399; PWR5-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
11400; PWR5-NEXT:    vspltisw 4, 1
11401; PWR5-NEXT:    vxor 3, 3, 3
11402; PWR5-NEXT:    addi 3, 3, .LCPI96_0@toc@l
11403; PWR5-NEXT:    lvx 5, 0, 3
11404; PWR5-NEXT:    addis 3, 2, .LCPI96_1@toc@ha
11405; PWR5-NEXT:    addi 3, 3, .LCPI96_1@toc@l
11406; PWR5-NEXT:    vspltisw 0, 2
11407; PWR5-NEXT:    vsrw 4, 2, 4
11408; PWR5-NEXT:    vand 4, 4, 5
11409; PWR5-NEXT:    lvx 5, 0, 3
11410; PWR5-NEXT:    vsubuwm 2, 2, 4
11411; PWR5-NEXT:    vand 4, 2, 5
11412; PWR5-NEXT:    vsrw 2, 2, 0
11413; PWR5-NEXT:    vand 2, 2, 5
11414; PWR5-NEXT:    vspltisw 5, 4
11415; PWR5-NEXT:    vadduwm 2, 4, 2
11416; PWR5-NEXT:    vsrw 4, 2, 5
11417; PWR5-NEXT:    vspltisb 5, 15
11418; PWR5-NEXT:    vadduwm 2, 2, 4
11419; PWR5-NEXT:    vspltisb 4, 1
11420; PWR5-NEXT:    vand 2, 2, 5
11421; PWR5-NEXT:    vspltisw 5, -16
11422; PWR5-NEXT:    vrlw 0, 4, 5
11423; PWR5-NEXT:    vmulouh 4, 2, 4
11424; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
11425; PWR5-NEXT:    vspltisw 3, 12
11426; PWR5-NEXT:    vadduwm 3, 3, 3
11427; PWR5-NEXT:    vslw 2, 2, 5
11428; PWR5-NEXT:    vadduwm 2, 4, 2
11429; PWR5-NEXT:    vsrw 2, 2, 3
11430; PWR5-NEXT:    vspltisw 3, 13
11431; PWR5-NEXT:    vsubuwm 3, 3, 5
11432; PWR5-NEXT:    vcmpgtuw 2, 2, 3
11433; PWR5-NEXT:    blr
11434;
11435; PWR6-LABEL: ugt_29_v4i32:
11436; PWR6:       # %bb.0:
11437; PWR6-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
11438; PWR6-NEXT:    vspltisw 4, 1
11439; PWR6-NEXT:    vxor 3, 3, 3
11440; PWR6-NEXT:    addi 3, 3, .LCPI96_0@toc@l
11441; PWR6-NEXT:    lvx 5, 0, 3
11442; PWR6-NEXT:    addis 3, 2, .LCPI96_1@toc@ha
11443; PWR6-NEXT:    addi 3, 3, .LCPI96_1@toc@l
11444; PWR6-NEXT:    vspltisw 0, 2
11445; PWR6-NEXT:    vsrw 4, 2, 4
11446; PWR6-NEXT:    vand 4, 4, 5
11447; PWR6-NEXT:    lvx 5, 0, 3
11448; PWR6-NEXT:    vsubuwm 2, 2, 4
11449; PWR6-NEXT:    vand 4, 2, 5
11450; PWR6-NEXT:    vsrw 2, 2, 0
11451; PWR6-NEXT:    vand 2, 2, 5
11452; PWR6-NEXT:    vspltisw 5, 4
11453; PWR6-NEXT:    vadduwm 2, 4, 2
11454; PWR6-NEXT:    vsrw 4, 2, 5
11455; PWR6-NEXT:    vspltisb 5, 15
11456; PWR6-NEXT:    vadduwm 2, 2, 4
11457; PWR6-NEXT:    vspltisb 4, 1
11458; PWR6-NEXT:    vand 2, 2, 5
11459; PWR6-NEXT:    vspltisw 5, -16
11460; PWR6-NEXT:    vrlw 0, 4, 5
11461; PWR6-NEXT:    vmulouh 4, 2, 4
11462; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
11463; PWR6-NEXT:    vspltisw 3, 12
11464; PWR6-NEXT:    vadduwm 3, 3, 3
11465; PWR6-NEXT:    vslw 2, 2, 5
11466; PWR6-NEXT:    vadduwm 2, 4, 2
11467; PWR6-NEXT:    vsrw 2, 2, 3
11468; PWR6-NEXT:    vspltisw 3, 13
11469; PWR6-NEXT:    vsubuwm 3, 3, 5
11470; PWR6-NEXT:    vcmpgtuw 2, 2, 3
11471; PWR6-NEXT:    blr
11472;
11473; PWR7-LABEL: ugt_29_v4i32:
11474; PWR7:       # %bb.0:
11475; PWR7-NEXT:    vspltisw 3, 1
11476; PWR7-NEXT:    addis 3, 2, .LCPI96_0@toc@ha
11477; PWR7-NEXT:    addi 3, 3, .LCPI96_0@toc@l
11478; PWR7-NEXT:    vspltisw 4, 2
11479; PWR7-NEXT:    lxvw4x 0, 0, 3
11480; PWR7-NEXT:    addis 3, 2, .LCPI96_1@toc@ha
11481; PWR7-NEXT:    vspltisw 5, 4
11482; PWR7-NEXT:    addi 3, 3, .LCPI96_1@toc@l
11483; PWR7-NEXT:    vsrw 3, 2, 3
11484; PWR7-NEXT:    vspltisb 0, 15
11485; PWR7-NEXT:    vspltisb 1, 1
11486; PWR7-NEXT:    vspltisw 6, -16
11487; PWR7-NEXT:    vspltisw 7, 12
11488; PWR7-NEXT:    vspltisw 8, 13
11489; PWR7-NEXT:    xxland 35, 35, 0
11490; PWR7-NEXT:    lxvw4x 0, 0, 3
11491; PWR7-NEXT:    vsubuwm 2, 2, 3
11492; PWR7-NEXT:    vsrw 3, 2, 4
11493; PWR7-NEXT:    xxland 34, 34, 0
11494; PWR7-NEXT:    xxlxor 36, 36, 36
11495; PWR7-NEXT:    xxland 35, 35, 0
11496; PWR7-NEXT:    vadduwm 2, 2, 3
11497; PWR7-NEXT:    vsrw 3, 2, 5
11498; PWR7-NEXT:    vadduwm 2, 2, 3
11499; PWR7-NEXT:    vrlw 3, 1, 6
11500; PWR7-NEXT:    xxland 34, 34, 32
11501; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
11502; PWR7-NEXT:    vmulouh 2, 2, 1
11503; PWR7-NEXT:    vslw 3, 3, 6
11504; PWR7-NEXT:    vadduwm 2, 2, 3
11505; PWR7-NEXT:    vadduwm 3, 7, 7
11506; PWR7-NEXT:    vsrw 2, 2, 3
11507; PWR7-NEXT:    vsubuwm 3, 8, 6
11508; PWR7-NEXT:    vcmpgtuw 2, 2, 3
11509; PWR7-NEXT:    blr
11510;
11511; PWR8-LABEL: ugt_29_v4i32:
11512; PWR8:       # %bb.0:
11513; PWR8-NEXT:    vspltisw 3, -16
11514; PWR8-NEXT:    vspltisw 4, 13
11515; PWR8-NEXT:    vpopcntw 2, 2
11516; PWR8-NEXT:    vsubuwm 3, 4, 3
11517; PWR8-NEXT:    vcmpgtuw 2, 2, 3
11518; PWR8-NEXT:    blr
11519;
11520; PWR9-LABEL: ugt_29_v4i32:
11521; PWR9:       # %bb.0:
11522; PWR9-NEXT:    vspltisw 3, -16
11523; PWR9-NEXT:    vspltisw 4, 13
11524; PWR9-NEXT:    vpopcntw 2, 2
11525; PWR9-NEXT:    vsubuwm 3, 4, 3
11526; PWR9-NEXT:    vcmpgtuw 2, 2, 3
11527; PWR9-NEXT:    blr
11528  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11529  %3 = icmp ugt <4 x i32> %2, <i32 29, i32 29, i32 29, i32 29>
11530  %4 = sext <4 x i1> %3 to <4 x i32>
11531  ret <4 x i32> %4
11532}
11533
11534define <4 x i32> @ult_30_v4i32(<4 x i32> %0) {
11535; PWR5-LABEL: ult_30_v4i32:
11536; PWR5:       # %bb.0:
11537; PWR5-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
11538; PWR5-NEXT:    vspltisw 4, 1
11539; PWR5-NEXT:    vxor 3, 3, 3
11540; PWR5-NEXT:    addi 3, 3, .LCPI97_0@toc@l
11541; PWR5-NEXT:    lvx 5, 0, 3
11542; PWR5-NEXT:    addis 3, 2, .LCPI97_1@toc@ha
11543; PWR5-NEXT:    addi 3, 3, .LCPI97_1@toc@l
11544; PWR5-NEXT:    vspltisw 0, 2
11545; PWR5-NEXT:    vsrw 4, 2, 4
11546; PWR5-NEXT:    vand 4, 4, 5
11547; PWR5-NEXT:    lvx 5, 0, 3
11548; PWR5-NEXT:    vsubuwm 2, 2, 4
11549; PWR5-NEXT:    vand 4, 2, 5
11550; PWR5-NEXT:    vsrw 2, 2, 0
11551; PWR5-NEXT:    vand 2, 2, 5
11552; PWR5-NEXT:    vspltisw 5, 4
11553; PWR5-NEXT:    vadduwm 2, 4, 2
11554; PWR5-NEXT:    vsrw 4, 2, 5
11555; PWR5-NEXT:    vspltisb 5, 15
11556; PWR5-NEXT:    vadduwm 2, 2, 4
11557; PWR5-NEXT:    vspltisb 4, 1
11558; PWR5-NEXT:    vand 2, 2, 5
11559; PWR5-NEXT:    vspltisw 5, -16
11560; PWR5-NEXT:    vrlw 0, 4, 5
11561; PWR5-NEXT:    vmulouh 4, 2, 4
11562; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
11563; PWR5-NEXT:    vspltisw 3, 12
11564; PWR5-NEXT:    vadduwm 3, 3, 3
11565; PWR5-NEXT:    vslw 2, 2, 5
11566; PWR5-NEXT:    vadduwm 2, 4, 2
11567; PWR5-NEXT:    vsrw 2, 2, 3
11568; PWR5-NEXT:    vspltisw 3, 15
11569; PWR5-NEXT:    vadduwm 3, 3, 3
11570; PWR5-NEXT:    vcmpgtuw 2, 3, 2
11571; PWR5-NEXT:    blr
11572;
11573; PWR6-LABEL: ult_30_v4i32:
11574; PWR6:       # %bb.0:
11575; PWR6-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
11576; PWR6-NEXT:    vspltisw 4, 1
11577; PWR6-NEXT:    vxor 3, 3, 3
11578; PWR6-NEXT:    addi 3, 3, .LCPI97_0@toc@l
11579; PWR6-NEXT:    lvx 5, 0, 3
11580; PWR6-NEXT:    addis 3, 2, .LCPI97_1@toc@ha
11581; PWR6-NEXT:    addi 3, 3, .LCPI97_1@toc@l
11582; PWR6-NEXT:    vspltisw 0, 2
11583; PWR6-NEXT:    vsrw 4, 2, 4
11584; PWR6-NEXT:    vand 4, 4, 5
11585; PWR6-NEXT:    lvx 5, 0, 3
11586; PWR6-NEXT:    vsubuwm 2, 2, 4
11587; PWR6-NEXT:    vand 4, 2, 5
11588; PWR6-NEXT:    vsrw 2, 2, 0
11589; PWR6-NEXT:    vand 2, 2, 5
11590; PWR6-NEXT:    vspltisw 5, 4
11591; PWR6-NEXT:    vadduwm 2, 4, 2
11592; PWR6-NEXT:    vsrw 4, 2, 5
11593; PWR6-NEXT:    vspltisb 5, 15
11594; PWR6-NEXT:    vadduwm 2, 2, 4
11595; PWR6-NEXT:    vspltisb 4, 1
11596; PWR6-NEXT:    vand 2, 2, 5
11597; PWR6-NEXT:    vspltisw 5, -16
11598; PWR6-NEXT:    vrlw 0, 4, 5
11599; PWR6-NEXT:    vmulouh 4, 2, 4
11600; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
11601; PWR6-NEXT:    vspltisw 3, 12
11602; PWR6-NEXT:    vadduwm 3, 3, 3
11603; PWR6-NEXT:    vslw 2, 2, 5
11604; PWR6-NEXT:    vadduwm 2, 4, 2
11605; PWR6-NEXT:    vsrw 2, 2, 3
11606; PWR6-NEXT:    vspltisw 3, 15
11607; PWR6-NEXT:    vadduwm 3, 3, 3
11608; PWR6-NEXT:    vcmpgtuw 2, 3, 2
11609; PWR6-NEXT:    blr
11610;
11611; PWR7-LABEL: ult_30_v4i32:
11612; PWR7:       # %bb.0:
11613; PWR7-NEXT:    vspltisw 3, 1
11614; PWR7-NEXT:    addis 3, 2, .LCPI97_0@toc@ha
11615; PWR7-NEXT:    addi 3, 3, .LCPI97_0@toc@l
11616; PWR7-NEXT:    vspltisw 4, 2
11617; PWR7-NEXT:    lxvw4x 0, 0, 3
11618; PWR7-NEXT:    addis 3, 2, .LCPI97_1@toc@ha
11619; PWR7-NEXT:    vspltisw 5, 4
11620; PWR7-NEXT:    addi 3, 3, .LCPI97_1@toc@l
11621; PWR7-NEXT:    vsrw 3, 2, 3
11622; PWR7-NEXT:    vspltisb 0, 15
11623; PWR7-NEXT:    vspltisb 1, 1
11624; PWR7-NEXT:    vspltisw 6, -16
11625; PWR7-NEXT:    vspltisw 7, 12
11626; PWR7-NEXT:    vspltisw 8, 15
11627; PWR7-NEXT:    xxland 35, 35, 0
11628; PWR7-NEXT:    lxvw4x 0, 0, 3
11629; PWR7-NEXT:    vsubuwm 2, 2, 3
11630; PWR7-NEXT:    vsrw 3, 2, 4
11631; PWR7-NEXT:    xxland 34, 34, 0
11632; PWR7-NEXT:    xxlxor 36, 36, 36
11633; PWR7-NEXT:    xxland 35, 35, 0
11634; PWR7-NEXT:    vadduwm 2, 2, 3
11635; PWR7-NEXT:    vsrw 3, 2, 5
11636; PWR7-NEXT:    vadduwm 2, 2, 3
11637; PWR7-NEXT:    vrlw 3, 1, 6
11638; PWR7-NEXT:    xxland 34, 34, 32
11639; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
11640; PWR7-NEXT:    vmulouh 2, 2, 1
11641; PWR7-NEXT:    vslw 3, 3, 6
11642; PWR7-NEXT:    vadduwm 2, 2, 3
11643; PWR7-NEXT:    vadduwm 3, 7, 7
11644; PWR7-NEXT:    vsrw 2, 2, 3
11645; PWR7-NEXT:    vadduwm 3, 8, 8
11646; PWR7-NEXT:    vcmpgtuw 2, 3, 2
11647; PWR7-NEXT:    blr
11648;
11649; PWR8-LABEL: ult_30_v4i32:
11650; PWR8:       # %bb.0:
11651; PWR8-NEXT:    vspltisw 3, 15
11652; PWR8-NEXT:    vpopcntw 2, 2
11653; PWR8-NEXT:    vadduwm 3, 3, 3
11654; PWR8-NEXT:    vcmpgtuw 2, 3, 2
11655; PWR8-NEXT:    blr
11656;
11657; PWR9-LABEL: ult_30_v4i32:
11658; PWR9:       # %bb.0:
11659; PWR9-NEXT:    vspltisw 3, 15
11660; PWR9-NEXT:    vpopcntw 2, 2
11661; PWR9-NEXT:    vadduwm 3, 3, 3
11662; PWR9-NEXT:    vcmpgtuw 2, 3, 2
11663; PWR9-NEXT:    blr
11664  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11665  %3 = icmp ult <4 x i32> %2, <i32 30, i32 30, i32 30, i32 30>
11666  %4 = sext <4 x i1> %3 to <4 x i32>
11667  ret <4 x i32> %4
11668}
11669
11670define <4 x i32> @ugt_30_v4i32(<4 x i32> %0) {
11671; PWR5-LABEL: ugt_30_v4i32:
11672; PWR5:       # %bb.0:
11673; PWR5-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
11674; PWR5-NEXT:    vspltisw 4, 1
11675; PWR5-NEXT:    vxor 3, 3, 3
11676; PWR5-NEXT:    addi 3, 3, .LCPI98_0@toc@l
11677; PWR5-NEXT:    lvx 5, 0, 3
11678; PWR5-NEXT:    addis 3, 2, .LCPI98_1@toc@ha
11679; PWR5-NEXT:    addi 3, 3, .LCPI98_1@toc@l
11680; PWR5-NEXT:    vspltisw 0, 2
11681; PWR5-NEXT:    vsrw 4, 2, 4
11682; PWR5-NEXT:    vand 4, 4, 5
11683; PWR5-NEXT:    lvx 5, 0, 3
11684; PWR5-NEXT:    vsubuwm 2, 2, 4
11685; PWR5-NEXT:    vand 4, 2, 5
11686; PWR5-NEXT:    vsrw 2, 2, 0
11687; PWR5-NEXT:    vand 2, 2, 5
11688; PWR5-NEXT:    vspltisw 5, 4
11689; PWR5-NEXT:    vadduwm 2, 4, 2
11690; PWR5-NEXT:    vsrw 4, 2, 5
11691; PWR5-NEXT:    vspltisb 5, 15
11692; PWR5-NEXT:    vadduwm 2, 2, 4
11693; PWR5-NEXT:    vspltisb 4, 1
11694; PWR5-NEXT:    vand 2, 2, 5
11695; PWR5-NEXT:    vspltisw 5, -16
11696; PWR5-NEXT:    vrlw 0, 4, 5
11697; PWR5-NEXT:    vmulouh 4, 2, 4
11698; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
11699; PWR5-NEXT:    vspltisw 3, 12
11700; PWR5-NEXT:    vadduwm 3, 3, 3
11701; PWR5-NEXT:    vslw 2, 2, 5
11702; PWR5-NEXT:    vadduwm 2, 4, 2
11703; PWR5-NEXT:    vsrw 2, 2, 3
11704; PWR5-NEXT:    vspltisw 3, 15
11705; PWR5-NEXT:    vadduwm 3, 3, 3
11706; PWR5-NEXT:    vcmpgtuw 2, 2, 3
11707; PWR5-NEXT:    blr
11708;
11709; PWR6-LABEL: ugt_30_v4i32:
11710; PWR6:       # %bb.0:
11711; PWR6-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
11712; PWR6-NEXT:    vspltisw 4, 1
11713; PWR6-NEXT:    vxor 3, 3, 3
11714; PWR6-NEXT:    addi 3, 3, .LCPI98_0@toc@l
11715; PWR6-NEXT:    lvx 5, 0, 3
11716; PWR6-NEXT:    addis 3, 2, .LCPI98_1@toc@ha
11717; PWR6-NEXT:    addi 3, 3, .LCPI98_1@toc@l
11718; PWR6-NEXT:    vspltisw 0, 2
11719; PWR6-NEXT:    vsrw 4, 2, 4
11720; PWR6-NEXT:    vand 4, 4, 5
11721; PWR6-NEXT:    lvx 5, 0, 3
11722; PWR6-NEXT:    vsubuwm 2, 2, 4
11723; PWR6-NEXT:    vand 4, 2, 5
11724; PWR6-NEXT:    vsrw 2, 2, 0
11725; PWR6-NEXT:    vand 2, 2, 5
11726; PWR6-NEXT:    vspltisw 5, 4
11727; PWR6-NEXT:    vadduwm 2, 4, 2
11728; PWR6-NEXT:    vsrw 4, 2, 5
11729; PWR6-NEXT:    vspltisb 5, 15
11730; PWR6-NEXT:    vadduwm 2, 2, 4
11731; PWR6-NEXT:    vspltisb 4, 1
11732; PWR6-NEXT:    vand 2, 2, 5
11733; PWR6-NEXT:    vspltisw 5, -16
11734; PWR6-NEXT:    vrlw 0, 4, 5
11735; PWR6-NEXT:    vmulouh 4, 2, 4
11736; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
11737; PWR6-NEXT:    vspltisw 3, 12
11738; PWR6-NEXT:    vadduwm 3, 3, 3
11739; PWR6-NEXT:    vslw 2, 2, 5
11740; PWR6-NEXT:    vadduwm 2, 4, 2
11741; PWR6-NEXT:    vsrw 2, 2, 3
11742; PWR6-NEXT:    vspltisw 3, 15
11743; PWR6-NEXT:    vadduwm 3, 3, 3
11744; PWR6-NEXT:    vcmpgtuw 2, 2, 3
11745; PWR6-NEXT:    blr
11746;
11747; PWR7-LABEL: ugt_30_v4i32:
11748; PWR7:       # %bb.0:
11749; PWR7-NEXT:    vspltisw 3, 1
11750; PWR7-NEXT:    addis 3, 2, .LCPI98_0@toc@ha
11751; PWR7-NEXT:    addi 3, 3, .LCPI98_0@toc@l
11752; PWR7-NEXT:    vspltisw 4, 2
11753; PWR7-NEXT:    lxvw4x 0, 0, 3
11754; PWR7-NEXT:    addis 3, 2, .LCPI98_1@toc@ha
11755; PWR7-NEXT:    vspltisw 5, 4
11756; PWR7-NEXT:    addi 3, 3, .LCPI98_1@toc@l
11757; PWR7-NEXT:    vsrw 3, 2, 3
11758; PWR7-NEXT:    vspltisb 0, 15
11759; PWR7-NEXT:    vspltisb 1, 1
11760; PWR7-NEXT:    vspltisw 6, -16
11761; PWR7-NEXT:    vspltisw 7, 12
11762; PWR7-NEXT:    vspltisw 8, 15
11763; PWR7-NEXT:    xxland 35, 35, 0
11764; PWR7-NEXT:    lxvw4x 0, 0, 3
11765; PWR7-NEXT:    vsubuwm 2, 2, 3
11766; PWR7-NEXT:    vsrw 3, 2, 4
11767; PWR7-NEXT:    xxland 34, 34, 0
11768; PWR7-NEXT:    xxlxor 36, 36, 36
11769; PWR7-NEXT:    xxland 35, 35, 0
11770; PWR7-NEXT:    vadduwm 2, 2, 3
11771; PWR7-NEXT:    vsrw 3, 2, 5
11772; PWR7-NEXT:    vadduwm 2, 2, 3
11773; PWR7-NEXT:    vrlw 3, 1, 6
11774; PWR7-NEXT:    xxland 34, 34, 32
11775; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
11776; PWR7-NEXT:    vmulouh 2, 2, 1
11777; PWR7-NEXT:    vslw 3, 3, 6
11778; PWR7-NEXT:    vadduwm 2, 2, 3
11779; PWR7-NEXT:    vadduwm 3, 7, 7
11780; PWR7-NEXT:    vsrw 2, 2, 3
11781; PWR7-NEXT:    vadduwm 3, 8, 8
11782; PWR7-NEXT:    vcmpgtuw 2, 2, 3
11783; PWR7-NEXT:    blr
11784;
11785; PWR8-LABEL: ugt_30_v4i32:
11786; PWR8:       # %bb.0:
11787; PWR8-NEXT:    vspltisw 3, 15
11788; PWR8-NEXT:    vpopcntw 2, 2
11789; PWR8-NEXT:    vadduwm 3, 3, 3
11790; PWR8-NEXT:    vcmpgtuw 2, 2, 3
11791; PWR8-NEXT:    blr
11792;
11793; PWR9-LABEL: ugt_30_v4i32:
11794; PWR9:       # %bb.0:
11795; PWR9-NEXT:    vspltisw 3, 15
11796; PWR9-NEXT:    vpopcntw 2, 2
11797; PWR9-NEXT:    vadduwm 3, 3, 3
11798; PWR9-NEXT:    vcmpgtuw 2, 2, 3
11799; PWR9-NEXT:    blr
11800  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11801  %3 = icmp ugt <4 x i32> %2, <i32 30, i32 30, i32 30, i32 30>
11802  %4 = sext <4 x i1> %3 to <4 x i32>
11803  ret <4 x i32> %4
11804}
11805
11806define <4 x i32> @ult_31_v4i32(<4 x i32> %0) {
11807; PWR5-LABEL: ult_31_v4i32:
11808; PWR5:       # %bb.0:
11809; PWR5-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
11810; PWR5-NEXT:    vspltisw 4, 1
11811; PWR5-NEXT:    vxor 3, 3, 3
11812; PWR5-NEXT:    addi 3, 3, .LCPI99_0@toc@l
11813; PWR5-NEXT:    lvx 5, 0, 3
11814; PWR5-NEXT:    addis 3, 2, .LCPI99_1@toc@ha
11815; PWR5-NEXT:    addi 3, 3, .LCPI99_1@toc@l
11816; PWR5-NEXT:    vspltisw 0, 2
11817; PWR5-NEXT:    vsrw 4, 2, 4
11818; PWR5-NEXT:    vand 4, 4, 5
11819; PWR5-NEXT:    lvx 5, 0, 3
11820; PWR5-NEXT:    vsubuwm 2, 2, 4
11821; PWR5-NEXT:    vand 4, 2, 5
11822; PWR5-NEXT:    vsrw 2, 2, 0
11823; PWR5-NEXT:    vand 2, 2, 5
11824; PWR5-NEXT:    vspltisw 5, 4
11825; PWR5-NEXT:    vadduwm 2, 4, 2
11826; PWR5-NEXT:    vsrw 4, 2, 5
11827; PWR5-NEXT:    vspltisb 5, 15
11828; PWR5-NEXT:    vadduwm 2, 2, 4
11829; PWR5-NEXT:    vspltisb 4, 1
11830; PWR5-NEXT:    vand 2, 2, 5
11831; PWR5-NEXT:    vspltisw 5, -16
11832; PWR5-NEXT:    vrlw 0, 4, 5
11833; PWR5-NEXT:    vmulouh 4, 2, 4
11834; PWR5-NEXT:    vmsumuhm 2, 2, 0, 3
11835; PWR5-NEXT:    vspltisw 3, 12
11836; PWR5-NEXT:    vadduwm 3, 3, 3
11837; PWR5-NEXT:    vslw 2, 2, 5
11838; PWR5-NEXT:    vadduwm 2, 4, 2
11839; PWR5-NEXT:    vsrw 2, 2, 3
11840; PWR5-NEXT:    vspltisw 3, 15
11841; PWR5-NEXT:    vsubuwm 3, 3, 5
11842; PWR5-NEXT:    vcmpgtuw 2, 3, 2
11843; PWR5-NEXT:    blr
11844;
11845; PWR6-LABEL: ult_31_v4i32:
11846; PWR6:       # %bb.0:
11847; PWR6-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
11848; PWR6-NEXT:    vspltisw 4, 1
11849; PWR6-NEXT:    vxor 3, 3, 3
11850; PWR6-NEXT:    addi 3, 3, .LCPI99_0@toc@l
11851; PWR6-NEXT:    lvx 5, 0, 3
11852; PWR6-NEXT:    addis 3, 2, .LCPI99_1@toc@ha
11853; PWR6-NEXT:    addi 3, 3, .LCPI99_1@toc@l
11854; PWR6-NEXT:    vspltisw 0, 2
11855; PWR6-NEXT:    vsrw 4, 2, 4
11856; PWR6-NEXT:    vand 4, 4, 5
11857; PWR6-NEXT:    lvx 5, 0, 3
11858; PWR6-NEXT:    vsubuwm 2, 2, 4
11859; PWR6-NEXT:    vand 4, 2, 5
11860; PWR6-NEXT:    vsrw 2, 2, 0
11861; PWR6-NEXT:    vand 2, 2, 5
11862; PWR6-NEXT:    vspltisw 5, 4
11863; PWR6-NEXT:    vadduwm 2, 4, 2
11864; PWR6-NEXT:    vsrw 4, 2, 5
11865; PWR6-NEXT:    vspltisb 5, 15
11866; PWR6-NEXT:    vadduwm 2, 2, 4
11867; PWR6-NEXT:    vspltisb 4, 1
11868; PWR6-NEXT:    vand 2, 2, 5
11869; PWR6-NEXT:    vspltisw 5, -16
11870; PWR6-NEXT:    vrlw 0, 4, 5
11871; PWR6-NEXT:    vmulouh 4, 2, 4
11872; PWR6-NEXT:    vmsumuhm 2, 2, 0, 3
11873; PWR6-NEXT:    vspltisw 3, 12
11874; PWR6-NEXT:    vadduwm 3, 3, 3
11875; PWR6-NEXT:    vslw 2, 2, 5
11876; PWR6-NEXT:    vadduwm 2, 4, 2
11877; PWR6-NEXT:    vsrw 2, 2, 3
11878; PWR6-NEXT:    vspltisw 3, 15
11879; PWR6-NEXT:    vsubuwm 3, 3, 5
11880; PWR6-NEXT:    vcmpgtuw 2, 3, 2
11881; PWR6-NEXT:    blr
11882;
11883; PWR7-LABEL: ult_31_v4i32:
11884; PWR7:       # %bb.0:
11885; PWR7-NEXT:    vspltisw 3, 1
11886; PWR7-NEXT:    addis 3, 2, .LCPI99_0@toc@ha
11887; PWR7-NEXT:    addi 3, 3, .LCPI99_0@toc@l
11888; PWR7-NEXT:    vspltisw 4, 2
11889; PWR7-NEXT:    lxvw4x 0, 0, 3
11890; PWR7-NEXT:    addis 3, 2, .LCPI99_1@toc@ha
11891; PWR7-NEXT:    vspltisw 5, 4
11892; PWR7-NEXT:    addi 3, 3, .LCPI99_1@toc@l
11893; PWR7-NEXT:    vsrw 3, 2, 3
11894; PWR7-NEXT:    vspltisb 0, 15
11895; PWR7-NEXT:    vspltisb 1, 1
11896; PWR7-NEXT:    vspltisw 6, -16
11897; PWR7-NEXT:    vspltisw 7, 12
11898; PWR7-NEXT:    vspltisw 8, 15
11899; PWR7-NEXT:    xxland 35, 35, 0
11900; PWR7-NEXT:    lxvw4x 0, 0, 3
11901; PWR7-NEXT:    vsubuwm 2, 2, 3
11902; PWR7-NEXT:    vsrw 3, 2, 4
11903; PWR7-NEXT:    xxland 34, 34, 0
11904; PWR7-NEXT:    xxlxor 36, 36, 36
11905; PWR7-NEXT:    xxland 35, 35, 0
11906; PWR7-NEXT:    vadduwm 2, 2, 3
11907; PWR7-NEXT:    vsrw 3, 2, 5
11908; PWR7-NEXT:    vadduwm 2, 2, 3
11909; PWR7-NEXT:    vrlw 3, 1, 6
11910; PWR7-NEXT:    xxland 34, 34, 32
11911; PWR7-NEXT:    vmsumuhm 3, 2, 3, 4
11912; PWR7-NEXT:    vmulouh 2, 2, 1
11913; PWR7-NEXT:    vslw 3, 3, 6
11914; PWR7-NEXT:    vadduwm 2, 2, 3
11915; PWR7-NEXT:    vadduwm 3, 7, 7
11916; PWR7-NEXT:    vsrw 2, 2, 3
11917; PWR7-NEXT:    vsubuwm 3, 8, 6
11918; PWR7-NEXT:    vcmpgtuw 2, 3, 2
11919; PWR7-NEXT:    blr
11920;
11921; PWR8-LABEL: ult_31_v4i32:
11922; PWR8:       # %bb.0:
11923; PWR8-NEXT:    vspltisw 3, -16
11924; PWR8-NEXT:    vspltisw 4, 15
11925; PWR8-NEXT:    vpopcntw 2, 2
11926; PWR8-NEXT:    vsubuwm 3, 4, 3
11927; PWR8-NEXT:    vcmpgtuw 2, 3, 2
11928; PWR8-NEXT:    blr
11929;
11930; PWR9-LABEL: ult_31_v4i32:
11931; PWR9:       # %bb.0:
11932; PWR9-NEXT:    vspltisw 3, -16
11933; PWR9-NEXT:    vspltisw 4, 15
11934; PWR9-NEXT:    vpopcntw 2, 2
11935; PWR9-NEXT:    vsubuwm 3, 4, 3
11936; PWR9-NEXT:    vcmpgtuw 2, 3, 2
11937; PWR9-NEXT:    blr
11938  %2 = tail call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> %0)
11939  %3 = icmp ult <4 x i32> %2, <i32 31, i32 31, i32 31, i32 31>
11940  %4 = sext <4 x i1> %3 to <4 x i32>
11941  ret <4 x i32> %4
11942}
11943
11944define <2 x i64> @ugt_1_v2i64(<2 x i64> %0) {
11945; PWR5-LABEL: ugt_1_v2i64:
11946; PWR5:       # %bb.0:
11947; PWR5-NEXT:    addi 5, 3, -1
11948; PWR5-NEXT:    and 3, 3, 5
11949; PWR5-NEXT:    addi 5, 4, -1
11950; PWR5-NEXT:    subfic 3, 3, 0
11951; PWR5-NEXT:    subfe 3, 3, 3
11952; PWR5-NEXT:    and 4, 4, 5
11953; PWR5-NEXT:    subfic 4, 4, 0
11954; PWR5-NEXT:    subfe 4, 4, 4
11955; PWR5-NEXT:    blr
11956;
11957; PWR6-LABEL: ugt_1_v2i64:
11958; PWR6:       # %bb.0:
11959; PWR6-NEXT:    addi 5, 3, -1
11960; PWR6-NEXT:    and 3, 3, 5
11961; PWR6-NEXT:    addi 5, 4, -1
11962; PWR6-NEXT:    subfic 3, 3, 0
11963; PWR6-NEXT:    subfe 3, 3, 3
11964; PWR6-NEXT:    and 4, 4, 5
11965; PWR6-NEXT:    subfic 4, 4, 0
11966; PWR6-NEXT:    subfe 4, 4, 4
11967; PWR6-NEXT:    blr
11968;
11969; PWR7-LABEL: ugt_1_v2i64:
11970; PWR7:       # %bb.0:
11971; PWR7-NEXT:    addi 3, 1, -32
11972; PWR7-NEXT:    xxlxor 35, 35, 35
11973; PWR7-NEXT:    stxvd2x 34, 0, 3
11974; PWR7-NEXT:    ld 3, -24(1)
11975; PWR7-NEXT:    addi 3, 3, -1
11976; PWR7-NEXT:    std 3, -8(1)
11977; PWR7-NEXT:    ld 3, -32(1)
11978; PWR7-NEXT:    addi 3, 3, -1
11979; PWR7-NEXT:    std 3, -16(1)
11980; PWR7-NEXT:    addi 3, 1, -16
11981; PWR7-NEXT:    lxvw4x 0, 0, 3
11982; PWR7-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
11983; PWR7-NEXT:    addi 3, 3, .LCPI100_0@toc@l
11984; PWR7-NEXT:    xxland 34, 34, 0
11985; PWR7-NEXT:    vcmpequw 2, 2, 3
11986; PWR7-NEXT:    lxvw4x 35, 0, 3
11987; PWR7-NEXT:    xxlnor 34, 34, 34
11988; PWR7-NEXT:    vperm 3, 2, 2, 3
11989; PWR7-NEXT:    xxlor 34, 35, 34
11990; PWR7-NEXT:    blr
11991;
11992; PWR8-LABEL: ugt_1_v2i64:
11993; PWR8:       # %bb.0:
11994; PWR8-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
11995; PWR8-NEXT:    vpopcntd 2, 2
11996; PWR8-NEXT:    addi 3, 3, .LCPI100_0@toc@l
11997; PWR8-NEXT:    lxvd2x 35, 0, 3
11998; PWR8-NEXT:    vcmpgtud 2, 2, 3
11999; PWR8-NEXT:    blr
12000;
12001; PWR9-LABEL: ugt_1_v2i64:
12002; PWR9:       # %bb.0:
12003; PWR9-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
12004; PWR9-NEXT:    vpopcntd 2, 2
12005; PWR9-NEXT:    addi 3, 3, .LCPI100_0@toc@l
12006; PWR9-NEXT:    lxv 35, 0(3)
12007; PWR9-NEXT:    vcmpgtud 2, 2, 3
12008; PWR9-NEXT:    blr
12009  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12010  %3 = icmp ugt <2 x i64> %2, <i64 1, i64 1>
12011  %4 = sext <2 x i1> %3 to <2 x i64>
12012  ret <2 x i64> %4
12013}
12014
12015define <2 x i64> @ult_2_v2i64(<2 x i64> %0) {
12016; PWR5-LABEL: ult_2_v2i64:
12017; PWR5:       # %bb.0:
12018; PWR5-NEXT:    addi 5, 3, -1
12019; PWR5-NEXT:    and 3, 3, 5
12020; PWR5-NEXT:    addi 5, 4, -1
12021; PWR5-NEXT:    addic 3, 3, -1
12022; PWR5-NEXT:    subfe 3, 3, 3
12023; PWR5-NEXT:    and 4, 4, 5
12024; PWR5-NEXT:    addic 4, 4, -1
12025; PWR5-NEXT:    subfe 4, 4, 4
12026; PWR5-NEXT:    blr
12027;
12028; PWR6-LABEL: ult_2_v2i64:
12029; PWR6:       # %bb.0:
12030; PWR6-NEXT:    addi 5, 3, -1
12031; PWR6-NEXT:    and 3, 3, 5
12032; PWR6-NEXT:    addi 5, 4, -1
12033; PWR6-NEXT:    addic 3, 3, -1
12034; PWR6-NEXT:    subfe 3, 3, 3
12035; PWR6-NEXT:    and 4, 4, 5
12036; PWR6-NEXT:    addic 4, 4, -1
12037; PWR6-NEXT:    subfe 4, 4, 4
12038; PWR6-NEXT:    blr
12039;
12040; PWR7-LABEL: ult_2_v2i64:
12041; PWR7:       # %bb.0:
12042; PWR7-NEXT:    addi 3, 1, -32
12043; PWR7-NEXT:    xxlxor 35, 35, 35
12044; PWR7-NEXT:    stxvd2x 34, 0, 3
12045; PWR7-NEXT:    ld 3, -24(1)
12046; PWR7-NEXT:    addi 3, 3, -1
12047; PWR7-NEXT:    std 3, -8(1)
12048; PWR7-NEXT:    ld 3, -32(1)
12049; PWR7-NEXT:    addi 3, 3, -1
12050; PWR7-NEXT:    std 3, -16(1)
12051; PWR7-NEXT:    addi 3, 1, -16
12052; PWR7-NEXT:    lxvw4x 0, 0, 3
12053; PWR7-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
12054; PWR7-NEXT:    addi 3, 3, .LCPI101_0@toc@l
12055; PWR7-NEXT:    xxland 34, 34, 0
12056; PWR7-NEXT:    vcmpequw 2, 2, 3
12057; PWR7-NEXT:    lxvw4x 35, 0, 3
12058; PWR7-NEXT:    vperm 3, 2, 2, 3
12059; PWR7-NEXT:    xxland 34, 35, 34
12060; PWR7-NEXT:    blr
12061;
12062; PWR8-LABEL: ult_2_v2i64:
12063; PWR8:       # %bb.0:
12064; PWR8-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
12065; PWR8-NEXT:    vpopcntd 2, 2
12066; PWR8-NEXT:    addi 3, 3, .LCPI101_0@toc@l
12067; PWR8-NEXT:    lxvd2x 35, 0, 3
12068; PWR8-NEXT:    vcmpgtud 2, 3, 2
12069; PWR8-NEXT:    blr
12070;
12071; PWR9-LABEL: ult_2_v2i64:
12072; PWR9:       # %bb.0:
12073; PWR9-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
12074; PWR9-NEXT:    vpopcntd 2, 2
12075; PWR9-NEXT:    addi 3, 3, .LCPI101_0@toc@l
12076; PWR9-NEXT:    lxv 35, 0(3)
12077; PWR9-NEXT:    vcmpgtud 2, 3, 2
12078; PWR9-NEXT:    blr
12079  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12080  %3 = icmp ult <2 x i64> %2, <i64 2, i64 2>
12081  %4 = sext <2 x i1> %3 to <2 x i64>
12082  ret <2 x i64> %4
12083}
12084
12085define <2 x i64> @ugt_2_v2i64(<2 x i64> %0) {
12086; PWR5-LABEL: ugt_2_v2i64:
12087; PWR5:       # %bb.0:
12088; PWR5-NEXT:    lis 5, 21845
12089; PWR5-NEXT:    lis 6, 13107
12090; PWR5-NEXT:    ori 5, 5, 21845
12091; PWR5-NEXT:    rotldi 8, 4, 63
12092; PWR5-NEXT:    rotldi 9, 3, 63
12093; PWR5-NEXT:    rldimi 5, 5, 32, 0
12094; PWR5-NEXT:    and 8, 8, 5
12095; PWR5-NEXT:    and 5, 9, 5
12096; PWR5-NEXT:    ori 6, 6, 13107
12097; PWR5-NEXT:    sub 3, 3, 5
12098; PWR5-NEXT:    rldimi 6, 6, 32, 0
12099; PWR5-NEXT:    sub 4, 4, 8
12100; PWR5-NEXT:    and 8, 3, 6
12101; PWR5-NEXT:    rotldi 3, 3, 62
12102; PWR5-NEXT:    and 3, 3, 6
12103; PWR5-NEXT:    lis 7, 3855
12104; PWR5-NEXT:    and 5, 4, 6
12105; PWR5-NEXT:    rotldi 4, 4, 62
12106; PWR5-NEXT:    add 3, 8, 3
12107; PWR5-NEXT:    lis 9, 257
12108; PWR5-NEXT:    ori 7, 7, 3855
12109; PWR5-NEXT:    and 4, 4, 6
12110; PWR5-NEXT:    rldicl 6, 3, 60, 4
12111; PWR5-NEXT:    ori 9, 9, 257
12112; PWR5-NEXT:    rldimi 7, 7, 32, 0
12113; PWR5-NEXT:    add 4, 5, 4
12114; PWR5-NEXT:    add 3, 3, 6
12115; PWR5-NEXT:    rldimi 9, 9, 32, 0
12116; PWR5-NEXT:    rldicl 5, 4, 60, 4
12117; PWR5-NEXT:    and 3, 3, 7
12118; PWR5-NEXT:    add 4, 4, 5
12119; PWR5-NEXT:    mulld 3, 3, 9
12120; PWR5-NEXT:    and 4, 4, 7
12121; PWR5-NEXT:    rldicl 3, 3, 8, 56
12122; PWR5-NEXT:    mulld 4, 4, 9
12123; PWR5-NEXT:    li 5, 2
12124; PWR5-NEXT:    subfic 3, 3, 2
12125; PWR5-NEXT:    rldicl 4, 4, 8, 56
12126; PWR5-NEXT:    subfe 3, 5, 5
12127; PWR5-NEXT:    subfic 4, 4, 2
12128; PWR5-NEXT:    subfe 4, 5, 5
12129; PWR5-NEXT:    blr
12130;
12131; PWR6-LABEL: ugt_2_v2i64:
12132; PWR6:       # %bb.0:
12133; PWR6-NEXT:    lis 5, 21845
12134; PWR6-NEXT:    lis 6, 13107
12135; PWR6-NEXT:    ori 5, 5, 21845
12136; PWR6-NEXT:    rotldi 8, 4, 63
12137; PWR6-NEXT:    rotldi 9, 3, 63
12138; PWR6-NEXT:    rldimi 5, 5, 32, 0
12139; PWR6-NEXT:    and 8, 8, 5
12140; PWR6-NEXT:    and 5, 9, 5
12141; PWR6-NEXT:    ori 6, 6, 13107
12142; PWR6-NEXT:    sub 3, 3, 5
12143; PWR6-NEXT:    rldimi 6, 6, 32, 0
12144; PWR6-NEXT:    sub 4, 4, 8
12145; PWR6-NEXT:    and 8, 3, 6
12146; PWR6-NEXT:    rotldi 3, 3, 62
12147; PWR6-NEXT:    and 3, 3, 6
12148; PWR6-NEXT:    lis 7, 3855
12149; PWR6-NEXT:    and 5, 4, 6
12150; PWR6-NEXT:    rotldi 4, 4, 62
12151; PWR6-NEXT:    add 3, 8, 3
12152; PWR6-NEXT:    lis 9, 257
12153; PWR6-NEXT:    ori 7, 7, 3855
12154; PWR6-NEXT:    and 4, 4, 6
12155; PWR6-NEXT:    rldicl 6, 3, 60, 4
12156; PWR6-NEXT:    ori 9, 9, 257
12157; PWR6-NEXT:    rldimi 7, 7, 32, 0
12158; PWR6-NEXT:    add 4, 5, 4
12159; PWR6-NEXT:    add 3, 3, 6
12160; PWR6-NEXT:    rldimi 9, 9, 32, 0
12161; PWR6-NEXT:    rldicl 5, 4, 60, 4
12162; PWR6-NEXT:    and 3, 3, 7
12163; PWR6-NEXT:    add 4, 4, 5
12164; PWR6-NEXT:    mulld 3, 3, 9
12165; PWR6-NEXT:    and 4, 4, 7
12166; PWR6-NEXT:    rldicl 3, 3, 8, 56
12167; PWR6-NEXT:    mulld 4, 4, 9
12168; PWR6-NEXT:    li 5, 2
12169; PWR6-NEXT:    subfic 3, 3, 2
12170; PWR6-NEXT:    rldicl 4, 4, 8, 56
12171; PWR6-NEXT:    subfe 3, 5, 5
12172; PWR6-NEXT:    subfic 4, 4, 2
12173; PWR6-NEXT:    subfe 4, 5, 5
12174; PWR6-NEXT:    blr
12175;
12176; PWR7-LABEL: ugt_2_v2i64:
12177; PWR7:       # %bb.0:
12178; PWR7-NEXT:    addi 3, 1, -32
12179; PWR7-NEXT:    li 5, -1
12180; PWR7-NEXT:    stxvd2x 34, 0, 3
12181; PWR7-NEXT:    ld 4, -24(1)
12182; PWR7-NEXT:    ld 3, -32(1)
12183; PWR7-NEXT:    popcntd 4, 4
12184; PWR7-NEXT:    popcntd 3, 3
12185; PWR7-NEXT:    cmpldi 4, 2
12186; PWR7-NEXT:    li 4, 0
12187; PWR7-NEXT:    iselgt 6, 5, 4
12188; PWR7-NEXT:    cmpldi 3, 2
12189; PWR7-NEXT:    iselgt 3, 5, 4
12190; PWR7-NEXT:    std 6, -8(1)
12191; PWR7-NEXT:    std 3, -16(1)
12192; PWR7-NEXT:    addi 3, 1, -16
12193; PWR7-NEXT:    lxvd2x 34, 0, 3
12194; PWR7-NEXT:    blr
12195;
12196; PWR8-LABEL: ugt_2_v2i64:
12197; PWR8:       # %bb.0:
12198; PWR8-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
12199; PWR8-NEXT:    vpopcntd 2, 2
12200; PWR8-NEXT:    addi 3, 3, .LCPI102_0@toc@l
12201; PWR8-NEXT:    lxvd2x 35, 0, 3
12202; PWR8-NEXT:    vcmpgtud 2, 2, 3
12203; PWR8-NEXT:    blr
12204;
12205; PWR9-LABEL: ugt_2_v2i64:
12206; PWR9:       # %bb.0:
12207; PWR9-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
12208; PWR9-NEXT:    vpopcntd 2, 2
12209; PWR9-NEXT:    addi 3, 3, .LCPI102_0@toc@l
12210; PWR9-NEXT:    lxv 35, 0(3)
12211; PWR9-NEXT:    vcmpgtud 2, 2, 3
12212; PWR9-NEXT:    blr
12213  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12214  %3 = icmp ugt <2 x i64> %2, <i64 2, i64 2>
12215  %4 = sext <2 x i1> %3 to <2 x i64>
12216  ret <2 x i64> %4
12217}
12218
12219define <2 x i64> @ult_3_v2i64(<2 x i64> %0) {
12220; PWR5-LABEL: ult_3_v2i64:
12221; PWR5:       # %bb.0:
12222; PWR5-NEXT:    lis 5, 21845
12223; PWR5-NEXT:    lis 6, 13107
12224; PWR5-NEXT:    ori 5, 5, 21845
12225; PWR5-NEXT:    rotldi 8, 4, 63
12226; PWR5-NEXT:    rotldi 9, 3, 63
12227; PWR5-NEXT:    rldimi 5, 5, 32, 0
12228; PWR5-NEXT:    and 8, 8, 5
12229; PWR5-NEXT:    and 5, 9, 5
12230; PWR5-NEXT:    ori 6, 6, 13107
12231; PWR5-NEXT:    sub 3, 3, 5
12232; PWR5-NEXT:    rldimi 6, 6, 32, 0
12233; PWR5-NEXT:    sub 4, 4, 8
12234; PWR5-NEXT:    and 8, 3, 6
12235; PWR5-NEXT:    rotldi 3, 3, 62
12236; PWR5-NEXT:    and 3, 3, 6
12237; PWR5-NEXT:    lis 7, 3855
12238; PWR5-NEXT:    and 5, 4, 6
12239; PWR5-NEXT:    rotldi 4, 4, 62
12240; PWR5-NEXT:    add 3, 8, 3
12241; PWR5-NEXT:    lis 9, 257
12242; PWR5-NEXT:    ori 7, 7, 3855
12243; PWR5-NEXT:    and 4, 4, 6
12244; PWR5-NEXT:    rldicl 6, 3, 60, 4
12245; PWR5-NEXT:    ori 9, 9, 257
12246; PWR5-NEXT:    rldimi 7, 7, 32, 0
12247; PWR5-NEXT:    add 4, 5, 4
12248; PWR5-NEXT:    add 3, 3, 6
12249; PWR5-NEXT:    rldimi 9, 9, 32, 0
12250; PWR5-NEXT:    rldicl 5, 4, 60, 4
12251; PWR5-NEXT:    and 3, 3, 7
12252; PWR5-NEXT:    add 4, 4, 5
12253; PWR5-NEXT:    mulld 3, 3, 9
12254; PWR5-NEXT:    and 4, 4, 7
12255; PWR5-NEXT:    rldicl 3, 3, 8, 56
12256; PWR5-NEXT:    li 5, 3
12257; PWR5-NEXT:    mulld 4, 4, 9
12258; PWR5-NEXT:    subc 6, 3, 5
12259; PWR5-NEXT:    rldicl 4, 4, 8, 56
12260; PWR5-NEXT:    subfe 3, 3, 3
12261; PWR5-NEXT:    subc 5, 4, 5
12262; PWR5-NEXT:    subfe 4, 4, 4
12263; PWR5-NEXT:    blr
12264;
12265; PWR6-LABEL: ult_3_v2i64:
12266; PWR6:       # %bb.0:
12267; PWR6-NEXT:    lis 5, 21845
12268; PWR6-NEXT:    lis 6, 13107
12269; PWR6-NEXT:    ori 5, 5, 21845
12270; PWR6-NEXT:    rotldi 8, 4, 63
12271; PWR6-NEXT:    rotldi 9, 3, 63
12272; PWR6-NEXT:    rldimi 5, 5, 32, 0
12273; PWR6-NEXT:    and 8, 8, 5
12274; PWR6-NEXT:    and 5, 9, 5
12275; PWR6-NEXT:    ori 6, 6, 13107
12276; PWR6-NEXT:    sub 3, 3, 5
12277; PWR6-NEXT:    rldimi 6, 6, 32, 0
12278; PWR6-NEXT:    sub 4, 4, 8
12279; PWR6-NEXT:    and 8, 3, 6
12280; PWR6-NEXT:    rotldi 3, 3, 62
12281; PWR6-NEXT:    and 3, 3, 6
12282; PWR6-NEXT:    lis 7, 3855
12283; PWR6-NEXT:    and 5, 4, 6
12284; PWR6-NEXT:    rotldi 4, 4, 62
12285; PWR6-NEXT:    add 3, 8, 3
12286; PWR6-NEXT:    lis 9, 257
12287; PWR6-NEXT:    ori 7, 7, 3855
12288; PWR6-NEXT:    and 4, 4, 6
12289; PWR6-NEXT:    rldicl 6, 3, 60, 4
12290; PWR6-NEXT:    ori 9, 9, 257
12291; PWR6-NEXT:    rldimi 7, 7, 32, 0
12292; PWR6-NEXT:    add 4, 5, 4
12293; PWR6-NEXT:    add 3, 3, 6
12294; PWR6-NEXT:    rldimi 9, 9, 32, 0
12295; PWR6-NEXT:    rldicl 5, 4, 60, 4
12296; PWR6-NEXT:    and 3, 3, 7
12297; PWR6-NEXT:    add 4, 4, 5
12298; PWR6-NEXT:    mulld 3, 3, 9
12299; PWR6-NEXT:    and 4, 4, 7
12300; PWR6-NEXT:    rldicl 3, 3, 8, 56
12301; PWR6-NEXT:    li 5, 3
12302; PWR6-NEXT:    mulld 4, 4, 9
12303; PWR6-NEXT:    subc 6, 3, 5
12304; PWR6-NEXT:    rldicl 4, 4, 8, 56
12305; PWR6-NEXT:    subfe 3, 3, 3
12306; PWR6-NEXT:    subc 5, 4, 5
12307; PWR6-NEXT:    subfe 4, 4, 4
12308; PWR6-NEXT:    blr
12309;
12310; PWR7-LABEL: ult_3_v2i64:
12311; PWR7:       # %bb.0:
12312; PWR7-NEXT:    addi 3, 1, -32
12313; PWR7-NEXT:    li 5, -1
12314; PWR7-NEXT:    stxvd2x 34, 0, 3
12315; PWR7-NEXT:    ld 4, -24(1)
12316; PWR7-NEXT:    ld 3, -32(1)
12317; PWR7-NEXT:    popcntd 4, 4
12318; PWR7-NEXT:    popcntd 3, 3
12319; PWR7-NEXT:    cmpldi 4, 3
12320; PWR7-NEXT:    li 4, 0
12321; PWR7-NEXT:    isellt 6, 5, 4
12322; PWR7-NEXT:    cmpldi 3, 3
12323; PWR7-NEXT:    isellt 3, 5, 4
12324; PWR7-NEXT:    std 6, -8(1)
12325; PWR7-NEXT:    std 3, -16(1)
12326; PWR7-NEXT:    addi 3, 1, -16
12327; PWR7-NEXT:    lxvd2x 34, 0, 3
12328; PWR7-NEXT:    blr
12329;
12330; PWR8-LABEL: ult_3_v2i64:
12331; PWR8:       # %bb.0:
12332; PWR8-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
12333; PWR8-NEXT:    vpopcntd 2, 2
12334; PWR8-NEXT:    addi 3, 3, .LCPI103_0@toc@l
12335; PWR8-NEXT:    lxvd2x 35, 0, 3
12336; PWR8-NEXT:    vcmpgtud 2, 3, 2
12337; PWR8-NEXT:    blr
12338;
12339; PWR9-LABEL: ult_3_v2i64:
12340; PWR9:       # %bb.0:
12341; PWR9-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
12342; PWR9-NEXT:    vpopcntd 2, 2
12343; PWR9-NEXT:    addi 3, 3, .LCPI103_0@toc@l
12344; PWR9-NEXT:    lxv 35, 0(3)
12345; PWR9-NEXT:    vcmpgtud 2, 3, 2
12346; PWR9-NEXT:    blr
12347  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12348  %3 = icmp ult <2 x i64> %2, <i64 3, i64 3>
12349  %4 = sext <2 x i1> %3 to <2 x i64>
12350  ret <2 x i64> %4
12351}
12352
12353define <2 x i64> @ugt_3_v2i64(<2 x i64> %0) {
12354; PWR5-LABEL: ugt_3_v2i64:
12355; PWR5:       # %bb.0:
12356; PWR5-NEXT:    lis 5, 21845
12357; PWR5-NEXT:    lis 6, 13107
12358; PWR5-NEXT:    ori 5, 5, 21845
12359; PWR5-NEXT:    rotldi 8, 4, 63
12360; PWR5-NEXT:    rotldi 9, 3, 63
12361; PWR5-NEXT:    rldimi 5, 5, 32, 0
12362; PWR5-NEXT:    and 8, 8, 5
12363; PWR5-NEXT:    and 5, 9, 5
12364; PWR5-NEXT:    ori 6, 6, 13107
12365; PWR5-NEXT:    sub 3, 3, 5
12366; PWR5-NEXT:    rldimi 6, 6, 32, 0
12367; PWR5-NEXT:    sub 4, 4, 8
12368; PWR5-NEXT:    and 8, 3, 6
12369; PWR5-NEXT:    rotldi 3, 3, 62
12370; PWR5-NEXT:    and 3, 3, 6
12371; PWR5-NEXT:    lis 7, 3855
12372; PWR5-NEXT:    and 5, 4, 6
12373; PWR5-NEXT:    rotldi 4, 4, 62
12374; PWR5-NEXT:    add 3, 8, 3
12375; PWR5-NEXT:    lis 9, 257
12376; PWR5-NEXT:    ori 7, 7, 3855
12377; PWR5-NEXT:    and 4, 4, 6
12378; PWR5-NEXT:    rldicl 6, 3, 60, 4
12379; PWR5-NEXT:    ori 9, 9, 257
12380; PWR5-NEXT:    rldimi 7, 7, 32, 0
12381; PWR5-NEXT:    add 4, 5, 4
12382; PWR5-NEXT:    add 3, 3, 6
12383; PWR5-NEXT:    rldimi 9, 9, 32, 0
12384; PWR5-NEXT:    rldicl 5, 4, 60, 4
12385; PWR5-NEXT:    and 3, 3, 7
12386; PWR5-NEXT:    add 4, 4, 5
12387; PWR5-NEXT:    mulld 3, 3, 9
12388; PWR5-NEXT:    and 4, 4, 7
12389; PWR5-NEXT:    rldicl 3, 3, 8, 56
12390; PWR5-NEXT:    mulld 4, 4, 9
12391; PWR5-NEXT:    li 5, 3
12392; PWR5-NEXT:    subfic 3, 3, 3
12393; PWR5-NEXT:    rldicl 4, 4, 8, 56
12394; PWR5-NEXT:    subfe 3, 5, 5
12395; PWR5-NEXT:    subfic 4, 4, 3
12396; PWR5-NEXT:    subfe 4, 5, 5
12397; PWR5-NEXT:    blr
12398;
12399; PWR6-LABEL: ugt_3_v2i64:
12400; PWR6:       # %bb.0:
12401; PWR6-NEXT:    lis 5, 21845
12402; PWR6-NEXT:    lis 6, 13107
12403; PWR6-NEXT:    ori 5, 5, 21845
12404; PWR6-NEXT:    rotldi 8, 4, 63
12405; PWR6-NEXT:    rotldi 9, 3, 63
12406; PWR6-NEXT:    rldimi 5, 5, 32, 0
12407; PWR6-NEXT:    and 8, 8, 5
12408; PWR6-NEXT:    and 5, 9, 5
12409; PWR6-NEXT:    ori 6, 6, 13107
12410; PWR6-NEXT:    sub 3, 3, 5
12411; PWR6-NEXT:    rldimi 6, 6, 32, 0
12412; PWR6-NEXT:    sub 4, 4, 8
12413; PWR6-NEXT:    and 8, 3, 6
12414; PWR6-NEXT:    rotldi 3, 3, 62
12415; PWR6-NEXT:    and 3, 3, 6
12416; PWR6-NEXT:    lis 7, 3855
12417; PWR6-NEXT:    and 5, 4, 6
12418; PWR6-NEXT:    rotldi 4, 4, 62
12419; PWR6-NEXT:    add 3, 8, 3
12420; PWR6-NEXT:    lis 9, 257
12421; PWR6-NEXT:    ori 7, 7, 3855
12422; PWR6-NEXT:    and 4, 4, 6
12423; PWR6-NEXT:    rldicl 6, 3, 60, 4
12424; PWR6-NEXT:    ori 9, 9, 257
12425; PWR6-NEXT:    rldimi 7, 7, 32, 0
12426; PWR6-NEXT:    add 4, 5, 4
12427; PWR6-NEXT:    add 3, 3, 6
12428; PWR6-NEXT:    rldimi 9, 9, 32, 0
12429; PWR6-NEXT:    rldicl 5, 4, 60, 4
12430; PWR6-NEXT:    and 3, 3, 7
12431; PWR6-NEXT:    add 4, 4, 5
12432; PWR6-NEXT:    mulld 3, 3, 9
12433; PWR6-NEXT:    and 4, 4, 7
12434; PWR6-NEXT:    rldicl 3, 3, 8, 56
12435; PWR6-NEXT:    mulld 4, 4, 9
12436; PWR6-NEXT:    li 5, 3
12437; PWR6-NEXT:    subfic 3, 3, 3
12438; PWR6-NEXT:    rldicl 4, 4, 8, 56
12439; PWR6-NEXT:    subfe 3, 5, 5
12440; PWR6-NEXT:    subfic 4, 4, 3
12441; PWR6-NEXT:    subfe 4, 5, 5
12442; PWR6-NEXT:    blr
12443;
12444; PWR7-LABEL: ugt_3_v2i64:
12445; PWR7:       # %bb.0:
12446; PWR7-NEXT:    addi 3, 1, -32
12447; PWR7-NEXT:    li 5, -1
12448; PWR7-NEXT:    stxvd2x 34, 0, 3
12449; PWR7-NEXT:    ld 4, -24(1)
12450; PWR7-NEXT:    ld 3, -32(1)
12451; PWR7-NEXT:    popcntd 4, 4
12452; PWR7-NEXT:    popcntd 3, 3
12453; PWR7-NEXT:    cmpldi 4, 3
12454; PWR7-NEXT:    li 4, 0
12455; PWR7-NEXT:    iselgt 6, 5, 4
12456; PWR7-NEXT:    cmpldi 3, 3
12457; PWR7-NEXT:    iselgt 3, 5, 4
12458; PWR7-NEXT:    std 6, -8(1)
12459; PWR7-NEXT:    std 3, -16(1)
12460; PWR7-NEXT:    addi 3, 1, -16
12461; PWR7-NEXT:    lxvd2x 34, 0, 3
12462; PWR7-NEXT:    blr
12463;
12464; PWR8-LABEL: ugt_3_v2i64:
12465; PWR8:       # %bb.0:
12466; PWR8-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
12467; PWR8-NEXT:    vpopcntd 2, 2
12468; PWR8-NEXT:    addi 3, 3, .LCPI104_0@toc@l
12469; PWR8-NEXT:    lxvd2x 35, 0, 3
12470; PWR8-NEXT:    vcmpgtud 2, 2, 3
12471; PWR8-NEXT:    blr
12472;
12473; PWR9-LABEL: ugt_3_v2i64:
12474; PWR9:       # %bb.0:
12475; PWR9-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
12476; PWR9-NEXT:    vpopcntd 2, 2
12477; PWR9-NEXT:    addi 3, 3, .LCPI104_0@toc@l
12478; PWR9-NEXT:    lxv 35, 0(3)
12479; PWR9-NEXT:    vcmpgtud 2, 2, 3
12480; PWR9-NEXT:    blr
12481  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12482  %3 = icmp ugt <2 x i64> %2, <i64 3, i64 3>
12483  %4 = sext <2 x i1> %3 to <2 x i64>
12484  ret <2 x i64> %4
12485}
12486
12487define <2 x i64> @ult_4_v2i64(<2 x i64> %0) {
12488; PWR5-LABEL: ult_4_v2i64:
12489; PWR5:       # %bb.0:
12490; PWR5-NEXT:    lis 5, 21845
12491; PWR5-NEXT:    lis 6, 13107
12492; PWR5-NEXT:    ori 5, 5, 21845
12493; PWR5-NEXT:    rotldi 8, 4, 63
12494; PWR5-NEXT:    rotldi 9, 3, 63
12495; PWR5-NEXT:    rldimi 5, 5, 32, 0
12496; PWR5-NEXT:    and 8, 8, 5
12497; PWR5-NEXT:    and 5, 9, 5
12498; PWR5-NEXT:    ori 6, 6, 13107
12499; PWR5-NEXT:    sub 3, 3, 5
12500; PWR5-NEXT:    rldimi 6, 6, 32, 0
12501; PWR5-NEXT:    sub 4, 4, 8
12502; PWR5-NEXT:    and 8, 3, 6
12503; PWR5-NEXT:    rotldi 3, 3, 62
12504; PWR5-NEXT:    and 3, 3, 6
12505; PWR5-NEXT:    lis 7, 3855
12506; PWR5-NEXT:    and 5, 4, 6
12507; PWR5-NEXT:    rotldi 4, 4, 62
12508; PWR5-NEXT:    add 3, 8, 3
12509; PWR5-NEXT:    lis 9, 257
12510; PWR5-NEXT:    ori 7, 7, 3855
12511; PWR5-NEXT:    and 4, 4, 6
12512; PWR5-NEXT:    rldicl 6, 3, 60, 4
12513; PWR5-NEXT:    ori 9, 9, 257
12514; PWR5-NEXT:    rldimi 7, 7, 32, 0
12515; PWR5-NEXT:    add 4, 5, 4
12516; PWR5-NEXT:    add 3, 3, 6
12517; PWR5-NEXT:    rldimi 9, 9, 32, 0
12518; PWR5-NEXT:    rldicl 5, 4, 60, 4
12519; PWR5-NEXT:    and 3, 3, 7
12520; PWR5-NEXT:    add 4, 4, 5
12521; PWR5-NEXT:    mulld 3, 3, 9
12522; PWR5-NEXT:    and 4, 4, 7
12523; PWR5-NEXT:    rldicl 3, 3, 8, 56
12524; PWR5-NEXT:    li 5, 4
12525; PWR5-NEXT:    mulld 4, 4, 9
12526; PWR5-NEXT:    subc 6, 3, 5
12527; PWR5-NEXT:    rldicl 4, 4, 8, 56
12528; PWR5-NEXT:    subfe 3, 3, 3
12529; PWR5-NEXT:    subc 5, 4, 5
12530; PWR5-NEXT:    subfe 4, 4, 4
12531; PWR5-NEXT:    blr
12532;
12533; PWR6-LABEL: ult_4_v2i64:
12534; PWR6:       # %bb.0:
12535; PWR6-NEXT:    lis 5, 21845
12536; PWR6-NEXT:    lis 6, 13107
12537; PWR6-NEXT:    ori 5, 5, 21845
12538; PWR6-NEXT:    rotldi 8, 4, 63
12539; PWR6-NEXT:    rotldi 9, 3, 63
12540; PWR6-NEXT:    rldimi 5, 5, 32, 0
12541; PWR6-NEXT:    and 8, 8, 5
12542; PWR6-NEXT:    and 5, 9, 5
12543; PWR6-NEXT:    ori 6, 6, 13107
12544; PWR6-NEXT:    sub 3, 3, 5
12545; PWR6-NEXT:    rldimi 6, 6, 32, 0
12546; PWR6-NEXT:    sub 4, 4, 8
12547; PWR6-NEXT:    and 8, 3, 6
12548; PWR6-NEXT:    rotldi 3, 3, 62
12549; PWR6-NEXT:    and 3, 3, 6
12550; PWR6-NEXT:    lis 7, 3855
12551; PWR6-NEXT:    and 5, 4, 6
12552; PWR6-NEXT:    rotldi 4, 4, 62
12553; PWR6-NEXT:    add 3, 8, 3
12554; PWR6-NEXT:    lis 9, 257
12555; PWR6-NEXT:    ori 7, 7, 3855
12556; PWR6-NEXT:    and 4, 4, 6
12557; PWR6-NEXT:    rldicl 6, 3, 60, 4
12558; PWR6-NEXT:    ori 9, 9, 257
12559; PWR6-NEXT:    rldimi 7, 7, 32, 0
12560; PWR6-NEXT:    add 4, 5, 4
12561; PWR6-NEXT:    add 3, 3, 6
12562; PWR6-NEXT:    rldimi 9, 9, 32, 0
12563; PWR6-NEXT:    rldicl 5, 4, 60, 4
12564; PWR6-NEXT:    and 3, 3, 7
12565; PWR6-NEXT:    add 4, 4, 5
12566; PWR6-NEXT:    mulld 3, 3, 9
12567; PWR6-NEXT:    and 4, 4, 7
12568; PWR6-NEXT:    rldicl 3, 3, 8, 56
12569; PWR6-NEXT:    li 5, 4
12570; PWR6-NEXT:    mulld 4, 4, 9
12571; PWR6-NEXT:    subc 6, 3, 5
12572; PWR6-NEXT:    rldicl 4, 4, 8, 56
12573; PWR6-NEXT:    subfe 3, 3, 3
12574; PWR6-NEXT:    subc 5, 4, 5
12575; PWR6-NEXT:    subfe 4, 4, 4
12576; PWR6-NEXT:    blr
12577;
12578; PWR7-LABEL: ult_4_v2i64:
12579; PWR7:       # %bb.0:
12580; PWR7-NEXT:    addi 3, 1, -32
12581; PWR7-NEXT:    li 5, -1
12582; PWR7-NEXT:    stxvd2x 34, 0, 3
12583; PWR7-NEXT:    ld 4, -24(1)
12584; PWR7-NEXT:    ld 3, -32(1)
12585; PWR7-NEXT:    popcntd 4, 4
12586; PWR7-NEXT:    popcntd 3, 3
12587; PWR7-NEXT:    cmpldi 4, 4
12588; PWR7-NEXT:    li 4, 0
12589; PWR7-NEXT:    isellt 6, 5, 4
12590; PWR7-NEXT:    cmpldi 3, 4
12591; PWR7-NEXT:    isellt 3, 5, 4
12592; PWR7-NEXT:    std 6, -8(1)
12593; PWR7-NEXT:    std 3, -16(1)
12594; PWR7-NEXT:    addi 3, 1, -16
12595; PWR7-NEXT:    lxvd2x 34, 0, 3
12596; PWR7-NEXT:    blr
12597;
12598; PWR8-LABEL: ult_4_v2i64:
12599; PWR8:       # %bb.0:
12600; PWR8-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
12601; PWR8-NEXT:    vpopcntd 2, 2
12602; PWR8-NEXT:    addi 3, 3, .LCPI105_0@toc@l
12603; PWR8-NEXT:    lxvd2x 35, 0, 3
12604; PWR8-NEXT:    vcmpgtud 2, 3, 2
12605; PWR8-NEXT:    blr
12606;
12607; PWR9-LABEL: ult_4_v2i64:
12608; PWR9:       # %bb.0:
12609; PWR9-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
12610; PWR9-NEXT:    vpopcntd 2, 2
12611; PWR9-NEXT:    addi 3, 3, .LCPI105_0@toc@l
12612; PWR9-NEXT:    lxv 35, 0(3)
12613; PWR9-NEXT:    vcmpgtud 2, 3, 2
12614; PWR9-NEXT:    blr
12615  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12616  %3 = icmp ult <2 x i64> %2, <i64 4, i64 4>
12617  %4 = sext <2 x i1> %3 to <2 x i64>
12618  ret <2 x i64> %4
12619}
12620
12621define <2 x i64> @ugt_4_v2i64(<2 x i64> %0) {
12622; PWR5-LABEL: ugt_4_v2i64:
12623; PWR5:       # %bb.0:
12624; PWR5-NEXT:    lis 5, 21845
12625; PWR5-NEXT:    lis 6, 13107
12626; PWR5-NEXT:    ori 5, 5, 21845
12627; PWR5-NEXT:    rotldi 8, 4, 63
12628; PWR5-NEXT:    rotldi 9, 3, 63
12629; PWR5-NEXT:    rldimi 5, 5, 32, 0
12630; PWR5-NEXT:    and 8, 8, 5
12631; PWR5-NEXT:    and 5, 9, 5
12632; PWR5-NEXT:    ori 6, 6, 13107
12633; PWR5-NEXT:    sub 3, 3, 5
12634; PWR5-NEXT:    rldimi 6, 6, 32, 0
12635; PWR5-NEXT:    sub 4, 4, 8
12636; PWR5-NEXT:    and 8, 3, 6
12637; PWR5-NEXT:    rotldi 3, 3, 62
12638; PWR5-NEXT:    and 3, 3, 6
12639; PWR5-NEXT:    lis 7, 3855
12640; PWR5-NEXT:    and 5, 4, 6
12641; PWR5-NEXT:    rotldi 4, 4, 62
12642; PWR5-NEXT:    add 3, 8, 3
12643; PWR5-NEXT:    lis 9, 257
12644; PWR5-NEXT:    ori 7, 7, 3855
12645; PWR5-NEXT:    and 4, 4, 6
12646; PWR5-NEXT:    rldicl 6, 3, 60, 4
12647; PWR5-NEXT:    ori 9, 9, 257
12648; PWR5-NEXT:    rldimi 7, 7, 32, 0
12649; PWR5-NEXT:    add 4, 5, 4
12650; PWR5-NEXT:    add 3, 3, 6
12651; PWR5-NEXT:    rldimi 9, 9, 32, 0
12652; PWR5-NEXT:    rldicl 5, 4, 60, 4
12653; PWR5-NEXT:    and 3, 3, 7
12654; PWR5-NEXT:    add 4, 4, 5
12655; PWR5-NEXT:    mulld 3, 3, 9
12656; PWR5-NEXT:    and 4, 4, 7
12657; PWR5-NEXT:    rldicl 3, 3, 8, 56
12658; PWR5-NEXT:    mulld 4, 4, 9
12659; PWR5-NEXT:    li 5, 4
12660; PWR5-NEXT:    subfic 3, 3, 4
12661; PWR5-NEXT:    rldicl 4, 4, 8, 56
12662; PWR5-NEXT:    subfe 3, 5, 5
12663; PWR5-NEXT:    subfic 4, 4, 4
12664; PWR5-NEXT:    subfe 4, 5, 5
12665; PWR5-NEXT:    blr
12666;
12667; PWR6-LABEL: ugt_4_v2i64:
12668; PWR6:       # %bb.0:
12669; PWR6-NEXT:    lis 5, 21845
12670; PWR6-NEXT:    lis 6, 13107
12671; PWR6-NEXT:    ori 5, 5, 21845
12672; PWR6-NEXT:    rotldi 8, 4, 63
12673; PWR6-NEXT:    rotldi 9, 3, 63
12674; PWR6-NEXT:    rldimi 5, 5, 32, 0
12675; PWR6-NEXT:    and 8, 8, 5
12676; PWR6-NEXT:    and 5, 9, 5
12677; PWR6-NEXT:    ori 6, 6, 13107
12678; PWR6-NEXT:    sub 3, 3, 5
12679; PWR6-NEXT:    rldimi 6, 6, 32, 0
12680; PWR6-NEXT:    sub 4, 4, 8
12681; PWR6-NEXT:    and 8, 3, 6
12682; PWR6-NEXT:    rotldi 3, 3, 62
12683; PWR6-NEXT:    and 3, 3, 6
12684; PWR6-NEXT:    lis 7, 3855
12685; PWR6-NEXT:    and 5, 4, 6
12686; PWR6-NEXT:    rotldi 4, 4, 62
12687; PWR6-NEXT:    add 3, 8, 3
12688; PWR6-NEXT:    lis 9, 257
12689; PWR6-NEXT:    ori 7, 7, 3855
12690; PWR6-NEXT:    and 4, 4, 6
12691; PWR6-NEXT:    rldicl 6, 3, 60, 4
12692; PWR6-NEXT:    ori 9, 9, 257
12693; PWR6-NEXT:    rldimi 7, 7, 32, 0
12694; PWR6-NEXT:    add 4, 5, 4
12695; PWR6-NEXT:    add 3, 3, 6
12696; PWR6-NEXT:    rldimi 9, 9, 32, 0
12697; PWR6-NEXT:    rldicl 5, 4, 60, 4
12698; PWR6-NEXT:    and 3, 3, 7
12699; PWR6-NEXT:    add 4, 4, 5
12700; PWR6-NEXT:    mulld 3, 3, 9
12701; PWR6-NEXT:    and 4, 4, 7
12702; PWR6-NEXT:    rldicl 3, 3, 8, 56
12703; PWR6-NEXT:    mulld 4, 4, 9
12704; PWR6-NEXT:    li 5, 4
12705; PWR6-NEXT:    subfic 3, 3, 4
12706; PWR6-NEXT:    rldicl 4, 4, 8, 56
12707; PWR6-NEXT:    subfe 3, 5, 5
12708; PWR6-NEXT:    subfic 4, 4, 4
12709; PWR6-NEXT:    subfe 4, 5, 5
12710; PWR6-NEXT:    blr
12711;
12712; PWR7-LABEL: ugt_4_v2i64:
12713; PWR7:       # %bb.0:
12714; PWR7-NEXT:    addi 3, 1, -32
12715; PWR7-NEXT:    li 5, -1
12716; PWR7-NEXT:    stxvd2x 34, 0, 3
12717; PWR7-NEXT:    ld 4, -24(1)
12718; PWR7-NEXT:    ld 3, -32(1)
12719; PWR7-NEXT:    popcntd 4, 4
12720; PWR7-NEXT:    popcntd 3, 3
12721; PWR7-NEXT:    cmpldi 4, 4
12722; PWR7-NEXT:    li 4, 0
12723; PWR7-NEXT:    iselgt 6, 5, 4
12724; PWR7-NEXT:    cmpldi 3, 4
12725; PWR7-NEXT:    iselgt 3, 5, 4
12726; PWR7-NEXT:    std 6, -8(1)
12727; PWR7-NEXT:    std 3, -16(1)
12728; PWR7-NEXT:    addi 3, 1, -16
12729; PWR7-NEXT:    lxvd2x 34, 0, 3
12730; PWR7-NEXT:    blr
12731;
12732; PWR8-LABEL: ugt_4_v2i64:
12733; PWR8:       # %bb.0:
12734; PWR8-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
12735; PWR8-NEXT:    vpopcntd 2, 2
12736; PWR8-NEXT:    addi 3, 3, .LCPI106_0@toc@l
12737; PWR8-NEXT:    lxvd2x 35, 0, 3
12738; PWR8-NEXT:    vcmpgtud 2, 2, 3
12739; PWR8-NEXT:    blr
12740;
12741; PWR9-LABEL: ugt_4_v2i64:
12742; PWR9:       # %bb.0:
12743; PWR9-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
12744; PWR9-NEXT:    vpopcntd 2, 2
12745; PWR9-NEXT:    addi 3, 3, .LCPI106_0@toc@l
12746; PWR9-NEXT:    lxv 35, 0(3)
12747; PWR9-NEXT:    vcmpgtud 2, 2, 3
12748; PWR9-NEXT:    blr
12749  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12750  %3 = icmp ugt <2 x i64> %2, <i64 4, i64 4>
12751  %4 = sext <2 x i1> %3 to <2 x i64>
12752  ret <2 x i64> %4
12753}
12754
12755define <2 x i64> @ult_5_v2i64(<2 x i64> %0) {
12756; PWR5-LABEL: ult_5_v2i64:
12757; PWR5:       # %bb.0:
12758; PWR5-NEXT:    lis 5, 21845
12759; PWR5-NEXT:    lis 6, 13107
12760; PWR5-NEXT:    ori 5, 5, 21845
12761; PWR5-NEXT:    rotldi 8, 4, 63
12762; PWR5-NEXT:    rotldi 9, 3, 63
12763; PWR5-NEXT:    rldimi 5, 5, 32, 0
12764; PWR5-NEXT:    and 8, 8, 5
12765; PWR5-NEXT:    and 5, 9, 5
12766; PWR5-NEXT:    ori 6, 6, 13107
12767; PWR5-NEXT:    sub 3, 3, 5
12768; PWR5-NEXT:    rldimi 6, 6, 32, 0
12769; PWR5-NEXT:    sub 4, 4, 8
12770; PWR5-NEXT:    and 8, 3, 6
12771; PWR5-NEXT:    rotldi 3, 3, 62
12772; PWR5-NEXT:    and 3, 3, 6
12773; PWR5-NEXT:    lis 7, 3855
12774; PWR5-NEXT:    and 5, 4, 6
12775; PWR5-NEXT:    rotldi 4, 4, 62
12776; PWR5-NEXT:    add 3, 8, 3
12777; PWR5-NEXT:    lis 9, 257
12778; PWR5-NEXT:    ori 7, 7, 3855
12779; PWR5-NEXT:    and 4, 4, 6
12780; PWR5-NEXT:    rldicl 6, 3, 60, 4
12781; PWR5-NEXT:    ori 9, 9, 257
12782; PWR5-NEXT:    rldimi 7, 7, 32, 0
12783; PWR5-NEXT:    add 4, 5, 4
12784; PWR5-NEXT:    add 3, 3, 6
12785; PWR5-NEXT:    rldimi 9, 9, 32, 0
12786; PWR5-NEXT:    rldicl 5, 4, 60, 4
12787; PWR5-NEXT:    and 3, 3, 7
12788; PWR5-NEXT:    add 4, 4, 5
12789; PWR5-NEXT:    mulld 3, 3, 9
12790; PWR5-NEXT:    and 4, 4, 7
12791; PWR5-NEXT:    rldicl 3, 3, 8, 56
12792; PWR5-NEXT:    li 5, 5
12793; PWR5-NEXT:    mulld 4, 4, 9
12794; PWR5-NEXT:    subc 6, 3, 5
12795; PWR5-NEXT:    rldicl 4, 4, 8, 56
12796; PWR5-NEXT:    subfe 3, 3, 3
12797; PWR5-NEXT:    subc 5, 4, 5
12798; PWR5-NEXT:    subfe 4, 4, 4
12799; PWR5-NEXT:    blr
12800;
12801; PWR6-LABEL: ult_5_v2i64:
12802; PWR6:       # %bb.0:
12803; PWR6-NEXT:    lis 5, 21845
12804; PWR6-NEXT:    lis 6, 13107
12805; PWR6-NEXT:    ori 5, 5, 21845
12806; PWR6-NEXT:    rotldi 8, 4, 63
12807; PWR6-NEXT:    rotldi 9, 3, 63
12808; PWR6-NEXT:    rldimi 5, 5, 32, 0
12809; PWR6-NEXT:    and 8, 8, 5
12810; PWR6-NEXT:    and 5, 9, 5
12811; PWR6-NEXT:    ori 6, 6, 13107
12812; PWR6-NEXT:    sub 3, 3, 5
12813; PWR6-NEXT:    rldimi 6, 6, 32, 0
12814; PWR6-NEXT:    sub 4, 4, 8
12815; PWR6-NEXT:    and 8, 3, 6
12816; PWR6-NEXT:    rotldi 3, 3, 62
12817; PWR6-NEXT:    and 3, 3, 6
12818; PWR6-NEXT:    lis 7, 3855
12819; PWR6-NEXT:    and 5, 4, 6
12820; PWR6-NEXT:    rotldi 4, 4, 62
12821; PWR6-NEXT:    add 3, 8, 3
12822; PWR6-NEXT:    lis 9, 257
12823; PWR6-NEXT:    ori 7, 7, 3855
12824; PWR6-NEXT:    and 4, 4, 6
12825; PWR6-NEXT:    rldicl 6, 3, 60, 4
12826; PWR6-NEXT:    ori 9, 9, 257
12827; PWR6-NEXT:    rldimi 7, 7, 32, 0
12828; PWR6-NEXT:    add 4, 5, 4
12829; PWR6-NEXT:    add 3, 3, 6
12830; PWR6-NEXT:    rldimi 9, 9, 32, 0
12831; PWR6-NEXT:    rldicl 5, 4, 60, 4
12832; PWR6-NEXT:    and 3, 3, 7
12833; PWR6-NEXT:    add 4, 4, 5
12834; PWR6-NEXT:    mulld 3, 3, 9
12835; PWR6-NEXT:    and 4, 4, 7
12836; PWR6-NEXT:    rldicl 3, 3, 8, 56
12837; PWR6-NEXT:    li 5, 5
12838; PWR6-NEXT:    mulld 4, 4, 9
12839; PWR6-NEXT:    subc 6, 3, 5
12840; PWR6-NEXT:    rldicl 4, 4, 8, 56
12841; PWR6-NEXT:    subfe 3, 3, 3
12842; PWR6-NEXT:    subc 5, 4, 5
12843; PWR6-NEXT:    subfe 4, 4, 4
12844; PWR6-NEXT:    blr
12845;
12846; PWR7-LABEL: ult_5_v2i64:
12847; PWR7:       # %bb.0:
12848; PWR7-NEXT:    addi 3, 1, -32
12849; PWR7-NEXT:    li 5, -1
12850; PWR7-NEXT:    stxvd2x 34, 0, 3
12851; PWR7-NEXT:    ld 4, -24(1)
12852; PWR7-NEXT:    ld 3, -32(1)
12853; PWR7-NEXT:    popcntd 4, 4
12854; PWR7-NEXT:    popcntd 3, 3
12855; PWR7-NEXT:    cmpldi 4, 5
12856; PWR7-NEXT:    li 4, 0
12857; PWR7-NEXT:    isellt 6, 5, 4
12858; PWR7-NEXT:    cmpldi 3, 5
12859; PWR7-NEXT:    isellt 3, 5, 4
12860; PWR7-NEXT:    std 6, -8(1)
12861; PWR7-NEXT:    std 3, -16(1)
12862; PWR7-NEXT:    addi 3, 1, -16
12863; PWR7-NEXT:    lxvd2x 34, 0, 3
12864; PWR7-NEXT:    blr
12865;
12866; PWR8-LABEL: ult_5_v2i64:
12867; PWR8:       # %bb.0:
12868; PWR8-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
12869; PWR8-NEXT:    vpopcntd 2, 2
12870; PWR8-NEXT:    addi 3, 3, .LCPI107_0@toc@l
12871; PWR8-NEXT:    lxvd2x 35, 0, 3
12872; PWR8-NEXT:    vcmpgtud 2, 3, 2
12873; PWR8-NEXT:    blr
12874;
12875; PWR9-LABEL: ult_5_v2i64:
12876; PWR9:       # %bb.0:
12877; PWR9-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
12878; PWR9-NEXT:    vpopcntd 2, 2
12879; PWR9-NEXT:    addi 3, 3, .LCPI107_0@toc@l
12880; PWR9-NEXT:    lxv 35, 0(3)
12881; PWR9-NEXT:    vcmpgtud 2, 3, 2
12882; PWR9-NEXT:    blr
12883  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12884  %3 = icmp ult <2 x i64> %2, <i64 5, i64 5>
12885  %4 = sext <2 x i1> %3 to <2 x i64>
12886  ret <2 x i64> %4
12887}
12888
12889define <2 x i64> @ugt_5_v2i64(<2 x i64> %0) {
12890; PWR5-LABEL: ugt_5_v2i64:
12891; PWR5:       # %bb.0:
12892; PWR5-NEXT:    lis 5, 21845
12893; PWR5-NEXT:    lis 6, 13107
12894; PWR5-NEXT:    ori 5, 5, 21845
12895; PWR5-NEXT:    rotldi 8, 4, 63
12896; PWR5-NEXT:    rotldi 9, 3, 63
12897; PWR5-NEXT:    rldimi 5, 5, 32, 0
12898; PWR5-NEXT:    and 8, 8, 5
12899; PWR5-NEXT:    and 5, 9, 5
12900; PWR5-NEXT:    ori 6, 6, 13107
12901; PWR5-NEXT:    sub 3, 3, 5
12902; PWR5-NEXT:    rldimi 6, 6, 32, 0
12903; PWR5-NEXT:    sub 4, 4, 8
12904; PWR5-NEXT:    and 8, 3, 6
12905; PWR5-NEXT:    rotldi 3, 3, 62
12906; PWR5-NEXT:    and 3, 3, 6
12907; PWR5-NEXT:    lis 7, 3855
12908; PWR5-NEXT:    and 5, 4, 6
12909; PWR5-NEXT:    rotldi 4, 4, 62
12910; PWR5-NEXT:    add 3, 8, 3
12911; PWR5-NEXT:    lis 9, 257
12912; PWR5-NEXT:    ori 7, 7, 3855
12913; PWR5-NEXT:    and 4, 4, 6
12914; PWR5-NEXT:    rldicl 6, 3, 60, 4
12915; PWR5-NEXT:    ori 9, 9, 257
12916; PWR5-NEXT:    rldimi 7, 7, 32, 0
12917; PWR5-NEXT:    add 4, 5, 4
12918; PWR5-NEXT:    add 3, 3, 6
12919; PWR5-NEXT:    rldimi 9, 9, 32, 0
12920; PWR5-NEXT:    rldicl 5, 4, 60, 4
12921; PWR5-NEXT:    and 3, 3, 7
12922; PWR5-NEXT:    add 4, 4, 5
12923; PWR5-NEXT:    mulld 3, 3, 9
12924; PWR5-NEXT:    and 4, 4, 7
12925; PWR5-NEXT:    rldicl 3, 3, 8, 56
12926; PWR5-NEXT:    mulld 4, 4, 9
12927; PWR5-NEXT:    li 5, 5
12928; PWR5-NEXT:    subfic 3, 3, 5
12929; PWR5-NEXT:    rldicl 4, 4, 8, 56
12930; PWR5-NEXT:    subfe 3, 5, 5
12931; PWR5-NEXT:    subfic 4, 4, 5
12932; PWR5-NEXT:    subfe 4, 5, 5
12933; PWR5-NEXT:    blr
12934;
12935; PWR6-LABEL: ugt_5_v2i64:
12936; PWR6:       # %bb.0:
12937; PWR6-NEXT:    lis 5, 21845
12938; PWR6-NEXT:    lis 6, 13107
12939; PWR6-NEXT:    ori 5, 5, 21845
12940; PWR6-NEXT:    rotldi 8, 4, 63
12941; PWR6-NEXT:    rotldi 9, 3, 63
12942; PWR6-NEXT:    rldimi 5, 5, 32, 0
12943; PWR6-NEXT:    and 8, 8, 5
12944; PWR6-NEXT:    and 5, 9, 5
12945; PWR6-NEXT:    ori 6, 6, 13107
12946; PWR6-NEXT:    sub 3, 3, 5
12947; PWR6-NEXT:    rldimi 6, 6, 32, 0
12948; PWR6-NEXT:    sub 4, 4, 8
12949; PWR6-NEXT:    and 8, 3, 6
12950; PWR6-NEXT:    rotldi 3, 3, 62
12951; PWR6-NEXT:    and 3, 3, 6
12952; PWR6-NEXT:    lis 7, 3855
12953; PWR6-NEXT:    and 5, 4, 6
12954; PWR6-NEXT:    rotldi 4, 4, 62
12955; PWR6-NEXT:    add 3, 8, 3
12956; PWR6-NEXT:    lis 9, 257
12957; PWR6-NEXT:    ori 7, 7, 3855
12958; PWR6-NEXT:    and 4, 4, 6
12959; PWR6-NEXT:    rldicl 6, 3, 60, 4
12960; PWR6-NEXT:    ori 9, 9, 257
12961; PWR6-NEXT:    rldimi 7, 7, 32, 0
12962; PWR6-NEXT:    add 4, 5, 4
12963; PWR6-NEXT:    add 3, 3, 6
12964; PWR6-NEXT:    rldimi 9, 9, 32, 0
12965; PWR6-NEXT:    rldicl 5, 4, 60, 4
12966; PWR6-NEXT:    and 3, 3, 7
12967; PWR6-NEXT:    add 4, 4, 5
12968; PWR6-NEXT:    mulld 3, 3, 9
12969; PWR6-NEXT:    and 4, 4, 7
12970; PWR6-NEXT:    rldicl 3, 3, 8, 56
12971; PWR6-NEXT:    mulld 4, 4, 9
12972; PWR6-NEXT:    li 5, 5
12973; PWR6-NEXT:    subfic 3, 3, 5
12974; PWR6-NEXT:    rldicl 4, 4, 8, 56
12975; PWR6-NEXT:    subfe 3, 5, 5
12976; PWR6-NEXT:    subfic 4, 4, 5
12977; PWR6-NEXT:    subfe 4, 5, 5
12978; PWR6-NEXT:    blr
12979;
12980; PWR7-LABEL: ugt_5_v2i64:
12981; PWR7:       # %bb.0:
12982; PWR7-NEXT:    addi 3, 1, -32
12983; PWR7-NEXT:    li 5, -1
12984; PWR7-NEXT:    stxvd2x 34, 0, 3
12985; PWR7-NEXT:    ld 4, -24(1)
12986; PWR7-NEXT:    ld 3, -32(1)
12987; PWR7-NEXT:    popcntd 4, 4
12988; PWR7-NEXT:    popcntd 3, 3
12989; PWR7-NEXT:    cmpldi 4, 5
12990; PWR7-NEXT:    li 4, 0
12991; PWR7-NEXT:    iselgt 6, 5, 4
12992; PWR7-NEXT:    cmpldi 3, 5
12993; PWR7-NEXT:    iselgt 3, 5, 4
12994; PWR7-NEXT:    std 6, -8(1)
12995; PWR7-NEXT:    std 3, -16(1)
12996; PWR7-NEXT:    addi 3, 1, -16
12997; PWR7-NEXT:    lxvd2x 34, 0, 3
12998; PWR7-NEXT:    blr
12999;
13000; PWR8-LABEL: ugt_5_v2i64:
13001; PWR8:       # %bb.0:
13002; PWR8-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
13003; PWR8-NEXT:    vpopcntd 2, 2
13004; PWR8-NEXT:    addi 3, 3, .LCPI108_0@toc@l
13005; PWR8-NEXT:    lxvd2x 35, 0, 3
13006; PWR8-NEXT:    vcmpgtud 2, 2, 3
13007; PWR8-NEXT:    blr
13008;
13009; PWR9-LABEL: ugt_5_v2i64:
13010; PWR9:       # %bb.0:
13011; PWR9-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
13012; PWR9-NEXT:    vpopcntd 2, 2
13013; PWR9-NEXT:    addi 3, 3, .LCPI108_0@toc@l
13014; PWR9-NEXT:    lxv 35, 0(3)
13015; PWR9-NEXT:    vcmpgtud 2, 2, 3
13016; PWR9-NEXT:    blr
13017  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13018  %3 = icmp ugt <2 x i64> %2, <i64 5, i64 5>
13019  %4 = sext <2 x i1> %3 to <2 x i64>
13020  ret <2 x i64> %4
13021}
13022
13023define <2 x i64> @ult_6_v2i64(<2 x i64> %0) {
13024; PWR5-LABEL: ult_6_v2i64:
13025; PWR5:       # %bb.0:
13026; PWR5-NEXT:    lis 5, 21845
13027; PWR5-NEXT:    lis 6, 13107
13028; PWR5-NEXT:    ori 5, 5, 21845
13029; PWR5-NEXT:    rotldi 8, 4, 63
13030; PWR5-NEXT:    rotldi 9, 3, 63
13031; PWR5-NEXT:    rldimi 5, 5, 32, 0
13032; PWR5-NEXT:    and 8, 8, 5
13033; PWR5-NEXT:    and 5, 9, 5
13034; PWR5-NEXT:    ori 6, 6, 13107
13035; PWR5-NEXT:    sub 3, 3, 5
13036; PWR5-NEXT:    rldimi 6, 6, 32, 0
13037; PWR5-NEXT:    sub 4, 4, 8
13038; PWR5-NEXT:    and 8, 3, 6
13039; PWR5-NEXT:    rotldi 3, 3, 62
13040; PWR5-NEXT:    and 3, 3, 6
13041; PWR5-NEXT:    lis 7, 3855
13042; PWR5-NEXT:    and 5, 4, 6
13043; PWR5-NEXT:    rotldi 4, 4, 62
13044; PWR5-NEXT:    add 3, 8, 3
13045; PWR5-NEXT:    lis 9, 257
13046; PWR5-NEXT:    ori 7, 7, 3855
13047; PWR5-NEXT:    and 4, 4, 6
13048; PWR5-NEXT:    rldicl 6, 3, 60, 4
13049; PWR5-NEXT:    ori 9, 9, 257
13050; PWR5-NEXT:    rldimi 7, 7, 32, 0
13051; PWR5-NEXT:    add 4, 5, 4
13052; PWR5-NEXT:    add 3, 3, 6
13053; PWR5-NEXT:    rldimi 9, 9, 32, 0
13054; PWR5-NEXT:    rldicl 5, 4, 60, 4
13055; PWR5-NEXT:    and 3, 3, 7
13056; PWR5-NEXT:    add 4, 4, 5
13057; PWR5-NEXT:    mulld 3, 3, 9
13058; PWR5-NEXT:    and 4, 4, 7
13059; PWR5-NEXT:    rldicl 3, 3, 8, 56
13060; PWR5-NEXT:    li 5, 6
13061; PWR5-NEXT:    mulld 4, 4, 9
13062; PWR5-NEXT:    subc 6, 3, 5
13063; PWR5-NEXT:    rldicl 4, 4, 8, 56
13064; PWR5-NEXT:    subfe 3, 3, 3
13065; PWR5-NEXT:    subc 5, 4, 5
13066; PWR5-NEXT:    subfe 4, 4, 4
13067; PWR5-NEXT:    blr
13068;
13069; PWR6-LABEL: ult_6_v2i64:
13070; PWR6:       # %bb.0:
13071; PWR6-NEXT:    lis 5, 21845
13072; PWR6-NEXT:    lis 6, 13107
13073; PWR6-NEXT:    ori 5, 5, 21845
13074; PWR6-NEXT:    rotldi 8, 4, 63
13075; PWR6-NEXT:    rotldi 9, 3, 63
13076; PWR6-NEXT:    rldimi 5, 5, 32, 0
13077; PWR6-NEXT:    and 8, 8, 5
13078; PWR6-NEXT:    and 5, 9, 5
13079; PWR6-NEXT:    ori 6, 6, 13107
13080; PWR6-NEXT:    sub 3, 3, 5
13081; PWR6-NEXT:    rldimi 6, 6, 32, 0
13082; PWR6-NEXT:    sub 4, 4, 8
13083; PWR6-NEXT:    and 8, 3, 6
13084; PWR6-NEXT:    rotldi 3, 3, 62
13085; PWR6-NEXT:    and 3, 3, 6
13086; PWR6-NEXT:    lis 7, 3855
13087; PWR6-NEXT:    and 5, 4, 6
13088; PWR6-NEXT:    rotldi 4, 4, 62
13089; PWR6-NEXT:    add 3, 8, 3
13090; PWR6-NEXT:    lis 9, 257
13091; PWR6-NEXT:    ori 7, 7, 3855
13092; PWR6-NEXT:    and 4, 4, 6
13093; PWR6-NEXT:    rldicl 6, 3, 60, 4
13094; PWR6-NEXT:    ori 9, 9, 257
13095; PWR6-NEXT:    rldimi 7, 7, 32, 0
13096; PWR6-NEXT:    add 4, 5, 4
13097; PWR6-NEXT:    add 3, 3, 6
13098; PWR6-NEXT:    rldimi 9, 9, 32, 0
13099; PWR6-NEXT:    rldicl 5, 4, 60, 4
13100; PWR6-NEXT:    and 3, 3, 7
13101; PWR6-NEXT:    add 4, 4, 5
13102; PWR6-NEXT:    mulld 3, 3, 9
13103; PWR6-NEXT:    and 4, 4, 7
13104; PWR6-NEXT:    rldicl 3, 3, 8, 56
13105; PWR6-NEXT:    li 5, 6
13106; PWR6-NEXT:    mulld 4, 4, 9
13107; PWR6-NEXT:    subc 6, 3, 5
13108; PWR6-NEXT:    rldicl 4, 4, 8, 56
13109; PWR6-NEXT:    subfe 3, 3, 3
13110; PWR6-NEXT:    subc 5, 4, 5
13111; PWR6-NEXT:    subfe 4, 4, 4
13112; PWR6-NEXT:    blr
13113;
13114; PWR7-LABEL: ult_6_v2i64:
13115; PWR7:       # %bb.0:
13116; PWR7-NEXT:    addi 3, 1, -32
13117; PWR7-NEXT:    li 5, -1
13118; PWR7-NEXT:    stxvd2x 34, 0, 3
13119; PWR7-NEXT:    ld 4, -24(1)
13120; PWR7-NEXT:    ld 3, -32(1)
13121; PWR7-NEXT:    popcntd 4, 4
13122; PWR7-NEXT:    popcntd 3, 3
13123; PWR7-NEXT:    cmpldi 4, 6
13124; PWR7-NEXT:    li 4, 0
13125; PWR7-NEXT:    isellt 6, 5, 4
13126; PWR7-NEXT:    cmpldi 3, 6
13127; PWR7-NEXT:    isellt 3, 5, 4
13128; PWR7-NEXT:    std 6, -8(1)
13129; PWR7-NEXT:    std 3, -16(1)
13130; PWR7-NEXT:    addi 3, 1, -16
13131; PWR7-NEXT:    lxvd2x 34, 0, 3
13132; PWR7-NEXT:    blr
13133;
13134; PWR8-LABEL: ult_6_v2i64:
13135; PWR8:       # %bb.0:
13136; PWR8-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
13137; PWR8-NEXT:    vpopcntd 2, 2
13138; PWR8-NEXT:    addi 3, 3, .LCPI109_0@toc@l
13139; PWR8-NEXT:    lxvd2x 35, 0, 3
13140; PWR8-NEXT:    vcmpgtud 2, 3, 2
13141; PWR8-NEXT:    blr
13142;
13143; PWR9-LABEL: ult_6_v2i64:
13144; PWR9:       # %bb.0:
13145; PWR9-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
13146; PWR9-NEXT:    vpopcntd 2, 2
13147; PWR9-NEXT:    addi 3, 3, .LCPI109_0@toc@l
13148; PWR9-NEXT:    lxv 35, 0(3)
13149; PWR9-NEXT:    vcmpgtud 2, 3, 2
13150; PWR9-NEXT:    blr
13151  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13152  %3 = icmp ult <2 x i64> %2, <i64 6, i64 6>
13153  %4 = sext <2 x i1> %3 to <2 x i64>
13154  ret <2 x i64> %4
13155}
13156
13157define <2 x i64> @ugt_6_v2i64(<2 x i64> %0) {
13158; PWR5-LABEL: ugt_6_v2i64:
13159; PWR5:       # %bb.0:
13160; PWR5-NEXT:    lis 5, 21845
13161; PWR5-NEXT:    lis 6, 13107
13162; PWR5-NEXT:    ori 5, 5, 21845
13163; PWR5-NEXT:    rotldi 8, 4, 63
13164; PWR5-NEXT:    rotldi 9, 3, 63
13165; PWR5-NEXT:    rldimi 5, 5, 32, 0
13166; PWR5-NEXT:    and 8, 8, 5
13167; PWR5-NEXT:    and 5, 9, 5
13168; PWR5-NEXT:    ori 6, 6, 13107
13169; PWR5-NEXT:    sub 3, 3, 5
13170; PWR5-NEXT:    rldimi 6, 6, 32, 0
13171; PWR5-NEXT:    sub 4, 4, 8
13172; PWR5-NEXT:    and 8, 3, 6
13173; PWR5-NEXT:    rotldi 3, 3, 62
13174; PWR5-NEXT:    and 3, 3, 6
13175; PWR5-NEXT:    lis 7, 3855
13176; PWR5-NEXT:    and 5, 4, 6
13177; PWR5-NEXT:    rotldi 4, 4, 62
13178; PWR5-NEXT:    add 3, 8, 3
13179; PWR5-NEXT:    lis 9, 257
13180; PWR5-NEXT:    ori 7, 7, 3855
13181; PWR5-NEXT:    and 4, 4, 6
13182; PWR5-NEXT:    rldicl 6, 3, 60, 4
13183; PWR5-NEXT:    ori 9, 9, 257
13184; PWR5-NEXT:    rldimi 7, 7, 32, 0
13185; PWR5-NEXT:    add 4, 5, 4
13186; PWR5-NEXT:    add 3, 3, 6
13187; PWR5-NEXT:    rldimi 9, 9, 32, 0
13188; PWR5-NEXT:    rldicl 5, 4, 60, 4
13189; PWR5-NEXT:    and 3, 3, 7
13190; PWR5-NEXT:    add 4, 4, 5
13191; PWR5-NEXT:    mulld 3, 3, 9
13192; PWR5-NEXT:    and 4, 4, 7
13193; PWR5-NEXT:    rldicl 3, 3, 8, 56
13194; PWR5-NEXT:    mulld 4, 4, 9
13195; PWR5-NEXT:    li 5, 6
13196; PWR5-NEXT:    subfic 3, 3, 6
13197; PWR5-NEXT:    rldicl 4, 4, 8, 56
13198; PWR5-NEXT:    subfe 3, 5, 5
13199; PWR5-NEXT:    subfic 4, 4, 6
13200; PWR5-NEXT:    subfe 4, 5, 5
13201; PWR5-NEXT:    blr
13202;
13203; PWR6-LABEL: ugt_6_v2i64:
13204; PWR6:       # %bb.0:
13205; PWR6-NEXT:    lis 5, 21845
13206; PWR6-NEXT:    lis 6, 13107
13207; PWR6-NEXT:    ori 5, 5, 21845
13208; PWR6-NEXT:    rotldi 8, 4, 63
13209; PWR6-NEXT:    rotldi 9, 3, 63
13210; PWR6-NEXT:    rldimi 5, 5, 32, 0
13211; PWR6-NEXT:    and 8, 8, 5
13212; PWR6-NEXT:    and 5, 9, 5
13213; PWR6-NEXT:    ori 6, 6, 13107
13214; PWR6-NEXT:    sub 3, 3, 5
13215; PWR6-NEXT:    rldimi 6, 6, 32, 0
13216; PWR6-NEXT:    sub 4, 4, 8
13217; PWR6-NEXT:    and 8, 3, 6
13218; PWR6-NEXT:    rotldi 3, 3, 62
13219; PWR6-NEXT:    and 3, 3, 6
13220; PWR6-NEXT:    lis 7, 3855
13221; PWR6-NEXT:    and 5, 4, 6
13222; PWR6-NEXT:    rotldi 4, 4, 62
13223; PWR6-NEXT:    add 3, 8, 3
13224; PWR6-NEXT:    lis 9, 257
13225; PWR6-NEXT:    ori 7, 7, 3855
13226; PWR6-NEXT:    and 4, 4, 6
13227; PWR6-NEXT:    rldicl 6, 3, 60, 4
13228; PWR6-NEXT:    ori 9, 9, 257
13229; PWR6-NEXT:    rldimi 7, 7, 32, 0
13230; PWR6-NEXT:    add 4, 5, 4
13231; PWR6-NEXT:    add 3, 3, 6
13232; PWR6-NEXT:    rldimi 9, 9, 32, 0
13233; PWR6-NEXT:    rldicl 5, 4, 60, 4
13234; PWR6-NEXT:    and 3, 3, 7
13235; PWR6-NEXT:    add 4, 4, 5
13236; PWR6-NEXT:    mulld 3, 3, 9
13237; PWR6-NEXT:    and 4, 4, 7
13238; PWR6-NEXT:    rldicl 3, 3, 8, 56
13239; PWR6-NEXT:    mulld 4, 4, 9
13240; PWR6-NEXT:    li 5, 6
13241; PWR6-NEXT:    subfic 3, 3, 6
13242; PWR6-NEXT:    rldicl 4, 4, 8, 56
13243; PWR6-NEXT:    subfe 3, 5, 5
13244; PWR6-NEXT:    subfic 4, 4, 6
13245; PWR6-NEXT:    subfe 4, 5, 5
13246; PWR6-NEXT:    blr
13247;
13248; PWR7-LABEL: ugt_6_v2i64:
13249; PWR7:       # %bb.0:
13250; PWR7-NEXT:    addi 3, 1, -32
13251; PWR7-NEXT:    li 5, -1
13252; PWR7-NEXT:    stxvd2x 34, 0, 3
13253; PWR7-NEXT:    ld 4, -24(1)
13254; PWR7-NEXT:    ld 3, -32(1)
13255; PWR7-NEXT:    popcntd 4, 4
13256; PWR7-NEXT:    popcntd 3, 3
13257; PWR7-NEXT:    cmpldi 4, 6
13258; PWR7-NEXT:    li 4, 0
13259; PWR7-NEXT:    iselgt 6, 5, 4
13260; PWR7-NEXT:    cmpldi 3, 6
13261; PWR7-NEXT:    iselgt 3, 5, 4
13262; PWR7-NEXT:    std 6, -8(1)
13263; PWR7-NEXT:    std 3, -16(1)
13264; PWR7-NEXT:    addi 3, 1, -16
13265; PWR7-NEXT:    lxvd2x 34, 0, 3
13266; PWR7-NEXT:    blr
13267;
13268; PWR8-LABEL: ugt_6_v2i64:
13269; PWR8:       # %bb.0:
13270; PWR8-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
13271; PWR8-NEXT:    vpopcntd 2, 2
13272; PWR8-NEXT:    addi 3, 3, .LCPI110_0@toc@l
13273; PWR8-NEXT:    lxvd2x 35, 0, 3
13274; PWR8-NEXT:    vcmpgtud 2, 2, 3
13275; PWR8-NEXT:    blr
13276;
13277; PWR9-LABEL: ugt_6_v2i64:
13278; PWR9:       # %bb.0:
13279; PWR9-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
13280; PWR9-NEXT:    vpopcntd 2, 2
13281; PWR9-NEXT:    addi 3, 3, .LCPI110_0@toc@l
13282; PWR9-NEXT:    lxv 35, 0(3)
13283; PWR9-NEXT:    vcmpgtud 2, 2, 3
13284; PWR9-NEXT:    blr
13285  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13286  %3 = icmp ugt <2 x i64> %2, <i64 6, i64 6>
13287  %4 = sext <2 x i1> %3 to <2 x i64>
13288  ret <2 x i64> %4
13289}
13290
13291define <2 x i64> @ult_7_v2i64(<2 x i64> %0) {
13292; PWR5-LABEL: ult_7_v2i64:
13293; PWR5:       # %bb.0:
13294; PWR5-NEXT:    lis 5, 21845
13295; PWR5-NEXT:    lis 6, 13107
13296; PWR5-NEXT:    ori 5, 5, 21845
13297; PWR5-NEXT:    rotldi 8, 4, 63
13298; PWR5-NEXT:    rotldi 9, 3, 63
13299; PWR5-NEXT:    rldimi 5, 5, 32, 0
13300; PWR5-NEXT:    and 8, 8, 5
13301; PWR5-NEXT:    and 5, 9, 5
13302; PWR5-NEXT:    ori 6, 6, 13107
13303; PWR5-NEXT:    sub 3, 3, 5
13304; PWR5-NEXT:    rldimi 6, 6, 32, 0
13305; PWR5-NEXT:    sub 4, 4, 8
13306; PWR5-NEXT:    and 8, 3, 6
13307; PWR5-NEXT:    rotldi 3, 3, 62
13308; PWR5-NEXT:    and 3, 3, 6
13309; PWR5-NEXT:    lis 7, 3855
13310; PWR5-NEXT:    and 5, 4, 6
13311; PWR5-NEXT:    rotldi 4, 4, 62
13312; PWR5-NEXT:    add 3, 8, 3
13313; PWR5-NEXT:    lis 9, 257
13314; PWR5-NEXT:    ori 7, 7, 3855
13315; PWR5-NEXT:    and 4, 4, 6
13316; PWR5-NEXT:    rldicl 6, 3, 60, 4
13317; PWR5-NEXT:    ori 9, 9, 257
13318; PWR5-NEXT:    rldimi 7, 7, 32, 0
13319; PWR5-NEXT:    add 4, 5, 4
13320; PWR5-NEXT:    add 3, 3, 6
13321; PWR5-NEXT:    rldimi 9, 9, 32, 0
13322; PWR5-NEXT:    rldicl 5, 4, 60, 4
13323; PWR5-NEXT:    and 3, 3, 7
13324; PWR5-NEXT:    add 4, 4, 5
13325; PWR5-NEXT:    mulld 3, 3, 9
13326; PWR5-NEXT:    and 4, 4, 7
13327; PWR5-NEXT:    rldicl 3, 3, 8, 56
13328; PWR5-NEXT:    li 5, 7
13329; PWR5-NEXT:    mulld 4, 4, 9
13330; PWR5-NEXT:    subc 6, 3, 5
13331; PWR5-NEXT:    rldicl 4, 4, 8, 56
13332; PWR5-NEXT:    subfe 3, 3, 3
13333; PWR5-NEXT:    subc 5, 4, 5
13334; PWR5-NEXT:    subfe 4, 4, 4
13335; PWR5-NEXT:    blr
13336;
13337; PWR6-LABEL: ult_7_v2i64:
13338; PWR6:       # %bb.0:
13339; PWR6-NEXT:    lis 5, 21845
13340; PWR6-NEXT:    lis 6, 13107
13341; PWR6-NEXT:    ori 5, 5, 21845
13342; PWR6-NEXT:    rotldi 8, 4, 63
13343; PWR6-NEXT:    rotldi 9, 3, 63
13344; PWR6-NEXT:    rldimi 5, 5, 32, 0
13345; PWR6-NEXT:    and 8, 8, 5
13346; PWR6-NEXT:    and 5, 9, 5
13347; PWR6-NEXT:    ori 6, 6, 13107
13348; PWR6-NEXT:    sub 3, 3, 5
13349; PWR6-NEXT:    rldimi 6, 6, 32, 0
13350; PWR6-NEXT:    sub 4, 4, 8
13351; PWR6-NEXT:    and 8, 3, 6
13352; PWR6-NEXT:    rotldi 3, 3, 62
13353; PWR6-NEXT:    and 3, 3, 6
13354; PWR6-NEXT:    lis 7, 3855
13355; PWR6-NEXT:    and 5, 4, 6
13356; PWR6-NEXT:    rotldi 4, 4, 62
13357; PWR6-NEXT:    add 3, 8, 3
13358; PWR6-NEXT:    lis 9, 257
13359; PWR6-NEXT:    ori 7, 7, 3855
13360; PWR6-NEXT:    and 4, 4, 6
13361; PWR6-NEXT:    rldicl 6, 3, 60, 4
13362; PWR6-NEXT:    ori 9, 9, 257
13363; PWR6-NEXT:    rldimi 7, 7, 32, 0
13364; PWR6-NEXT:    add 4, 5, 4
13365; PWR6-NEXT:    add 3, 3, 6
13366; PWR6-NEXT:    rldimi 9, 9, 32, 0
13367; PWR6-NEXT:    rldicl 5, 4, 60, 4
13368; PWR6-NEXT:    and 3, 3, 7
13369; PWR6-NEXT:    add 4, 4, 5
13370; PWR6-NEXT:    mulld 3, 3, 9
13371; PWR6-NEXT:    and 4, 4, 7
13372; PWR6-NEXT:    rldicl 3, 3, 8, 56
13373; PWR6-NEXT:    li 5, 7
13374; PWR6-NEXT:    mulld 4, 4, 9
13375; PWR6-NEXT:    subc 6, 3, 5
13376; PWR6-NEXT:    rldicl 4, 4, 8, 56
13377; PWR6-NEXT:    subfe 3, 3, 3
13378; PWR6-NEXT:    subc 5, 4, 5
13379; PWR6-NEXT:    subfe 4, 4, 4
13380; PWR6-NEXT:    blr
13381;
13382; PWR7-LABEL: ult_7_v2i64:
13383; PWR7:       # %bb.0:
13384; PWR7-NEXT:    addi 3, 1, -32
13385; PWR7-NEXT:    li 5, -1
13386; PWR7-NEXT:    stxvd2x 34, 0, 3
13387; PWR7-NEXT:    ld 4, -24(1)
13388; PWR7-NEXT:    ld 3, -32(1)
13389; PWR7-NEXT:    popcntd 4, 4
13390; PWR7-NEXT:    popcntd 3, 3
13391; PWR7-NEXT:    cmpldi 4, 7
13392; PWR7-NEXT:    li 4, 0
13393; PWR7-NEXT:    isellt 6, 5, 4
13394; PWR7-NEXT:    cmpldi 3, 7
13395; PWR7-NEXT:    isellt 3, 5, 4
13396; PWR7-NEXT:    std 6, -8(1)
13397; PWR7-NEXT:    std 3, -16(1)
13398; PWR7-NEXT:    addi 3, 1, -16
13399; PWR7-NEXT:    lxvd2x 34, 0, 3
13400; PWR7-NEXT:    blr
13401;
13402; PWR8-LABEL: ult_7_v2i64:
13403; PWR8:       # %bb.0:
13404; PWR8-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
13405; PWR8-NEXT:    vpopcntd 2, 2
13406; PWR8-NEXT:    addi 3, 3, .LCPI111_0@toc@l
13407; PWR8-NEXT:    lxvd2x 35, 0, 3
13408; PWR8-NEXT:    vcmpgtud 2, 3, 2
13409; PWR8-NEXT:    blr
13410;
13411; PWR9-LABEL: ult_7_v2i64:
13412; PWR9:       # %bb.0:
13413; PWR9-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
13414; PWR9-NEXT:    vpopcntd 2, 2
13415; PWR9-NEXT:    addi 3, 3, .LCPI111_0@toc@l
13416; PWR9-NEXT:    lxv 35, 0(3)
13417; PWR9-NEXT:    vcmpgtud 2, 3, 2
13418; PWR9-NEXT:    blr
13419  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13420  %3 = icmp ult <2 x i64> %2, <i64 7, i64 7>
13421  %4 = sext <2 x i1> %3 to <2 x i64>
13422  ret <2 x i64> %4
13423}
13424
13425define <2 x i64> @ugt_7_v2i64(<2 x i64> %0) {
13426; PWR5-LABEL: ugt_7_v2i64:
13427; PWR5:       # %bb.0:
13428; PWR5-NEXT:    lis 5, 21845
13429; PWR5-NEXT:    lis 6, 13107
13430; PWR5-NEXT:    ori 5, 5, 21845
13431; PWR5-NEXT:    rotldi 8, 4, 63
13432; PWR5-NEXT:    rotldi 9, 3, 63
13433; PWR5-NEXT:    rldimi 5, 5, 32, 0
13434; PWR5-NEXT:    and 8, 8, 5
13435; PWR5-NEXT:    and 5, 9, 5
13436; PWR5-NEXT:    ori 6, 6, 13107
13437; PWR5-NEXT:    sub 3, 3, 5
13438; PWR5-NEXT:    rldimi 6, 6, 32, 0
13439; PWR5-NEXT:    sub 4, 4, 8
13440; PWR5-NEXT:    and 8, 3, 6
13441; PWR5-NEXT:    rotldi 3, 3, 62
13442; PWR5-NEXT:    and 3, 3, 6
13443; PWR5-NEXT:    lis 7, 3855
13444; PWR5-NEXT:    and 5, 4, 6
13445; PWR5-NEXT:    rotldi 4, 4, 62
13446; PWR5-NEXT:    add 3, 8, 3
13447; PWR5-NEXT:    lis 9, 257
13448; PWR5-NEXT:    ori 7, 7, 3855
13449; PWR5-NEXT:    and 4, 4, 6
13450; PWR5-NEXT:    rldicl 6, 3, 60, 4
13451; PWR5-NEXT:    ori 9, 9, 257
13452; PWR5-NEXT:    rldimi 7, 7, 32, 0
13453; PWR5-NEXT:    add 4, 5, 4
13454; PWR5-NEXT:    add 3, 3, 6
13455; PWR5-NEXT:    rldimi 9, 9, 32, 0
13456; PWR5-NEXT:    rldicl 5, 4, 60, 4
13457; PWR5-NEXT:    and 3, 3, 7
13458; PWR5-NEXT:    add 4, 4, 5
13459; PWR5-NEXT:    mulld 3, 3, 9
13460; PWR5-NEXT:    and 4, 4, 7
13461; PWR5-NEXT:    rldicl 3, 3, 8, 56
13462; PWR5-NEXT:    mulld 4, 4, 9
13463; PWR5-NEXT:    li 5, 7
13464; PWR5-NEXT:    subfic 3, 3, 7
13465; PWR5-NEXT:    rldicl 4, 4, 8, 56
13466; PWR5-NEXT:    subfe 3, 5, 5
13467; PWR5-NEXT:    subfic 4, 4, 7
13468; PWR5-NEXT:    subfe 4, 5, 5
13469; PWR5-NEXT:    blr
13470;
13471; PWR6-LABEL: ugt_7_v2i64:
13472; PWR6:       # %bb.0:
13473; PWR6-NEXT:    lis 5, 21845
13474; PWR6-NEXT:    lis 6, 13107
13475; PWR6-NEXT:    ori 5, 5, 21845
13476; PWR6-NEXT:    rotldi 8, 4, 63
13477; PWR6-NEXT:    rotldi 9, 3, 63
13478; PWR6-NEXT:    rldimi 5, 5, 32, 0
13479; PWR6-NEXT:    and 8, 8, 5
13480; PWR6-NEXT:    and 5, 9, 5
13481; PWR6-NEXT:    ori 6, 6, 13107
13482; PWR6-NEXT:    sub 3, 3, 5
13483; PWR6-NEXT:    rldimi 6, 6, 32, 0
13484; PWR6-NEXT:    sub 4, 4, 8
13485; PWR6-NEXT:    and 8, 3, 6
13486; PWR6-NEXT:    rotldi 3, 3, 62
13487; PWR6-NEXT:    and 3, 3, 6
13488; PWR6-NEXT:    lis 7, 3855
13489; PWR6-NEXT:    and 5, 4, 6
13490; PWR6-NEXT:    rotldi 4, 4, 62
13491; PWR6-NEXT:    add 3, 8, 3
13492; PWR6-NEXT:    lis 9, 257
13493; PWR6-NEXT:    ori 7, 7, 3855
13494; PWR6-NEXT:    and 4, 4, 6
13495; PWR6-NEXT:    rldicl 6, 3, 60, 4
13496; PWR6-NEXT:    ori 9, 9, 257
13497; PWR6-NEXT:    rldimi 7, 7, 32, 0
13498; PWR6-NEXT:    add 4, 5, 4
13499; PWR6-NEXT:    add 3, 3, 6
13500; PWR6-NEXT:    rldimi 9, 9, 32, 0
13501; PWR6-NEXT:    rldicl 5, 4, 60, 4
13502; PWR6-NEXT:    and 3, 3, 7
13503; PWR6-NEXT:    add 4, 4, 5
13504; PWR6-NEXT:    mulld 3, 3, 9
13505; PWR6-NEXT:    and 4, 4, 7
13506; PWR6-NEXT:    rldicl 3, 3, 8, 56
13507; PWR6-NEXT:    mulld 4, 4, 9
13508; PWR6-NEXT:    li 5, 7
13509; PWR6-NEXT:    subfic 3, 3, 7
13510; PWR6-NEXT:    rldicl 4, 4, 8, 56
13511; PWR6-NEXT:    subfe 3, 5, 5
13512; PWR6-NEXT:    subfic 4, 4, 7
13513; PWR6-NEXT:    subfe 4, 5, 5
13514; PWR6-NEXT:    blr
13515;
13516; PWR7-LABEL: ugt_7_v2i64:
13517; PWR7:       # %bb.0:
13518; PWR7-NEXT:    addi 3, 1, -32
13519; PWR7-NEXT:    li 5, -1
13520; PWR7-NEXT:    stxvd2x 34, 0, 3
13521; PWR7-NEXT:    ld 4, -24(1)
13522; PWR7-NEXT:    ld 3, -32(1)
13523; PWR7-NEXT:    popcntd 4, 4
13524; PWR7-NEXT:    popcntd 3, 3
13525; PWR7-NEXT:    cmpldi 4, 7
13526; PWR7-NEXT:    li 4, 0
13527; PWR7-NEXT:    iselgt 6, 5, 4
13528; PWR7-NEXT:    cmpldi 3, 7
13529; PWR7-NEXT:    iselgt 3, 5, 4
13530; PWR7-NEXT:    std 6, -8(1)
13531; PWR7-NEXT:    std 3, -16(1)
13532; PWR7-NEXT:    addi 3, 1, -16
13533; PWR7-NEXT:    lxvd2x 34, 0, 3
13534; PWR7-NEXT:    blr
13535;
13536; PWR8-LABEL: ugt_7_v2i64:
13537; PWR8:       # %bb.0:
13538; PWR8-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
13539; PWR8-NEXT:    vpopcntd 2, 2
13540; PWR8-NEXT:    addi 3, 3, .LCPI112_0@toc@l
13541; PWR8-NEXT:    lxvd2x 35, 0, 3
13542; PWR8-NEXT:    vcmpgtud 2, 2, 3
13543; PWR8-NEXT:    blr
13544;
13545; PWR9-LABEL: ugt_7_v2i64:
13546; PWR9:       # %bb.0:
13547; PWR9-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
13548; PWR9-NEXT:    vpopcntd 2, 2
13549; PWR9-NEXT:    addi 3, 3, .LCPI112_0@toc@l
13550; PWR9-NEXT:    lxv 35, 0(3)
13551; PWR9-NEXT:    vcmpgtud 2, 2, 3
13552; PWR9-NEXT:    blr
13553  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13554  %3 = icmp ugt <2 x i64> %2, <i64 7, i64 7>
13555  %4 = sext <2 x i1> %3 to <2 x i64>
13556  ret <2 x i64> %4
13557}
13558
13559define <2 x i64> @ult_8_v2i64(<2 x i64> %0) {
13560; PWR5-LABEL: ult_8_v2i64:
13561; PWR5:       # %bb.0:
13562; PWR5-NEXT:    lis 5, 21845
13563; PWR5-NEXT:    lis 6, 13107
13564; PWR5-NEXT:    ori 5, 5, 21845
13565; PWR5-NEXT:    rotldi 8, 4, 63
13566; PWR5-NEXT:    rotldi 9, 3, 63
13567; PWR5-NEXT:    rldimi 5, 5, 32, 0
13568; PWR5-NEXT:    and 8, 8, 5
13569; PWR5-NEXT:    and 5, 9, 5
13570; PWR5-NEXT:    ori 6, 6, 13107
13571; PWR5-NEXT:    sub 3, 3, 5
13572; PWR5-NEXT:    rldimi 6, 6, 32, 0
13573; PWR5-NEXT:    sub 4, 4, 8
13574; PWR5-NEXT:    and 8, 3, 6
13575; PWR5-NEXT:    rotldi 3, 3, 62
13576; PWR5-NEXT:    and 3, 3, 6
13577; PWR5-NEXT:    lis 7, 3855
13578; PWR5-NEXT:    and 5, 4, 6
13579; PWR5-NEXT:    rotldi 4, 4, 62
13580; PWR5-NEXT:    add 3, 8, 3
13581; PWR5-NEXT:    lis 9, 257
13582; PWR5-NEXT:    ori 7, 7, 3855
13583; PWR5-NEXT:    and 4, 4, 6
13584; PWR5-NEXT:    rldicl 6, 3, 60, 4
13585; PWR5-NEXT:    ori 9, 9, 257
13586; PWR5-NEXT:    rldimi 7, 7, 32, 0
13587; PWR5-NEXT:    add 4, 5, 4
13588; PWR5-NEXT:    add 3, 3, 6
13589; PWR5-NEXT:    rldimi 9, 9, 32, 0
13590; PWR5-NEXT:    rldicl 5, 4, 60, 4
13591; PWR5-NEXT:    and 3, 3, 7
13592; PWR5-NEXT:    add 4, 4, 5
13593; PWR5-NEXT:    mulld 3, 3, 9
13594; PWR5-NEXT:    and 4, 4, 7
13595; PWR5-NEXT:    rldicl 3, 3, 8, 56
13596; PWR5-NEXT:    li 5, 8
13597; PWR5-NEXT:    mulld 4, 4, 9
13598; PWR5-NEXT:    subc 6, 3, 5
13599; PWR5-NEXT:    rldicl 4, 4, 8, 56
13600; PWR5-NEXT:    subfe 3, 3, 3
13601; PWR5-NEXT:    subc 5, 4, 5
13602; PWR5-NEXT:    subfe 4, 4, 4
13603; PWR5-NEXT:    blr
13604;
13605; PWR6-LABEL: ult_8_v2i64:
13606; PWR6:       # %bb.0:
13607; PWR6-NEXT:    lis 5, 21845
13608; PWR6-NEXT:    lis 6, 13107
13609; PWR6-NEXT:    ori 5, 5, 21845
13610; PWR6-NEXT:    rotldi 8, 4, 63
13611; PWR6-NEXT:    rotldi 9, 3, 63
13612; PWR6-NEXT:    rldimi 5, 5, 32, 0
13613; PWR6-NEXT:    and 8, 8, 5
13614; PWR6-NEXT:    and 5, 9, 5
13615; PWR6-NEXT:    ori 6, 6, 13107
13616; PWR6-NEXT:    sub 3, 3, 5
13617; PWR6-NEXT:    rldimi 6, 6, 32, 0
13618; PWR6-NEXT:    sub 4, 4, 8
13619; PWR6-NEXT:    and 8, 3, 6
13620; PWR6-NEXT:    rotldi 3, 3, 62
13621; PWR6-NEXT:    and 3, 3, 6
13622; PWR6-NEXT:    lis 7, 3855
13623; PWR6-NEXT:    and 5, 4, 6
13624; PWR6-NEXT:    rotldi 4, 4, 62
13625; PWR6-NEXT:    add 3, 8, 3
13626; PWR6-NEXT:    lis 9, 257
13627; PWR6-NEXT:    ori 7, 7, 3855
13628; PWR6-NEXT:    and 4, 4, 6
13629; PWR6-NEXT:    rldicl 6, 3, 60, 4
13630; PWR6-NEXT:    ori 9, 9, 257
13631; PWR6-NEXT:    rldimi 7, 7, 32, 0
13632; PWR6-NEXT:    add 4, 5, 4
13633; PWR6-NEXT:    add 3, 3, 6
13634; PWR6-NEXT:    rldimi 9, 9, 32, 0
13635; PWR6-NEXT:    rldicl 5, 4, 60, 4
13636; PWR6-NEXT:    and 3, 3, 7
13637; PWR6-NEXT:    add 4, 4, 5
13638; PWR6-NEXT:    mulld 3, 3, 9
13639; PWR6-NEXT:    and 4, 4, 7
13640; PWR6-NEXT:    rldicl 3, 3, 8, 56
13641; PWR6-NEXT:    li 5, 8
13642; PWR6-NEXT:    mulld 4, 4, 9
13643; PWR6-NEXT:    subc 6, 3, 5
13644; PWR6-NEXT:    rldicl 4, 4, 8, 56
13645; PWR6-NEXT:    subfe 3, 3, 3
13646; PWR6-NEXT:    subc 5, 4, 5
13647; PWR6-NEXT:    subfe 4, 4, 4
13648; PWR6-NEXT:    blr
13649;
13650; PWR7-LABEL: ult_8_v2i64:
13651; PWR7:       # %bb.0:
13652; PWR7-NEXT:    addi 3, 1, -32
13653; PWR7-NEXT:    li 5, -1
13654; PWR7-NEXT:    stxvd2x 34, 0, 3
13655; PWR7-NEXT:    ld 4, -24(1)
13656; PWR7-NEXT:    ld 3, -32(1)
13657; PWR7-NEXT:    popcntd 4, 4
13658; PWR7-NEXT:    popcntd 3, 3
13659; PWR7-NEXT:    cmpldi 4, 8
13660; PWR7-NEXT:    li 4, 0
13661; PWR7-NEXT:    isellt 6, 5, 4
13662; PWR7-NEXT:    cmpldi 3, 8
13663; PWR7-NEXT:    isellt 3, 5, 4
13664; PWR7-NEXT:    std 6, -8(1)
13665; PWR7-NEXT:    std 3, -16(1)
13666; PWR7-NEXT:    addi 3, 1, -16
13667; PWR7-NEXT:    lxvd2x 34, 0, 3
13668; PWR7-NEXT:    blr
13669;
13670; PWR8-LABEL: ult_8_v2i64:
13671; PWR8:       # %bb.0:
13672; PWR8-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
13673; PWR8-NEXT:    vpopcntd 2, 2
13674; PWR8-NEXT:    addi 3, 3, .LCPI113_0@toc@l
13675; PWR8-NEXT:    lxvd2x 35, 0, 3
13676; PWR8-NEXT:    vcmpgtud 2, 3, 2
13677; PWR8-NEXT:    blr
13678;
13679; PWR9-LABEL: ult_8_v2i64:
13680; PWR9:       # %bb.0:
13681; PWR9-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
13682; PWR9-NEXT:    vpopcntd 2, 2
13683; PWR9-NEXT:    addi 3, 3, .LCPI113_0@toc@l
13684; PWR9-NEXT:    lxv 35, 0(3)
13685; PWR9-NEXT:    vcmpgtud 2, 3, 2
13686; PWR9-NEXT:    blr
13687  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13688  %3 = icmp ult <2 x i64> %2, <i64 8, i64 8>
13689  %4 = sext <2 x i1> %3 to <2 x i64>
13690  ret <2 x i64> %4
13691}
13692
13693define <2 x i64> @ugt_8_v2i64(<2 x i64> %0) {
13694; PWR5-LABEL: ugt_8_v2i64:
13695; PWR5:       # %bb.0:
13696; PWR5-NEXT:    lis 5, 21845
13697; PWR5-NEXT:    lis 6, 13107
13698; PWR5-NEXT:    ori 5, 5, 21845
13699; PWR5-NEXT:    rotldi 8, 4, 63
13700; PWR5-NEXT:    rotldi 9, 3, 63
13701; PWR5-NEXT:    rldimi 5, 5, 32, 0
13702; PWR5-NEXT:    and 8, 8, 5
13703; PWR5-NEXT:    and 5, 9, 5
13704; PWR5-NEXT:    ori 6, 6, 13107
13705; PWR5-NEXT:    sub 3, 3, 5
13706; PWR5-NEXT:    rldimi 6, 6, 32, 0
13707; PWR5-NEXT:    sub 4, 4, 8
13708; PWR5-NEXT:    and 8, 3, 6
13709; PWR5-NEXT:    rotldi 3, 3, 62
13710; PWR5-NEXT:    and 3, 3, 6
13711; PWR5-NEXT:    lis 7, 3855
13712; PWR5-NEXT:    and 5, 4, 6
13713; PWR5-NEXT:    rotldi 4, 4, 62
13714; PWR5-NEXT:    add 3, 8, 3
13715; PWR5-NEXT:    lis 9, 257
13716; PWR5-NEXT:    ori 7, 7, 3855
13717; PWR5-NEXT:    and 4, 4, 6
13718; PWR5-NEXT:    rldicl 6, 3, 60, 4
13719; PWR5-NEXT:    ori 9, 9, 257
13720; PWR5-NEXT:    rldimi 7, 7, 32, 0
13721; PWR5-NEXT:    add 4, 5, 4
13722; PWR5-NEXT:    add 3, 3, 6
13723; PWR5-NEXT:    rldimi 9, 9, 32, 0
13724; PWR5-NEXT:    rldicl 5, 4, 60, 4
13725; PWR5-NEXT:    and 3, 3, 7
13726; PWR5-NEXT:    add 4, 4, 5
13727; PWR5-NEXT:    mulld 3, 3, 9
13728; PWR5-NEXT:    and 4, 4, 7
13729; PWR5-NEXT:    rldicl 3, 3, 8, 56
13730; PWR5-NEXT:    mulld 4, 4, 9
13731; PWR5-NEXT:    li 5, 8
13732; PWR5-NEXT:    subfic 3, 3, 8
13733; PWR5-NEXT:    rldicl 4, 4, 8, 56
13734; PWR5-NEXT:    subfe 3, 5, 5
13735; PWR5-NEXT:    subfic 4, 4, 8
13736; PWR5-NEXT:    subfe 4, 5, 5
13737; PWR5-NEXT:    blr
13738;
13739; PWR6-LABEL: ugt_8_v2i64:
13740; PWR6:       # %bb.0:
13741; PWR6-NEXT:    lis 5, 21845
13742; PWR6-NEXT:    lis 6, 13107
13743; PWR6-NEXT:    ori 5, 5, 21845
13744; PWR6-NEXT:    rotldi 8, 4, 63
13745; PWR6-NEXT:    rotldi 9, 3, 63
13746; PWR6-NEXT:    rldimi 5, 5, 32, 0
13747; PWR6-NEXT:    and 8, 8, 5
13748; PWR6-NEXT:    and 5, 9, 5
13749; PWR6-NEXT:    ori 6, 6, 13107
13750; PWR6-NEXT:    sub 3, 3, 5
13751; PWR6-NEXT:    rldimi 6, 6, 32, 0
13752; PWR6-NEXT:    sub 4, 4, 8
13753; PWR6-NEXT:    and 8, 3, 6
13754; PWR6-NEXT:    rotldi 3, 3, 62
13755; PWR6-NEXT:    and 3, 3, 6
13756; PWR6-NEXT:    lis 7, 3855
13757; PWR6-NEXT:    and 5, 4, 6
13758; PWR6-NEXT:    rotldi 4, 4, 62
13759; PWR6-NEXT:    add 3, 8, 3
13760; PWR6-NEXT:    lis 9, 257
13761; PWR6-NEXT:    ori 7, 7, 3855
13762; PWR6-NEXT:    and 4, 4, 6
13763; PWR6-NEXT:    rldicl 6, 3, 60, 4
13764; PWR6-NEXT:    ori 9, 9, 257
13765; PWR6-NEXT:    rldimi 7, 7, 32, 0
13766; PWR6-NEXT:    add 4, 5, 4
13767; PWR6-NEXT:    add 3, 3, 6
13768; PWR6-NEXT:    rldimi 9, 9, 32, 0
13769; PWR6-NEXT:    rldicl 5, 4, 60, 4
13770; PWR6-NEXT:    and 3, 3, 7
13771; PWR6-NEXT:    add 4, 4, 5
13772; PWR6-NEXT:    mulld 3, 3, 9
13773; PWR6-NEXT:    and 4, 4, 7
13774; PWR6-NEXT:    rldicl 3, 3, 8, 56
13775; PWR6-NEXT:    mulld 4, 4, 9
13776; PWR6-NEXT:    li 5, 8
13777; PWR6-NEXT:    subfic 3, 3, 8
13778; PWR6-NEXT:    rldicl 4, 4, 8, 56
13779; PWR6-NEXT:    subfe 3, 5, 5
13780; PWR6-NEXT:    subfic 4, 4, 8
13781; PWR6-NEXT:    subfe 4, 5, 5
13782; PWR6-NEXT:    blr
13783;
13784; PWR7-LABEL: ugt_8_v2i64:
13785; PWR7:       # %bb.0:
13786; PWR7-NEXT:    addi 3, 1, -32
13787; PWR7-NEXT:    li 5, -1
13788; PWR7-NEXT:    stxvd2x 34, 0, 3
13789; PWR7-NEXT:    ld 4, -24(1)
13790; PWR7-NEXT:    ld 3, -32(1)
13791; PWR7-NEXT:    popcntd 4, 4
13792; PWR7-NEXT:    popcntd 3, 3
13793; PWR7-NEXT:    cmpldi 4, 8
13794; PWR7-NEXT:    li 4, 0
13795; PWR7-NEXT:    iselgt 6, 5, 4
13796; PWR7-NEXT:    cmpldi 3, 8
13797; PWR7-NEXT:    iselgt 3, 5, 4
13798; PWR7-NEXT:    std 6, -8(1)
13799; PWR7-NEXT:    std 3, -16(1)
13800; PWR7-NEXT:    addi 3, 1, -16
13801; PWR7-NEXT:    lxvd2x 34, 0, 3
13802; PWR7-NEXT:    blr
13803;
13804; PWR8-LABEL: ugt_8_v2i64:
13805; PWR8:       # %bb.0:
13806; PWR8-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
13807; PWR8-NEXT:    vpopcntd 2, 2
13808; PWR8-NEXT:    addi 3, 3, .LCPI114_0@toc@l
13809; PWR8-NEXT:    lxvd2x 35, 0, 3
13810; PWR8-NEXT:    vcmpgtud 2, 2, 3
13811; PWR8-NEXT:    blr
13812;
13813; PWR9-LABEL: ugt_8_v2i64:
13814; PWR9:       # %bb.0:
13815; PWR9-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
13816; PWR9-NEXT:    vpopcntd 2, 2
13817; PWR9-NEXT:    addi 3, 3, .LCPI114_0@toc@l
13818; PWR9-NEXT:    lxv 35, 0(3)
13819; PWR9-NEXT:    vcmpgtud 2, 2, 3
13820; PWR9-NEXT:    blr
13821  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13822  %3 = icmp ugt <2 x i64> %2, <i64 8, i64 8>
13823  %4 = sext <2 x i1> %3 to <2 x i64>
13824  ret <2 x i64> %4
13825}
13826
13827define <2 x i64> @ult_9_v2i64(<2 x i64> %0) {
13828; PWR5-LABEL: ult_9_v2i64:
13829; PWR5:       # %bb.0:
13830; PWR5-NEXT:    lis 5, 21845
13831; PWR5-NEXT:    lis 6, 13107
13832; PWR5-NEXT:    ori 5, 5, 21845
13833; PWR5-NEXT:    rotldi 8, 4, 63
13834; PWR5-NEXT:    rotldi 9, 3, 63
13835; PWR5-NEXT:    rldimi 5, 5, 32, 0
13836; PWR5-NEXT:    and 8, 8, 5
13837; PWR5-NEXT:    and 5, 9, 5
13838; PWR5-NEXT:    ori 6, 6, 13107
13839; PWR5-NEXT:    sub 3, 3, 5
13840; PWR5-NEXT:    rldimi 6, 6, 32, 0
13841; PWR5-NEXT:    sub 4, 4, 8
13842; PWR5-NEXT:    and 8, 3, 6
13843; PWR5-NEXT:    rotldi 3, 3, 62
13844; PWR5-NEXT:    and 3, 3, 6
13845; PWR5-NEXT:    lis 7, 3855
13846; PWR5-NEXT:    and 5, 4, 6
13847; PWR5-NEXT:    rotldi 4, 4, 62
13848; PWR5-NEXT:    add 3, 8, 3
13849; PWR5-NEXT:    lis 9, 257
13850; PWR5-NEXT:    ori 7, 7, 3855
13851; PWR5-NEXT:    and 4, 4, 6
13852; PWR5-NEXT:    rldicl 6, 3, 60, 4
13853; PWR5-NEXT:    ori 9, 9, 257
13854; PWR5-NEXT:    rldimi 7, 7, 32, 0
13855; PWR5-NEXT:    add 4, 5, 4
13856; PWR5-NEXT:    add 3, 3, 6
13857; PWR5-NEXT:    rldimi 9, 9, 32, 0
13858; PWR5-NEXT:    rldicl 5, 4, 60, 4
13859; PWR5-NEXT:    and 3, 3, 7
13860; PWR5-NEXT:    add 4, 4, 5
13861; PWR5-NEXT:    mulld 3, 3, 9
13862; PWR5-NEXT:    and 4, 4, 7
13863; PWR5-NEXT:    rldicl 3, 3, 8, 56
13864; PWR5-NEXT:    li 5, 9
13865; PWR5-NEXT:    mulld 4, 4, 9
13866; PWR5-NEXT:    subc 6, 3, 5
13867; PWR5-NEXT:    rldicl 4, 4, 8, 56
13868; PWR5-NEXT:    subfe 3, 3, 3
13869; PWR5-NEXT:    subc 5, 4, 5
13870; PWR5-NEXT:    subfe 4, 4, 4
13871; PWR5-NEXT:    blr
13872;
13873; PWR6-LABEL: ult_9_v2i64:
13874; PWR6:       # %bb.0:
13875; PWR6-NEXT:    lis 5, 21845
13876; PWR6-NEXT:    lis 6, 13107
13877; PWR6-NEXT:    ori 5, 5, 21845
13878; PWR6-NEXT:    rotldi 8, 4, 63
13879; PWR6-NEXT:    rotldi 9, 3, 63
13880; PWR6-NEXT:    rldimi 5, 5, 32, 0
13881; PWR6-NEXT:    and 8, 8, 5
13882; PWR6-NEXT:    and 5, 9, 5
13883; PWR6-NEXT:    ori 6, 6, 13107
13884; PWR6-NEXT:    sub 3, 3, 5
13885; PWR6-NEXT:    rldimi 6, 6, 32, 0
13886; PWR6-NEXT:    sub 4, 4, 8
13887; PWR6-NEXT:    and 8, 3, 6
13888; PWR6-NEXT:    rotldi 3, 3, 62
13889; PWR6-NEXT:    and 3, 3, 6
13890; PWR6-NEXT:    lis 7, 3855
13891; PWR6-NEXT:    and 5, 4, 6
13892; PWR6-NEXT:    rotldi 4, 4, 62
13893; PWR6-NEXT:    add 3, 8, 3
13894; PWR6-NEXT:    lis 9, 257
13895; PWR6-NEXT:    ori 7, 7, 3855
13896; PWR6-NEXT:    and 4, 4, 6
13897; PWR6-NEXT:    rldicl 6, 3, 60, 4
13898; PWR6-NEXT:    ori 9, 9, 257
13899; PWR6-NEXT:    rldimi 7, 7, 32, 0
13900; PWR6-NEXT:    add 4, 5, 4
13901; PWR6-NEXT:    add 3, 3, 6
13902; PWR6-NEXT:    rldimi 9, 9, 32, 0
13903; PWR6-NEXT:    rldicl 5, 4, 60, 4
13904; PWR6-NEXT:    and 3, 3, 7
13905; PWR6-NEXT:    add 4, 4, 5
13906; PWR6-NEXT:    mulld 3, 3, 9
13907; PWR6-NEXT:    and 4, 4, 7
13908; PWR6-NEXT:    rldicl 3, 3, 8, 56
13909; PWR6-NEXT:    li 5, 9
13910; PWR6-NEXT:    mulld 4, 4, 9
13911; PWR6-NEXT:    subc 6, 3, 5
13912; PWR6-NEXT:    rldicl 4, 4, 8, 56
13913; PWR6-NEXT:    subfe 3, 3, 3
13914; PWR6-NEXT:    subc 5, 4, 5
13915; PWR6-NEXT:    subfe 4, 4, 4
13916; PWR6-NEXT:    blr
13917;
13918; PWR7-LABEL: ult_9_v2i64:
13919; PWR7:       # %bb.0:
13920; PWR7-NEXT:    addi 3, 1, -32
13921; PWR7-NEXT:    li 5, -1
13922; PWR7-NEXT:    stxvd2x 34, 0, 3
13923; PWR7-NEXT:    ld 4, -24(1)
13924; PWR7-NEXT:    ld 3, -32(1)
13925; PWR7-NEXT:    popcntd 4, 4
13926; PWR7-NEXT:    popcntd 3, 3
13927; PWR7-NEXT:    cmpldi 4, 9
13928; PWR7-NEXT:    li 4, 0
13929; PWR7-NEXT:    isellt 6, 5, 4
13930; PWR7-NEXT:    cmpldi 3, 9
13931; PWR7-NEXT:    isellt 3, 5, 4
13932; PWR7-NEXT:    std 6, -8(1)
13933; PWR7-NEXT:    std 3, -16(1)
13934; PWR7-NEXT:    addi 3, 1, -16
13935; PWR7-NEXT:    lxvd2x 34, 0, 3
13936; PWR7-NEXT:    blr
13937;
13938; PWR8-LABEL: ult_9_v2i64:
13939; PWR8:       # %bb.0:
13940; PWR8-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
13941; PWR8-NEXT:    vpopcntd 2, 2
13942; PWR8-NEXT:    addi 3, 3, .LCPI115_0@toc@l
13943; PWR8-NEXT:    lxvd2x 35, 0, 3
13944; PWR8-NEXT:    vcmpgtud 2, 3, 2
13945; PWR8-NEXT:    blr
13946;
13947; PWR9-LABEL: ult_9_v2i64:
13948; PWR9:       # %bb.0:
13949; PWR9-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
13950; PWR9-NEXT:    vpopcntd 2, 2
13951; PWR9-NEXT:    addi 3, 3, .LCPI115_0@toc@l
13952; PWR9-NEXT:    lxv 35, 0(3)
13953; PWR9-NEXT:    vcmpgtud 2, 3, 2
13954; PWR9-NEXT:    blr
13955  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13956  %3 = icmp ult <2 x i64> %2, <i64 9, i64 9>
13957  %4 = sext <2 x i1> %3 to <2 x i64>
13958  ret <2 x i64> %4
13959}
13960
13961define <2 x i64> @ugt_9_v2i64(<2 x i64> %0) {
13962; PWR5-LABEL: ugt_9_v2i64:
13963; PWR5:       # %bb.0:
13964; PWR5-NEXT:    lis 5, 21845
13965; PWR5-NEXT:    lis 6, 13107
13966; PWR5-NEXT:    ori 5, 5, 21845
13967; PWR5-NEXT:    rotldi 8, 4, 63
13968; PWR5-NEXT:    rotldi 9, 3, 63
13969; PWR5-NEXT:    rldimi 5, 5, 32, 0
13970; PWR5-NEXT:    and 8, 8, 5
13971; PWR5-NEXT:    and 5, 9, 5
13972; PWR5-NEXT:    ori 6, 6, 13107
13973; PWR5-NEXT:    sub 3, 3, 5
13974; PWR5-NEXT:    rldimi 6, 6, 32, 0
13975; PWR5-NEXT:    sub 4, 4, 8
13976; PWR5-NEXT:    and 8, 3, 6
13977; PWR5-NEXT:    rotldi 3, 3, 62
13978; PWR5-NEXT:    and 3, 3, 6
13979; PWR5-NEXT:    lis 7, 3855
13980; PWR5-NEXT:    and 5, 4, 6
13981; PWR5-NEXT:    rotldi 4, 4, 62
13982; PWR5-NEXT:    add 3, 8, 3
13983; PWR5-NEXT:    lis 9, 257
13984; PWR5-NEXT:    ori 7, 7, 3855
13985; PWR5-NEXT:    and 4, 4, 6
13986; PWR5-NEXT:    rldicl 6, 3, 60, 4
13987; PWR5-NEXT:    ori 9, 9, 257
13988; PWR5-NEXT:    rldimi 7, 7, 32, 0
13989; PWR5-NEXT:    add 4, 5, 4
13990; PWR5-NEXT:    add 3, 3, 6
13991; PWR5-NEXT:    rldimi 9, 9, 32, 0
13992; PWR5-NEXT:    rldicl 5, 4, 60, 4
13993; PWR5-NEXT:    and 3, 3, 7
13994; PWR5-NEXT:    add 4, 4, 5
13995; PWR5-NEXT:    mulld 3, 3, 9
13996; PWR5-NEXT:    and 4, 4, 7
13997; PWR5-NEXT:    rldicl 3, 3, 8, 56
13998; PWR5-NEXT:    mulld 4, 4, 9
13999; PWR5-NEXT:    li 5, 9
14000; PWR5-NEXT:    subfic 3, 3, 9
14001; PWR5-NEXT:    rldicl 4, 4, 8, 56
14002; PWR5-NEXT:    subfe 3, 5, 5
14003; PWR5-NEXT:    subfic 4, 4, 9
14004; PWR5-NEXT:    subfe 4, 5, 5
14005; PWR5-NEXT:    blr
14006;
14007; PWR6-LABEL: ugt_9_v2i64:
14008; PWR6:       # %bb.0:
14009; PWR6-NEXT:    lis 5, 21845
14010; PWR6-NEXT:    lis 6, 13107
14011; PWR6-NEXT:    ori 5, 5, 21845
14012; PWR6-NEXT:    rotldi 8, 4, 63
14013; PWR6-NEXT:    rotldi 9, 3, 63
14014; PWR6-NEXT:    rldimi 5, 5, 32, 0
14015; PWR6-NEXT:    and 8, 8, 5
14016; PWR6-NEXT:    and 5, 9, 5
14017; PWR6-NEXT:    ori 6, 6, 13107
14018; PWR6-NEXT:    sub 3, 3, 5
14019; PWR6-NEXT:    rldimi 6, 6, 32, 0
14020; PWR6-NEXT:    sub 4, 4, 8
14021; PWR6-NEXT:    and 8, 3, 6
14022; PWR6-NEXT:    rotldi 3, 3, 62
14023; PWR6-NEXT:    and 3, 3, 6
14024; PWR6-NEXT:    lis 7, 3855
14025; PWR6-NEXT:    and 5, 4, 6
14026; PWR6-NEXT:    rotldi 4, 4, 62
14027; PWR6-NEXT:    add 3, 8, 3
14028; PWR6-NEXT:    lis 9, 257
14029; PWR6-NEXT:    ori 7, 7, 3855
14030; PWR6-NEXT:    and 4, 4, 6
14031; PWR6-NEXT:    rldicl 6, 3, 60, 4
14032; PWR6-NEXT:    ori 9, 9, 257
14033; PWR6-NEXT:    rldimi 7, 7, 32, 0
14034; PWR6-NEXT:    add 4, 5, 4
14035; PWR6-NEXT:    add 3, 3, 6
14036; PWR6-NEXT:    rldimi 9, 9, 32, 0
14037; PWR6-NEXT:    rldicl 5, 4, 60, 4
14038; PWR6-NEXT:    and 3, 3, 7
14039; PWR6-NEXT:    add 4, 4, 5
14040; PWR6-NEXT:    mulld 3, 3, 9
14041; PWR6-NEXT:    and 4, 4, 7
14042; PWR6-NEXT:    rldicl 3, 3, 8, 56
14043; PWR6-NEXT:    mulld 4, 4, 9
14044; PWR6-NEXT:    li 5, 9
14045; PWR6-NEXT:    subfic 3, 3, 9
14046; PWR6-NEXT:    rldicl 4, 4, 8, 56
14047; PWR6-NEXT:    subfe 3, 5, 5
14048; PWR6-NEXT:    subfic 4, 4, 9
14049; PWR6-NEXT:    subfe 4, 5, 5
14050; PWR6-NEXT:    blr
14051;
14052; PWR7-LABEL: ugt_9_v2i64:
14053; PWR7:       # %bb.0:
14054; PWR7-NEXT:    addi 3, 1, -32
14055; PWR7-NEXT:    li 5, -1
14056; PWR7-NEXT:    stxvd2x 34, 0, 3
14057; PWR7-NEXT:    ld 4, -24(1)
14058; PWR7-NEXT:    ld 3, -32(1)
14059; PWR7-NEXT:    popcntd 4, 4
14060; PWR7-NEXT:    popcntd 3, 3
14061; PWR7-NEXT:    cmpldi 4, 9
14062; PWR7-NEXT:    li 4, 0
14063; PWR7-NEXT:    iselgt 6, 5, 4
14064; PWR7-NEXT:    cmpldi 3, 9
14065; PWR7-NEXT:    iselgt 3, 5, 4
14066; PWR7-NEXT:    std 6, -8(1)
14067; PWR7-NEXT:    std 3, -16(1)
14068; PWR7-NEXT:    addi 3, 1, -16
14069; PWR7-NEXT:    lxvd2x 34, 0, 3
14070; PWR7-NEXT:    blr
14071;
14072; PWR8-LABEL: ugt_9_v2i64:
14073; PWR8:       # %bb.0:
14074; PWR8-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
14075; PWR8-NEXT:    vpopcntd 2, 2
14076; PWR8-NEXT:    addi 3, 3, .LCPI116_0@toc@l
14077; PWR8-NEXT:    lxvd2x 35, 0, 3
14078; PWR8-NEXT:    vcmpgtud 2, 2, 3
14079; PWR8-NEXT:    blr
14080;
14081; PWR9-LABEL: ugt_9_v2i64:
14082; PWR9:       # %bb.0:
14083; PWR9-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
14084; PWR9-NEXT:    vpopcntd 2, 2
14085; PWR9-NEXT:    addi 3, 3, .LCPI116_0@toc@l
14086; PWR9-NEXT:    lxv 35, 0(3)
14087; PWR9-NEXT:    vcmpgtud 2, 2, 3
14088; PWR9-NEXT:    blr
14089  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14090  %3 = icmp ugt <2 x i64> %2, <i64 9, i64 9>
14091  %4 = sext <2 x i1> %3 to <2 x i64>
14092  ret <2 x i64> %4
14093}
14094
14095define <2 x i64> @ult_10_v2i64(<2 x i64> %0) {
14096; PWR5-LABEL: ult_10_v2i64:
14097; PWR5:       # %bb.0:
14098; PWR5-NEXT:    lis 5, 21845
14099; PWR5-NEXT:    lis 6, 13107
14100; PWR5-NEXT:    ori 5, 5, 21845
14101; PWR5-NEXT:    rotldi 8, 4, 63
14102; PWR5-NEXT:    rotldi 9, 3, 63
14103; PWR5-NEXT:    rldimi 5, 5, 32, 0
14104; PWR5-NEXT:    and 8, 8, 5
14105; PWR5-NEXT:    and 5, 9, 5
14106; PWR5-NEXT:    ori 6, 6, 13107
14107; PWR5-NEXT:    sub 3, 3, 5
14108; PWR5-NEXT:    rldimi 6, 6, 32, 0
14109; PWR5-NEXT:    sub 4, 4, 8
14110; PWR5-NEXT:    and 8, 3, 6
14111; PWR5-NEXT:    rotldi 3, 3, 62
14112; PWR5-NEXT:    and 3, 3, 6
14113; PWR5-NEXT:    lis 7, 3855
14114; PWR5-NEXT:    and 5, 4, 6
14115; PWR5-NEXT:    rotldi 4, 4, 62
14116; PWR5-NEXT:    add 3, 8, 3
14117; PWR5-NEXT:    lis 9, 257
14118; PWR5-NEXT:    ori 7, 7, 3855
14119; PWR5-NEXT:    and 4, 4, 6
14120; PWR5-NEXT:    rldicl 6, 3, 60, 4
14121; PWR5-NEXT:    ori 9, 9, 257
14122; PWR5-NEXT:    rldimi 7, 7, 32, 0
14123; PWR5-NEXT:    add 4, 5, 4
14124; PWR5-NEXT:    add 3, 3, 6
14125; PWR5-NEXT:    rldimi 9, 9, 32, 0
14126; PWR5-NEXT:    rldicl 5, 4, 60, 4
14127; PWR5-NEXT:    and 3, 3, 7
14128; PWR5-NEXT:    add 4, 4, 5
14129; PWR5-NEXT:    mulld 3, 3, 9
14130; PWR5-NEXT:    and 4, 4, 7
14131; PWR5-NEXT:    rldicl 3, 3, 8, 56
14132; PWR5-NEXT:    li 5, 10
14133; PWR5-NEXT:    mulld 4, 4, 9
14134; PWR5-NEXT:    subc 6, 3, 5
14135; PWR5-NEXT:    rldicl 4, 4, 8, 56
14136; PWR5-NEXT:    subfe 3, 3, 3
14137; PWR5-NEXT:    subc 5, 4, 5
14138; PWR5-NEXT:    subfe 4, 4, 4
14139; PWR5-NEXT:    blr
14140;
14141; PWR6-LABEL: ult_10_v2i64:
14142; PWR6:       # %bb.0:
14143; PWR6-NEXT:    lis 5, 21845
14144; PWR6-NEXT:    lis 6, 13107
14145; PWR6-NEXT:    ori 5, 5, 21845
14146; PWR6-NEXT:    rotldi 8, 4, 63
14147; PWR6-NEXT:    rotldi 9, 3, 63
14148; PWR6-NEXT:    rldimi 5, 5, 32, 0
14149; PWR6-NEXT:    and 8, 8, 5
14150; PWR6-NEXT:    and 5, 9, 5
14151; PWR6-NEXT:    ori 6, 6, 13107
14152; PWR6-NEXT:    sub 3, 3, 5
14153; PWR6-NEXT:    rldimi 6, 6, 32, 0
14154; PWR6-NEXT:    sub 4, 4, 8
14155; PWR6-NEXT:    and 8, 3, 6
14156; PWR6-NEXT:    rotldi 3, 3, 62
14157; PWR6-NEXT:    and 3, 3, 6
14158; PWR6-NEXT:    lis 7, 3855
14159; PWR6-NEXT:    and 5, 4, 6
14160; PWR6-NEXT:    rotldi 4, 4, 62
14161; PWR6-NEXT:    add 3, 8, 3
14162; PWR6-NEXT:    lis 9, 257
14163; PWR6-NEXT:    ori 7, 7, 3855
14164; PWR6-NEXT:    and 4, 4, 6
14165; PWR6-NEXT:    rldicl 6, 3, 60, 4
14166; PWR6-NEXT:    ori 9, 9, 257
14167; PWR6-NEXT:    rldimi 7, 7, 32, 0
14168; PWR6-NEXT:    add 4, 5, 4
14169; PWR6-NEXT:    add 3, 3, 6
14170; PWR6-NEXT:    rldimi 9, 9, 32, 0
14171; PWR6-NEXT:    rldicl 5, 4, 60, 4
14172; PWR6-NEXT:    and 3, 3, 7
14173; PWR6-NEXT:    add 4, 4, 5
14174; PWR6-NEXT:    mulld 3, 3, 9
14175; PWR6-NEXT:    and 4, 4, 7
14176; PWR6-NEXT:    rldicl 3, 3, 8, 56
14177; PWR6-NEXT:    li 5, 10
14178; PWR6-NEXT:    mulld 4, 4, 9
14179; PWR6-NEXT:    subc 6, 3, 5
14180; PWR6-NEXT:    rldicl 4, 4, 8, 56
14181; PWR6-NEXT:    subfe 3, 3, 3
14182; PWR6-NEXT:    subc 5, 4, 5
14183; PWR6-NEXT:    subfe 4, 4, 4
14184; PWR6-NEXT:    blr
14185;
14186; PWR7-LABEL: ult_10_v2i64:
14187; PWR7:       # %bb.0:
14188; PWR7-NEXT:    addi 3, 1, -32
14189; PWR7-NEXT:    li 5, -1
14190; PWR7-NEXT:    stxvd2x 34, 0, 3
14191; PWR7-NEXT:    ld 4, -24(1)
14192; PWR7-NEXT:    ld 3, -32(1)
14193; PWR7-NEXT:    popcntd 4, 4
14194; PWR7-NEXT:    popcntd 3, 3
14195; PWR7-NEXT:    cmpldi 4, 10
14196; PWR7-NEXT:    li 4, 0
14197; PWR7-NEXT:    isellt 6, 5, 4
14198; PWR7-NEXT:    cmpldi 3, 10
14199; PWR7-NEXT:    isellt 3, 5, 4
14200; PWR7-NEXT:    std 6, -8(1)
14201; PWR7-NEXT:    std 3, -16(1)
14202; PWR7-NEXT:    addi 3, 1, -16
14203; PWR7-NEXT:    lxvd2x 34, 0, 3
14204; PWR7-NEXT:    blr
14205;
14206; PWR8-LABEL: ult_10_v2i64:
14207; PWR8:       # %bb.0:
14208; PWR8-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
14209; PWR8-NEXT:    vpopcntd 2, 2
14210; PWR8-NEXT:    addi 3, 3, .LCPI117_0@toc@l
14211; PWR8-NEXT:    lxvd2x 35, 0, 3
14212; PWR8-NEXT:    vcmpgtud 2, 3, 2
14213; PWR8-NEXT:    blr
14214;
14215; PWR9-LABEL: ult_10_v2i64:
14216; PWR9:       # %bb.0:
14217; PWR9-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
14218; PWR9-NEXT:    vpopcntd 2, 2
14219; PWR9-NEXT:    addi 3, 3, .LCPI117_0@toc@l
14220; PWR9-NEXT:    lxv 35, 0(3)
14221; PWR9-NEXT:    vcmpgtud 2, 3, 2
14222; PWR9-NEXT:    blr
14223  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14224  %3 = icmp ult <2 x i64> %2, <i64 10, i64 10>
14225  %4 = sext <2 x i1> %3 to <2 x i64>
14226  ret <2 x i64> %4
14227}
14228
14229define <2 x i64> @ugt_10_v2i64(<2 x i64> %0) {
14230; PWR5-LABEL: ugt_10_v2i64:
14231; PWR5:       # %bb.0:
14232; PWR5-NEXT:    lis 5, 21845
14233; PWR5-NEXT:    lis 6, 13107
14234; PWR5-NEXT:    ori 5, 5, 21845
14235; PWR5-NEXT:    rotldi 8, 4, 63
14236; PWR5-NEXT:    rotldi 9, 3, 63
14237; PWR5-NEXT:    rldimi 5, 5, 32, 0
14238; PWR5-NEXT:    and 8, 8, 5
14239; PWR5-NEXT:    and 5, 9, 5
14240; PWR5-NEXT:    ori 6, 6, 13107
14241; PWR5-NEXT:    sub 3, 3, 5
14242; PWR5-NEXT:    rldimi 6, 6, 32, 0
14243; PWR5-NEXT:    sub 4, 4, 8
14244; PWR5-NEXT:    and 8, 3, 6
14245; PWR5-NEXT:    rotldi 3, 3, 62
14246; PWR5-NEXT:    and 3, 3, 6
14247; PWR5-NEXT:    lis 7, 3855
14248; PWR5-NEXT:    and 5, 4, 6
14249; PWR5-NEXT:    rotldi 4, 4, 62
14250; PWR5-NEXT:    add 3, 8, 3
14251; PWR5-NEXT:    lis 9, 257
14252; PWR5-NEXT:    ori 7, 7, 3855
14253; PWR5-NEXT:    and 4, 4, 6
14254; PWR5-NEXT:    rldicl 6, 3, 60, 4
14255; PWR5-NEXT:    ori 9, 9, 257
14256; PWR5-NEXT:    rldimi 7, 7, 32, 0
14257; PWR5-NEXT:    add 4, 5, 4
14258; PWR5-NEXT:    add 3, 3, 6
14259; PWR5-NEXT:    rldimi 9, 9, 32, 0
14260; PWR5-NEXT:    rldicl 5, 4, 60, 4
14261; PWR5-NEXT:    and 3, 3, 7
14262; PWR5-NEXT:    add 4, 4, 5
14263; PWR5-NEXT:    mulld 3, 3, 9
14264; PWR5-NEXT:    and 4, 4, 7
14265; PWR5-NEXT:    rldicl 3, 3, 8, 56
14266; PWR5-NEXT:    mulld 4, 4, 9
14267; PWR5-NEXT:    li 5, 10
14268; PWR5-NEXT:    subfic 3, 3, 10
14269; PWR5-NEXT:    rldicl 4, 4, 8, 56
14270; PWR5-NEXT:    subfe 3, 5, 5
14271; PWR5-NEXT:    subfic 4, 4, 10
14272; PWR5-NEXT:    subfe 4, 5, 5
14273; PWR5-NEXT:    blr
14274;
14275; PWR6-LABEL: ugt_10_v2i64:
14276; PWR6:       # %bb.0:
14277; PWR6-NEXT:    lis 5, 21845
14278; PWR6-NEXT:    lis 6, 13107
14279; PWR6-NEXT:    ori 5, 5, 21845
14280; PWR6-NEXT:    rotldi 8, 4, 63
14281; PWR6-NEXT:    rotldi 9, 3, 63
14282; PWR6-NEXT:    rldimi 5, 5, 32, 0
14283; PWR6-NEXT:    and 8, 8, 5
14284; PWR6-NEXT:    and 5, 9, 5
14285; PWR6-NEXT:    ori 6, 6, 13107
14286; PWR6-NEXT:    sub 3, 3, 5
14287; PWR6-NEXT:    rldimi 6, 6, 32, 0
14288; PWR6-NEXT:    sub 4, 4, 8
14289; PWR6-NEXT:    and 8, 3, 6
14290; PWR6-NEXT:    rotldi 3, 3, 62
14291; PWR6-NEXT:    and 3, 3, 6
14292; PWR6-NEXT:    lis 7, 3855
14293; PWR6-NEXT:    and 5, 4, 6
14294; PWR6-NEXT:    rotldi 4, 4, 62
14295; PWR6-NEXT:    add 3, 8, 3
14296; PWR6-NEXT:    lis 9, 257
14297; PWR6-NEXT:    ori 7, 7, 3855
14298; PWR6-NEXT:    and 4, 4, 6
14299; PWR6-NEXT:    rldicl 6, 3, 60, 4
14300; PWR6-NEXT:    ori 9, 9, 257
14301; PWR6-NEXT:    rldimi 7, 7, 32, 0
14302; PWR6-NEXT:    add 4, 5, 4
14303; PWR6-NEXT:    add 3, 3, 6
14304; PWR6-NEXT:    rldimi 9, 9, 32, 0
14305; PWR6-NEXT:    rldicl 5, 4, 60, 4
14306; PWR6-NEXT:    and 3, 3, 7
14307; PWR6-NEXT:    add 4, 4, 5
14308; PWR6-NEXT:    mulld 3, 3, 9
14309; PWR6-NEXT:    and 4, 4, 7
14310; PWR6-NEXT:    rldicl 3, 3, 8, 56
14311; PWR6-NEXT:    mulld 4, 4, 9
14312; PWR6-NEXT:    li 5, 10
14313; PWR6-NEXT:    subfic 3, 3, 10
14314; PWR6-NEXT:    rldicl 4, 4, 8, 56
14315; PWR6-NEXT:    subfe 3, 5, 5
14316; PWR6-NEXT:    subfic 4, 4, 10
14317; PWR6-NEXT:    subfe 4, 5, 5
14318; PWR6-NEXT:    blr
14319;
14320; PWR7-LABEL: ugt_10_v2i64:
14321; PWR7:       # %bb.0:
14322; PWR7-NEXT:    addi 3, 1, -32
14323; PWR7-NEXT:    li 5, -1
14324; PWR7-NEXT:    stxvd2x 34, 0, 3
14325; PWR7-NEXT:    ld 4, -24(1)
14326; PWR7-NEXT:    ld 3, -32(1)
14327; PWR7-NEXT:    popcntd 4, 4
14328; PWR7-NEXT:    popcntd 3, 3
14329; PWR7-NEXT:    cmpldi 4, 10
14330; PWR7-NEXT:    li 4, 0
14331; PWR7-NEXT:    iselgt 6, 5, 4
14332; PWR7-NEXT:    cmpldi 3, 10
14333; PWR7-NEXT:    iselgt 3, 5, 4
14334; PWR7-NEXT:    std 6, -8(1)
14335; PWR7-NEXT:    std 3, -16(1)
14336; PWR7-NEXT:    addi 3, 1, -16
14337; PWR7-NEXT:    lxvd2x 34, 0, 3
14338; PWR7-NEXT:    blr
14339;
14340; PWR8-LABEL: ugt_10_v2i64:
14341; PWR8:       # %bb.0:
14342; PWR8-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
14343; PWR8-NEXT:    vpopcntd 2, 2
14344; PWR8-NEXT:    addi 3, 3, .LCPI118_0@toc@l
14345; PWR8-NEXT:    lxvd2x 35, 0, 3
14346; PWR8-NEXT:    vcmpgtud 2, 2, 3
14347; PWR8-NEXT:    blr
14348;
14349; PWR9-LABEL: ugt_10_v2i64:
14350; PWR9:       # %bb.0:
14351; PWR9-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
14352; PWR9-NEXT:    vpopcntd 2, 2
14353; PWR9-NEXT:    addi 3, 3, .LCPI118_0@toc@l
14354; PWR9-NEXT:    lxv 35, 0(3)
14355; PWR9-NEXT:    vcmpgtud 2, 2, 3
14356; PWR9-NEXT:    blr
14357  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14358  %3 = icmp ugt <2 x i64> %2, <i64 10, i64 10>
14359  %4 = sext <2 x i1> %3 to <2 x i64>
14360  ret <2 x i64> %4
14361}
14362
14363define <2 x i64> @ult_11_v2i64(<2 x i64> %0) {
14364; PWR5-LABEL: ult_11_v2i64:
14365; PWR5:       # %bb.0:
14366; PWR5-NEXT:    lis 5, 21845
14367; PWR5-NEXT:    lis 6, 13107
14368; PWR5-NEXT:    ori 5, 5, 21845
14369; PWR5-NEXT:    rotldi 8, 4, 63
14370; PWR5-NEXT:    rotldi 9, 3, 63
14371; PWR5-NEXT:    rldimi 5, 5, 32, 0
14372; PWR5-NEXT:    and 8, 8, 5
14373; PWR5-NEXT:    and 5, 9, 5
14374; PWR5-NEXT:    ori 6, 6, 13107
14375; PWR5-NEXT:    sub 3, 3, 5
14376; PWR5-NEXT:    rldimi 6, 6, 32, 0
14377; PWR5-NEXT:    sub 4, 4, 8
14378; PWR5-NEXT:    and 8, 3, 6
14379; PWR5-NEXT:    rotldi 3, 3, 62
14380; PWR5-NEXT:    and 3, 3, 6
14381; PWR5-NEXT:    lis 7, 3855
14382; PWR5-NEXT:    and 5, 4, 6
14383; PWR5-NEXT:    rotldi 4, 4, 62
14384; PWR5-NEXT:    add 3, 8, 3
14385; PWR5-NEXT:    lis 9, 257
14386; PWR5-NEXT:    ori 7, 7, 3855
14387; PWR5-NEXT:    and 4, 4, 6
14388; PWR5-NEXT:    rldicl 6, 3, 60, 4
14389; PWR5-NEXT:    ori 9, 9, 257
14390; PWR5-NEXT:    rldimi 7, 7, 32, 0
14391; PWR5-NEXT:    add 4, 5, 4
14392; PWR5-NEXT:    add 3, 3, 6
14393; PWR5-NEXT:    rldimi 9, 9, 32, 0
14394; PWR5-NEXT:    rldicl 5, 4, 60, 4
14395; PWR5-NEXT:    and 3, 3, 7
14396; PWR5-NEXT:    add 4, 4, 5
14397; PWR5-NEXT:    mulld 3, 3, 9
14398; PWR5-NEXT:    and 4, 4, 7
14399; PWR5-NEXT:    rldicl 3, 3, 8, 56
14400; PWR5-NEXT:    li 5, 11
14401; PWR5-NEXT:    mulld 4, 4, 9
14402; PWR5-NEXT:    subc 6, 3, 5
14403; PWR5-NEXT:    rldicl 4, 4, 8, 56
14404; PWR5-NEXT:    subfe 3, 3, 3
14405; PWR5-NEXT:    subc 5, 4, 5
14406; PWR5-NEXT:    subfe 4, 4, 4
14407; PWR5-NEXT:    blr
14408;
14409; PWR6-LABEL: ult_11_v2i64:
14410; PWR6:       # %bb.0:
14411; PWR6-NEXT:    lis 5, 21845
14412; PWR6-NEXT:    lis 6, 13107
14413; PWR6-NEXT:    ori 5, 5, 21845
14414; PWR6-NEXT:    rotldi 8, 4, 63
14415; PWR6-NEXT:    rotldi 9, 3, 63
14416; PWR6-NEXT:    rldimi 5, 5, 32, 0
14417; PWR6-NEXT:    and 8, 8, 5
14418; PWR6-NEXT:    and 5, 9, 5
14419; PWR6-NEXT:    ori 6, 6, 13107
14420; PWR6-NEXT:    sub 3, 3, 5
14421; PWR6-NEXT:    rldimi 6, 6, 32, 0
14422; PWR6-NEXT:    sub 4, 4, 8
14423; PWR6-NEXT:    and 8, 3, 6
14424; PWR6-NEXT:    rotldi 3, 3, 62
14425; PWR6-NEXT:    and 3, 3, 6
14426; PWR6-NEXT:    lis 7, 3855
14427; PWR6-NEXT:    and 5, 4, 6
14428; PWR6-NEXT:    rotldi 4, 4, 62
14429; PWR6-NEXT:    add 3, 8, 3
14430; PWR6-NEXT:    lis 9, 257
14431; PWR6-NEXT:    ori 7, 7, 3855
14432; PWR6-NEXT:    and 4, 4, 6
14433; PWR6-NEXT:    rldicl 6, 3, 60, 4
14434; PWR6-NEXT:    ori 9, 9, 257
14435; PWR6-NEXT:    rldimi 7, 7, 32, 0
14436; PWR6-NEXT:    add 4, 5, 4
14437; PWR6-NEXT:    add 3, 3, 6
14438; PWR6-NEXT:    rldimi 9, 9, 32, 0
14439; PWR6-NEXT:    rldicl 5, 4, 60, 4
14440; PWR6-NEXT:    and 3, 3, 7
14441; PWR6-NEXT:    add 4, 4, 5
14442; PWR6-NEXT:    mulld 3, 3, 9
14443; PWR6-NEXT:    and 4, 4, 7
14444; PWR6-NEXT:    rldicl 3, 3, 8, 56
14445; PWR6-NEXT:    li 5, 11
14446; PWR6-NEXT:    mulld 4, 4, 9
14447; PWR6-NEXT:    subc 6, 3, 5
14448; PWR6-NEXT:    rldicl 4, 4, 8, 56
14449; PWR6-NEXT:    subfe 3, 3, 3
14450; PWR6-NEXT:    subc 5, 4, 5
14451; PWR6-NEXT:    subfe 4, 4, 4
14452; PWR6-NEXT:    blr
14453;
14454; PWR7-LABEL: ult_11_v2i64:
14455; PWR7:       # %bb.0:
14456; PWR7-NEXT:    addi 3, 1, -32
14457; PWR7-NEXT:    li 5, -1
14458; PWR7-NEXT:    stxvd2x 34, 0, 3
14459; PWR7-NEXT:    ld 4, -24(1)
14460; PWR7-NEXT:    ld 3, -32(1)
14461; PWR7-NEXT:    popcntd 4, 4
14462; PWR7-NEXT:    popcntd 3, 3
14463; PWR7-NEXT:    cmpldi 4, 11
14464; PWR7-NEXT:    li 4, 0
14465; PWR7-NEXT:    isellt 6, 5, 4
14466; PWR7-NEXT:    cmpldi 3, 11
14467; PWR7-NEXT:    isellt 3, 5, 4
14468; PWR7-NEXT:    std 6, -8(1)
14469; PWR7-NEXT:    std 3, -16(1)
14470; PWR7-NEXT:    addi 3, 1, -16
14471; PWR7-NEXT:    lxvd2x 34, 0, 3
14472; PWR7-NEXT:    blr
14473;
14474; PWR8-LABEL: ult_11_v2i64:
14475; PWR8:       # %bb.0:
14476; PWR8-NEXT:    addis 3, 2, .LCPI119_0@toc@ha
14477; PWR8-NEXT:    vpopcntd 2, 2
14478; PWR8-NEXT:    addi 3, 3, .LCPI119_0@toc@l
14479; PWR8-NEXT:    lxvd2x 35, 0, 3
14480; PWR8-NEXT:    vcmpgtud 2, 3, 2
14481; PWR8-NEXT:    blr
14482;
14483; PWR9-LABEL: ult_11_v2i64:
14484; PWR9:       # %bb.0:
14485; PWR9-NEXT:    addis 3, 2, .LCPI119_0@toc@ha
14486; PWR9-NEXT:    vpopcntd 2, 2
14487; PWR9-NEXT:    addi 3, 3, .LCPI119_0@toc@l
14488; PWR9-NEXT:    lxv 35, 0(3)
14489; PWR9-NEXT:    vcmpgtud 2, 3, 2
14490; PWR9-NEXT:    blr
14491  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14492  %3 = icmp ult <2 x i64> %2, <i64 11, i64 11>
14493  %4 = sext <2 x i1> %3 to <2 x i64>
14494  ret <2 x i64> %4
14495}
14496
14497define <2 x i64> @ugt_11_v2i64(<2 x i64> %0) {
14498; PWR5-LABEL: ugt_11_v2i64:
14499; PWR5:       # %bb.0:
14500; PWR5-NEXT:    lis 5, 21845
14501; PWR5-NEXT:    lis 6, 13107
14502; PWR5-NEXT:    ori 5, 5, 21845
14503; PWR5-NEXT:    rotldi 8, 4, 63
14504; PWR5-NEXT:    rotldi 9, 3, 63
14505; PWR5-NEXT:    rldimi 5, 5, 32, 0
14506; PWR5-NEXT:    and 8, 8, 5
14507; PWR5-NEXT:    and 5, 9, 5
14508; PWR5-NEXT:    ori 6, 6, 13107
14509; PWR5-NEXT:    sub 3, 3, 5
14510; PWR5-NEXT:    rldimi 6, 6, 32, 0
14511; PWR5-NEXT:    sub 4, 4, 8
14512; PWR5-NEXT:    and 8, 3, 6
14513; PWR5-NEXT:    rotldi 3, 3, 62
14514; PWR5-NEXT:    and 3, 3, 6
14515; PWR5-NEXT:    lis 7, 3855
14516; PWR5-NEXT:    and 5, 4, 6
14517; PWR5-NEXT:    rotldi 4, 4, 62
14518; PWR5-NEXT:    add 3, 8, 3
14519; PWR5-NEXT:    lis 9, 257
14520; PWR5-NEXT:    ori 7, 7, 3855
14521; PWR5-NEXT:    and 4, 4, 6
14522; PWR5-NEXT:    rldicl 6, 3, 60, 4
14523; PWR5-NEXT:    ori 9, 9, 257
14524; PWR5-NEXT:    rldimi 7, 7, 32, 0
14525; PWR5-NEXT:    add 4, 5, 4
14526; PWR5-NEXT:    add 3, 3, 6
14527; PWR5-NEXT:    rldimi 9, 9, 32, 0
14528; PWR5-NEXT:    rldicl 5, 4, 60, 4
14529; PWR5-NEXT:    and 3, 3, 7
14530; PWR5-NEXT:    add 4, 4, 5
14531; PWR5-NEXT:    mulld 3, 3, 9
14532; PWR5-NEXT:    and 4, 4, 7
14533; PWR5-NEXT:    rldicl 3, 3, 8, 56
14534; PWR5-NEXT:    mulld 4, 4, 9
14535; PWR5-NEXT:    li 5, 11
14536; PWR5-NEXT:    subfic 3, 3, 11
14537; PWR5-NEXT:    rldicl 4, 4, 8, 56
14538; PWR5-NEXT:    subfe 3, 5, 5
14539; PWR5-NEXT:    subfic 4, 4, 11
14540; PWR5-NEXT:    subfe 4, 5, 5
14541; PWR5-NEXT:    blr
14542;
14543; PWR6-LABEL: ugt_11_v2i64:
14544; PWR6:       # %bb.0:
14545; PWR6-NEXT:    lis 5, 21845
14546; PWR6-NEXT:    lis 6, 13107
14547; PWR6-NEXT:    ori 5, 5, 21845
14548; PWR6-NEXT:    rotldi 8, 4, 63
14549; PWR6-NEXT:    rotldi 9, 3, 63
14550; PWR6-NEXT:    rldimi 5, 5, 32, 0
14551; PWR6-NEXT:    and 8, 8, 5
14552; PWR6-NEXT:    and 5, 9, 5
14553; PWR6-NEXT:    ori 6, 6, 13107
14554; PWR6-NEXT:    sub 3, 3, 5
14555; PWR6-NEXT:    rldimi 6, 6, 32, 0
14556; PWR6-NEXT:    sub 4, 4, 8
14557; PWR6-NEXT:    and 8, 3, 6
14558; PWR6-NEXT:    rotldi 3, 3, 62
14559; PWR6-NEXT:    and 3, 3, 6
14560; PWR6-NEXT:    lis 7, 3855
14561; PWR6-NEXT:    and 5, 4, 6
14562; PWR6-NEXT:    rotldi 4, 4, 62
14563; PWR6-NEXT:    add 3, 8, 3
14564; PWR6-NEXT:    lis 9, 257
14565; PWR6-NEXT:    ori 7, 7, 3855
14566; PWR6-NEXT:    and 4, 4, 6
14567; PWR6-NEXT:    rldicl 6, 3, 60, 4
14568; PWR6-NEXT:    ori 9, 9, 257
14569; PWR6-NEXT:    rldimi 7, 7, 32, 0
14570; PWR6-NEXT:    add 4, 5, 4
14571; PWR6-NEXT:    add 3, 3, 6
14572; PWR6-NEXT:    rldimi 9, 9, 32, 0
14573; PWR6-NEXT:    rldicl 5, 4, 60, 4
14574; PWR6-NEXT:    and 3, 3, 7
14575; PWR6-NEXT:    add 4, 4, 5
14576; PWR6-NEXT:    mulld 3, 3, 9
14577; PWR6-NEXT:    and 4, 4, 7
14578; PWR6-NEXT:    rldicl 3, 3, 8, 56
14579; PWR6-NEXT:    mulld 4, 4, 9
14580; PWR6-NEXT:    li 5, 11
14581; PWR6-NEXT:    subfic 3, 3, 11
14582; PWR6-NEXT:    rldicl 4, 4, 8, 56
14583; PWR6-NEXT:    subfe 3, 5, 5
14584; PWR6-NEXT:    subfic 4, 4, 11
14585; PWR6-NEXT:    subfe 4, 5, 5
14586; PWR6-NEXT:    blr
14587;
14588; PWR7-LABEL: ugt_11_v2i64:
14589; PWR7:       # %bb.0:
14590; PWR7-NEXT:    addi 3, 1, -32
14591; PWR7-NEXT:    li 5, -1
14592; PWR7-NEXT:    stxvd2x 34, 0, 3
14593; PWR7-NEXT:    ld 4, -24(1)
14594; PWR7-NEXT:    ld 3, -32(1)
14595; PWR7-NEXT:    popcntd 4, 4
14596; PWR7-NEXT:    popcntd 3, 3
14597; PWR7-NEXT:    cmpldi 4, 11
14598; PWR7-NEXT:    li 4, 0
14599; PWR7-NEXT:    iselgt 6, 5, 4
14600; PWR7-NEXT:    cmpldi 3, 11
14601; PWR7-NEXT:    iselgt 3, 5, 4
14602; PWR7-NEXT:    std 6, -8(1)
14603; PWR7-NEXT:    std 3, -16(1)
14604; PWR7-NEXT:    addi 3, 1, -16
14605; PWR7-NEXT:    lxvd2x 34, 0, 3
14606; PWR7-NEXT:    blr
14607;
14608; PWR8-LABEL: ugt_11_v2i64:
14609; PWR8:       # %bb.0:
14610; PWR8-NEXT:    addis 3, 2, .LCPI120_0@toc@ha
14611; PWR8-NEXT:    vpopcntd 2, 2
14612; PWR8-NEXT:    addi 3, 3, .LCPI120_0@toc@l
14613; PWR8-NEXT:    lxvd2x 35, 0, 3
14614; PWR8-NEXT:    vcmpgtud 2, 2, 3
14615; PWR8-NEXT:    blr
14616;
14617; PWR9-LABEL: ugt_11_v2i64:
14618; PWR9:       # %bb.0:
14619; PWR9-NEXT:    addis 3, 2, .LCPI120_0@toc@ha
14620; PWR9-NEXT:    vpopcntd 2, 2
14621; PWR9-NEXT:    addi 3, 3, .LCPI120_0@toc@l
14622; PWR9-NEXT:    lxv 35, 0(3)
14623; PWR9-NEXT:    vcmpgtud 2, 2, 3
14624; PWR9-NEXT:    blr
14625  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14626  %3 = icmp ugt <2 x i64> %2, <i64 11, i64 11>
14627  %4 = sext <2 x i1> %3 to <2 x i64>
14628  ret <2 x i64> %4
14629}
14630
14631define <2 x i64> @ult_12_v2i64(<2 x i64> %0) {
14632; PWR5-LABEL: ult_12_v2i64:
14633; PWR5:       # %bb.0:
14634; PWR5-NEXT:    lis 5, 21845
14635; PWR5-NEXT:    lis 6, 13107
14636; PWR5-NEXT:    ori 5, 5, 21845
14637; PWR5-NEXT:    rotldi 8, 4, 63
14638; PWR5-NEXT:    rotldi 9, 3, 63
14639; PWR5-NEXT:    rldimi 5, 5, 32, 0
14640; PWR5-NEXT:    and 8, 8, 5
14641; PWR5-NEXT:    and 5, 9, 5
14642; PWR5-NEXT:    ori 6, 6, 13107
14643; PWR5-NEXT:    sub 3, 3, 5
14644; PWR5-NEXT:    rldimi 6, 6, 32, 0
14645; PWR5-NEXT:    sub 4, 4, 8
14646; PWR5-NEXT:    and 8, 3, 6
14647; PWR5-NEXT:    rotldi 3, 3, 62
14648; PWR5-NEXT:    and 3, 3, 6
14649; PWR5-NEXT:    lis 7, 3855
14650; PWR5-NEXT:    and 5, 4, 6
14651; PWR5-NEXT:    rotldi 4, 4, 62
14652; PWR5-NEXT:    add 3, 8, 3
14653; PWR5-NEXT:    lis 9, 257
14654; PWR5-NEXT:    ori 7, 7, 3855
14655; PWR5-NEXT:    and 4, 4, 6
14656; PWR5-NEXT:    rldicl 6, 3, 60, 4
14657; PWR5-NEXT:    ori 9, 9, 257
14658; PWR5-NEXT:    rldimi 7, 7, 32, 0
14659; PWR5-NEXT:    add 4, 5, 4
14660; PWR5-NEXT:    add 3, 3, 6
14661; PWR5-NEXT:    rldimi 9, 9, 32, 0
14662; PWR5-NEXT:    rldicl 5, 4, 60, 4
14663; PWR5-NEXT:    and 3, 3, 7
14664; PWR5-NEXT:    add 4, 4, 5
14665; PWR5-NEXT:    mulld 3, 3, 9
14666; PWR5-NEXT:    and 4, 4, 7
14667; PWR5-NEXT:    rldicl 3, 3, 8, 56
14668; PWR5-NEXT:    li 5, 12
14669; PWR5-NEXT:    mulld 4, 4, 9
14670; PWR5-NEXT:    subc 6, 3, 5
14671; PWR5-NEXT:    rldicl 4, 4, 8, 56
14672; PWR5-NEXT:    subfe 3, 3, 3
14673; PWR5-NEXT:    subc 5, 4, 5
14674; PWR5-NEXT:    subfe 4, 4, 4
14675; PWR5-NEXT:    blr
14676;
14677; PWR6-LABEL: ult_12_v2i64:
14678; PWR6:       # %bb.0:
14679; PWR6-NEXT:    lis 5, 21845
14680; PWR6-NEXT:    lis 6, 13107
14681; PWR6-NEXT:    ori 5, 5, 21845
14682; PWR6-NEXT:    rotldi 8, 4, 63
14683; PWR6-NEXT:    rotldi 9, 3, 63
14684; PWR6-NEXT:    rldimi 5, 5, 32, 0
14685; PWR6-NEXT:    and 8, 8, 5
14686; PWR6-NEXT:    and 5, 9, 5
14687; PWR6-NEXT:    ori 6, 6, 13107
14688; PWR6-NEXT:    sub 3, 3, 5
14689; PWR6-NEXT:    rldimi 6, 6, 32, 0
14690; PWR6-NEXT:    sub 4, 4, 8
14691; PWR6-NEXT:    and 8, 3, 6
14692; PWR6-NEXT:    rotldi 3, 3, 62
14693; PWR6-NEXT:    and 3, 3, 6
14694; PWR6-NEXT:    lis 7, 3855
14695; PWR6-NEXT:    and 5, 4, 6
14696; PWR6-NEXT:    rotldi 4, 4, 62
14697; PWR6-NEXT:    add 3, 8, 3
14698; PWR6-NEXT:    lis 9, 257
14699; PWR6-NEXT:    ori 7, 7, 3855
14700; PWR6-NEXT:    and 4, 4, 6
14701; PWR6-NEXT:    rldicl 6, 3, 60, 4
14702; PWR6-NEXT:    ori 9, 9, 257
14703; PWR6-NEXT:    rldimi 7, 7, 32, 0
14704; PWR6-NEXT:    add 4, 5, 4
14705; PWR6-NEXT:    add 3, 3, 6
14706; PWR6-NEXT:    rldimi 9, 9, 32, 0
14707; PWR6-NEXT:    rldicl 5, 4, 60, 4
14708; PWR6-NEXT:    and 3, 3, 7
14709; PWR6-NEXT:    add 4, 4, 5
14710; PWR6-NEXT:    mulld 3, 3, 9
14711; PWR6-NEXT:    and 4, 4, 7
14712; PWR6-NEXT:    rldicl 3, 3, 8, 56
14713; PWR6-NEXT:    li 5, 12
14714; PWR6-NEXT:    mulld 4, 4, 9
14715; PWR6-NEXT:    subc 6, 3, 5
14716; PWR6-NEXT:    rldicl 4, 4, 8, 56
14717; PWR6-NEXT:    subfe 3, 3, 3
14718; PWR6-NEXT:    subc 5, 4, 5
14719; PWR6-NEXT:    subfe 4, 4, 4
14720; PWR6-NEXT:    blr
14721;
14722; PWR7-LABEL: ult_12_v2i64:
14723; PWR7:       # %bb.0:
14724; PWR7-NEXT:    addi 3, 1, -32
14725; PWR7-NEXT:    li 5, -1
14726; PWR7-NEXT:    stxvd2x 34, 0, 3
14727; PWR7-NEXT:    ld 4, -24(1)
14728; PWR7-NEXT:    ld 3, -32(1)
14729; PWR7-NEXT:    popcntd 4, 4
14730; PWR7-NEXT:    popcntd 3, 3
14731; PWR7-NEXT:    cmpldi 4, 12
14732; PWR7-NEXT:    li 4, 0
14733; PWR7-NEXT:    isellt 6, 5, 4
14734; PWR7-NEXT:    cmpldi 3, 12
14735; PWR7-NEXT:    isellt 3, 5, 4
14736; PWR7-NEXT:    std 6, -8(1)
14737; PWR7-NEXT:    std 3, -16(1)
14738; PWR7-NEXT:    addi 3, 1, -16
14739; PWR7-NEXT:    lxvd2x 34, 0, 3
14740; PWR7-NEXT:    blr
14741;
14742; PWR8-LABEL: ult_12_v2i64:
14743; PWR8:       # %bb.0:
14744; PWR8-NEXT:    addis 3, 2, .LCPI121_0@toc@ha
14745; PWR8-NEXT:    vpopcntd 2, 2
14746; PWR8-NEXT:    addi 3, 3, .LCPI121_0@toc@l
14747; PWR8-NEXT:    lxvd2x 35, 0, 3
14748; PWR8-NEXT:    vcmpgtud 2, 3, 2
14749; PWR8-NEXT:    blr
14750;
14751; PWR9-LABEL: ult_12_v2i64:
14752; PWR9:       # %bb.0:
14753; PWR9-NEXT:    addis 3, 2, .LCPI121_0@toc@ha
14754; PWR9-NEXT:    vpopcntd 2, 2
14755; PWR9-NEXT:    addi 3, 3, .LCPI121_0@toc@l
14756; PWR9-NEXT:    lxv 35, 0(3)
14757; PWR9-NEXT:    vcmpgtud 2, 3, 2
14758; PWR9-NEXT:    blr
14759  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14760  %3 = icmp ult <2 x i64> %2, <i64 12, i64 12>
14761  %4 = sext <2 x i1> %3 to <2 x i64>
14762  ret <2 x i64> %4
14763}
14764
14765define <2 x i64> @ugt_12_v2i64(<2 x i64> %0) {
14766; PWR5-LABEL: ugt_12_v2i64:
14767; PWR5:       # %bb.0:
14768; PWR5-NEXT:    lis 5, 21845
14769; PWR5-NEXT:    lis 6, 13107
14770; PWR5-NEXT:    ori 5, 5, 21845
14771; PWR5-NEXT:    rotldi 8, 4, 63
14772; PWR5-NEXT:    rotldi 9, 3, 63
14773; PWR5-NEXT:    rldimi 5, 5, 32, 0
14774; PWR5-NEXT:    and 8, 8, 5
14775; PWR5-NEXT:    and 5, 9, 5
14776; PWR5-NEXT:    ori 6, 6, 13107
14777; PWR5-NEXT:    sub 3, 3, 5
14778; PWR5-NEXT:    rldimi 6, 6, 32, 0
14779; PWR5-NEXT:    sub 4, 4, 8
14780; PWR5-NEXT:    and 8, 3, 6
14781; PWR5-NEXT:    rotldi 3, 3, 62
14782; PWR5-NEXT:    and 3, 3, 6
14783; PWR5-NEXT:    lis 7, 3855
14784; PWR5-NEXT:    and 5, 4, 6
14785; PWR5-NEXT:    rotldi 4, 4, 62
14786; PWR5-NEXT:    add 3, 8, 3
14787; PWR5-NEXT:    lis 9, 257
14788; PWR5-NEXT:    ori 7, 7, 3855
14789; PWR5-NEXT:    and 4, 4, 6
14790; PWR5-NEXT:    rldicl 6, 3, 60, 4
14791; PWR5-NEXT:    ori 9, 9, 257
14792; PWR5-NEXT:    rldimi 7, 7, 32, 0
14793; PWR5-NEXT:    add 4, 5, 4
14794; PWR5-NEXT:    add 3, 3, 6
14795; PWR5-NEXT:    rldimi 9, 9, 32, 0
14796; PWR5-NEXT:    rldicl 5, 4, 60, 4
14797; PWR5-NEXT:    and 3, 3, 7
14798; PWR5-NEXT:    add 4, 4, 5
14799; PWR5-NEXT:    mulld 3, 3, 9
14800; PWR5-NEXT:    and 4, 4, 7
14801; PWR5-NEXT:    rldicl 3, 3, 8, 56
14802; PWR5-NEXT:    mulld 4, 4, 9
14803; PWR5-NEXT:    li 5, 12
14804; PWR5-NEXT:    subfic 3, 3, 12
14805; PWR5-NEXT:    rldicl 4, 4, 8, 56
14806; PWR5-NEXT:    subfe 3, 5, 5
14807; PWR5-NEXT:    subfic 4, 4, 12
14808; PWR5-NEXT:    subfe 4, 5, 5
14809; PWR5-NEXT:    blr
14810;
14811; PWR6-LABEL: ugt_12_v2i64:
14812; PWR6:       # %bb.0:
14813; PWR6-NEXT:    lis 5, 21845
14814; PWR6-NEXT:    lis 6, 13107
14815; PWR6-NEXT:    ori 5, 5, 21845
14816; PWR6-NEXT:    rotldi 8, 4, 63
14817; PWR6-NEXT:    rotldi 9, 3, 63
14818; PWR6-NEXT:    rldimi 5, 5, 32, 0
14819; PWR6-NEXT:    and 8, 8, 5
14820; PWR6-NEXT:    and 5, 9, 5
14821; PWR6-NEXT:    ori 6, 6, 13107
14822; PWR6-NEXT:    sub 3, 3, 5
14823; PWR6-NEXT:    rldimi 6, 6, 32, 0
14824; PWR6-NEXT:    sub 4, 4, 8
14825; PWR6-NEXT:    and 8, 3, 6
14826; PWR6-NEXT:    rotldi 3, 3, 62
14827; PWR6-NEXT:    and 3, 3, 6
14828; PWR6-NEXT:    lis 7, 3855
14829; PWR6-NEXT:    and 5, 4, 6
14830; PWR6-NEXT:    rotldi 4, 4, 62
14831; PWR6-NEXT:    add 3, 8, 3
14832; PWR6-NEXT:    lis 9, 257
14833; PWR6-NEXT:    ori 7, 7, 3855
14834; PWR6-NEXT:    and 4, 4, 6
14835; PWR6-NEXT:    rldicl 6, 3, 60, 4
14836; PWR6-NEXT:    ori 9, 9, 257
14837; PWR6-NEXT:    rldimi 7, 7, 32, 0
14838; PWR6-NEXT:    add 4, 5, 4
14839; PWR6-NEXT:    add 3, 3, 6
14840; PWR6-NEXT:    rldimi 9, 9, 32, 0
14841; PWR6-NEXT:    rldicl 5, 4, 60, 4
14842; PWR6-NEXT:    and 3, 3, 7
14843; PWR6-NEXT:    add 4, 4, 5
14844; PWR6-NEXT:    mulld 3, 3, 9
14845; PWR6-NEXT:    and 4, 4, 7
14846; PWR6-NEXT:    rldicl 3, 3, 8, 56
14847; PWR6-NEXT:    mulld 4, 4, 9
14848; PWR6-NEXT:    li 5, 12
14849; PWR6-NEXT:    subfic 3, 3, 12
14850; PWR6-NEXT:    rldicl 4, 4, 8, 56
14851; PWR6-NEXT:    subfe 3, 5, 5
14852; PWR6-NEXT:    subfic 4, 4, 12
14853; PWR6-NEXT:    subfe 4, 5, 5
14854; PWR6-NEXT:    blr
14855;
14856; PWR7-LABEL: ugt_12_v2i64:
14857; PWR7:       # %bb.0:
14858; PWR7-NEXT:    addi 3, 1, -32
14859; PWR7-NEXT:    li 5, -1
14860; PWR7-NEXT:    stxvd2x 34, 0, 3
14861; PWR7-NEXT:    ld 4, -24(1)
14862; PWR7-NEXT:    ld 3, -32(1)
14863; PWR7-NEXT:    popcntd 4, 4
14864; PWR7-NEXT:    popcntd 3, 3
14865; PWR7-NEXT:    cmpldi 4, 12
14866; PWR7-NEXT:    li 4, 0
14867; PWR7-NEXT:    iselgt 6, 5, 4
14868; PWR7-NEXT:    cmpldi 3, 12
14869; PWR7-NEXT:    iselgt 3, 5, 4
14870; PWR7-NEXT:    std 6, -8(1)
14871; PWR7-NEXT:    std 3, -16(1)
14872; PWR7-NEXT:    addi 3, 1, -16
14873; PWR7-NEXT:    lxvd2x 34, 0, 3
14874; PWR7-NEXT:    blr
14875;
14876; PWR8-LABEL: ugt_12_v2i64:
14877; PWR8:       # %bb.0:
14878; PWR8-NEXT:    addis 3, 2, .LCPI122_0@toc@ha
14879; PWR8-NEXT:    vpopcntd 2, 2
14880; PWR8-NEXT:    addi 3, 3, .LCPI122_0@toc@l
14881; PWR8-NEXT:    lxvd2x 35, 0, 3
14882; PWR8-NEXT:    vcmpgtud 2, 2, 3
14883; PWR8-NEXT:    blr
14884;
14885; PWR9-LABEL: ugt_12_v2i64:
14886; PWR9:       # %bb.0:
14887; PWR9-NEXT:    addis 3, 2, .LCPI122_0@toc@ha
14888; PWR9-NEXT:    vpopcntd 2, 2
14889; PWR9-NEXT:    addi 3, 3, .LCPI122_0@toc@l
14890; PWR9-NEXT:    lxv 35, 0(3)
14891; PWR9-NEXT:    vcmpgtud 2, 2, 3
14892; PWR9-NEXT:    blr
14893  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14894  %3 = icmp ugt <2 x i64> %2, <i64 12, i64 12>
14895  %4 = sext <2 x i1> %3 to <2 x i64>
14896  ret <2 x i64> %4
14897}
14898
14899define <2 x i64> @ult_13_v2i64(<2 x i64> %0) {
14900; PWR5-LABEL: ult_13_v2i64:
14901; PWR5:       # %bb.0:
14902; PWR5-NEXT:    lis 5, 21845
14903; PWR5-NEXT:    lis 6, 13107
14904; PWR5-NEXT:    ori 5, 5, 21845
14905; PWR5-NEXT:    rotldi 8, 4, 63
14906; PWR5-NEXT:    rotldi 9, 3, 63
14907; PWR5-NEXT:    rldimi 5, 5, 32, 0
14908; PWR5-NEXT:    and 8, 8, 5
14909; PWR5-NEXT:    and 5, 9, 5
14910; PWR5-NEXT:    ori 6, 6, 13107
14911; PWR5-NEXT:    sub 3, 3, 5
14912; PWR5-NEXT:    rldimi 6, 6, 32, 0
14913; PWR5-NEXT:    sub 4, 4, 8
14914; PWR5-NEXT:    and 8, 3, 6
14915; PWR5-NEXT:    rotldi 3, 3, 62
14916; PWR5-NEXT:    and 3, 3, 6
14917; PWR5-NEXT:    lis 7, 3855
14918; PWR5-NEXT:    and 5, 4, 6
14919; PWR5-NEXT:    rotldi 4, 4, 62
14920; PWR5-NEXT:    add 3, 8, 3
14921; PWR5-NEXT:    lis 9, 257
14922; PWR5-NEXT:    ori 7, 7, 3855
14923; PWR5-NEXT:    and 4, 4, 6
14924; PWR5-NEXT:    rldicl 6, 3, 60, 4
14925; PWR5-NEXT:    ori 9, 9, 257
14926; PWR5-NEXT:    rldimi 7, 7, 32, 0
14927; PWR5-NEXT:    add 4, 5, 4
14928; PWR5-NEXT:    add 3, 3, 6
14929; PWR5-NEXT:    rldimi 9, 9, 32, 0
14930; PWR5-NEXT:    rldicl 5, 4, 60, 4
14931; PWR5-NEXT:    and 3, 3, 7
14932; PWR5-NEXT:    add 4, 4, 5
14933; PWR5-NEXT:    mulld 3, 3, 9
14934; PWR5-NEXT:    and 4, 4, 7
14935; PWR5-NEXT:    rldicl 3, 3, 8, 56
14936; PWR5-NEXT:    li 5, 13
14937; PWR5-NEXT:    mulld 4, 4, 9
14938; PWR5-NEXT:    subc 6, 3, 5
14939; PWR5-NEXT:    rldicl 4, 4, 8, 56
14940; PWR5-NEXT:    subfe 3, 3, 3
14941; PWR5-NEXT:    subc 5, 4, 5
14942; PWR5-NEXT:    subfe 4, 4, 4
14943; PWR5-NEXT:    blr
14944;
14945; PWR6-LABEL: ult_13_v2i64:
14946; PWR6:       # %bb.0:
14947; PWR6-NEXT:    lis 5, 21845
14948; PWR6-NEXT:    lis 6, 13107
14949; PWR6-NEXT:    ori 5, 5, 21845
14950; PWR6-NEXT:    rotldi 8, 4, 63
14951; PWR6-NEXT:    rotldi 9, 3, 63
14952; PWR6-NEXT:    rldimi 5, 5, 32, 0
14953; PWR6-NEXT:    and 8, 8, 5
14954; PWR6-NEXT:    and 5, 9, 5
14955; PWR6-NEXT:    ori 6, 6, 13107
14956; PWR6-NEXT:    sub 3, 3, 5
14957; PWR6-NEXT:    rldimi 6, 6, 32, 0
14958; PWR6-NEXT:    sub 4, 4, 8
14959; PWR6-NEXT:    and 8, 3, 6
14960; PWR6-NEXT:    rotldi 3, 3, 62
14961; PWR6-NEXT:    and 3, 3, 6
14962; PWR6-NEXT:    lis 7, 3855
14963; PWR6-NEXT:    and 5, 4, 6
14964; PWR6-NEXT:    rotldi 4, 4, 62
14965; PWR6-NEXT:    add 3, 8, 3
14966; PWR6-NEXT:    lis 9, 257
14967; PWR6-NEXT:    ori 7, 7, 3855
14968; PWR6-NEXT:    and 4, 4, 6
14969; PWR6-NEXT:    rldicl 6, 3, 60, 4
14970; PWR6-NEXT:    ori 9, 9, 257
14971; PWR6-NEXT:    rldimi 7, 7, 32, 0
14972; PWR6-NEXT:    add 4, 5, 4
14973; PWR6-NEXT:    add 3, 3, 6
14974; PWR6-NEXT:    rldimi 9, 9, 32, 0
14975; PWR6-NEXT:    rldicl 5, 4, 60, 4
14976; PWR6-NEXT:    and 3, 3, 7
14977; PWR6-NEXT:    add 4, 4, 5
14978; PWR6-NEXT:    mulld 3, 3, 9
14979; PWR6-NEXT:    and 4, 4, 7
14980; PWR6-NEXT:    rldicl 3, 3, 8, 56
14981; PWR6-NEXT:    li 5, 13
14982; PWR6-NEXT:    mulld 4, 4, 9
14983; PWR6-NEXT:    subc 6, 3, 5
14984; PWR6-NEXT:    rldicl 4, 4, 8, 56
14985; PWR6-NEXT:    subfe 3, 3, 3
14986; PWR6-NEXT:    subc 5, 4, 5
14987; PWR6-NEXT:    subfe 4, 4, 4
14988; PWR6-NEXT:    blr
14989;
14990; PWR7-LABEL: ult_13_v2i64:
14991; PWR7:       # %bb.0:
14992; PWR7-NEXT:    addi 3, 1, -32
14993; PWR7-NEXT:    li 5, -1
14994; PWR7-NEXT:    stxvd2x 34, 0, 3
14995; PWR7-NEXT:    ld 4, -24(1)
14996; PWR7-NEXT:    ld 3, -32(1)
14997; PWR7-NEXT:    popcntd 4, 4
14998; PWR7-NEXT:    popcntd 3, 3
14999; PWR7-NEXT:    cmpldi 4, 13
15000; PWR7-NEXT:    li 4, 0
15001; PWR7-NEXT:    isellt 6, 5, 4
15002; PWR7-NEXT:    cmpldi 3, 13
15003; PWR7-NEXT:    isellt 3, 5, 4
15004; PWR7-NEXT:    std 6, -8(1)
15005; PWR7-NEXT:    std 3, -16(1)
15006; PWR7-NEXT:    addi 3, 1, -16
15007; PWR7-NEXT:    lxvd2x 34, 0, 3
15008; PWR7-NEXT:    blr
15009;
15010; PWR8-LABEL: ult_13_v2i64:
15011; PWR8:       # %bb.0:
15012; PWR8-NEXT:    addis 3, 2, .LCPI123_0@toc@ha
15013; PWR8-NEXT:    vpopcntd 2, 2
15014; PWR8-NEXT:    addi 3, 3, .LCPI123_0@toc@l
15015; PWR8-NEXT:    lxvd2x 35, 0, 3
15016; PWR8-NEXT:    vcmpgtud 2, 3, 2
15017; PWR8-NEXT:    blr
15018;
15019; PWR9-LABEL: ult_13_v2i64:
15020; PWR9:       # %bb.0:
15021; PWR9-NEXT:    addis 3, 2, .LCPI123_0@toc@ha
15022; PWR9-NEXT:    vpopcntd 2, 2
15023; PWR9-NEXT:    addi 3, 3, .LCPI123_0@toc@l
15024; PWR9-NEXT:    lxv 35, 0(3)
15025; PWR9-NEXT:    vcmpgtud 2, 3, 2
15026; PWR9-NEXT:    blr
15027  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15028  %3 = icmp ult <2 x i64> %2, <i64 13, i64 13>
15029  %4 = sext <2 x i1> %3 to <2 x i64>
15030  ret <2 x i64> %4
15031}
15032
15033define <2 x i64> @ugt_13_v2i64(<2 x i64> %0) {
15034; PWR5-LABEL: ugt_13_v2i64:
15035; PWR5:       # %bb.0:
15036; PWR5-NEXT:    lis 5, 21845
15037; PWR5-NEXT:    lis 6, 13107
15038; PWR5-NEXT:    ori 5, 5, 21845
15039; PWR5-NEXT:    rotldi 8, 4, 63
15040; PWR5-NEXT:    rotldi 9, 3, 63
15041; PWR5-NEXT:    rldimi 5, 5, 32, 0
15042; PWR5-NEXT:    and 8, 8, 5
15043; PWR5-NEXT:    and 5, 9, 5
15044; PWR5-NEXT:    ori 6, 6, 13107
15045; PWR5-NEXT:    sub 3, 3, 5
15046; PWR5-NEXT:    rldimi 6, 6, 32, 0
15047; PWR5-NEXT:    sub 4, 4, 8
15048; PWR5-NEXT:    and 8, 3, 6
15049; PWR5-NEXT:    rotldi 3, 3, 62
15050; PWR5-NEXT:    and 3, 3, 6
15051; PWR5-NEXT:    lis 7, 3855
15052; PWR5-NEXT:    and 5, 4, 6
15053; PWR5-NEXT:    rotldi 4, 4, 62
15054; PWR5-NEXT:    add 3, 8, 3
15055; PWR5-NEXT:    lis 9, 257
15056; PWR5-NEXT:    ori 7, 7, 3855
15057; PWR5-NEXT:    and 4, 4, 6
15058; PWR5-NEXT:    rldicl 6, 3, 60, 4
15059; PWR5-NEXT:    ori 9, 9, 257
15060; PWR5-NEXT:    rldimi 7, 7, 32, 0
15061; PWR5-NEXT:    add 4, 5, 4
15062; PWR5-NEXT:    add 3, 3, 6
15063; PWR5-NEXT:    rldimi 9, 9, 32, 0
15064; PWR5-NEXT:    rldicl 5, 4, 60, 4
15065; PWR5-NEXT:    and 3, 3, 7
15066; PWR5-NEXT:    add 4, 4, 5
15067; PWR5-NEXT:    mulld 3, 3, 9
15068; PWR5-NEXT:    and 4, 4, 7
15069; PWR5-NEXT:    rldicl 3, 3, 8, 56
15070; PWR5-NEXT:    mulld 4, 4, 9
15071; PWR5-NEXT:    li 5, 13
15072; PWR5-NEXT:    subfic 3, 3, 13
15073; PWR5-NEXT:    rldicl 4, 4, 8, 56
15074; PWR5-NEXT:    subfe 3, 5, 5
15075; PWR5-NEXT:    subfic 4, 4, 13
15076; PWR5-NEXT:    subfe 4, 5, 5
15077; PWR5-NEXT:    blr
15078;
15079; PWR6-LABEL: ugt_13_v2i64:
15080; PWR6:       # %bb.0:
15081; PWR6-NEXT:    lis 5, 21845
15082; PWR6-NEXT:    lis 6, 13107
15083; PWR6-NEXT:    ori 5, 5, 21845
15084; PWR6-NEXT:    rotldi 8, 4, 63
15085; PWR6-NEXT:    rotldi 9, 3, 63
15086; PWR6-NEXT:    rldimi 5, 5, 32, 0
15087; PWR6-NEXT:    and 8, 8, 5
15088; PWR6-NEXT:    and 5, 9, 5
15089; PWR6-NEXT:    ori 6, 6, 13107
15090; PWR6-NEXT:    sub 3, 3, 5
15091; PWR6-NEXT:    rldimi 6, 6, 32, 0
15092; PWR6-NEXT:    sub 4, 4, 8
15093; PWR6-NEXT:    and 8, 3, 6
15094; PWR6-NEXT:    rotldi 3, 3, 62
15095; PWR6-NEXT:    and 3, 3, 6
15096; PWR6-NEXT:    lis 7, 3855
15097; PWR6-NEXT:    and 5, 4, 6
15098; PWR6-NEXT:    rotldi 4, 4, 62
15099; PWR6-NEXT:    add 3, 8, 3
15100; PWR6-NEXT:    lis 9, 257
15101; PWR6-NEXT:    ori 7, 7, 3855
15102; PWR6-NEXT:    and 4, 4, 6
15103; PWR6-NEXT:    rldicl 6, 3, 60, 4
15104; PWR6-NEXT:    ori 9, 9, 257
15105; PWR6-NEXT:    rldimi 7, 7, 32, 0
15106; PWR6-NEXT:    add 4, 5, 4
15107; PWR6-NEXT:    add 3, 3, 6
15108; PWR6-NEXT:    rldimi 9, 9, 32, 0
15109; PWR6-NEXT:    rldicl 5, 4, 60, 4
15110; PWR6-NEXT:    and 3, 3, 7
15111; PWR6-NEXT:    add 4, 4, 5
15112; PWR6-NEXT:    mulld 3, 3, 9
15113; PWR6-NEXT:    and 4, 4, 7
15114; PWR6-NEXT:    rldicl 3, 3, 8, 56
15115; PWR6-NEXT:    mulld 4, 4, 9
15116; PWR6-NEXT:    li 5, 13
15117; PWR6-NEXT:    subfic 3, 3, 13
15118; PWR6-NEXT:    rldicl 4, 4, 8, 56
15119; PWR6-NEXT:    subfe 3, 5, 5
15120; PWR6-NEXT:    subfic 4, 4, 13
15121; PWR6-NEXT:    subfe 4, 5, 5
15122; PWR6-NEXT:    blr
15123;
15124; PWR7-LABEL: ugt_13_v2i64:
15125; PWR7:       # %bb.0:
15126; PWR7-NEXT:    addi 3, 1, -32
15127; PWR7-NEXT:    li 5, -1
15128; PWR7-NEXT:    stxvd2x 34, 0, 3
15129; PWR7-NEXT:    ld 4, -24(1)
15130; PWR7-NEXT:    ld 3, -32(1)
15131; PWR7-NEXT:    popcntd 4, 4
15132; PWR7-NEXT:    popcntd 3, 3
15133; PWR7-NEXT:    cmpldi 4, 13
15134; PWR7-NEXT:    li 4, 0
15135; PWR7-NEXT:    iselgt 6, 5, 4
15136; PWR7-NEXT:    cmpldi 3, 13
15137; PWR7-NEXT:    iselgt 3, 5, 4
15138; PWR7-NEXT:    std 6, -8(1)
15139; PWR7-NEXT:    std 3, -16(1)
15140; PWR7-NEXT:    addi 3, 1, -16
15141; PWR7-NEXT:    lxvd2x 34, 0, 3
15142; PWR7-NEXT:    blr
15143;
15144; PWR8-LABEL: ugt_13_v2i64:
15145; PWR8:       # %bb.0:
15146; PWR8-NEXT:    addis 3, 2, .LCPI124_0@toc@ha
15147; PWR8-NEXT:    vpopcntd 2, 2
15148; PWR8-NEXT:    addi 3, 3, .LCPI124_0@toc@l
15149; PWR8-NEXT:    lxvd2x 35, 0, 3
15150; PWR8-NEXT:    vcmpgtud 2, 2, 3
15151; PWR8-NEXT:    blr
15152;
15153; PWR9-LABEL: ugt_13_v2i64:
15154; PWR9:       # %bb.0:
15155; PWR9-NEXT:    addis 3, 2, .LCPI124_0@toc@ha
15156; PWR9-NEXT:    vpopcntd 2, 2
15157; PWR9-NEXT:    addi 3, 3, .LCPI124_0@toc@l
15158; PWR9-NEXT:    lxv 35, 0(3)
15159; PWR9-NEXT:    vcmpgtud 2, 2, 3
15160; PWR9-NEXT:    blr
15161  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15162  %3 = icmp ugt <2 x i64> %2, <i64 13, i64 13>
15163  %4 = sext <2 x i1> %3 to <2 x i64>
15164  ret <2 x i64> %4
15165}
15166
15167define <2 x i64> @ult_14_v2i64(<2 x i64> %0) {
15168; PWR5-LABEL: ult_14_v2i64:
15169; PWR5:       # %bb.0:
15170; PWR5-NEXT:    lis 5, 21845
15171; PWR5-NEXT:    lis 6, 13107
15172; PWR5-NEXT:    ori 5, 5, 21845
15173; PWR5-NEXT:    rotldi 8, 4, 63
15174; PWR5-NEXT:    rotldi 9, 3, 63
15175; PWR5-NEXT:    rldimi 5, 5, 32, 0
15176; PWR5-NEXT:    and 8, 8, 5
15177; PWR5-NEXT:    and 5, 9, 5
15178; PWR5-NEXT:    ori 6, 6, 13107
15179; PWR5-NEXT:    sub 3, 3, 5
15180; PWR5-NEXT:    rldimi 6, 6, 32, 0
15181; PWR5-NEXT:    sub 4, 4, 8
15182; PWR5-NEXT:    and 8, 3, 6
15183; PWR5-NEXT:    rotldi 3, 3, 62
15184; PWR5-NEXT:    and 3, 3, 6
15185; PWR5-NEXT:    lis 7, 3855
15186; PWR5-NEXT:    and 5, 4, 6
15187; PWR5-NEXT:    rotldi 4, 4, 62
15188; PWR5-NEXT:    add 3, 8, 3
15189; PWR5-NEXT:    lis 9, 257
15190; PWR5-NEXT:    ori 7, 7, 3855
15191; PWR5-NEXT:    and 4, 4, 6
15192; PWR5-NEXT:    rldicl 6, 3, 60, 4
15193; PWR5-NEXT:    ori 9, 9, 257
15194; PWR5-NEXT:    rldimi 7, 7, 32, 0
15195; PWR5-NEXT:    add 4, 5, 4
15196; PWR5-NEXT:    add 3, 3, 6
15197; PWR5-NEXT:    rldimi 9, 9, 32, 0
15198; PWR5-NEXT:    rldicl 5, 4, 60, 4
15199; PWR5-NEXT:    and 3, 3, 7
15200; PWR5-NEXT:    add 4, 4, 5
15201; PWR5-NEXT:    mulld 3, 3, 9
15202; PWR5-NEXT:    and 4, 4, 7
15203; PWR5-NEXT:    rldicl 3, 3, 8, 56
15204; PWR5-NEXT:    li 5, 14
15205; PWR5-NEXT:    mulld 4, 4, 9
15206; PWR5-NEXT:    subc 6, 3, 5
15207; PWR5-NEXT:    rldicl 4, 4, 8, 56
15208; PWR5-NEXT:    subfe 3, 3, 3
15209; PWR5-NEXT:    subc 5, 4, 5
15210; PWR5-NEXT:    subfe 4, 4, 4
15211; PWR5-NEXT:    blr
15212;
15213; PWR6-LABEL: ult_14_v2i64:
15214; PWR6:       # %bb.0:
15215; PWR6-NEXT:    lis 5, 21845
15216; PWR6-NEXT:    lis 6, 13107
15217; PWR6-NEXT:    ori 5, 5, 21845
15218; PWR6-NEXT:    rotldi 8, 4, 63
15219; PWR6-NEXT:    rotldi 9, 3, 63
15220; PWR6-NEXT:    rldimi 5, 5, 32, 0
15221; PWR6-NEXT:    and 8, 8, 5
15222; PWR6-NEXT:    and 5, 9, 5
15223; PWR6-NEXT:    ori 6, 6, 13107
15224; PWR6-NEXT:    sub 3, 3, 5
15225; PWR6-NEXT:    rldimi 6, 6, 32, 0
15226; PWR6-NEXT:    sub 4, 4, 8
15227; PWR6-NEXT:    and 8, 3, 6
15228; PWR6-NEXT:    rotldi 3, 3, 62
15229; PWR6-NEXT:    and 3, 3, 6
15230; PWR6-NEXT:    lis 7, 3855
15231; PWR6-NEXT:    and 5, 4, 6
15232; PWR6-NEXT:    rotldi 4, 4, 62
15233; PWR6-NEXT:    add 3, 8, 3
15234; PWR6-NEXT:    lis 9, 257
15235; PWR6-NEXT:    ori 7, 7, 3855
15236; PWR6-NEXT:    and 4, 4, 6
15237; PWR6-NEXT:    rldicl 6, 3, 60, 4
15238; PWR6-NEXT:    ori 9, 9, 257
15239; PWR6-NEXT:    rldimi 7, 7, 32, 0
15240; PWR6-NEXT:    add 4, 5, 4
15241; PWR6-NEXT:    add 3, 3, 6
15242; PWR6-NEXT:    rldimi 9, 9, 32, 0
15243; PWR6-NEXT:    rldicl 5, 4, 60, 4
15244; PWR6-NEXT:    and 3, 3, 7
15245; PWR6-NEXT:    add 4, 4, 5
15246; PWR6-NEXT:    mulld 3, 3, 9
15247; PWR6-NEXT:    and 4, 4, 7
15248; PWR6-NEXT:    rldicl 3, 3, 8, 56
15249; PWR6-NEXT:    li 5, 14
15250; PWR6-NEXT:    mulld 4, 4, 9
15251; PWR6-NEXT:    subc 6, 3, 5
15252; PWR6-NEXT:    rldicl 4, 4, 8, 56
15253; PWR6-NEXT:    subfe 3, 3, 3
15254; PWR6-NEXT:    subc 5, 4, 5
15255; PWR6-NEXT:    subfe 4, 4, 4
15256; PWR6-NEXT:    blr
15257;
15258; PWR7-LABEL: ult_14_v2i64:
15259; PWR7:       # %bb.0:
15260; PWR7-NEXT:    addi 3, 1, -32
15261; PWR7-NEXT:    li 5, -1
15262; PWR7-NEXT:    stxvd2x 34, 0, 3
15263; PWR7-NEXT:    ld 4, -24(1)
15264; PWR7-NEXT:    ld 3, -32(1)
15265; PWR7-NEXT:    popcntd 4, 4
15266; PWR7-NEXT:    popcntd 3, 3
15267; PWR7-NEXT:    cmpldi 4, 14
15268; PWR7-NEXT:    li 4, 0
15269; PWR7-NEXT:    isellt 6, 5, 4
15270; PWR7-NEXT:    cmpldi 3, 14
15271; PWR7-NEXT:    isellt 3, 5, 4
15272; PWR7-NEXT:    std 6, -8(1)
15273; PWR7-NEXT:    std 3, -16(1)
15274; PWR7-NEXT:    addi 3, 1, -16
15275; PWR7-NEXT:    lxvd2x 34, 0, 3
15276; PWR7-NEXT:    blr
15277;
15278; PWR8-LABEL: ult_14_v2i64:
15279; PWR8:       # %bb.0:
15280; PWR8-NEXT:    addis 3, 2, .LCPI125_0@toc@ha
15281; PWR8-NEXT:    vpopcntd 2, 2
15282; PWR8-NEXT:    addi 3, 3, .LCPI125_0@toc@l
15283; PWR8-NEXT:    lxvd2x 35, 0, 3
15284; PWR8-NEXT:    vcmpgtud 2, 3, 2
15285; PWR8-NEXT:    blr
15286;
15287; PWR9-LABEL: ult_14_v2i64:
15288; PWR9:       # %bb.0:
15289; PWR9-NEXT:    addis 3, 2, .LCPI125_0@toc@ha
15290; PWR9-NEXT:    vpopcntd 2, 2
15291; PWR9-NEXT:    addi 3, 3, .LCPI125_0@toc@l
15292; PWR9-NEXT:    lxv 35, 0(3)
15293; PWR9-NEXT:    vcmpgtud 2, 3, 2
15294; PWR9-NEXT:    blr
15295  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15296  %3 = icmp ult <2 x i64> %2, <i64 14, i64 14>
15297  %4 = sext <2 x i1> %3 to <2 x i64>
15298  ret <2 x i64> %4
15299}
15300
15301define <2 x i64> @ugt_14_v2i64(<2 x i64> %0) {
15302; PWR5-LABEL: ugt_14_v2i64:
15303; PWR5:       # %bb.0:
15304; PWR5-NEXT:    lis 5, 21845
15305; PWR5-NEXT:    lis 6, 13107
15306; PWR5-NEXT:    ori 5, 5, 21845
15307; PWR5-NEXT:    rotldi 8, 4, 63
15308; PWR5-NEXT:    rotldi 9, 3, 63
15309; PWR5-NEXT:    rldimi 5, 5, 32, 0
15310; PWR5-NEXT:    and 8, 8, 5
15311; PWR5-NEXT:    and 5, 9, 5
15312; PWR5-NEXT:    ori 6, 6, 13107
15313; PWR5-NEXT:    sub 3, 3, 5
15314; PWR5-NEXT:    rldimi 6, 6, 32, 0
15315; PWR5-NEXT:    sub 4, 4, 8
15316; PWR5-NEXT:    and 8, 3, 6
15317; PWR5-NEXT:    rotldi 3, 3, 62
15318; PWR5-NEXT:    and 3, 3, 6
15319; PWR5-NEXT:    lis 7, 3855
15320; PWR5-NEXT:    and 5, 4, 6
15321; PWR5-NEXT:    rotldi 4, 4, 62
15322; PWR5-NEXT:    add 3, 8, 3
15323; PWR5-NEXT:    lis 9, 257
15324; PWR5-NEXT:    ori 7, 7, 3855
15325; PWR5-NEXT:    and 4, 4, 6
15326; PWR5-NEXT:    rldicl 6, 3, 60, 4
15327; PWR5-NEXT:    ori 9, 9, 257
15328; PWR5-NEXT:    rldimi 7, 7, 32, 0
15329; PWR5-NEXT:    add 4, 5, 4
15330; PWR5-NEXT:    add 3, 3, 6
15331; PWR5-NEXT:    rldimi 9, 9, 32, 0
15332; PWR5-NEXT:    rldicl 5, 4, 60, 4
15333; PWR5-NEXT:    and 3, 3, 7
15334; PWR5-NEXT:    add 4, 4, 5
15335; PWR5-NEXT:    mulld 3, 3, 9
15336; PWR5-NEXT:    and 4, 4, 7
15337; PWR5-NEXT:    rldicl 3, 3, 8, 56
15338; PWR5-NEXT:    mulld 4, 4, 9
15339; PWR5-NEXT:    li 5, 14
15340; PWR5-NEXT:    subfic 3, 3, 14
15341; PWR5-NEXT:    rldicl 4, 4, 8, 56
15342; PWR5-NEXT:    subfe 3, 5, 5
15343; PWR5-NEXT:    subfic 4, 4, 14
15344; PWR5-NEXT:    subfe 4, 5, 5
15345; PWR5-NEXT:    blr
15346;
15347; PWR6-LABEL: ugt_14_v2i64:
15348; PWR6:       # %bb.0:
15349; PWR6-NEXT:    lis 5, 21845
15350; PWR6-NEXT:    lis 6, 13107
15351; PWR6-NEXT:    ori 5, 5, 21845
15352; PWR6-NEXT:    rotldi 8, 4, 63
15353; PWR6-NEXT:    rotldi 9, 3, 63
15354; PWR6-NEXT:    rldimi 5, 5, 32, 0
15355; PWR6-NEXT:    and 8, 8, 5
15356; PWR6-NEXT:    and 5, 9, 5
15357; PWR6-NEXT:    ori 6, 6, 13107
15358; PWR6-NEXT:    sub 3, 3, 5
15359; PWR6-NEXT:    rldimi 6, 6, 32, 0
15360; PWR6-NEXT:    sub 4, 4, 8
15361; PWR6-NEXT:    and 8, 3, 6
15362; PWR6-NEXT:    rotldi 3, 3, 62
15363; PWR6-NEXT:    and 3, 3, 6
15364; PWR6-NEXT:    lis 7, 3855
15365; PWR6-NEXT:    and 5, 4, 6
15366; PWR6-NEXT:    rotldi 4, 4, 62
15367; PWR6-NEXT:    add 3, 8, 3
15368; PWR6-NEXT:    lis 9, 257
15369; PWR6-NEXT:    ori 7, 7, 3855
15370; PWR6-NEXT:    and 4, 4, 6
15371; PWR6-NEXT:    rldicl 6, 3, 60, 4
15372; PWR6-NEXT:    ori 9, 9, 257
15373; PWR6-NEXT:    rldimi 7, 7, 32, 0
15374; PWR6-NEXT:    add 4, 5, 4
15375; PWR6-NEXT:    add 3, 3, 6
15376; PWR6-NEXT:    rldimi 9, 9, 32, 0
15377; PWR6-NEXT:    rldicl 5, 4, 60, 4
15378; PWR6-NEXT:    and 3, 3, 7
15379; PWR6-NEXT:    add 4, 4, 5
15380; PWR6-NEXT:    mulld 3, 3, 9
15381; PWR6-NEXT:    and 4, 4, 7
15382; PWR6-NEXT:    rldicl 3, 3, 8, 56
15383; PWR6-NEXT:    mulld 4, 4, 9
15384; PWR6-NEXT:    li 5, 14
15385; PWR6-NEXT:    subfic 3, 3, 14
15386; PWR6-NEXT:    rldicl 4, 4, 8, 56
15387; PWR6-NEXT:    subfe 3, 5, 5
15388; PWR6-NEXT:    subfic 4, 4, 14
15389; PWR6-NEXT:    subfe 4, 5, 5
15390; PWR6-NEXT:    blr
15391;
15392; PWR7-LABEL: ugt_14_v2i64:
15393; PWR7:       # %bb.0:
15394; PWR7-NEXT:    addi 3, 1, -32
15395; PWR7-NEXT:    li 5, -1
15396; PWR7-NEXT:    stxvd2x 34, 0, 3
15397; PWR7-NEXT:    ld 4, -24(1)
15398; PWR7-NEXT:    ld 3, -32(1)
15399; PWR7-NEXT:    popcntd 4, 4
15400; PWR7-NEXT:    popcntd 3, 3
15401; PWR7-NEXT:    cmpldi 4, 14
15402; PWR7-NEXT:    li 4, 0
15403; PWR7-NEXT:    iselgt 6, 5, 4
15404; PWR7-NEXT:    cmpldi 3, 14
15405; PWR7-NEXT:    iselgt 3, 5, 4
15406; PWR7-NEXT:    std 6, -8(1)
15407; PWR7-NEXT:    std 3, -16(1)
15408; PWR7-NEXT:    addi 3, 1, -16
15409; PWR7-NEXT:    lxvd2x 34, 0, 3
15410; PWR7-NEXT:    blr
15411;
15412; PWR8-LABEL: ugt_14_v2i64:
15413; PWR8:       # %bb.0:
15414; PWR8-NEXT:    addis 3, 2, .LCPI126_0@toc@ha
15415; PWR8-NEXT:    vpopcntd 2, 2
15416; PWR8-NEXT:    addi 3, 3, .LCPI126_0@toc@l
15417; PWR8-NEXT:    lxvd2x 35, 0, 3
15418; PWR8-NEXT:    vcmpgtud 2, 2, 3
15419; PWR8-NEXT:    blr
15420;
15421; PWR9-LABEL: ugt_14_v2i64:
15422; PWR9:       # %bb.0:
15423; PWR9-NEXT:    addis 3, 2, .LCPI126_0@toc@ha
15424; PWR9-NEXT:    vpopcntd 2, 2
15425; PWR9-NEXT:    addi 3, 3, .LCPI126_0@toc@l
15426; PWR9-NEXT:    lxv 35, 0(3)
15427; PWR9-NEXT:    vcmpgtud 2, 2, 3
15428; PWR9-NEXT:    blr
15429  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15430  %3 = icmp ugt <2 x i64> %2, <i64 14, i64 14>
15431  %4 = sext <2 x i1> %3 to <2 x i64>
15432  ret <2 x i64> %4
15433}
15434
15435define <2 x i64> @ult_15_v2i64(<2 x i64> %0) {
15436; PWR5-LABEL: ult_15_v2i64:
15437; PWR5:       # %bb.0:
15438; PWR5-NEXT:    lis 5, 21845
15439; PWR5-NEXT:    lis 6, 13107
15440; PWR5-NEXT:    ori 5, 5, 21845
15441; PWR5-NEXT:    rotldi 8, 4, 63
15442; PWR5-NEXT:    rotldi 9, 3, 63
15443; PWR5-NEXT:    rldimi 5, 5, 32, 0
15444; PWR5-NEXT:    and 8, 8, 5
15445; PWR5-NEXT:    and 5, 9, 5
15446; PWR5-NEXT:    ori 6, 6, 13107
15447; PWR5-NEXT:    sub 3, 3, 5
15448; PWR5-NEXT:    rldimi 6, 6, 32, 0
15449; PWR5-NEXT:    sub 4, 4, 8
15450; PWR5-NEXT:    and 8, 3, 6
15451; PWR5-NEXT:    rotldi 3, 3, 62
15452; PWR5-NEXT:    and 3, 3, 6
15453; PWR5-NEXT:    lis 7, 3855
15454; PWR5-NEXT:    and 5, 4, 6
15455; PWR5-NEXT:    rotldi 4, 4, 62
15456; PWR5-NEXT:    add 3, 8, 3
15457; PWR5-NEXT:    lis 9, 257
15458; PWR5-NEXT:    ori 7, 7, 3855
15459; PWR5-NEXT:    and 4, 4, 6
15460; PWR5-NEXT:    rldicl 6, 3, 60, 4
15461; PWR5-NEXT:    ori 9, 9, 257
15462; PWR5-NEXT:    rldimi 7, 7, 32, 0
15463; PWR5-NEXT:    add 4, 5, 4
15464; PWR5-NEXT:    add 3, 3, 6
15465; PWR5-NEXT:    rldimi 9, 9, 32, 0
15466; PWR5-NEXT:    rldicl 5, 4, 60, 4
15467; PWR5-NEXT:    and 3, 3, 7
15468; PWR5-NEXT:    add 4, 4, 5
15469; PWR5-NEXT:    mulld 3, 3, 9
15470; PWR5-NEXT:    and 4, 4, 7
15471; PWR5-NEXT:    rldicl 3, 3, 8, 56
15472; PWR5-NEXT:    li 5, 15
15473; PWR5-NEXT:    mulld 4, 4, 9
15474; PWR5-NEXT:    subc 6, 3, 5
15475; PWR5-NEXT:    rldicl 4, 4, 8, 56
15476; PWR5-NEXT:    subfe 3, 3, 3
15477; PWR5-NEXT:    subc 5, 4, 5
15478; PWR5-NEXT:    subfe 4, 4, 4
15479; PWR5-NEXT:    blr
15480;
15481; PWR6-LABEL: ult_15_v2i64:
15482; PWR6:       # %bb.0:
15483; PWR6-NEXT:    lis 5, 21845
15484; PWR6-NEXT:    lis 6, 13107
15485; PWR6-NEXT:    ori 5, 5, 21845
15486; PWR6-NEXT:    rotldi 8, 4, 63
15487; PWR6-NEXT:    rotldi 9, 3, 63
15488; PWR6-NEXT:    rldimi 5, 5, 32, 0
15489; PWR6-NEXT:    and 8, 8, 5
15490; PWR6-NEXT:    and 5, 9, 5
15491; PWR6-NEXT:    ori 6, 6, 13107
15492; PWR6-NEXT:    sub 3, 3, 5
15493; PWR6-NEXT:    rldimi 6, 6, 32, 0
15494; PWR6-NEXT:    sub 4, 4, 8
15495; PWR6-NEXT:    and 8, 3, 6
15496; PWR6-NEXT:    rotldi 3, 3, 62
15497; PWR6-NEXT:    and 3, 3, 6
15498; PWR6-NEXT:    lis 7, 3855
15499; PWR6-NEXT:    and 5, 4, 6
15500; PWR6-NEXT:    rotldi 4, 4, 62
15501; PWR6-NEXT:    add 3, 8, 3
15502; PWR6-NEXT:    lis 9, 257
15503; PWR6-NEXT:    ori 7, 7, 3855
15504; PWR6-NEXT:    and 4, 4, 6
15505; PWR6-NEXT:    rldicl 6, 3, 60, 4
15506; PWR6-NEXT:    ori 9, 9, 257
15507; PWR6-NEXT:    rldimi 7, 7, 32, 0
15508; PWR6-NEXT:    add 4, 5, 4
15509; PWR6-NEXT:    add 3, 3, 6
15510; PWR6-NEXT:    rldimi 9, 9, 32, 0
15511; PWR6-NEXT:    rldicl 5, 4, 60, 4
15512; PWR6-NEXT:    and 3, 3, 7
15513; PWR6-NEXT:    add 4, 4, 5
15514; PWR6-NEXT:    mulld 3, 3, 9
15515; PWR6-NEXT:    and 4, 4, 7
15516; PWR6-NEXT:    rldicl 3, 3, 8, 56
15517; PWR6-NEXT:    li 5, 15
15518; PWR6-NEXT:    mulld 4, 4, 9
15519; PWR6-NEXT:    subc 6, 3, 5
15520; PWR6-NEXT:    rldicl 4, 4, 8, 56
15521; PWR6-NEXT:    subfe 3, 3, 3
15522; PWR6-NEXT:    subc 5, 4, 5
15523; PWR6-NEXT:    subfe 4, 4, 4
15524; PWR6-NEXT:    blr
15525;
15526; PWR7-LABEL: ult_15_v2i64:
15527; PWR7:       # %bb.0:
15528; PWR7-NEXT:    addi 3, 1, -32
15529; PWR7-NEXT:    li 5, -1
15530; PWR7-NEXT:    stxvd2x 34, 0, 3
15531; PWR7-NEXT:    ld 4, -24(1)
15532; PWR7-NEXT:    ld 3, -32(1)
15533; PWR7-NEXT:    popcntd 4, 4
15534; PWR7-NEXT:    popcntd 3, 3
15535; PWR7-NEXT:    cmpldi 4, 15
15536; PWR7-NEXT:    li 4, 0
15537; PWR7-NEXT:    isellt 6, 5, 4
15538; PWR7-NEXT:    cmpldi 3, 15
15539; PWR7-NEXT:    isellt 3, 5, 4
15540; PWR7-NEXT:    std 6, -8(1)
15541; PWR7-NEXT:    std 3, -16(1)
15542; PWR7-NEXT:    addi 3, 1, -16
15543; PWR7-NEXT:    lxvd2x 34, 0, 3
15544; PWR7-NEXT:    blr
15545;
15546; PWR8-LABEL: ult_15_v2i64:
15547; PWR8:       # %bb.0:
15548; PWR8-NEXT:    addis 3, 2, .LCPI127_0@toc@ha
15549; PWR8-NEXT:    vpopcntd 2, 2
15550; PWR8-NEXT:    addi 3, 3, .LCPI127_0@toc@l
15551; PWR8-NEXT:    lxvd2x 35, 0, 3
15552; PWR8-NEXT:    vcmpgtud 2, 3, 2
15553; PWR8-NEXT:    blr
15554;
15555; PWR9-LABEL: ult_15_v2i64:
15556; PWR9:       # %bb.0:
15557; PWR9-NEXT:    addis 3, 2, .LCPI127_0@toc@ha
15558; PWR9-NEXT:    vpopcntd 2, 2
15559; PWR9-NEXT:    addi 3, 3, .LCPI127_0@toc@l
15560; PWR9-NEXT:    lxv 35, 0(3)
15561; PWR9-NEXT:    vcmpgtud 2, 3, 2
15562; PWR9-NEXT:    blr
15563  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15564  %3 = icmp ult <2 x i64> %2, <i64 15, i64 15>
15565  %4 = sext <2 x i1> %3 to <2 x i64>
15566  ret <2 x i64> %4
15567}
15568
15569define <2 x i64> @ugt_15_v2i64(<2 x i64> %0) {
15570; PWR5-LABEL: ugt_15_v2i64:
15571; PWR5:       # %bb.0:
15572; PWR5-NEXT:    lis 5, 21845
15573; PWR5-NEXT:    lis 6, 13107
15574; PWR5-NEXT:    ori 5, 5, 21845
15575; PWR5-NEXT:    rotldi 8, 4, 63
15576; PWR5-NEXT:    rotldi 9, 3, 63
15577; PWR5-NEXT:    rldimi 5, 5, 32, 0
15578; PWR5-NEXT:    and 8, 8, 5
15579; PWR5-NEXT:    and 5, 9, 5
15580; PWR5-NEXT:    ori 6, 6, 13107
15581; PWR5-NEXT:    sub 3, 3, 5
15582; PWR5-NEXT:    rldimi 6, 6, 32, 0
15583; PWR5-NEXT:    sub 4, 4, 8
15584; PWR5-NEXT:    and 8, 3, 6
15585; PWR5-NEXT:    rotldi 3, 3, 62
15586; PWR5-NEXT:    and 3, 3, 6
15587; PWR5-NEXT:    lis 7, 3855
15588; PWR5-NEXT:    and 5, 4, 6
15589; PWR5-NEXT:    rotldi 4, 4, 62
15590; PWR5-NEXT:    add 3, 8, 3
15591; PWR5-NEXT:    lis 9, 257
15592; PWR5-NEXT:    ori 7, 7, 3855
15593; PWR5-NEXT:    and 4, 4, 6
15594; PWR5-NEXT:    rldicl 6, 3, 60, 4
15595; PWR5-NEXT:    ori 9, 9, 257
15596; PWR5-NEXT:    rldimi 7, 7, 32, 0
15597; PWR5-NEXT:    add 4, 5, 4
15598; PWR5-NEXT:    add 3, 3, 6
15599; PWR5-NEXT:    rldimi 9, 9, 32, 0
15600; PWR5-NEXT:    rldicl 5, 4, 60, 4
15601; PWR5-NEXT:    and 3, 3, 7
15602; PWR5-NEXT:    add 4, 4, 5
15603; PWR5-NEXT:    mulld 3, 3, 9
15604; PWR5-NEXT:    and 4, 4, 7
15605; PWR5-NEXT:    rldicl 3, 3, 8, 56
15606; PWR5-NEXT:    mulld 4, 4, 9
15607; PWR5-NEXT:    li 5, 15
15608; PWR5-NEXT:    subfic 3, 3, 15
15609; PWR5-NEXT:    rldicl 4, 4, 8, 56
15610; PWR5-NEXT:    subfe 3, 5, 5
15611; PWR5-NEXT:    subfic 4, 4, 15
15612; PWR5-NEXT:    subfe 4, 5, 5
15613; PWR5-NEXT:    blr
15614;
15615; PWR6-LABEL: ugt_15_v2i64:
15616; PWR6:       # %bb.0:
15617; PWR6-NEXT:    lis 5, 21845
15618; PWR6-NEXT:    lis 6, 13107
15619; PWR6-NEXT:    ori 5, 5, 21845
15620; PWR6-NEXT:    rotldi 8, 4, 63
15621; PWR6-NEXT:    rotldi 9, 3, 63
15622; PWR6-NEXT:    rldimi 5, 5, 32, 0
15623; PWR6-NEXT:    and 8, 8, 5
15624; PWR6-NEXT:    and 5, 9, 5
15625; PWR6-NEXT:    ori 6, 6, 13107
15626; PWR6-NEXT:    sub 3, 3, 5
15627; PWR6-NEXT:    rldimi 6, 6, 32, 0
15628; PWR6-NEXT:    sub 4, 4, 8
15629; PWR6-NEXT:    and 8, 3, 6
15630; PWR6-NEXT:    rotldi 3, 3, 62
15631; PWR6-NEXT:    and 3, 3, 6
15632; PWR6-NEXT:    lis 7, 3855
15633; PWR6-NEXT:    and 5, 4, 6
15634; PWR6-NEXT:    rotldi 4, 4, 62
15635; PWR6-NEXT:    add 3, 8, 3
15636; PWR6-NEXT:    lis 9, 257
15637; PWR6-NEXT:    ori 7, 7, 3855
15638; PWR6-NEXT:    and 4, 4, 6
15639; PWR6-NEXT:    rldicl 6, 3, 60, 4
15640; PWR6-NEXT:    ori 9, 9, 257
15641; PWR6-NEXT:    rldimi 7, 7, 32, 0
15642; PWR6-NEXT:    add 4, 5, 4
15643; PWR6-NEXT:    add 3, 3, 6
15644; PWR6-NEXT:    rldimi 9, 9, 32, 0
15645; PWR6-NEXT:    rldicl 5, 4, 60, 4
15646; PWR6-NEXT:    and 3, 3, 7
15647; PWR6-NEXT:    add 4, 4, 5
15648; PWR6-NEXT:    mulld 3, 3, 9
15649; PWR6-NEXT:    and 4, 4, 7
15650; PWR6-NEXT:    rldicl 3, 3, 8, 56
15651; PWR6-NEXT:    mulld 4, 4, 9
15652; PWR6-NEXT:    li 5, 15
15653; PWR6-NEXT:    subfic 3, 3, 15
15654; PWR6-NEXT:    rldicl 4, 4, 8, 56
15655; PWR6-NEXT:    subfe 3, 5, 5
15656; PWR6-NEXT:    subfic 4, 4, 15
15657; PWR6-NEXT:    subfe 4, 5, 5
15658; PWR6-NEXT:    blr
15659;
15660; PWR7-LABEL: ugt_15_v2i64:
15661; PWR7:       # %bb.0:
15662; PWR7-NEXT:    addi 3, 1, -32
15663; PWR7-NEXT:    li 5, -1
15664; PWR7-NEXT:    stxvd2x 34, 0, 3
15665; PWR7-NEXT:    ld 4, -24(1)
15666; PWR7-NEXT:    ld 3, -32(1)
15667; PWR7-NEXT:    popcntd 4, 4
15668; PWR7-NEXT:    popcntd 3, 3
15669; PWR7-NEXT:    cmpldi 4, 15
15670; PWR7-NEXT:    li 4, 0
15671; PWR7-NEXT:    iselgt 6, 5, 4
15672; PWR7-NEXT:    cmpldi 3, 15
15673; PWR7-NEXT:    iselgt 3, 5, 4
15674; PWR7-NEXT:    std 6, -8(1)
15675; PWR7-NEXT:    std 3, -16(1)
15676; PWR7-NEXT:    addi 3, 1, -16
15677; PWR7-NEXT:    lxvd2x 34, 0, 3
15678; PWR7-NEXT:    blr
15679;
15680; PWR8-LABEL: ugt_15_v2i64:
15681; PWR8:       # %bb.0:
15682; PWR8-NEXT:    addis 3, 2, .LCPI128_0@toc@ha
15683; PWR8-NEXT:    vpopcntd 2, 2
15684; PWR8-NEXT:    addi 3, 3, .LCPI128_0@toc@l
15685; PWR8-NEXT:    lxvd2x 35, 0, 3
15686; PWR8-NEXT:    vcmpgtud 2, 2, 3
15687; PWR8-NEXT:    blr
15688;
15689; PWR9-LABEL: ugt_15_v2i64:
15690; PWR9:       # %bb.0:
15691; PWR9-NEXT:    addis 3, 2, .LCPI128_0@toc@ha
15692; PWR9-NEXT:    vpopcntd 2, 2
15693; PWR9-NEXT:    addi 3, 3, .LCPI128_0@toc@l
15694; PWR9-NEXT:    lxv 35, 0(3)
15695; PWR9-NEXT:    vcmpgtud 2, 2, 3
15696; PWR9-NEXT:    blr
15697  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15698  %3 = icmp ugt <2 x i64> %2, <i64 15, i64 15>
15699  %4 = sext <2 x i1> %3 to <2 x i64>
15700  ret <2 x i64> %4
15701}
15702
15703define <2 x i64> @ult_16_v2i64(<2 x i64> %0) {
15704; PWR5-LABEL: ult_16_v2i64:
15705; PWR5:       # %bb.0:
15706; PWR5-NEXT:    lis 5, 21845
15707; PWR5-NEXT:    lis 6, 13107
15708; PWR5-NEXT:    ori 5, 5, 21845
15709; PWR5-NEXT:    rotldi 8, 4, 63
15710; PWR5-NEXT:    rotldi 9, 3, 63
15711; PWR5-NEXT:    rldimi 5, 5, 32, 0
15712; PWR5-NEXT:    and 8, 8, 5
15713; PWR5-NEXT:    and 5, 9, 5
15714; PWR5-NEXT:    ori 6, 6, 13107
15715; PWR5-NEXT:    sub 3, 3, 5
15716; PWR5-NEXT:    rldimi 6, 6, 32, 0
15717; PWR5-NEXT:    sub 4, 4, 8
15718; PWR5-NEXT:    and 8, 3, 6
15719; PWR5-NEXT:    rotldi 3, 3, 62
15720; PWR5-NEXT:    and 3, 3, 6
15721; PWR5-NEXT:    lis 7, 3855
15722; PWR5-NEXT:    and 5, 4, 6
15723; PWR5-NEXT:    rotldi 4, 4, 62
15724; PWR5-NEXT:    add 3, 8, 3
15725; PWR5-NEXT:    lis 9, 257
15726; PWR5-NEXT:    ori 7, 7, 3855
15727; PWR5-NEXT:    and 4, 4, 6
15728; PWR5-NEXT:    rldicl 6, 3, 60, 4
15729; PWR5-NEXT:    ori 9, 9, 257
15730; PWR5-NEXT:    rldimi 7, 7, 32, 0
15731; PWR5-NEXT:    add 4, 5, 4
15732; PWR5-NEXT:    add 3, 3, 6
15733; PWR5-NEXT:    rldimi 9, 9, 32, 0
15734; PWR5-NEXT:    rldicl 5, 4, 60, 4
15735; PWR5-NEXT:    and 3, 3, 7
15736; PWR5-NEXT:    add 4, 4, 5
15737; PWR5-NEXT:    mulld 3, 3, 9
15738; PWR5-NEXT:    and 4, 4, 7
15739; PWR5-NEXT:    rldicl 3, 3, 8, 56
15740; PWR5-NEXT:    li 5, 16
15741; PWR5-NEXT:    mulld 4, 4, 9
15742; PWR5-NEXT:    subc 6, 3, 5
15743; PWR5-NEXT:    rldicl 4, 4, 8, 56
15744; PWR5-NEXT:    subfe 3, 3, 3
15745; PWR5-NEXT:    subc 5, 4, 5
15746; PWR5-NEXT:    subfe 4, 4, 4
15747; PWR5-NEXT:    blr
15748;
15749; PWR6-LABEL: ult_16_v2i64:
15750; PWR6:       # %bb.0:
15751; PWR6-NEXT:    lis 5, 21845
15752; PWR6-NEXT:    lis 6, 13107
15753; PWR6-NEXT:    ori 5, 5, 21845
15754; PWR6-NEXT:    rotldi 8, 4, 63
15755; PWR6-NEXT:    rotldi 9, 3, 63
15756; PWR6-NEXT:    rldimi 5, 5, 32, 0
15757; PWR6-NEXT:    and 8, 8, 5
15758; PWR6-NEXT:    and 5, 9, 5
15759; PWR6-NEXT:    ori 6, 6, 13107
15760; PWR6-NEXT:    sub 3, 3, 5
15761; PWR6-NEXT:    rldimi 6, 6, 32, 0
15762; PWR6-NEXT:    sub 4, 4, 8
15763; PWR6-NEXT:    and 8, 3, 6
15764; PWR6-NEXT:    rotldi 3, 3, 62
15765; PWR6-NEXT:    and 3, 3, 6
15766; PWR6-NEXT:    lis 7, 3855
15767; PWR6-NEXT:    and 5, 4, 6
15768; PWR6-NEXT:    rotldi 4, 4, 62
15769; PWR6-NEXT:    add 3, 8, 3
15770; PWR6-NEXT:    lis 9, 257
15771; PWR6-NEXT:    ori 7, 7, 3855
15772; PWR6-NEXT:    and 4, 4, 6
15773; PWR6-NEXT:    rldicl 6, 3, 60, 4
15774; PWR6-NEXT:    ori 9, 9, 257
15775; PWR6-NEXT:    rldimi 7, 7, 32, 0
15776; PWR6-NEXT:    add 4, 5, 4
15777; PWR6-NEXT:    add 3, 3, 6
15778; PWR6-NEXT:    rldimi 9, 9, 32, 0
15779; PWR6-NEXT:    rldicl 5, 4, 60, 4
15780; PWR6-NEXT:    and 3, 3, 7
15781; PWR6-NEXT:    add 4, 4, 5
15782; PWR6-NEXT:    mulld 3, 3, 9
15783; PWR6-NEXT:    and 4, 4, 7
15784; PWR6-NEXT:    rldicl 3, 3, 8, 56
15785; PWR6-NEXT:    li 5, 16
15786; PWR6-NEXT:    mulld 4, 4, 9
15787; PWR6-NEXT:    subc 6, 3, 5
15788; PWR6-NEXT:    rldicl 4, 4, 8, 56
15789; PWR6-NEXT:    subfe 3, 3, 3
15790; PWR6-NEXT:    subc 5, 4, 5
15791; PWR6-NEXT:    subfe 4, 4, 4
15792; PWR6-NEXT:    blr
15793;
15794; PWR7-LABEL: ult_16_v2i64:
15795; PWR7:       # %bb.0:
15796; PWR7-NEXT:    addi 3, 1, -32
15797; PWR7-NEXT:    li 5, -1
15798; PWR7-NEXT:    stxvd2x 34, 0, 3
15799; PWR7-NEXT:    ld 4, -24(1)
15800; PWR7-NEXT:    ld 3, -32(1)
15801; PWR7-NEXT:    popcntd 4, 4
15802; PWR7-NEXT:    popcntd 3, 3
15803; PWR7-NEXT:    cmpldi 4, 16
15804; PWR7-NEXT:    li 4, 0
15805; PWR7-NEXT:    isellt 6, 5, 4
15806; PWR7-NEXT:    cmpldi 3, 16
15807; PWR7-NEXT:    isellt 3, 5, 4
15808; PWR7-NEXT:    std 6, -8(1)
15809; PWR7-NEXT:    std 3, -16(1)
15810; PWR7-NEXT:    addi 3, 1, -16
15811; PWR7-NEXT:    lxvd2x 34, 0, 3
15812; PWR7-NEXT:    blr
15813;
15814; PWR8-LABEL: ult_16_v2i64:
15815; PWR8:       # %bb.0:
15816; PWR8-NEXT:    addis 3, 2, .LCPI129_0@toc@ha
15817; PWR8-NEXT:    vpopcntd 2, 2
15818; PWR8-NEXT:    addi 3, 3, .LCPI129_0@toc@l
15819; PWR8-NEXT:    lxvd2x 35, 0, 3
15820; PWR8-NEXT:    vcmpgtud 2, 3, 2
15821; PWR8-NEXT:    blr
15822;
15823; PWR9-LABEL: ult_16_v2i64:
15824; PWR9:       # %bb.0:
15825; PWR9-NEXT:    addis 3, 2, .LCPI129_0@toc@ha
15826; PWR9-NEXT:    vpopcntd 2, 2
15827; PWR9-NEXT:    addi 3, 3, .LCPI129_0@toc@l
15828; PWR9-NEXT:    lxv 35, 0(3)
15829; PWR9-NEXT:    vcmpgtud 2, 3, 2
15830; PWR9-NEXT:    blr
15831  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15832  %3 = icmp ult <2 x i64> %2, <i64 16, i64 16>
15833  %4 = sext <2 x i1> %3 to <2 x i64>
15834  ret <2 x i64> %4
15835}
15836
15837define <2 x i64> @ugt_16_v2i64(<2 x i64> %0) {
15838; PWR5-LABEL: ugt_16_v2i64:
15839; PWR5:       # %bb.0:
15840; PWR5-NEXT:    lis 5, 21845
15841; PWR5-NEXT:    lis 6, 13107
15842; PWR5-NEXT:    ori 5, 5, 21845
15843; PWR5-NEXT:    rotldi 8, 4, 63
15844; PWR5-NEXT:    rotldi 9, 3, 63
15845; PWR5-NEXT:    rldimi 5, 5, 32, 0
15846; PWR5-NEXT:    and 8, 8, 5
15847; PWR5-NEXT:    and 5, 9, 5
15848; PWR5-NEXT:    ori 6, 6, 13107
15849; PWR5-NEXT:    sub 3, 3, 5
15850; PWR5-NEXT:    rldimi 6, 6, 32, 0
15851; PWR5-NEXT:    sub 4, 4, 8
15852; PWR5-NEXT:    and 8, 3, 6
15853; PWR5-NEXT:    rotldi 3, 3, 62
15854; PWR5-NEXT:    and 3, 3, 6
15855; PWR5-NEXT:    lis 7, 3855
15856; PWR5-NEXT:    and 5, 4, 6
15857; PWR5-NEXT:    rotldi 4, 4, 62
15858; PWR5-NEXT:    add 3, 8, 3
15859; PWR5-NEXT:    lis 9, 257
15860; PWR5-NEXT:    ori 7, 7, 3855
15861; PWR5-NEXT:    and 4, 4, 6
15862; PWR5-NEXT:    rldicl 6, 3, 60, 4
15863; PWR5-NEXT:    ori 9, 9, 257
15864; PWR5-NEXT:    rldimi 7, 7, 32, 0
15865; PWR5-NEXT:    add 4, 5, 4
15866; PWR5-NEXT:    add 3, 3, 6
15867; PWR5-NEXT:    rldimi 9, 9, 32, 0
15868; PWR5-NEXT:    rldicl 5, 4, 60, 4
15869; PWR5-NEXT:    and 3, 3, 7
15870; PWR5-NEXT:    add 4, 4, 5
15871; PWR5-NEXT:    mulld 3, 3, 9
15872; PWR5-NEXT:    and 4, 4, 7
15873; PWR5-NEXT:    rldicl 3, 3, 8, 56
15874; PWR5-NEXT:    mulld 4, 4, 9
15875; PWR5-NEXT:    li 5, 16
15876; PWR5-NEXT:    subfic 3, 3, 16
15877; PWR5-NEXT:    rldicl 4, 4, 8, 56
15878; PWR5-NEXT:    subfe 3, 5, 5
15879; PWR5-NEXT:    subfic 4, 4, 16
15880; PWR5-NEXT:    subfe 4, 5, 5
15881; PWR5-NEXT:    blr
15882;
15883; PWR6-LABEL: ugt_16_v2i64:
15884; PWR6:       # %bb.0:
15885; PWR6-NEXT:    lis 5, 21845
15886; PWR6-NEXT:    lis 6, 13107
15887; PWR6-NEXT:    ori 5, 5, 21845
15888; PWR6-NEXT:    rotldi 8, 4, 63
15889; PWR6-NEXT:    rotldi 9, 3, 63
15890; PWR6-NEXT:    rldimi 5, 5, 32, 0
15891; PWR6-NEXT:    and 8, 8, 5
15892; PWR6-NEXT:    and 5, 9, 5
15893; PWR6-NEXT:    ori 6, 6, 13107
15894; PWR6-NEXT:    sub 3, 3, 5
15895; PWR6-NEXT:    rldimi 6, 6, 32, 0
15896; PWR6-NEXT:    sub 4, 4, 8
15897; PWR6-NEXT:    and 8, 3, 6
15898; PWR6-NEXT:    rotldi 3, 3, 62
15899; PWR6-NEXT:    and 3, 3, 6
15900; PWR6-NEXT:    lis 7, 3855
15901; PWR6-NEXT:    and 5, 4, 6
15902; PWR6-NEXT:    rotldi 4, 4, 62
15903; PWR6-NEXT:    add 3, 8, 3
15904; PWR6-NEXT:    lis 9, 257
15905; PWR6-NEXT:    ori 7, 7, 3855
15906; PWR6-NEXT:    and 4, 4, 6
15907; PWR6-NEXT:    rldicl 6, 3, 60, 4
15908; PWR6-NEXT:    ori 9, 9, 257
15909; PWR6-NEXT:    rldimi 7, 7, 32, 0
15910; PWR6-NEXT:    add 4, 5, 4
15911; PWR6-NEXT:    add 3, 3, 6
15912; PWR6-NEXT:    rldimi 9, 9, 32, 0
15913; PWR6-NEXT:    rldicl 5, 4, 60, 4
15914; PWR6-NEXT:    and 3, 3, 7
15915; PWR6-NEXT:    add 4, 4, 5
15916; PWR6-NEXT:    mulld 3, 3, 9
15917; PWR6-NEXT:    and 4, 4, 7
15918; PWR6-NEXT:    rldicl 3, 3, 8, 56
15919; PWR6-NEXT:    mulld 4, 4, 9
15920; PWR6-NEXT:    li 5, 16
15921; PWR6-NEXT:    subfic 3, 3, 16
15922; PWR6-NEXT:    rldicl 4, 4, 8, 56
15923; PWR6-NEXT:    subfe 3, 5, 5
15924; PWR6-NEXT:    subfic 4, 4, 16
15925; PWR6-NEXT:    subfe 4, 5, 5
15926; PWR6-NEXT:    blr
15927;
15928; PWR7-LABEL: ugt_16_v2i64:
15929; PWR7:       # %bb.0:
15930; PWR7-NEXT:    addi 3, 1, -32
15931; PWR7-NEXT:    li 5, -1
15932; PWR7-NEXT:    stxvd2x 34, 0, 3
15933; PWR7-NEXT:    ld 4, -24(1)
15934; PWR7-NEXT:    ld 3, -32(1)
15935; PWR7-NEXT:    popcntd 4, 4
15936; PWR7-NEXT:    popcntd 3, 3
15937; PWR7-NEXT:    cmpldi 4, 16
15938; PWR7-NEXT:    li 4, 0
15939; PWR7-NEXT:    iselgt 6, 5, 4
15940; PWR7-NEXT:    cmpldi 3, 16
15941; PWR7-NEXT:    iselgt 3, 5, 4
15942; PWR7-NEXT:    std 6, -8(1)
15943; PWR7-NEXT:    std 3, -16(1)
15944; PWR7-NEXT:    addi 3, 1, -16
15945; PWR7-NEXT:    lxvd2x 34, 0, 3
15946; PWR7-NEXT:    blr
15947;
15948; PWR8-LABEL: ugt_16_v2i64:
15949; PWR8:       # %bb.0:
15950; PWR8-NEXT:    addis 3, 2, .LCPI130_0@toc@ha
15951; PWR8-NEXT:    vpopcntd 2, 2
15952; PWR8-NEXT:    addi 3, 3, .LCPI130_0@toc@l
15953; PWR8-NEXT:    lxvd2x 35, 0, 3
15954; PWR8-NEXT:    vcmpgtud 2, 2, 3
15955; PWR8-NEXT:    blr
15956;
15957; PWR9-LABEL: ugt_16_v2i64:
15958; PWR9:       # %bb.0:
15959; PWR9-NEXT:    addis 3, 2, .LCPI130_0@toc@ha
15960; PWR9-NEXT:    vpopcntd 2, 2
15961; PWR9-NEXT:    addi 3, 3, .LCPI130_0@toc@l
15962; PWR9-NEXT:    lxv 35, 0(3)
15963; PWR9-NEXT:    vcmpgtud 2, 2, 3
15964; PWR9-NEXT:    blr
15965  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15966  %3 = icmp ugt <2 x i64> %2, <i64 16, i64 16>
15967  %4 = sext <2 x i1> %3 to <2 x i64>
15968  ret <2 x i64> %4
15969}
15970
15971define <2 x i64> @ult_17_v2i64(<2 x i64> %0) {
15972; PWR5-LABEL: ult_17_v2i64:
15973; PWR5:       # %bb.0:
15974; PWR5-NEXT:    lis 5, 21845
15975; PWR5-NEXT:    lis 6, 13107
15976; PWR5-NEXT:    ori 5, 5, 21845
15977; PWR5-NEXT:    rotldi 8, 4, 63
15978; PWR5-NEXT:    rotldi 9, 3, 63
15979; PWR5-NEXT:    rldimi 5, 5, 32, 0
15980; PWR5-NEXT:    and 8, 8, 5
15981; PWR5-NEXT:    and 5, 9, 5
15982; PWR5-NEXT:    ori 6, 6, 13107
15983; PWR5-NEXT:    sub 3, 3, 5
15984; PWR5-NEXT:    rldimi 6, 6, 32, 0
15985; PWR5-NEXT:    sub 4, 4, 8
15986; PWR5-NEXT:    and 8, 3, 6
15987; PWR5-NEXT:    rotldi 3, 3, 62
15988; PWR5-NEXT:    and 3, 3, 6
15989; PWR5-NEXT:    lis 7, 3855
15990; PWR5-NEXT:    and 5, 4, 6
15991; PWR5-NEXT:    rotldi 4, 4, 62
15992; PWR5-NEXT:    add 3, 8, 3
15993; PWR5-NEXT:    lis 9, 257
15994; PWR5-NEXT:    ori 7, 7, 3855
15995; PWR5-NEXT:    and 4, 4, 6
15996; PWR5-NEXT:    rldicl 6, 3, 60, 4
15997; PWR5-NEXT:    ori 9, 9, 257
15998; PWR5-NEXT:    rldimi 7, 7, 32, 0
15999; PWR5-NEXT:    add 4, 5, 4
16000; PWR5-NEXT:    add 3, 3, 6
16001; PWR5-NEXT:    rldimi 9, 9, 32, 0
16002; PWR5-NEXT:    rldicl 5, 4, 60, 4
16003; PWR5-NEXT:    and 3, 3, 7
16004; PWR5-NEXT:    add 4, 4, 5
16005; PWR5-NEXT:    mulld 3, 3, 9
16006; PWR5-NEXT:    and 4, 4, 7
16007; PWR5-NEXT:    rldicl 3, 3, 8, 56
16008; PWR5-NEXT:    li 5, 17
16009; PWR5-NEXT:    mulld 4, 4, 9
16010; PWR5-NEXT:    subc 6, 3, 5
16011; PWR5-NEXT:    rldicl 4, 4, 8, 56
16012; PWR5-NEXT:    subfe 3, 3, 3
16013; PWR5-NEXT:    subc 5, 4, 5
16014; PWR5-NEXT:    subfe 4, 4, 4
16015; PWR5-NEXT:    blr
16016;
16017; PWR6-LABEL: ult_17_v2i64:
16018; PWR6:       # %bb.0:
16019; PWR6-NEXT:    lis 5, 21845
16020; PWR6-NEXT:    lis 6, 13107
16021; PWR6-NEXT:    ori 5, 5, 21845
16022; PWR6-NEXT:    rotldi 8, 4, 63
16023; PWR6-NEXT:    rotldi 9, 3, 63
16024; PWR6-NEXT:    rldimi 5, 5, 32, 0
16025; PWR6-NEXT:    and 8, 8, 5
16026; PWR6-NEXT:    and 5, 9, 5
16027; PWR6-NEXT:    ori 6, 6, 13107
16028; PWR6-NEXT:    sub 3, 3, 5
16029; PWR6-NEXT:    rldimi 6, 6, 32, 0
16030; PWR6-NEXT:    sub 4, 4, 8
16031; PWR6-NEXT:    and 8, 3, 6
16032; PWR6-NEXT:    rotldi 3, 3, 62
16033; PWR6-NEXT:    and 3, 3, 6
16034; PWR6-NEXT:    lis 7, 3855
16035; PWR6-NEXT:    and 5, 4, 6
16036; PWR6-NEXT:    rotldi 4, 4, 62
16037; PWR6-NEXT:    add 3, 8, 3
16038; PWR6-NEXT:    lis 9, 257
16039; PWR6-NEXT:    ori 7, 7, 3855
16040; PWR6-NEXT:    and 4, 4, 6
16041; PWR6-NEXT:    rldicl 6, 3, 60, 4
16042; PWR6-NEXT:    ori 9, 9, 257
16043; PWR6-NEXT:    rldimi 7, 7, 32, 0
16044; PWR6-NEXT:    add 4, 5, 4
16045; PWR6-NEXT:    add 3, 3, 6
16046; PWR6-NEXT:    rldimi 9, 9, 32, 0
16047; PWR6-NEXT:    rldicl 5, 4, 60, 4
16048; PWR6-NEXT:    and 3, 3, 7
16049; PWR6-NEXT:    add 4, 4, 5
16050; PWR6-NEXT:    mulld 3, 3, 9
16051; PWR6-NEXT:    and 4, 4, 7
16052; PWR6-NEXT:    rldicl 3, 3, 8, 56
16053; PWR6-NEXT:    li 5, 17
16054; PWR6-NEXT:    mulld 4, 4, 9
16055; PWR6-NEXT:    subc 6, 3, 5
16056; PWR6-NEXT:    rldicl 4, 4, 8, 56
16057; PWR6-NEXT:    subfe 3, 3, 3
16058; PWR6-NEXT:    subc 5, 4, 5
16059; PWR6-NEXT:    subfe 4, 4, 4
16060; PWR6-NEXT:    blr
16061;
16062; PWR7-LABEL: ult_17_v2i64:
16063; PWR7:       # %bb.0:
16064; PWR7-NEXT:    addi 3, 1, -32
16065; PWR7-NEXT:    li 5, -1
16066; PWR7-NEXT:    stxvd2x 34, 0, 3
16067; PWR7-NEXT:    ld 4, -24(1)
16068; PWR7-NEXT:    ld 3, -32(1)
16069; PWR7-NEXT:    popcntd 4, 4
16070; PWR7-NEXT:    popcntd 3, 3
16071; PWR7-NEXT:    cmpldi 4, 17
16072; PWR7-NEXT:    li 4, 0
16073; PWR7-NEXT:    isellt 6, 5, 4
16074; PWR7-NEXT:    cmpldi 3, 17
16075; PWR7-NEXT:    isellt 3, 5, 4
16076; PWR7-NEXT:    std 6, -8(1)
16077; PWR7-NEXT:    std 3, -16(1)
16078; PWR7-NEXT:    addi 3, 1, -16
16079; PWR7-NEXT:    lxvd2x 34, 0, 3
16080; PWR7-NEXT:    blr
16081;
16082; PWR8-LABEL: ult_17_v2i64:
16083; PWR8:       # %bb.0:
16084; PWR8-NEXT:    addis 3, 2, .LCPI131_0@toc@ha
16085; PWR8-NEXT:    vpopcntd 2, 2
16086; PWR8-NEXT:    addi 3, 3, .LCPI131_0@toc@l
16087; PWR8-NEXT:    lxvd2x 35, 0, 3
16088; PWR8-NEXT:    vcmpgtud 2, 3, 2
16089; PWR8-NEXT:    blr
16090;
16091; PWR9-LABEL: ult_17_v2i64:
16092; PWR9:       # %bb.0:
16093; PWR9-NEXT:    addis 3, 2, .LCPI131_0@toc@ha
16094; PWR9-NEXT:    vpopcntd 2, 2
16095; PWR9-NEXT:    addi 3, 3, .LCPI131_0@toc@l
16096; PWR9-NEXT:    lxv 35, 0(3)
16097; PWR9-NEXT:    vcmpgtud 2, 3, 2
16098; PWR9-NEXT:    blr
16099  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16100  %3 = icmp ult <2 x i64> %2, <i64 17, i64 17>
16101  %4 = sext <2 x i1> %3 to <2 x i64>
16102  ret <2 x i64> %4
16103}
16104
16105define <2 x i64> @ugt_17_v2i64(<2 x i64> %0) {
16106; PWR5-LABEL: ugt_17_v2i64:
16107; PWR5:       # %bb.0:
16108; PWR5-NEXT:    lis 5, 21845
16109; PWR5-NEXT:    lis 6, 13107
16110; PWR5-NEXT:    ori 5, 5, 21845
16111; PWR5-NEXT:    rotldi 8, 4, 63
16112; PWR5-NEXT:    rotldi 9, 3, 63
16113; PWR5-NEXT:    rldimi 5, 5, 32, 0
16114; PWR5-NEXT:    and 8, 8, 5
16115; PWR5-NEXT:    and 5, 9, 5
16116; PWR5-NEXT:    ori 6, 6, 13107
16117; PWR5-NEXT:    sub 3, 3, 5
16118; PWR5-NEXT:    rldimi 6, 6, 32, 0
16119; PWR5-NEXT:    sub 4, 4, 8
16120; PWR5-NEXT:    and 8, 3, 6
16121; PWR5-NEXT:    rotldi 3, 3, 62
16122; PWR5-NEXT:    and 3, 3, 6
16123; PWR5-NEXT:    lis 7, 3855
16124; PWR5-NEXT:    and 5, 4, 6
16125; PWR5-NEXT:    rotldi 4, 4, 62
16126; PWR5-NEXT:    add 3, 8, 3
16127; PWR5-NEXT:    lis 9, 257
16128; PWR5-NEXT:    ori 7, 7, 3855
16129; PWR5-NEXT:    and 4, 4, 6
16130; PWR5-NEXT:    rldicl 6, 3, 60, 4
16131; PWR5-NEXT:    ori 9, 9, 257
16132; PWR5-NEXT:    rldimi 7, 7, 32, 0
16133; PWR5-NEXT:    add 4, 5, 4
16134; PWR5-NEXT:    add 3, 3, 6
16135; PWR5-NEXT:    rldimi 9, 9, 32, 0
16136; PWR5-NEXT:    rldicl 5, 4, 60, 4
16137; PWR5-NEXT:    and 3, 3, 7
16138; PWR5-NEXT:    add 4, 4, 5
16139; PWR5-NEXT:    mulld 3, 3, 9
16140; PWR5-NEXT:    and 4, 4, 7
16141; PWR5-NEXT:    rldicl 3, 3, 8, 56
16142; PWR5-NEXT:    mulld 4, 4, 9
16143; PWR5-NEXT:    li 5, 17
16144; PWR5-NEXT:    subfic 3, 3, 17
16145; PWR5-NEXT:    rldicl 4, 4, 8, 56
16146; PWR5-NEXT:    subfe 3, 5, 5
16147; PWR5-NEXT:    subfic 4, 4, 17
16148; PWR5-NEXT:    subfe 4, 5, 5
16149; PWR5-NEXT:    blr
16150;
16151; PWR6-LABEL: ugt_17_v2i64:
16152; PWR6:       # %bb.0:
16153; PWR6-NEXT:    lis 5, 21845
16154; PWR6-NEXT:    lis 6, 13107
16155; PWR6-NEXT:    ori 5, 5, 21845
16156; PWR6-NEXT:    rotldi 8, 4, 63
16157; PWR6-NEXT:    rotldi 9, 3, 63
16158; PWR6-NEXT:    rldimi 5, 5, 32, 0
16159; PWR6-NEXT:    and 8, 8, 5
16160; PWR6-NEXT:    and 5, 9, 5
16161; PWR6-NEXT:    ori 6, 6, 13107
16162; PWR6-NEXT:    sub 3, 3, 5
16163; PWR6-NEXT:    rldimi 6, 6, 32, 0
16164; PWR6-NEXT:    sub 4, 4, 8
16165; PWR6-NEXT:    and 8, 3, 6
16166; PWR6-NEXT:    rotldi 3, 3, 62
16167; PWR6-NEXT:    and 3, 3, 6
16168; PWR6-NEXT:    lis 7, 3855
16169; PWR6-NEXT:    and 5, 4, 6
16170; PWR6-NEXT:    rotldi 4, 4, 62
16171; PWR6-NEXT:    add 3, 8, 3
16172; PWR6-NEXT:    lis 9, 257
16173; PWR6-NEXT:    ori 7, 7, 3855
16174; PWR6-NEXT:    and 4, 4, 6
16175; PWR6-NEXT:    rldicl 6, 3, 60, 4
16176; PWR6-NEXT:    ori 9, 9, 257
16177; PWR6-NEXT:    rldimi 7, 7, 32, 0
16178; PWR6-NEXT:    add 4, 5, 4
16179; PWR6-NEXT:    add 3, 3, 6
16180; PWR6-NEXT:    rldimi 9, 9, 32, 0
16181; PWR6-NEXT:    rldicl 5, 4, 60, 4
16182; PWR6-NEXT:    and 3, 3, 7
16183; PWR6-NEXT:    add 4, 4, 5
16184; PWR6-NEXT:    mulld 3, 3, 9
16185; PWR6-NEXT:    and 4, 4, 7
16186; PWR6-NEXT:    rldicl 3, 3, 8, 56
16187; PWR6-NEXT:    mulld 4, 4, 9
16188; PWR6-NEXT:    li 5, 17
16189; PWR6-NEXT:    subfic 3, 3, 17
16190; PWR6-NEXT:    rldicl 4, 4, 8, 56
16191; PWR6-NEXT:    subfe 3, 5, 5
16192; PWR6-NEXT:    subfic 4, 4, 17
16193; PWR6-NEXT:    subfe 4, 5, 5
16194; PWR6-NEXT:    blr
16195;
16196; PWR7-LABEL: ugt_17_v2i64:
16197; PWR7:       # %bb.0:
16198; PWR7-NEXT:    addi 3, 1, -32
16199; PWR7-NEXT:    li 5, -1
16200; PWR7-NEXT:    stxvd2x 34, 0, 3
16201; PWR7-NEXT:    ld 4, -24(1)
16202; PWR7-NEXT:    ld 3, -32(1)
16203; PWR7-NEXT:    popcntd 4, 4
16204; PWR7-NEXT:    popcntd 3, 3
16205; PWR7-NEXT:    cmpldi 4, 17
16206; PWR7-NEXT:    li 4, 0
16207; PWR7-NEXT:    iselgt 6, 5, 4
16208; PWR7-NEXT:    cmpldi 3, 17
16209; PWR7-NEXT:    iselgt 3, 5, 4
16210; PWR7-NEXT:    std 6, -8(1)
16211; PWR7-NEXT:    std 3, -16(1)
16212; PWR7-NEXT:    addi 3, 1, -16
16213; PWR7-NEXT:    lxvd2x 34, 0, 3
16214; PWR7-NEXT:    blr
16215;
16216; PWR8-LABEL: ugt_17_v2i64:
16217; PWR8:       # %bb.0:
16218; PWR8-NEXT:    addis 3, 2, .LCPI132_0@toc@ha
16219; PWR8-NEXT:    vpopcntd 2, 2
16220; PWR8-NEXT:    addi 3, 3, .LCPI132_0@toc@l
16221; PWR8-NEXT:    lxvd2x 35, 0, 3
16222; PWR8-NEXT:    vcmpgtud 2, 2, 3
16223; PWR8-NEXT:    blr
16224;
16225; PWR9-LABEL: ugt_17_v2i64:
16226; PWR9:       # %bb.0:
16227; PWR9-NEXT:    addis 3, 2, .LCPI132_0@toc@ha
16228; PWR9-NEXT:    vpopcntd 2, 2
16229; PWR9-NEXT:    addi 3, 3, .LCPI132_0@toc@l
16230; PWR9-NEXT:    lxv 35, 0(3)
16231; PWR9-NEXT:    vcmpgtud 2, 2, 3
16232; PWR9-NEXT:    blr
16233  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16234  %3 = icmp ugt <2 x i64> %2, <i64 17, i64 17>
16235  %4 = sext <2 x i1> %3 to <2 x i64>
16236  ret <2 x i64> %4
16237}
16238
16239define <2 x i64> @ult_18_v2i64(<2 x i64> %0) {
16240; PWR5-LABEL: ult_18_v2i64:
16241; PWR5:       # %bb.0:
16242; PWR5-NEXT:    lis 5, 21845
16243; PWR5-NEXT:    lis 6, 13107
16244; PWR5-NEXT:    ori 5, 5, 21845
16245; PWR5-NEXT:    rotldi 8, 4, 63
16246; PWR5-NEXT:    rotldi 9, 3, 63
16247; PWR5-NEXT:    rldimi 5, 5, 32, 0
16248; PWR5-NEXT:    and 8, 8, 5
16249; PWR5-NEXT:    and 5, 9, 5
16250; PWR5-NEXT:    ori 6, 6, 13107
16251; PWR5-NEXT:    sub 3, 3, 5
16252; PWR5-NEXT:    rldimi 6, 6, 32, 0
16253; PWR5-NEXT:    sub 4, 4, 8
16254; PWR5-NEXT:    and 8, 3, 6
16255; PWR5-NEXT:    rotldi 3, 3, 62
16256; PWR5-NEXT:    and 3, 3, 6
16257; PWR5-NEXT:    lis 7, 3855
16258; PWR5-NEXT:    and 5, 4, 6
16259; PWR5-NEXT:    rotldi 4, 4, 62
16260; PWR5-NEXT:    add 3, 8, 3
16261; PWR5-NEXT:    lis 9, 257
16262; PWR5-NEXT:    ori 7, 7, 3855
16263; PWR5-NEXT:    and 4, 4, 6
16264; PWR5-NEXT:    rldicl 6, 3, 60, 4
16265; PWR5-NEXT:    ori 9, 9, 257
16266; PWR5-NEXT:    rldimi 7, 7, 32, 0
16267; PWR5-NEXT:    add 4, 5, 4
16268; PWR5-NEXT:    add 3, 3, 6
16269; PWR5-NEXT:    rldimi 9, 9, 32, 0
16270; PWR5-NEXT:    rldicl 5, 4, 60, 4
16271; PWR5-NEXT:    and 3, 3, 7
16272; PWR5-NEXT:    add 4, 4, 5
16273; PWR5-NEXT:    mulld 3, 3, 9
16274; PWR5-NEXT:    and 4, 4, 7
16275; PWR5-NEXT:    rldicl 3, 3, 8, 56
16276; PWR5-NEXT:    li 5, 18
16277; PWR5-NEXT:    mulld 4, 4, 9
16278; PWR5-NEXT:    subc 6, 3, 5
16279; PWR5-NEXT:    rldicl 4, 4, 8, 56
16280; PWR5-NEXT:    subfe 3, 3, 3
16281; PWR5-NEXT:    subc 5, 4, 5
16282; PWR5-NEXT:    subfe 4, 4, 4
16283; PWR5-NEXT:    blr
16284;
16285; PWR6-LABEL: ult_18_v2i64:
16286; PWR6:       # %bb.0:
16287; PWR6-NEXT:    lis 5, 21845
16288; PWR6-NEXT:    lis 6, 13107
16289; PWR6-NEXT:    ori 5, 5, 21845
16290; PWR6-NEXT:    rotldi 8, 4, 63
16291; PWR6-NEXT:    rotldi 9, 3, 63
16292; PWR6-NEXT:    rldimi 5, 5, 32, 0
16293; PWR6-NEXT:    and 8, 8, 5
16294; PWR6-NEXT:    and 5, 9, 5
16295; PWR6-NEXT:    ori 6, 6, 13107
16296; PWR6-NEXT:    sub 3, 3, 5
16297; PWR6-NEXT:    rldimi 6, 6, 32, 0
16298; PWR6-NEXT:    sub 4, 4, 8
16299; PWR6-NEXT:    and 8, 3, 6
16300; PWR6-NEXT:    rotldi 3, 3, 62
16301; PWR6-NEXT:    and 3, 3, 6
16302; PWR6-NEXT:    lis 7, 3855
16303; PWR6-NEXT:    and 5, 4, 6
16304; PWR6-NEXT:    rotldi 4, 4, 62
16305; PWR6-NEXT:    add 3, 8, 3
16306; PWR6-NEXT:    lis 9, 257
16307; PWR6-NEXT:    ori 7, 7, 3855
16308; PWR6-NEXT:    and 4, 4, 6
16309; PWR6-NEXT:    rldicl 6, 3, 60, 4
16310; PWR6-NEXT:    ori 9, 9, 257
16311; PWR6-NEXT:    rldimi 7, 7, 32, 0
16312; PWR6-NEXT:    add 4, 5, 4
16313; PWR6-NEXT:    add 3, 3, 6
16314; PWR6-NEXT:    rldimi 9, 9, 32, 0
16315; PWR6-NEXT:    rldicl 5, 4, 60, 4
16316; PWR6-NEXT:    and 3, 3, 7
16317; PWR6-NEXT:    add 4, 4, 5
16318; PWR6-NEXT:    mulld 3, 3, 9
16319; PWR6-NEXT:    and 4, 4, 7
16320; PWR6-NEXT:    rldicl 3, 3, 8, 56
16321; PWR6-NEXT:    li 5, 18
16322; PWR6-NEXT:    mulld 4, 4, 9
16323; PWR6-NEXT:    subc 6, 3, 5
16324; PWR6-NEXT:    rldicl 4, 4, 8, 56
16325; PWR6-NEXT:    subfe 3, 3, 3
16326; PWR6-NEXT:    subc 5, 4, 5
16327; PWR6-NEXT:    subfe 4, 4, 4
16328; PWR6-NEXT:    blr
16329;
16330; PWR7-LABEL: ult_18_v2i64:
16331; PWR7:       # %bb.0:
16332; PWR7-NEXT:    addi 3, 1, -32
16333; PWR7-NEXT:    li 5, -1
16334; PWR7-NEXT:    stxvd2x 34, 0, 3
16335; PWR7-NEXT:    ld 4, -24(1)
16336; PWR7-NEXT:    ld 3, -32(1)
16337; PWR7-NEXT:    popcntd 4, 4
16338; PWR7-NEXT:    popcntd 3, 3
16339; PWR7-NEXT:    cmpldi 4, 18
16340; PWR7-NEXT:    li 4, 0
16341; PWR7-NEXT:    isellt 6, 5, 4
16342; PWR7-NEXT:    cmpldi 3, 18
16343; PWR7-NEXT:    isellt 3, 5, 4
16344; PWR7-NEXT:    std 6, -8(1)
16345; PWR7-NEXT:    std 3, -16(1)
16346; PWR7-NEXT:    addi 3, 1, -16
16347; PWR7-NEXT:    lxvd2x 34, 0, 3
16348; PWR7-NEXT:    blr
16349;
16350; PWR8-LABEL: ult_18_v2i64:
16351; PWR8:       # %bb.0:
16352; PWR8-NEXT:    addis 3, 2, .LCPI133_0@toc@ha
16353; PWR8-NEXT:    vpopcntd 2, 2
16354; PWR8-NEXT:    addi 3, 3, .LCPI133_0@toc@l
16355; PWR8-NEXT:    lxvd2x 35, 0, 3
16356; PWR8-NEXT:    vcmpgtud 2, 3, 2
16357; PWR8-NEXT:    blr
16358;
16359; PWR9-LABEL: ult_18_v2i64:
16360; PWR9:       # %bb.0:
16361; PWR9-NEXT:    addis 3, 2, .LCPI133_0@toc@ha
16362; PWR9-NEXT:    vpopcntd 2, 2
16363; PWR9-NEXT:    addi 3, 3, .LCPI133_0@toc@l
16364; PWR9-NEXT:    lxv 35, 0(3)
16365; PWR9-NEXT:    vcmpgtud 2, 3, 2
16366; PWR9-NEXT:    blr
16367  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16368  %3 = icmp ult <2 x i64> %2, <i64 18, i64 18>
16369  %4 = sext <2 x i1> %3 to <2 x i64>
16370  ret <2 x i64> %4
16371}
16372
16373define <2 x i64> @ugt_18_v2i64(<2 x i64> %0) {
16374; PWR5-LABEL: ugt_18_v2i64:
16375; PWR5:       # %bb.0:
16376; PWR5-NEXT:    lis 5, 21845
16377; PWR5-NEXT:    lis 6, 13107
16378; PWR5-NEXT:    ori 5, 5, 21845
16379; PWR5-NEXT:    rotldi 8, 4, 63
16380; PWR5-NEXT:    rotldi 9, 3, 63
16381; PWR5-NEXT:    rldimi 5, 5, 32, 0
16382; PWR5-NEXT:    and 8, 8, 5
16383; PWR5-NEXT:    and 5, 9, 5
16384; PWR5-NEXT:    ori 6, 6, 13107
16385; PWR5-NEXT:    sub 3, 3, 5
16386; PWR5-NEXT:    rldimi 6, 6, 32, 0
16387; PWR5-NEXT:    sub 4, 4, 8
16388; PWR5-NEXT:    and 8, 3, 6
16389; PWR5-NEXT:    rotldi 3, 3, 62
16390; PWR5-NEXT:    and 3, 3, 6
16391; PWR5-NEXT:    lis 7, 3855
16392; PWR5-NEXT:    and 5, 4, 6
16393; PWR5-NEXT:    rotldi 4, 4, 62
16394; PWR5-NEXT:    add 3, 8, 3
16395; PWR5-NEXT:    lis 9, 257
16396; PWR5-NEXT:    ori 7, 7, 3855
16397; PWR5-NEXT:    and 4, 4, 6
16398; PWR5-NEXT:    rldicl 6, 3, 60, 4
16399; PWR5-NEXT:    ori 9, 9, 257
16400; PWR5-NEXT:    rldimi 7, 7, 32, 0
16401; PWR5-NEXT:    add 4, 5, 4
16402; PWR5-NEXT:    add 3, 3, 6
16403; PWR5-NEXT:    rldimi 9, 9, 32, 0
16404; PWR5-NEXT:    rldicl 5, 4, 60, 4
16405; PWR5-NEXT:    and 3, 3, 7
16406; PWR5-NEXT:    add 4, 4, 5
16407; PWR5-NEXT:    mulld 3, 3, 9
16408; PWR5-NEXT:    and 4, 4, 7
16409; PWR5-NEXT:    rldicl 3, 3, 8, 56
16410; PWR5-NEXT:    mulld 4, 4, 9
16411; PWR5-NEXT:    li 5, 18
16412; PWR5-NEXT:    subfic 3, 3, 18
16413; PWR5-NEXT:    rldicl 4, 4, 8, 56
16414; PWR5-NEXT:    subfe 3, 5, 5
16415; PWR5-NEXT:    subfic 4, 4, 18
16416; PWR5-NEXT:    subfe 4, 5, 5
16417; PWR5-NEXT:    blr
16418;
16419; PWR6-LABEL: ugt_18_v2i64:
16420; PWR6:       # %bb.0:
16421; PWR6-NEXT:    lis 5, 21845
16422; PWR6-NEXT:    lis 6, 13107
16423; PWR6-NEXT:    ori 5, 5, 21845
16424; PWR6-NEXT:    rotldi 8, 4, 63
16425; PWR6-NEXT:    rotldi 9, 3, 63
16426; PWR6-NEXT:    rldimi 5, 5, 32, 0
16427; PWR6-NEXT:    and 8, 8, 5
16428; PWR6-NEXT:    and 5, 9, 5
16429; PWR6-NEXT:    ori 6, 6, 13107
16430; PWR6-NEXT:    sub 3, 3, 5
16431; PWR6-NEXT:    rldimi 6, 6, 32, 0
16432; PWR6-NEXT:    sub 4, 4, 8
16433; PWR6-NEXT:    and 8, 3, 6
16434; PWR6-NEXT:    rotldi 3, 3, 62
16435; PWR6-NEXT:    and 3, 3, 6
16436; PWR6-NEXT:    lis 7, 3855
16437; PWR6-NEXT:    and 5, 4, 6
16438; PWR6-NEXT:    rotldi 4, 4, 62
16439; PWR6-NEXT:    add 3, 8, 3
16440; PWR6-NEXT:    lis 9, 257
16441; PWR6-NEXT:    ori 7, 7, 3855
16442; PWR6-NEXT:    and 4, 4, 6
16443; PWR6-NEXT:    rldicl 6, 3, 60, 4
16444; PWR6-NEXT:    ori 9, 9, 257
16445; PWR6-NEXT:    rldimi 7, 7, 32, 0
16446; PWR6-NEXT:    add 4, 5, 4
16447; PWR6-NEXT:    add 3, 3, 6
16448; PWR6-NEXT:    rldimi 9, 9, 32, 0
16449; PWR6-NEXT:    rldicl 5, 4, 60, 4
16450; PWR6-NEXT:    and 3, 3, 7
16451; PWR6-NEXT:    add 4, 4, 5
16452; PWR6-NEXT:    mulld 3, 3, 9
16453; PWR6-NEXT:    and 4, 4, 7
16454; PWR6-NEXT:    rldicl 3, 3, 8, 56
16455; PWR6-NEXT:    mulld 4, 4, 9
16456; PWR6-NEXT:    li 5, 18
16457; PWR6-NEXT:    subfic 3, 3, 18
16458; PWR6-NEXT:    rldicl 4, 4, 8, 56
16459; PWR6-NEXT:    subfe 3, 5, 5
16460; PWR6-NEXT:    subfic 4, 4, 18
16461; PWR6-NEXT:    subfe 4, 5, 5
16462; PWR6-NEXT:    blr
16463;
16464; PWR7-LABEL: ugt_18_v2i64:
16465; PWR7:       # %bb.0:
16466; PWR7-NEXT:    addi 3, 1, -32
16467; PWR7-NEXT:    li 5, -1
16468; PWR7-NEXT:    stxvd2x 34, 0, 3
16469; PWR7-NEXT:    ld 4, -24(1)
16470; PWR7-NEXT:    ld 3, -32(1)
16471; PWR7-NEXT:    popcntd 4, 4
16472; PWR7-NEXT:    popcntd 3, 3
16473; PWR7-NEXT:    cmpldi 4, 18
16474; PWR7-NEXT:    li 4, 0
16475; PWR7-NEXT:    iselgt 6, 5, 4
16476; PWR7-NEXT:    cmpldi 3, 18
16477; PWR7-NEXT:    iselgt 3, 5, 4
16478; PWR7-NEXT:    std 6, -8(1)
16479; PWR7-NEXT:    std 3, -16(1)
16480; PWR7-NEXT:    addi 3, 1, -16
16481; PWR7-NEXT:    lxvd2x 34, 0, 3
16482; PWR7-NEXT:    blr
16483;
16484; PWR8-LABEL: ugt_18_v2i64:
16485; PWR8:       # %bb.0:
16486; PWR8-NEXT:    addis 3, 2, .LCPI134_0@toc@ha
16487; PWR8-NEXT:    vpopcntd 2, 2
16488; PWR8-NEXT:    addi 3, 3, .LCPI134_0@toc@l
16489; PWR8-NEXT:    lxvd2x 35, 0, 3
16490; PWR8-NEXT:    vcmpgtud 2, 2, 3
16491; PWR8-NEXT:    blr
16492;
16493; PWR9-LABEL: ugt_18_v2i64:
16494; PWR9:       # %bb.0:
16495; PWR9-NEXT:    addis 3, 2, .LCPI134_0@toc@ha
16496; PWR9-NEXT:    vpopcntd 2, 2
16497; PWR9-NEXT:    addi 3, 3, .LCPI134_0@toc@l
16498; PWR9-NEXT:    lxv 35, 0(3)
16499; PWR9-NEXT:    vcmpgtud 2, 2, 3
16500; PWR9-NEXT:    blr
16501  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16502  %3 = icmp ugt <2 x i64> %2, <i64 18, i64 18>
16503  %4 = sext <2 x i1> %3 to <2 x i64>
16504  ret <2 x i64> %4
16505}
16506
16507define <2 x i64> @ult_19_v2i64(<2 x i64> %0) {
16508; PWR5-LABEL: ult_19_v2i64:
16509; PWR5:       # %bb.0:
16510; PWR5-NEXT:    lis 5, 21845
16511; PWR5-NEXT:    lis 6, 13107
16512; PWR5-NEXT:    ori 5, 5, 21845
16513; PWR5-NEXT:    rotldi 8, 4, 63
16514; PWR5-NEXT:    rotldi 9, 3, 63
16515; PWR5-NEXT:    rldimi 5, 5, 32, 0
16516; PWR5-NEXT:    and 8, 8, 5
16517; PWR5-NEXT:    and 5, 9, 5
16518; PWR5-NEXT:    ori 6, 6, 13107
16519; PWR5-NEXT:    sub 3, 3, 5
16520; PWR5-NEXT:    rldimi 6, 6, 32, 0
16521; PWR5-NEXT:    sub 4, 4, 8
16522; PWR5-NEXT:    and 8, 3, 6
16523; PWR5-NEXT:    rotldi 3, 3, 62
16524; PWR5-NEXT:    and 3, 3, 6
16525; PWR5-NEXT:    lis 7, 3855
16526; PWR5-NEXT:    and 5, 4, 6
16527; PWR5-NEXT:    rotldi 4, 4, 62
16528; PWR5-NEXT:    add 3, 8, 3
16529; PWR5-NEXT:    lis 9, 257
16530; PWR5-NEXT:    ori 7, 7, 3855
16531; PWR5-NEXT:    and 4, 4, 6
16532; PWR5-NEXT:    rldicl 6, 3, 60, 4
16533; PWR5-NEXT:    ori 9, 9, 257
16534; PWR5-NEXT:    rldimi 7, 7, 32, 0
16535; PWR5-NEXT:    add 4, 5, 4
16536; PWR5-NEXT:    add 3, 3, 6
16537; PWR5-NEXT:    rldimi 9, 9, 32, 0
16538; PWR5-NEXT:    rldicl 5, 4, 60, 4
16539; PWR5-NEXT:    and 3, 3, 7
16540; PWR5-NEXT:    add 4, 4, 5
16541; PWR5-NEXT:    mulld 3, 3, 9
16542; PWR5-NEXT:    and 4, 4, 7
16543; PWR5-NEXT:    rldicl 3, 3, 8, 56
16544; PWR5-NEXT:    li 5, 19
16545; PWR5-NEXT:    mulld 4, 4, 9
16546; PWR5-NEXT:    subc 6, 3, 5
16547; PWR5-NEXT:    rldicl 4, 4, 8, 56
16548; PWR5-NEXT:    subfe 3, 3, 3
16549; PWR5-NEXT:    subc 5, 4, 5
16550; PWR5-NEXT:    subfe 4, 4, 4
16551; PWR5-NEXT:    blr
16552;
16553; PWR6-LABEL: ult_19_v2i64:
16554; PWR6:       # %bb.0:
16555; PWR6-NEXT:    lis 5, 21845
16556; PWR6-NEXT:    lis 6, 13107
16557; PWR6-NEXT:    ori 5, 5, 21845
16558; PWR6-NEXT:    rotldi 8, 4, 63
16559; PWR6-NEXT:    rotldi 9, 3, 63
16560; PWR6-NEXT:    rldimi 5, 5, 32, 0
16561; PWR6-NEXT:    and 8, 8, 5
16562; PWR6-NEXT:    and 5, 9, 5
16563; PWR6-NEXT:    ori 6, 6, 13107
16564; PWR6-NEXT:    sub 3, 3, 5
16565; PWR6-NEXT:    rldimi 6, 6, 32, 0
16566; PWR6-NEXT:    sub 4, 4, 8
16567; PWR6-NEXT:    and 8, 3, 6
16568; PWR6-NEXT:    rotldi 3, 3, 62
16569; PWR6-NEXT:    and 3, 3, 6
16570; PWR6-NEXT:    lis 7, 3855
16571; PWR6-NEXT:    and 5, 4, 6
16572; PWR6-NEXT:    rotldi 4, 4, 62
16573; PWR6-NEXT:    add 3, 8, 3
16574; PWR6-NEXT:    lis 9, 257
16575; PWR6-NEXT:    ori 7, 7, 3855
16576; PWR6-NEXT:    and 4, 4, 6
16577; PWR6-NEXT:    rldicl 6, 3, 60, 4
16578; PWR6-NEXT:    ori 9, 9, 257
16579; PWR6-NEXT:    rldimi 7, 7, 32, 0
16580; PWR6-NEXT:    add 4, 5, 4
16581; PWR6-NEXT:    add 3, 3, 6
16582; PWR6-NEXT:    rldimi 9, 9, 32, 0
16583; PWR6-NEXT:    rldicl 5, 4, 60, 4
16584; PWR6-NEXT:    and 3, 3, 7
16585; PWR6-NEXT:    add 4, 4, 5
16586; PWR6-NEXT:    mulld 3, 3, 9
16587; PWR6-NEXT:    and 4, 4, 7
16588; PWR6-NEXT:    rldicl 3, 3, 8, 56
16589; PWR6-NEXT:    li 5, 19
16590; PWR6-NEXT:    mulld 4, 4, 9
16591; PWR6-NEXT:    subc 6, 3, 5
16592; PWR6-NEXT:    rldicl 4, 4, 8, 56
16593; PWR6-NEXT:    subfe 3, 3, 3
16594; PWR6-NEXT:    subc 5, 4, 5
16595; PWR6-NEXT:    subfe 4, 4, 4
16596; PWR6-NEXT:    blr
16597;
16598; PWR7-LABEL: ult_19_v2i64:
16599; PWR7:       # %bb.0:
16600; PWR7-NEXT:    addi 3, 1, -32
16601; PWR7-NEXT:    li 5, -1
16602; PWR7-NEXT:    stxvd2x 34, 0, 3
16603; PWR7-NEXT:    ld 4, -24(1)
16604; PWR7-NEXT:    ld 3, -32(1)
16605; PWR7-NEXT:    popcntd 4, 4
16606; PWR7-NEXT:    popcntd 3, 3
16607; PWR7-NEXT:    cmpldi 4, 19
16608; PWR7-NEXT:    li 4, 0
16609; PWR7-NEXT:    isellt 6, 5, 4
16610; PWR7-NEXT:    cmpldi 3, 19
16611; PWR7-NEXT:    isellt 3, 5, 4
16612; PWR7-NEXT:    std 6, -8(1)
16613; PWR7-NEXT:    std 3, -16(1)
16614; PWR7-NEXT:    addi 3, 1, -16
16615; PWR7-NEXT:    lxvd2x 34, 0, 3
16616; PWR7-NEXT:    blr
16617;
16618; PWR8-LABEL: ult_19_v2i64:
16619; PWR8:       # %bb.0:
16620; PWR8-NEXT:    addis 3, 2, .LCPI135_0@toc@ha
16621; PWR8-NEXT:    vpopcntd 2, 2
16622; PWR8-NEXT:    addi 3, 3, .LCPI135_0@toc@l
16623; PWR8-NEXT:    lxvd2x 35, 0, 3
16624; PWR8-NEXT:    vcmpgtud 2, 3, 2
16625; PWR8-NEXT:    blr
16626;
16627; PWR9-LABEL: ult_19_v2i64:
16628; PWR9:       # %bb.0:
16629; PWR9-NEXT:    addis 3, 2, .LCPI135_0@toc@ha
16630; PWR9-NEXT:    vpopcntd 2, 2
16631; PWR9-NEXT:    addi 3, 3, .LCPI135_0@toc@l
16632; PWR9-NEXT:    lxv 35, 0(3)
16633; PWR9-NEXT:    vcmpgtud 2, 3, 2
16634; PWR9-NEXT:    blr
16635  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16636  %3 = icmp ult <2 x i64> %2, <i64 19, i64 19>
16637  %4 = sext <2 x i1> %3 to <2 x i64>
16638  ret <2 x i64> %4
16639}
16640
16641define <2 x i64> @ugt_19_v2i64(<2 x i64> %0) {
16642; PWR5-LABEL: ugt_19_v2i64:
16643; PWR5:       # %bb.0:
16644; PWR5-NEXT:    lis 5, 21845
16645; PWR5-NEXT:    lis 6, 13107
16646; PWR5-NEXT:    ori 5, 5, 21845
16647; PWR5-NEXT:    rotldi 8, 4, 63
16648; PWR5-NEXT:    rotldi 9, 3, 63
16649; PWR5-NEXT:    rldimi 5, 5, 32, 0
16650; PWR5-NEXT:    and 8, 8, 5
16651; PWR5-NEXT:    and 5, 9, 5
16652; PWR5-NEXT:    ori 6, 6, 13107
16653; PWR5-NEXT:    sub 3, 3, 5
16654; PWR5-NEXT:    rldimi 6, 6, 32, 0
16655; PWR5-NEXT:    sub 4, 4, 8
16656; PWR5-NEXT:    and 8, 3, 6
16657; PWR5-NEXT:    rotldi 3, 3, 62
16658; PWR5-NEXT:    and 3, 3, 6
16659; PWR5-NEXT:    lis 7, 3855
16660; PWR5-NEXT:    and 5, 4, 6
16661; PWR5-NEXT:    rotldi 4, 4, 62
16662; PWR5-NEXT:    add 3, 8, 3
16663; PWR5-NEXT:    lis 9, 257
16664; PWR5-NEXT:    ori 7, 7, 3855
16665; PWR5-NEXT:    and 4, 4, 6
16666; PWR5-NEXT:    rldicl 6, 3, 60, 4
16667; PWR5-NEXT:    ori 9, 9, 257
16668; PWR5-NEXT:    rldimi 7, 7, 32, 0
16669; PWR5-NEXT:    add 4, 5, 4
16670; PWR5-NEXT:    add 3, 3, 6
16671; PWR5-NEXT:    rldimi 9, 9, 32, 0
16672; PWR5-NEXT:    rldicl 5, 4, 60, 4
16673; PWR5-NEXT:    and 3, 3, 7
16674; PWR5-NEXT:    add 4, 4, 5
16675; PWR5-NEXT:    mulld 3, 3, 9
16676; PWR5-NEXT:    and 4, 4, 7
16677; PWR5-NEXT:    rldicl 3, 3, 8, 56
16678; PWR5-NEXT:    mulld 4, 4, 9
16679; PWR5-NEXT:    li 5, 19
16680; PWR5-NEXT:    subfic 3, 3, 19
16681; PWR5-NEXT:    rldicl 4, 4, 8, 56
16682; PWR5-NEXT:    subfe 3, 5, 5
16683; PWR5-NEXT:    subfic 4, 4, 19
16684; PWR5-NEXT:    subfe 4, 5, 5
16685; PWR5-NEXT:    blr
16686;
16687; PWR6-LABEL: ugt_19_v2i64:
16688; PWR6:       # %bb.0:
16689; PWR6-NEXT:    lis 5, 21845
16690; PWR6-NEXT:    lis 6, 13107
16691; PWR6-NEXT:    ori 5, 5, 21845
16692; PWR6-NEXT:    rotldi 8, 4, 63
16693; PWR6-NEXT:    rotldi 9, 3, 63
16694; PWR6-NEXT:    rldimi 5, 5, 32, 0
16695; PWR6-NEXT:    and 8, 8, 5
16696; PWR6-NEXT:    and 5, 9, 5
16697; PWR6-NEXT:    ori 6, 6, 13107
16698; PWR6-NEXT:    sub 3, 3, 5
16699; PWR6-NEXT:    rldimi 6, 6, 32, 0
16700; PWR6-NEXT:    sub 4, 4, 8
16701; PWR6-NEXT:    and 8, 3, 6
16702; PWR6-NEXT:    rotldi 3, 3, 62
16703; PWR6-NEXT:    and 3, 3, 6
16704; PWR6-NEXT:    lis 7, 3855
16705; PWR6-NEXT:    and 5, 4, 6
16706; PWR6-NEXT:    rotldi 4, 4, 62
16707; PWR6-NEXT:    add 3, 8, 3
16708; PWR6-NEXT:    lis 9, 257
16709; PWR6-NEXT:    ori 7, 7, 3855
16710; PWR6-NEXT:    and 4, 4, 6
16711; PWR6-NEXT:    rldicl 6, 3, 60, 4
16712; PWR6-NEXT:    ori 9, 9, 257
16713; PWR6-NEXT:    rldimi 7, 7, 32, 0
16714; PWR6-NEXT:    add 4, 5, 4
16715; PWR6-NEXT:    add 3, 3, 6
16716; PWR6-NEXT:    rldimi 9, 9, 32, 0
16717; PWR6-NEXT:    rldicl 5, 4, 60, 4
16718; PWR6-NEXT:    and 3, 3, 7
16719; PWR6-NEXT:    add 4, 4, 5
16720; PWR6-NEXT:    mulld 3, 3, 9
16721; PWR6-NEXT:    and 4, 4, 7
16722; PWR6-NEXT:    rldicl 3, 3, 8, 56
16723; PWR6-NEXT:    mulld 4, 4, 9
16724; PWR6-NEXT:    li 5, 19
16725; PWR6-NEXT:    subfic 3, 3, 19
16726; PWR6-NEXT:    rldicl 4, 4, 8, 56
16727; PWR6-NEXT:    subfe 3, 5, 5
16728; PWR6-NEXT:    subfic 4, 4, 19
16729; PWR6-NEXT:    subfe 4, 5, 5
16730; PWR6-NEXT:    blr
16731;
16732; PWR7-LABEL: ugt_19_v2i64:
16733; PWR7:       # %bb.0:
16734; PWR7-NEXT:    addi 3, 1, -32
16735; PWR7-NEXT:    li 5, -1
16736; PWR7-NEXT:    stxvd2x 34, 0, 3
16737; PWR7-NEXT:    ld 4, -24(1)
16738; PWR7-NEXT:    ld 3, -32(1)
16739; PWR7-NEXT:    popcntd 4, 4
16740; PWR7-NEXT:    popcntd 3, 3
16741; PWR7-NEXT:    cmpldi 4, 19
16742; PWR7-NEXT:    li 4, 0
16743; PWR7-NEXT:    iselgt 6, 5, 4
16744; PWR7-NEXT:    cmpldi 3, 19
16745; PWR7-NEXT:    iselgt 3, 5, 4
16746; PWR7-NEXT:    std 6, -8(1)
16747; PWR7-NEXT:    std 3, -16(1)
16748; PWR7-NEXT:    addi 3, 1, -16
16749; PWR7-NEXT:    lxvd2x 34, 0, 3
16750; PWR7-NEXT:    blr
16751;
16752; PWR8-LABEL: ugt_19_v2i64:
16753; PWR8:       # %bb.0:
16754; PWR8-NEXT:    addis 3, 2, .LCPI136_0@toc@ha
16755; PWR8-NEXT:    vpopcntd 2, 2
16756; PWR8-NEXT:    addi 3, 3, .LCPI136_0@toc@l
16757; PWR8-NEXT:    lxvd2x 35, 0, 3
16758; PWR8-NEXT:    vcmpgtud 2, 2, 3
16759; PWR8-NEXT:    blr
16760;
16761; PWR9-LABEL: ugt_19_v2i64:
16762; PWR9:       # %bb.0:
16763; PWR9-NEXT:    addis 3, 2, .LCPI136_0@toc@ha
16764; PWR9-NEXT:    vpopcntd 2, 2
16765; PWR9-NEXT:    addi 3, 3, .LCPI136_0@toc@l
16766; PWR9-NEXT:    lxv 35, 0(3)
16767; PWR9-NEXT:    vcmpgtud 2, 2, 3
16768; PWR9-NEXT:    blr
16769  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16770  %3 = icmp ugt <2 x i64> %2, <i64 19, i64 19>
16771  %4 = sext <2 x i1> %3 to <2 x i64>
16772  ret <2 x i64> %4
16773}
16774
16775define <2 x i64> @ult_20_v2i64(<2 x i64> %0) {
16776; PWR5-LABEL: ult_20_v2i64:
16777; PWR5:       # %bb.0:
16778; PWR5-NEXT:    lis 5, 21845
16779; PWR5-NEXT:    lis 6, 13107
16780; PWR5-NEXT:    ori 5, 5, 21845
16781; PWR5-NEXT:    rotldi 8, 4, 63
16782; PWR5-NEXT:    rotldi 9, 3, 63
16783; PWR5-NEXT:    rldimi 5, 5, 32, 0
16784; PWR5-NEXT:    and 8, 8, 5
16785; PWR5-NEXT:    and 5, 9, 5
16786; PWR5-NEXT:    ori 6, 6, 13107
16787; PWR5-NEXT:    sub 3, 3, 5
16788; PWR5-NEXT:    rldimi 6, 6, 32, 0
16789; PWR5-NEXT:    sub 4, 4, 8
16790; PWR5-NEXT:    and 8, 3, 6
16791; PWR5-NEXT:    rotldi 3, 3, 62
16792; PWR5-NEXT:    and 3, 3, 6
16793; PWR5-NEXT:    lis 7, 3855
16794; PWR5-NEXT:    and 5, 4, 6
16795; PWR5-NEXT:    rotldi 4, 4, 62
16796; PWR5-NEXT:    add 3, 8, 3
16797; PWR5-NEXT:    lis 9, 257
16798; PWR5-NEXT:    ori 7, 7, 3855
16799; PWR5-NEXT:    and 4, 4, 6
16800; PWR5-NEXT:    rldicl 6, 3, 60, 4
16801; PWR5-NEXT:    ori 9, 9, 257
16802; PWR5-NEXT:    rldimi 7, 7, 32, 0
16803; PWR5-NEXT:    add 4, 5, 4
16804; PWR5-NEXT:    add 3, 3, 6
16805; PWR5-NEXT:    rldimi 9, 9, 32, 0
16806; PWR5-NEXT:    rldicl 5, 4, 60, 4
16807; PWR5-NEXT:    and 3, 3, 7
16808; PWR5-NEXT:    add 4, 4, 5
16809; PWR5-NEXT:    mulld 3, 3, 9
16810; PWR5-NEXT:    and 4, 4, 7
16811; PWR5-NEXT:    rldicl 3, 3, 8, 56
16812; PWR5-NEXT:    li 5, 20
16813; PWR5-NEXT:    mulld 4, 4, 9
16814; PWR5-NEXT:    subc 6, 3, 5
16815; PWR5-NEXT:    rldicl 4, 4, 8, 56
16816; PWR5-NEXT:    subfe 3, 3, 3
16817; PWR5-NEXT:    subc 5, 4, 5
16818; PWR5-NEXT:    subfe 4, 4, 4
16819; PWR5-NEXT:    blr
16820;
16821; PWR6-LABEL: ult_20_v2i64:
16822; PWR6:       # %bb.0:
16823; PWR6-NEXT:    lis 5, 21845
16824; PWR6-NEXT:    lis 6, 13107
16825; PWR6-NEXT:    ori 5, 5, 21845
16826; PWR6-NEXT:    rotldi 8, 4, 63
16827; PWR6-NEXT:    rotldi 9, 3, 63
16828; PWR6-NEXT:    rldimi 5, 5, 32, 0
16829; PWR6-NEXT:    and 8, 8, 5
16830; PWR6-NEXT:    and 5, 9, 5
16831; PWR6-NEXT:    ori 6, 6, 13107
16832; PWR6-NEXT:    sub 3, 3, 5
16833; PWR6-NEXT:    rldimi 6, 6, 32, 0
16834; PWR6-NEXT:    sub 4, 4, 8
16835; PWR6-NEXT:    and 8, 3, 6
16836; PWR6-NEXT:    rotldi 3, 3, 62
16837; PWR6-NEXT:    and 3, 3, 6
16838; PWR6-NEXT:    lis 7, 3855
16839; PWR6-NEXT:    and 5, 4, 6
16840; PWR6-NEXT:    rotldi 4, 4, 62
16841; PWR6-NEXT:    add 3, 8, 3
16842; PWR6-NEXT:    lis 9, 257
16843; PWR6-NEXT:    ori 7, 7, 3855
16844; PWR6-NEXT:    and 4, 4, 6
16845; PWR6-NEXT:    rldicl 6, 3, 60, 4
16846; PWR6-NEXT:    ori 9, 9, 257
16847; PWR6-NEXT:    rldimi 7, 7, 32, 0
16848; PWR6-NEXT:    add 4, 5, 4
16849; PWR6-NEXT:    add 3, 3, 6
16850; PWR6-NEXT:    rldimi 9, 9, 32, 0
16851; PWR6-NEXT:    rldicl 5, 4, 60, 4
16852; PWR6-NEXT:    and 3, 3, 7
16853; PWR6-NEXT:    add 4, 4, 5
16854; PWR6-NEXT:    mulld 3, 3, 9
16855; PWR6-NEXT:    and 4, 4, 7
16856; PWR6-NEXT:    rldicl 3, 3, 8, 56
16857; PWR6-NEXT:    li 5, 20
16858; PWR6-NEXT:    mulld 4, 4, 9
16859; PWR6-NEXT:    subc 6, 3, 5
16860; PWR6-NEXT:    rldicl 4, 4, 8, 56
16861; PWR6-NEXT:    subfe 3, 3, 3
16862; PWR6-NEXT:    subc 5, 4, 5
16863; PWR6-NEXT:    subfe 4, 4, 4
16864; PWR6-NEXT:    blr
16865;
16866; PWR7-LABEL: ult_20_v2i64:
16867; PWR7:       # %bb.0:
16868; PWR7-NEXT:    addi 3, 1, -32
16869; PWR7-NEXT:    li 5, -1
16870; PWR7-NEXT:    stxvd2x 34, 0, 3
16871; PWR7-NEXT:    ld 4, -24(1)
16872; PWR7-NEXT:    ld 3, -32(1)
16873; PWR7-NEXT:    popcntd 4, 4
16874; PWR7-NEXT:    popcntd 3, 3
16875; PWR7-NEXT:    cmpldi 4, 20
16876; PWR7-NEXT:    li 4, 0
16877; PWR7-NEXT:    isellt 6, 5, 4
16878; PWR7-NEXT:    cmpldi 3, 20
16879; PWR7-NEXT:    isellt 3, 5, 4
16880; PWR7-NEXT:    std 6, -8(1)
16881; PWR7-NEXT:    std 3, -16(1)
16882; PWR7-NEXT:    addi 3, 1, -16
16883; PWR7-NEXT:    lxvd2x 34, 0, 3
16884; PWR7-NEXT:    blr
16885;
16886; PWR8-LABEL: ult_20_v2i64:
16887; PWR8:       # %bb.0:
16888; PWR8-NEXT:    addis 3, 2, .LCPI137_0@toc@ha
16889; PWR8-NEXT:    vpopcntd 2, 2
16890; PWR8-NEXT:    addi 3, 3, .LCPI137_0@toc@l
16891; PWR8-NEXT:    lxvd2x 35, 0, 3
16892; PWR8-NEXT:    vcmpgtud 2, 3, 2
16893; PWR8-NEXT:    blr
16894;
16895; PWR9-LABEL: ult_20_v2i64:
16896; PWR9:       # %bb.0:
16897; PWR9-NEXT:    addis 3, 2, .LCPI137_0@toc@ha
16898; PWR9-NEXT:    vpopcntd 2, 2
16899; PWR9-NEXT:    addi 3, 3, .LCPI137_0@toc@l
16900; PWR9-NEXT:    lxv 35, 0(3)
16901; PWR9-NEXT:    vcmpgtud 2, 3, 2
16902; PWR9-NEXT:    blr
16903  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16904  %3 = icmp ult <2 x i64> %2, <i64 20, i64 20>
16905  %4 = sext <2 x i1> %3 to <2 x i64>
16906  ret <2 x i64> %4
16907}
16908
16909define <2 x i64> @ugt_20_v2i64(<2 x i64> %0) {
16910; PWR5-LABEL: ugt_20_v2i64:
16911; PWR5:       # %bb.0:
16912; PWR5-NEXT:    lis 5, 21845
16913; PWR5-NEXT:    lis 6, 13107
16914; PWR5-NEXT:    ori 5, 5, 21845
16915; PWR5-NEXT:    rotldi 8, 4, 63
16916; PWR5-NEXT:    rotldi 9, 3, 63
16917; PWR5-NEXT:    rldimi 5, 5, 32, 0
16918; PWR5-NEXT:    and 8, 8, 5
16919; PWR5-NEXT:    and 5, 9, 5
16920; PWR5-NEXT:    ori 6, 6, 13107
16921; PWR5-NEXT:    sub 3, 3, 5
16922; PWR5-NEXT:    rldimi 6, 6, 32, 0
16923; PWR5-NEXT:    sub 4, 4, 8
16924; PWR5-NEXT:    and 8, 3, 6
16925; PWR5-NEXT:    rotldi 3, 3, 62
16926; PWR5-NEXT:    and 3, 3, 6
16927; PWR5-NEXT:    lis 7, 3855
16928; PWR5-NEXT:    and 5, 4, 6
16929; PWR5-NEXT:    rotldi 4, 4, 62
16930; PWR5-NEXT:    add 3, 8, 3
16931; PWR5-NEXT:    lis 9, 257
16932; PWR5-NEXT:    ori 7, 7, 3855
16933; PWR5-NEXT:    and 4, 4, 6
16934; PWR5-NEXT:    rldicl 6, 3, 60, 4
16935; PWR5-NEXT:    ori 9, 9, 257
16936; PWR5-NEXT:    rldimi 7, 7, 32, 0
16937; PWR5-NEXT:    add 4, 5, 4
16938; PWR5-NEXT:    add 3, 3, 6
16939; PWR5-NEXT:    rldimi 9, 9, 32, 0
16940; PWR5-NEXT:    rldicl 5, 4, 60, 4
16941; PWR5-NEXT:    and 3, 3, 7
16942; PWR5-NEXT:    add 4, 4, 5
16943; PWR5-NEXT:    mulld 3, 3, 9
16944; PWR5-NEXT:    and 4, 4, 7
16945; PWR5-NEXT:    rldicl 3, 3, 8, 56
16946; PWR5-NEXT:    mulld 4, 4, 9
16947; PWR5-NEXT:    li 5, 20
16948; PWR5-NEXT:    subfic 3, 3, 20
16949; PWR5-NEXT:    rldicl 4, 4, 8, 56
16950; PWR5-NEXT:    subfe 3, 5, 5
16951; PWR5-NEXT:    subfic 4, 4, 20
16952; PWR5-NEXT:    subfe 4, 5, 5
16953; PWR5-NEXT:    blr
16954;
16955; PWR6-LABEL: ugt_20_v2i64:
16956; PWR6:       # %bb.0:
16957; PWR6-NEXT:    lis 5, 21845
16958; PWR6-NEXT:    lis 6, 13107
16959; PWR6-NEXT:    ori 5, 5, 21845
16960; PWR6-NEXT:    rotldi 8, 4, 63
16961; PWR6-NEXT:    rotldi 9, 3, 63
16962; PWR6-NEXT:    rldimi 5, 5, 32, 0
16963; PWR6-NEXT:    and 8, 8, 5
16964; PWR6-NEXT:    and 5, 9, 5
16965; PWR6-NEXT:    ori 6, 6, 13107
16966; PWR6-NEXT:    sub 3, 3, 5
16967; PWR6-NEXT:    rldimi 6, 6, 32, 0
16968; PWR6-NEXT:    sub 4, 4, 8
16969; PWR6-NEXT:    and 8, 3, 6
16970; PWR6-NEXT:    rotldi 3, 3, 62
16971; PWR6-NEXT:    and 3, 3, 6
16972; PWR6-NEXT:    lis 7, 3855
16973; PWR6-NEXT:    and 5, 4, 6
16974; PWR6-NEXT:    rotldi 4, 4, 62
16975; PWR6-NEXT:    add 3, 8, 3
16976; PWR6-NEXT:    lis 9, 257
16977; PWR6-NEXT:    ori 7, 7, 3855
16978; PWR6-NEXT:    and 4, 4, 6
16979; PWR6-NEXT:    rldicl 6, 3, 60, 4
16980; PWR6-NEXT:    ori 9, 9, 257
16981; PWR6-NEXT:    rldimi 7, 7, 32, 0
16982; PWR6-NEXT:    add 4, 5, 4
16983; PWR6-NEXT:    add 3, 3, 6
16984; PWR6-NEXT:    rldimi 9, 9, 32, 0
16985; PWR6-NEXT:    rldicl 5, 4, 60, 4
16986; PWR6-NEXT:    and 3, 3, 7
16987; PWR6-NEXT:    add 4, 4, 5
16988; PWR6-NEXT:    mulld 3, 3, 9
16989; PWR6-NEXT:    and 4, 4, 7
16990; PWR6-NEXT:    rldicl 3, 3, 8, 56
16991; PWR6-NEXT:    mulld 4, 4, 9
16992; PWR6-NEXT:    li 5, 20
16993; PWR6-NEXT:    subfic 3, 3, 20
16994; PWR6-NEXT:    rldicl 4, 4, 8, 56
16995; PWR6-NEXT:    subfe 3, 5, 5
16996; PWR6-NEXT:    subfic 4, 4, 20
16997; PWR6-NEXT:    subfe 4, 5, 5
16998; PWR6-NEXT:    blr
16999;
17000; PWR7-LABEL: ugt_20_v2i64:
17001; PWR7:       # %bb.0:
17002; PWR7-NEXT:    addi 3, 1, -32
17003; PWR7-NEXT:    li 5, -1
17004; PWR7-NEXT:    stxvd2x 34, 0, 3
17005; PWR7-NEXT:    ld 4, -24(1)
17006; PWR7-NEXT:    ld 3, -32(1)
17007; PWR7-NEXT:    popcntd 4, 4
17008; PWR7-NEXT:    popcntd 3, 3
17009; PWR7-NEXT:    cmpldi 4, 20
17010; PWR7-NEXT:    li 4, 0
17011; PWR7-NEXT:    iselgt 6, 5, 4
17012; PWR7-NEXT:    cmpldi 3, 20
17013; PWR7-NEXT:    iselgt 3, 5, 4
17014; PWR7-NEXT:    std 6, -8(1)
17015; PWR7-NEXT:    std 3, -16(1)
17016; PWR7-NEXT:    addi 3, 1, -16
17017; PWR7-NEXT:    lxvd2x 34, 0, 3
17018; PWR7-NEXT:    blr
17019;
17020; PWR8-LABEL: ugt_20_v2i64:
17021; PWR8:       # %bb.0:
17022; PWR8-NEXT:    addis 3, 2, .LCPI138_0@toc@ha
17023; PWR8-NEXT:    vpopcntd 2, 2
17024; PWR8-NEXT:    addi 3, 3, .LCPI138_0@toc@l
17025; PWR8-NEXT:    lxvd2x 35, 0, 3
17026; PWR8-NEXT:    vcmpgtud 2, 2, 3
17027; PWR8-NEXT:    blr
17028;
17029; PWR9-LABEL: ugt_20_v2i64:
17030; PWR9:       # %bb.0:
17031; PWR9-NEXT:    addis 3, 2, .LCPI138_0@toc@ha
17032; PWR9-NEXT:    vpopcntd 2, 2
17033; PWR9-NEXT:    addi 3, 3, .LCPI138_0@toc@l
17034; PWR9-NEXT:    lxv 35, 0(3)
17035; PWR9-NEXT:    vcmpgtud 2, 2, 3
17036; PWR9-NEXT:    blr
17037  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17038  %3 = icmp ugt <2 x i64> %2, <i64 20, i64 20>
17039  %4 = sext <2 x i1> %3 to <2 x i64>
17040  ret <2 x i64> %4
17041}
17042
17043define <2 x i64> @ult_21_v2i64(<2 x i64> %0) {
17044; PWR5-LABEL: ult_21_v2i64:
17045; PWR5:       # %bb.0:
17046; PWR5-NEXT:    lis 5, 21845
17047; PWR5-NEXT:    lis 6, 13107
17048; PWR5-NEXT:    ori 5, 5, 21845
17049; PWR5-NEXT:    rotldi 8, 4, 63
17050; PWR5-NEXT:    rotldi 9, 3, 63
17051; PWR5-NEXT:    rldimi 5, 5, 32, 0
17052; PWR5-NEXT:    and 8, 8, 5
17053; PWR5-NEXT:    and 5, 9, 5
17054; PWR5-NEXT:    ori 6, 6, 13107
17055; PWR5-NEXT:    sub 3, 3, 5
17056; PWR5-NEXT:    rldimi 6, 6, 32, 0
17057; PWR5-NEXT:    sub 4, 4, 8
17058; PWR5-NEXT:    and 8, 3, 6
17059; PWR5-NEXT:    rotldi 3, 3, 62
17060; PWR5-NEXT:    and 3, 3, 6
17061; PWR5-NEXT:    lis 7, 3855
17062; PWR5-NEXT:    and 5, 4, 6
17063; PWR5-NEXT:    rotldi 4, 4, 62
17064; PWR5-NEXT:    add 3, 8, 3
17065; PWR5-NEXT:    lis 9, 257
17066; PWR5-NEXT:    ori 7, 7, 3855
17067; PWR5-NEXT:    and 4, 4, 6
17068; PWR5-NEXT:    rldicl 6, 3, 60, 4
17069; PWR5-NEXT:    ori 9, 9, 257
17070; PWR5-NEXT:    rldimi 7, 7, 32, 0
17071; PWR5-NEXT:    add 4, 5, 4
17072; PWR5-NEXT:    add 3, 3, 6
17073; PWR5-NEXT:    rldimi 9, 9, 32, 0
17074; PWR5-NEXT:    rldicl 5, 4, 60, 4
17075; PWR5-NEXT:    and 3, 3, 7
17076; PWR5-NEXT:    add 4, 4, 5
17077; PWR5-NEXT:    mulld 3, 3, 9
17078; PWR5-NEXT:    and 4, 4, 7
17079; PWR5-NEXT:    rldicl 3, 3, 8, 56
17080; PWR5-NEXT:    li 5, 21
17081; PWR5-NEXT:    mulld 4, 4, 9
17082; PWR5-NEXT:    subc 6, 3, 5
17083; PWR5-NEXT:    rldicl 4, 4, 8, 56
17084; PWR5-NEXT:    subfe 3, 3, 3
17085; PWR5-NEXT:    subc 5, 4, 5
17086; PWR5-NEXT:    subfe 4, 4, 4
17087; PWR5-NEXT:    blr
17088;
17089; PWR6-LABEL: ult_21_v2i64:
17090; PWR6:       # %bb.0:
17091; PWR6-NEXT:    lis 5, 21845
17092; PWR6-NEXT:    lis 6, 13107
17093; PWR6-NEXT:    ori 5, 5, 21845
17094; PWR6-NEXT:    rotldi 8, 4, 63
17095; PWR6-NEXT:    rotldi 9, 3, 63
17096; PWR6-NEXT:    rldimi 5, 5, 32, 0
17097; PWR6-NEXT:    and 8, 8, 5
17098; PWR6-NEXT:    and 5, 9, 5
17099; PWR6-NEXT:    ori 6, 6, 13107
17100; PWR6-NEXT:    sub 3, 3, 5
17101; PWR6-NEXT:    rldimi 6, 6, 32, 0
17102; PWR6-NEXT:    sub 4, 4, 8
17103; PWR6-NEXT:    and 8, 3, 6
17104; PWR6-NEXT:    rotldi 3, 3, 62
17105; PWR6-NEXT:    and 3, 3, 6
17106; PWR6-NEXT:    lis 7, 3855
17107; PWR6-NEXT:    and 5, 4, 6
17108; PWR6-NEXT:    rotldi 4, 4, 62
17109; PWR6-NEXT:    add 3, 8, 3
17110; PWR6-NEXT:    lis 9, 257
17111; PWR6-NEXT:    ori 7, 7, 3855
17112; PWR6-NEXT:    and 4, 4, 6
17113; PWR6-NEXT:    rldicl 6, 3, 60, 4
17114; PWR6-NEXT:    ori 9, 9, 257
17115; PWR6-NEXT:    rldimi 7, 7, 32, 0
17116; PWR6-NEXT:    add 4, 5, 4
17117; PWR6-NEXT:    add 3, 3, 6
17118; PWR6-NEXT:    rldimi 9, 9, 32, 0
17119; PWR6-NEXT:    rldicl 5, 4, 60, 4
17120; PWR6-NEXT:    and 3, 3, 7
17121; PWR6-NEXT:    add 4, 4, 5
17122; PWR6-NEXT:    mulld 3, 3, 9
17123; PWR6-NEXT:    and 4, 4, 7
17124; PWR6-NEXT:    rldicl 3, 3, 8, 56
17125; PWR6-NEXT:    li 5, 21
17126; PWR6-NEXT:    mulld 4, 4, 9
17127; PWR6-NEXT:    subc 6, 3, 5
17128; PWR6-NEXT:    rldicl 4, 4, 8, 56
17129; PWR6-NEXT:    subfe 3, 3, 3
17130; PWR6-NEXT:    subc 5, 4, 5
17131; PWR6-NEXT:    subfe 4, 4, 4
17132; PWR6-NEXT:    blr
17133;
17134; PWR7-LABEL: ult_21_v2i64:
17135; PWR7:       # %bb.0:
17136; PWR7-NEXT:    addi 3, 1, -32
17137; PWR7-NEXT:    li 5, -1
17138; PWR7-NEXT:    stxvd2x 34, 0, 3
17139; PWR7-NEXT:    ld 4, -24(1)
17140; PWR7-NEXT:    ld 3, -32(1)
17141; PWR7-NEXT:    popcntd 4, 4
17142; PWR7-NEXT:    popcntd 3, 3
17143; PWR7-NEXT:    cmpldi 4, 21
17144; PWR7-NEXT:    li 4, 0
17145; PWR7-NEXT:    isellt 6, 5, 4
17146; PWR7-NEXT:    cmpldi 3, 21
17147; PWR7-NEXT:    isellt 3, 5, 4
17148; PWR7-NEXT:    std 6, -8(1)
17149; PWR7-NEXT:    std 3, -16(1)
17150; PWR7-NEXT:    addi 3, 1, -16
17151; PWR7-NEXT:    lxvd2x 34, 0, 3
17152; PWR7-NEXT:    blr
17153;
17154; PWR8-LABEL: ult_21_v2i64:
17155; PWR8:       # %bb.0:
17156; PWR8-NEXT:    addis 3, 2, .LCPI139_0@toc@ha
17157; PWR8-NEXT:    vpopcntd 2, 2
17158; PWR8-NEXT:    addi 3, 3, .LCPI139_0@toc@l
17159; PWR8-NEXT:    lxvd2x 35, 0, 3
17160; PWR8-NEXT:    vcmpgtud 2, 3, 2
17161; PWR8-NEXT:    blr
17162;
17163; PWR9-LABEL: ult_21_v2i64:
17164; PWR9:       # %bb.0:
17165; PWR9-NEXT:    addis 3, 2, .LCPI139_0@toc@ha
17166; PWR9-NEXT:    vpopcntd 2, 2
17167; PWR9-NEXT:    addi 3, 3, .LCPI139_0@toc@l
17168; PWR9-NEXT:    lxv 35, 0(3)
17169; PWR9-NEXT:    vcmpgtud 2, 3, 2
17170; PWR9-NEXT:    blr
17171  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17172  %3 = icmp ult <2 x i64> %2, <i64 21, i64 21>
17173  %4 = sext <2 x i1> %3 to <2 x i64>
17174  ret <2 x i64> %4
17175}
17176
17177define <2 x i64> @ugt_21_v2i64(<2 x i64> %0) {
17178; PWR5-LABEL: ugt_21_v2i64:
17179; PWR5:       # %bb.0:
17180; PWR5-NEXT:    lis 5, 21845
17181; PWR5-NEXT:    lis 6, 13107
17182; PWR5-NEXT:    ori 5, 5, 21845
17183; PWR5-NEXT:    rotldi 8, 4, 63
17184; PWR5-NEXT:    rotldi 9, 3, 63
17185; PWR5-NEXT:    rldimi 5, 5, 32, 0
17186; PWR5-NEXT:    and 8, 8, 5
17187; PWR5-NEXT:    and 5, 9, 5
17188; PWR5-NEXT:    ori 6, 6, 13107
17189; PWR5-NEXT:    sub 3, 3, 5
17190; PWR5-NEXT:    rldimi 6, 6, 32, 0
17191; PWR5-NEXT:    sub 4, 4, 8
17192; PWR5-NEXT:    and 8, 3, 6
17193; PWR5-NEXT:    rotldi 3, 3, 62
17194; PWR5-NEXT:    and 3, 3, 6
17195; PWR5-NEXT:    lis 7, 3855
17196; PWR5-NEXT:    and 5, 4, 6
17197; PWR5-NEXT:    rotldi 4, 4, 62
17198; PWR5-NEXT:    add 3, 8, 3
17199; PWR5-NEXT:    lis 9, 257
17200; PWR5-NEXT:    ori 7, 7, 3855
17201; PWR5-NEXT:    and 4, 4, 6
17202; PWR5-NEXT:    rldicl 6, 3, 60, 4
17203; PWR5-NEXT:    ori 9, 9, 257
17204; PWR5-NEXT:    rldimi 7, 7, 32, 0
17205; PWR5-NEXT:    add 4, 5, 4
17206; PWR5-NEXT:    add 3, 3, 6
17207; PWR5-NEXT:    rldimi 9, 9, 32, 0
17208; PWR5-NEXT:    rldicl 5, 4, 60, 4
17209; PWR5-NEXT:    and 3, 3, 7
17210; PWR5-NEXT:    add 4, 4, 5
17211; PWR5-NEXT:    mulld 3, 3, 9
17212; PWR5-NEXT:    and 4, 4, 7
17213; PWR5-NEXT:    rldicl 3, 3, 8, 56
17214; PWR5-NEXT:    mulld 4, 4, 9
17215; PWR5-NEXT:    li 5, 21
17216; PWR5-NEXT:    subfic 3, 3, 21
17217; PWR5-NEXT:    rldicl 4, 4, 8, 56
17218; PWR5-NEXT:    subfe 3, 5, 5
17219; PWR5-NEXT:    subfic 4, 4, 21
17220; PWR5-NEXT:    subfe 4, 5, 5
17221; PWR5-NEXT:    blr
17222;
17223; PWR6-LABEL: ugt_21_v2i64:
17224; PWR6:       # %bb.0:
17225; PWR6-NEXT:    lis 5, 21845
17226; PWR6-NEXT:    lis 6, 13107
17227; PWR6-NEXT:    ori 5, 5, 21845
17228; PWR6-NEXT:    rotldi 8, 4, 63
17229; PWR6-NEXT:    rotldi 9, 3, 63
17230; PWR6-NEXT:    rldimi 5, 5, 32, 0
17231; PWR6-NEXT:    and 8, 8, 5
17232; PWR6-NEXT:    and 5, 9, 5
17233; PWR6-NEXT:    ori 6, 6, 13107
17234; PWR6-NEXT:    sub 3, 3, 5
17235; PWR6-NEXT:    rldimi 6, 6, 32, 0
17236; PWR6-NEXT:    sub 4, 4, 8
17237; PWR6-NEXT:    and 8, 3, 6
17238; PWR6-NEXT:    rotldi 3, 3, 62
17239; PWR6-NEXT:    and 3, 3, 6
17240; PWR6-NEXT:    lis 7, 3855
17241; PWR6-NEXT:    and 5, 4, 6
17242; PWR6-NEXT:    rotldi 4, 4, 62
17243; PWR6-NEXT:    add 3, 8, 3
17244; PWR6-NEXT:    lis 9, 257
17245; PWR6-NEXT:    ori 7, 7, 3855
17246; PWR6-NEXT:    and 4, 4, 6
17247; PWR6-NEXT:    rldicl 6, 3, 60, 4
17248; PWR6-NEXT:    ori 9, 9, 257
17249; PWR6-NEXT:    rldimi 7, 7, 32, 0
17250; PWR6-NEXT:    add 4, 5, 4
17251; PWR6-NEXT:    add 3, 3, 6
17252; PWR6-NEXT:    rldimi 9, 9, 32, 0
17253; PWR6-NEXT:    rldicl 5, 4, 60, 4
17254; PWR6-NEXT:    and 3, 3, 7
17255; PWR6-NEXT:    add 4, 4, 5
17256; PWR6-NEXT:    mulld 3, 3, 9
17257; PWR6-NEXT:    and 4, 4, 7
17258; PWR6-NEXT:    rldicl 3, 3, 8, 56
17259; PWR6-NEXT:    mulld 4, 4, 9
17260; PWR6-NEXT:    li 5, 21
17261; PWR6-NEXT:    subfic 3, 3, 21
17262; PWR6-NEXT:    rldicl 4, 4, 8, 56
17263; PWR6-NEXT:    subfe 3, 5, 5
17264; PWR6-NEXT:    subfic 4, 4, 21
17265; PWR6-NEXT:    subfe 4, 5, 5
17266; PWR6-NEXT:    blr
17267;
17268; PWR7-LABEL: ugt_21_v2i64:
17269; PWR7:       # %bb.0:
17270; PWR7-NEXT:    addi 3, 1, -32
17271; PWR7-NEXT:    li 5, -1
17272; PWR7-NEXT:    stxvd2x 34, 0, 3
17273; PWR7-NEXT:    ld 4, -24(1)
17274; PWR7-NEXT:    ld 3, -32(1)
17275; PWR7-NEXT:    popcntd 4, 4
17276; PWR7-NEXT:    popcntd 3, 3
17277; PWR7-NEXT:    cmpldi 4, 21
17278; PWR7-NEXT:    li 4, 0
17279; PWR7-NEXT:    iselgt 6, 5, 4
17280; PWR7-NEXT:    cmpldi 3, 21
17281; PWR7-NEXT:    iselgt 3, 5, 4
17282; PWR7-NEXT:    std 6, -8(1)
17283; PWR7-NEXT:    std 3, -16(1)
17284; PWR7-NEXT:    addi 3, 1, -16
17285; PWR7-NEXT:    lxvd2x 34, 0, 3
17286; PWR7-NEXT:    blr
17287;
17288; PWR8-LABEL: ugt_21_v2i64:
17289; PWR8:       # %bb.0:
17290; PWR8-NEXT:    addis 3, 2, .LCPI140_0@toc@ha
17291; PWR8-NEXT:    vpopcntd 2, 2
17292; PWR8-NEXT:    addi 3, 3, .LCPI140_0@toc@l
17293; PWR8-NEXT:    lxvd2x 35, 0, 3
17294; PWR8-NEXT:    vcmpgtud 2, 2, 3
17295; PWR8-NEXT:    blr
17296;
17297; PWR9-LABEL: ugt_21_v2i64:
17298; PWR9:       # %bb.0:
17299; PWR9-NEXT:    addis 3, 2, .LCPI140_0@toc@ha
17300; PWR9-NEXT:    vpopcntd 2, 2
17301; PWR9-NEXT:    addi 3, 3, .LCPI140_0@toc@l
17302; PWR9-NEXT:    lxv 35, 0(3)
17303; PWR9-NEXT:    vcmpgtud 2, 2, 3
17304; PWR9-NEXT:    blr
17305  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17306  %3 = icmp ugt <2 x i64> %2, <i64 21, i64 21>
17307  %4 = sext <2 x i1> %3 to <2 x i64>
17308  ret <2 x i64> %4
17309}
17310
17311define <2 x i64> @ult_22_v2i64(<2 x i64> %0) {
17312; PWR5-LABEL: ult_22_v2i64:
17313; PWR5:       # %bb.0:
17314; PWR5-NEXT:    lis 5, 21845
17315; PWR5-NEXT:    lis 6, 13107
17316; PWR5-NEXT:    ori 5, 5, 21845
17317; PWR5-NEXT:    rotldi 8, 4, 63
17318; PWR5-NEXT:    rotldi 9, 3, 63
17319; PWR5-NEXT:    rldimi 5, 5, 32, 0
17320; PWR5-NEXT:    and 8, 8, 5
17321; PWR5-NEXT:    and 5, 9, 5
17322; PWR5-NEXT:    ori 6, 6, 13107
17323; PWR5-NEXT:    sub 3, 3, 5
17324; PWR5-NEXT:    rldimi 6, 6, 32, 0
17325; PWR5-NEXT:    sub 4, 4, 8
17326; PWR5-NEXT:    and 8, 3, 6
17327; PWR5-NEXT:    rotldi 3, 3, 62
17328; PWR5-NEXT:    and 3, 3, 6
17329; PWR5-NEXT:    lis 7, 3855
17330; PWR5-NEXT:    and 5, 4, 6
17331; PWR5-NEXT:    rotldi 4, 4, 62
17332; PWR5-NEXT:    add 3, 8, 3
17333; PWR5-NEXT:    lis 9, 257
17334; PWR5-NEXT:    ori 7, 7, 3855
17335; PWR5-NEXT:    and 4, 4, 6
17336; PWR5-NEXT:    rldicl 6, 3, 60, 4
17337; PWR5-NEXT:    ori 9, 9, 257
17338; PWR5-NEXT:    rldimi 7, 7, 32, 0
17339; PWR5-NEXT:    add 4, 5, 4
17340; PWR5-NEXT:    add 3, 3, 6
17341; PWR5-NEXT:    rldimi 9, 9, 32, 0
17342; PWR5-NEXT:    rldicl 5, 4, 60, 4
17343; PWR5-NEXT:    and 3, 3, 7
17344; PWR5-NEXT:    add 4, 4, 5
17345; PWR5-NEXT:    mulld 3, 3, 9
17346; PWR5-NEXT:    and 4, 4, 7
17347; PWR5-NEXT:    rldicl 3, 3, 8, 56
17348; PWR5-NEXT:    li 5, 22
17349; PWR5-NEXT:    mulld 4, 4, 9
17350; PWR5-NEXT:    subc 6, 3, 5
17351; PWR5-NEXT:    rldicl 4, 4, 8, 56
17352; PWR5-NEXT:    subfe 3, 3, 3
17353; PWR5-NEXT:    subc 5, 4, 5
17354; PWR5-NEXT:    subfe 4, 4, 4
17355; PWR5-NEXT:    blr
17356;
17357; PWR6-LABEL: ult_22_v2i64:
17358; PWR6:       # %bb.0:
17359; PWR6-NEXT:    lis 5, 21845
17360; PWR6-NEXT:    lis 6, 13107
17361; PWR6-NEXT:    ori 5, 5, 21845
17362; PWR6-NEXT:    rotldi 8, 4, 63
17363; PWR6-NEXT:    rotldi 9, 3, 63
17364; PWR6-NEXT:    rldimi 5, 5, 32, 0
17365; PWR6-NEXT:    and 8, 8, 5
17366; PWR6-NEXT:    and 5, 9, 5
17367; PWR6-NEXT:    ori 6, 6, 13107
17368; PWR6-NEXT:    sub 3, 3, 5
17369; PWR6-NEXT:    rldimi 6, 6, 32, 0
17370; PWR6-NEXT:    sub 4, 4, 8
17371; PWR6-NEXT:    and 8, 3, 6
17372; PWR6-NEXT:    rotldi 3, 3, 62
17373; PWR6-NEXT:    and 3, 3, 6
17374; PWR6-NEXT:    lis 7, 3855
17375; PWR6-NEXT:    and 5, 4, 6
17376; PWR6-NEXT:    rotldi 4, 4, 62
17377; PWR6-NEXT:    add 3, 8, 3
17378; PWR6-NEXT:    lis 9, 257
17379; PWR6-NEXT:    ori 7, 7, 3855
17380; PWR6-NEXT:    and 4, 4, 6
17381; PWR6-NEXT:    rldicl 6, 3, 60, 4
17382; PWR6-NEXT:    ori 9, 9, 257
17383; PWR6-NEXT:    rldimi 7, 7, 32, 0
17384; PWR6-NEXT:    add 4, 5, 4
17385; PWR6-NEXT:    add 3, 3, 6
17386; PWR6-NEXT:    rldimi 9, 9, 32, 0
17387; PWR6-NEXT:    rldicl 5, 4, 60, 4
17388; PWR6-NEXT:    and 3, 3, 7
17389; PWR6-NEXT:    add 4, 4, 5
17390; PWR6-NEXT:    mulld 3, 3, 9
17391; PWR6-NEXT:    and 4, 4, 7
17392; PWR6-NEXT:    rldicl 3, 3, 8, 56
17393; PWR6-NEXT:    li 5, 22
17394; PWR6-NEXT:    mulld 4, 4, 9
17395; PWR6-NEXT:    subc 6, 3, 5
17396; PWR6-NEXT:    rldicl 4, 4, 8, 56
17397; PWR6-NEXT:    subfe 3, 3, 3
17398; PWR6-NEXT:    subc 5, 4, 5
17399; PWR6-NEXT:    subfe 4, 4, 4
17400; PWR6-NEXT:    blr
17401;
17402; PWR7-LABEL: ult_22_v2i64:
17403; PWR7:       # %bb.0:
17404; PWR7-NEXT:    addi 3, 1, -32
17405; PWR7-NEXT:    li 5, -1
17406; PWR7-NEXT:    stxvd2x 34, 0, 3
17407; PWR7-NEXT:    ld 4, -24(1)
17408; PWR7-NEXT:    ld 3, -32(1)
17409; PWR7-NEXT:    popcntd 4, 4
17410; PWR7-NEXT:    popcntd 3, 3
17411; PWR7-NEXT:    cmpldi 4, 22
17412; PWR7-NEXT:    li 4, 0
17413; PWR7-NEXT:    isellt 6, 5, 4
17414; PWR7-NEXT:    cmpldi 3, 22
17415; PWR7-NEXT:    isellt 3, 5, 4
17416; PWR7-NEXT:    std 6, -8(1)
17417; PWR7-NEXT:    std 3, -16(1)
17418; PWR7-NEXT:    addi 3, 1, -16
17419; PWR7-NEXT:    lxvd2x 34, 0, 3
17420; PWR7-NEXT:    blr
17421;
17422; PWR8-LABEL: ult_22_v2i64:
17423; PWR8:       # %bb.0:
17424; PWR8-NEXT:    addis 3, 2, .LCPI141_0@toc@ha
17425; PWR8-NEXT:    vpopcntd 2, 2
17426; PWR8-NEXT:    addi 3, 3, .LCPI141_0@toc@l
17427; PWR8-NEXT:    lxvd2x 35, 0, 3
17428; PWR8-NEXT:    vcmpgtud 2, 3, 2
17429; PWR8-NEXT:    blr
17430;
17431; PWR9-LABEL: ult_22_v2i64:
17432; PWR9:       # %bb.0:
17433; PWR9-NEXT:    addis 3, 2, .LCPI141_0@toc@ha
17434; PWR9-NEXT:    vpopcntd 2, 2
17435; PWR9-NEXT:    addi 3, 3, .LCPI141_0@toc@l
17436; PWR9-NEXT:    lxv 35, 0(3)
17437; PWR9-NEXT:    vcmpgtud 2, 3, 2
17438; PWR9-NEXT:    blr
17439  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17440  %3 = icmp ult <2 x i64> %2, <i64 22, i64 22>
17441  %4 = sext <2 x i1> %3 to <2 x i64>
17442  ret <2 x i64> %4
17443}
17444
17445define <2 x i64> @ugt_22_v2i64(<2 x i64> %0) {
17446; PWR5-LABEL: ugt_22_v2i64:
17447; PWR5:       # %bb.0:
17448; PWR5-NEXT:    lis 5, 21845
17449; PWR5-NEXT:    lis 6, 13107
17450; PWR5-NEXT:    ori 5, 5, 21845
17451; PWR5-NEXT:    rotldi 8, 4, 63
17452; PWR5-NEXT:    rotldi 9, 3, 63
17453; PWR5-NEXT:    rldimi 5, 5, 32, 0
17454; PWR5-NEXT:    and 8, 8, 5
17455; PWR5-NEXT:    and 5, 9, 5
17456; PWR5-NEXT:    ori 6, 6, 13107
17457; PWR5-NEXT:    sub 3, 3, 5
17458; PWR5-NEXT:    rldimi 6, 6, 32, 0
17459; PWR5-NEXT:    sub 4, 4, 8
17460; PWR5-NEXT:    and 8, 3, 6
17461; PWR5-NEXT:    rotldi 3, 3, 62
17462; PWR5-NEXT:    and 3, 3, 6
17463; PWR5-NEXT:    lis 7, 3855
17464; PWR5-NEXT:    and 5, 4, 6
17465; PWR5-NEXT:    rotldi 4, 4, 62
17466; PWR5-NEXT:    add 3, 8, 3
17467; PWR5-NEXT:    lis 9, 257
17468; PWR5-NEXT:    ori 7, 7, 3855
17469; PWR5-NEXT:    and 4, 4, 6
17470; PWR5-NEXT:    rldicl 6, 3, 60, 4
17471; PWR5-NEXT:    ori 9, 9, 257
17472; PWR5-NEXT:    rldimi 7, 7, 32, 0
17473; PWR5-NEXT:    add 4, 5, 4
17474; PWR5-NEXT:    add 3, 3, 6
17475; PWR5-NEXT:    rldimi 9, 9, 32, 0
17476; PWR5-NEXT:    rldicl 5, 4, 60, 4
17477; PWR5-NEXT:    and 3, 3, 7
17478; PWR5-NEXT:    add 4, 4, 5
17479; PWR5-NEXT:    mulld 3, 3, 9
17480; PWR5-NEXT:    and 4, 4, 7
17481; PWR5-NEXT:    rldicl 3, 3, 8, 56
17482; PWR5-NEXT:    mulld 4, 4, 9
17483; PWR5-NEXT:    li 5, 22
17484; PWR5-NEXT:    subfic 3, 3, 22
17485; PWR5-NEXT:    rldicl 4, 4, 8, 56
17486; PWR5-NEXT:    subfe 3, 5, 5
17487; PWR5-NEXT:    subfic 4, 4, 22
17488; PWR5-NEXT:    subfe 4, 5, 5
17489; PWR5-NEXT:    blr
17490;
17491; PWR6-LABEL: ugt_22_v2i64:
17492; PWR6:       # %bb.0:
17493; PWR6-NEXT:    lis 5, 21845
17494; PWR6-NEXT:    lis 6, 13107
17495; PWR6-NEXT:    ori 5, 5, 21845
17496; PWR6-NEXT:    rotldi 8, 4, 63
17497; PWR6-NEXT:    rotldi 9, 3, 63
17498; PWR6-NEXT:    rldimi 5, 5, 32, 0
17499; PWR6-NEXT:    and 8, 8, 5
17500; PWR6-NEXT:    and 5, 9, 5
17501; PWR6-NEXT:    ori 6, 6, 13107
17502; PWR6-NEXT:    sub 3, 3, 5
17503; PWR6-NEXT:    rldimi 6, 6, 32, 0
17504; PWR6-NEXT:    sub 4, 4, 8
17505; PWR6-NEXT:    and 8, 3, 6
17506; PWR6-NEXT:    rotldi 3, 3, 62
17507; PWR6-NEXT:    and 3, 3, 6
17508; PWR6-NEXT:    lis 7, 3855
17509; PWR6-NEXT:    and 5, 4, 6
17510; PWR6-NEXT:    rotldi 4, 4, 62
17511; PWR6-NEXT:    add 3, 8, 3
17512; PWR6-NEXT:    lis 9, 257
17513; PWR6-NEXT:    ori 7, 7, 3855
17514; PWR6-NEXT:    and 4, 4, 6
17515; PWR6-NEXT:    rldicl 6, 3, 60, 4
17516; PWR6-NEXT:    ori 9, 9, 257
17517; PWR6-NEXT:    rldimi 7, 7, 32, 0
17518; PWR6-NEXT:    add 4, 5, 4
17519; PWR6-NEXT:    add 3, 3, 6
17520; PWR6-NEXT:    rldimi 9, 9, 32, 0
17521; PWR6-NEXT:    rldicl 5, 4, 60, 4
17522; PWR6-NEXT:    and 3, 3, 7
17523; PWR6-NEXT:    add 4, 4, 5
17524; PWR6-NEXT:    mulld 3, 3, 9
17525; PWR6-NEXT:    and 4, 4, 7
17526; PWR6-NEXT:    rldicl 3, 3, 8, 56
17527; PWR6-NEXT:    mulld 4, 4, 9
17528; PWR6-NEXT:    li 5, 22
17529; PWR6-NEXT:    subfic 3, 3, 22
17530; PWR6-NEXT:    rldicl 4, 4, 8, 56
17531; PWR6-NEXT:    subfe 3, 5, 5
17532; PWR6-NEXT:    subfic 4, 4, 22
17533; PWR6-NEXT:    subfe 4, 5, 5
17534; PWR6-NEXT:    blr
17535;
17536; PWR7-LABEL: ugt_22_v2i64:
17537; PWR7:       # %bb.0:
17538; PWR7-NEXT:    addi 3, 1, -32
17539; PWR7-NEXT:    li 5, -1
17540; PWR7-NEXT:    stxvd2x 34, 0, 3
17541; PWR7-NEXT:    ld 4, -24(1)
17542; PWR7-NEXT:    ld 3, -32(1)
17543; PWR7-NEXT:    popcntd 4, 4
17544; PWR7-NEXT:    popcntd 3, 3
17545; PWR7-NEXT:    cmpldi 4, 22
17546; PWR7-NEXT:    li 4, 0
17547; PWR7-NEXT:    iselgt 6, 5, 4
17548; PWR7-NEXT:    cmpldi 3, 22
17549; PWR7-NEXT:    iselgt 3, 5, 4
17550; PWR7-NEXT:    std 6, -8(1)
17551; PWR7-NEXT:    std 3, -16(1)
17552; PWR7-NEXT:    addi 3, 1, -16
17553; PWR7-NEXT:    lxvd2x 34, 0, 3
17554; PWR7-NEXT:    blr
17555;
17556; PWR8-LABEL: ugt_22_v2i64:
17557; PWR8:       # %bb.0:
17558; PWR8-NEXT:    addis 3, 2, .LCPI142_0@toc@ha
17559; PWR8-NEXT:    vpopcntd 2, 2
17560; PWR8-NEXT:    addi 3, 3, .LCPI142_0@toc@l
17561; PWR8-NEXT:    lxvd2x 35, 0, 3
17562; PWR8-NEXT:    vcmpgtud 2, 2, 3
17563; PWR8-NEXT:    blr
17564;
17565; PWR9-LABEL: ugt_22_v2i64:
17566; PWR9:       # %bb.0:
17567; PWR9-NEXT:    addis 3, 2, .LCPI142_0@toc@ha
17568; PWR9-NEXT:    vpopcntd 2, 2
17569; PWR9-NEXT:    addi 3, 3, .LCPI142_0@toc@l
17570; PWR9-NEXT:    lxv 35, 0(3)
17571; PWR9-NEXT:    vcmpgtud 2, 2, 3
17572; PWR9-NEXT:    blr
17573  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17574  %3 = icmp ugt <2 x i64> %2, <i64 22, i64 22>
17575  %4 = sext <2 x i1> %3 to <2 x i64>
17576  ret <2 x i64> %4
17577}
17578
17579define <2 x i64> @ult_23_v2i64(<2 x i64> %0) {
17580; PWR5-LABEL: ult_23_v2i64:
17581; PWR5:       # %bb.0:
17582; PWR5-NEXT:    lis 5, 21845
17583; PWR5-NEXT:    lis 6, 13107
17584; PWR5-NEXT:    ori 5, 5, 21845
17585; PWR5-NEXT:    rotldi 8, 4, 63
17586; PWR5-NEXT:    rotldi 9, 3, 63
17587; PWR5-NEXT:    rldimi 5, 5, 32, 0
17588; PWR5-NEXT:    and 8, 8, 5
17589; PWR5-NEXT:    and 5, 9, 5
17590; PWR5-NEXT:    ori 6, 6, 13107
17591; PWR5-NEXT:    sub 3, 3, 5
17592; PWR5-NEXT:    rldimi 6, 6, 32, 0
17593; PWR5-NEXT:    sub 4, 4, 8
17594; PWR5-NEXT:    and 8, 3, 6
17595; PWR5-NEXT:    rotldi 3, 3, 62
17596; PWR5-NEXT:    and 3, 3, 6
17597; PWR5-NEXT:    lis 7, 3855
17598; PWR5-NEXT:    and 5, 4, 6
17599; PWR5-NEXT:    rotldi 4, 4, 62
17600; PWR5-NEXT:    add 3, 8, 3
17601; PWR5-NEXT:    lis 9, 257
17602; PWR5-NEXT:    ori 7, 7, 3855
17603; PWR5-NEXT:    and 4, 4, 6
17604; PWR5-NEXT:    rldicl 6, 3, 60, 4
17605; PWR5-NEXT:    ori 9, 9, 257
17606; PWR5-NEXT:    rldimi 7, 7, 32, 0
17607; PWR5-NEXT:    add 4, 5, 4
17608; PWR5-NEXT:    add 3, 3, 6
17609; PWR5-NEXT:    rldimi 9, 9, 32, 0
17610; PWR5-NEXT:    rldicl 5, 4, 60, 4
17611; PWR5-NEXT:    and 3, 3, 7
17612; PWR5-NEXT:    add 4, 4, 5
17613; PWR5-NEXT:    mulld 3, 3, 9
17614; PWR5-NEXT:    and 4, 4, 7
17615; PWR5-NEXT:    rldicl 3, 3, 8, 56
17616; PWR5-NEXT:    li 5, 23
17617; PWR5-NEXT:    mulld 4, 4, 9
17618; PWR5-NEXT:    subc 6, 3, 5
17619; PWR5-NEXT:    rldicl 4, 4, 8, 56
17620; PWR5-NEXT:    subfe 3, 3, 3
17621; PWR5-NEXT:    subc 5, 4, 5
17622; PWR5-NEXT:    subfe 4, 4, 4
17623; PWR5-NEXT:    blr
17624;
17625; PWR6-LABEL: ult_23_v2i64:
17626; PWR6:       # %bb.0:
17627; PWR6-NEXT:    lis 5, 21845
17628; PWR6-NEXT:    lis 6, 13107
17629; PWR6-NEXT:    ori 5, 5, 21845
17630; PWR6-NEXT:    rotldi 8, 4, 63
17631; PWR6-NEXT:    rotldi 9, 3, 63
17632; PWR6-NEXT:    rldimi 5, 5, 32, 0
17633; PWR6-NEXT:    and 8, 8, 5
17634; PWR6-NEXT:    and 5, 9, 5
17635; PWR6-NEXT:    ori 6, 6, 13107
17636; PWR6-NEXT:    sub 3, 3, 5
17637; PWR6-NEXT:    rldimi 6, 6, 32, 0
17638; PWR6-NEXT:    sub 4, 4, 8
17639; PWR6-NEXT:    and 8, 3, 6
17640; PWR6-NEXT:    rotldi 3, 3, 62
17641; PWR6-NEXT:    and 3, 3, 6
17642; PWR6-NEXT:    lis 7, 3855
17643; PWR6-NEXT:    and 5, 4, 6
17644; PWR6-NEXT:    rotldi 4, 4, 62
17645; PWR6-NEXT:    add 3, 8, 3
17646; PWR6-NEXT:    lis 9, 257
17647; PWR6-NEXT:    ori 7, 7, 3855
17648; PWR6-NEXT:    and 4, 4, 6
17649; PWR6-NEXT:    rldicl 6, 3, 60, 4
17650; PWR6-NEXT:    ori 9, 9, 257
17651; PWR6-NEXT:    rldimi 7, 7, 32, 0
17652; PWR6-NEXT:    add 4, 5, 4
17653; PWR6-NEXT:    add 3, 3, 6
17654; PWR6-NEXT:    rldimi 9, 9, 32, 0
17655; PWR6-NEXT:    rldicl 5, 4, 60, 4
17656; PWR6-NEXT:    and 3, 3, 7
17657; PWR6-NEXT:    add 4, 4, 5
17658; PWR6-NEXT:    mulld 3, 3, 9
17659; PWR6-NEXT:    and 4, 4, 7
17660; PWR6-NEXT:    rldicl 3, 3, 8, 56
17661; PWR6-NEXT:    li 5, 23
17662; PWR6-NEXT:    mulld 4, 4, 9
17663; PWR6-NEXT:    subc 6, 3, 5
17664; PWR6-NEXT:    rldicl 4, 4, 8, 56
17665; PWR6-NEXT:    subfe 3, 3, 3
17666; PWR6-NEXT:    subc 5, 4, 5
17667; PWR6-NEXT:    subfe 4, 4, 4
17668; PWR6-NEXT:    blr
17669;
17670; PWR7-LABEL: ult_23_v2i64:
17671; PWR7:       # %bb.0:
17672; PWR7-NEXT:    addi 3, 1, -32
17673; PWR7-NEXT:    li 5, -1
17674; PWR7-NEXT:    stxvd2x 34, 0, 3
17675; PWR7-NEXT:    ld 4, -24(1)
17676; PWR7-NEXT:    ld 3, -32(1)
17677; PWR7-NEXT:    popcntd 4, 4
17678; PWR7-NEXT:    popcntd 3, 3
17679; PWR7-NEXT:    cmpldi 4, 23
17680; PWR7-NEXT:    li 4, 0
17681; PWR7-NEXT:    isellt 6, 5, 4
17682; PWR7-NEXT:    cmpldi 3, 23
17683; PWR7-NEXT:    isellt 3, 5, 4
17684; PWR7-NEXT:    std 6, -8(1)
17685; PWR7-NEXT:    std 3, -16(1)
17686; PWR7-NEXT:    addi 3, 1, -16
17687; PWR7-NEXT:    lxvd2x 34, 0, 3
17688; PWR7-NEXT:    blr
17689;
17690; PWR8-LABEL: ult_23_v2i64:
17691; PWR8:       # %bb.0:
17692; PWR8-NEXT:    addis 3, 2, .LCPI143_0@toc@ha
17693; PWR8-NEXT:    vpopcntd 2, 2
17694; PWR8-NEXT:    addi 3, 3, .LCPI143_0@toc@l
17695; PWR8-NEXT:    lxvd2x 35, 0, 3
17696; PWR8-NEXT:    vcmpgtud 2, 3, 2
17697; PWR8-NEXT:    blr
17698;
17699; PWR9-LABEL: ult_23_v2i64:
17700; PWR9:       # %bb.0:
17701; PWR9-NEXT:    addis 3, 2, .LCPI143_0@toc@ha
17702; PWR9-NEXT:    vpopcntd 2, 2
17703; PWR9-NEXT:    addi 3, 3, .LCPI143_0@toc@l
17704; PWR9-NEXT:    lxv 35, 0(3)
17705; PWR9-NEXT:    vcmpgtud 2, 3, 2
17706; PWR9-NEXT:    blr
17707  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17708  %3 = icmp ult <2 x i64> %2, <i64 23, i64 23>
17709  %4 = sext <2 x i1> %3 to <2 x i64>
17710  ret <2 x i64> %4
17711}
17712
17713define <2 x i64> @ugt_23_v2i64(<2 x i64> %0) {
17714; PWR5-LABEL: ugt_23_v2i64:
17715; PWR5:       # %bb.0:
17716; PWR5-NEXT:    lis 5, 21845
17717; PWR5-NEXT:    lis 6, 13107
17718; PWR5-NEXT:    ori 5, 5, 21845
17719; PWR5-NEXT:    rotldi 8, 4, 63
17720; PWR5-NEXT:    rotldi 9, 3, 63
17721; PWR5-NEXT:    rldimi 5, 5, 32, 0
17722; PWR5-NEXT:    and 8, 8, 5
17723; PWR5-NEXT:    and 5, 9, 5
17724; PWR5-NEXT:    ori 6, 6, 13107
17725; PWR5-NEXT:    sub 3, 3, 5
17726; PWR5-NEXT:    rldimi 6, 6, 32, 0
17727; PWR5-NEXT:    sub 4, 4, 8
17728; PWR5-NEXT:    and 8, 3, 6
17729; PWR5-NEXT:    rotldi 3, 3, 62
17730; PWR5-NEXT:    and 3, 3, 6
17731; PWR5-NEXT:    lis 7, 3855
17732; PWR5-NEXT:    and 5, 4, 6
17733; PWR5-NEXT:    rotldi 4, 4, 62
17734; PWR5-NEXT:    add 3, 8, 3
17735; PWR5-NEXT:    lis 9, 257
17736; PWR5-NEXT:    ori 7, 7, 3855
17737; PWR5-NEXT:    and 4, 4, 6
17738; PWR5-NEXT:    rldicl 6, 3, 60, 4
17739; PWR5-NEXT:    ori 9, 9, 257
17740; PWR5-NEXT:    rldimi 7, 7, 32, 0
17741; PWR5-NEXT:    add 4, 5, 4
17742; PWR5-NEXT:    add 3, 3, 6
17743; PWR5-NEXT:    rldimi 9, 9, 32, 0
17744; PWR5-NEXT:    rldicl 5, 4, 60, 4
17745; PWR5-NEXT:    and 3, 3, 7
17746; PWR5-NEXT:    add 4, 4, 5
17747; PWR5-NEXT:    mulld 3, 3, 9
17748; PWR5-NEXT:    and 4, 4, 7
17749; PWR5-NEXT:    rldicl 3, 3, 8, 56
17750; PWR5-NEXT:    mulld 4, 4, 9
17751; PWR5-NEXT:    li 5, 23
17752; PWR5-NEXT:    subfic 3, 3, 23
17753; PWR5-NEXT:    rldicl 4, 4, 8, 56
17754; PWR5-NEXT:    subfe 3, 5, 5
17755; PWR5-NEXT:    subfic 4, 4, 23
17756; PWR5-NEXT:    subfe 4, 5, 5
17757; PWR5-NEXT:    blr
17758;
17759; PWR6-LABEL: ugt_23_v2i64:
17760; PWR6:       # %bb.0:
17761; PWR6-NEXT:    lis 5, 21845
17762; PWR6-NEXT:    lis 6, 13107
17763; PWR6-NEXT:    ori 5, 5, 21845
17764; PWR6-NEXT:    rotldi 8, 4, 63
17765; PWR6-NEXT:    rotldi 9, 3, 63
17766; PWR6-NEXT:    rldimi 5, 5, 32, 0
17767; PWR6-NEXT:    and 8, 8, 5
17768; PWR6-NEXT:    and 5, 9, 5
17769; PWR6-NEXT:    ori 6, 6, 13107
17770; PWR6-NEXT:    sub 3, 3, 5
17771; PWR6-NEXT:    rldimi 6, 6, 32, 0
17772; PWR6-NEXT:    sub 4, 4, 8
17773; PWR6-NEXT:    and 8, 3, 6
17774; PWR6-NEXT:    rotldi 3, 3, 62
17775; PWR6-NEXT:    and 3, 3, 6
17776; PWR6-NEXT:    lis 7, 3855
17777; PWR6-NEXT:    and 5, 4, 6
17778; PWR6-NEXT:    rotldi 4, 4, 62
17779; PWR6-NEXT:    add 3, 8, 3
17780; PWR6-NEXT:    lis 9, 257
17781; PWR6-NEXT:    ori 7, 7, 3855
17782; PWR6-NEXT:    and 4, 4, 6
17783; PWR6-NEXT:    rldicl 6, 3, 60, 4
17784; PWR6-NEXT:    ori 9, 9, 257
17785; PWR6-NEXT:    rldimi 7, 7, 32, 0
17786; PWR6-NEXT:    add 4, 5, 4
17787; PWR6-NEXT:    add 3, 3, 6
17788; PWR6-NEXT:    rldimi 9, 9, 32, 0
17789; PWR6-NEXT:    rldicl 5, 4, 60, 4
17790; PWR6-NEXT:    and 3, 3, 7
17791; PWR6-NEXT:    add 4, 4, 5
17792; PWR6-NEXT:    mulld 3, 3, 9
17793; PWR6-NEXT:    and 4, 4, 7
17794; PWR6-NEXT:    rldicl 3, 3, 8, 56
17795; PWR6-NEXT:    mulld 4, 4, 9
17796; PWR6-NEXT:    li 5, 23
17797; PWR6-NEXT:    subfic 3, 3, 23
17798; PWR6-NEXT:    rldicl 4, 4, 8, 56
17799; PWR6-NEXT:    subfe 3, 5, 5
17800; PWR6-NEXT:    subfic 4, 4, 23
17801; PWR6-NEXT:    subfe 4, 5, 5
17802; PWR6-NEXT:    blr
17803;
17804; PWR7-LABEL: ugt_23_v2i64:
17805; PWR7:       # %bb.0:
17806; PWR7-NEXT:    addi 3, 1, -32
17807; PWR7-NEXT:    li 5, -1
17808; PWR7-NEXT:    stxvd2x 34, 0, 3
17809; PWR7-NEXT:    ld 4, -24(1)
17810; PWR7-NEXT:    ld 3, -32(1)
17811; PWR7-NEXT:    popcntd 4, 4
17812; PWR7-NEXT:    popcntd 3, 3
17813; PWR7-NEXT:    cmpldi 4, 23
17814; PWR7-NEXT:    li 4, 0
17815; PWR7-NEXT:    iselgt 6, 5, 4
17816; PWR7-NEXT:    cmpldi 3, 23
17817; PWR7-NEXT:    iselgt 3, 5, 4
17818; PWR7-NEXT:    std 6, -8(1)
17819; PWR7-NEXT:    std 3, -16(1)
17820; PWR7-NEXT:    addi 3, 1, -16
17821; PWR7-NEXT:    lxvd2x 34, 0, 3
17822; PWR7-NEXT:    blr
17823;
17824; PWR8-LABEL: ugt_23_v2i64:
17825; PWR8:       # %bb.0:
17826; PWR8-NEXT:    addis 3, 2, .LCPI144_0@toc@ha
17827; PWR8-NEXT:    vpopcntd 2, 2
17828; PWR8-NEXT:    addi 3, 3, .LCPI144_0@toc@l
17829; PWR8-NEXT:    lxvd2x 35, 0, 3
17830; PWR8-NEXT:    vcmpgtud 2, 2, 3
17831; PWR8-NEXT:    blr
17832;
17833; PWR9-LABEL: ugt_23_v2i64:
17834; PWR9:       # %bb.0:
17835; PWR9-NEXT:    addis 3, 2, .LCPI144_0@toc@ha
17836; PWR9-NEXT:    vpopcntd 2, 2
17837; PWR9-NEXT:    addi 3, 3, .LCPI144_0@toc@l
17838; PWR9-NEXT:    lxv 35, 0(3)
17839; PWR9-NEXT:    vcmpgtud 2, 2, 3
17840; PWR9-NEXT:    blr
17841  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17842  %3 = icmp ugt <2 x i64> %2, <i64 23, i64 23>
17843  %4 = sext <2 x i1> %3 to <2 x i64>
17844  ret <2 x i64> %4
17845}
17846
17847define <2 x i64> @ult_24_v2i64(<2 x i64> %0) {
17848; PWR5-LABEL: ult_24_v2i64:
17849; PWR5:       # %bb.0:
17850; PWR5-NEXT:    lis 5, 21845
17851; PWR5-NEXT:    lis 6, 13107
17852; PWR5-NEXT:    ori 5, 5, 21845
17853; PWR5-NEXT:    rotldi 8, 4, 63
17854; PWR5-NEXT:    rotldi 9, 3, 63
17855; PWR5-NEXT:    rldimi 5, 5, 32, 0
17856; PWR5-NEXT:    and 8, 8, 5
17857; PWR5-NEXT:    and 5, 9, 5
17858; PWR5-NEXT:    ori 6, 6, 13107
17859; PWR5-NEXT:    sub 3, 3, 5
17860; PWR5-NEXT:    rldimi 6, 6, 32, 0
17861; PWR5-NEXT:    sub 4, 4, 8
17862; PWR5-NEXT:    and 8, 3, 6
17863; PWR5-NEXT:    rotldi 3, 3, 62
17864; PWR5-NEXT:    and 3, 3, 6
17865; PWR5-NEXT:    lis 7, 3855
17866; PWR5-NEXT:    and 5, 4, 6
17867; PWR5-NEXT:    rotldi 4, 4, 62
17868; PWR5-NEXT:    add 3, 8, 3
17869; PWR5-NEXT:    lis 9, 257
17870; PWR5-NEXT:    ori 7, 7, 3855
17871; PWR5-NEXT:    and 4, 4, 6
17872; PWR5-NEXT:    rldicl 6, 3, 60, 4
17873; PWR5-NEXT:    ori 9, 9, 257
17874; PWR5-NEXT:    rldimi 7, 7, 32, 0
17875; PWR5-NEXT:    add 4, 5, 4
17876; PWR5-NEXT:    add 3, 3, 6
17877; PWR5-NEXT:    rldimi 9, 9, 32, 0
17878; PWR5-NEXT:    rldicl 5, 4, 60, 4
17879; PWR5-NEXT:    and 3, 3, 7
17880; PWR5-NEXT:    add 4, 4, 5
17881; PWR5-NEXT:    mulld 3, 3, 9
17882; PWR5-NEXT:    and 4, 4, 7
17883; PWR5-NEXT:    rldicl 3, 3, 8, 56
17884; PWR5-NEXT:    li 5, 24
17885; PWR5-NEXT:    mulld 4, 4, 9
17886; PWR5-NEXT:    subc 6, 3, 5
17887; PWR5-NEXT:    rldicl 4, 4, 8, 56
17888; PWR5-NEXT:    subfe 3, 3, 3
17889; PWR5-NEXT:    subc 5, 4, 5
17890; PWR5-NEXT:    subfe 4, 4, 4
17891; PWR5-NEXT:    blr
17892;
17893; PWR6-LABEL: ult_24_v2i64:
17894; PWR6:       # %bb.0:
17895; PWR6-NEXT:    lis 5, 21845
17896; PWR6-NEXT:    lis 6, 13107
17897; PWR6-NEXT:    ori 5, 5, 21845
17898; PWR6-NEXT:    rotldi 8, 4, 63
17899; PWR6-NEXT:    rotldi 9, 3, 63
17900; PWR6-NEXT:    rldimi 5, 5, 32, 0
17901; PWR6-NEXT:    and 8, 8, 5
17902; PWR6-NEXT:    and 5, 9, 5
17903; PWR6-NEXT:    ori 6, 6, 13107
17904; PWR6-NEXT:    sub 3, 3, 5
17905; PWR6-NEXT:    rldimi 6, 6, 32, 0
17906; PWR6-NEXT:    sub 4, 4, 8
17907; PWR6-NEXT:    and 8, 3, 6
17908; PWR6-NEXT:    rotldi 3, 3, 62
17909; PWR6-NEXT:    and 3, 3, 6
17910; PWR6-NEXT:    lis 7, 3855
17911; PWR6-NEXT:    and 5, 4, 6
17912; PWR6-NEXT:    rotldi 4, 4, 62
17913; PWR6-NEXT:    add 3, 8, 3
17914; PWR6-NEXT:    lis 9, 257
17915; PWR6-NEXT:    ori 7, 7, 3855
17916; PWR6-NEXT:    and 4, 4, 6
17917; PWR6-NEXT:    rldicl 6, 3, 60, 4
17918; PWR6-NEXT:    ori 9, 9, 257
17919; PWR6-NEXT:    rldimi 7, 7, 32, 0
17920; PWR6-NEXT:    add 4, 5, 4
17921; PWR6-NEXT:    add 3, 3, 6
17922; PWR6-NEXT:    rldimi 9, 9, 32, 0
17923; PWR6-NEXT:    rldicl 5, 4, 60, 4
17924; PWR6-NEXT:    and 3, 3, 7
17925; PWR6-NEXT:    add 4, 4, 5
17926; PWR6-NEXT:    mulld 3, 3, 9
17927; PWR6-NEXT:    and 4, 4, 7
17928; PWR6-NEXT:    rldicl 3, 3, 8, 56
17929; PWR6-NEXT:    li 5, 24
17930; PWR6-NEXT:    mulld 4, 4, 9
17931; PWR6-NEXT:    subc 6, 3, 5
17932; PWR6-NEXT:    rldicl 4, 4, 8, 56
17933; PWR6-NEXT:    subfe 3, 3, 3
17934; PWR6-NEXT:    subc 5, 4, 5
17935; PWR6-NEXT:    subfe 4, 4, 4
17936; PWR6-NEXT:    blr
17937;
17938; PWR7-LABEL: ult_24_v2i64:
17939; PWR7:       # %bb.0:
17940; PWR7-NEXT:    addi 3, 1, -32
17941; PWR7-NEXT:    li 5, -1
17942; PWR7-NEXT:    stxvd2x 34, 0, 3
17943; PWR7-NEXT:    ld 4, -24(1)
17944; PWR7-NEXT:    ld 3, -32(1)
17945; PWR7-NEXT:    popcntd 4, 4
17946; PWR7-NEXT:    popcntd 3, 3
17947; PWR7-NEXT:    cmpldi 4, 24
17948; PWR7-NEXT:    li 4, 0
17949; PWR7-NEXT:    isellt 6, 5, 4
17950; PWR7-NEXT:    cmpldi 3, 24
17951; PWR7-NEXT:    isellt 3, 5, 4
17952; PWR7-NEXT:    std 6, -8(1)
17953; PWR7-NEXT:    std 3, -16(1)
17954; PWR7-NEXT:    addi 3, 1, -16
17955; PWR7-NEXT:    lxvd2x 34, 0, 3
17956; PWR7-NEXT:    blr
17957;
17958; PWR8-LABEL: ult_24_v2i64:
17959; PWR8:       # %bb.0:
17960; PWR8-NEXT:    addis 3, 2, .LCPI145_0@toc@ha
17961; PWR8-NEXT:    vpopcntd 2, 2
17962; PWR8-NEXT:    addi 3, 3, .LCPI145_0@toc@l
17963; PWR8-NEXT:    lxvd2x 35, 0, 3
17964; PWR8-NEXT:    vcmpgtud 2, 3, 2
17965; PWR8-NEXT:    blr
17966;
17967; PWR9-LABEL: ult_24_v2i64:
17968; PWR9:       # %bb.0:
17969; PWR9-NEXT:    addis 3, 2, .LCPI145_0@toc@ha
17970; PWR9-NEXT:    vpopcntd 2, 2
17971; PWR9-NEXT:    addi 3, 3, .LCPI145_0@toc@l
17972; PWR9-NEXT:    lxv 35, 0(3)
17973; PWR9-NEXT:    vcmpgtud 2, 3, 2
17974; PWR9-NEXT:    blr
17975  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17976  %3 = icmp ult <2 x i64> %2, <i64 24, i64 24>
17977  %4 = sext <2 x i1> %3 to <2 x i64>
17978  ret <2 x i64> %4
17979}
17980
17981define <2 x i64> @ugt_24_v2i64(<2 x i64> %0) {
17982; PWR5-LABEL: ugt_24_v2i64:
17983; PWR5:       # %bb.0:
17984; PWR5-NEXT:    lis 5, 21845
17985; PWR5-NEXT:    lis 6, 13107
17986; PWR5-NEXT:    ori 5, 5, 21845
17987; PWR5-NEXT:    rotldi 8, 4, 63
17988; PWR5-NEXT:    rotldi 9, 3, 63
17989; PWR5-NEXT:    rldimi 5, 5, 32, 0
17990; PWR5-NEXT:    and 8, 8, 5
17991; PWR5-NEXT:    and 5, 9, 5
17992; PWR5-NEXT:    ori 6, 6, 13107
17993; PWR5-NEXT:    sub 3, 3, 5
17994; PWR5-NEXT:    rldimi 6, 6, 32, 0
17995; PWR5-NEXT:    sub 4, 4, 8
17996; PWR5-NEXT:    and 8, 3, 6
17997; PWR5-NEXT:    rotldi 3, 3, 62
17998; PWR5-NEXT:    and 3, 3, 6
17999; PWR5-NEXT:    lis 7, 3855
18000; PWR5-NEXT:    and 5, 4, 6
18001; PWR5-NEXT:    rotldi 4, 4, 62
18002; PWR5-NEXT:    add 3, 8, 3
18003; PWR5-NEXT:    lis 9, 257
18004; PWR5-NEXT:    ori 7, 7, 3855
18005; PWR5-NEXT:    and 4, 4, 6
18006; PWR5-NEXT:    rldicl 6, 3, 60, 4
18007; PWR5-NEXT:    ori 9, 9, 257
18008; PWR5-NEXT:    rldimi 7, 7, 32, 0
18009; PWR5-NEXT:    add 4, 5, 4
18010; PWR5-NEXT:    add 3, 3, 6
18011; PWR5-NEXT:    rldimi 9, 9, 32, 0
18012; PWR5-NEXT:    rldicl 5, 4, 60, 4
18013; PWR5-NEXT:    and 3, 3, 7
18014; PWR5-NEXT:    add 4, 4, 5
18015; PWR5-NEXT:    mulld 3, 3, 9
18016; PWR5-NEXT:    and 4, 4, 7
18017; PWR5-NEXT:    rldicl 3, 3, 8, 56
18018; PWR5-NEXT:    mulld 4, 4, 9
18019; PWR5-NEXT:    li 5, 24
18020; PWR5-NEXT:    subfic 3, 3, 24
18021; PWR5-NEXT:    rldicl 4, 4, 8, 56
18022; PWR5-NEXT:    subfe 3, 5, 5
18023; PWR5-NEXT:    subfic 4, 4, 24
18024; PWR5-NEXT:    subfe 4, 5, 5
18025; PWR5-NEXT:    blr
18026;
18027; PWR6-LABEL: ugt_24_v2i64:
18028; PWR6:       # %bb.0:
18029; PWR6-NEXT:    lis 5, 21845
18030; PWR6-NEXT:    lis 6, 13107
18031; PWR6-NEXT:    ori 5, 5, 21845
18032; PWR6-NEXT:    rotldi 8, 4, 63
18033; PWR6-NEXT:    rotldi 9, 3, 63
18034; PWR6-NEXT:    rldimi 5, 5, 32, 0
18035; PWR6-NEXT:    and 8, 8, 5
18036; PWR6-NEXT:    and 5, 9, 5
18037; PWR6-NEXT:    ori 6, 6, 13107
18038; PWR6-NEXT:    sub 3, 3, 5
18039; PWR6-NEXT:    rldimi 6, 6, 32, 0
18040; PWR6-NEXT:    sub 4, 4, 8
18041; PWR6-NEXT:    and 8, 3, 6
18042; PWR6-NEXT:    rotldi 3, 3, 62
18043; PWR6-NEXT:    and 3, 3, 6
18044; PWR6-NEXT:    lis 7, 3855
18045; PWR6-NEXT:    and 5, 4, 6
18046; PWR6-NEXT:    rotldi 4, 4, 62
18047; PWR6-NEXT:    add 3, 8, 3
18048; PWR6-NEXT:    lis 9, 257
18049; PWR6-NEXT:    ori 7, 7, 3855
18050; PWR6-NEXT:    and 4, 4, 6
18051; PWR6-NEXT:    rldicl 6, 3, 60, 4
18052; PWR6-NEXT:    ori 9, 9, 257
18053; PWR6-NEXT:    rldimi 7, 7, 32, 0
18054; PWR6-NEXT:    add 4, 5, 4
18055; PWR6-NEXT:    add 3, 3, 6
18056; PWR6-NEXT:    rldimi 9, 9, 32, 0
18057; PWR6-NEXT:    rldicl 5, 4, 60, 4
18058; PWR6-NEXT:    and 3, 3, 7
18059; PWR6-NEXT:    add 4, 4, 5
18060; PWR6-NEXT:    mulld 3, 3, 9
18061; PWR6-NEXT:    and 4, 4, 7
18062; PWR6-NEXT:    rldicl 3, 3, 8, 56
18063; PWR6-NEXT:    mulld 4, 4, 9
18064; PWR6-NEXT:    li 5, 24
18065; PWR6-NEXT:    subfic 3, 3, 24
18066; PWR6-NEXT:    rldicl 4, 4, 8, 56
18067; PWR6-NEXT:    subfe 3, 5, 5
18068; PWR6-NEXT:    subfic 4, 4, 24
18069; PWR6-NEXT:    subfe 4, 5, 5
18070; PWR6-NEXT:    blr
18071;
18072; PWR7-LABEL: ugt_24_v2i64:
18073; PWR7:       # %bb.0:
18074; PWR7-NEXT:    addi 3, 1, -32
18075; PWR7-NEXT:    li 5, -1
18076; PWR7-NEXT:    stxvd2x 34, 0, 3
18077; PWR7-NEXT:    ld 4, -24(1)
18078; PWR7-NEXT:    ld 3, -32(1)
18079; PWR7-NEXT:    popcntd 4, 4
18080; PWR7-NEXT:    popcntd 3, 3
18081; PWR7-NEXT:    cmpldi 4, 24
18082; PWR7-NEXT:    li 4, 0
18083; PWR7-NEXT:    iselgt 6, 5, 4
18084; PWR7-NEXT:    cmpldi 3, 24
18085; PWR7-NEXT:    iselgt 3, 5, 4
18086; PWR7-NEXT:    std 6, -8(1)
18087; PWR7-NEXT:    std 3, -16(1)
18088; PWR7-NEXT:    addi 3, 1, -16
18089; PWR7-NEXT:    lxvd2x 34, 0, 3
18090; PWR7-NEXT:    blr
18091;
18092; PWR8-LABEL: ugt_24_v2i64:
18093; PWR8:       # %bb.0:
18094; PWR8-NEXT:    addis 3, 2, .LCPI146_0@toc@ha
18095; PWR8-NEXT:    vpopcntd 2, 2
18096; PWR8-NEXT:    addi 3, 3, .LCPI146_0@toc@l
18097; PWR8-NEXT:    lxvd2x 35, 0, 3
18098; PWR8-NEXT:    vcmpgtud 2, 2, 3
18099; PWR8-NEXT:    blr
18100;
18101; PWR9-LABEL: ugt_24_v2i64:
18102; PWR9:       # %bb.0:
18103; PWR9-NEXT:    addis 3, 2, .LCPI146_0@toc@ha
18104; PWR9-NEXT:    vpopcntd 2, 2
18105; PWR9-NEXT:    addi 3, 3, .LCPI146_0@toc@l
18106; PWR9-NEXT:    lxv 35, 0(3)
18107; PWR9-NEXT:    vcmpgtud 2, 2, 3
18108; PWR9-NEXT:    blr
18109  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18110  %3 = icmp ugt <2 x i64> %2, <i64 24, i64 24>
18111  %4 = sext <2 x i1> %3 to <2 x i64>
18112  ret <2 x i64> %4
18113}
18114
18115define <2 x i64> @ult_25_v2i64(<2 x i64> %0) {
18116; PWR5-LABEL: ult_25_v2i64:
18117; PWR5:       # %bb.0:
18118; PWR5-NEXT:    lis 5, 21845
18119; PWR5-NEXT:    lis 6, 13107
18120; PWR5-NEXT:    ori 5, 5, 21845
18121; PWR5-NEXT:    rotldi 8, 4, 63
18122; PWR5-NEXT:    rotldi 9, 3, 63
18123; PWR5-NEXT:    rldimi 5, 5, 32, 0
18124; PWR5-NEXT:    and 8, 8, 5
18125; PWR5-NEXT:    and 5, 9, 5
18126; PWR5-NEXT:    ori 6, 6, 13107
18127; PWR5-NEXT:    sub 3, 3, 5
18128; PWR5-NEXT:    rldimi 6, 6, 32, 0
18129; PWR5-NEXT:    sub 4, 4, 8
18130; PWR5-NEXT:    and 8, 3, 6
18131; PWR5-NEXT:    rotldi 3, 3, 62
18132; PWR5-NEXT:    and 3, 3, 6
18133; PWR5-NEXT:    lis 7, 3855
18134; PWR5-NEXT:    and 5, 4, 6
18135; PWR5-NEXT:    rotldi 4, 4, 62
18136; PWR5-NEXT:    add 3, 8, 3
18137; PWR5-NEXT:    lis 9, 257
18138; PWR5-NEXT:    ori 7, 7, 3855
18139; PWR5-NEXT:    and 4, 4, 6
18140; PWR5-NEXT:    rldicl 6, 3, 60, 4
18141; PWR5-NEXT:    ori 9, 9, 257
18142; PWR5-NEXT:    rldimi 7, 7, 32, 0
18143; PWR5-NEXT:    add 4, 5, 4
18144; PWR5-NEXT:    add 3, 3, 6
18145; PWR5-NEXT:    rldimi 9, 9, 32, 0
18146; PWR5-NEXT:    rldicl 5, 4, 60, 4
18147; PWR5-NEXT:    and 3, 3, 7
18148; PWR5-NEXT:    add 4, 4, 5
18149; PWR5-NEXT:    mulld 3, 3, 9
18150; PWR5-NEXT:    and 4, 4, 7
18151; PWR5-NEXT:    rldicl 3, 3, 8, 56
18152; PWR5-NEXT:    li 5, 25
18153; PWR5-NEXT:    mulld 4, 4, 9
18154; PWR5-NEXT:    subc 6, 3, 5
18155; PWR5-NEXT:    rldicl 4, 4, 8, 56
18156; PWR5-NEXT:    subfe 3, 3, 3
18157; PWR5-NEXT:    subc 5, 4, 5
18158; PWR5-NEXT:    subfe 4, 4, 4
18159; PWR5-NEXT:    blr
18160;
18161; PWR6-LABEL: ult_25_v2i64:
18162; PWR6:       # %bb.0:
18163; PWR6-NEXT:    lis 5, 21845
18164; PWR6-NEXT:    lis 6, 13107
18165; PWR6-NEXT:    ori 5, 5, 21845
18166; PWR6-NEXT:    rotldi 8, 4, 63
18167; PWR6-NEXT:    rotldi 9, 3, 63
18168; PWR6-NEXT:    rldimi 5, 5, 32, 0
18169; PWR6-NEXT:    and 8, 8, 5
18170; PWR6-NEXT:    and 5, 9, 5
18171; PWR6-NEXT:    ori 6, 6, 13107
18172; PWR6-NEXT:    sub 3, 3, 5
18173; PWR6-NEXT:    rldimi 6, 6, 32, 0
18174; PWR6-NEXT:    sub 4, 4, 8
18175; PWR6-NEXT:    and 8, 3, 6
18176; PWR6-NEXT:    rotldi 3, 3, 62
18177; PWR6-NEXT:    and 3, 3, 6
18178; PWR6-NEXT:    lis 7, 3855
18179; PWR6-NEXT:    and 5, 4, 6
18180; PWR6-NEXT:    rotldi 4, 4, 62
18181; PWR6-NEXT:    add 3, 8, 3
18182; PWR6-NEXT:    lis 9, 257
18183; PWR6-NEXT:    ori 7, 7, 3855
18184; PWR6-NEXT:    and 4, 4, 6
18185; PWR6-NEXT:    rldicl 6, 3, 60, 4
18186; PWR6-NEXT:    ori 9, 9, 257
18187; PWR6-NEXT:    rldimi 7, 7, 32, 0
18188; PWR6-NEXT:    add 4, 5, 4
18189; PWR6-NEXT:    add 3, 3, 6
18190; PWR6-NEXT:    rldimi 9, 9, 32, 0
18191; PWR6-NEXT:    rldicl 5, 4, 60, 4
18192; PWR6-NEXT:    and 3, 3, 7
18193; PWR6-NEXT:    add 4, 4, 5
18194; PWR6-NEXT:    mulld 3, 3, 9
18195; PWR6-NEXT:    and 4, 4, 7
18196; PWR6-NEXT:    rldicl 3, 3, 8, 56
18197; PWR6-NEXT:    li 5, 25
18198; PWR6-NEXT:    mulld 4, 4, 9
18199; PWR6-NEXT:    subc 6, 3, 5
18200; PWR6-NEXT:    rldicl 4, 4, 8, 56
18201; PWR6-NEXT:    subfe 3, 3, 3
18202; PWR6-NEXT:    subc 5, 4, 5
18203; PWR6-NEXT:    subfe 4, 4, 4
18204; PWR6-NEXT:    blr
18205;
18206; PWR7-LABEL: ult_25_v2i64:
18207; PWR7:       # %bb.0:
18208; PWR7-NEXT:    addi 3, 1, -32
18209; PWR7-NEXT:    li 5, -1
18210; PWR7-NEXT:    stxvd2x 34, 0, 3
18211; PWR7-NEXT:    ld 4, -24(1)
18212; PWR7-NEXT:    ld 3, -32(1)
18213; PWR7-NEXT:    popcntd 4, 4
18214; PWR7-NEXT:    popcntd 3, 3
18215; PWR7-NEXT:    cmpldi 4, 25
18216; PWR7-NEXT:    li 4, 0
18217; PWR7-NEXT:    isellt 6, 5, 4
18218; PWR7-NEXT:    cmpldi 3, 25
18219; PWR7-NEXT:    isellt 3, 5, 4
18220; PWR7-NEXT:    std 6, -8(1)
18221; PWR7-NEXT:    std 3, -16(1)
18222; PWR7-NEXT:    addi 3, 1, -16
18223; PWR7-NEXT:    lxvd2x 34, 0, 3
18224; PWR7-NEXT:    blr
18225;
18226; PWR8-LABEL: ult_25_v2i64:
18227; PWR8:       # %bb.0:
18228; PWR8-NEXT:    addis 3, 2, .LCPI147_0@toc@ha
18229; PWR8-NEXT:    vpopcntd 2, 2
18230; PWR8-NEXT:    addi 3, 3, .LCPI147_0@toc@l
18231; PWR8-NEXT:    lxvd2x 35, 0, 3
18232; PWR8-NEXT:    vcmpgtud 2, 3, 2
18233; PWR8-NEXT:    blr
18234;
18235; PWR9-LABEL: ult_25_v2i64:
18236; PWR9:       # %bb.0:
18237; PWR9-NEXT:    addis 3, 2, .LCPI147_0@toc@ha
18238; PWR9-NEXT:    vpopcntd 2, 2
18239; PWR9-NEXT:    addi 3, 3, .LCPI147_0@toc@l
18240; PWR9-NEXT:    lxv 35, 0(3)
18241; PWR9-NEXT:    vcmpgtud 2, 3, 2
18242; PWR9-NEXT:    blr
18243  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18244  %3 = icmp ult <2 x i64> %2, <i64 25, i64 25>
18245  %4 = sext <2 x i1> %3 to <2 x i64>
18246  ret <2 x i64> %4
18247}
18248
18249define <2 x i64> @ugt_25_v2i64(<2 x i64> %0) {
18250; PWR5-LABEL: ugt_25_v2i64:
18251; PWR5:       # %bb.0:
18252; PWR5-NEXT:    lis 5, 21845
18253; PWR5-NEXT:    lis 6, 13107
18254; PWR5-NEXT:    ori 5, 5, 21845
18255; PWR5-NEXT:    rotldi 8, 4, 63
18256; PWR5-NEXT:    rotldi 9, 3, 63
18257; PWR5-NEXT:    rldimi 5, 5, 32, 0
18258; PWR5-NEXT:    and 8, 8, 5
18259; PWR5-NEXT:    and 5, 9, 5
18260; PWR5-NEXT:    ori 6, 6, 13107
18261; PWR5-NEXT:    sub 3, 3, 5
18262; PWR5-NEXT:    rldimi 6, 6, 32, 0
18263; PWR5-NEXT:    sub 4, 4, 8
18264; PWR5-NEXT:    and 8, 3, 6
18265; PWR5-NEXT:    rotldi 3, 3, 62
18266; PWR5-NEXT:    and 3, 3, 6
18267; PWR5-NEXT:    lis 7, 3855
18268; PWR5-NEXT:    and 5, 4, 6
18269; PWR5-NEXT:    rotldi 4, 4, 62
18270; PWR5-NEXT:    add 3, 8, 3
18271; PWR5-NEXT:    lis 9, 257
18272; PWR5-NEXT:    ori 7, 7, 3855
18273; PWR5-NEXT:    and 4, 4, 6
18274; PWR5-NEXT:    rldicl 6, 3, 60, 4
18275; PWR5-NEXT:    ori 9, 9, 257
18276; PWR5-NEXT:    rldimi 7, 7, 32, 0
18277; PWR5-NEXT:    add 4, 5, 4
18278; PWR5-NEXT:    add 3, 3, 6
18279; PWR5-NEXT:    rldimi 9, 9, 32, 0
18280; PWR5-NEXT:    rldicl 5, 4, 60, 4
18281; PWR5-NEXT:    and 3, 3, 7
18282; PWR5-NEXT:    add 4, 4, 5
18283; PWR5-NEXT:    mulld 3, 3, 9
18284; PWR5-NEXT:    and 4, 4, 7
18285; PWR5-NEXT:    rldicl 3, 3, 8, 56
18286; PWR5-NEXT:    mulld 4, 4, 9
18287; PWR5-NEXT:    li 5, 25
18288; PWR5-NEXT:    subfic 3, 3, 25
18289; PWR5-NEXT:    rldicl 4, 4, 8, 56
18290; PWR5-NEXT:    subfe 3, 5, 5
18291; PWR5-NEXT:    subfic 4, 4, 25
18292; PWR5-NEXT:    subfe 4, 5, 5
18293; PWR5-NEXT:    blr
18294;
18295; PWR6-LABEL: ugt_25_v2i64:
18296; PWR6:       # %bb.0:
18297; PWR6-NEXT:    lis 5, 21845
18298; PWR6-NEXT:    lis 6, 13107
18299; PWR6-NEXT:    ori 5, 5, 21845
18300; PWR6-NEXT:    rotldi 8, 4, 63
18301; PWR6-NEXT:    rotldi 9, 3, 63
18302; PWR6-NEXT:    rldimi 5, 5, 32, 0
18303; PWR6-NEXT:    and 8, 8, 5
18304; PWR6-NEXT:    and 5, 9, 5
18305; PWR6-NEXT:    ori 6, 6, 13107
18306; PWR6-NEXT:    sub 3, 3, 5
18307; PWR6-NEXT:    rldimi 6, 6, 32, 0
18308; PWR6-NEXT:    sub 4, 4, 8
18309; PWR6-NEXT:    and 8, 3, 6
18310; PWR6-NEXT:    rotldi 3, 3, 62
18311; PWR6-NEXT:    and 3, 3, 6
18312; PWR6-NEXT:    lis 7, 3855
18313; PWR6-NEXT:    and 5, 4, 6
18314; PWR6-NEXT:    rotldi 4, 4, 62
18315; PWR6-NEXT:    add 3, 8, 3
18316; PWR6-NEXT:    lis 9, 257
18317; PWR6-NEXT:    ori 7, 7, 3855
18318; PWR6-NEXT:    and 4, 4, 6
18319; PWR6-NEXT:    rldicl 6, 3, 60, 4
18320; PWR6-NEXT:    ori 9, 9, 257
18321; PWR6-NEXT:    rldimi 7, 7, 32, 0
18322; PWR6-NEXT:    add 4, 5, 4
18323; PWR6-NEXT:    add 3, 3, 6
18324; PWR6-NEXT:    rldimi 9, 9, 32, 0
18325; PWR6-NEXT:    rldicl 5, 4, 60, 4
18326; PWR6-NEXT:    and 3, 3, 7
18327; PWR6-NEXT:    add 4, 4, 5
18328; PWR6-NEXT:    mulld 3, 3, 9
18329; PWR6-NEXT:    and 4, 4, 7
18330; PWR6-NEXT:    rldicl 3, 3, 8, 56
18331; PWR6-NEXT:    mulld 4, 4, 9
18332; PWR6-NEXT:    li 5, 25
18333; PWR6-NEXT:    subfic 3, 3, 25
18334; PWR6-NEXT:    rldicl 4, 4, 8, 56
18335; PWR6-NEXT:    subfe 3, 5, 5
18336; PWR6-NEXT:    subfic 4, 4, 25
18337; PWR6-NEXT:    subfe 4, 5, 5
18338; PWR6-NEXT:    blr
18339;
18340; PWR7-LABEL: ugt_25_v2i64:
18341; PWR7:       # %bb.0:
18342; PWR7-NEXT:    addi 3, 1, -32
18343; PWR7-NEXT:    li 5, -1
18344; PWR7-NEXT:    stxvd2x 34, 0, 3
18345; PWR7-NEXT:    ld 4, -24(1)
18346; PWR7-NEXT:    ld 3, -32(1)
18347; PWR7-NEXT:    popcntd 4, 4
18348; PWR7-NEXT:    popcntd 3, 3
18349; PWR7-NEXT:    cmpldi 4, 25
18350; PWR7-NEXT:    li 4, 0
18351; PWR7-NEXT:    iselgt 6, 5, 4
18352; PWR7-NEXT:    cmpldi 3, 25
18353; PWR7-NEXT:    iselgt 3, 5, 4
18354; PWR7-NEXT:    std 6, -8(1)
18355; PWR7-NEXT:    std 3, -16(1)
18356; PWR7-NEXT:    addi 3, 1, -16
18357; PWR7-NEXT:    lxvd2x 34, 0, 3
18358; PWR7-NEXT:    blr
18359;
18360; PWR8-LABEL: ugt_25_v2i64:
18361; PWR8:       # %bb.0:
18362; PWR8-NEXT:    addis 3, 2, .LCPI148_0@toc@ha
18363; PWR8-NEXT:    vpopcntd 2, 2
18364; PWR8-NEXT:    addi 3, 3, .LCPI148_0@toc@l
18365; PWR8-NEXT:    lxvd2x 35, 0, 3
18366; PWR8-NEXT:    vcmpgtud 2, 2, 3
18367; PWR8-NEXT:    blr
18368;
18369; PWR9-LABEL: ugt_25_v2i64:
18370; PWR9:       # %bb.0:
18371; PWR9-NEXT:    addis 3, 2, .LCPI148_0@toc@ha
18372; PWR9-NEXT:    vpopcntd 2, 2
18373; PWR9-NEXT:    addi 3, 3, .LCPI148_0@toc@l
18374; PWR9-NEXT:    lxv 35, 0(3)
18375; PWR9-NEXT:    vcmpgtud 2, 2, 3
18376; PWR9-NEXT:    blr
18377  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18378  %3 = icmp ugt <2 x i64> %2, <i64 25, i64 25>
18379  %4 = sext <2 x i1> %3 to <2 x i64>
18380  ret <2 x i64> %4
18381}
18382
18383define <2 x i64> @ult_26_v2i64(<2 x i64> %0) {
18384; PWR5-LABEL: ult_26_v2i64:
18385; PWR5:       # %bb.0:
18386; PWR5-NEXT:    lis 5, 21845
18387; PWR5-NEXT:    lis 6, 13107
18388; PWR5-NEXT:    ori 5, 5, 21845
18389; PWR5-NEXT:    rotldi 8, 4, 63
18390; PWR5-NEXT:    rotldi 9, 3, 63
18391; PWR5-NEXT:    rldimi 5, 5, 32, 0
18392; PWR5-NEXT:    and 8, 8, 5
18393; PWR5-NEXT:    and 5, 9, 5
18394; PWR5-NEXT:    ori 6, 6, 13107
18395; PWR5-NEXT:    sub 3, 3, 5
18396; PWR5-NEXT:    rldimi 6, 6, 32, 0
18397; PWR5-NEXT:    sub 4, 4, 8
18398; PWR5-NEXT:    and 8, 3, 6
18399; PWR5-NEXT:    rotldi 3, 3, 62
18400; PWR5-NEXT:    and 3, 3, 6
18401; PWR5-NEXT:    lis 7, 3855
18402; PWR5-NEXT:    and 5, 4, 6
18403; PWR5-NEXT:    rotldi 4, 4, 62
18404; PWR5-NEXT:    add 3, 8, 3
18405; PWR5-NEXT:    lis 9, 257
18406; PWR5-NEXT:    ori 7, 7, 3855
18407; PWR5-NEXT:    and 4, 4, 6
18408; PWR5-NEXT:    rldicl 6, 3, 60, 4
18409; PWR5-NEXT:    ori 9, 9, 257
18410; PWR5-NEXT:    rldimi 7, 7, 32, 0
18411; PWR5-NEXT:    add 4, 5, 4
18412; PWR5-NEXT:    add 3, 3, 6
18413; PWR5-NEXT:    rldimi 9, 9, 32, 0
18414; PWR5-NEXT:    rldicl 5, 4, 60, 4
18415; PWR5-NEXT:    and 3, 3, 7
18416; PWR5-NEXT:    add 4, 4, 5
18417; PWR5-NEXT:    mulld 3, 3, 9
18418; PWR5-NEXT:    and 4, 4, 7
18419; PWR5-NEXT:    rldicl 3, 3, 8, 56
18420; PWR5-NEXT:    li 5, 26
18421; PWR5-NEXT:    mulld 4, 4, 9
18422; PWR5-NEXT:    subc 6, 3, 5
18423; PWR5-NEXT:    rldicl 4, 4, 8, 56
18424; PWR5-NEXT:    subfe 3, 3, 3
18425; PWR5-NEXT:    subc 5, 4, 5
18426; PWR5-NEXT:    subfe 4, 4, 4
18427; PWR5-NEXT:    blr
18428;
18429; PWR6-LABEL: ult_26_v2i64:
18430; PWR6:       # %bb.0:
18431; PWR6-NEXT:    lis 5, 21845
18432; PWR6-NEXT:    lis 6, 13107
18433; PWR6-NEXT:    ori 5, 5, 21845
18434; PWR6-NEXT:    rotldi 8, 4, 63
18435; PWR6-NEXT:    rotldi 9, 3, 63
18436; PWR6-NEXT:    rldimi 5, 5, 32, 0
18437; PWR6-NEXT:    and 8, 8, 5
18438; PWR6-NEXT:    and 5, 9, 5
18439; PWR6-NEXT:    ori 6, 6, 13107
18440; PWR6-NEXT:    sub 3, 3, 5
18441; PWR6-NEXT:    rldimi 6, 6, 32, 0
18442; PWR6-NEXT:    sub 4, 4, 8
18443; PWR6-NEXT:    and 8, 3, 6
18444; PWR6-NEXT:    rotldi 3, 3, 62
18445; PWR6-NEXT:    and 3, 3, 6
18446; PWR6-NEXT:    lis 7, 3855
18447; PWR6-NEXT:    and 5, 4, 6
18448; PWR6-NEXT:    rotldi 4, 4, 62
18449; PWR6-NEXT:    add 3, 8, 3
18450; PWR6-NEXT:    lis 9, 257
18451; PWR6-NEXT:    ori 7, 7, 3855
18452; PWR6-NEXT:    and 4, 4, 6
18453; PWR6-NEXT:    rldicl 6, 3, 60, 4
18454; PWR6-NEXT:    ori 9, 9, 257
18455; PWR6-NEXT:    rldimi 7, 7, 32, 0
18456; PWR6-NEXT:    add 4, 5, 4
18457; PWR6-NEXT:    add 3, 3, 6
18458; PWR6-NEXT:    rldimi 9, 9, 32, 0
18459; PWR6-NEXT:    rldicl 5, 4, 60, 4
18460; PWR6-NEXT:    and 3, 3, 7
18461; PWR6-NEXT:    add 4, 4, 5
18462; PWR6-NEXT:    mulld 3, 3, 9
18463; PWR6-NEXT:    and 4, 4, 7
18464; PWR6-NEXT:    rldicl 3, 3, 8, 56
18465; PWR6-NEXT:    li 5, 26
18466; PWR6-NEXT:    mulld 4, 4, 9
18467; PWR6-NEXT:    subc 6, 3, 5
18468; PWR6-NEXT:    rldicl 4, 4, 8, 56
18469; PWR6-NEXT:    subfe 3, 3, 3
18470; PWR6-NEXT:    subc 5, 4, 5
18471; PWR6-NEXT:    subfe 4, 4, 4
18472; PWR6-NEXT:    blr
18473;
18474; PWR7-LABEL: ult_26_v2i64:
18475; PWR7:       # %bb.0:
18476; PWR7-NEXT:    addi 3, 1, -32
18477; PWR7-NEXT:    li 5, -1
18478; PWR7-NEXT:    stxvd2x 34, 0, 3
18479; PWR7-NEXT:    ld 4, -24(1)
18480; PWR7-NEXT:    ld 3, -32(1)
18481; PWR7-NEXT:    popcntd 4, 4
18482; PWR7-NEXT:    popcntd 3, 3
18483; PWR7-NEXT:    cmpldi 4, 26
18484; PWR7-NEXT:    li 4, 0
18485; PWR7-NEXT:    isellt 6, 5, 4
18486; PWR7-NEXT:    cmpldi 3, 26
18487; PWR7-NEXT:    isellt 3, 5, 4
18488; PWR7-NEXT:    std 6, -8(1)
18489; PWR7-NEXT:    std 3, -16(1)
18490; PWR7-NEXT:    addi 3, 1, -16
18491; PWR7-NEXT:    lxvd2x 34, 0, 3
18492; PWR7-NEXT:    blr
18493;
18494; PWR8-LABEL: ult_26_v2i64:
18495; PWR8:       # %bb.0:
18496; PWR8-NEXT:    addis 3, 2, .LCPI149_0@toc@ha
18497; PWR8-NEXT:    vpopcntd 2, 2
18498; PWR8-NEXT:    addi 3, 3, .LCPI149_0@toc@l
18499; PWR8-NEXT:    lxvd2x 35, 0, 3
18500; PWR8-NEXT:    vcmpgtud 2, 3, 2
18501; PWR8-NEXT:    blr
18502;
18503; PWR9-LABEL: ult_26_v2i64:
18504; PWR9:       # %bb.0:
18505; PWR9-NEXT:    addis 3, 2, .LCPI149_0@toc@ha
18506; PWR9-NEXT:    vpopcntd 2, 2
18507; PWR9-NEXT:    addi 3, 3, .LCPI149_0@toc@l
18508; PWR9-NEXT:    lxv 35, 0(3)
18509; PWR9-NEXT:    vcmpgtud 2, 3, 2
18510; PWR9-NEXT:    blr
18511  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18512  %3 = icmp ult <2 x i64> %2, <i64 26, i64 26>
18513  %4 = sext <2 x i1> %3 to <2 x i64>
18514  ret <2 x i64> %4
18515}
18516
18517define <2 x i64> @ugt_26_v2i64(<2 x i64> %0) {
18518; PWR5-LABEL: ugt_26_v2i64:
18519; PWR5:       # %bb.0:
18520; PWR5-NEXT:    lis 5, 21845
18521; PWR5-NEXT:    lis 6, 13107
18522; PWR5-NEXT:    ori 5, 5, 21845
18523; PWR5-NEXT:    rotldi 8, 4, 63
18524; PWR5-NEXT:    rotldi 9, 3, 63
18525; PWR5-NEXT:    rldimi 5, 5, 32, 0
18526; PWR5-NEXT:    and 8, 8, 5
18527; PWR5-NEXT:    and 5, 9, 5
18528; PWR5-NEXT:    ori 6, 6, 13107
18529; PWR5-NEXT:    sub 3, 3, 5
18530; PWR5-NEXT:    rldimi 6, 6, 32, 0
18531; PWR5-NEXT:    sub 4, 4, 8
18532; PWR5-NEXT:    and 8, 3, 6
18533; PWR5-NEXT:    rotldi 3, 3, 62
18534; PWR5-NEXT:    and 3, 3, 6
18535; PWR5-NEXT:    lis 7, 3855
18536; PWR5-NEXT:    and 5, 4, 6
18537; PWR5-NEXT:    rotldi 4, 4, 62
18538; PWR5-NEXT:    add 3, 8, 3
18539; PWR5-NEXT:    lis 9, 257
18540; PWR5-NEXT:    ori 7, 7, 3855
18541; PWR5-NEXT:    and 4, 4, 6
18542; PWR5-NEXT:    rldicl 6, 3, 60, 4
18543; PWR5-NEXT:    ori 9, 9, 257
18544; PWR5-NEXT:    rldimi 7, 7, 32, 0
18545; PWR5-NEXT:    add 4, 5, 4
18546; PWR5-NEXT:    add 3, 3, 6
18547; PWR5-NEXT:    rldimi 9, 9, 32, 0
18548; PWR5-NEXT:    rldicl 5, 4, 60, 4
18549; PWR5-NEXT:    and 3, 3, 7
18550; PWR5-NEXT:    add 4, 4, 5
18551; PWR5-NEXT:    mulld 3, 3, 9
18552; PWR5-NEXT:    and 4, 4, 7
18553; PWR5-NEXT:    rldicl 3, 3, 8, 56
18554; PWR5-NEXT:    mulld 4, 4, 9
18555; PWR5-NEXT:    li 5, 26
18556; PWR5-NEXT:    subfic 3, 3, 26
18557; PWR5-NEXT:    rldicl 4, 4, 8, 56
18558; PWR5-NEXT:    subfe 3, 5, 5
18559; PWR5-NEXT:    subfic 4, 4, 26
18560; PWR5-NEXT:    subfe 4, 5, 5
18561; PWR5-NEXT:    blr
18562;
18563; PWR6-LABEL: ugt_26_v2i64:
18564; PWR6:       # %bb.0:
18565; PWR6-NEXT:    lis 5, 21845
18566; PWR6-NEXT:    lis 6, 13107
18567; PWR6-NEXT:    ori 5, 5, 21845
18568; PWR6-NEXT:    rotldi 8, 4, 63
18569; PWR6-NEXT:    rotldi 9, 3, 63
18570; PWR6-NEXT:    rldimi 5, 5, 32, 0
18571; PWR6-NEXT:    and 8, 8, 5
18572; PWR6-NEXT:    and 5, 9, 5
18573; PWR6-NEXT:    ori 6, 6, 13107
18574; PWR6-NEXT:    sub 3, 3, 5
18575; PWR6-NEXT:    rldimi 6, 6, 32, 0
18576; PWR6-NEXT:    sub 4, 4, 8
18577; PWR6-NEXT:    and 8, 3, 6
18578; PWR6-NEXT:    rotldi 3, 3, 62
18579; PWR6-NEXT:    and 3, 3, 6
18580; PWR6-NEXT:    lis 7, 3855
18581; PWR6-NEXT:    and 5, 4, 6
18582; PWR6-NEXT:    rotldi 4, 4, 62
18583; PWR6-NEXT:    add 3, 8, 3
18584; PWR6-NEXT:    lis 9, 257
18585; PWR6-NEXT:    ori 7, 7, 3855
18586; PWR6-NEXT:    and 4, 4, 6
18587; PWR6-NEXT:    rldicl 6, 3, 60, 4
18588; PWR6-NEXT:    ori 9, 9, 257
18589; PWR6-NEXT:    rldimi 7, 7, 32, 0
18590; PWR6-NEXT:    add 4, 5, 4
18591; PWR6-NEXT:    add 3, 3, 6
18592; PWR6-NEXT:    rldimi 9, 9, 32, 0
18593; PWR6-NEXT:    rldicl 5, 4, 60, 4
18594; PWR6-NEXT:    and 3, 3, 7
18595; PWR6-NEXT:    add 4, 4, 5
18596; PWR6-NEXT:    mulld 3, 3, 9
18597; PWR6-NEXT:    and 4, 4, 7
18598; PWR6-NEXT:    rldicl 3, 3, 8, 56
18599; PWR6-NEXT:    mulld 4, 4, 9
18600; PWR6-NEXT:    li 5, 26
18601; PWR6-NEXT:    subfic 3, 3, 26
18602; PWR6-NEXT:    rldicl 4, 4, 8, 56
18603; PWR6-NEXT:    subfe 3, 5, 5
18604; PWR6-NEXT:    subfic 4, 4, 26
18605; PWR6-NEXT:    subfe 4, 5, 5
18606; PWR6-NEXT:    blr
18607;
18608; PWR7-LABEL: ugt_26_v2i64:
18609; PWR7:       # %bb.0:
18610; PWR7-NEXT:    addi 3, 1, -32
18611; PWR7-NEXT:    li 5, -1
18612; PWR7-NEXT:    stxvd2x 34, 0, 3
18613; PWR7-NEXT:    ld 4, -24(1)
18614; PWR7-NEXT:    ld 3, -32(1)
18615; PWR7-NEXT:    popcntd 4, 4
18616; PWR7-NEXT:    popcntd 3, 3
18617; PWR7-NEXT:    cmpldi 4, 26
18618; PWR7-NEXT:    li 4, 0
18619; PWR7-NEXT:    iselgt 6, 5, 4
18620; PWR7-NEXT:    cmpldi 3, 26
18621; PWR7-NEXT:    iselgt 3, 5, 4
18622; PWR7-NEXT:    std 6, -8(1)
18623; PWR7-NEXT:    std 3, -16(1)
18624; PWR7-NEXT:    addi 3, 1, -16
18625; PWR7-NEXT:    lxvd2x 34, 0, 3
18626; PWR7-NEXT:    blr
18627;
18628; PWR8-LABEL: ugt_26_v2i64:
18629; PWR8:       # %bb.0:
18630; PWR8-NEXT:    addis 3, 2, .LCPI150_0@toc@ha
18631; PWR8-NEXT:    vpopcntd 2, 2
18632; PWR8-NEXT:    addi 3, 3, .LCPI150_0@toc@l
18633; PWR8-NEXT:    lxvd2x 35, 0, 3
18634; PWR8-NEXT:    vcmpgtud 2, 2, 3
18635; PWR8-NEXT:    blr
18636;
18637; PWR9-LABEL: ugt_26_v2i64:
18638; PWR9:       # %bb.0:
18639; PWR9-NEXT:    addis 3, 2, .LCPI150_0@toc@ha
18640; PWR9-NEXT:    vpopcntd 2, 2
18641; PWR9-NEXT:    addi 3, 3, .LCPI150_0@toc@l
18642; PWR9-NEXT:    lxv 35, 0(3)
18643; PWR9-NEXT:    vcmpgtud 2, 2, 3
18644; PWR9-NEXT:    blr
18645  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18646  %3 = icmp ugt <2 x i64> %2, <i64 26, i64 26>
18647  %4 = sext <2 x i1> %3 to <2 x i64>
18648  ret <2 x i64> %4
18649}
18650
18651define <2 x i64> @ult_27_v2i64(<2 x i64> %0) {
18652; PWR5-LABEL: ult_27_v2i64:
18653; PWR5:       # %bb.0:
18654; PWR5-NEXT:    lis 5, 21845
18655; PWR5-NEXT:    lis 6, 13107
18656; PWR5-NEXT:    ori 5, 5, 21845
18657; PWR5-NEXT:    rotldi 8, 4, 63
18658; PWR5-NEXT:    rotldi 9, 3, 63
18659; PWR5-NEXT:    rldimi 5, 5, 32, 0
18660; PWR5-NEXT:    and 8, 8, 5
18661; PWR5-NEXT:    and 5, 9, 5
18662; PWR5-NEXT:    ori 6, 6, 13107
18663; PWR5-NEXT:    sub 3, 3, 5
18664; PWR5-NEXT:    rldimi 6, 6, 32, 0
18665; PWR5-NEXT:    sub 4, 4, 8
18666; PWR5-NEXT:    and 8, 3, 6
18667; PWR5-NEXT:    rotldi 3, 3, 62
18668; PWR5-NEXT:    and 3, 3, 6
18669; PWR5-NEXT:    lis 7, 3855
18670; PWR5-NEXT:    and 5, 4, 6
18671; PWR5-NEXT:    rotldi 4, 4, 62
18672; PWR5-NEXT:    add 3, 8, 3
18673; PWR5-NEXT:    lis 9, 257
18674; PWR5-NEXT:    ori 7, 7, 3855
18675; PWR5-NEXT:    and 4, 4, 6
18676; PWR5-NEXT:    rldicl 6, 3, 60, 4
18677; PWR5-NEXT:    ori 9, 9, 257
18678; PWR5-NEXT:    rldimi 7, 7, 32, 0
18679; PWR5-NEXT:    add 4, 5, 4
18680; PWR5-NEXT:    add 3, 3, 6
18681; PWR5-NEXT:    rldimi 9, 9, 32, 0
18682; PWR5-NEXT:    rldicl 5, 4, 60, 4
18683; PWR5-NEXT:    and 3, 3, 7
18684; PWR5-NEXT:    add 4, 4, 5
18685; PWR5-NEXT:    mulld 3, 3, 9
18686; PWR5-NEXT:    and 4, 4, 7
18687; PWR5-NEXT:    rldicl 3, 3, 8, 56
18688; PWR5-NEXT:    li 5, 27
18689; PWR5-NEXT:    mulld 4, 4, 9
18690; PWR5-NEXT:    subc 6, 3, 5
18691; PWR5-NEXT:    rldicl 4, 4, 8, 56
18692; PWR5-NEXT:    subfe 3, 3, 3
18693; PWR5-NEXT:    subc 5, 4, 5
18694; PWR5-NEXT:    subfe 4, 4, 4
18695; PWR5-NEXT:    blr
18696;
18697; PWR6-LABEL: ult_27_v2i64:
18698; PWR6:       # %bb.0:
18699; PWR6-NEXT:    lis 5, 21845
18700; PWR6-NEXT:    lis 6, 13107
18701; PWR6-NEXT:    ori 5, 5, 21845
18702; PWR6-NEXT:    rotldi 8, 4, 63
18703; PWR6-NEXT:    rotldi 9, 3, 63
18704; PWR6-NEXT:    rldimi 5, 5, 32, 0
18705; PWR6-NEXT:    and 8, 8, 5
18706; PWR6-NEXT:    and 5, 9, 5
18707; PWR6-NEXT:    ori 6, 6, 13107
18708; PWR6-NEXT:    sub 3, 3, 5
18709; PWR6-NEXT:    rldimi 6, 6, 32, 0
18710; PWR6-NEXT:    sub 4, 4, 8
18711; PWR6-NEXT:    and 8, 3, 6
18712; PWR6-NEXT:    rotldi 3, 3, 62
18713; PWR6-NEXT:    and 3, 3, 6
18714; PWR6-NEXT:    lis 7, 3855
18715; PWR6-NEXT:    and 5, 4, 6
18716; PWR6-NEXT:    rotldi 4, 4, 62
18717; PWR6-NEXT:    add 3, 8, 3
18718; PWR6-NEXT:    lis 9, 257
18719; PWR6-NEXT:    ori 7, 7, 3855
18720; PWR6-NEXT:    and 4, 4, 6
18721; PWR6-NEXT:    rldicl 6, 3, 60, 4
18722; PWR6-NEXT:    ori 9, 9, 257
18723; PWR6-NEXT:    rldimi 7, 7, 32, 0
18724; PWR6-NEXT:    add 4, 5, 4
18725; PWR6-NEXT:    add 3, 3, 6
18726; PWR6-NEXT:    rldimi 9, 9, 32, 0
18727; PWR6-NEXT:    rldicl 5, 4, 60, 4
18728; PWR6-NEXT:    and 3, 3, 7
18729; PWR6-NEXT:    add 4, 4, 5
18730; PWR6-NEXT:    mulld 3, 3, 9
18731; PWR6-NEXT:    and 4, 4, 7
18732; PWR6-NEXT:    rldicl 3, 3, 8, 56
18733; PWR6-NEXT:    li 5, 27
18734; PWR6-NEXT:    mulld 4, 4, 9
18735; PWR6-NEXT:    subc 6, 3, 5
18736; PWR6-NEXT:    rldicl 4, 4, 8, 56
18737; PWR6-NEXT:    subfe 3, 3, 3
18738; PWR6-NEXT:    subc 5, 4, 5
18739; PWR6-NEXT:    subfe 4, 4, 4
18740; PWR6-NEXT:    blr
18741;
18742; PWR7-LABEL: ult_27_v2i64:
18743; PWR7:       # %bb.0:
18744; PWR7-NEXT:    addi 3, 1, -32
18745; PWR7-NEXT:    li 5, -1
18746; PWR7-NEXT:    stxvd2x 34, 0, 3
18747; PWR7-NEXT:    ld 4, -24(1)
18748; PWR7-NEXT:    ld 3, -32(1)
18749; PWR7-NEXT:    popcntd 4, 4
18750; PWR7-NEXT:    popcntd 3, 3
18751; PWR7-NEXT:    cmpldi 4, 27
18752; PWR7-NEXT:    li 4, 0
18753; PWR7-NEXT:    isellt 6, 5, 4
18754; PWR7-NEXT:    cmpldi 3, 27
18755; PWR7-NEXT:    isellt 3, 5, 4
18756; PWR7-NEXT:    std 6, -8(1)
18757; PWR7-NEXT:    std 3, -16(1)
18758; PWR7-NEXT:    addi 3, 1, -16
18759; PWR7-NEXT:    lxvd2x 34, 0, 3
18760; PWR7-NEXT:    blr
18761;
18762; PWR8-LABEL: ult_27_v2i64:
18763; PWR8:       # %bb.0:
18764; PWR8-NEXT:    addis 3, 2, .LCPI151_0@toc@ha
18765; PWR8-NEXT:    vpopcntd 2, 2
18766; PWR8-NEXT:    addi 3, 3, .LCPI151_0@toc@l
18767; PWR8-NEXT:    lxvd2x 35, 0, 3
18768; PWR8-NEXT:    vcmpgtud 2, 3, 2
18769; PWR8-NEXT:    blr
18770;
18771; PWR9-LABEL: ult_27_v2i64:
18772; PWR9:       # %bb.0:
18773; PWR9-NEXT:    addis 3, 2, .LCPI151_0@toc@ha
18774; PWR9-NEXT:    vpopcntd 2, 2
18775; PWR9-NEXT:    addi 3, 3, .LCPI151_0@toc@l
18776; PWR9-NEXT:    lxv 35, 0(3)
18777; PWR9-NEXT:    vcmpgtud 2, 3, 2
18778; PWR9-NEXT:    blr
18779  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18780  %3 = icmp ult <2 x i64> %2, <i64 27, i64 27>
18781  %4 = sext <2 x i1> %3 to <2 x i64>
18782  ret <2 x i64> %4
18783}
18784
18785define <2 x i64> @ugt_27_v2i64(<2 x i64> %0) {
18786; PWR5-LABEL: ugt_27_v2i64:
18787; PWR5:       # %bb.0:
18788; PWR5-NEXT:    lis 5, 21845
18789; PWR5-NEXT:    lis 6, 13107
18790; PWR5-NEXT:    ori 5, 5, 21845
18791; PWR5-NEXT:    rotldi 8, 4, 63
18792; PWR5-NEXT:    rotldi 9, 3, 63
18793; PWR5-NEXT:    rldimi 5, 5, 32, 0
18794; PWR5-NEXT:    and 8, 8, 5
18795; PWR5-NEXT:    and 5, 9, 5
18796; PWR5-NEXT:    ori 6, 6, 13107
18797; PWR5-NEXT:    sub 3, 3, 5
18798; PWR5-NEXT:    rldimi 6, 6, 32, 0
18799; PWR5-NEXT:    sub 4, 4, 8
18800; PWR5-NEXT:    and 8, 3, 6
18801; PWR5-NEXT:    rotldi 3, 3, 62
18802; PWR5-NEXT:    and 3, 3, 6
18803; PWR5-NEXT:    lis 7, 3855
18804; PWR5-NEXT:    and 5, 4, 6
18805; PWR5-NEXT:    rotldi 4, 4, 62
18806; PWR5-NEXT:    add 3, 8, 3
18807; PWR5-NEXT:    lis 9, 257
18808; PWR5-NEXT:    ori 7, 7, 3855
18809; PWR5-NEXT:    and 4, 4, 6
18810; PWR5-NEXT:    rldicl 6, 3, 60, 4
18811; PWR5-NEXT:    ori 9, 9, 257
18812; PWR5-NEXT:    rldimi 7, 7, 32, 0
18813; PWR5-NEXT:    add 4, 5, 4
18814; PWR5-NEXT:    add 3, 3, 6
18815; PWR5-NEXT:    rldimi 9, 9, 32, 0
18816; PWR5-NEXT:    rldicl 5, 4, 60, 4
18817; PWR5-NEXT:    and 3, 3, 7
18818; PWR5-NEXT:    add 4, 4, 5
18819; PWR5-NEXT:    mulld 3, 3, 9
18820; PWR5-NEXT:    and 4, 4, 7
18821; PWR5-NEXT:    rldicl 3, 3, 8, 56
18822; PWR5-NEXT:    mulld 4, 4, 9
18823; PWR5-NEXT:    li 5, 27
18824; PWR5-NEXT:    subfic 3, 3, 27
18825; PWR5-NEXT:    rldicl 4, 4, 8, 56
18826; PWR5-NEXT:    subfe 3, 5, 5
18827; PWR5-NEXT:    subfic 4, 4, 27
18828; PWR5-NEXT:    subfe 4, 5, 5
18829; PWR5-NEXT:    blr
18830;
18831; PWR6-LABEL: ugt_27_v2i64:
18832; PWR6:       # %bb.0:
18833; PWR6-NEXT:    lis 5, 21845
18834; PWR6-NEXT:    lis 6, 13107
18835; PWR6-NEXT:    ori 5, 5, 21845
18836; PWR6-NEXT:    rotldi 8, 4, 63
18837; PWR6-NEXT:    rotldi 9, 3, 63
18838; PWR6-NEXT:    rldimi 5, 5, 32, 0
18839; PWR6-NEXT:    and 8, 8, 5
18840; PWR6-NEXT:    and 5, 9, 5
18841; PWR6-NEXT:    ori 6, 6, 13107
18842; PWR6-NEXT:    sub 3, 3, 5
18843; PWR6-NEXT:    rldimi 6, 6, 32, 0
18844; PWR6-NEXT:    sub 4, 4, 8
18845; PWR6-NEXT:    and 8, 3, 6
18846; PWR6-NEXT:    rotldi 3, 3, 62
18847; PWR6-NEXT:    and 3, 3, 6
18848; PWR6-NEXT:    lis 7, 3855
18849; PWR6-NEXT:    and 5, 4, 6
18850; PWR6-NEXT:    rotldi 4, 4, 62
18851; PWR6-NEXT:    add 3, 8, 3
18852; PWR6-NEXT:    lis 9, 257
18853; PWR6-NEXT:    ori 7, 7, 3855
18854; PWR6-NEXT:    and 4, 4, 6
18855; PWR6-NEXT:    rldicl 6, 3, 60, 4
18856; PWR6-NEXT:    ori 9, 9, 257
18857; PWR6-NEXT:    rldimi 7, 7, 32, 0
18858; PWR6-NEXT:    add 4, 5, 4
18859; PWR6-NEXT:    add 3, 3, 6
18860; PWR6-NEXT:    rldimi 9, 9, 32, 0
18861; PWR6-NEXT:    rldicl 5, 4, 60, 4
18862; PWR6-NEXT:    and 3, 3, 7
18863; PWR6-NEXT:    add 4, 4, 5
18864; PWR6-NEXT:    mulld 3, 3, 9
18865; PWR6-NEXT:    and 4, 4, 7
18866; PWR6-NEXT:    rldicl 3, 3, 8, 56
18867; PWR6-NEXT:    mulld 4, 4, 9
18868; PWR6-NEXT:    li 5, 27
18869; PWR6-NEXT:    subfic 3, 3, 27
18870; PWR6-NEXT:    rldicl 4, 4, 8, 56
18871; PWR6-NEXT:    subfe 3, 5, 5
18872; PWR6-NEXT:    subfic 4, 4, 27
18873; PWR6-NEXT:    subfe 4, 5, 5
18874; PWR6-NEXT:    blr
18875;
18876; PWR7-LABEL: ugt_27_v2i64:
18877; PWR7:       # %bb.0:
18878; PWR7-NEXT:    addi 3, 1, -32
18879; PWR7-NEXT:    li 5, -1
18880; PWR7-NEXT:    stxvd2x 34, 0, 3
18881; PWR7-NEXT:    ld 4, -24(1)
18882; PWR7-NEXT:    ld 3, -32(1)
18883; PWR7-NEXT:    popcntd 4, 4
18884; PWR7-NEXT:    popcntd 3, 3
18885; PWR7-NEXT:    cmpldi 4, 27
18886; PWR7-NEXT:    li 4, 0
18887; PWR7-NEXT:    iselgt 6, 5, 4
18888; PWR7-NEXT:    cmpldi 3, 27
18889; PWR7-NEXT:    iselgt 3, 5, 4
18890; PWR7-NEXT:    std 6, -8(1)
18891; PWR7-NEXT:    std 3, -16(1)
18892; PWR7-NEXT:    addi 3, 1, -16
18893; PWR7-NEXT:    lxvd2x 34, 0, 3
18894; PWR7-NEXT:    blr
18895;
18896; PWR8-LABEL: ugt_27_v2i64:
18897; PWR8:       # %bb.0:
18898; PWR8-NEXT:    addis 3, 2, .LCPI152_0@toc@ha
18899; PWR8-NEXT:    vpopcntd 2, 2
18900; PWR8-NEXT:    addi 3, 3, .LCPI152_0@toc@l
18901; PWR8-NEXT:    lxvd2x 35, 0, 3
18902; PWR8-NEXT:    vcmpgtud 2, 2, 3
18903; PWR8-NEXT:    blr
18904;
18905; PWR9-LABEL: ugt_27_v2i64:
18906; PWR9:       # %bb.0:
18907; PWR9-NEXT:    addis 3, 2, .LCPI152_0@toc@ha
18908; PWR9-NEXT:    vpopcntd 2, 2
18909; PWR9-NEXT:    addi 3, 3, .LCPI152_0@toc@l
18910; PWR9-NEXT:    lxv 35, 0(3)
18911; PWR9-NEXT:    vcmpgtud 2, 2, 3
18912; PWR9-NEXT:    blr
18913  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18914  %3 = icmp ugt <2 x i64> %2, <i64 27, i64 27>
18915  %4 = sext <2 x i1> %3 to <2 x i64>
18916  ret <2 x i64> %4
18917}
18918
18919define <2 x i64> @ult_28_v2i64(<2 x i64> %0) {
18920; PWR5-LABEL: ult_28_v2i64:
18921; PWR5:       # %bb.0:
18922; PWR5-NEXT:    lis 5, 21845
18923; PWR5-NEXT:    lis 6, 13107
18924; PWR5-NEXT:    ori 5, 5, 21845
18925; PWR5-NEXT:    rotldi 8, 4, 63
18926; PWR5-NEXT:    rotldi 9, 3, 63
18927; PWR5-NEXT:    rldimi 5, 5, 32, 0
18928; PWR5-NEXT:    and 8, 8, 5
18929; PWR5-NEXT:    and 5, 9, 5
18930; PWR5-NEXT:    ori 6, 6, 13107
18931; PWR5-NEXT:    sub 3, 3, 5
18932; PWR5-NEXT:    rldimi 6, 6, 32, 0
18933; PWR5-NEXT:    sub 4, 4, 8
18934; PWR5-NEXT:    and 8, 3, 6
18935; PWR5-NEXT:    rotldi 3, 3, 62
18936; PWR5-NEXT:    and 3, 3, 6
18937; PWR5-NEXT:    lis 7, 3855
18938; PWR5-NEXT:    and 5, 4, 6
18939; PWR5-NEXT:    rotldi 4, 4, 62
18940; PWR5-NEXT:    add 3, 8, 3
18941; PWR5-NEXT:    lis 9, 257
18942; PWR5-NEXT:    ori 7, 7, 3855
18943; PWR5-NEXT:    and 4, 4, 6
18944; PWR5-NEXT:    rldicl 6, 3, 60, 4
18945; PWR5-NEXT:    ori 9, 9, 257
18946; PWR5-NEXT:    rldimi 7, 7, 32, 0
18947; PWR5-NEXT:    add 4, 5, 4
18948; PWR5-NEXT:    add 3, 3, 6
18949; PWR5-NEXT:    rldimi 9, 9, 32, 0
18950; PWR5-NEXT:    rldicl 5, 4, 60, 4
18951; PWR5-NEXT:    and 3, 3, 7
18952; PWR5-NEXT:    add 4, 4, 5
18953; PWR5-NEXT:    mulld 3, 3, 9
18954; PWR5-NEXT:    and 4, 4, 7
18955; PWR5-NEXT:    rldicl 3, 3, 8, 56
18956; PWR5-NEXT:    li 5, 28
18957; PWR5-NEXT:    mulld 4, 4, 9
18958; PWR5-NEXT:    subc 6, 3, 5
18959; PWR5-NEXT:    rldicl 4, 4, 8, 56
18960; PWR5-NEXT:    subfe 3, 3, 3
18961; PWR5-NEXT:    subc 5, 4, 5
18962; PWR5-NEXT:    subfe 4, 4, 4
18963; PWR5-NEXT:    blr
18964;
18965; PWR6-LABEL: ult_28_v2i64:
18966; PWR6:       # %bb.0:
18967; PWR6-NEXT:    lis 5, 21845
18968; PWR6-NEXT:    lis 6, 13107
18969; PWR6-NEXT:    ori 5, 5, 21845
18970; PWR6-NEXT:    rotldi 8, 4, 63
18971; PWR6-NEXT:    rotldi 9, 3, 63
18972; PWR6-NEXT:    rldimi 5, 5, 32, 0
18973; PWR6-NEXT:    and 8, 8, 5
18974; PWR6-NEXT:    and 5, 9, 5
18975; PWR6-NEXT:    ori 6, 6, 13107
18976; PWR6-NEXT:    sub 3, 3, 5
18977; PWR6-NEXT:    rldimi 6, 6, 32, 0
18978; PWR6-NEXT:    sub 4, 4, 8
18979; PWR6-NEXT:    and 8, 3, 6
18980; PWR6-NEXT:    rotldi 3, 3, 62
18981; PWR6-NEXT:    and 3, 3, 6
18982; PWR6-NEXT:    lis 7, 3855
18983; PWR6-NEXT:    and 5, 4, 6
18984; PWR6-NEXT:    rotldi 4, 4, 62
18985; PWR6-NEXT:    add 3, 8, 3
18986; PWR6-NEXT:    lis 9, 257
18987; PWR6-NEXT:    ori 7, 7, 3855
18988; PWR6-NEXT:    and 4, 4, 6
18989; PWR6-NEXT:    rldicl 6, 3, 60, 4
18990; PWR6-NEXT:    ori 9, 9, 257
18991; PWR6-NEXT:    rldimi 7, 7, 32, 0
18992; PWR6-NEXT:    add 4, 5, 4
18993; PWR6-NEXT:    add 3, 3, 6
18994; PWR6-NEXT:    rldimi 9, 9, 32, 0
18995; PWR6-NEXT:    rldicl 5, 4, 60, 4
18996; PWR6-NEXT:    and 3, 3, 7
18997; PWR6-NEXT:    add 4, 4, 5
18998; PWR6-NEXT:    mulld 3, 3, 9
18999; PWR6-NEXT:    and 4, 4, 7
19000; PWR6-NEXT:    rldicl 3, 3, 8, 56
19001; PWR6-NEXT:    li 5, 28
19002; PWR6-NEXT:    mulld 4, 4, 9
19003; PWR6-NEXT:    subc 6, 3, 5
19004; PWR6-NEXT:    rldicl 4, 4, 8, 56
19005; PWR6-NEXT:    subfe 3, 3, 3
19006; PWR6-NEXT:    subc 5, 4, 5
19007; PWR6-NEXT:    subfe 4, 4, 4
19008; PWR6-NEXT:    blr
19009;
19010; PWR7-LABEL: ult_28_v2i64:
19011; PWR7:       # %bb.0:
19012; PWR7-NEXT:    addi 3, 1, -32
19013; PWR7-NEXT:    li 5, -1
19014; PWR7-NEXT:    stxvd2x 34, 0, 3
19015; PWR7-NEXT:    ld 4, -24(1)
19016; PWR7-NEXT:    ld 3, -32(1)
19017; PWR7-NEXT:    popcntd 4, 4
19018; PWR7-NEXT:    popcntd 3, 3
19019; PWR7-NEXT:    cmpldi 4, 28
19020; PWR7-NEXT:    li 4, 0
19021; PWR7-NEXT:    isellt 6, 5, 4
19022; PWR7-NEXT:    cmpldi 3, 28
19023; PWR7-NEXT:    isellt 3, 5, 4
19024; PWR7-NEXT:    std 6, -8(1)
19025; PWR7-NEXT:    std 3, -16(1)
19026; PWR7-NEXT:    addi 3, 1, -16
19027; PWR7-NEXT:    lxvd2x 34, 0, 3
19028; PWR7-NEXT:    blr
19029;
19030; PWR8-LABEL: ult_28_v2i64:
19031; PWR8:       # %bb.0:
19032; PWR8-NEXT:    addis 3, 2, .LCPI153_0@toc@ha
19033; PWR8-NEXT:    vpopcntd 2, 2
19034; PWR8-NEXT:    addi 3, 3, .LCPI153_0@toc@l
19035; PWR8-NEXT:    lxvd2x 35, 0, 3
19036; PWR8-NEXT:    vcmpgtud 2, 3, 2
19037; PWR8-NEXT:    blr
19038;
19039; PWR9-LABEL: ult_28_v2i64:
19040; PWR9:       # %bb.0:
19041; PWR9-NEXT:    addis 3, 2, .LCPI153_0@toc@ha
19042; PWR9-NEXT:    vpopcntd 2, 2
19043; PWR9-NEXT:    addi 3, 3, .LCPI153_0@toc@l
19044; PWR9-NEXT:    lxv 35, 0(3)
19045; PWR9-NEXT:    vcmpgtud 2, 3, 2
19046; PWR9-NEXT:    blr
19047  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19048  %3 = icmp ult <2 x i64> %2, <i64 28, i64 28>
19049  %4 = sext <2 x i1> %3 to <2 x i64>
19050  ret <2 x i64> %4
19051}
19052
19053define <2 x i64> @ugt_28_v2i64(<2 x i64> %0) {
19054; PWR5-LABEL: ugt_28_v2i64:
19055; PWR5:       # %bb.0:
19056; PWR5-NEXT:    lis 5, 21845
19057; PWR5-NEXT:    lis 6, 13107
19058; PWR5-NEXT:    ori 5, 5, 21845
19059; PWR5-NEXT:    rotldi 8, 4, 63
19060; PWR5-NEXT:    rotldi 9, 3, 63
19061; PWR5-NEXT:    rldimi 5, 5, 32, 0
19062; PWR5-NEXT:    and 8, 8, 5
19063; PWR5-NEXT:    and 5, 9, 5
19064; PWR5-NEXT:    ori 6, 6, 13107
19065; PWR5-NEXT:    sub 3, 3, 5
19066; PWR5-NEXT:    rldimi 6, 6, 32, 0
19067; PWR5-NEXT:    sub 4, 4, 8
19068; PWR5-NEXT:    and 8, 3, 6
19069; PWR5-NEXT:    rotldi 3, 3, 62
19070; PWR5-NEXT:    and 3, 3, 6
19071; PWR5-NEXT:    lis 7, 3855
19072; PWR5-NEXT:    and 5, 4, 6
19073; PWR5-NEXT:    rotldi 4, 4, 62
19074; PWR5-NEXT:    add 3, 8, 3
19075; PWR5-NEXT:    lis 9, 257
19076; PWR5-NEXT:    ori 7, 7, 3855
19077; PWR5-NEXT:    and 4, 4, 6
19078; PWR5-NEXT:    rldicl 6, 3, 60, 4
19079; PWR5-NEXT:    ori 9, 9, 257
19080; PWR5-NEXT:    rldimi 7, 7, 32, 0
19081; PWR5-NEXT:    add 4, 5, 4
19082; PWR5-NEXT:    add 3, 3, 6
19083; PWR5-NEXT:    rldimi 9, 9, 32, 0
19084; PWR5-NEXT:    rldicl 5, 4, 60, 4
19085; PWR5-NEXT:    and 3, 3, 7
19086; PWR5-NEXT:    add 4, 4, 5
19087; PWR5-NEXT:    mulld 3, 3, 9
19088; PWR5-NEXT:    and 4, 4, 7
19089; PWR5-NEXT:    rldicl 3, 3, 8, 56
19090; PWR5-NEXT:    mulld 4, 4, 9
19091; PWR5-NEXT:    li 5, 28
19092; PWR5-NEXT:    subfic 3, 3, 28
19093; PWR5-NEXT:    rldicl 4, 4, 8, 56
19094; PWR5-NEXT:    subfe 3, 5, 5
19095; PWR5-NEXT:    subfic 4, 4, 28
19096; PWR5-NEXT:    subfe 4, 5, 5
19097; PWR5-NEXT:    blr
19098;
19099; PWR6-LABEL: ugt_28_v2i64:
19100; PWR6:       # %bb.0:
19101; PWR6-NEXT:    lis 5, 21845
19102; PWR6-NEXT:    lis 6, 13107
19103; PWR6-NEXT:    ori 5, 5, 21845
19104; PWR6-NEXT:    rotldi 8, 4, 63
19105; PWR6-NEXT:    rotldi 9, 3, 63
19106; PWR6-NEXT:    rldimi 5, 5, 32, 0
19107; PWR6-NEXT:    and 8, 8, 5
19108; PWR6-NEXT:    and 5, 9, 5
19109; PWR6-NEXT:    ori 6, 6, 13107
19110; PWR6-NEXT:    sub 3, 3, 5
19111; PWR6-NEXT:    rldimi 6, 6, 32, 0
19112; PWR6-NEXT:    sub 4, 4, 8
19113; PWR6-NEXT:    and 8, 3, 6
19114; PWR6-NEXT:    rotldi 3, 3, 62
19115; PWR6-NEXT:    and 3, 3, 6
19116; PWR6-NEXT:    lis 7, 3855
19117; PWR6-NEXT:    and 5, 4, 6
19118; PWR6-NEXT:    rotldi 4, 4, 62
19119; PWR6-NEXT:    add 3, 8, 3
19120; PWR6-NEXT:    lis 9, 257
19121; PWR6-NEXT:    ori 7, 7, 3855
19122; PWR6-NEXT:    and 4, 4, 6
19123; PWR6-NEXT:    rldicl 6, 3, 60, 4
19124; PWR6-NEXT:    ori 9, 9, 257
19125; PWR6-NEXT:    rldimi 7, 7, 32, 0
19126; PWR6-NEXT:    add 4, 5, 4
19127; PWR6-NEXT:    add 3, 3, 6
19128; PWR6-NEXT:    rldimi 9, 9, 32, 0
19129; PWR6-NEXT:    rldicl 5, 4, 60, 4
19130; PWR6-NEXT:    and 3, 3, 7
19131; PWR6-NEXT:    add 4, 4, 5
19132; PWR6-NEXT:    mulld 3, 3, 9
19133; PWR6-NEXT:    and 4, 4, 7
19134; PWR6-NEXT:    rldicl 3, 3, 8, 56
19135; PWR6-NEXT:    mulld 4, 4, 9
19136; PWR6-NEXT:    li 5, 28
19137; PWR6-NEXT:    subfic 3, 3, 28
19138; PWR6-NEXT:    rldicl 4, 4, 8, 56
19139; PWR6-NEXT:    subfe 3, 5, 5
19140; PWR6-NEXT:    subfic 4, 4, 28
19141; PWR6-NEXT:    subfe 4, 5, 5
19142; PWR6-NEXT:    blr
19143;
19144; PWR7-LABEL: ugt_28_v2i64:
19145; PWR7:       # %bb.0:
19146; PWR7-NEXT:    addi 3, 1, -32
19147; PWR7-NEXT:    li 5, -1
19148; PWR7-NEXT:    stxvd2x 34, 0, 3
19149; PWR7-NEXT:    ld 4, -24(1)
19150; PWR7-NEXT:    ld 3, -32(1)
19151; PWR7-NEXT:    popcntd 4, 4
19152; PWR7-NEXT:    popcntd 3, 3
19153; PWR7-NEXT:    cmpldi 4, 28
19154; PWR7-NEXT:    li 4, 0
19155; PWR7-NEXT:    iselgt 6, 5, 4
19156; PWR7-NEXT:    cmpldi 3, 28
19157; PWR7-NEXT:    iselgt 3, 5, 4
19158; PWR7-NEXT:    std 6, -8(1)
19159; PWR7-NEXT:    std 3, -16(1)
19160; PWR7-NEXT:    addi 3, 1, -16
19161; PWR7-NEXT:    lxvd2x 34, 0, 3
19162; PWR7-NEXT:    blr
19163;
19164; PWR8-LABEL: ugt_28_v2i64:
19165; PWR8:       # %bb.0:
19166; PWR8-NEXT:    addis 3, 2, .LCPI154_0@toc@ha
19167; PWR8-NEXT:    vpopcntd 2, 2
19168; PWR8-NEXT:    addi 3, 3, .LCPI154_0@toc@l
19169; PWR8-NEXT:    lxvd2x 35, 0, 3
19170; PWR8-NEXT:    vcmpgtud 2, 2, 3
19171; PWR8-NEXT:    blr
19172;
19173; PWR9-LABEL: ugt_28_v2i64:
19174; PWR9:       # %bb.0:
19175; PWR9-NEXT:    addis 3, 2, .LCPI154_0@toc@ha
19176; PWR9-NEXT:    vpopcntd 2, 2
19177; PWR9-NEXT:    addi 3, 3, .LCPI154_0@toc@l
19178; PWR9-NEXT:    lxv 35, 0(3)
19179; PWR9-NEXT:    vcmpgtud 2, 2, 3
19180; PWR9-NEXT:    blr
19181  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19182  %3 = icmp ugt <2 x i64> %2, <i64 28, i64 28>
19183  %4 = sext <2 x i1> %3 to <2 x i64>
19184  ret <2 x i64> %4
19185}
19186
19187define <2 x i64> @ult_29_v2i64(<2 x i64> %0) {
19188; PWR5-LABEL: ult_29_v2i64:
19189; PWR5:       # %bb.0:
19190; PWR5-NEXT:    lis 5, 21845
19191; PWR5-NEXT:    lis 6, 13107
19192; PWR5-NEXT:    ori 5, 5, 21845
19193; PWR5-NEXT:    rotldi 8, 4, 63
19194; PWR5-NEXT:    rotldi 9, 3, 63
19195; PWR5-NEXT:    rldimi 5, 5, 32, 0
19196; PWR5-NEXT:    and 8, 8, 5
19197; PWR5-NEXT:    and 5, 9, 5
19198; PWR5-NEXT:    ori 6, 6, 13107
19199; PWR5-NEXT:    sub 3, 3, 5
19200; PWR5-NEXT:    rldimi 6, 6, 32, 0
19201; PWR5-NEXT:    sub 4, 4, 8
19202; PWR5-NEXT:    and 8, 3, 6
19203; PWR5-NEXT:    rotldi 3, 3, 62
19204; PWR5-NEXT:    and 3, 3, 6
19205; PWR5-NEXT:    lis 7, 3855
19206; PWR5-NEXT:    and 5, 4, 6
19207; PWR5-NEXT:    rotldi 4, 4, 62
19208; PWR5-NEXT:    add 3, 8, 3
19209; PWR5-NEXT:    lis 9, 257
19210; PWR5-NEXT:    ori 7, 7, 3855
19211; PWR5-NEXT:    and 4, 4, 6
19212; PWR5-NEXT:    rldicl 6, 3, 60, 4
19213; PWR5-NEXT:    ori 9, 9, 257
19214; PWR5-NEXT:    rldimi 7, 7, 32, 0
19215; PWR5-NEXT:    add 4, 5, 4
19216; PWR5-NEXT:    add 3, 3, 6
19217; PWR5-NEXT:    rldimi 9, 9, 32, 0
19218; PWR5-NEXT:    rldicl 5, 4, 60, 4
19219; PWR5-NEXT:    and 3, 3, 7
19220; PWR5-NEXT:    add 4, 4, 5
19221; PWR5-NEXT:    mulld 3, 3, 9
19222; PWR5-NEXT:    and 4, 4, 7
19223; PWR5-NEXT:    rldicl 3, 3, 8, 56
19224; PWR5-NEXT:    li 5, 29
19225; PWR5-NEXT:    mulld 4, 4, 9
19226; PWR5-NEXT:    subc 6, 3, 5
19227; PWR5-NEXT:    rldicl 4, 4, 8, 56
19228; PWR5-NEXT:    subfe 3, 3, 3
19229; PWR5-NEXT:    subc 5, 4, 5
19230; PWR5-NEXT:    subfe 4, 4, 4
19231; PWR5-NEXT:    blr
19232;
19233; PWR6-LABEL: ult_29_v2i64:
19234; PWR6:       # %bb.0:
19235; PWR6-NEXT:    lis 5, 21845
19236; PWR6-NEXT:    lis 6, 13107
19237; PWR6-NEXT:    ori 5, 5, 21845
19238; PWR6-NEXT:    rotldi 8, 4, 63
19239; PWR6-NEXT:    rotldi 9, 3, 63
19240; PWR6-NEXT:    rldimi 5, 5, 32, 0
19241; PWR6-NEXT:    and 8, 8, 5
19242; PWR6-NEXT:    and 5, 9, 5
19243; PWR6-NEXT:    ori 6, 6, 13107
19244; PWR6-NEXT:    sub 3, 3, 5
19245; PWR6-NEXT:    rldimi 6, 6, 32, 0
19246; PWR6-NEXT:    sub 4, 4, 8
19247; PWR6-NEXT:    and 8, 3, 6
19248; PWR6-NEXT:    rotldi 3, 3, 62
19249; PWR6-NEXT:    and 3, 3, 6
19250; PWR6-NEXT:    lis 7, 3855
19251; PWR6-NEXT:    and 5, 4, 6
19252; PWR6-NEXT:    rotldi 4, 4, 62
19253; PWR6-NEXT:    add 3, 8, 3
19254; PWR6-NEXT:    lis 9, 257
19255; PWR6-NEXT:    ori 7, 7, 3855
19256; PWR6-NEXT:    and 4, 4, 6
19257; PWR6-NEXT:    rldicl 6, 3, 60, 4
19258; PWR6-NEXT:    ori 9, 9, 257
19259; PWR6-NEXT:    rldimi 7, 7, 32, 0
19260; PWR6-NEXT:    add 4, 5, 4
19261; PWR6-NEXT:    add 3, 3, 6
19262; PWR6-NEXT:    rldimi 9, 9, 32, 0
19263; PWR6-NEXT:    rldicl 5, 4, 60, 4
19264; PWR6-NEXT:    and 3, 3, 7
19265; PWR6-NEXT:    add 4, 4, 5
19266; PWR6-NEXT:    mulld 3, 3, 9
19267; PWR6-NEXT:    and 4, 4, 7
19268; PWR6-NEXT:    rldicl 3, 3, 8, 56
19269; PWR6-NEXT:    li 5, 29
19270; PWR6-NEXT:    mulld 4, 4, 9
19271; PWR6-NEXT:    subc 6, 3, 5
19272; PWR6-NEXT:    rldicl 4, 4, 8, 56
19273; PWR6-NEXT:    subfe 3, 3, 3
19274; PWR6-NEXT:    subc 5, 4, 5
19275; PWR6-NEXT:    subfe 4, 4, 4
19276; PWR6-NEXT:    blr
19277;
19278; PWR7-LABEL: ult_29_v2i64:
19279; PWR7:       # %bb.0:
19280; PWR7-NEXT:    addi 3, 1, -32
19281; PWR7-NEXT:    li 5, -1
19282; PWR7-NEXT:    stxvd2x 34, 0, 3
19283; PWR7-NEXT:    ld 4, -24(1)
19284; PWR7-NEXT:    ld 3, -32(1)
19285; PWR7-NEXT:    popcntd 4, 4
19286; PWR7-NEXT:    popcntd 3, 3
19287; PWR7-NEXT:    cmpldi 4, 29
19288; PWR7-NEXT:    li 4, 0
19289; PWR7-NEXT:    isellt 6, 5, 4
19290; PWR7-NEXT:    cmpldi 3, 29
19291; PWR7-NEXT:    isellt 3, 5, 4
19292; PWR7-NEXT:    std 6, -8(1)
19293; PWR7-NEXT:    std 3, -16(1)
19294; PWR7-NEXT:    addi 3, 1, -16
19295; PWR7-NEXT:    lxvd2x 34, 0, 3
19296; PWR7-NEXT:    blr
19297;
19298; PWR8-LABEL: ult_29_v2i64:
19299; PWR8:       # %bb.0:
19300; PWR8-NEXT:    addis 3, 2, .LCPI155_0@toc@ha
19301; PWR8-NEXT:    vpopcntd 2, 2
19302; PWR8-NEXT:    addi 3, 3, .LCPI155_0@toc@l
19303; PWR8-NEXT:    lxvd2x 35, 0, 3
19304; PWR8-NEXT:    vcmpgtud 2, 3, 2
19305; PWR8-NEXT:    blr
19306;
19307; PWR9-LABEL: ult_29_v2i64:
19308; PWR9:       # %bb.0:
19309; PWR9-NEXT:    addis 3, 2, .LCPI155_0@toc@ha
19310; PWR9-NEXT:    vpopcntd 2, 2
19311; PWR9-NEXT:    addi 3, 3, .LCPI155_0@toc@l
19312; PWR9-NEXT:    lxv 35, 0(3)
19313; PWR9-NEXT:    vcmpgtud 2, 3, 2
19314; PWR9-NEXT:    blr
19315  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19316  %3 = icmp ult <2 x i64> %2, <i64 29, i64 29>
19317  %4 = sext <2 x i1> %3 to <2 x i64>
19318  ret <2 x i64> %4
19319}
19320
19321define <2 x i64> @ugt_29_v2i64(<2 x i64> %0) {
19322; PWR5-LABEL: ugt_29_v2i64:
19323; PWR5:       # %bb.0:
19324; PWR5-NEXT:    lis 5, 21845
19325; PWR5-NEXT:    lis 6, 13107
19326; PWR5-NEXT:    ori 5, 5, 21845
19327; PWR5-NEXT:    rotldi 8, 4, 63
19328; PWR5-NEXT:    rotldi 9, 3, 63
19329; PWR5-NEXT:    rldimi 5, 5, 32, 0
19330; PWR5-NEXT:    and 8, 8, 5
19331; PWR5-NEXT:    and 5, 9, 5
19332; PWR5-NEXT:    ori 6, 6, 13107
19333; PWR5-NEXT:    sub 3, 3, 5
19334; PWR5-NEXT:    rldimi 6, 6, 32, 0
19335; PWR5-NEXT:    sub 4, 4, 8
19336; PWR5-NEXT:    and 8, 3, 6
19337; PWR5-NEXT:    rotldi 3, 3, 62
19338; PWR5-NEXT:    and 3, 3, 6
19339; PWR5-NEXT:    lis 7, 3855
19340; PWR5-NEXT:    and 5, 4, 6
19341; PWR5-NEXT:    rotldi 4, 4, 62
19342; PWR5-NEXT:    add 3, 8, 3
19343; PWR5-NEXT:    lis 9, 257
19344; PWR5-NEXT:    ori 7, 7, 3855
19345; PWR5-NEXT:    and 4, 4, 6
19346; PWR5-NEXT:    rldicl 6, 3, 60, 4
19347; PWR5-NEXT:    ori 9, 9, 257
19348; PWR5-NEXT:    rldimi 7, 7, 32, 0
19349; PWR5-NEXT:    add 4, 5, 4
19350; PWR5-NEXT:    add 3, 3, 6
19351; PWR5-NEXT:    rldimi 9, 9, 32, 0
19352; PWR5-NEXT:    rldicl 5, 4, 60, 4
19353; PWR5-NEXT:    and 3, 3, 7
19354; PWR5-NEXT:    add 4, 4, 5
19355; PWR5-NEXT:    mulld 3, 3, 9
19356; PWR5-NEXT:    and 4, 4, 7
19357; PWR5-NEXT:    rldicl 3, 3, 8, 56
19358; PWR5-NEXT:    mulld 4, 4, 9
19359; PWR5-NEXT:    li 5, 29
19360; PWR5-NEXT:    subfic 3, 3, 29
19361; PWR5-NEXT:    rldicl 4, 4, 8, 56
19362; PWR5-NEXT:    subfe 3, 5, 5
19363; PWR5-NEXT:    subfic 4, 4, 29
19364; PWR5-NEXT:    subfe 4, 5, 5
19365; PWR5-NEXT:    blr
19366;
19367; PWR6-LABEL: ugt_29_v2i64:
19368; PWR6:       # %bb.0:
19369; PWR6-NEXT:    lis 5, 21845
19370; PWR6-NEXT:    lis 6, 13107
19371; PWR6-NEXT:    ori 5, 5, 21845
19372; PWR6-NEXT:    rotldi 8, 4, 63
19373; PWR6-NEXT:    rotldi 9, 3, 63
19374; PWR6-NEXT:    rldimi 5, 5, 32, 0
19375; PWR6-NEXT:    and 8, 8, 5
19376; PWR6-NEXT:    and 5, 9, 5
19377; PWR6-NEXT:    ori 6, 6, 13107
19378; PWR6-NEXT:    sub 3, 3, 5
19379; PWR6-NEXT:    rldimi 6, 6, 32, 0
19380; PWR6-NEXT:    sub 4, 4, 8
19381; PWR6-NEXT:    and 8, 3, 6
19382; PWR6-NEXT:    rotldi 3, 3, 62
19383; PWR6-NEXT:    and 3, 3, 6
19384; PWR6-NEXT:    lis 7, 3855
19385; PWR6-NEXT:    and 5, 4, 6
19386; PWR6-NEXT:    rotldi 4, 4, 62
19387; PWR6-NEXT:    add 3, 8, 3
19388; PWR6-NEXT:    lis 9, 257
19389; PWR6-NEXT:    ori 7, 7, 3855
19390; PWR6-NEXT:    and 4, 4, 6
19391; PWR6-NEXT:    rldicl 6, 3, 60, 4
19392; PWR6-NEXT:    ori 9, 9, 257
19393; PWR6-NEXT:    rldimi 7, 7, 32, 0
19394; PWR6-NEXT:    add 4, 5, 4
19395; PWR6-NEXT:    add 3, 3, 6
19396; PWR6-NEXT:    rldimi 9, 9, 32, 0
19397; PWR6-NEXT:    rldicl 5, 4, 60, 4
19398; PWR6-NEXT:    and 3, 3, 7
19399; PWR6-NEXT:    add 4, 4, 5
19400; PWR6-NEXT:    mulld 3, 3, 9
19401; PWR6-NEXT:    and 4, 4, 7
19402; PWR6-NEXT:    rldicl 3, 3, 8, 56
19403; PWR6-NEXT:    mulld 4, 4, 9
19404; PWR6-NEXT:    li 5, 29
19405; PWR6-NEXT:    subfic 3, 3, 29
19406; PWR6-NEXT:    rldicl 4, 4, 8, 56
19407; PWR6-NEXT:    subfe 3, 5, 5
19408; PWR6-NEXT:    subfic 4, 4, 29
19409; PWR6-NEXT:    subfe 4, 5, 5
19410; PWR6-NEXT:    blr
19411;
19412; PWR7-LABEL: ugt_29_v2i64:
19413; PWR7:       # %bb.0:
19414; PWR7-NEXT:    addi 3, 1, -32
19415; PWR7-NEXT:    li 5, -1
19416; PWR7-NEXT:    stxvd2x 34, 0, 3
19417; PWR7-NEXT:    ld 4, -24(1)
19418; PWR7-NEXT:    ld 3, -32(1)
19419; PWR7-NEXT:    popcntd 4, 4
19420; PWR7-NEXT:    popcntd 3, 3
19421; PWR7-NEXT:    cmpldi 4, 29
19422; PWR7-NEXT:    li 4, 0
19423; PWR7-NEXT:    iselgt 6, 5, 4
19424; PWR7-NEXT:    cmpldi 3, 29
19425; PWR7-NEXT:    iselgt 3, 5, 4
19426; PWR7-NEXT:    std 6, -8(1)
19427; PWR7-NEXT:    std 3, -16(1)
19428; PWR7-NEXT:    addi 3, 1, -16
19429; PWR7-NEXT:    lxvd2x 34, 0, 3
19430; PWR7-NEXT:    blr
19431;
19432; PWR8-LABEL: ugt_29_v2i64:
19433; PWR8:       # %bb.0:
19434; PWR8-NEXT:    addis 3, 2, .LCPI156_0@toc@ha
19435; PWR8-NEXT:    vpopcntd 2, 2
19436; PWR8-NEXT:    addi 3, 3, .LCPI156_0@toc@l
19437; PWR8-NEXT:    lxvd2x 35, 0, 3
19438; PWR8-NEXT:    vcmpgtud 2, 2, 3
19439; PWR8-NEXT:    blr
19440;
19441; PWR9-LABEL: ugt_29_v2i64:
19442; PWR9:       # %bb.0:
19443; PWR9-NEXT:    addis 3, 2, .LCPI156_0@toc@ha
19444; PWR9-NEXT:    vpopcntd 2, 2
19445; PWR9-NEXT:    addi 3, 3, .LCPI156_0@toc@l
19446; PWR9-NEXT:    lxv 35, 0(3)
19447; PWR9-NEXT:    vcmpgtud 2, 2, 3
19448; PWR9-NEXT:    blr
19449  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19450  %3 = icmp ugt <2 x i64> %2, <i64 29, i64 29>
19451  %4 = sext <2 x i1> %3 to <2 x i64>
19452  ret <2 x i64> %4
19453}
19454
19455define <2 x i64> @ult_30_v2i64(<2 x i64> %0) {
19456; PWR5-LABEL: ult_30_v2i64:
19457; PWR5:       # %bb.0:
19458; PWR5-NEXT:    lis 5, 21845
19459; PWR5-NEXT:    lis 6, 13107
19460; PWR5-NEXT:    ori 5, 5, 21845
19461; PWR5-NEXT:    rotldi 8, 4, 63
19462; PWR5-NEXT:    rotldi 9, 3, 63
19463; PWR5-NEXT:    rldimi 5, 5, 32, 0
19464; PWR5-NEXT:    and 8, 8, 5
19465; PWR5-NEXT:    and 5, 9, 5
19466; PWR5-NEXT:    ori 6, 6, 13107
19467; PWR5-NEXT:    sub 3, 3, 5
19468; PWR5-NEXT:    rldimi 6, 6, 32, 0
19469; PWR5-NEXT:    sub 4, 4, 8
19470; PWR5-NEXT:    and 8, 3, 6
19471; PWR5-NEXT:    rotldi 3, 3, 62
19472; PWR5-NEXT:    and 3, 3, 6
19473; PWR5-NEXT:    lis 7, 3855
19474; PWR5-NEXT:    and 5, 4, 6
19475; PWR5-NEXT:    rotldi 4, 4, 62
19476; PWR5-NEXT:    add 3, 8, 3
19477; PWR5-NEXT:    lis 9, 257
19478; PWR5-NEXT:    ori 7, 7, 3855
19479; PWR5-NEXT:    and 4, 4, 6
19480; PWR5-NEXT:    rldicl 6, 3, 60, 4
19481; PWR5-NEXT:    ori 9, 9, 257
19482; PWR5-NEXT:    rldimi 7, 7, 32, 0
19483; PWR5-NEXT:    add 4, 5, 4
19484; PWR5-NEXT:    add 3, 3, 6
19485; PWR5-NEXT:    rldimi 9, 9, 32, 0
19486; PWR5-NEXT:    rldicl 5, 4, 60, 4
19487; PWR5-NEXT:    and 3, 3, 7
19488; PWR5-NEXT:    add 4, 4, 5
19489; PWR5-NEXT:    mulld 3, 3, 9
19490; PWR5-NEXT:    and 4, 4, 7
19491; PWR5-NEXT:    rldicl 3, 3, 8, 56
19492; PWR5-NEXT:    li 5, 30
19493; PWR5-NEXT:    mulld 4, 4, 9
19494; PWR5-NEXT:    subc 6, 3, 5
19495; PWR5-NEXT:    rldicl 4, 4, 8, 56
19496; PWR5-NEXT:    subfe 3, 3, 3
19497; PWR5-NEXT:    subc 5, 4, 5
19498; PWR5-NEXT:    subfe 4, 4, 4
19499; PWR5-NEXT:    blr
19500;
19501; PWR6-LABEL: ult_30_v2i64:
19502; PWR6:       # %bb.0:
19503; PWR6-NEXT:    lis 5, 21845
19504; PWR6-NEXT:    lis 6, 13107
19505; PWR6-NEXT:    ori 5, 5, 21845
19506; PWR6-NEXT:    rotldi 8, 4, 63
19507; PWR6-NEXT:    rotldi 9, 3, 63
19508; PWR6-NEXT:    rldimi 5, 5, 32, 0
19509; PWR6-NEXT:    and 8, 8, 5
19510; PWR6-NEXT:    and 5, 9, 5
19511; PWR6-NEXT:    ori 6, 6, 13107
19512; PWR6-NEXT:    sub 3, 3, 5
19513; PWR6-NEXT:    rldimi 6, 6, 32, 0
19514; PWR6-NEXT:    sub 4, 4, 8
19515; PWR6-NEXT:    and 8, 3, 6
19516; PWR6-NEXT:    rotldi 3, 3, 62
19517; PWR6-NEXT:    and 3, 3, 6
19518; PWR6-NEXT:    lis 7, 3855
19519; PWR6-NEXT:    and 5, 4, 6
19520; PWR6-NEXT:    rotldi 4, 4, 62
19521; PWR6-NEXT:    add 3, 8, 3
19522; PWR6-NEXT:    lis 9, 257
19523; PWR6-NEXT:    ori 7, 7, 3855
19524; PWR6-NEXT:    and 4, 4, 6
19525; PWR6-NEXT:    rldicl 6, 3, 60, 4
19526; PWR6-NEXT:    ori 9, 9, 257
19527; PWR6-NEXT:    rldimi 7, 7, 32, 0
19528; PWR6-NEXT:    add 4, 5, 4
19529; PWR6-NEXT:    add 3, 3, 6
19530; PWR6-NEXT:    rldimi 9, 9, 32, 0
19531; PWR6-NEXT:    rldicl 5, 4, 60, 4
19532; PWR6-NEXT:    and 3, 3, 7
19533; PWR6-NEXT:    add 4, 4, 5
19534; PWR6-NEXT:    mulld 3, 3, 9
19535; PWR6-NEXT:    and 4, 4, 7
19536; PWR6-NEXT:    rldicl 3, 3, 8, 56
19537; PWR6-NEXT:    li 5, 30
19538; PWR6-NEXT:    mulld 4, 4, 9
19539; PWR6-NEXT:    subc 6, 3, 5
19540; PWR6-NEXT:    rldicl 4, 4, 8, 56
19541; PWR6-NEXT:    subfe 3, 3, 3
19542; PWR6-NEXT:    subc 5, 4, 5
19543; PWR6-NEXT:    subfe 4, 4, 4
19544; PWR6-NEXT:    blr
19545;
19546; PWR7-LABEL: ult_30_v2i64:
19547; PWR7:       # %bb.0:
19548; PWR7-NEXT:    addi 3, 1, -32
19549; PWR7-NEXT:    li 5, -1
19550; PWR7-NEXT:    stxvd2x 34, 0, 3
19551; PWR7-NEXT:    ld 4, -24(1)
19552; PWR7-NEXT:    ld 3, -32(1)
19553; PWR7-NEXT:    popcntd 4, 4
19554; PWR7-NEXT:    popcntd 3, 3
19555; PWR7-NEXT:    cmpldi 4, 30
19556; PWR7-NEXT:    li 4, 0
19557; PWR7-NEXT:    isellt 6, 5, 4
19558; PWR7-NEXT:    cmpldi 3, 30
19559; PWR7-NEXT:    isellt 3, 5, 4
19560; PWR7-NEXT:    std 6, -8(1)
19561; PWR7-NEXT:    std 3, -16(1)
19562; PWR7-NEXT:    addi 3, 1, -16
19563; PWR7-NEXT:    lxvd2x 34, 0, 3
19564; PWR7-NEXT:    blr
19565;
19566; PWR8-LABEL: ult_30_v2i64:
19567; PWR8:       # %bb.0:
19568; PWR8-NEXT:    addis 3, 2, .LCPI157_0@toc@ha
19569; PWR8-NEXT:    vpopcntd 2, 2
19570; PWR8-NEXT:    addi 3, 3, .LCPI157_0@toc@l
19571; PWR8-NEXT:    lxvd2x 35, 0, 3
19572; PWR8-NEXT:    vcmpgtud 2, 3, 2
19573; PWR8-NEXT:    blr
19574;
19575; PWR9-LABEL: ult_30_v2i64:
19576; PWR9:       # %bb.0:
19577; PWR9-NEXT:    addis 3, 2, .LCPI157_0@toc@ha
19578; PWR9-NEXT:    vpopcntd 2, 2
19579; PWR9-NEXT:    addi 3, 3, .LCPI157_0@toc@l
19580; PWR9-NEXT:    lxv 35, 0(3)
19581; PWR9-NEXT:    vcmpgtud 2, 3, 2
19582; PWR9-NEXT:    blr
19583  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19584  %3 = icmp ult <2 x i64> %2, <i64 30, i64 30>
19585  %4 = sext <2 x i1> %3 to <2 x i64>
19586  ret <2 x i64> %4
19587}
19588
19589define <2 x i64> @ugt_30_v2i64(<2 x i64> %0) {
19590; PWR5-LABEL: ugt_30_v2i64:
19591; PWR5:       # %bb.0:
19592; PWR5-NEXT:    lis 5, 21845
19593; PWR5-NEXT:    lis 6, 13107
19594; PWR5-NEXT:    ori 5, 5, 21845
19595; PWR5-NEXT:    rotldi 8, 4, 63
19596; PWR5-NEXT:    rotldi 9, 3, 63
19597; PWR5-NEXT:    rldimi 5, 5, 32, 0
19598; PWR5-NEXT:    and 8, 8, 5
19599; PWR5-NEXT:    and 5, 9, 5
19600; PWR5-NEXT:    ori 6, 6, 13107
19601; PWR5-NEXT:    sub 3, 3, 5
19602; PWR5-NEXT:    rldimi 6, 6, 32, 0
19603; PWR5-NEXT:    sub 4, 4, 8
19604; PWR5-NEXT:    and 8, 3, 6
19605; PWR5-NEXT:    rotldi 3, 3, 62
19606; PWR5-NEXT:    and 3, 3, 6
19607; PWR5-NEXT:    lis 7, 3855
19608; PWR5-NEXT:    and 5, 4, 6
19609; PWR5-NEXT:    rotldi 4, 4, 62
19610; PWR5-NEXT:    add 3, 8, 3
19611; PWR5-NEXT:    lis 9, 257
19612; PWR5-NEXT:    ori 7, 7, 3855
19613; PWR5-NEXT:    and 4, 4, 6
19614; PWR5-NEXT:    rldicl 6, 3, 60, 4
19615; PWR5-NEXT:    ori 9, 9, 257
19616; PWR5-NEXT:    rldimi 7, 7, 32, 0
19617; PWR5-NEXT:    add 4, 5, 4
19618; PWR5-NEXT:    add 3, 3, 6
19619; PWR5-NEXT:    rldimi 9, 9, 32, 0
19620; PWR5-NEXT:    rldicl 5, 4, 60, 4
19621; PWR5-NEXT:    and 3, 3, 7
19622; PWR5-NEXT:    add 4, 4, 5
19623; PWR5-NEXT:    mulld 3, 3, 9
19624; PWR5-NEXT:    and 4, 4, 7
19625; PWR5-NEXT:    rldicl 3, 3, 8, 56
19626; PWR5-NEXT:    mulld 4, 4, 9
19627; PWR5-NEXT:    li 5, 30
19628; PWR5-NEXT:    subfic 3, 3, 30
19629; PWR5-NEXT:    rldicl 4, 4, 8, 56
19630; PWR5-NEXT:    subfe 3, 5, 5
19631; PWR5-NEXT:    subfic 4, 4, 30
19632; PWR5-NEXT:    subfe 4, 5, 5
19633; PWR5-NEXT:    blr
19634;
19635; PWR6-LABEL: ugt_30_v2i64:
19636; PWR6:       # %bb.0:
19637; PWR6-NEXT:    lis 5, 21845
19638; PWR6-NEXT:    lis 6, 13107
19639; PWR6-NEXT:    ori 5, 5, 21845
19640; PWR6-NEXT:    rotldi 8, 4, 63
19641; PWR6-NEXT:    rotldi 9, 3, 63
19642; PWR6-NEXT:    rldimi 5, 5, 32, 0
19643; PWR6-NEXT:    and 8, 8, 5
19644; PWR6-NEXT:    and 5, 9, 5
19645; PWR6-NEXT:    ori 6, 6, 13107
19646; PWR6-NEXT:    sub 3, 3, 5
19647; PWR6-NEXT:    rldimi 6, 6, 32, 0
19648; PWR6-NEXT:    sub 4, 4, 8
19649; PWR6-NEXT:    and 8, 3, 6
19650; PWR6-NEXT:    rotldi 3, 3, 62
19651; PWR6-NEXT:    and 3, 3, 6
19652; PWR6-NEXT:    lis 7, 3855
19653; PWR6-NEXT:    and 5, 4, 6
19654; PWR6-NEXT:    rotldi 4, 4, 62
19655; PWR6-NEXT:    add 3, 8, 3
19656; PWR6-NEXT:    lis 9, 257
19657; PWR6-NEXT:    ori 7, 7, 3855
19658; PWR6-NEXT:    and 4, 4, 6
19659; PWR6-NEXT:    rldicl 6, 3, 60, 4
19660; PWR6-NEXT:    ori 9, 9, 257
19661; PWR6-NEXT:    rldimi 7, 7, 32, 0
19662; PWR6-NEXT:    add 4, 5, 4
19663; PWR6-NEXT:    add 3, 3, 6
19664; PWR6-NEXT:    rldimi 9, 9, 32, 0
19665; PWR6-NEXT:    rldicl 5, 4, 60, 4
19666; PWR6-NEXT:    and 3, 3, 7
19667; PWR6-NEXT:    add 4, 4, 5
19668; PWR6-NEXT:    mulld 3, 3, 9
19669; PWR6-NEXT:    and 4, 4, 7
19670; PWR6-NEXT:    rldicl 3, 3, 8, 56
19671; PWR6-NEXT:    mulld 4, 4, 9
19672; PWR6-NEXT:    li 5, 30
19673; PWR6-NEXT:    subfic 3, 3, 30
19674; PWR6-NEXT:    rldicl 4, 4, 8, 56
19675; PWR6-NEXT:    subfe 3, 5, 5
19676; PWR6-NEXT:    subfic 4, 4, 30
19677; PWR6-NEXT:    subfe 4, 5, 5
19678; PWR6-NEXT:    blr
19679;
19680; PWR7-LABEL: ugt_30_v2i64:
19681; PWR7:       # %bb.0:
19682; PWR7-NEXT:    addi 3, 1, -32
19683; PWR7-NEXT:    li 5, -1
19684; PWR7-NEXT:    stxvd2x 34, 0, 3
19685; PWR7-NEXT:    ld 4, -24(1)
19686; PWR7-NEXT:    ld 3, -32(1)
19687; PWR7-NEXT:    popcntd 4, 4
19688; PWR7-NEXT:    popcntd 3, 3
19689; PWR7-NEXT:    cmpldi 4, 30
19690; PWR7-NEXT:    li 4, 0
19691; PWR7-NEXT:    iselgt 6, 5, 4
19692; PWR7-NEXT:    cmpldi 3, 30
19693; PWR7-NEXT:    iselgt 3, 5, 4
19694; PWR7-NEXT:    std 6, -8(1)
19695; PWR7-NEXT:    std 3, -16(1)
19696; PWR7-NEXT:    addi 3, 1, -16
19697; PWR7-NEXT:    lxvd2x 34, 0, 3
19698; PWR7-NEXT:    blr
19699;
19700; PWR8-LABEL: ugt_30_v2i64:
19701; PWR8:       # %bb.0:
19702; PWR8-NEXT:    addis 3, 2, .LCPI158_0@toc@ha
19703; PWR8-NEXT:    vpopcntd 2, 2
19704; PWR8-NEXT:    addi 3, 3, .LCPI158_0@toc@l
19705; PWR8-NEXT:    lxvd2x 35, 0, 3
19706; PWR8-NEXT:    vcmpgtud 2, 2, 3
19707; PWR8-NEXT:    blr
19708;
19709; PWR9-LABEL: ugt_30_v2i64:
19710; PWR9:       # %bb.0:
19711; PWR9-NEXT:    addis 3, 2, .LCPI158_0@toc@ha
19712; PWR9-NEXT:    vpopcntd 2, 2
19713; PWR9-NEXT:    addi 3, 3, .LCPI158_0@toc@l
19714; PWR9-NEXT:    lxv 35, 0(3)
19715; PWR9-NEXT:    vcmpgtud 2, 2, 3
19716; PWR9-NEXT:    blr
19717  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19718  %3 = icmp ugt <2 x i64> %2, <i64 30, i64 30>
19719  %4 = sext <2 x i1> %3 to <2 x i64>
19720  ret <2 x i64> %4
19721}
19722
19723define <2 x i64> @ult_31_v2i64(<2 x i64> %0) {
19724; PWR5-LABEL: ult_31_v2i64:
19725; PWR5:       # %bb.0:
19726; PWR5-NEXT:    lis 5, 21845
19727; PWR5-NEXT:    lis 6, 13107
19728; PWR5-NEXT:    ori 5, 5, 21845
19729; PWR5-NEXT:    rotldi 8, 4, 63
19730; PWR5-NEXT:    rotldi 9, 3, 63
19731; PWR5-NEXT:    rldimi 5, 5, 32, 0
19732; PWR5-NEXT:    and 8, 8, 5
19733; PWR5-NEXT:    and 5, 9, 5
19734; PWR5-NEXT:    ori 6, 6, 13107
19735; PWR5-NEXT:    sub 3, 3, 5
19736; PWR5-NEXT:    rldimi 6, 6, 32, 0
19737; PWR5-NEXT:    sub 4, 4, 8
19738; PWR5-NEXT:    and 8, 3, 6
19739; PWR5-NEXT:    rotldi 3, 3, 62
19740; PWR5-NEXT:    and 3, 3, 6
19741; PWR5-NEXT:    lis 7, 3855
19742; PWR5-NEXT:    and 5, 4, 6
19743; PWR5-NEXT:    rotldi 4, 4, 62
19744; PWR5-NEXT:    add 3, 8, 3
19745; PWR5-NEXT:    lis 9, 257
19746; PWR5-NEXT:    ori 7, 7, 3855
19747; PWR5-NEXT:    and 4, 4, 6
19748; PWR5-NEXT:    rldicl 6, 3, 60, 4
19749; PWR5-NEXT:    ori 9, 9, 257
19750; PWR5-NEXT:    rldimi 7, 7, 32, 0
19751; PWR5-NEXT:    add 4, 5, 4
19752; PWR5-NEXT:    add 3, 3, 6
19753; PWR5-NEXT:    rldimi 9, 9, 32, 0
19754; PWR5-NEXT:    rldicl 5, 4, 60, 4
19755; PWR5-NEXT:    and 3, 3, 7
19756; PWR5-NEXT:    add 4, 4, 5
19757; PWR5-NEXT:    mulld 3, 3, 9
19758; PWR5-NEXT:    and 4, 4, 7
19759; PWR5-NEXT:    rldicl 3, 3, 8, 56
19760; PWR5-NEXT:    li 5, 31
19761; PWR5-NEXT:    mulld 4, 4, 9
19762; PWR5-NEXT:    subc 6, 3, 5
19763; PWR5-NEXT:    rldicl 4, 4, 8, 56
19764; PWR5-NEXT:    subfe 3, 3, 3
19765; PWR5-NEXT:    subc 5, 4, 5
19766; PWR5-NEXT:    subfe 4, 4, 4
19767; PWR5-NEXT:    blr
19768;
19769; PWR6-LABEL: ult_31_v2i64:
19770; PWR6:       # %bb.0:
19771; PWR6-NEXT:    lis 5, 21845
19772; PWR6-NEXT:    lis 6, 13107
19773; PWR6-NEXT:    ori 5, 5, 21845
19774; PWR6-NEXT:    rotldi 8, 4, 63
19775; PWR6-NEXT:    rotldi 9, 3, 63
19776; PWR6-NEXT:    rldimi 5, 5, 32, 0
19777; PWR6-NEXT:    and 8, 8, 5
19778; PWR6-NEXT:    and 5, 9, 5
19779; PWR6-NEXT:    ori 6, 6, 13107
19780; PWR6-NEXT:    sub 3, 3, 5
19781; PWR6-NEXT:    rldimi 6, 6, 32, 0
19782; PWR6-NEXT:    sub 4, 4, 8
19783; PWR6-NEXT:    and 8, 3, 6
19784; PWR6-NEXT:    rotldi 3, 3, 62
19785; PWR6-NEXT:    and 3, 3, 6
19786; PWR6-NEXT:    lis 7, 3855
19787; PWR6-NEXT:    and 5, 4, 6
19788; PWR6-NEXT:    rotldi 4, 4, 62
19789; PWR6-NEXT:    add 3, 8, 3
19790; PWR6-NEXT:    lis 9, 257
19791; PWR6-NEXT:    ori 7, 7, 3855
19792; PWR6-NEXT:    and 4, 4, 6
19793; PWR6-NEXT:    rldicl 6, 3, 60, 4
19794; PWR6-NEXT:    ori 9, 9, 257
19795; PWR6-NEXT:    rldimi 7, 7, 32, 0
19796; PWR6-NEXT:    add 4, 5, 4
19797; PWR6-NEXT:    add 3, 3, 6
19798; PWR6-NEXT:    rldimi 9, 9, 32, 0
19799; PWR6-NEXT:    rldicl 5, 4, 60, 4
19800; PWR6-NEXT:    and 3, 3, 7
19801; PWR6-NEXT:    add 4, 4, 5
19802; PWR6-NEXT:    mulld 3, 3, 9
19803; PWR6-NEXT:    and 4, 4, 7
19804; PWR6-NEXT:    rldicl 3, 3, 8, 56
19805; PWR6-NEXT:    li 5, 31
19806; PWR6-NEXT:    mulld 4, 4, 9
19807; PWR6-NEXT:    subc 6, 3, 5
19808; PWR6-NEXT:    rldicl 4, 4, 8, 56
19809; PWR6-NEXT:    subfe 3, 3, 3
19810; PWR6-NEXT:    subc 5, 4, 5
19811; PWR6-NEXT:    subfe 4, 4, 4
19812; PWR6-NEXT:    blr
19813;
19814; PWR7-LABEL: ult_31_v2i64:
19815; PWR7:       # %bb.0:
19816; PWR7-NEXT:    addi 3, 1, -32
19817; PWR7-NEXT:    li 5, -1
19818; PWR7-NEXT:    stxvd2x 34, 0, 3
19819; PWR7-NEXT:    ld 4, -24(1)
19820; PWR7-NEXT:    ld 3, -32(1)
19821; PWR7-NEXT:    popcntd 4, 4
19822; PWR7-NEXT:    popcntd 3, 3
19823; PWR7-NEXT:    cmpldi 4, 31
19824; PWR7-NEXT:    li 4, 0
19825; PWR7-NEXT:    isellt 6, 5, 4
19826; PWR7-NEXT:    cmpldi 3, 31
19827; PWR7-NEXT:    isellt 3, 5, 4
19828; PWR7-NEXT:    std 6, -8(1)
19829; PWR7-NEXT:    std 3, -16(1)
19830; PWR7-NEXT:    addi 3, 1, -16
19831; PWR7-NEXT:    lxvd2x 34, 0, 3
19832; PWR7-NEXT:    blr
19833;
19834; PWR8-LABEL: ult_31_v2i64:
19835; PWR8:       # %bb.0:
19836; PWR8-NEXT:    addis 3, 2, .LCPI159_0@toc@ha
19837; PWR8-NEXT:    vpopcntd 2, 2
19838; PWR8-NEXT:    addi 3, 3, .LCPI159_0@toc@l
19839; PWR8-NEXT:    lxvd2x 35, 0, 3
19840; PWR8-NEXT:    vcmpgtud 2, 3, 2
19841; PWR8-NEXT:    blr
19842;
19843; PWR9-LABEL: ult_31_v2i64:
19844; PWR9:       # %bb.0:
19845; PWR9-NEXT:    addis 3, 2, .LCPI159_0@toc@ha
19846; PWR9-NEXT:    vpopcntd 2, 2
19847; PWR9-NEXT:    addi 3, 3, .LCPI159_0@toc@l
19848; PWR9-NEXT:    lxv 35, 0(3)
19849; PWR9-NEXT:    vcmpgtud 2, 3, 2
19850; PWR9-NEXT:    blr
19851  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19852  %3 = icmp ult <2 x i64> %2, <i64 31, i64 31>
19853  %4 = sext <2 x i1> %3 to <2 x i64>
19854  ret <2 x i64> %4
19855}
19856
19857define <2 x i64> @ugt_31_v2i64(<2 x i64> %0) {
19858; PWR5-LABEL: ugt_31_v2i64:
19859; PWR5:       # %bb.0:
19860; PWR5-NEXT:    lis 5, 21845
19861; PWR5-NEXT:    lis 6, 13107
19862; PWR5-NEXT:    ori 5, 5, 21845
19863; PWR5-NEXT:    rotldi 8, 4, 63
19864; PWR5-NEXT:    rotldi 9, 3, 63
19865; PWR5-NEXT:    rldimi 5, 5, 32, 0
19866; PWR5-NEXT:    and 8, 8, 5
19867; PWR5-NEXT:    and 5, 9, 5
19868; PWR5-NEXT:    ori 6, 6, 13107
19869; PWR5-NEXT:    sub 3, 3, 5
19870; PWR5-NEXT:    rldimi 6, 6, 32, 0
19871; PWR5-NEXT:    sub 4, 4, 8
19872; PWR5-NEXT:    and 8, 3, 6
19873; PWR5-NEXT:    rotldi 3, 3, 62
19874; PWR5-NEXT:    and 3, 3, 6
19875; PWR5-NEXT:    lis 7, 3855
19876; PWR5-NEXT:    and 5, 4, 6
19877; PWR5-NEXT:    rotldi 4, 4, 62
19878; PWR5-NEXT:    add 3, 8, 3
19879; PWR5-NEXT:    lis 9, 257
19880; PWR5-NEXT:    ori 7, 7, 3855
19881; PWR5-NEXT:    and 4, 4, 6
19882; PWR5-NEXT:    rldicl 6, 3, 60, 4
19883; PWR5-NEXT:    ori 9, 9, 257
19884; PWR5-NEXT:    rldimi 7, 7, 32, 0
19885; PWR5-NEXT:    add 4, 5, 4
19886; PWR5-NEXT:    add 3, 3, 6
19887; PWR5-NEXT:    rldimi 9, 9, 32, 0
19888; PWR5-NEXT:    rldicl 5, 4, 60, 4
19889; PWR5-NEXT:    and 3, 3, 7
19890; PWR5-NEXT:    add 4, 4, 5
19891; PWR5-NEXT:    mulld 3, 3, 9
19892; PWR5-NEXT:    and 4, 4, 7
19893; PWR5-NEXT:    rldicl 3, 3, 8, 56
19894; PWR5-NEXT:    mulld 4, 4, 9
19895; PWR5-NEXT:    li 5, 31
19896; PWR5-NEXT:    subfic 3, 3, 31
19897; PWR5-NEXT:    rldicl 4, 4, 8, 56
19898; PWR5-NEXT:    subfe 3, 5, 5
19899; PWR5-NEXT:    subfic 4, 4, 31
19900; PWR5-NEXT:    subfe 4, 5, 5
19901; PWR5-NEXT:    blr
19902;
19903; PWR6-LABEL: ugt_31_v2i64:
19904; PWR6:       # %bb.0:
19905; PWR6-NEXT:    lis 5, 21845
19906; PWR6-NEXT:    lis 6, 13107
19907; PWR6-NEXT:    ori 5, 5, 21845
19908; PWR6-NEXT:    rotldi 8, 4, 63
19909; PWR6-NEXT:    rotldi 9, 3, 63
19910; PWR6-NEXT:    rldimi 5, 5, 32, 0
19911; PWR6-NEXT:    and 8, 8, 5
19912; PWR6-NEXT:    and 5, 9, 5
19913; PWR6-NEXT:    ori 6, 6, 13107
19914; PWR6-NEXT:    sub 3, 3, 5
19915; PWR6-NEXT:    rldimi 6, 6, 32, 0
19916; PWR6-NEXT:    sub 4, 4, 8
19917; PWR6-NEXT:    and 8, 3, 6
19918; PWR6-NEXT:    rotldi 3, 3, 62
19919; PWR6-NEXT:    and 3, 3, 6
19920; PWR6-NEXT:    lis 7, 3855
19921; PWR6-NEXT:    and 5, 4, 6
19922; PWR6-NEXT:    rotldi 4, 4, 62
19923; PWR6-NEXT:    add 3, 8, 3
19924; PWR6-NEXT:    lis 9, 257
19925; PWR6-NEXT:    ori 7, 7, 3855
19926; PWR6-NEXT:    and 4, 4, 6
19927; PWR6-NEXT:    rldicl 6, 3, 60, 4
19928; PWR6-NEXT:    ori 9, 9, 257
19929; PWR6-NEXT:    rldimi 7, 7, 32, 0
19930; PWR6-NEXT:    add 4, 5, 4
19931; PWR6-NEXT:    add 3, 3, 6
19932; PWR6-NEXT:    rldimi 9, 9, 32, 0
19933; PWR6-NEXT:    rldicl 5, 4, 60, 4
19934; PWR6-NEXT:    and 3, 3, 7
19935; PWR6-NEXT:    add 4, 4, 5
19936; PWR6-NEXT:    mulld 3, 3, 9
19937; PWR6-NEXT:    and 4, 4, 7
19938; PWR6-NEXT:    rldicl 3, 3, 8, 56
19939; PWR6-NEXT:    mulld 4, 4, 9
19940; PWR6-NEXT:    li 5, 31
19941; PWR6-NEXT:    subfic 3, 3, 31
19942; PWR6-NEXT:    rldicl 4, 4, 8, 56
19943; PWR6-NEXT:    subfe 3, 5, 5
19944; PWR6-NEXT:    subfic 4, 4, 31
19945; PWR6-NEXT:    subfe 4, 5, 5
19946; PWR6-NEXT:    blr
19947;
19948; PWR7-LABEL: ugt_31_v2i64:
19949; PWR7:       # %bb.0:
19950; PWR7-NEXT:    addi 3, 1, -32
19951; PWR7-NEXT:    li 5, -1
19952; PWR7-NEXT:    stxvd2x 34, 0, 3
19953; PWR7-NEXT:    ld 4, -24(1)
19954; PWR7-NEXT:    ld 3, -32(1)
19955; PWR7-NEXT:    popcntd 4, 4
19956; PWR7-NEXT:    popcntd 3, 3
19957; PWR7-NEXT:    cmpldi 4, 31
19958; PWR7-NEXT:    li 4, 0
19959; PWR7-NEXT:    iselgt 6, 5, 4
19960; PWR7-NEXT:    cmpldi 3, 31
19961; PWR7-NEXT:    iselgt 3, 5, 4
19962; PWR7-NEXT:    std 6, -8(1)
19963; PWR7-NEXT:    std 3, -16(1)
19964; PWR7-NEXT:    addi 3, 1, -16
19965; PWR7-NEXT:    lxvd2x 34, 0, 3
19966; PWR7-NEXT:    blr
19967;
19968; PWR8-LABEL: ugt_31_v2i64:
19969; PWR8:       # %bb.0:
19970; PWR8-NEXT:    addis 3, 2, .LCPI160_0@toc@ha
19971; PWR8-NEXT:    vpopcntd 2, 2
19972; PWR8-NEXT:    addi 3, 3, .LCPI160_0@toc@l
19973; PWR8-NEXT:    lxvd2x 35, 0, 3
19974; PWR8-NEXT:    vcmpgtud 2, 2, 3
19975; PWR8-NEXT:    blr
19976;
19977; PWR9-LABEL: ugt_31_v2i64:
19978; PWR9:       # %bb.0:
19979; PWR9-NEXT:    addis 3, 2, .LCPI160_0@toc@ha
19980; PWR9-NEXT:    vpopcntd 2, 2
19981; PWR9-NEXT:    addi 3, 3, .LCPI160_0@toc@l
19982; PWR9-NEXT:    lxv 35, 0(3)
19983; PWR9-NEXT:    vcmpgtud 2, 2, 3
19984; PWR9-NEXT:    blr
19985  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19986  %3 = icmp ugt <2 x i64> %2, <i64 31, i64 31>
19987  %4 = sext <2 x i1> %3 to <2 x i64>
19988  ret <2 x i64> %4
19989}
19990
19991define <2 x i64> @ult_32_v2i64(<2 x i64> %0) {
19992; PWR5-LABEL: ult_32_v2i64:
19993; PWR5:       # %bb.0:
19994; PWR5-NEXT:    lis 5, 21845
19995; PWR5-NEXT:    lis 6, 13107
19996; PWR5-NEXT:    ori 5, 5, 21845
19997; PWR5-NEXT:    rotldi 8, 4, 63
19998; PWR5-NEXT:    rotldi 9, 3, 63
19999; PWR5-NEXT:    rldimi 5, 5, 32, 0
20000; PWR5-NEXT:    and 8, 8, 5
20001; PWR5-NEXT:    and 5, 9, 5
20002; PWR5-NEXT:    ori 6, 6, 13107
20003; PWR5-NEXT:    sub 3, 3, 5
20004; PWR5-NEXT:    rldimi 6, 6, 32, 0
20005; PWR5-NEXT:    sub 4, 4, 8
20006; PWR5-NEXT:    and 8, 3, 6
20007; PWR5-NEXT:    rotldi 3, 3, 62
20008; PWR5-NEXT:    and 3, 3, 6
20009; PWR5-NEXT:    lis 7, 3855
20010; PWR5-NEXT:    and 5, 4, 6
20011; PWR5-NEXT:    rotldi 4, 4, 62
20012; PWR5-NEXT:    add 3, 8, 3
20013; PWR5-NEXT:    lis 9, 257
20014; PWR5-NEXT:    ori 7, 7, 3855
20015; PWR5-NEXT:    and 4, 4, 6
20016; PWR5-NEXT:    rldicl 6, 3, 60, 4
20017; PWR5-NEXT:    ori 9, 9, 257
20018; PWR5-NEXT:    rldimi 7, 7, 32, 0
20019; PWR5-NEXT:    add 4, 5, 4
20020; PWR5-NEXT:    add 3, 3, 6
20021; PWR5-NEXT:    rldimi 9, 9, 32, 0
20022; PWR5-NEXT:    rldicl 5, 4, 60, 4
20023; PWR5-NEXT:    and 3, 3, 7
20024; PWR5-NEXT:    add 4, 4, 5
20025; PWR5-NEXT:    mulld 3, 3, 9
20026; PWR5-NEXT:    and 4, 4, 7
20027; PWR5-NEXT:    rldicl 3, 3, 8, 56
20028; PWR5-NEXT:    li 5, 32
20029; PWR5-NEXT:    mulld 4, 4, 9
20030; PWR5-NEXT:    subc 6, 3, 5
20031; PWR5-NEXT:    rldicl 4, 4, 8, 56
20032; PWR5-NEXT:    subfe 3, 3, 3
20033; PWR5-NEXT:    subc 5, 4, 5
20034; PWR5-NEXT:    subfe 4, 4, 4
20035; PWR5-NEXT:    blr
20036;
20037; PWR6-LABEL: ult_32_v2i64:
20038; PWR6:       # %bb.0:
20039; PWR6-NEXT:    lis 5, 21845
20040; PWR6-NEXT:    lis 6, 13107
20041; PWR6-NEXT:    ori 5, 5, 21845
20042; PWR6-NEXT:    rotldi 8, 4, 63
20043; PWR6-NEXT:    rotldi 9, 3, 63
20044; PWR6-NEXT:    rldimi 5, 5, 32, 0
20045; PWR6-NEXT:    and 8, 8, 5
20046; PWR6-NEXT:    and 5, 9, 5
20047; PWR6-NEXT:    ori 6, 6, 13107
20048; PWR6-NEXT:    sub 3, 3, 5
20049; PWR6-NEXT:    rldimi 6, 6, 32, 0
20050; PWR6-NEXT:    sub 4, 4, 8
20051; PWR6-NEXT:    and 8, 3, 6
20052; PWR6-NEXT:    rotldi 3, 3, 62
20053; PWR6-NEXT:    and 3, 3, 6
20054; PWR6-NEXT:    lis 7, 3855
20055; PWR6-NEXT:    and 5, 4, 6
20056; PWR6-NEXT:    rotldi 4, 4, 62
20057; PWR6-NEXT:    add 3, 8, 3
20058; PWR6-NEXT:    lis 9, 257
20059; PWR6-NEXT:    ori 7, 7, 3855
20060; PWR6-NEXT:    and 4, 4, 6
20061; PWR6-NEXT:    rldicl 6, 3, 60, 4
20062; PWR6-NEXT:    ori 9, 9, 257
20063; PWR6-NEXT:    rldimi 7, 7, 32, 0
20064; PWR6-NEXT:    add 4, 5, 4
20065; PWR6-NEXT:    add 3, 3, 6
20066; PWR6-NEXT:    rldimi 9, 9, 32, 0
20067; PWR6-NEXT:    rldicl 5, 4, 60, 4
20068; PWR6-NEXT:    and 3, 3, 7
20069; PWR6-NEXT:    add 4, 4, 5
20070; PWR6-NEXT:    mulld 3, 3, 9
20071; PWR6-NEXT:    and 4, 4, 7
20072; PWR6-NEXT:    rldicl 3, 3, 8, 56
20073; PWR6-NEXT:    li 5, 32
20074; PWR6-NEXT:    mulld 4, 4, 9
20075; PWR6-NEXT:    subc 6, 3, 5
20076; PWR6-NEXT:    rldicl 4, 4, 8, 56
20077; PWR6-NEXT:    subfe 3, 3, 3
20078; PWR6-NEXT:    subc 5, 4, 5
20079; PWR6-NEXT:    subfe 4, 4, 4
20080; PWR6-NEXT:    blr
20081;
20082; PWR7-LABEL: ult_32_v2i64:
20083; PWR7:       # %bb.0:
20084; PWR7-NEXT:    addi 3, 1, -32
20085; PWR7-NEXT:    li 5, -1
20086; PWR7-NEXT:    stxvd2x 34, 0, 3
20087; PWR7-NEXT:    ld 4, -24(1)
20088; PWR7-NEXT:    ld 3, -32(1)
20089; PWR7-NEXT:    popcntd 4, 4
20090; PWR7-NEXT:    popcntd 3, 3
20091; PWR7-NEXT:    cmpldi 4, 32
20092; PWR7-NEXT:    li 4, 0
20093; PWR7-NEXT:    isellt 6, 5, 4
20094; PWR7-NEXT:    cmpldi 3, 32
20095; PWR7-NEXT:    isellt 3, 5, 4
20096; PWR7-NEXT:    std 6, -8(1)
20097; PWR7-NEXT:    std 3, -16(1)
20098; PWR7-NEXT:    addi 3, 1, -16
20099; PWR7-NEXT:    lxvd2x 34, 0, 3
20100; PWR7-NEXT:    blr
20101;
20102; PWR8-LABEL: ult_32_v2i64:
20103; PWR8:       # %bb.0:
20104; PWR8-NEXT:    addis 3, 2, .LCPI161_0@toc@ha
20105; PWR8-NEXT:    vpopcntd 2, 2
20106; PWR8-NEXT:    addi 3, 3, .LCPI161_0@toc@l
20107; PWR8-NEXT:    lxvd2x 35, 0, 3
20108; PWR8-NEXT:    vcmpgtud 2, 3, 2
20109; PWR8-NEXT:    blr
20110;
20111; PWR9-LABEL: ult_32_v2i64:
20112; PWR9:       # %bb.0:
20113; PWR9-NEXT:    addis 3, 2, .LCPI161_0@toc@ha
20114; PWR9-NEXT:    vpopcntd 2, 2
20115; PWR9-NEXT:    addi 3, 3, .LCPI161_0@toc@l
20116; PWR9-NEXT:    lxv 35, 0(3)
20117; PWR9-NEXT:    vcmpgtud 2, 3, 2
20118; PWR9-NEXT:    blr
20119  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20120  %3 = icmp ult <2 x i64> %2, <i64 32, i64 32>
20121  %4 = sext <2 x i1> %3 to <2 x i64>
20122  ret <2 x i64> %4
20123}
20124
20125define <2 x i64> @ugt_32_v2i64(<2 x i64> %0) {
20126; PWR5-LABEL: ugt_32_v2i64:
20127; PWR5:       # %bb.0:
20128; PWR5-NEXT:    lis 5, 21845
20129; PWR5-NEXT:    lis 6, 13107
20130; PWR5-NEXT:    ori 5, 5, 21845
20131; PWR5-NEXT:    rotldi 8, 4, 63
20132; PWR5-NEXT:    rotldi 9, 3, 63
20133; PWR5-NEXT:    rldimi 5, 5, 32, 0
20134; PWR5-NEXT:    and 8, 8, 5
20135; PWR5-NEXT:    and 5, 9, 5
20136; PWR5-NEXT:    ori 6, 6, 13107
20137; PWR5-NEXT:    sub 3, 3, 5
20138; PWR5-NEXT:    rldimi 6, 6, 32, 0
20139; PWR5-NEXT:    sub 4, 4, 8
20140; PWR5-NEXT:    and 8, 3, 6
20141; PWR5-NEXT:    rotldi 3, 3, 62
20142; PWR5-NEXT:    and 3, 3, 6
20143; PWR5-NEXT:    lis 7, 3855
20144; PWR5-NEXT:    and 5, 4, 6
20145; PWR5-NEXT:    rotldi 4, 4, 62
20146; PWR5-NEXT:    add 3, 8, 3
20147; PWR5-NEXT:    lis 9, 257
20148; PWR5-NEXT:    ori 7, 7, 3855
20149; PWR5-NEXT:    and 4, 4, 6
20150; PWR5-NEXT:    rldicl 6, 3, 60, 4
20151; PWR5-NEXT:    ori 9, 9, 257
20152; PWR5-NEXT:    rldimi 7, 7, 32, 0
20153; PWR5-NEXT:    add 4, 5, 4
20154; PWR5-NEXT:    add 3, 3, 6
20155; PWR5-NEXT:    rldimi 9, 9, 32, 0
20156; PWR5-NEXT:    rldicl 5, 4, 60, 4
20157; PWR5-NEXT:    and 3, 3, 7
20158; PWR5-NEXT:    add 4, 4, 5
20159; PWR5-NEXT:    mulld 3, 3, 9
20160; PWR5-NEXT:    and 4, 4, 7
20161; PWR5-NEXT:    rldicl 3, 3, 8, 56
20162; PWR5-NEXT:    mulld 4, 4, 9
20163; PWR5-NEXT:    li 5, 32
20164; PWR5-NEXT:    subfic 3, 3, 32
20165; PWR5-NEXT:    rldicl 4, 4, 8, 56
20166; PWR5-NEXT:    subfe 3, 5, 5
20167; PWR5-NEXT:    subfic 4, 4, 32
20168; PWR5-NEXT:    subfe 4, 5, 5
20169; PWR5-NEXT:    blr
20170;
20171; PWR6-LABEL: ugt_32_v2i64:
20172; PWR6:       # %bb.0:
20173; PWR6-NEXT:    lis 5, 21845
20174; PWR6-NEXT:    lis 6, 13107
20175; PWR6-NEXT:    ori 5, 5, 21845
20176; PWR6-NEXT:    rotldi 8, 4, 63
20177; PWR6-NEXT:    rotldi 9, 3, 63
20178; PWR6-NEXT:    rldimi 5, 5, 32, 0
20179; PWR6-NEXT:    and 8, 8, 5
20180; PWR6-NEXT:    and 5, 9, 5
20181; PWR6-NEXT:    ori 6, 6, 13107
20182; PWR6-NEXT:    sub 3, 3, 5
20183; PWR6-NEXT:    rldimi 6, 6, 32, 0
20184; PWR6-NEXT:    sub 4, 4, 8
20185; PWR6-NEXT:    and 8, 3, 6
20186; PWR6-NEXT:    rotldi 3, 3, 62
20187; PWR6-NEXT:    and 3, 3, 6
20188; PWR6-NEXT:    lis 7, 3855
20189; PWR6-NEXT:    and 5, 4, 6
20190; PWR6-NEXT:    rotldi 4, 4, 62
20191; PWR6-NEXT:    add 3, 8, 3
20192; PWR6-NEXT:    lis 9, 257
20193; PWR6-NEXT:    ori 7, 7, 3855
20194; PWR6-NEXT:    and 4, 4, 6
20195; PWR6-NEXT:    rldicl 6, 3, 60, 4
20196; PWR6-NEXT:    ori 9, 9, 257
20197; PWR6-NEXT:    rldimi 7, 7, 32, 0
20198; PWR6-NEXT:    add 4, 5, 4
20199; PWR6-NEXT:    add 3, 3, 6
20200; PWR6-NEXT:    rldimi 9, 9, 32, 0
20201; PWR6-NEXT:    rldicl 5, 4, 60, 4
20202; PWR6-NEXT:    and 3, 3, 7
20203; PWR6-NEXT:    add 4, 4, 5
20204; PWR6-NEXT:    mulld 3, 3, 9
20205; PWR6-NEXT:    and 4, 4, 7
20206; PWR6-NEXT:    rldicl 3, 3, 8, 56
20207; PWR6-NEXT:    mulld 4, 4, 9
20208; PWR6-NEXT:    li 5, 32
20209; PWR6-NEXT:    subfic 3, 3, 32
20210; PWR6-NEXT:    rldicl 4, 4, 8, 56
20211; PWR6-NEXT:    subfe 3, 5, 5
20212; PWR6-NEXT:    subfic 4, 4, 32
20213; PWR6-NEXT:    subfe 4, 5, 5
20214; PWR6-NEXT:    blr
20215;
20216; PWR7-LABEL: ugt_32_v2i64:
20217; PWR7:       # %bb.0:
20218; PWR7-NEXT:    addi 3, 1, -32
20219; PWR7-NEXT:    li 5, -1
20220; PWR7-NEXT:    stxvd2x 34, 0, 3
20221; PWR7-NEXT:    ld 4, -24(1)
20222; PWR7-NEXT:    ld 3, -32(1)
20223; PWR7-NEXT:    popcntd 4, 4
20224; PWR7-NEXT:    popcntd 3, 3
20225; PWR7-NEXT:    cmpldi 4, 32
20226; PWR7-NEXT:    li 4, 0
20227; PWR7-NEXT:    iselgt 6, 5, 4
20228; PWR7-NEXT:    cmpldi 3, 32
20229; PWR7-NEXT:    iselgt 3, 5, 4
20230; PWR7-NEXT:    std 6, -8(1)
20231; PWR7-NEXT:    std 3, -16(1)
20232; PWR7-NEXT:    addi 3, 1, -16
20233; PWR7-NEXT:    lxvd2x 34, 0, 3
20234; PWR7-NEXT:    blr
20235;
20236; PWR8-LABEL: ugt_32_v2i64:
20237; PWR8:       # %bb.0:
20238; PWR8-NEXT:    addis 3, 2, .LCPI162_0@toc@ha
20239; PWR8-NEXT:    vpopcntd 2, 2
20240; PWR8-NEXT:    addi 3, 3, .LCPI162_0@toc@l
20241; PWR8-NEXT:    lxvd2x 35, 0, 3
20242; PWR8-NEXT:    vcmpgtud 2, 2, 3
20243; PWR8-NEXT:    blr
20244;
20245; PWR9-LABEL: ugt_32_v2i64:
20246; PWR9:       # %bb.0:
20247; PWR9-NEXT:    addis 3, 2, .LCPI162_0@toc@ha
20248; PWR9-NEXT:    vpopcntd 2, 2
20249; PWR9-NEXT:    addi 3, 3, .LCPI162_0@toc@l
20250; PWR9-NEXT:    lxv 35, 0(3)
20251; PWR9-NEXT:    vcmpgtud 2, 2, 3
20252; PWR9-NEXT:    blr
20253  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20254  %3 = icmp ugt <2 x i64> %2, <i64 32, i64 32>
20255  %4 = sext <2 x i1> %3 to <2 x i64>
20256  ret <2 x i64> %4
20257}
20258
20259define <2 x i64> @ult_33_v2i64(<2 x i64> %0) {
20260; PWR5-LABEL: ult_33_v2i64:
20261; PWR5:       # %bb.0:
20262; PWR5-NEXT:    lis 5, 21845
20263; PWR5-NEXT:    lis 6, 13107
20264; PWR5-NEXT:    ori 5, 5, 21845
20265; PWR5-NEXT:    rotldi 8, 4, 63
20266; PWR5-NEXT:    rotldi 9, 3, 63
20267; PWR5-NEXT:    rldimi 5, 5, 32, 0
20268; PWR5-NEXT:    and 8, 8, 5
20269; PWR5-NEXT:    and 5, 9, 5
20270; PWR5-NEXT:    ori 6, 6, 13107
20271; PWR5-NEXT:    sub 3, 3, 5
20272; PWR5-NEXT:    rldimi 6, 6, 32, 0
20273; PWR5-NEXT:    sub 4, 4, 8
20274; PWR5-NEXT:    and 8, 3, 6
20275; PWR5-NEXT:    rotldi 3, 3, 62
20276; PWR5-NEXT:    and 3, 3, 6
20277; PWR5-NEXT:    lis 7, 3855
20278; PWR5-NEXT:    and 5, 4, 6
20279; PWR5-NEXT:    rotldi 4, 4, 62
20280; PWR5-NEXT:    add 3, 8, 3
20281; PWR5-NEXT:    lis 9, 257
20282; PWR5-NEXT:    ori 7, 7, 3855
20283; PWR5-NEXT:    and 4, 4, 6
20284; PWR5-NEXT:    rldicl 6, 3, 60, 4
20285; PWR5-NEXT:    ori 9, 9, 257
20286; PWR5-NEXT:    rldimi 7, 7, 32, 0
20287; PWR5-NEXT:    add 4, 5, 4
20288; PWR5-NEXT:    add 3, 3, 6
20289; PWR5-NEXT:    rldimi 9, 9, 32, 0
20290; PWR5-NEXT:    rldicl 5, 4, 60, 4
20291; PWR5-NEXT:    and 3, 3, 7
20292; PWR5-NEXT:    add 4, 4, 5
20293; PWR5-NEXT:    mulld 3, 3, 9
20294; PWR5-NEXT:    and 4, 4, 7
20295; PWR5-NEXT:    rldicl 3, 3, 8, 56
20296; PWR5-NEXT:    li 5, 33
20297; PWR5-NEXT:    mulld 4, 4, 9
20298; PWR5-NEXT:    subc 6, 3, 5
20299; PWR5-NEXT:    rldicl 4, 4, 8, 56
20300; PWR5-NEXT:    subfe 3, 3, 3
20301; PWR5-NEXT:    subc 5, 4, 5
20302; PWR5-NEXT:    subfe 4, 4, 4
20303; PWR5-NEXT:    blr
20304;
20305; PWR6-LABEL: ult_33_v2i64:
20306; PWR6:       # %bb.0:
20307; PWR6-NEXT:    lis 5, 21845
20308; PWR6-NEXT:    lis 6, 13107
20309; PWR6-NEXT:    ori 5, 5, 21845
20310; PWR6-NEXT:    rotldi 8, 4, 63
20311; PWR6-NEXT:    rotldi 9, 3, 63
20312; PWR6-NEXT:    rldimi 5, 5, 32, 0
20313; PWR6-NEXT:    and 8, 8, 5
20314; PWR6-NEXT:    and 5, 9, 5
20315; PWR6-NEXT:    ori 6, 6, 13107
20316; PWR6-NEXT:    sub 3, 3, 5
20317; PWR6-NEXT:    rldimi 6, 6, 32, 0
20318; PWR6-NEXT:    sub 4, 4, 8
20319; PWR6-NEXT:    and 8, 3, 6
20320; PWR6-NEXT:    rotldi 3, 3, 62
20321; PWR6-NEXT:    and 3, 3, 6
20322; PWR6-NEXT:    lis 7, 3855
20323; PWR6-NEXT:    and 5, 4, 6
20324; PWR6-NEXT:    rotldi 4, 4, 62
20325; PWR6-NEXT:    add 3, 8, 3
20326; PWR6-NEXT:    lis 9, 257
20327; PWR6-NEXT:    ori 7, 7, 3855
20328; PWR6-NEXT:    and 4, 4, 6
20329; PWR6-NEXT:    rldicl 6, 3, 60, 4
20330; PWR6-NEXT:    ori 9, 9, 257
20331; PWR6-NEXT:    rldimi 7, 7, 32, 0
20332; PWR6-NEXT:    add 4, 5, 4
20333; PWR6-NEXT:    add 3, 3, 6
20334; PWR6-NEXT:    rldimi 9, 9, 32, 0
20335; PWR6-NEXT:    rldicl 5, 4, 60, 4
20336; PWR6-NEXT:    and 3, 3, 7
20337; PWR6-NEXT:    add 4, 4, 5
20338; PWR6-NEXT:    mulld 3, 3, 9
20339; PWR6-NEXT:    and 4, 4, 7
20340; PWR6-NEXT:    rldicl 3, 3, 8, 56
20341; PWR6-NEXT:    li 5, 33
20342; PWR6-NEXT:    mulld 4, 4, 9
20343; PWR6-NEXT:    subc 6, 3, 5
20344; PWR6-NEXT:    rldicl 4, 4, 8, 56
20345; PWR6-NEXT:    subfe 3, 3, 3
20346; PWR6-NEXT:    subc 5, 4, 5
20347; PWR6-NEXT:    subfe 4, 4, 4
20348; PWR6-NEXT:    blr
20349;
20350; PWR7-LABEL: ult_33_v2i64:
20351; PWR7:       # %bb.0:
20352; PWR7-NEXT:    addi 3, 1, -32
20353; PWR7-NEXT:    li 5, -1
20354; PWR7-NEXT:    stxvd2x 34, 0, 3
20355; PWR7-NEXT:    ld 4, -24(1)
20356; PWR7-NEXT:    ld 3, -32(1)
20357; PWR7-NEXT:    popcntd 4, 4
20358; PWR7-NEXT:    popcntd 3, 3
20359; PWR7-NEXT:    cmpldi 4, 33
20360; PWR7-NEXT:    li 4, 0
20361; PWR7-NEXT:    isellt 6, 5, 4
20362; PWR7-NEXT:    cmpldi 3, 33
20363; PWR7-NEXT:    isellt 3, 5, 4
20364; PWR7-NEXT:    std 6, -8(1)
20365; PWR7-NEXT:    std 3, -16(1)
20366; PWR7-NEXT:    addi 3, 1, -16
20367; PWR7-NEXT:    lxvd2x 34, 0, 3
20368; PWR7-NEXT:    blr
20369;
20370; PWR8-LABEL: ult_33_v2i64:
20371; PWR8:       # %bb.0:
20372; PWR8-NEXT:    addis 3, 2, .LCPI163_0@toc@ha
20373; PWR8-NEXT:    vpopcntd 2, 2
20374; PWR8-NEXT:    addi 3, 3, .LCPI163_0@toc@l
20375; PWR8-NEXT:    lxvd2x 35, 0, 3
20376; PWR8-NEXT:    vcmpgtud 2, 3, 2
20377; PWR8-NEXT:    blr
20378;
20379; PWR9-LABEL: ult_33_v2i64:
20380; PWR9:       # %bb.0:
20381; PWR9-NEXT:    addis 3, 2, .LCPI163_0@toc@ha
20382; PWR9-NEXT:    vpopcntd 2, 2
20383; PWR9-NEXT:    addi 3, 3, .LCPI163_0@toc@l
20384; PWR9-NEXT:    lxv 35, 0(3)
20385; PWR9-NEXT:    vcmpgtud 2, 3, 2
20386; PWR9-NEXT:    blr
20387  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20388  %3 = icmp ult <2 x i64> %2, <i64 33, i64 33>
20389  %4 = sext <2 x i1> %3 to <2 x i64>
20390  ret <2 x i64> %4
20391}
20392
20393define <2 x i64> @ugt_33_v2i64(<2 x i64> %0) {
20394; PWR5-LABEL: ugt_33_v2i64:
20395; PWR5:       # %bb.0:
20396; PWR5-NEXT:    lis 5, 21845
20397; PWR5-NEXT:    lis 6, 13107
20398; PWR5-NEXT:    ori 5, 5, 21845
20399; PWR5-NEXT:    rotldi 8, 4, 63
20400; PWR5-NEXT:    rotldi 9, 3, 63
20401; PWR5-NEXT:    rldimi 5, 5, 32, 0
20402; PWR5-NEXT:    and 8, 8, 5
20403; PWR5-NEXT:    and 5, 9, 5
20404; PWR5-NEXT:    ori 6, 6, 13107
20405; PWR5-NEXT:    sub 3, 3, 5
20406; PWR5-NEXT:    rldimi 6, 6, 32, 0
20407; PWR5-NEXT:    sub 4, 4, 8
20408; PWR5-NEXT:    and 8, 3, 6
20409; PWR5-NEXT:    rotldi 3, 3, 62
20410; PWR5-NEXT:    and 3, 3, 6
20411; PWR5-NEXT:    lis 7, 3855
20412; PWR5-NEXT:    and 5, 4, 6
20413; PWR5-NEXT:    rotldi 4, 4, 62
20414; PWR5-NEXT:    add 3, 8, 3
20415; PWR5-NEXT:    lis 9, 257
20416; PWR5-NEXT:    ori 7, 7, 3855
20417; PWR5-NEXT:    and 4, 4, 6
20418; PWR5-NEXT:    rldicl 6, 3, 60, 4
20419; PWR5-NEXT:    ori 9, 9, 257
20420; PWR5-NEXT:    rldimi 7, 7, 32, 0
20421; PWR5-NEXT:    add 4, 5, 4
20422; PWR5-NEXT:    add 3, 3, 6
20423; PWR5-NEXT:    rldimi 9, 9, 32, 0
20424; PWR5-NEXT:    rldicl 5, 4, 60, 4
20425; PWR5-NEXT:    and 3, 3, 7
20426; PWR5-NEXT:    add 4, 4, 5
20427; PWR5-NEXT:    mulld 3, 3, 9
20428; PWR5-NEXT:    and 4, 4, 7
20429; PWR5-NEXT:    rldicl 3, 3, 8, 56
20430; PWR5-NEXT:    mulld 4, 4, 9
20431; PWR5-NEXT:    li 5, 33
20432; PWR5-NEXT:    subfic 3, 3, 33
20433; PWR5-NEXT:    rldicl 4, 4, 8, 56
20434; PWR5-NEXT:    subfe 3, 5, 5
20435; PWR5-NEXT:    subfic 4, 4, 33
20436; PWR5-NEXT:    subfe 4, 5, 5
20437; PWR5-NEXT:    blr
20438;
20439; PWR6-LABEL: ugt_33_v2i64:
20440; PWR6:       # %bb.0:
20441; PWR6-NEXT:    lis 5, 21845
20442; PWR6-NEXT:    lis 6, 13107
20443; PWR6-NEXT:    ori 5, 5, 21845
20444; PWR6-NEXT:    rotldi 8, 4, 63
20445; PWR6-NEXT:    rotldi 9, 3, 63
20446; PWR6-NEXT:    rldimi 5, 5, 32, 0
20447; PWR6-NEXT:    and 8, 8, 5
20448; PWR6-NEXT:    and 5, 9, 5
20449; PWR6-NEXT:    ori 6, 6, 13107
20450; PWR6-NEXT:    sub 3, 3, 5
20451; PWR6-NEXT:    rldimi 6, 6, 32, 0
20452; PWR6-NEXT:    sub 4, 4, 8
20453; PWR6-NEXT:    and 8, 3, 6
20454; PWR6-NEXT:    rotldi 3, 3, 62
20455; PWR6-NEXT:    and 3, 3, 6
20456; PWR6-NEXT:    lis 7, 3855
20457; PWR6-NEXT:    and 5, 4, 6
20458; PWR6-NEXT:    rotldi 4, 4, 62
20459; PWR6-NEXT:    add 3, 8, 3
20460; PWR6-NEXT:    lis 9, 257
20461; PWR6-NEXT:    ori 7, 7, 3855
20462; PWR6-NEXT:    and 4, 4, 6
20463; PWR6-NEXT:    rldicl 6, 3, 60, 4
20464; PWR6-NEXT:    ori 9, 9, 257
20465; PWR6-NEXT:    rldimi 7, 7, 32, 0
20466; PWR6-NEXT:    add 4, 5, 4
20467; PWR6-NEXT:    add 3, 3, 6
20468; PWR6-NEXT:    rldimi 9, 9, 32, 0
20469; PWR6-NEXT:    rldicl 5, 4, 60, 4
20470; PWR6-NEXT:    and 3, 3, 7
20471; PWR6-NEXT:    add 4, 4, 5
20472; PWR6-NEXT:    mulld 3, 3, 9
20473; PWR6-NEXT:    and 4, 4, 7
20474; PWR6-NEXT:    rldicl 3, 3, 8, 56
20475; PWR6-NEXT:    mulld 4, 4, 9
20476; PWR6-NEXT:    li 5, 33
20477; PWR6-NEXT:    subfic 3, 3, 33
20478; PWR6-NEXT:    rldicl 4, 4, 8, 56
20479; PWR6-NEXT:    subfe 3, 5, 5
20480; PWR6-NEXT:    subfic 4, 4, 33
20481; PWR6-NEXT:    subfe 4, 5, 5
20482; PWR6-NEXT:    blr
20483;
20484; PWR7-LABEL: ugt_33_v2i64:
20485; PWR7:       # %bb.0:
20486; PWR7-NEXT:    addi 3, 1, -32
20487; PWR7-NEXT:    li 5, -1
20488; PWR7-NEXT:    stxvd2x 34, 0, 3
20489; PWR7-NEXT:    ld 4, -24(1)
20490; PWR7-NEXT:    ld 3, -32(1)
20491; PWR7-NEXT:    popcntd 4, 4
20492; PWR7-NEXT:    popcntd 3, 3
20493; PWR7-NEXT:    cmpldi 4, 33
20494; PWR7-NEXT:    li 4, 0
20495; PWR7-NEXT:    iselgt 6, 5, 4
20496; PWR7-NEXT:    cmpldi 3, 33
20497; PWR7-NEXT:    iselgt 3, 5, 4
20498; PWR7-NEXT:    std 6, -8(1)
20499; PWR7-NEXT:    std 3, -16(1)
20500; PWR7-NEXT:    addi 3, 1, -16
20501; PWR7-NEXT:    lxvd2x 34, 0, 3
20502; PWR7-NEXT:    blr
20503;
20504; PWR8-LABEL: ugt_33_v2i64:
20505; PWR8:       # %bb.0:
20506; PWR8-NEXT:    addis 3, 2, .LCPI164_0@toc@ha
20507; PWR8-NEXT:    vpopcntd 2, 2
20508; PWR8-NEXT:    addi 3, 3, .LCPI164_0@toc@l
20509; PWR8-NEXT:    lxvd2x 35, 0, 3
20510; PWR8-NEXT:    vcmpgtud 2, 2, 3
20511; PWR8-NEXT:    blr
20512;
20513; PWR9-LABEL: ugt_33_v2i64:
20514; PWR9:       # %bb.0:
20515; PWR9-NEXT:    addis 3, 2, .LCPI164_0@toc@ha
20516; PWR9-NEXT:    vpopcntd 2, 2
20517; PWR9-NEXT:    addi 3, 3, .LCPI164_0@toc@l
20518; PWR9-NEXT:    lxv 35, 0(3)
20519; PWR9-NEXT:    vcmpgtud 2, 2, 3
20520; PWR9-NEXT:    blr
20521  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20522  %3 = icmp ugt <2 x i64> %2, <i64 33, i64 33>
20523  %4 = sext <2 x i1> %3 to <2 x i64>
20524  ret <2 x i64> %4
20525}
20526
20527define <2 x i64> @ult_34_v2i64(<2 x i64> %0) {
20528; PWR5-LABEL: ult_34_v2i64:
20529; PWR5:       # %bb.0:
20530; PWR5-NEXT:    lis 5, 21845
20531; PWR5-NEXT:    lis 6, 13107
20532; PWR5-NEXT:    ori 5, 5, 21845
20533; PWR5-NEXT:    rotldi 8, 4, 63
20534; PWR5-NEXT:    rotldi 9, 3, 63
20535; PWR5-NEXT:    rldimi 5, 5, 32, 0
20536; PWR5-NEXT:    and 8, 8, 5
20537; PWR5-NEXT:    and 5, 9, 5
20538; PWR5-NEXT:    ori 6, 6, 13107
20539; PWR5-NEXT:    sub 3, 3, 5
20540; PWR5-NEXT:    rldimi 6, 6, 32, 0
20541; PWR5-NEXT:    sub 4, 4, 8
20542; PWR5-NEXT:    and 8, 3, 6
20543; PWR5-NEXT:    rotldi 3, 3, 62
20544; PWR5-NEXT:    and 3, 3, 6
20545; PWR5-NEXT:    lis 7, 3855
20546; PWR5-NEXT:    and 5, 4, 6
20547; PWR5-NEXT:    rotldi 4, 4, 62
20548; PWR5-NEXT:    add 3, 8, 3
20549; PWR5-NEXT:    lis 9, 257
20550; PWR5-NEXT:    ori 7, 7, 3855
20551; PWR5-NEXT:    and 4, 4, 6
20552; PWR5-NEXT:    rldicl 6, 3, 60, 4
20553; PWR5-NEXT:    ori 9, 9, 257
20554; PWR5-NEXT:    rldimi 7, 7, 32, 0
20555; PWR5-NEXT:    add 4, 5, 4
20556; PWR5-NEXT:    add 3, 3, 6
20557; PWR5-NEXT:    rldimi 9, 9, 32, 0
20558; PWR5-NEXT:    rldicl 5, 4, 60, 4
20559; PWR5-NEXT:    and 3, 3, 7
20560; PWR5-NEXT:    add 4, 4, 5
20561; PWR5-NEXT:    mulld 3, 3, 9
20562; PWR5-NEXT:    and 4, 4, 7
20563; PWR5-NEXT:    rldicl 3, 3, 8, 56
20564; PWR5-NEXT:    li 5, 34
20565; PWR5-NEXT:    mulld 4, 4, 9
20566; PWR5-NEXT:    subc 6, 3, 5
20567; PWR5-NEXT:    rldicl 4, 4, 8, 56
20568; PWR5-NEXT:    subfe 3, 3, 3
20569; PWR5-NEXT:    subc 5, 4, 5
20570; PWR5-NEXT:    subfe 4, 4, 4
20571; PWR5-NEXT:    blr
20572;
20573; PWR6-LABEL: ult_34_v2i64:
20574; PWR6:       # %bb.0:
20575; PWR6-NEXT:    lis 5, 21845
20576; PWR6-NEXT:    lis 6, 13107
20577; PWR6-NEXT:    ori 5, 5, 21845
20578; PWR6-NEXT:    rotldi 8, 4, 63
20579; PWR6-NEXT:    rotldi 9, 3, 63
20580; PWR6-NEXT:    rldimi 5, 5, 32, 0
20581; PWR6-NEXT:    and 8, 8, 5
20582; PWR6-NEXT:    and 5, 9, 5
20583; PWR6-NEXT:    ori 6, 6, 13107
20584; PWR6-NEXT:    sub 3, 3, 5
20585; PWR6-NEXT:    rldimi 6, 6, 32, 0
20586; PWR6-NEXT:    sub 4, 4, 8
20587; PWR6-NEXT:    and 8, 3, 6
20588; PWR6-NEXT:    rotldi 3, 3, 62
20589; PWR6-NEXT:    and 3, 3, 6
20590; PWR6-NEXT:    lis 7, 3855
20591; PWR6-NEXT:    and 5, 4, 6
20592; PWR6-NEXT:    rotldi 4, 4, 62
20593; PWR6-NEXT:    add 3, 8, 3
20594; PWR6-NEXT:    lis 9, 257
20595; PWR6-NEXT:    ori 7, 7, 3855
20596; PWR6-NEXT:    and 4, 4, 6
20597; PWR6-NEXT:    rldicl 6, 3, 60, 4
20598; PWR6-NEXT:    ori 9, 9, 257
20599; PWR6-NEXT:    rldimi 7, 7, 32, 0
20600; PWR6-NEXT:    add 4, 5, 4
20601; PWR6-NEXT:    add 3, 3, 6
20602; PWR6-NEXT:    rldimi 9, 9, 32, 0
20603; PWR6-NEXT:    rldicl 5, 4, 60, 4
20604; PWR6-NEXT:    and 3, 3, 7
20605; PWR6-NEXT:    add 4, 4, 5
20606; PWR6-NEXT:    mulld 3, 3, 9
20607; PWR6-NEXT:    and 4, 4, 7
20608; PWR6-NEXT:    rldicl 3, 3, 8, 56
20609; PWR6-NEXT:    li 5, 34
20610; PWR6-NEXT:    mulld 4, 4, 9
20611; PWR6-NEXT:    subc 6, 3, 5
20612; PWR6-NEXT:    rldicl 4, 4, 8, 56
20613; PWR6-NEXT:    subfe 3, 3, 3
20614; PWR6-NEXT:    subc 5, 4, 5
20615; PWR6-NEXT:    subfe 4, 4, 4
20616; PWR6-NEXT:    blr
20617;
20618; PWR7-LABEL: ult_34_v2i64:
20619; PWR7:       # %bb.0:
20620; PWR7-NEXT:    addi 3, 1, -32
20621; PWR7-NEXT:    li 5, -1
20622; PWR7-NEXT:    stxvd2x 34, 0, 3
20623; PWR7-NEXT:    ld 4, -24(1)
20624; PWR7-NEXT:    ld 3, -32(1)
20625; PWR7-NEXT:    popcntd 4, 4
20626; PWR7-NEXT:    popcntd 3, 3
20627; PWR7-NEXT:    cmpldi 4, 34
20628; PWR7-NEXT:    li 4, 0
20629; PWR7-NEXT:    isellt 6, 5, 4
20630; PWR7-NEXT:    cmpldi 3, 34
20631; PWR7-NEXT:    isellt 3, 5, 4
20632; PWR7-NEXT:    std 6, -8(1)
20633; PWR7-NEXT:    std 3, -16(1)
20634; PWR7-NEXT:    addi 3, 1, -16
20635; PWR7-NEXT:    lxvd2x 34, 0, 3
20636; PWR7-NEXT:    blr
20637;
20638; PWR8-LABEL: ult_34_v2i64:
20639; PWR8:       # %bb.0:
20640; PWR8-NEXT:    addis 3, 2, .LCPI165_0@toc@ha
20641; PWR8-NEXT:    vpopcntd 2, 2
20642; PWR8-NEXT:    addi 3, 3, .LCPI165_0@toc@l
20643; PWR8-NEXT:    lxvd2x 35, 0, 3
20644; PWR8-NEXT:    vcmpgtud 2, 3, 2
20645; PWR8-NEXT:    blr
20646;
20647; PWR9-LABEL: ult_34_v2i64:
20648; PWR9:       # %bb.0:
20649; PWR9-NEXT:    addis 3, 2, .LCPI165_0@toc@ha
20650; PWR9-NEXT:    vpopcntd 2, 2
20651; PWR9-NEXT:    addi 3, 3, .LCPI165_0@toc@l
20652; PWR9-NEXT:    lxv 35, 0(3)
20653; PWR9-NEXT:    vcmpgtud 2, 3, 2
20654; PWR9-NEXT:    blr
20655  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20656  %3 = icmp ult <2 x i64> %2, <i64 34, i64 34>
20657  %4 = sext <2 x i1> %3 to <2 x i64>
20658  ret <2 x i64> %4
20659}
20660
20661define <2 x i64> @ugt_34_v2i64(<2 x i64> %0) {
20662; PWR5-LABEL: ugt_34_v2i64:
20663; PWR5:       # %bb.0:
20664; PWR5-NEXT:    lis 5, 21845
20665; PWR5-NEXT:    lis 6, 13107
20666; PWR5-NEXT:    ori 5, 5, 21845
20667; PWR5-NEXT:    rotldi 8, 4, 63
20668; PWR5-NEXT:    rotldi 9, 3, 63
20669; PWR5-NEXT:    rldimi 5, 5, 32, 0
20670; PWR5-NEXT:    and 8, 8, 5
20671; PWR5-NEXT:    and 5, 9, 5
20672; PWR5-NEXT:    ori 6, 6, 13107
20673; PWR5-NEXT:    sub 3, 3, 5
20674; PWR5-NEXT:    rldimi 6, 6, 32, 0
20675; PWR5-NEXT:    sub 4, 4, 8
20676; PWR5-NEXT:    and 8, 3, 6
20677; PWR5-NEXT:    rotldi 3, 3, 62
20678; PWR5-NEXT:    and 3, 3, 6
20679; PWR5-NEXT:    lis 7, 3855
20680; PWR5-NEXT:    and 5, 4, 6
20681; PWR5-NEXT:    rotldi 4, 4, 62
20682; PWR5-NEXT:    add 3, 8, 3
20683; PWR5-NEXT:    lis 9, 257
20684; PWR5-NEXT:    ori 7, 7, 3855
20685; PWR5-NEXT:    and 4, 4, 6
20686; PWR5-NEXT:    rldicl 6, 3, 60, 4
20687; PWR5-NEXT:    ori 9, 9, 257
20688; PWR5-NEXT:    rldimi 7, 7, 32, 0
20689; PWR5-NEXT:    add 4, 5, 4
20690; PWR5-NEXT:    add 3, 3, 6
20691; PWR5-NEXT:    rldimi 9, 9, 32, 0
20692; PWR5-NEXT:    rldicl 5, 4, 60, 4
20693; PWR5-NEXT:    and 3, 3, 7
20694; PWR5-NEXT:    add 4, 4, 5
20695; PWR5-NEXT:    mulld 3, 3, 9
20696; PWR5-NEXT:    and 4, 4, 7
20697; PWR5-NEXT:    rldicl 3, 3, 8, 56
20698; PWR5-NEXT:    mulld 4, 4, 9
20699; PWR5-NEXT:    li 5, 34
20700; PWR5-NEXT:    subfic 3, 3, 34
20701; PWR5-NEXT:    rldicl 4, 4, 8, 56
20702; PWR5-NEXT:    subfe 3, 5, 5
20703; PWR5-NEXT:    subfic 4, 4, 34
20704; PWR5-NEXT:    subfe 4, 5, 5
20705; PWR5-NEXT:    blr
20706;
20707; PWR6-LABEL: ugt_34_v2i64:
20708; PWR6:       # %bb.0:
20709; PWR6-NEXT:    lis 5, 21845
20710; PWR6-NEXT:    lis 6, 13107
20711; PWR6-NEXT:    ori 5, 5, 21845
20712; PWR6-NEXT:    rotldi 8, 4, 63
20713; PWR6-NEXT:    rotldi 9, 3, 63
20714; PWR6-NEXT:    rldimi 5, 5, 32, 0
20715; PWR6-NEXT:    and 8, 8, 5
20716; PWR6-NEXT:    and 5, 9, 5
20717; PWR6-NEXT:    ori 6, 6, 13107
20718; PWR6-NEXT:    sub 3, 3, 5
20719; PWR6-NEXT:    rldimi 6, 6, 32, 0
20720; PWR6-NEXT:    sub 4, 4, 8
20721; PWR6-NEXT:    and 8, 3, 6
20722; PWR6-NEXT:    rotldi 3, 3, 62
20723; PWR6-NEXT:    and 3, 3, 6
20724; PWR6-NEXT:    lis 7, 3855
20725; PWR6-NEXT:    and 5, 4, 6
20726; PWR6-NEXT:    rotldi 4, 4, 62
20727; PWR6-NEXT:    add 3, 8, 3
20728; PWR6-NEXT:    lis 9, 257
20729; PWR6-NEXT:    ori 7, 7, 3855
20730; PWR6-NEXT:    and 4, 4, 6
20731; PWR6-NEXT:    rldicl 6, 3, 60, 4
20732; PWR6-NEXT:    ori 9, 9, 257
20733; PWR6-NEXT:    rldimi 7, 7, 32, 0
20734; PWR6-NEXT:    add 4, 5, 4
20735; PWR6-NEXT:    add 3, 3, 6
20736; PWR6-NEXT:    rldimi 9, 9, 32, 0
20737; PWR6-NEXT:    rldicl 5, 4, 60, 4
20738; PWR6-NEXT:    and 3, 3, 7
20739; PWR6-NEXT:    add 4, 4, 5
20740; PWR6-NEXT:    mulld 3, 3, 9
20741; PWR6-NEXT:    and 4, 4, 7
20742; PWR6-NEXT:    rldicl 3, 3, 8, 56
20743; PWR6-NEXT:    mulld 4, 4, 9
20744; PWR6-NEXT:    li 5, 34
20745; PWR6-NEXT:    subfic 3, 3, 34
20746; PWR6-NEXT:    rldicl 4, 4, 8, 56
20747; PWR6-NEXT:    subfe 3, 5, 5
20748; PWR6-NEXT:    subfic 4, 4, 34
20749; PWR6-NEXT:    subfe 4, 5, 5
20750; PWR6-NEXT:    blr
20751;
20752; PWR7-LABEL: ugt_34_v2i64:
20753; PWR7:       # %bb.0:
20754; PWR7-NEXT:    addi 3, 1, -32
20755; PWR7-NEXT:    li 5, -1
20756; PWR7-NEXT:    stxvd2x 34, 0, 3
20757; PWR7-NEXT:    ld 4, -24(1)
20758; PWR7-NEXT:    ld 3, -32(1)
20759; PWR7-NEXT:    popcntd 4, 4
20760; PWR7-NEXT:    popcntd 3, 3
20761; PWR7-NEXT:    cmpldi 4, 34
20762; PWR7-NEXT:    li 4, 0
20763; PWR7-NEXT:    iselgt 6, 5, 4
20764; PWR7-NEXT:    cmpldi 3, 34
20765; PWR7-NEXT:    iselgt 3, 5, 4
20766; PWR7-NEXT:    std 6, -8(1)
20767; PWR7-NEXT:    std 3, -16(1)
20768; PWR7-NEXT:    addi 3, 1, -16
20769; PWR7-NEXT:    lxvd2x 34, 0, 3
20770; PWR7-NEXT:    blr
20771;
20772; PWR8-LABEL: ugt_34_v2i64:
20773; PWR8:       # %bb.0:
20774; PWR8-NEXT:    addis 3, 2, .LCPI166_0@toc@ha
20775; PWR8-NEXT:    vpopcntd 2, 2
20776; PWR8-NEXT:    addi 3, 3, .LCPI166_0@toc@l
20777; PWR8-NEXT:    lxvd2x 35, 0, 3
20778; PWR8-NEXT:    vcmpgtud 2, 2, 3
20779; PWR8-NEXT:    blr
20780;
20781; PWR9-LABEL: ugt_34_v2i64:
20782; PWR9:       # %bb.0:
20783; PWR9-NEXT:    addis 3, 2, .LCPI166_0@toc@ha
20784; PWR9-NEXT:    vpopcntd 2, 2
20785; PWR9-NEXT:    addi 3, 3, .LCPI166_0@toc@l
20786; PWR9-NEXT:    lxv 35, 0(3)
20787; PWR9-NEXT:    vcmpgtud 2, 2, 3
20788; PWR9-NEXT:    blr
20789  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20790  %3 = icmp ugt <2 x i64> %2, <i64 34, i64 34>
20791  %4 = sext <2 x i1> %3 to <2 x i64>
20792  ret <2 x i64> %4
20793}
20794
20795define <2 x i64> @ult_35_v2i64(<2 x i64> %0) {
20796; PWR5-LABEL: ult_35_v2i64:
20797; PWR5:       # %bb.0:
20798; PWR5-NEXT:    lis 5, 21845
20799; PWR5-NEXT:    lis 6, 13107
20800; PWR5-NEXT:    ori 5, 5, 21845
20801; PWR5-NEXT:    rotldi 8, 4, 63
20802; PWR5-NEXT:    rotldi 9, 3, 63
20803; PWR5-NEXT:    rldimi 5, 5, 32, 0
20804; PWR5-NEXT:    and 8, 8, 5
20805; PWR5-NEXT:    and 5, 9, 5
20806; PWR5-NEXT:    ori 6, 6, 13107
20807; PWR5-NEXT:    sub 3, 3, 5
20808; PWR5-NEXT:    rldimi 6, 6, 32, 0
20809; PWR5-NEXT:    sub 4, 4, 8
20810; PWR5-NEXT:    and 8, 3, 6
20811; PWR5-NEXT:    rotldi 3, 3, 62
20812; PWR5-NEXT:    and 3, 3, 6
20813; PWR5-NEXT:    lis 7, 3855
20814; PWR5-NEXT:    and 5, 4, 6
20815; PWR5-NEXT:    rotldi 4, 4, 62
20816; PWR5-NEXT:    add 3, 8, 3
20817; PWR5-NEXT:    lis 9, 257
20818; PWR5-NEXT:    ori 7, 7, 3855
20819; PWR5-NEXT:    and 4, 4, 6
20820; PWR5-NEXT:    rldicl 6, 3, 60, 4
20821; PWR5-NEXT:    ori 9, 9, 257
20822; PWR5-NEXT:    rldimi 7, 7, 32, 0
20823; PWR5-NEXT:    add 4, 5, 4
20824; PWR5-NEXT:    add 3, 3, 6
20825; PWR5-NEXT:    rldimi 9, 9, 32, 0
20826; PWR5-NEXT:    rldicl 5, 4, 60, 4
20827; PWR5-NEXT:    and 3, 3, 7
20828; PWR5-NEXT:    add 4, 4, 5
20829; PWR5-NEXT:    mulld 3, 3, 9
20830; PWR5-NEXT:    and 4, 4, 7
20831; PWR5-NEXT:    rldicl 3, 3, 8, 56
20832; PWR5-NEXT:    li 5, 35
20833; PWR5-NEXT:    mulld 4, 4, 9
20834; PWR5-NEXT:    subc 6, 3, 5
20835; PWR5-NEXT:    rldicl 4, 4, 8, 56
20836; PWR5-NEXT:    subfe 3, 3, 3
20837; PWR5-NEXT:    subc 5, 4, 5
20838; PWR5-NEXT:    subfe 4, 4, 4
20839; PWR5-NEXT:    blr
20840;
20841; PWR6-LABEL: ult_35_v2i64:
20842; PWR6:       # %bb.0:
20843; PWR6-NEXT:    lis 5, 21845
20844; PWR6-NEXT:    lis 6, 13107
20845; PWR6-NEXT:    ori 5, 5, 21845
20846; PWR6-NEXT:    rotldi 8, 4, 63
20847; PWR6-NEXT:    rotldi 9, 3, 63
20848; PWR6-NEXT:    rldimi 5, 5, 32, 0
20849; PWR6-NEXT:    and 8, 8, 5
20850; PWR6-NEXT:    and 5, 9, 5
20851; PWR6-NEXT:    ori 6, 6, 13107
20852; PWR6-NEXT:    sub 3, 3, 5
20853; PWR6-NEXT:    rldimi 6, 6, 32, 0
20854; PWR6-NEXT:    sub 4, 4, 8
20855; PWR6-NEXT:    and 8, 3, 6
20856; PWR6-NEXT:    rotldi 3, 3, 62
20857; PWR6-NEXT:    and 3, 3, 6
20858; PWR6-NEXT:    lis 7, 3855
20859; PWR6-NEXT:    and 5, 4, 6
20860; PWR6-NEXT:    rotldi 4, 4, 62
20861; PWR6-NEXT:    add 3, 8, 3
20862; PWR6-NEXT:    lis 9, 257
20863; PWR6-NEXT:    ori 7, 7, 3855
20864; PWR6-NEXT:    and 4, 4, 6
20865; PWR6-NEXT:    rldicl 6, 3, 60, 4
20866; PWR6-NEXT:    ori 9, 9, 257
20867; PWR6-NEXT:    rldimi 7, 7, 32, 0
20868; PWR6-NEXT:    add 4, 5, 4
20869; PWR6-NEXT:    add 3, 3, 6
20870; PWR6-NEXT:    rldimi 9, 9, 32, 0
20871; PWR6-NEXT:    rldicl 5, 4, 60, 4
20872; PWR6-NEXT:    and 3, 3, 7
20873; PWR6-NEXT:    add 4, 4, 5
20874; PWR6-NEXT:    mulld 3, 3, 9
20875; PWR6-NEXT:    and 4, 4, 7
20876; PWR6-NEXT:    rldicl 3, 3, 8, 56
20877; PWR6-NEXT:    li 5, 35
20878; PWR6-NEXT:    mulld 4, 4, 9
20879; PWR6-NEXT:    subc 6, 3, 5
20880; PWR6-NEXT:    rldicl 4, 4, 8, 56
20881; PWR6-NEXT:    subfe 3, 3, 3
20882; PWR6-NEXT:    subc 5, 4, 5
20883; PWR6-NEXT:    subfe 4, 4, 4
20884; PWR6-NEXT:    blr
20885;
20886; PWR7-LABEL: ult_35_v2i64:
20887; PWR7:       # %bb.0:
20888; PWR7-NEXT:    addi 3, 1, -32
20889; PWR7-NEXT:    li 5, -1
20890; PWR7-NEXT:    stxvd2x 34, 0, 3
20891; PWR7-NEXT:    ld 4, -24(1)
20892; PWR7-NEXT:    ld 3, -32(1)
20893; PWR7-NEXT:    popcntd 4, 4
20894; PWR7-NEXT:    popcntd 3, 3
20895; PWR7-NEXT:    cmpldi 4, 35
20896; PWR7-NEXT:    li 4, 0
20897; PWR7-NEXT:    isellt 6, 5, 4
20898; PWR7-NEXT:    cmpldi 3, 35
20899; PWR7-NEXT:    isellt 3, 5, 4
20900; PWR7-NEXT:    std 6, -8(1)
20901; PWR7-NEXT:    std 3, -16(1)
20902; PWR7-NEXT:    addi 3, 1, -16
20903; PWR7-NEXT:    lxvd2x 34, 0, 3
20904; PWR7-NEXT:    blr
20905;
20906; PWR8-LABEL: ult_35_v2i64:
20907; PWR8:       # %bb.0:
20908; PWR8-NEXT:    addis 3, 2, .LCPI167_0@toc@ha
20909; PWR8-NEXT:    vpopcntd 2, 2
20910; PWR8-NEXT:    addi 3, 3, .LCPI167_0@toc@l
20911; PWR8-NEXT:    lxvd2x 35, 0, 3
20912; PWR8-NEXT:    vcmpgtud 2, 3, 2
20913; PWR8-NEXT:    blr
20914;
20915; PWR9-LABEL: ult_35_v2i64:
20916; PWR9:       # %bb.0:
20917; PWR9-NEXT:    addis 3, 2, .LCPI167_0@toc@ha
20918; PWR9-NEXT:    vpopcntd 2, 2
20919; PWR9-NEXT:    addi 3, 3, .LCPI167_0@toc@l
20920; PWR9-NEXT:    lxv 35, 0(3)
20921; PWR9-NEXT:    vcmpgtud 2, 3, 2
20922; PWR9-NEXT:    blr
20923  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20924  %3 = icmp ult <2 x i64> %2, <i64 35, i64 35>
20925  %4 = sext <2 x i1> %3 to <2 x i64>
20926  ret <2 x i64> %4
20927}
20928
20929define <2 x i64> @ugt_35_v2i64(<2 x i64> %0) {
20930; PWR5-LABEL: ugt_35_v2i64:
20931; PWR5:       # %bb.0:
20932; PWR5-NEXT:    lis 5, 21845
20933; PWR5-NEXT:    lis 6, 13107
20934; PWR5-NEXT:    ori 5, 5, 21845
20935; PWR5-NEXT:    rotldi 8, 4, 63
20936; PWR5-NEXT:    rotldi 9, 3, 63
20937; PWR5-NEXT:    rldimi 5, 5, 32, 0
20938; PWR5-NEXT:    and 8, 8, 5
20939; PWR5-NEXT:    and 5, 9, 5
20940; PWR5-NEXT:    ori 6, 6, 13107
20941; PWR5-NEXT:    sub 3, 3, 5
20942; PWR5-NEXT:    rldimi 6, 6, 32, 0
20943; PWR5-NEXT:    sub 4, 4, 8
20944; PWR5-NEXT:    and 8, 3, 6
20945; PWR5-NEXT:    rotldi 3, 3, 62
20946; PWR5-NEXT:    and 3, 3, 6
20947; PWR5-NEXT:    lis 7, 3855
20948; PWR5-NEXT:    and 5, 4, 6
20949; PWR5-NEXT:    rotldi 4, 4, 62
20950; PWR5-NEXT:    add 3, 8, 3
20951; PWR5-NEXT:    lis 9, 257
20952; PWR5-NEXT:    ori 7, 7, 3855
20953; PWR5-NEXT:    and 4, 4, 6
20954; PWR5-NEXT:    rldicl 6, 3, 60, 4
20955; PWR5-NEXT:    ori 9, 9, 257
20956; PWR5-NEXT:    rldimi 7, 7, 32, 0
20957; PWR5-NEXT:    add 4, 5, 4
20958; PWR5-NEXT:    add 3, 3, 6
20959; PWR5-NEXT:    rldimi 9, 9, 32, 0
20960; PWR5-NEXT:    rldicl 5, 4, 60, 4
20961; PWR5-NEXT:    and 3, 3, 7
20962; PWR5-NEXT:    add 4, 4, 5
20963; PWR5-NEXT:    mulld 3, 3, 9
20964; PWR5-NEXT:    and 4, 4, 7
20965; PWR5-NEXT:    rldicl 3, 3, 8, 56
20966; PWR5-NEXT:    mulld 4, 4, 9
20967; PWR5-NEXT:    li 5, 35
20968; PWR5-NEXT:    subfic 3, 3, 35
20969; PWR5-NEXT:    rldicl 4, 4, 8, 56
20970; PWR5-NEXT:    subfe 3, 5, 5
20971; PWR5-NEXT:    subfic 4, 4, 35
20972; PWR5-NEXT:    subfe 4, 5, 5
20973; PWR5-NEXT:    blr
20974;
20975; PWR6-LABEL: ugt_35_v2i64:
20976; PWR6:       # %bb.0:
20977; PWR6-NEXT:    lis 5, 21845
20978; PWR6-NEXT:    lis 6, 13107
20979; PWR6-NEXT:    ori 5, 5, 21845
20980; PWR6-NEXT:    rotldi 8, 4, 63
20981; PWR6-NEXT:    rotldi 9, 3, 63
20982; PWR6-NEXT:    rldimi 5, 5, 32, 0
20983; PWR6-NEXT:    and 8, 8, 5
20984; PWR6-NEXT:    and 5, 9, 5
20985; PWR6-NEXT:    ori 6, 6, 13107
20986; PWR6-NEXT:    sub 3, 3, 5
20987; PWR6-NEXT:    rldimi 6, 6, 32, 0
20988; PWR6-NEXT:    sub 4, 4, 8
20989; PWR6-NEXT:    and 8, 3, 6
20990; PWR6-NEXT:    rotldi 3, 3, 62
20991; PWR6-NEXT:    and 3, 3, 6
20992; PWR6-NEXT:    lis 7, 3855
20993; PWR6-NEXT:    and 5, 4, 6
20994; PWR6-NEXT:    rotldi 4, 4, 62
20995; PWR6-NEXT:    add 3, 8, 3
20996; PWR6-NEXT:    lis 9, 257
20997; PWR6-NEXT:    ori 7, 7, 3855
20998; PWR6-NEXT:    and 4, 4, 6
20999; PWR6-NEXT:    rldicl 6, 3, 60, 4
21000; PWR6-NEXT:    ori 9, 9, 257
21001; PWR6-NEXT:    rldimi 7, 7, 32, 0
21002; PWR6-NEXT:    add 4, 5, 4
21003; PWR6-NEXT:    add 3, 3, 6
21004; PWR6-NEXT:    rldimi 9, 9, 32, 0
21005; PWR6-NEXT:    rldicl 5, 4, 60, 4
21006; PWR6-NEXT:    and 3, 3, 7
21007; PWR6-NEXT:    add 4, 4, 5
21008; PWR6-NEXT:    mulld 3, 3, 9
21009; PWR6-NEXT:    and 4, 4, 7
21010; PWR6-NEXT:    rldicl 3, 3, 8, 56
21011; PWR6-NEXT:    mulld 4, 4, 9
21012; PWR6-NEXT:    li 5, 35
21013; PWR6-NEXT:    subfic 3, 3, 35
21014; PWR6-NEXT:    rldicl 4, 4, 8, 56
21015; PWR6-NEXT:    subfe 3, 5, 5
21016; PWR6-NEXT:    subfic 4, 4, 35
21017; PWR6-NEXT:    subfe 4, 5, 5
21018; PWR6-NEXT:    blr
21019;
21020; PWR7-LABEL: ugt_35_v2i64:
21021; PWR7:       # %bb.0:
21022; PWR7-NEXT:    addi 3, 1, -32
21023; PWR7-NEXT:    li 5, -1
21024; PWR7-NEXT:    stxvd2x 34, 0, 3
21025; PWR7-NEXT:    ld 4, -24(1)
21026; PWR7-NEXT:    ld 3, -32(1)
21027; PWR7-NEXT:    popcntd 4, 4
21028; PWR7-NEXT:    popcntd 3, 3
21029; PWR7-NEXT:    cmpldi 4, 35
21030; PWR7-NEXT:    li 4, 0
21031; PWR7-NEXT:    iselgt 6, 5, 4
21032; PWR7-NEXT:    cmpldi 3, 35
21033; PWR7-NEXT:    iselgt 3, 5, 4
21034; PWR7-NEXT:    std 6, -8(1)
21035; PWR7-NEXT:    std 3, -16(1)
21036; PWR7-NEXT:    addi 3, 1, -16
21037; PWR7-NEXT:    lxvd2x 34, 0, 3
21038; PWR7-NEXT:    blr
21039;
21040; PWR8-LABEL: ugt_35_v2i64:
21041; PWR8:       # %bb.0:
21042; PWR8-NEXT:    addis 3, 2, .LCPI168_0@toc@ha
21043; PWR8-NEXT:    vpopcntd 2, 2
21044; PWR8-NEXT:    addi 3, 3, .LCPI168_0@toc@l
21045; PWR8-NEXT:    lxvd2x 35, 0, 3
21046; PWR8-NEXT:    vcmpgtud 2, 2, 3
21047; PWR8-NEXT:    blr
21048;
21049; PWR9-LABEL: ugt_35_v2i64:
21050; PWR9:       # %bb.0:
21051; PWR9-NEXT:    addis 3, 2, .LCPI168_0@toc@ha
21052; PWR9-NEXT:    vpopcntd 2, 2
21053; PWR9-NEXT:    addi 3, 3, .LCPI168_0@toc@l
21054; PWR9-NEXT:    lxv 35, 0(3)
21055; PWR9-NEXT:    vcmpgtud 2, 2, 3
21056; PWR9-NEXT:    blr
21057  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21058  %3 = icmp ugt <2 x i64> %2, <i64 35, i64 35>
21059  %4 = sext <2 x i1> %3 to <2 x i64>
21060  ret <2 x i64> %4
21061}
21062
21063define <2 x i64> @ult_36_v2i64(<2 x i64> %0) {
21064; PWR5-LABEL: ult_36_v2i64:
21065; PWR5:       # %bb.0:
21066; PWR5-NEXT:    lis 5, 21845
21067; PWR5-NEXT:    lis 6, 13107
21068; PWR5-NEXT:    ori 5, 5, 21845
21069; PWR5-NEXT:    rotldi 8, 4, 63
21070; PWR5-NEXT:    rotldi 9, 3, 63
21071; PWR5-NEXT:    rldimi 5, 5, 32, 0
21072; PWR5-NEXT:    and 8, 8, 5
21073; PWR5-NEXT:    and 5, 9, 5
21074; PWR5-NEXT:    ori 6, 6, 13107
21075; PWR5-NEXT:    sub 3, 3, 5
21076; PWR5-NEXT:    rldimi 6, 6, 32, 0
21077; PWR5-NEXT:    sub 4, 4, 8
21078; PWR5-NEXT:    and 8, 3, 6
21079; PWR5-NEXT:    rotldi 3, 3, 62
21080; PWR5-NEXT:    and 3, 3, 6
21081; PWR5-NEXT:    lis 7, 3855
21082; PWR5-NEXT:    and 5, 4, 6
21083; PWR5-NEXT:    rotldi 4, 4, 62
21084; PWR5-NEXT:    add 3, 8, 3
21085; PWR5-NEXT:    lis 9, 257
21086; PWR5-NEXT:    ori 7, 7, 3855
21087; PWR5-NEXT:    and 4, 4, 6
21088; PWR5-NEXT:    rldicl 6, 3, 60, 4
21089; PWR5-NEXT:    ori 9, 9, 257
21090; PWR5-NEXT:    rldimi 7, 7, 32, 0
21091; PWR5-NEXT:    add 4, 5, 4
21092; PWR5-NEXT:    add 3, 3, 6
21093; PWR5-NEXT:    rldimi 9, 9, 32, 0
21094; PWR5-NEXT:    rldicl 5, 4, 60, 4
21095; PWR5-NEXT:    and 3, 3, 7
21096; PWR5-NEXT:    add 4, 4, 5
21097; PWR5-NEXT:    mulld 3, 3, 9
21098; PWR5-NEXT:    and 4, 4, 7
21099; PWR5-NEXT:    rldicl 3, 3, 8, 56
21100; PWR5-NEXT:    li 5, 36
21101; PWR5-NEXT:    mulld 4, 4, 9
21102; PWR5-NEXT:    subc 6, 3, 5
21103; PWR5-NEXT:    rldicl 4, 4, 8, 56
21104; PWR5-NEXT:    subfe 3, 3, 3
21105; PWR5-NEXT:    subc 5, 4, 5
21106; PWR5-NEXT:    subfe 4, 4, 4
21107; PWR5-NEXT:    blr
21108;
21109; PWR6-LABEL: ult_36_v2i64:
21110; PWR6:       # %bb.0:
21111; PWR6-NEXT:    lis 5, 21845
21112; PWR6-NEXT:    lis 6, 13107
21113; PWR6-NEXT:    ori 5, 5, 21845
21114; PWR6-NEXT:    rotldi 8, 4, 63
21115; PWR6-NEXT:    rotldi 9, 3, 63
21116; PWR6-NEXT:    rldimi 5, 5, 32, 0
21117; PWR6-NEXT:    and 8, 8, 5
21118; PWR6-NEXT:    and 5, 9, 5
21119; PWR6-NEXT:    ori 6, 6, 13107
21120; PWR6-NEXT:    sub 3, 3, 5
21121; PWR6-NEXT:    rldimi 6, 6, 32, 0
21122; PWR6-NEXT:    sub 4, 4, 8
21123; PWR6-NEXT:    and 8, 3, 6
21124; PWR6-NEXT:    rotldi 3, 3, 62
21125; PWR6-NEXT:    and 3, 3, 6
21126; PWR6-NEXT:    lis 7, 3855
21127; PWR6-NEXT:    and 5, 4, 6
21128; PWR6-NEXT:    rotldi 4, 4, 62
21129; PWR6-NEXT:    add 3, 8, 3
21130; PWR6-NEXT:    lis 9, 257
21131; PWR6-NEXT:    ori 7, 7, 3855
21132; PWR6-NEXT:    and 4, 4, 6
21133; PWR6-NEXT:    rldicl 6, 3, 60, 4
21134; PWR6-NEXT:    ori 9, 9, 257
21135; PWR6-NEXT:    rldimi 7, 7, 32, 0
21136; PWR6-NEXT:    add 4, 5, 4
21137; PWR6-NEXT:    add 3, 3, 6
21138; PWR6-NEXT:    rldimi 9, 9, 32, 0
21139; PWR6-NEXT:    rldicl 5, 4, 60, 4
21140; PWR6-NEXT:    and 3, 3, 7
21141; PWR6-NEXT:    add 4, 4, 5
21142; PWR6-NEXT:    mulld 3, 3, 9
21143; PWR6-NEXT:    and 4, 4, 7
21144; PWR6-NEXT:    rldicl 3, 3, 8, 56
21145; PWR6-NEXT:    li 5, 36
21146; PWR6-NEXT:    mulld 4, 4, 9
21147; PWR6-NEXT:    subc 6, 3, 5
21148; PWR6-NEXT:    rldicl 4, 4, 8, 56
21149; PWR6-NEXT:    subfe 3, 3, 3
21150; PWR6-NEXT:    subc 5, 4, 5
21151; PWR6-NEXT:    subfe 4, 4, 4
21152; PWR6-NEXT:    blr
21153;
21154; PWR7-LABEL: ult_36_v2i64:
21155; PWR7:       # %bb.0:
21156; PWR7-NEXT:    addi 3, 1, -32
21157; PWR7-NEXT:    li 5, -1
21158; PWR7-NEXT:    stxvd2x 34, 0, 3
21159; PWR7-NEXT:    ld 4, -24(1)
21160; PWR7-NEXT:    ld 3, -32(1)
21161; PWR7-NEXT:    popcntd 4, 4
21162; PWR7-NEXT:    popcntd 3, 3
21163; PWR7-NEXT:    cmpldi 4, 36
21164; PWR7-NEXT:    li 4, 0
21165; PWR7-NEXT:    isellt 6, 5, 4
21166; PWR7-NEXT:    cmpldi 3, 36
21167; PWR7-NEXT:    isellt 3, 5, 4
21168; PWR7-NEXT:    std 6, -8(1)
21169; PWR7-NEXT:    std 3, -16(1)
21170; PWR7-NEXT:    addi 3, 1, -16
21171; PWR7-NEXT:    lxvd2x 34, 0, 3
21172; PWR7-NEXT:    blr
21173;
21174; PWR8-LABEL: ult_36_v2i64:
21175; PWR8:       # %bb.0:
21176; PWR8-NEXT:    addis 3, 2, .LCPI169_0@toc@ha
21177; PWR8-NEXT:    vpopcntd 2, 2
21178; PWR8-NEXT:    addi 3, 3, .LCPI169_0@toc@l
21179; PWR8-NEXT:    lxvd2x 35, 0, 3
21180; PWR8-NEXT:    vcmpgtud 2, 3, 2
21181; PWR8-NEXT:    blr
21182;
21183; PWR9-LABEL: ult_36_v2i64:
21184; PWR9:       # %bb.0:
21185; PWR9-NEXT:    addis 3, 2, .LCPI169_0@toc@ha
21186; PWR9-NEXT:    vpopcntd 2, 2
21187; PWR9-NEXT:    addi 3, 3, .LCPI169_0@toc@l
21188; PWR9-NEXT:    lxv 35, 0(3)
21189; PWR9-NEXT:    vcmpgtud 2, 3, 2
21190; PWR9-NEXT:    blr
21191  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21192  %3 = icmp ult <2 x i64> %2, <i64 36, i64 36>
21193  %4 = sext <2 x i1> %3 to <2 x i64>
21194  ret <2 x i64> %4
21195}
21196
21197define <2 x i64> @ugt_36_v2i64(<2 x i64> %0) {
21198; PWR5-LABEL: ugt_36_v2i64:
21199; PWR5:       # %bb.0:
21200; PWR5-NEXT:    lis 5, 21845
21201; PWR5-NEXT:    lis 6, 13107
21202; PWR5-NEXT:    ori 5, 5, 21845
21203; PWR5-NEXT:    rotldi 8, 4, 63
21204; PWR5-NEXT:    rotldi 9, 3, 63
21205; PWR5-NEXT:    rldimi 5, 5, 32, 0
21206; PWR5-NEXT:    and 8, 8, 5
21207; PWR5-NEXT:    and 5, 9, 5
21208; PWR5-NEXT:    ori 6, 6, 13107
21209; PWR5-NEXT:    sub 3, 3, 5
21210; PWR5-NEXT:    rldimi 6, 6, 32, 0
21211; PWR5-NEXT:    sub 4, 4, 8
21212; PWR5-NEXT:    and 8, 3, 6
21213; PWR5-NEXT:    rotldi 3, 3, 62
21214; PWR5-NEXT:    and 3, 3, 6
21215; PWR5-NEXT:    lis 7, 3855
21216; PWR5-NEXT:    and 5, 4, 6
21217; PWR5-NEXT:    rotldi 4, 4, 62
21218; PWR5-NEXT:    add 3, 8, 3
21219; PWR5-NEXT:    lis 9, 257
21220; PWR5-NEXT:    ori 7, 7, 3855
21221; PWR5-NEXT:    and 4, 4, 6
21222; PWR5-NEXT:    rldicl 6, 3, 60, 4
21223; PWR5-NEXT:    ori 9, 9, 257
21224; PWR5-NEXT:    rldimi 7, 7, 32, 0
21225; PWR5-NEXT:    add 4, 5, 4
21226; PWR5-NEXT:    add 3, 3, 6
21227; PWR5-NEXT:    rldimi 9, 9, 32, 0
21228; PWR5-NEXT:    rldicl 5, 4, 60, 4
21229; PWR5-NEXT:    and 3, 3, 7
21230; PWR5-NEXT:    add 4, 4, 5
21231; PWR5-NEXT:    mulld 3, 3, 9
21232; PWR5-NEXT:    and 4, 4, 7
21233; PWR5-NEXT:    rldicl 3, 3, 8, 56
21234; PWR5-NEXT:    mulld 4, 4, 9
21235; PWR5-NEXT:    li 5, 36
21236; PWR5-NEXT:    subfic 3, 3, 36
21237; PWR5-NEXT:    rldicl 4, 4, 8, 56
21238; PWR5-NEXT:    subfe 3, 5, 5
21239; PWR5-NEXT:    subfic 4, 4, 36
21240; PWR5-NEXT:    subfe 4, 5, 5
21241; PWR5-NEXT:    blr
21242;
21243; PWR6-LABEL: ugt_36_v2i64:
21244; PWR6:       # %bb.0:
21245; PWR6-NEXT:    lis 5, 21845
21246; PWR6-NEXT:    lis 6, 13107
21247; PWR6-NEXT:    ori 5, 5, 21845
21248; PWR6-NEXT:    rotldi 8, 4, 63
21249; PWR6-NEXT:    rotldi 9, 3, 63
21250; PWR6-NEXT:    rldimi 5, 5, 32, 0
21251; PWR6-NEXT:    and 8, 8, 5
21252; PWR6-NEXT:    and 5, 9, 5
21253; PWR6-NEXT:    ori 6, 6, 13107
21254; PWR6-NEXT:    sub 3, 3, 5
21255; PWR6-NEXT:    rldimi 6, 6, 32, 0
21256; PWR6-NEXT:    sub 4, 4, 8
21257; PWR6-NEXT:    and 8, 3, 6
21258; PWR6-NEXT:    rotldi 3, 3, 62
21259; PWR6-NEXT:    and 3, 3, 6
21260; PWR6-NEXT:    lis 7, 3855
21261; PWR6-NEXT:    and 5, 4, 6
21262; PWR6-NEXT:    rotldi 4, 4, 62
21263; PWR6-NEXT:    add 3, 8, 3
21264; PWR6-NEXT:    lis 9, 257
21265; PWR6-NEXT:    ori 7, 7, 3855
21266; PWR6-NEXT:    and 4, 4, 6
21267; PWR6-NEXT:    rldicl 6, 3, 60, 4
21268; PWR6-NEXT:    ori 9, 9, 257
21269; PWR6-NEXT:    rldimi 7, 7, 32, 0
21270; PWR6-NEXT:    add 4, 5, 4
21271; PWR6-NEXT:    add 3, 3, 6
21272; PWR6-NEXT:    rldimi 9, 9, 32, 0
21273; PWR6-NEXT:    rldicl 5, 4, 60, 4
21274; PWR6-NEXT:    and 3, 3, 7
21275; PWR6-NEXT:    add 4, 4, 5
21276; PWR6-NEXT:    mulld 3, 3, 9
21277; PWR6-NEXT:    and 4, 4, 7
21278; PWR6-NEXT:    rldicl 3, 3, 8, 56
21279; PWR6-NEXT:    mulld 4, 4, 9
21280; PWR6-NEXT:    li 5, 36
21281; PWR6-NEXT:    subfic 3, 3, 36
21282; PWR6-NEXT:    rldicl 4, 4, 8, 56
21283; PWR6-NEXT:    subfe 3, 5, 5
21284; PWR6-NEXT:    subfic 4, 4, 36
21285; PWR6-NEXT:    subfe 4, 5, 5
21286; PWR6-NEXT:    blr
21287;
21288; PWR7-LABEL: ugt_36_v2i64:
21289; PWR7:       # %bb.0:
21290; PWR7-NEXT:    addi 3, 1, -32
21291; PWR7-NEXT:    li 5, -1
21292; PWR7-NEXT:    stxvd2x 34, 0, 3
21293; PWR7-NEXT:    ld 4, -24(1)
21294; PWR7-NEXT:    ld 3, -32(1)
21295; PWR7-NEXT:    popcntd 4, 4
21296; PWR7-NEXT:    popcntd 3, 3
21297; PWR7-NEXT:    cmpldi 4, 36
21298; PWR7-NEXT:    li 4, 0
21299; PWR7-NEXT:    iselgt 6, 5, 4
21300; PWR7-NEXT:    cmpldi 3, 36
21301; PWR7-NEXT:    iselgt 3, 5, 4
21302; PWR7-NEXT:    std 6, -8(1)
21303; PWR7-NEXT:    std 3, -16(1)
21304; PWR7-NEXT:    addi 3, 1, -16
21305; PWR7-NEXT:    lxvd2x 34, 0, 3
21306; PWR7-NEXT:    blr
21307;
21308; PWR8-LABEL: ugt_36_v2i64:
21309; PWR8:       # %bb.0:
21310; PWR8-NEXT:    addis 3, 2, .LCPI170_0@toc@ha
21311; PWR8-NEXT:    vpopcntd 2, 2
21312; PWR8-NEXT:    addi 3, 3, .LCPI170_0@toc@l
21313; PWR8-NEXT:    lxvd2x 35, 0, 3
21314; PWR8-NEXT:    vcmpgtud 2, 2, 3
21315; PWR8-NEXT:    blr
21316;
21317; PWR9-LABEL: ugt_36_v2i64:
21318; PWR9:       # %bb.0:
21319; PWR9-NEXT:    addis 3, 2, .LCPI170_0@toc@ha
21320; PWR9-NEXT:    vpopcntd 2, 2
21321; PWR9-NEXT:    addi 3, 3, .LCPI170_0@toc@l
21322; PWR9-NEXT:    lxv 35, 0(3)
21323; PWR9-NEXT:    vcmpgtud 2, 2, 3
21324; PWR9-NEXT:    blr
21325  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21326  %3 = icmp ugt <2 x i64> %2, <i64 36, i64 36>
21327  %4 = sext <2 x i1> %3 to <2 x i64>
21328  ret <2 x i64> %4
21329}
21330
21331define <2 x i64> @ult_37_v2i64(<2 x i64> %0) {
21332; PWR5-LABEL: ult_37_v2i64:
21333; PWR5:       # %bb.0:
21334; PWR5-NEXT:    lis 5, 21845
21335; PWR5-NEXT:    lis 6, 13107
21336; PWR5-NEXT:    ori 5, 5, 21845
21337; PWR5-NEXT:    rotldi 8, 4, 63
21338; PWR5-NEXT:    rotldi 9, 3, 63
21339; PWR5-NEXT:    rldimi 5, 5, 32, 0
21340; PWR5-NEXT:    and 8, 8, 5
21341; PWR5-NEXT:    and 5, 9, 5
21342; PWR5-NEXT:    ori 6, 6, 13107
21343; PWR5-NEXT:    sub 3, 3, 5
21344; PWR5-NEXT:    rldimi 6, 6, 32, 0
21345; PWR5-NEXT:    sub 4, 4, 8
21346; PWR5-NEXT:    and 8, 3, 6
21347; PWR5-NEXT:    rotldi 3, 3, 62
21348; PWR5-NEXT:    and 3, 3, 6
21349; PWR5-NEXT:    lis 7, 3855
21350; PWR5-NEXT:    and 5, 4, 6
21351; PWR5-NEXT:    rotldi 4, 4, 62
21352; PWR5-NEXT:    add 3, 8, 3
21353; PWR5-NEXT:    lis 9, 257
21354; PWR5-NEXT:    ori 7, 7, 3855
21355; PWR5-NEXT:    and 4, 4, 6
21356; PWR5-NEXT:    rldicl 6, 3, 60, 4
21357; PWR5-NEXT:    ori 9, 9, 257
21358; PWR5-NEXT:    rldimi 7, 7, 32, 0
21359; PWR5-NEXT:    add 4, 5, 4
21360; PWR5-NEXT:    add 3, 3, 6
21361; PWR5-NEXT:    rldimi 9, 9, 32, 0
21362; PWR5-NEXT:    rldicl 5, 4, 60, 4
21363; PWR5-NEXT:    and 3, 3, 7
21364; PWR5-NEXT:    add 4, 4, 5
21365; PWR5-NEXT:    mulld 3, 3, 9
21366; PWR5-NEXT:    and 4, 4, 7
21367; PWR5-NEXT:    rldicl 3, 3, 8, 56
21368; PWR5-NEXT:    li 5, 37
21369; PWR5-NEXT:    mulld 4, 4, 9
21370; PWR5-NEXT:    subc 6, 3, 5
21371; PWR5-NEXT:    rldicl 4, 4, 8, 56
21372; PWR5-NEXT:    subfe 3, 3, 3
21373; PWR5-NEXT:    subc 5, 4, 5
21374; PWR5-NEXT:    subfe 4, 4, 4
21375; PWR5-NEXT:    blr
21376;
21377; PWR6-LABEL: ult_37_v2i64:
21378; PWR6:       # %bb.0:
21379; PWR6-NEXT:    lis 5, 21845
21380; PWR6-NEXT:    lis 6, 13107
21381; PWR6-NEXT:    ori 5, 5, 21845
21382; PWR6-NEXT:    rotldi 8, 4, 63
21383; PWR6-NEXT:    rotldi 9, 3, 63
21384; PWR6-NEXT:    rldimi 5, 5, 32, 0
21385; PWR6-NEXT:    and 8, 8, 5
21386; PWR6-NEXT:    and 5, 9, 5
21387; PWR6-NEXT:    ori 6, 6, 13107
21388; PWR6-NEXT:    sub 3, 3, 5
21389; PWR6-NEXT:    rldimi 6, 6, 32, 0
21390; PWR6-NEXT:    sub 4, 4, 8
21391; PWR6-NEXT:    and 8, 3, 6
21392; PWR6-NEXT:    rotldi 3, 3, 62
21393; PWR6-NEXT:    and 3, 3, 6
21394; PWR6-NEXT:    lis 7, 3855
21395; PWR6-NEXT:    and 5, 4, 6
21396; PWR6-NEXT:    rotldi 4, 4, 62
21397; PWR6-NEXT:    add 3, 8, 3
21398; PWR6-NEXT:    lis 9, 257
21399; PWR6-NEXT:    ori 7, 7, 3855
21400; PWR6-NEXT:    and 4, 4, 6
21401; PWR6-NEXT:    rldicl 6, 3, 60, 4
21402; PWR6-NEXT:    ori 9, 9, 257
21403; PWR6-NEXT:    rldimi 7, 7, 32, 0
21404; PWR6-NEXT:    add 4, 5, 4
21405; PWR6-NEXT:    add 3, 3, 6
21406; PWR6-NEXT:    rldimi 9, 9, 32, 0
21407; PWR6-NEXT:    rldicl 5, 4, 60, 4
21408; PWR6-NEXT:    and 3, 3, 7
21409; PWR6-NEXT:    add 4, 4, 5
21410; PWR6-NEXT:    mulld 3, 3, 9
21411; PWR6-NEXT:    and 4, 4, 7
21412; PWR6-NEXT:    rldicl 3, 3, 8, 56
21413; PWR6-NEXT:    li 5, 37
21414; PWR6-NEXT:    mulld 4, 4, 9
21415; PWR6-NEXT:    subc 6, 3, 5
21416; PWR6-NEXT:    rldicl 4, 4, 8, 56
21417; PWR6-NEXT:    subfe 3, 3, 3
21418; PWR6-NEXT:    subc 5, 4, 5
21419; PWR6-NEXT:    subfe 4, 4, 4
21420; PWR6-NEXT:    blr
21421;
21422; PWR7-LABEL: ult_37_v2i64:
21423; PWR7:       # %bb.0:
21424; PWR7-NEXT:    addi 3, 1, -32
21425; PWR7-NEXT:    li 5, -1
21426; PWR7-NEXT:    stxvd2x 34, 0, 3
21427; PWR7-NEXT:    ld 4, -24(1)
21428; PWR7-NEXT:    ld 3, -32(1)
21429; PWR7-NEXT:    popcntd 4, 4
21430; PWR7-NEXT:    popcntd 3, 3
21431; PWR7-NEXT:    cmpldi 4, 37
21432; PWR7-NEXT:    li 4, 0
21433; PWR7-NEXT:    isellt 6, 5, 4
21434; PWR7-NEXT:    cmpldi 3, 37
21435; PWR7-NEXT:    isellt 3, 5, 4
21436; PWR7-NEXT:    std 6, -8(1)
21437; PWR7-NEXT:    std 3, -16(1)
21438; PWR7-NEXT:    addi 3, 1, -16
21439; PWR7-NEXT:    lxvd2x 34, 0, 3
21440; PWR7-NEXT:    blr
21441;
21442; PWR8-LABEL: ult_37_v2i64:
21443; PWR8:       # %bb.0:
21444; PWR8-NEXT:    addis 3, 2, .LCPI171_0@toc@ha
21445; PWR8-NEXT:    vpopcntd 2, 2
21446; PWR8-NEXT:    addi 3, 3, .LCPI171_0@toc@l
21447; PWR8-NEXT:    lxvd2x 35, 0, 3
21448; PWR8-NEXT:    vcmpgtud 2, 3, 2
21449; PWR8-NEXT:    blr
21450;
21451; PWR9-LABEL: ult_37_v2i64:
21452; PWR9:       # %bb.0:
21453; PWR9-NEXT:    addis 3, 2, .LCPI171_0@toc@ha
21454; PWR9-NEXT:    vpopcntd 2, 2
21455; PWR9-NEXT:    addi 3, 3, .LCPI171_0@toc@l
21456; PWR9-NEXT:    lxv 35, 0(3)
21457; PWR9-NEXT:    vcmpgtud 2, 3, 2
21458; PWR9-NEXT:    blr
21459  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21460  %3 = icmp ult <2 x i64> %2, <i64 37, i64 37>
21461  %4 = sext <2 x i1> %3 to <2 x i64>
21462  ret <2 x i64> %4
21463}
21464
21465define <2 x i64> @ugt_37_v2i64(<2 x i64> %0) {
21466; PWR5-LABEL: ugt_37_v2i64:
21467; PWR5:       # %bb.0:
21468; PWR5-NEXT:    lis 5, 21845
21469; PWR5-NEXT:    lis 6, 13107
21470; PWR5-NEXT:    ori 5, 5, 21845
21471; PWR5-NEXT:    rotldi 8, 4, 63
21472; PWR5-NEXT:    rotldi 9, 3, 63
21473; PWR5-NEXT:    rldimi 5, 5, 32, 0
21474; PWR5-NEXT:    and 8, 8, 5
21475; PWR5-NEXT:    and 5, 9, 5
21476; PWR5-NEXT:    ori 6, 6, 13107
21477; PWR5-NEXT:    sub 3, 3, 5
21478; PWR5-NEXT:    rldimi 6, 6, 32, 0
21479; PWR5-NEXT:    sub 4, 4, 8
21480; PWR5-NEXT:    and 8, 3, 6
21481; PWR5-NEXT:    rotldi 3, 3, 62
21482; PWR5-NEXT:    and 3, 3, 6
21483; PWR5-NEXT:    lis 7, 3855
21484; PWR5-NEXT:    and 5, 4, 6
21485; PWR5-NEXT:    rotldi 4, 4, 62
21486; PWR5-NEXT:    add 3, 8, 3
21487; PWR5-NEXT:    lis 9, 257
21488; PWR5-NEXT:    ori 7, 7, 3855
21489; PWR5-NEXT:    and 4, 4, 6
21490; PWR5-NEXT:    rldicl 6, 3, 60, 4
21491; PWR5-NEXT:    ori 9, 9, 257
21492; PWR5-NEXT:    rldimi 7, 7, 32, 0
21493; PWR5-NEXT:    add 4, 5, 4
21494; PWR5-NEXT:    add 3, 3, 6
21495; PWR5-NEXT:    rldimi 9, 9, 32, 0
21496; PWR5-NEXT:    rldicl 5, 4, 60, 4
21497; PWR5-NEXT:    and 3, 3, 7
21498; PWR5-NEXT:    add 4, 4, 5
21499; PWR5-NEXT:    mulld 3, 3, 9
21500; PWR5-NEXT:    and 4, 4, 7
21501; PWR5-NEXT:    rldicl 3, 3, 8, 56
21502; PWR5-NEXT:    mulld 4, 4, 9
21503; PWR5-NEXT:    li 5, 37
21504; PWR5-NEXT:    subfic 3, 3, 37
21505; PWR5-NEXT:    rldicl 4, 4, 8, 56
21506; PWR5-NEXT:    subfe 3, 5, 5
21507; PWR5-NEXT:    subfic 4, 4, 37
21508; PWR5-NEXT:    subfe 4, 5, 5
21509; PWR5-NEXT:    blr
21510;
21511; PWR6-LABEL: ugt_37_v2i64:
21512; PWR6:       # %bb.0:
21513; PWR6-NEXT:    lis 5, 21845
21514; PWR6-NEXT:    lis 6, 13107
21515; PWR6-NEXT:    ori 5, 5, 21845
21516; PWR6-NEXT:    rotldi 8, 4, 63
21517; PWR6-NEXT:    rotldi 9, 3, 63
21518; PWR6-NEXT:    rldimi 5, 5, 32, 0
21519; PWR6-NEXT:    and 8, 8, 5
21520; PWR6-NEXT:    and 5, 9, 5
21521; PWR6-NEXT:    ori 6, 6, 13107
21522; PWR6-NEXT:    sub 3, 3, 5
21523; PWR6-NEXT:    rldimi 6, 6, 32, 0
21524; PWR6-NEXT:    sub 4, 4, 8
21525; PWR6-NEXT:    and 8, 3, 6
21526; PWR6-NEXT:    rotldi 3, 3, 62
21527; PWR6-NEXT:    and 3, 3, 6
21528; PWR6-NEXT:    lis 7, 3855
21529; PWR6-NEXT:    and 5, 4, 6
21530; PWR6-NEXT:    rotldi 4, 4, 62
21531; PWR6-NEXT:    add 3, 8, 3
21532; PWR6-NEXT:    lis 9, 257
21533; PWR6-NEXT:    ori 7, 7, 3855
21534; PWR6-NEXT:    and 4, 4, 6
21535; PWR6-NEXT:    rldicl 6, 3, 60, 4
21536; PWR6-NEXT:    ori 9, 9, 257
21537; PWR6-NEXT:    rldimi 7, 7, 32, 0
21538; PWR6-NEXT:    add 4, 5, 4
21539; PWR6-NEXT:    add 3, 3, 6
21540; PWR6-NEXT:    rldimi 9, 9, 32, 0
21541; PWR6-NEXT:    rldicl 5, 4, 60, 4
21542; PWR6-NEXT:    and 3, 3, 7
21543; PWR6-NEXT:    add 4, 4, 5
21544; PWR6-NEXT:    mulld 3, 3, 9
21545; PWR6-NEXT:    and 4, 4, 7
21546; PWR6-NEXT:    rldicl 3, 3, 8, 56
21547; PWR6-NEXT:    mulld 4, 4, 9
21548; PWR6-NEXT:    li 5, 37
21549; PWR6-NEXT:    subfic 3, 3, 37
21550; PWR6-NEXT:    rldicl 4, 4, 8, 56
21551; PWR6-NEXT:    subfe 3, 5, 5
21552; PWR6-NEXT:    subfic 4, 4, 37
21553; PWR6-NEXT:    subfe 4, 5, 5
21554; PWR6-NEXT:    blr
21555;
21556; PWR7-LABEL: ugt_37_v2i64:
21557; PWR7:       # %bb.0:
21558; PWR7-NEXT:    addi 3, 1, -32
21559; PWR7-NEXT:    li 5, -1
21560; PWR7-NEXT:    stxvd2x 34, 0, 3
21561; PWR7-NEXT:    ld 4, -24(1)
21562; PWR7-NEXT:    ld 3, -32(1)
21563; PWR7-NEXT:    popcntd 4, 4
21564; PWR7-NEXT:    popcntd 3, 3
21565; PWR7-NEXT:    cmpldi 4, 37
21566; PWR7-NEXT:    li 4, 0
21567; PWR7-NEXT:    iselgt 6, 5, 4
21568; PWR7-NEXT:    cmpldi 3, 37
21569; PWR7-NEXT:    iselgt 3, 5, 4
21570; PWR7-NEXT:    std 6, -8(1)
21571; PWR7-NEXT:    std 3, -16(1)
21572; PWR7-NEXT:    addi 3, 1, -16
21573; PWR7-NEXT:    lxvd2x 34, 0, 3
21574; PWR7-NEXT:    blr
21575;
21576; PWR8-LABEL: ugt_37_v2i64:
21577; PWR8:       # %bb.0:
21578; PWR8-NEXT:    addis 3, 2, .LCPI172_0@toc@ha
21579; PWR8-NEXT:    vpopcntd 2, 2
21580; PWR8-NEXT:    addi 3, 3, .LCPI172_0@toc@l
21581; PWR8-NEXT:    lxvd2x 35, 0, 3
21582; PWR8-NEXT:    vcmpgtud 2, 2, 3
21583; PWR8-NEXT:    blr
21584;
21585; PWR9-LABEL: ugt_37_v2i64:
21586; PWR9:       # %bb.0:
21587; PWR9-NEXT:    addis 3, 2, .LCPI172_0@toc@ha
21588; PWR9-NEXT:    vpopcntd 2, 2
21589; PWR9-NEXT:    addi 3, 3, .LCPI172_0@toc@l
21590; PWR9-NEXT:    lxv 35, 0(3)
21591; PWR9-NEXT:    vcmpgtud 2, 2, 3
21592; PWR9-NEXT:    blr
21593  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21594  %3 = icmp ugt <2 x i64> %2, <i64 37, i64 37>
21595  %4 = sext <2 x i1> %3 to <2 x i64>
21596  ret <2 x i64> %4
21597}
21598
21599define <2 x i64> @ult_38_v2i64(<2 x i64> %0) {
21600; PWR5-LABEL: ult_38_v2i64:
21601; PWR5:       # %bb.0:
21602; PWR5-NEXT:    lis 5, 21845
21603; PWR5-NEXT:    lis 6, 13107
21604; PWR5-NEXT:    ori 5, 5, 21845
21605; PWR5-NEXT:    rotldi 8, 4, 63
21606; PWR5-NEXT:    rotldi 9, 3, 63
21607; PWR5-NEXT:    rldimi 5, 5, 32, 0
21608; PWR5-NEXT:    and 8, 8, 5
21609; PWR5-NEXT:    and 5, 9, 5
21610; PWR5-NEXT:    ori 6, 6, 13107
21611; PWR5-NEXT:    sub 3, 3, 5
21612; PWR5-NEXT:    rldimi 6, 6, 32, 0
21613; PWR5-NEXT:    sub 4, 4, 8
21614; PWR5-NEXT:    and 8, 3, 6
21615; PWR5-NEXT:    rotldi 3, 3, 62
21616; PWR5-NEXT:    and 3, 3, 6
21617; PWR5-NEXT:    lis 7, 3855
21618; PWR5-NEXT:    and 5, 4, 6
21619; PWR5-NEXT:    rotldi 4, 4, 62
21620; PWR5-NEXT:    add 3, 8, 3
21621; PWR5-NEXT:    lis 9, 257
21622; PWR5-NEXT:    ori 7, 7, 3855
21623; PWR5-NEXT:    and 4, 4, 6
21624; PWR5-NEXT:    rldicl 6, 3, 60, 4
21625; PWR5-NEXT:    ori 9, 9, 257
21626; PWR5-NEXT:    rldimi 7, 7, 32, 0
21627; PWR5-NEXT:    add 4, 5, 4
21628; PWR5-NEXT:    add 3, 3, 6
21629; PWR5-NEXT:    rldimi 9, 9, 32, 0
21630; PWR5-NEXT:    rldicl 5, 4, 60, 4
21631; PWR5-NEXT:    and 3, 3, 7
21632; PWR5-NEXT:    add 4, 4, 5
21633; PWR5-NEXT:    mulld 3, 3, 9
21634; PWR5-NEXT:    and 4, 4, 7
21635; PWR5-NEXT:    rldicl 3, 3, 8, 56
21636; PWR5-NEXT:    li 5, 38
21637; PWR5-NEXT:    mulld 4, 4, 9
21638; PWR5-NEXT:    subc 6, 3, 5
21639; PWR5-NEXT:    rldicl 4, 4, 8, 56
21640; PWR5-NEXT:    subfe 3, 3, 3
21641; PWR5-NEXT:    subc 5, 4, 5
21642; PWR5-NEXT:    subfe 4, 4, 4
21643; PWR5-NEXT:    blr
21644;
21645; PWR6-LABEL: ult_38_v2i64:
21646; PWR6:       # %bb.0:
21647; PWR6-NEXT:    lis 5, 21845
21648; PWR6-NEXT:    lis 6, 13107
21649; PWR6-NEXT:    ori 5, 5, 21845
21650; PWR6-NEXT:    rotldi 8, 4, 63
21651; PWR6-NEXT:    rotldi 9, 3, 63
21652; PWR6-NEXT:    rldimi 5, 5, 32, 0
21653; PWR6-NEXT:    and 8, 8, 5
21654; PWR6-NEXT:    and 5, 9, 5
21655; PWR6-NEXT:    ori 6, 6, 13107
21656; PWR6-NEXT:    sub 3, 3, 5
21657; PWR6-NEXT:    rldimi 6, 6, 32, 0
21658; PWR6-NEXT:    sub 4, 4, 8
21659; PWR6-NEXT:    and 8, 3, 6
21660; PWR6-NEXT:    rotldi 3, 3, 62
21661; PWR6-NEXT:    and 3, 3, 6
21662; PWR6-NEXT:    lis 7, 3855
21663; PWR6-NEXT:    and 5, 4, 6
21664; PWR6-NEXT:    rotldi 4, 4, 62
21665; PWR6-NEXT:    add 3, 8, 3
21666; PWR6-NEXT:    lis 9, 257
21667; PWR6-NEXT:    ori 7, 7, 3855
21668; PWR6-NEXT:    and 4, 4, 6
21669; PWR6-NEXT:    rldicl 6, 3, 60, 4
21670; PWR6-NEXT:    ori 9, 9, 257
21671; PWR6-NEXT:    rldimi 7, 7, 32, 0
21672; PWR6-NEXT:    add 4, 5, 4
21673; PWR6-NEXT:    add 3, 3, 6
21674; PWR6-NEXT:    rldimi 9, 9, 32, 0
21675; PWR6-NEXT:    rldicl 5, 4, 60, 4
21676; PWR6-NEXT:    and 3, 3, 7
21677; PWR6-NEXT:    add 4, 4, 5
21678; PWR6-NEXT:    mulld 3, 3, 9
21679; PWR6-NEXT:    and 4, 4, 7
21680; PWR6-NEXT:    rldicl 3, 3, 8, 56
21681; PWR6-NEXT:    li 5, 38
21682; PWR6-NEXT:    mulld 4, 4, 9
21683; PWR6-NEXT:    subc 6, 3, 5
21684; PWR6-NEXT:    rldicl 4, 4, 8, 56
21685; PWR6-NEXT:    subfe 3, 3, 3
21686; PWR6-NEXT:    subc 5, 4, 5
21687; PWR6-NEXT:    subfe 4, 4, 4
21688; PWR6-NEXT:    blr
21689;
21690; PWR7-LABEL: ult_38_v2i64:
21691; PWR7:       # %bb.0:
21692; PWR7-NEXT:    addi 3, 1, -32
21693; PWR7-NEXT:    li 5, -1
21694; PWR7-NEXT:    stxvd2x 34, 0, 3
21695; PWR7-NEXT:    ld 4, -24(1)
21696; PWR7-NEXT:    ld 3, -32(1)
21697; PWR7-NEXT:    popcntd 4, 4
21698; PWR7-NEXT:    popcntd 3, 3
21699; PWR7-NEXT:    cmpldi 4, 38
21700; PWR7-NEXT:    li 4, 0
21701; PWR7-NEXT:    isellt 6, 5, 4
21702; PWR7-NEXT:    cmpldi 3, 38
21703; PWR7-NEXT:    isellt 3, 5, 4
21704; PWR7-NEXT:    std 6, -8(1)
21705; PWR7-NEXT:    std 3, -16(1)
21706; PWR7-NEXT:    addi 3, 1, -16
21707; PWR7-NEXT:    lxvd2x 34, 0, 3
21708; PWR7-NEXT:    blr
21709;
21710; PWR8-LABEL: ult_38_v2i64:
21711; PWR8:       # %bb.0:
21712; PWR8-NEXT:    addis 3, 2, .LCPI173_0@toc@ha
21713; PWR8-NEXT:    vpopcntd 2, 2
21714; PWR8-NEXT:    addi 3, 3, .LCPI173_0@toc@l
21715; PWR8-NEXT:    lxvd2x 35, 0, 3
21716; PWR8-NEXT:    vcmpgtud 2, 3, 2
21717; PWR8-NEXT:    blr
21718;
21719; PWR9-LABEL: ult_38_v2i64:
21720; PWR9:       # %bb.0:
21721; PWR9-NEXT:    addis 3, 2, .LCPI173_0@toc@ha
21722; PWR9-NEXT:    vpopcntd 2, 2
21723; PWR9-NEXT:    addi 3, 3, .LCPI173_0@toc@l
21724; PWR9-NEXT:    lxv 35, 0(3)
21725; PWR9-NEXT:    vcmpgtud 2, 3, 2
21726; PWR9-NEXT:    blr
21727  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21728  %3 = icmp ult <2 x i64> %2, <i64 38, i64 38>
21729  %4 = sext <2 x i1> %3 to <2 x i64>
21730  ret <2 x i64> %4
21731}
21732
21733define <2 x i64> @ugt_38_v2i64(<2 x i64> %0) {
21734; PWR5-LABEL: ugt_38_v2i64:
21735; PWR5:       # %bb.0:
21736; PWR5-NEXT:    lis 5, 21845
21737; PWR5-NEXT:    lis 6, 13107
21738; PWR5-NEXT:    ori 5, 5, 21845
21739; PWR5-NEXT:    rotldi 8, 4, 63
21740; PWR5-NEXT:    rotldi 9, 3, 63
21741; PWR5-NEXT:    rldimi 5, 5, 32, 0
21742; PWR5-NEXT:    and 8, 8, 5
21743; PWR5-NEXT:    and 5, 9, 5
21744; PWR5-NEXT:    ori 6, 6, 13107
21745; PWR5-NEXT:    sub 3, 3, 5
21746; PWR5-NEXT:    rldimi 6, 6, 32, 0
21747; PWR5-NEXT:    sub 4, 4, 8
21748; PWR5-NEXT:    and 8, 3, 6
21749; PWR5-NEXT:    rotldi 3, 3, 62
21750; PWR5-NEXT:    and 3, 3, 6
21751; PWR5-NEXT:    lis 7, 3855
21752; PWR5-NEXT:    and 5, 4, 6
21753; PWR5-NEXT:    rotldi 4, 4, 62
21754; PWR5-NEXT:    add 3, 8, 3
21755; PWR5-NEXT:    lis 9, 257
21756; PWR5-NEXT:    ori 7, 7, 3855
21757; PWR5-NEXT:    and 4, 4, 6
21758; PWR5-NEXT:    rldicl 6, 3, 60, 4
21759; PWR5-NEXT:    ori 9, 9, 257
21760; PWR5-NEXT:    rldimi 7, 7, 32, 0
21761; PWR5-NEXT:    add 4, 5, 4
21762; PWR5-NEXT:    add 3, 3, 6
21763; PWR5-NEXT:    rldimi 9, 9, 32, 0
21764; PWR5-NEXT:    rldicl 5, 4, 60, 4
21765; PWR5-NEXT:    and 3, 3, 7
21766; PWR5-NEXT:    add 4, 4, 5
21767; PWR5-NEXT:    mulld 3, 3, 9
21768; PWR5-NEXT:    and 4, 4, 7
21769; PWR5-NEXT:    rldicl 3, 3, 8, 56
21770; PWR5-NEXT:    mulld 4, 4, 9
21771; PWR5-NEXT:    li 5, 38
21772; PWR5-NEXT:    subfic 3, 3, 38
21773; PWR5-NEXT:    rldicl 4, 4, 8, 56
21774; PWR5-NEXT:    subfe 3, 5, 5
21775; PWR5-NEXT:    subfic 4, 4, 38
21776; PWR5-NEXT:    subfe 4, 5, 5
21777; PWR5-NEXT:    blr
21778;
21779; PWR6-LABEL: ugt_38_v2i64:
21780; PWR6:       # %bb.0:
21781; PWR6-NEXT:    lis 5, 21845
21782; PWR6-NEXT:    lis 6, 13107
21783; PWR6-NEXT:    ori 5, 5, 21845
21784; PWR6-NEXT:    rotldi 8, 4, 63
21785; PWR6-NEXT:    rotldi 9, 3, 63
21786; PWR6-NEXT:    rldimi 5, 5, 32, 0
21787; PWR6-NEXT:    and 8, 8, 5
21788; PWR6-NEXT:    and 5, 9, 5
21789; PWR6-NEXT:    ori 6, 6, 13107
21790; PWR6-NEXT:    sub 3, 3, 5
21791; PWR6-NEXT:    rldimi 6, 6, 32, 0
21792; PWR6-NEXT:    sub 4, 4, 8
21793; PWR6-NEXT:    and 8, 3, 6
21794; PWR6-NEXT:    rotldi 3, 3, 62
21795; PWR6-NEXT:    and 3, 3, 6
21796; PWR6-NEXT:    lis 7, 3855
21797; PWR6-NEXT:    and 5, 4, 6
21798; PWR6-NEXT:    rotldi 4, 4, 62
21799; PWR6-NEXT:    add 3, 8, 3
21800; PWR6-NEXT:    lis 9, 257
21801; PWR6-NEXT:    ori 7, 7, 3855
21802; PWR6-NEXT:    and 4, 4, 6
21803; PWR6-NEXT:    rldicl 6, 3, 60, 4
21804; PWR6-NEXT:    ori 9, 9, 257
21805; PWR6-NEXT:    rldimi 7, 7, 32, 0
21806; PWR6-NEXT:    add 4, 5, 4
21807; PWR6-NEXT:    add 3, 3, 6
21808; PWR6-NEXT:    rldimi 9, 9, 32, 0
21809; PWR6-NEXT:    rldicl 5, 4, 60, 4
21810; PWR6-NEXT:    and 3, 3, 7
21811; PWR6-NEXT:    add 4, 4, 5
21812; PWR6-NEXT:    mulld 3, 3, 9
21813; PWR6-NEXT:    and 4, 4, 7
21814; PWR6-NEXT:    rldicl 3, 3, 8, 56
21815; PWR6-NEXT:    mulld 4, 4, 9
21816; PWR6-NEXT:    li 5, 38
21817; PWR6-NEXT:    subfic 3, 3, 38
21818; PWR6-NEXT:    rldicl 4, 4, 8, 56
21819; PWR6-NEXT:    subfe 3, 5, 5
21820; PWR6-NEXT:    subfic 4, 4, 38
21821; PWR6-NEXT:    subfe 4, 5, 5
21822; PWR6-NEXT:    blr
21823;
21824; PWR7-LABEL: ugt_38_v2i64:
21825; PWR7:       # %bb.0:
21826; PWR7-NEXT:    addi 3, 1, -32
21827; PWR7-NEXT:    li 5, -1
21828; PWR7-NEXT:    stxvd2x 34, 0, 3
21829; PWR7-NEXT:    ld 4, -24(1)
21830; PWR7-NEXT:    ld 3, -32(1)
21831; PWR7-NEXT:    popcntd 4, 4
21832; PWR7-NEXT:    popcntd 3, 3
21833; PWR7-NEXT:    cmpldi 4, 38
21834; PWR7-NEXT:    li 4, 0
21835; PWR7-NEXT:    iselgt 6, 5, 4
21836; PWR7-NEXT:    cmpldi 3, 38
21837; PWR7-NEXT:    iselgt 3, 5, 4
21838; PWR7-NEXT:    std 6, -8(1)
21839; PWR7-NEXT:    std 3, -16(1)
21840; PWR7-NEXT:    addi 3, 1, -16
21841; PWR7-NEXT:    lxvd2x 34, 0, 3
21842; PWR7-NEXT:    blr
21843;
21844; PWR8-LABEL: ugt_38_v2i64:
21845; PWR8:       # %bb.0:
21846; PWR8-NEXT:    addis 3, 2, .LCPI174_0@toc@ha
21847; PWR8-NEXT:    vpopcntd 2, 2
21848; PWR8-NEXT:    addi 3, 3, .LCPI174_0@toc@l
21849; PWR8-NEXT:    lxvd2x 35, 0, 3
21850; PWR8-NEXT:    vcmpgtud 2, 2, 3
21851; PWR8-NEXT:    blr
21852;
21853; PWR9-LABEL: ugt_38_v2i64:
21854; PWR9:       # %bb.0:
21855; PWR9-NEXT:    addis 3, 2, .LCPI174_0@toc@ha
21856; PWR9-NEXT:    vpopcntd 2, 2
21857; PWR9-NEXT:    addi 3, 3, .LCPI174_0@toc@l
21858; PWR9-NEXT:    lxv 35, 0(3)
21859; PWR9-NEXT:    vcmpgtud 2, 2, 3
21860; PWR9-NEXT:    blr
21861  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21862  %3 = icmp ugt <2 x i64> %2, <i64 38, i64 38>
21863  %4 = sext <2 x i1> %3 to <2 x i64>
21864  ret <2 x i64> %4
21865}
21866
21867define <2 x i64> @ult_39_v2i64(<2 x i64> %0) {
21868; PWR5-LABEL: ult_39_v2i64:
21869; PWR5:       # %bb.0:
21870; PWR5-NEXT:    lis 5, 21845
21871; PWR5-NEXT:    lis 6, 13107
21872; PWR5-NEXT:    ori 5, 5, 21845
21873; PWR5-NEXT:    rotldi 8, 4, 63
21874; PWR5-NEXT:    rotldi 9, 3, 63
21875; PWR5-NEXT:    rldimi 5, 5, 32, 0
21876; PWR5-NEXT:    and 8, 8, 5
21877; PWR5-NEXT:    and 5, 9, 5
21878; PWR5-NEXT:    ori 6, 6, 13107
21879; PWR5-NEXT:    sub 3, 3, 5
21880; PWR5-NEXT:    rldimi 6, 6, 32, 0
21881; PWR5-NEXT:    sub 4, 4, 8
21882; PWR5-NEXT:    and 8, 3, 6
21883; PWR5-NEXT:    rotldi 3, 3, 62
21884; PWR5-NEXT:    and 3, 3, 6
21885; PWR5-NEXT:    lis 7, 3855
21886; PWR5-NEXT:    and 5, 4, 6
21887; PWR5-NEXT:    rotldi 4, 4, 62
21888; PWR5-NEXT:    add 3, 8, 3
21889; PWR5-NEXT:    lis 9, 257
21890; PWR5-NEXT:    ori 7, 7, 3855
21891; PWR5-NEXT:    and 4, 4, 6
21892; PWR5-NEXT:    rldicl 6, 3, 60, 4
21893; PWR5-NEXT:    ori 9, 9, 257
21894; PWR5-NEXT:    rldimi 7, 7, 32, 0
21895; PWR5-NEXT:    add 4, 5, 4
21896; PWR5-NEXT:    add 3, 3, 6
21897; PWR5-NEXT:    rldimi 9, 9, 32, 0
21898; PWR5-NEXT:    rldicl 5, 4, 60, 4
21899; PWR5-NEXT:    and 3, 3, 7
21900; PWR5-NEXT:    add 4, 4, 5
21901; PWR5-NEXT:    mulld 3, 3, 9
21902; PWR5-NEXT:    and 4, 4, 7
21903; PWR5-NEXT:    rldicl 3, 3, 8, 56
21904; PWR5-NEXT:    li 5, 39
21905; PWR5-NEXT:    mulld 4, 4, 9
21906; PWR5-NEXT:    subc 6, 3, 5
21907; PWR5-NEXT:    rldicl 4, 4, 8, 56
21908; PWR5-NEXT:    subfe 3, 3, 3
21909; PWR5-NEXT:    subc 5, 4, 5
21910; PWR5-NEXT:    subfe 4, 4, 4
21911; PWR5-NEXT:    blr
21912;
21913; PWR6-LABEL: ult_39_v2i64:
21914; PWR6:       # %bb.0:
21915; PWR6-NEXT:    lis 5, 21845
21916; PWR6-NEXT:    lis 6, 13107
21917; PWR6-NEXT:    ori 5, 5, 21845
21918; PWR6-NEXT:    rotldi 8, 4, 63
21919; PWR6-NEXT:    rotldi 9, 3, 63
21920; PWR6-NEXT:    rldimi 5, 5, 32, 0
21921; PWR6-NEXT:    and 8, 8, 5
21922; PWR6-NEXT:    and 5, 9, 5
21923; PWR6-NEXT:    ori 6, 6, 13107
21924; PWR6-NEXT:    sub 3, 3, 5
21925; PWR6-NEXT:    rldimi 6, 6, 32, 0
21926; PWR6-NEXT:    sub 4, 4, 8
21927; PWR6-NEXT:    and 8, 3, 6
21928; PWR6-NEXT:    rotldi 3, 3, 62
21929; PWR6-NEXT:    and 3, 3, 6
21930; PWR6-NEXT:    lis 7, 3855
21931; PWR6-NEXT:    and 5, 4, 6
21932; PWR6-NEXT:    rotldi 4, 4, 62
21933; PWR6-NEXT:    add 3, 8, 3
21934; PWR6-NEXT:    lis 9, 257
21935; PWR6-NEXT:    ori 7, 7, 3855
21936; PWR6-NEXT:    and 4, 4, 6
21937; PWR6-NEXT:    rldicl 6, 3, 60, 4
21938; PWR6-NEXT:    ori 9, 9, 257
21939; PWR6-NEXT:    rldimi 7, 7, 32, 0
21940; PWR6-NEXT:    add 4, 5, 4
21941; PWR6-NEXT:    add 3, 3, 6
21942; PWR6-NEXT:    rldimi 9, 9, 32, 0
21943; PWR6-NEXT:    rldicl 5, 4, 60, 4
21944; PWR6-NEXT:    and 3, 3, 7
21945; PWR6-NEXT:    add 4, 4, 5
21946; PWR6-NEXT:    mulld 3, 3, 9
21947; PWR6-NEXT:    and 4, 4, 7
21948; PWR6-NEXT:    rldicl 3, 3, 8, 56
21949; PWR6-NEXT:    li 5, 39
21950; PWR6-NEXT:    mulld 4, 4, 9
21951; PWR6-NEXT:    subc 6, 3, 5
21952; PWR6-NEXT:    rldicl 4, 4, 8, 56
21953; PWR6-NEXT:    subfe 3, 3, 3
21954; PWR6-NEXT:    subc 5, 4, 5
21955; PWR6-NEXT:    subfe 4, 4, 4
21956; PWR6-NEXT:    blr
21957;
21958; PWR7-LABEL: ult_39_v2i64:
21959; PWR7:       # %bb.0:
21960; PWR7-NEXT:    addi 3, 1, -32
21961; PWR7-NEXT:    li 5, -1
21962; PWR7-NEXT:    stxvd2x 34, 0, 3
21963; PWR7-NEXT:    ld 4, -24(1)
21964; PWR7-NEXT:    ld 3, -32(1)
21965; PWR7-NEXT:    popcntd 4, 4
21966; PWR7-NEXT:    popcntd 3, 3
21967; PWR7-NEXT:    cmpldi 4, 39
21968; PWR7-NEXT:    li 4, 0
21969; PWR7-NEXT:    isellt 6, 5, 4
21970; PWR7-NEXT:    cmpldi 3, 39
21971; PWR7-NEXT:    isellt 3, 5, 4
21972; PWR7-NEXT:    std 6, -8(1)
21973; PWR7-NEXT:    std 3, -16(1)
21974; PWR7-NEXT:    addi 3, 1, -16
21975; PWR7-NEXT:    lxvd2x 34, 0, 3
21976; PWR7-NEXT:    blr
21977;
21978; PWR8-LABEL: ult_39_v2i64:
21979; PWR8:       # %bb.0:
21980; PWR8-NEXT:    addis 3, 2, .LCPI175_0@toc@ha
21981; PWR8-NEXT:    vpopcntd 2, 2
21982; PWR8-NEXT:    addi 3, 3, .LCPI175_0@toc@l
21983; PWR8-NEXT:    lxvd2x 35, 0, 3
21984; PWR8-NEXT:    vcmpgtud 2, 3, 2
21985; PWR8-NEXT:    blr
21986;
21987; PWR9-LABEL: ult_39_v2i64:
21988; PWR9:       # %bb.0:
21989; PWR9-NEXT:    addis 3, 2, .LCPI175_0@toc@ha
21990; PWR9-NEXT:    vpopcntd 2, 2
21991; PWR9-NEXT:    addi 3, 3, .LCPI175_0@toc@l
21992; PWR9-NEXT:    lxv 35, 0(3)
21993; PWR9-NEXT:    vcmpgtud 2, 3, 2
21994; PWR9-NEXT:    blr
21995  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21996  %3 = icmp ult <2 x i64> %2, <i64 39, i64 39>
21997  %4 = sext <2 x i1> %3 to <2 x i64>
21998  ret <2 x i64> %4
21999}
22000
22001define <2 x i64> @ugt_39_v2i64(<2 x i64> %0) {
22002; PWR5-LABEL: ugt_39_v2i64:
22003; PWR5:       # %bb.0:
22004; PWR5-NEXT:    lis 5, 21845
22005; PWR5-NEXT:    lis 6, 13107
22006; PWR5-NEXT:    ori 5, 5, 21845
22007; PWR5-NEXT:    rotldi 8, 4, 63
22008; PWR5-NEXT:    rotldi 9, 3, 63
22009; PWR5-NEXT:    rldimi 5, 5, 32, 0
22010; PWR5-NEXT:    and 8, 8, 5
22011; PWR5-NEXT:    and 5, 9, 5
22012; PWR5-NEXT:    ori 6, 6, 13107
22013; PWR5-NEXT:    sub 3, 3, 5
22014; PWR5-NEXT:    rldimi 6, 6, 32, 0
22015; PWR5-NEXT:    sub 4, 4, 8
22016; PWR5-NEXT:    and 8, 3, 6
22017; PWR5-NEXT:    rotldi 3, 3, 62
22018; PWR5-NEXT:    and 3, 3, 6
22019; PWR5-NEXT:    lis 7, 3855
22020; PWR5-NEXT:    and 5, 4, 6
22021; PWR5-NEXT:    rotldi 4, 4, 62
22022; PWR5-NEXT:    add 3, 8, 3
22023; PWR5-NEXT:    lis 9, 257
22024; PWR5-NEXT:    ori 7, 7, 3855
22025; PWR5-NEXT:    and 4, 4, 6
22026; PWR5-NEXT:    rldicl 6, 3, 60, 4
22027; PWR5-NEXT:    ori 9, 9, 257
22028; PWR5-NEXT:    rldimi 7, 7, 32, 0
22029; PWR5-NEXT:    add 4, 5, 4
22030; PWR5-NEXT:    add 3, 3, 6
22031; PWR5-NEXT:    rldimi 9, 9, 32, 0
22032; PWR5-NEXT:    rldicl 5, 4, 60, 4
22033; PWR5-NEXT:    and 3, 3, 7
22034; PWR5-NEXT:    add 4, 4, 5
22035; PWR5-NEXT:    mulld 3, 3, 9
22036; PWR5-NEXT:    and 4, 4, 7
22037; PWR5-NEXT:    rldicl 3, 3, 8, 56
22038; PWR5-NEXT:    mulld 4, 4, 9
22039; PWR5-NEXT:    li 5, 39
22040; PWR5-NEXT:    subfic 3, 3, 39
22041; PWR5-NEXT:    rldicl 4, 4, 8, 56
22042; PWR5-NEXT:    subfe 3, 5, 5
22043; PWR5-NEXT:    subfic 4, 4, 39
22044; PWR5-NEXT:    subfe 4, 5, 5
22045; PWR5-NEXT:    blr
22046;
22047; PWR6-LABEL: ugt_39_v2i64:
22048; PWR6:       # %bb.0:
22049; PWR6-NEXT:    lis 5, 21845
22050; PWR6-NEXT:    lis 6, 13107
22051; PWR6-NEXT:    ori 5, 5, 21845
22052; PWR6-NEXT:    rotldi 8, 4, 63
22053; PWR6-NEXT:    rotldi 9, 3, 63
22054; PWR6-NEXT:    rldimi 5, 5, 32, 0
22055; PWR6-NEXT:    and 8, 8, 5
22056; PWR6-NEXT:    and 5, 9, 5
22057; PWR6-NEXT:    ori 6, 6, 13107
22058; PWR6-NEXT:    sub 3, 3, 5
22059; PWR6-NEXT:    rldimi 6, 6, 32, 0
22060; PWR6-NEXT:    sub 4, 4, 8
22061; PWR6-NEXT:    and 8, 3, 6
22062; PWR6-NEXT:    rotldi 3, 3, 62
22063; PWR6-NEXT:    and 3, 3, 6
22064; PWR6-NEXT:    lis 7, 3855
22065; PWR6-NEXT:    and 5, 4, 6
22066; PWR6-NEXT:    rotldi 4, 4, 62
22067; PWR6-NEXT:    add 3, 8, 3
22068; PWR6-NEXT:    lis 9, 257
22069; PWR6-NEXT:    ori 7, 7, 3855
22070; PWR6-NEXT:    and 4, 4, 6
22071; PWR6-NEXT:    rldicl 6, 3, 60, 4
22072; PWR6-NEXT:    ori 9, 9, 257
22073; PWR6-NEXT:    rldimi 7, 7, 32, 0
22074; PWR6-NEXT:    add 4, 5, 4
22075; PWR6-NEXT:    add 3, 3, 6
22076; PWR6-NEXT:    rldimi 9, 9, 32, 0
22077; PWR6-NEXT:    rldicl 5, 4, 60, 4
22078; PWR6-NEXT:    and 3, 3, 7
22079; PWR6-NEXT:    add 4, 4, 5
22080; PWR6-NEXT:    mulld 3, 3, 9
22081; PWR6-NEXT:    and 4, 4, 7
22082; PWR6-NEXT:    rldicl 3, 3, 8, 56
22083; PWR6-NEXT:    mulld 4, 4, 9
22084; PWR6-NEXT:    li 5, 39
22085; PWR6-NEXT:    subfic 3, 3, 39
22086; PWR6-NEXT:    rldicl 4, 4, 8, 56
22087; PWR6-NEXT:    subfe 3, 5, 5
22088; PWR6-NEXT:    subfic 4, 4, 39
22089; PWR6-NEXT:    subfe 4, 5, 5
22090; PWR6-NEXT:    blr
22091;
22092; PWR7-LABEL: ugt_39_v2i64:
22093; PWR7:       # %bb.0:
22094; PWR7-NEXT:    addi 3, 1, -32
22095; PWR7-NEXT:    li 5, -1
22096; PWR7-NEXT:    stxvd2x 34, 0, 3
22097; PWR7-NEXT:    ld 4, -24(1)
22098; PWR7-NEXT:    ld 3, -32(1)
22099; PWR7-NEXT:    popcntd 4, 4
22100; PWR7-NEXT:    popcntd 3, 3
22101; PWR7-NEXT:    cmpldi 4, 39
22102; PWR7-NEXT:    li 4, 0
22103; PWR7-NEXT:    iselgt 6, 5, 4
22104; PWR7-NEXT:    cmpldi 3, 39
22105; PWR7-NEXT:    iselgt 3, 5, 4
22106; PWR7-NEXT:    std 6, -8(1)
22107; PWR7-NEXT:    std 3, -16(1)
22108; PWR7-NEXT:    addi 3, 1, -16
22109; PWR7-NEXT:    lxvd2x 34, 0, 3
22110; PWR7-NEXT:    blr
22111;
22112; PWR8-LABEL: ugt_39_v2i64:
22113; PWR8:       # %bb.0:
22114; PWR8-NEXT:    addis 3, 2, .LCPI176_0@toc@ha
22115; PWR8-NEXT:    vpopcntd 2, 2
22116; PWR8-NEXT:    addi 3, 3, .LCPI176_0@toc@l
22117; PWR8-NEXT:    lxvd2x 35, 0, 3
22118; PWR8-NEXT:    vcmpgtud 2, 2, 3
22119; PWR8-NEXT:    blr
22120;
22121; PWR9-LABEL: ugt_39_v2i64:
22122; PWR9:       # %bb.0:
22123; PWR9-NEXT:    addis 3, 2, .LCPI176_0@toc@ha
22124; PWR9-NEXT:    vpopcntd 2, 2
22125; PWR9-NEXT:    addi 3, 3, .LCPI176_0@toc@l
22126; PWR9-NEXT:    lxv 35, 0(3)
22127; PWR9-NEXT:    vcmpgtud 2, 2, 3
22128; PWR9-NEXT:    blr
22129  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22130  %3 = icmp ugt <2 x i64> %2, <i64 39, i64 39>
22131  %4 = sext <2 x i1> %3 to <2 x i64>
22132  ret <2 x i64> %4
22133}
22134
22135define <2 x i64> @ult_40_v2i64(<2 x i64> %0) {
22136; PWR5-LABEL: ult_40_v2i64:
22137; PWR5:       # %bb.0:
22138; PWR5-NEXT:    lis 5, 21845
22139; PWR5-NEXT:    lis 6, 13107
22140; PWR5-NEXT:    ori 5, 5, 21845
22141; PWR5-NEXT:    rotldi 8, 4, 63
22142; PWR5-NEXT:    rotldi 9, 3, 63
22143; PWR5-NEXT:    rldimi 5, 5, 32, 0
22144; PWR5-NEXT:    and 8, 8, 5
22145; PWR5-NEXT:    and 5, 9, 5
22146; PWR5-NEXT:    ori 6, 6, 13107
22147; PWR5-NEXT:    sub 3, 3, 5
22148; PWR5-NEXT:    rldimi 6, 6, 32, 0
22149; PWR5-NEXT:    sub 4, 4, 8
22150; PWR5-NEXT:    and 8, 3, 6
22151; PWR5-NEXT:    rotldi 3, 3, 62
22152; PWR5-NEXT:    and 3, 3, 6
22153; PWR5-NEXT:    lis 7, 3855
22154; PWR5-NEXT:    and 5, 4, 6
22155; PWR5-NEXT:    rotldi 4, 4, 62
22156; PWR5-NEXT:    add 3, 8, 3
22157; PWR5-NEXT:    lis 9, 257
22158; PWR5-NEXT:    ori 7, 7, 3855
22159; PWR5-NEXT:    and 4, 4, 6
22160; PWR5-NEXT:    rldicl 6, 3, 60, 4
22161; PWR5-NEXT:    ori 9, 9, 257
22162; PWR5-NEXT:    rldimi 7, 7, 32, 0
22163; PWR5-NEXT:    add 4, 5, 4
22164; PWR5-NEXT:    add 3, 3, 6
22165; PWR5-NEXT:    rldimi 9, 9, 32, 0
22166; PWR5-NEXT:    rldicl 5, 4, 60, 4
22167; PWR5-NEXT:    and 3, 3, 7
22168; PWR5-NEXT:    add 4, 4, 5
22169; PWR5-NEXT:    mulld 3, 3, 9
22170; PWR5-NEXT:    and 4, 4, 7
22171; PWR5-NEXT:    rldicl 3, 3, 8, 56
22172; PWR5-NEXT:    li 5, 40
22173; PWR5-NEXT:    mulld 4, 4, 9
22174; PWR5-NEXT:    subc 6, 3, 5
22175; PWR5-NEXT:    rldicl 4, 4, 8, 56
22176; PWR5-NEXT:    subfe 3, 3, 3
22177; PWR5-NEXT:    subc 5, 4, 5
22178; PWR5-NEXT:    subfe 4, 4, 4
22179; PWR5-NEXT:    blr
22180;
22181; PWR6-LABEL: ult_40_v2i64:
22182; PWR6:       # %bb.0:
22183; PWR6-NEXT:    lis 5, 21845
22184; PWR6-NEXT:    lis 6, 13107
22185; PWR6-NEXT:    ori 5, 5, 21845
22186; PWR6-NEXT:    rotldi 8, 4, 63
22187; PWR6-NEXT:    rotldi 9, 3, 63
22188; PWR6-NEXT:    rldimi 5, 5, 32, 0
22189; PWR6-NEXT:    and 8, 8, 5
22190; PWR6-NEXT:    and 5, 9, 5
22191; PWR6-NEXT:    ori 6, 6, 13107
22192; PWR6-NEXT:    sub 3, 3, 5
22193; PWR6-NEXT:    rldimi 6, 6, 32, 0
22194; PWR6-NEXT:    sub 4, 4, 8
22195; PWR6-NEXT:    and 8, 3, 6
22196; PWR6-NEXT:    rotldi 3, 3, 62
22197; PWR6-NEXT:    and 3, 3, 6
22198; PWR6-NEXT:    lis 7, 3855
22199; PWR6-NEXT:    and 5, 4, 6
22200; PWR6-NEXT:    rotldi 4, 4, 62
22201; PWR6-NEXT:    add 3, 8, 3
22202; PWR6-NEXT:    lis 9, 257
22203; PWR6-NEXT:    ori 7, 7, 3855
22204; PWR6-NEXT:    and 4, 4, 6
22205; PWR6-NEXT:    rldicl 6, 3, 60, 4
22206; PWR6-NEXT:    ori 9, 9, 257
22207; PWR6-NEXT:    rldimi 7, 7, 32, 0
22208; PWR6-NEXT:    add 4, 5, 4
22209; PWR6-NEXT:    add 3, 3, 6
22210; PWR6-NEXT:    rldimi 9, 9, 32, 0
22211; PWR6-NEXT:    rldicl 5, 4, 60, 4
22212; PWR6-NEXT:    and 3, 3, 7
22213; PWR6-NEXT:    add 4, 4, 5
22214; PWR6-NEXT:    mulld 3, 3, 9
22215; PWR6-NEXT:    and 4, 4, 7
22216; PWR6-NEXT:    rldicl 3, 3, 8, 56
22217; PWR6-NEXT:    li 5, 40
22218; PWR6-NEXT:    mulld 4, 4, 9
22219; PWR6-NEXT:    subc 6, 3, 5
22220; PWR6-NEXT:    rldicl 4, 4, 8, 56
22221; PWR6-NEXT:    subfe 3, 3, 3
22222; PWR6-NEXT:    subc 5, 4, 5
22223; PWR6-NEXT:    subfe 4, 4, 4
22224; PWR6-NEXT:    blr
22225;
22226; PWR7-LABEL: ult_40_v2i64:
22227; PWR7:       # %bb.0:
22228; PWR7-NEXT:    addi 3, 1, -32
22229; PWR7-NEXT:    li 5, -1
22230; PWR7-NEXT:    stxvd2x 34, 0, 3
22231; PWR7-NEXT:    ld 4, -24(1)
22232; PWR7-NEXT:    ld 3, -32(1)
22233; PWR7-NEXT:    popcntd 4, 4
22234; PWR7-NEXT:    popcntd 3, 3
22235; PWR7-NEXT:    cmpldi 4, 40
22236; PWR7-NEXT:    li 4, 0
22237; PWR7-NEXT:    isellt 6, 5, 4
22238; PWR7-NEXT:    cmpldi 3, 40
22239; PWR7-NEXT:    isellt 3, 5, 4
22240; PWR7-NEXT:    std 6, -8(1)
22241; PWR7-NEXT:    std 3, -16(1)
22242; PWR7-NEXT:    addi 3, 1, -16
22243; PWR7-NEXT:    lxvd2x 34, 0, 3
22244; PWR7-NEXT:    blr
22245;
22246; PWR8-LABEL: ult_40_v2i64:
22247; PWR8:       # %bb.0:
22248; PWR8-NEXT:    addis 3, 2, .LCPI177_0@toc@ha
22249; PWR8-NEXT:    vpopcntd 2, 2
22250; PWR8-NEXT:    addi 3, 3, .LCPI177_0@toc@l
22251; PWR8-NEXT:    lxvd2x 35, 0, 3
22252; PWR8-NEXT:    vcmpgtud 2, 3, 2
22253; PWR8-NEXT:    blr
22254;
22255; PWR9-LABEL: ult_40_v2i64:
22256; PWR9:       # %bb.0:
22257; PWR9-NEXT:    addis 3, 2, .LCPI177_0@toc@ha
22258; PWR9-NEXT:    vpopcntd 2, 2
22259; PWR9-NEXT:    addi 3, 3, .LCPI177_0@toc@l
22260; PWR9-NEXT:    lxv 35, 0(3)
22261; PWR9-NEXT:    vcmpgtud 2, 3, 2
22262; PWR9-NEXT:    blr
22263  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22264  %3 = icmp ult <2 x i64> %2, <i64 40, i64 40>
22265  %4 = sext <2 x i1> %3 to <2 x i64>
22266  ret <2 x i64> %4
22267}
22268
22269define <2 x i64> @ugt_40_v2i64(<2 x i64> %0) {
22270; PWR5-LABEL: ugt_40_v2i64:
22271; PWR5:       # %bb.0:
22272; PWR5-NEXT:    lis 5, 21845
22273; PWR5-NEXT:    lis 6, 13107
22274; PWR5-NEXT:    ori 5, 5, 21845
22275; PWR5-NEXT:    rotldi 8, 4, 63
22276; PWR5-NEXT:    rotldi 9, 3, 63
22277; PWR5-NEXT:    rldimi 5, 5, 32, 0
22278; PWR5-NEXT:    and 8, 8, 5
22279; PWR5-NEXT:    and 5, 9, 5
22280; PWR5-NEXT:    ori 6, 6, 13107
22281; PWR5-NEXT:    sub 3, 3, 5
22282; PWR5-NEXT:    rldimi 6, 6, 32, 0
22283; PWR5-NEXT:    sub 4, 4, 8
22284; PWR5-NEXT:    and 8, 3, 6
22285; PWR5-NEXT:    rotldi 3, 3, 62
22286; PWR5-NEXT:    and 3, 3, 6
22287; PWR5-NEXT:    lis 7, 3855
22288; PWR5-NEXT:    and 5, 4, 6
22289; PWR5-NEXT:    rotldi 4, 4, 62
22290; PWR5-NEXT:    add 3, 8, 3
22291; PWR5-NEXT:    lis 9, 257
22292; PWR5-NEXT:    ori 7, 7, 3855
22293; PWR5-NEXT:    and 4, 4, 6
22294; PWR5-NEXT:    rldicl 6, 3, 60, 4
22295; PWR5-NEXT:    ori 9, 9, 257
22296; PWR5-NEXT:    rldimi 7, 7, 32, 0
22297; PWR5-NEXT:    add 4, 5, 4
22298; PWR5-NEXT:    add 3, 3, 6
22299; PWR5-NEXT:    rldimi 9, 9, 32, 0
22300; PWR5-NEXT:    rldicl 5, 4, 60, 4
22301; PWR5-NEXT:    and 3, 3, 7
22302; PWR5-NEXT:    add 4, 4, 5
22303; PWR5-NEXT:    mulld 3, 3, 9
22304; PWR5-NEXT:    and 4, 4, 7
22305; PWR5-NEXT:    rldicl 3, 3, 8, 56
22306; PWR5-NEXT:    mulld 4, 4, 9
22307; PWR5-NEXT:    li 5, 40
22308; PWR5-NEXT:    subfic 3, 3, 40
22309; PWR5-NEXT:    rldicl 4, 4, 8, 56
22310; PWR5-NEXT:    subfe 3, 5, 5
22311; PWR5-NEXT:    subfic 4, 4, 40
22312; PWR5-NEXT:    subfe 4, 5, 5
22313; PWR5-NEXT:    blr
22314;
22315; PWR6-LABEL: ugt_40_v2i64:
22316; PWR6:       # %bb.0:
22317; PWR6-NEXT:    lis 5, 21845
22318; PWR6-NEXT:    lis 6, 13107
22319; PWR6-NEXT:    ori 5, 5, 21845
22320; PWR6-NEXT:    rotldi 8, 4, 63
22321; PWR6-NEXT:    rotldi 9, 3, 63
22322; PWR6-NEXT:    rldimi 5, 5, 32, 0
22323; PWR6-NEXT:    and 8, 8, 5
22324; PWR6-NEXT:    and 5, 9, 5
22325; PWR6-NEXT:    ori 6, 6, 13107
22326; PWR6-NEXT:    sub 3, 3, 5
22327; PWR6-NEXT:    rldimi 6, 6, 32, 0
22328; PWR6-NEXT:    sub 4, 4, 8
22329; PWR6-NEXT:    and 8, 3, 6
22330; PWR6-NEXT:    rotldi 3, 3, 62
22331; PWR6-NEXT:    and 3, 3, 6
22332; PWR6-NEXT:    lis 7, 3855
22333; PWR6-NEXT:    and 5, 4, 6
22334; PWR6-NEXT:    rotldi 4, 4, 62
22335; PWR6-NEXT:    add 3, 8, 3
22336; PWR6-NEXT:    lis 9, 257
22337; PWR6-NEXT:    ori 7, 7, 3855
22338; PWR6-NEXT:    and 4, 4, 6
22339; PWR6-NEXT:    rldicl 6, 3, 60, 4
22340; PWR6-NEXT:    ori 9, 9, 257
22341; PWR6-NEXT:    rldimi 7, 7, 32, 0
22342; PWR6-NEXT:    add 4, 5, 4
22343; PWR6-NEXT:    add 3, 3, 6
22344; PWR6-NEXT:    rldimi 9, 9, 32, 0
22345; PWR6-NEXT:    rldicl 5, 4, 60, 4
22346; PWR6-NEXT:    and 3, 3, 7
22347; PWR6-NEXT:    add 4, 4, 5
22348; PWR6-NEXT:    mulld 3, 3, 9
22349; PWR6-NEXT:    and 4, 4, 7
22350; PWR6-NEXT:    rldicl 3, 3, 8, 56
22351; PWR6-NEXT:    mulld 4, 4, 9
22352; PWR6-NEXT:    li 5, 40
22353; PWR6-NEXT:    subfic 3, 3, 40
22354; PWR6-NEXT:    rldicl 4, 4, 8, 56
22355; PWR6-NEXT:    subfe 3, 5, 5
22356; PWR6-NEXT:    subfic 4, 4, 40
22357; PWR6-NEXT:    subfe 4, 5, 5
22358; PWR6-NEXT:    blr
22359;
22360; PWR7-LABEL: ugt_40_v2i64:
22361; PWR7:       # %bb.0:
22362; PWR7-NEXT:    addi 3, 1, -32
22363; PWR7-NEXT:    li 5, -1
22364; PWR7-NEXT:    stxvd2x 34, 0, 3
22365; PWR7-NEXT:    ld 4, -24(1)
22366; PWR7-NEXT:    ld 3, -32(1)
22367; PWR7-NEXT:    popcntd 4, 4
22368; PWR7-NEXT:    popcntd 3, 3
22369; PWR7-NEXT:    cmpldi 4, 40
22370; PWR7-NEXT:    li 4, 0
22371; PWR7-NEXT:    iselgt 6, 5, 4
22372; PWR7-NEXT:    cmpldi 3, 40
22373; PWR7-NEXT:    iselgt 3, 5, 4
22374; PWR7-NEXT:    std 6, -8(1)
22375; PWR7-NEXT:    std 3, -16(1)
22376; PWR7-NEXT:    addi 3, 1, -16
22377; PWR7-NEXT:    lxvd2x 34, 0, 3
22378; PWR7-NEXT:    blr
22379;
22380; PWR8-LABEL: ugt_40_v2i64:
22381; PWR8:       # %bb.0:
22382; PWR8-NEXT:    addis 3, 2, .LCPI178_0@toc@ha
22383; PWR8-NEXT:    vpopcntd 2, 2
22384; PWR8-NEXT:    addi 3, 3, .LCPI178_0@toc@l
22385; PWR8-NEXT:    lxvd2x 35, 0, 3
22386; PWR8-NEXT:    vcmpgtud 2, 2, 3
22387; PWR8-NEXT:    blr
22388;
22389; PWR9-LABEL: ugt_40_v2i64:
22390; PWR9:       # %bb.0:
22391; PWR9-NEXT:    addis 3, 2, .LCPI178_0@toc@ha
22392; PWR9-NEXT:    vpopcntd 2, 2
22393; PWR9-NEXT:    addi 3, 3, .LCPI178_0@toc@l
22394; PWR9-NEXT:    lxv 35, 0(3)
22395; PWR9-NEXT:    vcmpgtud 2, 2, 3
22396; PWR9-NEXT:    blr
22397  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22398  %3 = icmp ugt <2 x i64> %2, <i64 40, i64 40>
22399  %4 = sext <2 x i1> %3 to <2 x i64>
22400  ret <2 x i64> %4
22401}
22402
22403define <2 x i64> @ult_41_v2i64(<2 x i64> %0) {
22404; PWR5-LABEL: ult_41_v2i64:
22405; PWR5:       # %bb.0:
22406; PWR5-NEXT:    lis 5, 21845
22407; PWR5-NEXT:    lis 6, 13107
22408; PWR5-NEXT:    ori 5, 5, 21845
22409; PWR5-NEXT:    rotldi 8, 4, 63
22410; PWR5-NEXT:    rotldi 9, 3, 63
22411; PWR5-NEXT:    rldimi 5, 5, 32, 0
22412; PWR5-NEXT:    and 8, 8, 5
22413; PWR5-NEXT:    and 5, 9, 5
22414; PWR5-NEXT:    ori 6, 6, 13107
22415; PWR5-NEXT:    sub 3, 3, 5
22416; PWR5-NEXT:    rldimi 6, 6, 32, 0
22417; PWR5-NEXT:    sub 4, 4, 8
22418; PWR5-NEXT:    and 8, 3, 6
22419; PWR5-NEXT:    rotldi 3, 3, 62
22420; PWR5-NEXT:    and 3, 3, 6
22421; PWR5-NEXT:    lis 7, 3855
22422; PWR5-NEXT:    and 5, 4, 6
22423; PWR5-NEXT:    rotldi 4, 4, 62
22424; PWR5-NEXT:    add 3, 8, 3
22425; PWR5-NEXT:    lis 9, 257
22426; PWR5-NEXT:    ori 7, 7, 3855
22427; PWR5-NEXT:    and 4, 4, 6
22428; PWR5-NEXT:    rldicl 6, 3, 60, 4
22429; PWR5-NEXT:    ori 9, 9, 257
22430; PWR5-NEXT:    rldimi 7, 7, 32, 0
22431; PWR5-NEXT:    add 4, 5, 4
22432; PWR5-NEXT:    add 3, 3, 6
22433; PWR5-NEXT:    rldimi 9, 9, 32, 0
22434; PWR5-NEXT:    rldicl 5, 4, 60, 4
22435; PWR5-NEXT:    and 3, 3, 7
22436; PWR5-NEXT:    add 4, 4, 5
22437; PWR5-NEXT:    mulld 3, 3, 9
22438; PWR5-NEXT:    and 4, 4, 7
22439; PWR5-NEXT:    rldicl 3, 3, 8, 56
22440; PWR5-NEXT:    li 5, 41
22441; PWR5-NEXT:    mulld 4, 4, 9
22442; PWR5-NEXT:    subc 6, 3, 5
22443; PWR5-NEXT:    rldicl 4, 4, 8, 56
22444; PWR5-NEXT:    subfe 3, 3, 3
22445; PWR5-NEXT:    subc 5, 4, 5
22446; PWR5-NEXT:    subfe 4, 4, 4
22447; PWR5-NEXT:    blr
22448;
22449; PWR6-LABEL: ult_41_v2i64:
22450; PWR6:       # %bb.0:
22451; PWR6-NEXT:    lis 5, 21845
22452; PWR6-NEXT:    lis 6, 13107
22453; PWR6-NEXT:    ori 5, 5, 21845
22454; PWR6-NEXT:    rotldi 8, 4, 63
22455; PWR6-NEXT:    rotldi 9, 3, 63
22456; PWR6-NEXT:    rldimi 5, 5, 32, 0
22457; PWR6-NEXT:    and 8, 8, 5
22458; PWR6-NEXT:    and 5, 9, 5
22459; PWR6-NEXT:    ori 6, 6, 13107
22460; PWR6-NEXT:    sub 3, 3, 5
22461; PWR6-NEXT:    rldimi 6, 6, 32, 0
22462; PWR6-NEXT:    sub 4, 4, 8
22463; PWR6-NEXT:    and 8, 3, 6
22464; PWR6-NEXT:    rotldi 3, 3, 62
22465; PWR6-NEXT:    and 3, 3, 6
22466; PWR6-NEXT:    lis 7, 3855
22467; PWR6-NEXT:    and 5, 4, 6
22468; PWR6-NEXT:    rotldi 4, 4, 62
22469; PWR6-NEXT:    add 3, 8, 3
22470; PWR6-NEXT:    lis 9, 257
22471; PWR6-NEXT:    ori 7, 7, 3855
22472; PWR6-NEXT:    and 4, 4, 6
22473; PWR6-NEXT:    rldicl 6, 3, 60, 4
22474; PWR6-NEXT:    ori 9, 9, 257
22475; PWR6-NEXT:    rldimi 7, 7, 32, 0
22476; PWR6-NEXT:    add 4, 5, 4
22477; PWR6-NEXT:    add 3, 3, 6
22478; PWR6-NEXT:    rldimi 9, 9, 32, 0
22479; PWR6-NEXT:    rldicl 5, 4, 60, 4
22480; PWR6-NEXT:    and 3, 3, 7
22481; PWR6-NEXT:    add 4, 4, 5
22482; PWR6-NEXT:    mulld 3, 3, 9
22483; PWR6-NEXT:    and 4, 4, 7
22484; PWR6-NEXT:    rldicl 3, 3, 8, 56
22485; PWR6-NEXT:    li 5, 41
22486; PWR6-NEXT:    mulld 4, 4, 9
22487; PWR6-NEXT:    subc 6, 3, 5
22488; PWR6-NEXT:    rldicl 4, 4, 8, 56
22489; PWR6-NEXT:    subfe 3, 3, 3
22490; PWR6-NEXT:    subc 5, 4, 5
22491; PWR6-NEXT:    subfe 4, 4, 4
22492; PWR6-NEXT:    blr
22493;
22494; PWR7-LABEL: ult_41_v2i64:
22495; PWR7:       # %bb.0:
22496; PWR7-NEXT:    addi 3, 1, -32
22497; PWR7-NEXT:    li 5, -1
22498; PWR7-NEXT:    stxvd2x 34, 0, 3
22499; PWR7-NEXT:    ld 4, -24(1)
22500; PWR7-NEXT:    ld 3, -32(1)
22501; PWR7-NEXT:    popcntd 4, 4
22502; PWR7-NEXT:    popcntd 3, 3
22503; PWR7-NEXT:    cmpldi 4, 41
22504; PWR7-NEXT:    li 4, 0
22505; PWR7-NEXT:    isellt 6, 5, 4
22506; PWR7-NEXT:    cmpldi 3, 41
22507; PWR7-NEXT:    isellt 3, 5, 4
22508; PWR7-NEXT:    std 6, -8(1)
22509; PWR7-NEXT:    std 3, -16(1)
22510; PWR7-NEXT:    addi 3, 1, -16
22511; PWR7-NEXT:    lxvd2x 34, 0, 3
22512; PWR7-NEXT:    blr
22513;
22514; PWR8-LABEL: ult_41_v2i64:
22515; PWR8:       # %bb.0:
22516; PWR8-NEXT:    addis 3, 2, .LCPI179_0@toc@ha
22517; PWR8-NEXT:    vpopcntd 2, 2
22518; PWR8-NEXT:    addi 3, 3, .LCPI179_0@toc@l
22519; PWR8-NEXT:    lxvd2x 35, 0, 3
22520; PWR8-NEXT:    vcmpgtud 2, 3, 2
22521; PWR8-NEXT:    blr
22522;
22523; PWR9-LABEL: ult_41_v2i64:
22524; PWR9:       # %bb.0:
22525; PWR9-NEXT:    addis 3, 2, .LCPI179_0@toc@ha
22526; PWR9-NEXT:    vpopcntd 2, 2
22527; PWR9-NEXT:    addi 3, 3, .LCPI179_0@toc@l
22528; PWR9-NEXT:    lxv 35, 0(3)
22529; PWR9-NEXT:    vcmpgtud 2, 3, 2
22530; PWR9-NEXT:    blr
22531  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22532  %3 = icmp ult <2 x i64> %2, <i64 41, i64 41>
22533  %4 = sext <2 x i1> %3 to <2 x i64>
22534  ret <2 x i64> %4
22535}
22536
22537define <2 x i64> @ugt_41_v2i64(<2 x i64> %0) {
22538; PWR5-LABEL: ugt_41_v2i64:
22539; PWR5:       # %bb.0:
22540; PWR5-NEXT:    lis 5, 21845
22541; PWR5-NEXT:    lis 6, 13107
22542; PWR5-NEXT:    ori 5, 5, 21845
22543; PWR5-NEXT:    rotldi 8, 4, 63
22544; PWR5-NEXT:    rotldi 9, 3, 63
22545; PWR5-NEXT:    rldimi 5, 5, 32, 0
22546; PWR5-NEXT:    and 8, 8, 5
22547; PWR5-NEXT:    and 5, 9, 5
22548; PWR5-NEXT:    ori 6, 6, 13107
22549; PWR5-NEXT:    sub 3, 3, 5
22550; PWR5-NEXT:    rldimi 6, 6, 32, 0
22551; PWR5-NEXT:    sub 4, 4, 8
22552; PWR5-NEXT:    and 8, 3, 6
22553; PWR5-NEXT:    rotldi 3, 3, 62
22554; PWR5-NEXT:    and 3, 3, 6
22555; PWR5-NEXT:    lis 7, 3855
22556; PWR5-NEXT:    and 5, 4, 6
22557; PWR5-NEXT:    rotldi 4, 4, 62
22558; PWR5-NEXT:    add 3, 8, 3
22559; PWR5-NEXT:    lis 9, 257
22560; PWR5-NEXT:    ori 7, 7, 3855
22561; PWR5-NEXT:    and 4, 4, 6
22562; PWR5-NEXT:    rldicl 6, 3, 60, 4
22563; PWR5-NEXT:    ori 9, 9, 257
22564; PWR5-NEXT:    rldimi 7, 7, 32, 0
22565; PWR5-NEXT:    add 4, 5, 4
22566; PWR5-NEXT:    add 3, 3, 6
22567; PWR5-NEXT:    rldimi 9, 9, 32, 0
22568; PWR5-NEXT:    rldicl 5, 4, 60, 4
22569; PWR5-NEXT:    and 3, 3, 7
22570; PWR5-NEXT:    add 4, 4, 5
22571; PWR5-NEXT:    mulld 3, 3, 9
22572; PWR5-NEXT:    and 4, 4, 7
22573; PWR5-NEXT:    rldicl 3, 3, 8, 56
22574; PWR5-NEXT:    mulld 4, 4, 9
22575; PWR5-NEXT:    li 5, 41
22576; PWR5-NEXT:    subfic 3, 3, 41
22577; PWR5-NEXT:    rldicl 4, 4, 8, 56
22578; PWR5-NEXT:    subfe 3, 5, 5
22579; PWR5-NEXT:    subfic 4, 4, 41
22580; PWR5-NEXT:    subfe 4, 5, 5
22581; PWR5-NEXT:    blr
22582;
22583; PWR6-LABEL: ugt_41_v2i64:
22584; PWR6:       # %bb.0:
22585; PWR6-NEXT:    lis 5, 21845
22586; PWR6-NEXT:    lis 6, 13107
22587; PWR6-NEXT:    ori 5, 5, 21845
22588; PWR6-NEXT:    rotldi 8, 4, 63
22589; PWR6-NEXT:    rotldi 9, 3, 63
22590; PWR6-NEXT:    rldimi 5, 5, 32, 0
22591; PWR6-NEXT:    and 8, 8, 5
22592; PWR6-NEXT:    and 5, 9, 5
22593; PWR6-NEXT:    ori 6, 6, 13107
22594; PWR6-NEXT:    sub 3, 3, 5
22595; PWR6-NEXT:    rldimi 6, 6, 32, 0
22596; PWR6-NEXT:    sub 4, 4, 8
22597; PWR6-NEXT:    and 8, 3, 6
22598; PWR6-NEXT:    rotldi 3, 3, 62
22599; PWR6-NEXT:    and 3, 3, 6
22600; PWR6-NEXT:    lis 7, 3855
22601; PWR6-NEXT:    and 5, 4, 6
22602; PWR6-NEXT:    rotldi 4, 4, 62
22603; PWR6-NEXT:    add 3, 8, 3
22604; PWR6-NEXT:    lis 9, 257
22605; PWR6-NEXT:    ori 7, 7, 3855
22606; PWR6-NEXT:    and 4, 4, 6
22607; PWR6-NEXT:    rldicl 6, 3, 60, 4
22608; PWR6-NEXT:    ori 9, 9, 257
22609; PWR6-NEXT:    rldimi 7, 7, 32, 0
22610; PWR6-NEXT:    add 4, 5, 4
22611; PWR6-NEXT:    add 3, 3, 6
22612; PWR6-NEXT:    rldimi 9, 9, 32, 0
22613; PWR6-NEXT:    rldicl 5, 4, 60, 4
22614; PWR6-NEXT:    and 3, 3, 7
22615; PWR6-NEXT:    add 4, 4, 5
22616; PWR6-NEXT:    mulld 3, 3, 9
22617; PWR6-NEXT:    and 4, 4, 7
22618; PWR6-NEXT:    rldicl 3, 3, 8, 56
22619; PWR6-NEXT:    mulld 4, 4, 9
22620; PWR6-NEXT:    li 5, 41
22621; PWR6-NEXT:    subfic 3, 3, 41
22622; PWR6-NEXT:    rldicl 4, 4, 8, 56
22623; PWR6-NEXT:    subfe 3, 5, 5
22624; PWR6-NEXT:    subfic 4, 4, 41
22625; PWR6-NEXT:    subfe 4, 5, 5
22626; PWR6-NEXT:    blr
22627;
22628; PWR7-LABEL: ugt_41_v2i64:
22629; PWR7:       # %bb.0:
22630; PWR7-NEXT:    addi 3, 1, -32
22631; PWR7-NEXT:    li 5, -1
22632; PWR7-NEXT:    stxvd2x 34, 0, 3
22633; PWR7-NEXT:    ld 4, -24(1)
22634; PWR7-NEXT:    ld 3, -32(1)
22635; PWR7-NEXT:    popcntd 4, 4
22636; PWR7-NEXT:    popcntd 3, 3
22637; PWR7-NEXT:    cmpldi 4, 41
22638; PWR7-NEXT:    li 4, 0
22639; PWR7-NEXT:    iselgt 6, 5, 4
22640; PWR7-NEXT:    cmpldi 3, 41
22641; PWR7-NEXT:    iselgt 3, 5, 4
22642; PWR7-NEXT:    std 6, -8(1)
22643; PWR7-NEXT:    std 3, -16(1)
22644; PWR7-NEXT:    addi 3, 1, -16
22645; PWR7-NEXT:    lxvd2x 34, 0, 3
22646; PWR7-NEXT:    blr
22647;
22648; PWR8-LABEL: ugt_41_v2i64:
22649; PWR8:       # %bb.0:
22650; PWR8-NEXT:    addis 3, 2, .LCPI180_0@toc@ha
22651; PWR8-NEXT:    vpopcntd 2, 2
22652; PWR8-NEXT:    addi 3, 3, .LCPI180_0@toc@l
22653; PWR8-NEXT:    lxvd2x 35, 0, 3
22654; PWR8-NEXT:    vcmpgtud 2, 2, 3
22655; PWR8-NEXT:    blr
22656;
22657; PWR9-LABEL: ugt_41_v2i64:
22658; PWR9:       # %bb.0:
22659; PWR9-NEXT:    addis 3, 2, .LCPI180_0@toc@ha
22660; PWR9-NEXT:    vpopcntd 2, 2
22661; PWR9-NEXT:    addi 3, 3, .LCPI180_0@toc@l
22662; PWR9-NEXT:    lxv 35, 0(3)
22663; PWR9-NEXT:    vcmpgtud 2, 2, 3
22664; PWR9-NEXT:    blr
22665  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22666  %3 = icmp ugt <2 x i64> %2, <i64 41, i64 41>
22667  %4 = sext <2 x i1> %3 to <2 x i64>
22668  ret <2 x i64> %4
22669}
22670
22671define <2 x i64> @ult_42_v2i64(<2 x i64> %0) {
22672; PWR5-LABEL: ult_42_v2i64:
22673; PWR5:       # %bb.0:
22674; PWR5-NEXT:    lis 5, 21845
22675; PWR5-NEXT:    lis 6, 13107
22676; PWR5-NEXT:    ori 5, 5, 21845
22677; PWR5-NEXT:    rotldi 8, 4, 63
22678; PWR5-NEXT:    rotldi 9, 3, 63
22679; PWR5-NEXT:    rldimi 5, 5, 32, 0
22680; PWR5-NEXT:    and 8, 8, 5
22681; PWR5-NEXT:    and 5, 9, 5
22682; PWR5-NEXT:    ori 6, 6, 13107
22683; PWR5-NEXT:    sub 3, 3, 5
22684; PWR5-NEXT:    rldimi 6, 6, 32, 0
22685; PWR5-NEXT:    sub 4, 4, 8
22686; PWR5-NEXT:    and 8, 3, 6
22687; PWR5-NEXT:    rotldi 3, 3, 62
22688; PWR5-NEXT:    and 3, 3, 6
22689; PWR5-NEXT:    lis 7, 3855
22690; PWR5-NEXT:    and 5, 4, 6
22691; PWR5-NEXT:    rotldi 4, 4, 62
22692; PWR5-NEXT:    add 3, 8, 3
22693; PWR5-NEXT:    lis 9, 257
22694; PWR5-NEXT:    ori 7, 7, 3855
22695; PWR5-NEXT:    and 4, 4, 6
22696; PWR5-NEXT:    rldicl 6, 3, 60, 4
22697; PWR5-NEXT:    ori 9, 9, 257
22698; PWR5-NEXT:    rldimi 7, 7, 32, 0
22699; PWR5-NEXT:    add 4, 5, 4
22700; PWR5-NEXT:    add 3, 3, 6
22701; PWR5-NEXT:    rldimi 9, 9, 32, 0
22702; PWR5-NEXT:    rldicl 5, 4, 60, 4
22703; PWR5-NEXT:    and 3, 3, 7
22704; PWR5-NEXT:    add 4, 4, 5
22705; PWR5-NEXT:    mulld 3, 3, 9
22706; PWR5-NEXT:    and 4, 4, 7
22707; PWR5-NEXT:    rldicl 3, 3, 8, 56
22708; PWR5-NEXT:    li 5, 42
22709; PWR5-NEXT:    mulld 4, 4, 9
22710; PWR5-NEXT:    subc 6, 3, 5
22711; PWR5-NEXT:    rldicl 4, 4, 8, 56
22712; PWR5-NEXT:    subfe 3, 3, 3
22713; PWR5-NEXT:    subc 5, 4, 5
22714; PWR5-NEXT:    subfe 4, 4, 4
22715; PWR5-NEXT:    blr
22716;
22717; PWR6-LABEL: ult_42_v2i64:
22718; PWR6:       # %bb.0:
22719; PWR6-NEXT:    lis 5, 21845
22720; PWR6-NEXT:    lis 6, 13107
22721; PWR6-NEXT:    ori 5, 5, 21845
22722; PWR6-NEXT:    rotldi 8, 4, 63
22723; PWR6-NEXT:    rotldi 9, 3, 63
22724; PWR6-NEXT:    rldimi 5, 5, 32, 0
22725; PWR6-NEXT:    and 8, 8, 5
22726; PWR6-NEXT:    and 5, 9, 5
22727; PWR6-NEXT:    ori 6, 6, 13107
22728; PWR6-NEXT:    sub 3, 3, 5
22729; PWR6-NEXT:    rldimi 6, 6, 32, 0
22730; PWR6-NEXT:    sub 4, 4, 8
22731; PWR6-NEXT:    and 8, 3, 6
22732; PWR6-NEXT:    rotldi 3, 3, 62
22733; PWR6-NEXT:    and 3, 3, 6
22734; PWR6-NEXT:    lis 7, 3855
22735; PWR6-NEXT:    and 5, 4, 6
22736; PWR6-NEXT:    rotldi 4, 4, 62
22737; PWR6-NEXT:    add 3, 8, 3
22738; PWR6-NEXT:    lis 9, 257
22739; PWR6-NEXT:    ori 7, 7, 3855
22740; PWR6-NEXT:    and 4, 4, 6
22741; PWR6-NEXT:    rldicl 6, 3, 60, 4
22742; PWR6-NEXT:    ori 9, 9, 257
22743; PWR6-NEXT:    rldimi 7, 7, 32, 0
22744; PWR6-NEXT:    add 4, 5, 4
22745; PWR6-NEXT:    add 3, 3, 6
22746; PWR6-NEXT:    rldimi 9, 9, 32, 0
22747; PWR6-NEXT:    rldicl 5, 4, 60, 4
22748; PWR6-NEXT:    and 3, 3, 7
22749; PWR6-NEXT:    add 4, 4, 5
22750; PWR6-NEXT:    mulld 3, 3, 9
22751; PWR6-NEXT:    and 4, 4, 7
22752; PWR6-NEXT:    rldicl 3, 3, 8, 56
22753; PWR6-NEXT:    li 5, 42
22754; PWR6-NEXT:    mulld 4, 4, 9
22755; PWR6-NEXT:    subc 6, 3, 5
22756; PWR6-NEXT:    rldicl 4, 4, 8, 56
22757; PWR6-NEXT:    subfe 3, 3, 3
22758; PWR6-NEXT:    subc 5, 4, 5
22759; PWR6-NEXT:    subfe 4, 4, 4
22760; PWR6-NEXT:    blr
22761;
22762; PWR7-LABEL: ult_42_v2i64:
22763; PWR7:       # %bb.0:
22764; PWR7-NEXT:    addi 3, 1, -32
22765; PWR7-NEXT:    li 5, -1
22766; PWR7-NEXT:    stxvd2x 34, 0, 3
22767; PWR7-NEXT:    ld 4, -24(1)
22768; PWR7-NEXT:    ld 3, -32(1)
22769; PWR7-NEXT:    popcntd 4, 4
22770; PWR7-NEXT:    popcntd 3, 3
22771; PWR7-NEXT:    cmpldi 4, 42
22772; PWR7-NEXT:    li 4, 0
22773; PWR7-NEXT:    isellt 6, 5, 4
22774; PWR7-NEXT:    cmpldi 3, 42
22775; PWR7-NEXT:    isellt 3, 5, 4
22776; PWR7-NEXT:    std 6, -8(1)
22777; PWR7-NEXT:    std 3, -16(1)
22778; PWR7-NEXT:    addi 3, 1, -16
22779; PWR7-NEXT:    lxvd2x 34, 0, 3
22780; PWR7-NEXT:    blr
22781;
22782; PWR8-LABEL: ult_42_v2i64:
22783; PWR8:       # %bb.0:
22784; PWR8-NEXT:    addis 3, 2, .LCPI181_0@toc@ha
22785; PWR8-NEXT:    vpopcntd 2, 2
22786; PWR8-NEXT:    addi 3, 3, .LCPI181_0@toc@l
22787; PWR8-NEXT:    lxvd2x 35, 0, 3
22788; PWR8-NEXT:    vcmpgtud 2, 3, 2
22789; PWR8-NEXT:    blr
22790;
22791; PWR9-LABEL: ult_42_v2i64:
22792; PWR9:       # %bb.0:
22793; PWR9-NEXT:    addis 3, 2, .LCPI181_0@toc@ha
22794; PWR9-NEXT:    vpopcntd 2, 2
22795; PWR9-NEXT:    addi 3, 3, .LCPI181_0@toc@l
22796; PWR9-NEXT:    lxv 35, 0(3)
22797; PWR9-NEXT:    vcmpgtud 2, 3, 2
22798; PWR9-NEXT:    blr
22799  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22800  %3 = icmp ult <2 x i64> %2, <i64 42, i64 42>
22801  %4 = sext <2 x i1> %3 to <2 x i64>
22802  ret <2 x i64> %4
22803}
22804
22805define <2 x i64> @ugt_42_v2i64(<2 x i64> %0) {
22806; PWR5-LABEL: ugt_42_v2i64:
22807; PWR5:       # %bb.0:
22808; PWR5-NEXT:    lis 5, 21845
22809; PWR5-NEXT:    lis 6, 13107
22810; PWR5-NEXT:    ori 5, 5, 21845
22811; PWR5-NEXT:    rotldi 8, 4, 63
22812; PWR5-NEXT:    rotldi 9, 3, 63
22813; PWR5-NEXT:    rldimi 5, 5, 32, 0
22814; PWR5-NEXT:    and 8, 8, 5
22815; PWR5-NEXT:    and 5, 9, 5
22816; PWR5-NEXT:    ori 6, 6, 13107
22817; PWR5-NEXT:    sub 3, 3, 5
22818; PWR5-NEXT:    rldimi 6, 6, 32, 0
22819; PWR5-NEXT:    sub 4, 4, 8
22820; PWR5-NEXT:    and 8, 3, 6
22821; PWR5-NEXT:    rotldi 3, 3, 62
22822; PWR5-NEXT:    and 3, 3, 6
22823; PWR5-NEXT:    lis 7, 3855
22824; PWR5-NEXT:    and 5, 4, 6
22825; PWR5-NEXT:    rotldi 4, 4, 62
22826; PWR5-NEXT:    add 3, 8, 3
22827; PWR5-NEXT:    lis 9, 257
22828; PWR5-NEXT:    ori 7, 7, 3855
22829; PWR5-NEXT:    and 4, 4, 6
22830; PWR5-NEXT:    rldicl 6, 3, 60, 4
22831; PWR5-NEXT:    ori 9, 9, 257
22832; PWR5-NEXT:    rldimi 7, 7, 32, 0
22833; PWR5-NEXT:    add 4, 5, 4
22834; PWR5-NEXT:    add 3, 3, 6
22835; PWR5-NEXT:    rldimi 9, 9, 32, 0
22836; PWR5-NEXT:    rldicl 5, 4, 60, 4
22837; PWR5-NEXT:    and 3, 3, 7
22838; PWR5-NEXT:    add 4, 4, 5
22839; PWR5-NEXT:    mulld 3, 3, 9
22840; PWR5-NEXT:    and 4, 4, 7
22841; PWR5-NEXT:    rldicl 3, 3, 8, 56
22842; PWR5-NEXT:    mulld 4, 4, 9
22843; PWR5-NEXT:    li 5, 42
22844; PWR5-NEXT:    subfic 3, 3, 42
22845; PWR5-NEXT:    rldicl 4, 4, 8, 56
22846; PWR5-NEXT:    subfe 3, 5, 5
22847; PWR5-NEXT:    subfic 4, 4, 42
22848; PWR5-NEXT:    subfe 4, 5, 5
22849; PWR5-NEXT:    blr
22850;
22851; PWR6-LABEL: ugt_42_v2i64:
22852; PWR6:       # %bb.0:
22853; PWR6-NEXT:    lis 5, 21845
22854; PWR6-NEXT:    lis 6, 13107
22855; PWR6-NEXT:    ori 5, 5, 21845
22856; PWR6-NEXT:    rotldi 8, 4, 63
22857; PWR6-NEXT:    rotldi 9, 3, 63
22858; PWR6-NEXT:    rldimi 5, 5, 32, 0
22859; PWR6-NEXT:    and 8, 8, 5
22860; PWR6-NEXT:    and 5, 9, 5
22861; PWR6-NEXT:    ori 6, 6, 13107
22862; PWR6-NEXT:    sub 3, 3, 5
22863; PWR6-NEXT:    rldimi 6, 6, 32, 0
22864; PWR6-NEXT:    sub 4, 4, 8
22865; PWR6-NEXT:    and 8, 3, 6
22866; PWR6-NEXT:    rotldi 3, 3, 62
22867; PWR6-NEXT:    and 3, 3, 6
22868; PWR6-NEXT:    lis 7, 3855
22869; PWR6-NEXT:    and 5, 4, 6
22870; PWR6-NEXT:    rotldi 4, 4, 62
22871; PWR6-NEXT:    add 3, 8, 3
22872; PWR6-NEXT:    lis 9, 257
22873; PWR6-NEXT:    ori 7, 7, 3855
22874; PWR6-NEXT:    and 4, 4, 6
22875; PWR6-NEXT:    rldicl 6, 3, 60, 4
22876; PWR6-NEXT:    ori 9, 9, 257
22877; PWR6-NEXT:    rldimi 7, 7, 32, 0
22878; PWR6-NEXT:    add 4, 5, 4
22879; PWR6-NEXT:    add 3, 3, 6
22880; PWR6-NEXT:    rldimi 9, 9, 32, 0
22881; PWR6-NEXT:    rldicl 5, 4, 60, 4
22882; PWR6-NEXT:    and 3, 3, 7
22883; PWR6-NEXT:    add 4, 4, 5
22884; PWR6-NEXT:    mulld 3, 3, 9
22885; PWR6-NEXT:    and 4, 4, 7
22886; PWR6-NEXT:    rldicl 3, 3, 8, 56
22887; PWR6-NEXT:    mulld 4, 4, 9
22888; PWR6-NEXT:    li 5, 42
22889; PWR6-NEXT:    subfic 3, 3, 42
22890; PWR6-NEXT:    rldicl 4, 4, 8, 56
22891; PWR6-NEXT:    subfe 3, 5, 5
22892; PWR6-NEXT:    subfic 4, 4, 42
22893; PWR6-NEXT:    subfe 4, 5, 5
22894; PWR6-NEXT:    blr
22895;
22896; PWR7-LABEL: ugt_42_v2i64:
22897; PWR7:       # %bb.0:
22898; PWR7-NEXT:    addi 3, 1, -32
22899; PWR7-NEXT:    li 5, -1
22900; PWR7-NEXT:    stxvd2x 34, 0, 3
22901; PWR7-NEXT:    ld 4, -24(1)
22902; PWR7-NEXT:    ld 3, -32(1)
22903; PWR7-NEXT:    popcntd 4, 4
22904; PWR7-NEXT:    popcntd 3, 3
22905; PWR7-NEXT:    cmpldi 4, 42
22906; PWR7-NEXT:    li 4, 0
22907; PWR7-NEXT:    iselgt 6, 5, 4
22908; PWR7-NEXT:    cmpldi 3, 42
22909; PWR7-NEXT:    iselgt 3, 5, 4
22910; PWR7-NEXT:    std 6, -8(1)
22911; PWR7-NEXT:    std 3, -16(1)
22912; PWR7-NEXT:    addi 3, 1, -16
22913; PWR7-NEXT:    lxvd2x 34, 0, 3
22914; PWR7-NEXT:    blr
22915;
22916; PWR8-LABEL: ugt_42_v2i64:
22917; PWR8:       # %bb.0:
22918; PWR8-NEXT:    addis 3, 2, .LCPI182_0@toc@ha
22919; PWR8-NEXT:    vpopcntd 2, 2
22920; PWR8-NEXT:    addi 3, 3, .LCPI182_0@toc@l
22921; PWR8-NEXT:    lxvd2x 35, 0, 3
22922; PWR8-NEXT:    vcmpgtud 2, 2, 3
22923; PWR8-NEXT:    blr
22924;
22925; PWR9-LABEL: ugt_42_v2i64:
22926; PWR9:       # %bb.0:
22927; PWR9-NEXT:    addis 3, 2, .LCPI182_0@toc@ha
22928; PWR9-NEXT:    vpopcntd 2, 2
22929; PWR9-NEXT:    addi 3, 3, .LCPI182_0@toc@l
22930; PWR9-NEXT:    lxv 35, 0(3)
22931; PWR9-NEXT:    vcmpgtud 2, 2, 3
22932; PWR9-NEXT:    blr
22933  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22934  %3 = icmp ugt <2 x i64> %2, <i64 42, i64 42>
22935  %4 = sext <2 x i1> %3 to <2 x i64>
22936  ret <2 x i64> %4
22937}
22938
22939define <2 x i64> @ult_43_v2i64(<2 x i64> %0) {
22940; PWR5-LABEL: ult_43_v2i64:
22941; PWR5:       # %bb.0:
22942; PWR5-NEXT:    lis 5, 21845
22943; PWR5-NEXT:    lis 6, 13107
22944; PWR5-NEXT:    ori 5, 5, 21845
22945; PWR5-NEXT:    rotldi 8, 4, 63
22946; PWR5-NEXT:    rotldi 9, 3, 63
22947; PWR5-NEXT:    rldimi 5, 5, 32, 0
22948; PWR5-NEXT:    and 8, 8, 5
22949; PWR5-NEXT:    and 5, 9, 5
22950; PWR5-NEXT:    ori 6, 6, 13107
22951; PWR5-NEXT:    sub 3, 3, 5
22952; PWR5-NEXT:    rldimi 6, 6, 32, 0
22953; PWR5-NEXT:    sub 4, 4, 8
22954; PWR5-NEXT:    and 8, 3, 6
22955; PWR5-NEXT:    rotldi 3, 3, 62
22956; PWR5-NEXT:    and 3, 3, 6
22957; PWR5-NEXT:    lis 7, 3855
22958; PWR5-NEXT:    and 5, 4, 6
22959; PWR5-NEXT:    rotldi 4, 4, 62
22960; PWR5-NEXT:    add 3, 8, 3
22961; PWR5-NEXT:    lis 9, 257
22962; PWR5-NEXT:    ori 7, 7, 3855
22963; PWR5-NEXT:    and 4, 4, 6
22964; PWR5-NEXT:    rldicl 6, 3, 60, 4
22965; PWR5-NEXT:    ori 9, 9, 257
22966; PWR5-NEXT:    rldimi 7, 7, 32, 0
22967; PWR5-NEXT:    add 4, 5, 4
22968; PWR5-NEXT:    add 3, 3, 6
22969; PWR5-NEXT:    rldimi 9, 9, 32, 0
22970; PWR5-NEXT:    rldicl 5, 4, 60, 4
22971; PWR5-NEXT:    and 3, 3, 7
22972; PWR5-NEXT:    add 4, 4, 5
22973; PWR5-NEXT:    mulld 3, 3, 9
22974; PWR5-NEXT:    and 4, 4, 7
22975; PWR5-NEXT:    rldicl 3, 3, 8, 56
22976; PWR5-NEXT:    li 5, 43
22977; PWR5-NEXT:    mulld 4, 4, 9
22978; PWR5-NEXT:    subc 6, 3, 5
22979; PWR5-NEXT:    rldicl 4, 4, 8, 56
22980; PWR5-NEXT:    subfe 3, 3, 3
22981; PWR5-NEXT:    subc 5, 4, 5
22982; PWR5-NEXT:    subfe 4, 4, 4
22983; PWR5-NEXT:    blr
22984;
22985; PWR6-LABEL: ult_43_v2i64:
22986; PWR6:       # %bb.0:
22987; PWR6-NEXT:    lis 5, 21845
22988; PWR6-NEXT:    lis 6, 13107
22989; PWR6-NEXT:    ori 5, 5, 21845
22990; PWR6-NEXT:    rotldi 8, 4, 63
22991; PWR6-NEXT:    rotldi 9, 3, 63
22992; PWR6-NEXT:    rldimi 5, 5, 32, 0
22993; PWR6-NEXT:    and 8, 8, 5
22994; PWR6-NEXT:    and 5, 9, 5
22995; PWR6-NEXT:    ori 6, 6, 13107
22996; PWR6-NEXT:    sub 3, 3, 5
22997; PWR6-NEXT:    rldimi 6, 6, 32, 0
22998; PWR6-NEXT:    sub 4, 4, 8
22999; PWR6-NEXT:    and 8, 3, 6
23000; PWR6-NEXT:    rotldi 3, 3, 62
23001; PWR6-NEXT:    and 3, 3, 6
23002; PWR6-NEXT:    lis 7, 3855
23003; PWR6-NEXT:    and 5, 4, 6
23004; PWR6-NEXT:    rotldi 4, 4, 62
23005; PWR6-NEXT:    add 3, 8, 3
23006; PWR6-NEXT:    lis 9, 257
23007; PWR6-NEXT:    ori 7, 7, 3855
23008; PWR6-NEXT:    and 4, 4, 6
23009; PWR6-NEXT:    rldicl 6, 3, 60, 4
23010; PWR6-NEXT:    ori 9, 9, 257
23011; PWR6-NEXT:    rldimi 7, 7, 32, 0
23012; PWR6-NEXT:    add 4, 5, 4
23013; PWR6-NEXT:    add 3, 3, 6
23014; PWR6-NEXT:    rldimi 9, 9, 32, 0
23015; PWR6-NEXT:    rldicl 5, 4, 60, 4
23016; PWR6-NEXT:    and 3, 3, 7
23017; PWR6-NEXT:    add 4, 4, 5
23018; PWR6-NEXT:    mulld 3, 3, 9
23019; PWR6-NEXT:    and 4, 4, 7
23020; PWR6-NEXT:    rldicl 3, 3, 8, 56
23021; PWR6-NEXT:    li 5, 43
23022; PWR6-NEXT:    mulld 4, 4, 9
23023; PWR6-NEXT:    subc 6, 3, 5
23024; PWR6-NEXT:    rldicl 4, 4, 8, 56
23025; PWR6-NEXT:    subfe 3, 3, 3
23026; PWR6-NEXT:    subc 5, 4, 5
23027; PWR6-NEXT:    subfe 4, 4, 4
23028; PWR6-NEXT:    blr
23029;
23030; PWR7-LABEL: ult_43_v2i64:
23031; PWR7:       # %bb.0:
23032; PWR7-NEXT:    addi 3, 1, -32
23033; PWR7-NEXT:    li 5, -1
23034; PWR7-NEXT:    stxvd2x 34, 0, 3
23035; PWR7-NEXT:    ld 4, -24(1)
23036; PWR7-NEXT:    ld 3, -32(1)
23037; PWR7-NEXT:    popcntd 4, 4
23038; PWR7-NEXT:    popcntd 3, 3
23039; PWR7-NEXT:    cmpldi 4, 43
23040; PWR7-NEXT:    li 4, 0
23041; PWR7-NEXT:    isellt 6, 5, 4
23042; PWR7-NEXT:    cmpldi 3, 43
23043; PWR7-NEXT:    isellt 3, 5, 4
23044; PWR7-NEXT:    std 6, -8(1)
23045; PWR7-NEXT:    std 3, -16(1)
23046; PWR7-NEXT:    addi 3, 1, -16
23047; PWR7-NEXT:    lxvd2x 34, 0, 3
23048; PWR7-NEXT:    blr
23049;
23050; PWR8-LABEL: ult_43_v2i64:
23051; PWR8:       # %bb.0:
23052; PWR8-NEXT:    addis 3, 2, .LCPI183_0@toc@ha
23053; PWR8-NEXT:    vpopcntd 2, 2
23054; PWR8-NEXT:    addi 3, 3, .LCPI183_0@toc@l
23055; PWR8-NEXT:    lxvd2x 35, 0, 3
23056; PWR8-NEXT:    vcmpgtud 2, 3, 2
23057; PWR8-NEXT:    blr
23058;
23059; PWR9-LABEL: ult_43_v2i64:
23060; PWR9:       # %bb.0:
23061; PWR9-NEXT:    addis 3, 2, .LCPI183_0@toc@ha
23062; PWR9-NEXT:    vpopcntd 2, 2
23063; PWR9-NEXT:    addi 3, 3, .LCPI183_0@toc@l
23064; PWR9-NEXT:    lxv 35, 0(3)
23065; PWR9-NEXT:    vcmpgtud 2, 3, 2
23066; PWR9-NEXT:    blr
23067  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23068  %3 = icmp ult <2 x i64> %2, <i64 43, i64 43>
23069  %4 = sext <2 x i1> %3 to <2 x i64>
23070  ret <2 x i64> %4
23071}
23072
23073define <2 x i64> @ugt_43_v2i64(<2 x i64> %0) {
23074; PWR5-LABEL: ugt_43_v2i64:
23075; PWR5:       # %bb.0:
23076; PWR5-NEXT:    lis 5, 21845
23077; PWR5-NEXT:    lis 6, 13107
23078; PWR5-NEXT:    ori 5, 5, 21845
23079; PWR5-NEXT:    rotldi 8, 4, 63
23080; PWR5-NEXT:    rotldi 9, 3, 63
23081; PWR5-NEXT:    rldimi 5, 5, 32, 0
23082; PWR5-NEXT:    and 8, 8, 5
23083; PWR5-NEXT:    and 5, 9, 5
23084; PWR5-NEXT:    ori 6, 6, 13107
23085; PWR5-NEXT:    sub 3, 3, 5
23086; PWR5-NEXT:    rldimi 6, 6, 32, 0
23087; PWR5-NEXT:    sub 4, 4, 8
23088; PWR5-NEXT:    and 8, 3, 6
23089; PWR5-NEXT:    rotldi 3, 3, 62
23090; PWR5-NEXT:    and 3, 3, 6
23091; PWR5-NEXT:    lis 7, 3855
23092; PWR5-NEXT:    and 5, 4, 6
23093; PWR5-NEXT:    rotldi 4, 4, 62
23094; PWR5-NEXT:    add 3, 8, 3
23095; PWR5-NEXT:    lis 9, 257
23096; PWR5-NEXT:    ori 7, 7, 3855
23097; PWR5-NEXT:    and 4, 4, 6
23098; PWR5-NEXT:    rldicl 6, 3, 60, 4
23099; PWR5-NEXT:    ori 9, 9, 257
23100; PWR5-NEXT:    rldimi 7, 7, 32, 0
23101; PWR5-NEXT:    add 4, 5, 4
23102; PWR5-NEXT:    add 3, 3, 6
23103; PWR5-NEXT:    rldimi 9, 9, 32, 0
23104; PWR5-NEXT:    rldicl 5, 4, 60, 4
23105; PWR5-NEXT:    and 3, 3, 7
23106; PWR5-NEXT:    add 4, 4, 5
23107; PWR5-NEXT:    mulld 3, 3, 9
23108; PWR5-NEXT:    and 4, 4, 7
23109; PWR5-NEXT:    rldicl 3, 3, 8, 56
23110; PWR5-NEXT:    mulld 4, 4, 9
23111; PWR5-NEXT:    li 5, 43
23112; PWR5-NEXT:    subfic 3, 3, 43
23113; PWR5-NEXT:    rldicl 4, 4, 8, 56
23114; PWR5-NEXT:    subfe 3, 5, 5
23115; PWR5-NEXT:    subfic 4, 4, 43
23116; PWR5-NEXT:    subfe 4, 5, 5
23117; PWR5-NEXT:    blr
23118;
23119; PWR6-LABEL: ugt_43_v2i64:
23120; PWR6:       # %bb.0:
23121; PWR6-NEXT:    lis 5, 21845
23122; PWR6-NEXT:    lis 6, 13107
23123; PWR6-NEXT:    ori 5, 5, 21845
23124; PWR6-NEXT:    rotldi 8, 4, 63
23125; PWR6-NEXT:    rotldi 9, 3, 63
23126; PWR6-NEXT:    rldimi 5, 5, 32, 0
23127; PWR6-NEXT:    and 8, 8, 5
23128; PWR6-NEXT:    and 5, 9, 5
23129; PWR6-NEXT:    ori 6, 6, 13107
23130; PWR6-NEXT:    sub 3, 3, 5
23131; PWR6-NEXT:    rldimi 6, 6, 32, 0
23132; PWR6-NEXT:    sub 4, 4, 8
23133; PWR6-NEXT:    and 8, 3, 6
23134; PWR6-NEXT:    rotldi 3, 3, 62
23135; PWR6-NEXT:    and 3, 3, 6
23136; PWR6-NEXT:    lis 7, 3855
23137; PWR6-NEXT:    and 5, 4, 6
23138; PWR6-NEXT:    rotldi 4, 4, 62
23139; PWR6-NEXT:    add 3, 8, 3
23140; PWR6-NEXT:    lis 9, 257
23141; PWR6-NEXT:    ori 7, 7, 3855
23142; PWR6-NEXT:    and 4, 4, 6
23143; PWR6-NEXT:    rldicl 6, 3, 60, 4
23144; PWR6-NEXT:    ori 9, 9, 257
23145; PWR6-NEXT:    rldimi 7, 7, 32, 0
23146; PWR6-NEXT:    add 4, 5, 4
23147; PWR6-NEXT:    add 3, 3, 6
23148; PWR6-NEXT:    rldimi 9, 9, 32, 0
23149; PWR6-NEXT:    rldicl 5, 4, 60, 4
23150; PWR6-NEXT:    and 3, 3, 7
23151; PWR6-NEXT:    add 4, 4, 5
23152; PWR6-NEXT:    mulld 3, 3, 9
23153; PWR6-NEXT:    and 4, 4, 7
23154; PWR6-NEXT:    rldicl 3, 3, 8, 56
23155; PWR6-NEXT:    mulld 4, 4, 9
23156; PWR6-NEXT:    li 5, 43
23157; PWR6-NEXT:    subfic 3, 3, 43
23158; PWR6-NEXT:    rldicl 4, 4, 8, 56
23159; PWR6-NEXT:    subfe 3, 5, 5
23160; PWR6-NEXT:    subfic 4, 4, 43
23161; PWR6-NEXT:    subfe 4, 5, 5
23162; PWR6-NEXT:    blr
23163;
23164; PWR7-LABEL: ugt_43_v2i64:
23165; PWR7:       # %bb.0:
23166; PWR7-NEXT:    addi 3, 1, -32
23167; PWR7-NEXT:    li 5, -1
23168; PWR7-NEXT:    stxvd2x 34, 0, 3
23169; PWR7-NEXT:    ld 4, -24(1)
23170; PWR7-NEXT:    ld 3, -32(1)
23171; PWR7-NEXT:    popcntd 4, 4
23172; PWR7-NEXT:    popcntd 3, 3
23173; PWR7-NEXT:    cmpldi 4, 43
23174; PWR7-NEXT:    li 4, 0
23175; PWR7-NEXT:    iselgt 6, 5, 4
23176; PWR7-NEXT:    cmpldi 3, 43
23177; PWR7-NEXT:    iselgt 3, 5, 4
23178; PWR7-NEXT:    std 6, -8(1)
23179; PWR7-NEXT:    std 3, -16(1)
23180; PWR7-NEXT:    addi 3, 1, -16
23181; PWR7-NEXT:    lxvd2x 34, 0, 3
23182; PWR7-NEXT:    blr
23183;
23184; PWR8-LABEL: ugt_43_v2i64:
23185; PWR8:       # %bb.0:
23186; PWR8-NEXT:    addis 3, 2, .LCPI184_0@toc@ha
23187; PWR8-NEXT:    vpopcntd 2, 2
23188; PWR8-NEXT:    addi 3, 3, .LCPI184_0@toc@l
23189; PWR8-NEXT:    lxvd2x 35, 0, 3
23190; PWR8-NEXT:    vcmpgtud 2, 2, 3
23191; PWR8-NEXT:    blr
23192;
23193; PWR9-LABEL: ugt_43_v2i64:
23194; PWR9:       # %bb.0:
23195; PWR9-NEXT:    addis 3, 2, .LCPI184_0@toc@ha
23196; PWR9-NEXT:    vpopcntd 2, 2
23197; PWR9-NEXT:    addi 3, 3, .LCPI184_0@toc@l
23198; PWR9-NEXT:    lxv 35, 0(3)
23199; PWR9-NEXT:    vcmpgtud 2, 2, 3
23200; PWR9-NEXT:    blr
23201  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23202  %3 = icmp ugt <2 x i64> %2, <i64 43, i64 43>
23203  %4 = sext <2 x i1> %3 to <2 x i64>
23204  ret <2 x i64> %4
23205}
23206
23207define <2 x i64> @ult_44_v2i64(<2 x i64> %0) {
23208; PWR5-LABEL: ult_44_v2i64:
23209; PWR5:       # %bb.0:
23210; PWR5-NEXT:    lis 5, 21845
23211; PWR5-NEXT:    lis 6, 13107
23212; PWR5-NEXT:    ori 5, 5, 21845
23213; PWR5-NEXT:    rotldi 8, 4, 63
23214; PWR5-NEXT:    rotldi 9, 3, 63
23215; PWR5-NEXT:    rldimi 5, 5, 32, 0
23216; PWR5-NEXT:    and 8, 8, 5
23217; PWR5-NEXT:    and 5, 9, 5
23218; PWR5-NEXT:    ori 6, 6, 13107
23219; PWR5-NEXT:    sub 3, 3, 5
23220; PWR5-NEXT:    rldimi 6, 6, 32, 0
23221; PWR5-NEXT:    sub 4, 4, 8
23222; PWR5-NEXT:    and 8, 3, 6
23223; PWR5-NEXT:    rotldi 3, 3, 62
23224; PWR5-NEXT:    and 3, 3, 6
23225; PWR5-NEXT:    lis 7, 3855
23226; PWR5-NEXT:    and 5, 4, 6
23227; PWR5-NEXT:    rotldi 4, 4, 62
23228; PWR5-NEXT:    add 3, 8, 3
23229; PWR5-NEXT:    lis 9, 257
23230; PWR5-NEXT:    ori 7, 7, 3855
23231; PWR5-NEXT:    and 4, 4, 6
23232; PWR5-NEXT:    rldicl 6, 3, 60, 4
23233; PWR5-NEXT:    ori 9, 9, 257
23234; PWR5-NEXT:    rldimi 7, 7, 32, 0
23235; PWR5-NEXT:    add 4, 5, 4
23236; PWR5-NEXT:    add 3, 3, 6
23237; PWR5-NEXT:    rldimi 9, 9, 32, 0
23238; PWR5-NEXT:    rldicl 5, 4, 60, 4
23239; PWR5-NEXT:    and 3, 3, 7
23240; PWR5-NEXT:    add 4, 4, 5
23241; PWR5-NEXT:    mulld 3, 3, 9
23242; PWR5-NEXT:    and 4, 4, 7
23243; PWR5-NEXT:    rldicl 3, 3, 8, 56
23244; PWR5-NEXT:    li 5, 44
23245; PWR5-NEXT:    mulld 4, 4, 9
23246; PWR5-NEXT:    subc 6, 3, 5
23247; PWR5-NEXT:    rldicl 4, 4, 8, 56
23248; PWR5-NEXT:    subfe 3, 3, 3
23249; PWR5-NEXT:    subc 5, 4, 5
23250; PWR5-NEXT:    subfe 4, 4, 4
23251; PWR5-NEXT:    blr
23252;
23253; PWR6-LABEL: ult_44_v2i64:
23254; PWR6:       # %bb.0:
23255; PWR6-NEXT:    lis 5, 21845
23256; PWR6-NEXT:    lis 6, 13107
23257; PWR6-NEXT:    ori 5, 5, 21845
23258; PWR6-NEXT:    rotldi 8, 4, 63
23259; PWR6-NEXT:    rotldi 9, 3, 63
23260; PWR6-NEXT:    rldimi 5, 5, 32, 0
23261; PWR6-NEXT:    and 8, 8, 5
23262; PWR6-NEXT:    and 5, 9, 5
23263; PWR6-NEXT:    ori 6, 6, 13107
23264; PWR6-NEXT:    sub 3, 3, 5
23265; PWR6-NEXT:    rldimi 6, 6, 32, 0
23266; PWR6-NEXT:    sub 4, 4, 8
23267; PWR6-NEXT:    and 8, 3, 6
23268; PWR6-NEXT:    rotldi 3, 3, 62
23269; PWR6-NEXT:    and 3, 3, 6
23270; PWR6-NEXT:    lis 7, 3855
23271; PWR6-NEXT:    and 5, 4, 6
23272; PWR6-NEXT:    rotldi 4, 4, 62
23273; PWR6-NEXT:    add 3, 8, 3
23274; PWR6-NEXT:    lis 9, 257
23275; PWR6-NEXT:    ori 7, 7, 3855
23276; PWR6-NEXT:    and 4, 4, 6
23277; PWR6-NEXT:    rldicl 6, 3, 60, 4
23278; PWR6-NEXT:    ori 9, 9, 257
23279; PWR6-NEXT:    rldimi 7, 7, 32, 0
23280; PWR6-NEXT:    add 4, 5, 4
23281; PWR6-NEXT:    add 3, 3, 6
23282; PWR6-NEXT:    rldimi 9, 9, 32, 0
23283; PWR6-NEXT:    rldicl 5, 4, 60, 4
23284; PWR6-NEXT:    and 3, 3, 7
23285; PWR6-NEXT:    add 4, 4, 5
23286; PWR6-NEXT:    mulld 3, 3, 9
23287; PWR6-NEXT:    and 4, 4, 7
23288; PWR6-NEXT:    rldicl 3, 3, 8, 56
23289; PWR6-NEXT:    li 5, 44
23290; PWR6-NEXT:    mulld 4, 4, 9
23291; PWR6-NEXT:    subc 6, 3, 5
23292; PWR6-NEXT:    rldicl 4, 4, 8, 56
23293; PWR6-NEXT:    subfe 3, 3, 3
23294; PWR6-NEXT:    subc 5, 4, 5
23295; PWR6-NEXT:    subfe 4, 4, 4
23296; PWR6-NEXT:    blr
23297;
23298; PWR7-LABEL: ult_44_v2i64:
23299; PWR7:       # %bb.0:
23300; PWR7-NEXT:    addi 3, 1, -32
23301; PWR7-NEXT:    li 5, -1
23302; PWR7-NEXT:    stxvd2x 34, 0, 3
23303; PWR7-NEXT:    ld 4, -24(1)
23304; PWR7-NEXT:    ld 3, -32(1)
23305; PWR7-NEXT:    popcntd 4, 4
23306; PWR7-NEXT:    popcntd 3, 3
23307; PWR7-NEXT:    cmpldi 4, 44
23308; PWR7-NEXT:    li 4, 0
23309; PWR7-NEXT:    isellt 6, 5, 4
23310; PWR7-NEXT:    cmpldi 3, 44
23311; PWR7-NEXT:    isellt 3, 5, 4
23312; PWR7-NEXT:    std 6, -8(1)
23313; PWR7-NEXT:    std 3, -16(1)
23314; PWR7-NEXT:    addi 3, 1, -16
23315; PWR7-NEXT:    lxvd2x 34, 0, 3
23316; PWR7-NEXT:    blr
23317;
23318; PWR8-LABEL: ult_44_v2i64:
23319; PWR8:       # %bb.0:
23320; PWR8-NEXT:    addis 3, 2, .LCPI185_0@toc@ha
23321; PWR8-NEXT:    vpopcntd 2, 2
23322; PWR8-NEXT:    addi 3, 3, .LCPI185_0@toc@l
23323; PWR8-NEXT:    lxvd2x 35, 0, 3
23324; PWR8-NEXT:    vcmpgtud 2, 3, 2
23325; PWR8-NEXT:    blr
23326;
23327; PWR9-LABEL: ult_44_v2i64:
23328; PWR9:       # %bb.0:
23329; PWR9-NEXT:    addis 3, 2, .LCPI185_0@toc@ha
23330; PWR9-NEXT:    vpopcntd 2, 2
23331; PWR9-NEXT:    addi 3, 3, .LCPI185_0@toc@l
23332; PWR9-NEXT:    lxv 35, 0(3)
23333; PWR9-NEXT:    vcmpgtud 2, 3, 2
23334; PWR9-NEXT:    blr
23335  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23336  %3 = icmp ult <2 x i64> %2, <i64 44, i64 44>
23337  %4 = sext <2 x i1> %3 to <2 x i64>
23338  ret <2 x i64> %4
23339}
23340
23341define <2 x i64> @ugt_44_v2i64(<2 x i64> %0) {
23342; PWR5-LABEL: ugt_44_v2i64:
23343; PWR5:       # %bb.0:
23344; PWR5-NEXT:    lis 5, 21845
23345; PWR5-NEXT:    lis 6, 13107
23346; PWR5-NEXT:    ori 5, 5, 21845
23347; PWR5-NEXT:    rotldi 8, 4, 63
23348; PWR5-NEXT:    rotldi 9, 3, 63
23349; PWR5-NEXT:    rldimi 5, 5, 32, 0
23350; PWR5-NEXT:    and 8, 8, 5
23351; PWR5-NEXT:    and 5, 9, 5
23352; PWR5-NEXT:    ori 6, 6, 13107
23353; PWR5-NEXT:    sub 3, 3, 5
23354; PWR5-NEXT:    rldimi 6, 6, 32, 0
23355; PWR5-NEXT:    sub 4, 4, 8
23356; PWR5-NEXT:    and 8, 3, 6
23357; PWR5-NEXT:    rotldi 3, 3, 62
23358; PWR5-NEXT:    and 3, 3, 6
23359; PWR5-NEXT:    lis 7, 3855
23360; PWR5-NEXT:    and 5, 4, 6
23361; PWR5-NEXT:    rotldi 4, 4, 62
23362; PWR5-NEXT:    add 3, 8, 3
23363; PWR5-NEXT:    lis 9, 257
23364; PWR5-NEXT:    ori 7, 7, 3855
23365; PWR5-NEXT:    and 4, 4, 6
23366; PWR5-NEXT:    rldicl 6, 3, 60, 4
23367; PWR5-NEXT:    ori 9, 9, 257
23368; PWR5-NEXT:    rldimi 7, 7, 32, 0
23369; PWR5-NEXT:    add 4, 5, 4
23370; PWR5-NEXT:    add 3, 3, 6
23371; PWR5-NEXT:    rldimi 9, 9, 32, 0
23372; PWR5-NEXT:    rldicl 5, 4, 60, 4
23373; PWR5-NEXT:    and 3, 3, 7
23374; PWR5-NEXT:    add 4, 4, 5
23375; PWR5-NEXT:    mulld 3, 3, 9
23376; PWR5-NEXT:    and 4, 4, 7
23377; PWR5-NEXT:    rldicl 3, 3, 8, 56
23378; PWR5-NEXT:    mulld 4, 4, 9
23379; PWR5-NEXT:    li 5, 44
23380; PWR5-NEXT:    subfic 3, 3, 44
23381; PWR5-NEXT:    rldicl 4, 4, 8, 56
23382; PWR5-NEXT:    subfe 3, 5, 5
23383; PWR5-NEXT:    subfic 4, 4, 44
23384; PWR5-NEXT:    subfe 4, 5, 5
23385; PWR5-NEXT:    blr
23386;
23387; PWR6-LABEL: ugt_44_v2i64:
23388; PWR6:       # %bb.0:
23389; PWR6-NEXT:    lis 5, 21845
23390; PWR6-NEXT:    lis 6, 13107
23391; PWR6-NEXT:    ori 5, 5, 21845
23392; PWR6-NEXT:    rotldi 8, 4, 63
23393; PWR6-NEXT:    rotldi 9, 3, 63
23394; PWR6-NEXT:    rldimi 5, 5, 32, 0
23395; PWR6-NEXT:    and 8, 8, 5
23396; PWR6-NEXT:    and 5, 9, 5
23397; PWR6-NEXT:    ori 6, 6, 13107
23398; PWR6-NEXT:    sub 3, 3, 5
23399; PWR6-NEXT:    rldimi 6, 6, 32, 0
23400; PWR6-NEXT:    sub 4, 4, 8
23401; PWR6-NEXT:    and 8, 3, 6
23402; PWR6-NEXT:    rotldi 3, 3, 62
23403; PWR6-NEXT:    and 3, 3, 6
23404; PWR6-NEXT:    lis 7, 3855
23405; PWR6-NEXT:    and 5, 4, 6
23406; PWR6-NEXT:    rotldi 4, 4, 62
23407; PWR6-NEXT:    add 3, 8, 3
23408; PWR6-NEXT:    lis 9, 257
23409; PWR6-NEXT:    ori 7, 7, 3855
23410; PWR6-NEXT:    and 4, 4, 6
23411; PWR6-NEXT:    rldicl 6, 3, 60, 4
23412; PWR6-NEXT:    ori 9, 9, 257
23413; PWR6-NEXT:    rldimi 7, 7, 32, 0
23414; PWR6-NEXT:    add 4, 5, 4
23415; PWR6-NEXT:    add 3, 3, 6
23416; PWR6-NEXT:    rldimi 9, 9, 32, 0
23417; PWR6-NEXT:    rldicl 5, 4, 60, 4
23418; PWR6-NEXT:    and 3, 3, 7
23419; PWR6-NEXT:    add 4, 4, 5
23420; PWR6-NEXT:    mulld 3, 3, 9
23421; PWR6-NEXT:    and 4, 4, 7
23422; PWR6-NEXT:    rldicl 3, 3, 8, 56
23423; PWR6-NEXT:    mulld 4, 4, 9
23424; PWR6-NEXT:    li 5, 44
23425; PWR6-NEXT:    subfic 3, 3, 44
23426; PWR6-NEXT:    rldicl 4, 4, 8, 56
23427; PWR6-NEXT:    subfe 3, 5, 5
23428; PWR6-NEXT:    subfic 4, 4, 44
23429; PWR6-NEXT:    subfe 4, 5, 5
23430; PWR6-NEXT:    blr
23431;
23432; PWR7-LABEL: ugt_44_v2i64:
23433; PWR7:       # %bb.0:
23434; PWR7-NEXT:    addi 3, 1, -32
23435; PWR7-NEXT:    li 5, -1
23436; PWR7-NEXT:    stxvd2x 34, 0, 3
23437; PWR7-NEXT:    ld 4, -24(1)
23438; PWR7-NEXT:    ld 3, -32(1)
23439; PWR7-NEXT:    popcntd 4, 4
23440; PWR7-NEXT:    popcntd 3, 3
23441; PWR7-NEXT:    cmpldi 4, 44
23442; PWR7-NEXT:    li 4, 0
23443; PWR7-NEXT:    iselgt 6, 5, 4
23444; PWR7-NEXT:    cmpldi 3, 44
23445; PWR7-NEXT:    iselgt 3, 5, 4
23446; PWR7-NEXT:    std 6, -8(1)
23447; PWR7-NEXT:    std 3, -16(1)
23448; PWR7-NEXT:    addi 3, 1, -16
23449; PWR7-NEXT:    lxvd2x 34, 0, 3
23450; PWR7-NEXT:    blr
23451;
23452; PWR8-LABEL: ugt_44_v2i64:
23453; PWR8:       # %bb.0:
23454; PWR8-NEXT:    addis 3, 2, .LCPI186_0@toc@ha
23455; PWR8-NEXT:    vpopcntd 2, 2
23456; PWR8-NEXT:    addi 3, 3, .LCPI186_0@toc@l
23457; PWR8-NEXT:    lxvd2x 35, 0, 3
23458; PWR8-NEXT:    vcmpgtud 2, 2, 3
23459; PWR8-NEXT:    blr
23460;
23461; PWR9-LABEL: ugt_44_v2i64:
23462; PWR9:       # %bb.0:
23463; PWR9-NEXT:    addis 3, 2, .LCPI186_0@toc@ha
23464; PWR9-NEXT:    vpopcntd 2, 2
23465; PWR9-NEXT:    addi 3, 3, .LCPI186_0@toc@l
23466; PWR9-NEXT:    lxv 35, 0(3)
23467; PWR9-NEXT:    vcmpgtud 2, 2, 3
23468; PWR9-NEXT:    blr
23469  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23470  %3 = icmp ugt <2 x i64> %2, <i64 44, i64 44>
23471  %4 = sext <2 x i1> %3 to <2 x i64>
23472  ret <2 x i64> %4
23473}
23474
23475define <2 x i64> @ult_45_v2i64(<2 x i64> %0) {
23476; PWR5-LABEL: ult_45_v2i64:
23477; PWR5:       # %bb.0:
23478; PWR5-NEXT:    lis 5, 21845
23479; PWR5-NEXT:    lis 6, 13107
23480; PWR5-NEXT:    ori 5, 5, 21845
23481; PWR5-NEXT:    rotldi 8, 4, 63
23482; PWR5-NEXT:    rotldi 9, 3, 63
23483; PWR5-NEXT:    rldimi 5, 5, 32, 0
23484; PWR5-NEXT:    and 8, 8, 5
23485; PWR5-NEXT:    and 5, 9, 5
23486; PWR5-NEXT:    ori 6, 6, 13107
23487; PWR5-NEXT:    sub 3, 3, 5
23488; PWR5-NEXT:    rldimi 6, 6, 32, 0
23489; PWR5-NEXT:    sub 4, 4, 8
23490; PWR5-NEXT:    and 8, 3, 6
23491; PWR5-NEXT:    rotldi 3, 3, 62
23492; PWR5-NEXT:    and 3, 3, 6
23493; PWR5-NEXT:    lis 7, 3855
23494; PWR5-NEXT:    and 5, 4, 6
23495; PWR5-NEXT:    rotldi 4, 4, 62
23496; PWR5-NEXT:    add 3, 8, 3
23497; PWR5-NEXT:    lis 9, 257
23498; PWR5-NEXT:    ori 7, 7, 3855
23499; PWR5-NEXT:    and 4, 4, 6
23500; PWR5-NEXT:    rldicl 6, 3, 60, 4
23501; PWR5-NEXT:    ori 9, 9, 257
23502; PWR5-NEXT:    rldimi 7, 7, 32, 0
23503; PWR5-NEXT:    add 4, 5, 4
23504; PWR5-NEXT:    add 3, 3, 6
23505; PWR5-NEXT:    rldimi 9, 9, 32, 0
23506; PWR5-NEXT:    rldicl 5, 4, 60, 4
23507; PWR5-NEXT:    and 3, 3, 7
23508; PWR5-NEXT:    add 4, 4, 5
23509; PWR5-NEXT:    mulld 3, 3, 9
23510; PWR5-NEXT:    and 4, 4, 7
23511; PWR5-NEXT:    rldicl 3, 3, 8, 56
23512; PWR5-NEXT:    li 5, 45
23513; PWR5-NEXT:    mulld 4, 4, 9
23514; PWR5-NEXT:    subc 6, 3, 5
23515; PWR5-NEXT:    rldicl 4, 4, 8, 56
23516; PWR5-NEXT:    subfe 3, 3, 3
23517; PWR5-NEXT:    subc 5, 4, 5
23518; PWR5-NEXT:    subfe 4, 4, 4
23519; PWR5-NEXT:    blr
23520;
23521; PWR6-LABEL: ult_45_v2i64:
23522; PWR6:       # %bb.0:
23523; PWR6-NEXT:    lis 5, 21845
23524; PWR6-NEXT:    lis 6, 13107
23525; PWR6-NEXT:    ori 5, 5, 21845
23526; PWR6-NEXT:    rotldi 8, 4, 63
23527; PWR6-NEXT:    rotldi 9, 3, 63
23528; PWR6-NEXT:    rldimi 5, 5, 32, 0
23529; PWR6-NEXT:    and 8, 8, 5
23530; PWR6-NEXT:    and 5, 9, 5
23531; PWR6-NEXT:    ori 6, 6, 13107
23532; PWR6-NEXT:    sub 3, 3, 5
23533; PWR6-NEXT:    rldimi 6, 6, 32, 0
23534; PWR6-NEXT:    sub 4, 4, 8
23535; PWR6-NEXT:    and 8, 3, 6
23536; PWR6-NEXT:    rotldi 3, 3, 62
23537; PWR6-NEXT:    and 3, 3, 6
23538; PWR6-NEXT:    lis 7, 3855
23539; PWR6-NEXT:    and 5, 4, 6
23540; PWR6-NEXT:    rotldi 4, 4, 62
23541; PWR6-NEXT:    add 3, 8, 3
23542; PWR6-NEXT:    lis 9, 257
23543; PWR6-NEXT:    ori 7, 7, 3855
23544; PWR6-NEXT:    and 4, 4, 6
23545; PWR6-NEXT:    rldicl 6, 3, 60, 4
23546; PWR6-NEXT:    ori 9, 9, 257
23547; PWR6-NEXT:    rldimi 7, 7, 32, 0
23548; PWR6-NEXT:    add 4, 5, 4
23549; PWR6-NEXT:    add 3, 3, 6
23550; PWR6-NEXT:    rldimi 9, 9, 32, 0
23551; PWR6-NEXT:    rldicl 5, 4, 60, 4
23552; PWR6-NEXT:    and 3, 3, 7
23553; PWR6-NEXT:    add 4, 4, 5
23554; PWR6-NEXT:    mulld 3, 3, 9
23555; PWR6-NEXT:    and 4, 4, 7
23556; PWR6-NEXT:    rldicl 3, 3, 8, 56
23557; PWR6-NEXT:    li 5, 45
23558; PWR6-NEXT:    mulld 4, 4, 9
23559; PWR6-NEXT:    subc 6, 3, 5
23560; PWR6-NEXT:    rldicl 4, 4, 8, 56
23561; PWR6-NEXT:    subfe 3, 3, 3
23562; PWR6-NEXT:    subc 5, 4, 5
23563; PWR6-NEXT:    subfe 4, 4, 4
23564; PWR6-NEXT:    blr
23565;
23566; PWR7-LABEL: ult_45_v2i64:
23567; PWR7:       # %bb.0:
23568; PWR7-NEXT:    addi 3, 1, -32
23569; PWR7-NEXT:    li 5, -1
23570; PWR7-NEXT:    stxvd2x 34, 0, 3
23571; PWR7-NEXT:    ld 4, -24(1)
23572; PWR7-NEXT:    ld 3, -32(1)
23573; PWR7-NEXT:    popcntd 4, 4
23574; PWR7-NEXT:    popcntd 3, 3
23575; PWR7-NEXT:    cmpldi 4, 45
23576; PWR7-NEXT:    li 4, 0
23577; PWR7-NEXT:    isellt 6, 5, 4
23578; PWR7-NEXT:    cmpldi 3, 45
23579; PWR7-NEXT:    isellt 3, 5, 4
23580; PWR7-NEXT:    std 6, -8(1)
23581; PWR7-NEXT:    std 3, -16(1)
23582; PWR7-NEXT:    addi 3, 1, -16
23583; PWR7-NEXT:    lxvd2x 34, 0, 3
23584; PWR7-NEXT:    blr
23585;
23586; PWR8-LABEL: ult_45_v2i64:
23587; PWR8:       # %bb.0:
23588; PWR8-NEXT:    addis 3, 2, .LCPI187_0@toc@ha
23589; PWR8-NEXT:    vpopcntd 2, 2
23590; PWR8-NEXT:    addi 3, 3, .LCPI187_0@toc@l
23591; PWR8-NEXT:    lxvd2x 35, 0, 3
23592; PWR8-NEXT:    vcmpgtud 2, 3, 2
23593; PWR8-NEXT:    blr
23594;
23595; PWR9-LABEL: ult_45_v2i64:
23596; PWR9:       # %bb.0:
23597; PWR9-NEXT:    addis 3, 2, .LCPI187_0@toc@ha
23598; PWR9-NEXT:    vpopcntd 2, 2
23599; PWR9-NEXT:    addi 3, 3, .LCPI187_0@toc@l
23600; PWR9-NEXT:    lxv 35, 0(3)
23601; PWR9-NEXT:    vcmpgtud 2, 3, 2
23602; PWR9-NEXT:    blr
23603  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23604  %3 = icmp ult <2 x i64> %2, <i64 45, i64 45>
23605  %4 = sext <2 x i1> %3 to <2 x i64>
23606  ret <2 x i64> %4
23607}
23608
23609define <2 x i64> @ugt_45_v2i64(<2 x i64> %0) {
23610; PWR5-LABEL: ugt_45_v2i64:
23611; PWR5:       # %bb.0:
23612; PWR5-NEXT:    lis 5, 21845
23613; PWR5-NEXT:    lis 6, 13107
23614; PWR5-NEXT:    ori 5, 5, 21845
23615; PWR5-NEXT:    rotldi 8, 4, 63
23616; PWR5-NEXT:    rotldi 9, 3, 63
23617; PWR5-NEXT:    rldimi 5, 5, 32, 0
23618; PWR5-NEXT:    and 8, 8, 5
23619; PWR5-NEXT:    and 5, 9, 5
23620; PWR5-NEXT:    ori 6, 6, 13107
23621; PWR5-NEXT:    sub 3, 3, 5
23622; PWR5-NEXT:    rldimi 6, 6, 32, 0
23623; PWR5-NEXT:    sub 4, 4, 8
23624; PWR5-NEXT:    and 8, 3, 6
23625; PWR5-NEXT:    rotldi 3, 3, 62
23626; PWR5-NEXT:    and 3, 3, 6
23627; PWR5-NEXT:    lis 7, 3855
23628; PWR5-NEXT:    and 5, 4, 6
23629; PWR5-NEXT:    rotldi 4, 4, 62
23630; PWR5-NEXT:    add 3, 8, 3
23631; PWR5-NEXT:    lis 9, 257
23632; PWR5-NEXT:    ori 7, 7, 3855
23633; PWR5-NEXT:    and 4, 4, 6
23634; PWR5-NEXT:    rldicl 6, 3, 60, 4
23635; PWR5-NEXT:    ori 9, 9, 257
23636; PWR5-NEXT:    rldimi 7, 7, 32, 0
23637; PWR5-NEXT:    add 4, 5, 4
23638; PWR5-NEXT:    add 3, 3, 6
23639; PWR5-NEXT:    rldimi 9, 9, 32, 0
23640; PWR5-NEXT:    rldicl 5, 4, 60, 4
23641; PWR5-NEXT:    and 3, 3, 7
23642; PWR5-NEXT:    add 4, 4, 5
23643; PWR5-NEXT:    mulld 3, 3, 9
23644; PWR5-NEXT:    and 4, 4, 7
23645; PWR5-NEXT:    rldicl 3, 3, 8, 56
23646; PWR5-NEXT:    mulld 4, 4, 9
23647; PWR5-NEXT:    li 5, 45
23648; PWR5-NEXT:    subfic 3, 3, 45
23649; PWR5-NEXT:    rldicl 4, 4, 8, 56
23650; PWR5-NEXT:    subfe 3, 5, 5
23651; PWR5-NEXT:    subfic 4, 4, 45
23652; PWR5-NEXT:    subfe 4, 5, 5
23653; PWR5-NEXT:    blr
23654;
23655; PWR6-LABEL: ugt_45_v2i64:
23656; PWR6:       # %bb.0:
23657; PWR6-NEXT:    lis 5, 21845
23658; PWR6-NEXT:    lis 6, 13107
23659; PWR6-NEXT:    ori 5, 5, 21845
23660; PWR6-NEXT:    rotldi 8, 4, 63
23661; PWR6-NEXT:    rotldi 9, 3, 63
23662; PWR6-NEXT:    rldimi 5, 5, 32, 0
23663; PWR6-NEXT:    and 8, 8, 5
23664; PWR6-NEXT:    and 5, 9, 5
23665; PWR6-NEXT:    ori 6, 6, 13107
23666; PWR6-NEXT:    sub 3, 3, 5
23667; PWR6-NEXT:    rldimi 6, 6, 32, 0
23668; PWR6-NEXT:    sub 4, 4, 8
23669; PWR6-NEXT:    and 8, 3, 6
23670; PWR6-NEXT:    rotldi 3, 3, 62
23671; PWR6-NEXT:    and 3, 3, 6
23672; PWR6-NEXT:    lis 7, 3855
23673; PWR6-NEXT:    and 5, 4, 6
23674; PWR6-NEXT:    rotldi 4, 4, 62
23675; PWR6-NEXT:    add 3, 8, 3
23676; PWR6-NEXT:    lis 9, 257
23677; PWR6-NEXT:    ori 7, 7, 3855
23678; PWR6-NEXT:    and 4, 4, 6
23679; PWR6-NEXT:    rldicl 6, 3, 60, 4
23680; PWR6-NEXT:    ori 9, 9, 257
23681; PWR6-NEXT:    rldimi 7, 7, 32, 0
23682; PWR6-NEXT:    add 4, 5, 4
23683; PWR6-NEXT:    add 3, 3, 6
23684; PWR6-NEXT:    rldimi 9, 9, 32, 0
23685; PWR6-NEXT:    rldicl 5, 4, 60, 4
23686; PWR6-NEXT:    and 3, 3, 7
23687; PWR6-NEXT:    add 4, 4, 5
23688; PWR6-NEXT:    mulld 3, 3, 9
23689; PWR6-NEXT:    and 4, 4, 7
23690; PWR6-NEXT:    rldicl 3, 3, 8, 56
23691; PWR6-NEXT:    mulld 4, 4, 9
23692; PWR6-NEXT:    li 5, 45
23693; PWR6-NEXT:    subfic 3, 3, 45
23694; PWR6-NEXT:    rldicl 4, 4, 8, 56
23695; PWR6-NEXT:    subfe 3, 5, 5
23696; PWR6-NEXT:    subfic 4, 4, 45
23697; PWR6-NEXT:    subfe 4, 5, 5
23698; PWR6-NEXT:    blr
23699;
23700; PWR7-LABEL: ugt_45_v2i64:
23701; PWR7:       # %bb.0:
23702; PWR7-NEXT:    addi 3, 1, -32
23703; PWR7-NEXT:    li 5, -1
23704; PWR7-NEXT:    stxvd2x 34, 0, 3
23705; PWR7-NEXT:    ld 4, -24(1)
23706; PWR7-NEXT:    ld 3, -32(1)
23707; PWR7-NEXT:    popcntd 4, 4
23708; PWR7-NEXT:    popcntd 3, 3
23709; PWR7-NEXT:    cmpldi 4, 45
23710; PWR7-NEXT:    li 4, 0
23711; PWR7-NEXT:    iselgt 6, 5, 4
23712; PWR7-NEXT:    cmpldi 3, 45
23713; PWR7-NEXT:    iselgt 3, 5, 4
23714; PWR7-NEXT:    std 6, -8(1)
23715; PWR7-NEXT:    std 3, -16(1)
23716; PWR7-NEXT:    addi 3, 1, -16
23717; PWR7-NEXT:    lxvd2x 34, 0, 3
23718; PWR7-NEXT:    blr
23719;
23720; PWR8-LABEL: ugt_45_v2i64:
23721; PWR8:       # %bb.0:
23722; PWR8-NEXT:    addis 3, 2, .LCPI188_0@toc@ha
23723; PWR8-NEXT:    vpopcntd 2, 2
23724; PWR8-NEXT:    addi 3, 3, .LCPI188_0@toc@l
23725; PWR8-NEXT:    lxvd2x 35, 0, 3
23726; PWR8-NEXT:    vcmpgtud 2, 2, 3
23727; PWR8-NEXT:    blr
23728;
23729; PWR9-LABEL: ugt_45_v2i64:
23730; PWR9:       # %bb.0:
23731; PWR9-NEXT:    addis 3, 2, .LCPI188_0@toc@ha
23732; PWR9-NEXT:    vpopcntd 2, 2
23733; PWR9-NEXT:    addi 3, 3, .LCPI188_0@toc@l
23734; PWR9-NEXT:    lxv 35, 0(3)
23735; PWR9-NEXT:    vcmpgtud 2, 2, 3
23736; PWR9-NEXT:    blr
23737  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23738  %3 = icmp ugt <2 x i64> %2, <i64 45, i64 45>
23739  %4 = sext <2 x i1> %3 to <2 x i64>
23740  ret <2 x i64> %4
23741}
23742
23743define <2 x i64> @ult_46_v2i64(<2 x i64> %0) {
23744; PWR5-LABEL: ult_46_v2i64:
23745; PWR5:       # %bb.0:
23746; PWR5-NEXT:    lis 5, 21845
23747; PWR5-NEXT:    lis 6, 13107
23748; PWR5-NEXT:    ori 5, 5, 21845
23749; PWR5-NEXT:    rotldi 8, 4, 63
23750; PWR5-NEXT:    rotldi 9, 3, 63
23751; PWR5-NEXT:    rldimi 5, 5, 32, 0
23752; PWR5-NEXT:    and 8, 8, 5
23753; PWR5-NEXT:    and 5, 9, 5
23754; PWR5-NEXT:    ori 6, 6, 13107
23755; PWR5-NEXT:    sub 3, 3, 5
23756; PWR5-NEXT:    rldimi 6, 6, 32, 0
23757; PWR5-NEXT:    sub 4, 4, 8
23758; PWR5-NEXT:    and 8, 3, 6
23759; PWR5-NEXT:    rotldi 3, 3, 62
23760; PWR5-NEXT:    and 3, 3, 6
23761; PWR5-NEXT:    lis 7, 3855
23762; PWR5-NEXT:    and 5, 4, 6
23763; PWR5-NEXT:    rotldi 4, 4, 62
23764; PWR5-NEXT:    add 3, 8, 3
23765; PWR5-NEXT:    lis 9, 257
23766; PWR5-NEXT:    ori 7, 7, 3855
23767; PWR5-NEXT:    and 4, 4, 6
23768; PWR5-NEXT:    rldicl 6, 3, 60, 4
23769; PWR5-NEXT:    ori 9, 9, 257
23770; PWR5-NEXT:    rldimi 7, 7, 32, 0
23771; PWR5-NEXT:    add 4, 5, 4
23772; PWR5-NEXT:    add 3, 3, 6
23773; PWR5-NEXT:    rldimi 9, 9, 32, 0
23774; PWR5-NEXT:    rldicl 5, 4, 60, 4
23775; PWR5-NEXT:    and 3, 3, 7
23776; PWR5-NEXT:    add 4, 4, 5
23777; PWR5-NEXT:    mulld 3, 3, 9
23778; PWR5-NEXT:    and 4, 4, 7
23779; PWR5-NEXT:    rldicl 3, 3, 8, 56
23780; PWR5-NEXT:    li 5, 46
23781; PWR5-NEXT:    mulld 4, 4, 9
23782; PWR5-NEXT:    subc 6, 3, 5
23783; PWR5-NEXT:    rldicl 4, 4, 8, 56
23784; PWR5-NEXT:    subfe 3, 3, 3
23785; PWR5-NEXT:    subc 5, 4, 5
23786; PWR5-NEXT:    subfe 4, 4, 4
23787; PWR5-NEXT:    blr
23788;
23789; PWR6-LABEL: ult_46_v2i64:
23790; PWR6:       # %bb.0:
23791; PWR6-NEXT:    lis 5, 21845
23792; PWR6-NEXT:    lis 6, 13107
23793; PWR6-NEXT:    ori 5, 5, 21845
23794; PWR6-NEXT:    rotldi 8, 4, 63
23795; PWR6-NEXT:    rotldi 9, 3, 63
23796; PWR6-NEXT:    rldimi 5, 5, 32, 0
23797; PWR6-NEXT:    and 8, 8, 5
23798; PWR6-NEXT:    and 5, 9, 5
23799; PWR6-NEXT:    ori 6, 6, 13107
23800; PWR6-NEXT:    sub 3, 3, 5
23801; PWR6-NEXT:    rldimi 6, 6, 32, 0
23802; PWR6-NEXT:    sub 4, 4, 8
23803; PWR6-NEXT:    and 8, 3, 6
23804; PWR6-NEXT:    rotldi 3, 3, 62
23805; PWR6-NEXT:    and 3, 3, 6
23806; PWR6-NEXT:    lis 7, 3855
23807; PWR6-NEXT:    and 5, 4, 6
23808; PWR6-NEXT:    rotldi 4, 4, 62
23809; PWR6-NEXT:    add 3, 8, 3
23810; PWR6-NEXT:    lis 9, 257
23811; PWR6-NEXT:    ori 7, 7, 3855
23812; PWR6-NEXT:    and 4, 4, 6
23813; PWR6-NEXT:    rldicl 6, 3, 60, 4
23814; PWR6-NEXT:    ori 9, 9, 257
23815; PWR6-NEXT:    rldimi 7, 7, 32, 0
23816; PWR6-NEXT:    add 4, 5, 4
23817; PWR6-NEXT:    add 3, 3, 6
23818; PWR6-NEXT:    rldimi 9, 9, 32, 0
23819; PWR6-NEXT:    rldicl 5, 4, 60, 4
23820; PWR6-NEXT:    and 3, 3, 7
23821; PWR6-NEXT:    add 4, 4, 5
23822; PWR6-NEXT:    mulld 3, 3, 9
23823; PWR6-NEXT:    and 4, 4, 7
23824; PWR6-NEXT:    rldicl 3, 3, 8, 56
23825; PWR6-NEXT:    li 5, 46
23826; PWR6-NEXT:    mulld 4, 4, 9
23827; PWR6-NEXT:    subc 6, 3, 5
23828; PWR6-NEXT:    rldicl 4, 4, 8, 56
23829; PWR6-NEXT:    subfe 3, 3, 3
23830; PWR6-NEXT:    subc 5, 4, 5
23831; PWR6-NEXT:    subfe 4, 4, 4
23832; PWR6-NEXT:    blr
23833;
23834; PWR7-LABEL: ult_46_v2i64:
23835; PWR7:       # %bb.0:
23836; PWR7-NEXT:    addi 3, 1, -32
23837; PWR7-NEXT:    li 5, -1
23838; PWR7-NEXT:    stxvd2x 34, 0, 3
23839; PWR7-NEXT:    ld 4, -24(1)
23840; PWR7-NEXT:    ld 3, -32(1)
23841; PWR7-NEXT:    popcntd 4, 4
23842; PWR7-NEXT:    popcntd 3, 3
23843; PWR7-NEXT:    cmpldi 4, 46
23844; PWR7-NEXT:    li 4, 0
23845; PWR7-NEXT:    isellt 6, 5, 4
23846; PWR7-NEXT:    cmpldi 3, 46
23847; PWR7-NEXT:    isellt 3, 5, 4
23848; PWR7-NEXT:    std 6, -8(1)
23849; PWR7-NEXT:    std 3, -16(1)
23850; PWR7-NEXT:    addi 3, 1, -16
23851; PWR7-NEXT:    lxvd2x 34, 0, 3
23852; PWR7-NEXT:    blr
23853;
23854; PWR8-LABEL: ult_46_v2i64:
23855; PWR8:       # %bb.0:
23856; PWR8-NEXT:    addis 3, 2, .LCPI189_0@toc@ha
23857; PWR8-NEXT:    vpopcntd 2, 2
23858; PWR8-NEXT:    addi 3, 3, .LCPI189_0@toc@l
23859; PWR8-NEXT:    lxvd2x 35, 0, 3
23860; PWR8-NEXT:    vcmpgtud 2, 3, 2
23861; PWR8-NEXT:    blr
23862;
23863; PWR9-LABEL: ult_46_v2i64:
23864; PWR9:       # %bb.0:
23865; PWR9-NEXT:    addis 3, 2, .LCPI189_0@toc@ha
23866; PWR9-NEXT:    vpopcntd 2, 2
23867; PWR9-NEXT:    addi 3, 3, .LCPI189_0@toc@l
23868; PWR9-NEXT:    lxv 35, 0(3)
23869; PWR9-NEXT:    vcmpgtud 2, 3, 2
23870; PWR9-NEXT:    blr
23871  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23872  %3 = icmp ult <2 x i64> %2, <i64 46, i64 46>
23873  %4 = sext <2 x i1> %3 to <2 x i64>
23874  ret <2 x i64> %4
23875}
23876
23877define <2 x i64> @ugt_46_v2i64(<2 x i64> %0) {
23878; PWR5-LABEL: ugt_46_v2i64:
23879; PWR5:       # %bb.0:
23880; PWR5-NEXT:    lis 5, 21845
23881; PWR5-NEXT:    lis 6, 13107
23882; PWR5-NEXT:    ori 5, 5, 21845
23883; PWR5-NEXT:    rotldi 8, 4, 63
23884; PWR5-NEXT:    rotldi 9, 3, 63
23885; PWR5-NEXT:    rldimi 5, 5, 32, 0
23886; PWR5-NEXT:    and 8, 8, 5
23887; PWR5-NEXT:    and 5, 9, 5
23888; PWR5-NEXT:    ori 6, 6, 13107
23889; PWR5-NEXT:    sub 3, 3, 5
23890; PWR5-NEXT:    rldimi 6, 6, 32, 0
23891; PWR5-NEXT:    sub 4, 4, 8
23892; PWR5-NEXT:    and 8, 3, 6
23893; PWR5-NEXT:    rotldi 3, 3, 62
23894; PWR5-NEXT:    and 3, 3, 6
23895; PWR5-NEXT:    lis 7, 3855
23896; PWR5-NEXT:    and 5, 4, 6
23897; PWR5-NEXT:    rotldi 4, 4, 62
23898; PWR5-NEXT:    add 3, 8, 3
23899; PWR5-NEXT:    lis 9, 257
23900; PWR5-NEXT:    ori 7, 7, 3855
23901; PWR5-NEXT:    and 4, 4, 6
23902; PWR5-NEXT:    rldicl 6, 3, 60, 4
23903; PWR5-NEXT:    ori 9, 9, 257
23904; PWR5-NEXT:    rldimi 7, 7, 32, 0
23905; PWR5-NEXT:    add 4, 5, 4
23906; PWR5-NEXT:    add 3, 3, 6
23907; PWR5-NEXT:    rldimi 9, 9, 32, 0
23908; PWR5-NEXT:    rldicl 5, 4, 60, 4
23909; PWR5-NEXT:    and 3, 3, 7
23910; PWR5-NEXT:    add 4, 4, 5
23911; PWR5-NEXT:    mulld 3, 3, 9
23912; PWR5-NEXT:    and 4, 4, 7
23913; PWR5-NEXT:    rldicl 3, 3, 8, 56
23914; PWR5-NEXT:    mulld 4, 4, 9
23915; PWR5-NEXT:    li 5, 46
23916; PWR5-NEXT:    subfic 3, 3, 46
23917; PWR5-NEXT:    rldicl 4, 4, 8, 56
23918; PWR5-NEXT:    subfe 3, 5, 5
23919; PWR5-NEXT:    subfic 4, 4, 46
23920; PWR5-NEXT:    subfe 4, 5, 5
23921; PWR5-NEXT:    blr
23922;
23923; PWR6-LABEL: ugt_46_v2i64:
23924; PWR6:       # %bb.0:
23925; PWR6-NEXT:    lis 5, 21845
23926; PWR6-NEXT:    lis 6, 13107
23927; PWR6-NEXT:    ori 5, 5, 21845
23928; PWR6-NEXT:    rotldi 8, 4, 63
23929; PWR6-NEXT:    rotldi 9, 3, 63
23930; PWR6-NEXT:    rldimi 5, 5, 32, 0
23931; PWR6-NEXT:    and 8, 8, 5
23932; PWR6-NEXT:    and 5, 9, 5
23933; PWR6-NEXT:    ori 6, 6, 13107
23934; PWR6-NEXT:    sub 3, 3, 5
23935; PWR6-NEXT:    rldimi 6, 6, 32, 0
23936; PWR6-NEXT:    sub 4, 4, 8
23937; PWR6-NEXT:    and 8, 3, 6
23938; PWR6-NEXT:    rotldi 3, 3, 62
23939; PWR6-NEXT:    and 3, 3, 6
23940; PWR6-NEXT:    lis 7, 3855
23941; PWR6-NEXT:    and 5, 4, 6
23942; PWR6-NEXT:    rotldi 4, 4, 62
23943; PWR6-NEXT:    add 3, 8, 3
23944; PWR6-NEXT:    lis 9, 257
23945; PWR6-NEXT:    ori 7, 7, 3855
23946; PWR6-NEXT:    and 4, 4, 6
23947; PWR6-NEXT:    rldicl 6, 3, 60, 4
23948; PWR6-NEXT:    ori 9, 9, 257
23949; PWR6-NEXT:    rldimi 7, 7, 32, 0
23950; PWR6-NEXT:    add 4, 5, 4
23951; PWR6-NEXT:    add 3, 3, 6
23952; PWR6-NEXT:    rldimi 9, 9, 32, 0
23953; PWR6-NEXT:    rldicl 5, 4, 60, 4
23954; PWR6-NEXT:    and 3, 3, 7
23955; PWR6-NEXT:    add 4, 4, 5
23956; PWR6-NEXT:    mulld 3, 3, 9
23957; PWR6-NEXT:    and 4, 4, 7
23958; PWR6-NEXT:    rldicl 3, 3, 8, 56
23959; PWR6-NEXT:    mulld 4, 4, 9
23960; PWR6-NEXT:    li 5, 46
23961; PWR6-NEXT:    subfic 3, 3, 46
23962; PWR6-NEXT:    rldicl 4, 4, 8, 56
23963; PWR6-NEXT:    subfe 3, 5, 5
23964; PWR6-NEXT:    subfic 4, 4, 46
23965; PWR6-NEXT:    subfe 4, 5, 5
23966; PWR6-NEXT:    blr
23967;
23968; PWR7-LABEL: ugt_46_v2i64:
23969; PWR7:       # %bb.0:
23970; PWR7-NEXT:    addi 3, 1, -32
23971; PWR7-NEXT:    li 5, -1
23972; PWR7-NEXT:    stxvd2x 34, 0, 3
23973; PWR7-NEXT:    ld 4, -24(1)
23974; PWR7-NEXT:    ld 3, -32(1)
23975; PWR7-NEXT:    popcntd 4, 4
23976; PWR7-NEXT:    popcntd 3, 3
23977; PWR7-NEXT:    cmpldi 4, 46
23978; PWR7-NEXT:    li 4, 0
23979; PWR7-NEXT:    iselgt 6, 5, 4
23980; PWR7-NEXT:    cmpldi 3, 46
23981; PWR7-NEXT:    iselgt 3, 5, 4
23982; PWR7-NEXT:    std 6, -8(1)
23983; PWR7-NEXT:    std 3, -16(1)
23984; PWR7-NEXT:    addi 3, 1, -16
23985; PWR7-NEXT:    lxvd2x 34, 0, 3
23986; PWR7-NEXT:    blr
23987;
23988; PWR8-LABEL: ugt_46_v2i64:
23989; PWR8:       # %bb.0:
23990; PWR8-NEXT:    addis 3, 2, .LCPI190_0@toc@ha
23991; PWR8-NEXT:    vpopcntd 2, 2
23992; PWR8-NEXT:    addi 3, 3, .LCPI190_0@toc@l
23993; PWR8-NEXT:    lxvd2x 35, 0, 3
23994; PWR8-NEXT:    vcmpgtud 2, 2, 3
23995; PWR8-NEXT:    blr
23996;
23997; PWR9-LABEL: ugt_46_v2i64:
23998; PWR9:       # %bb.0:
23999; PWR9-NEXT:    addis 3, 2, .LCPI190_0@toc@ha
24000; PWR9-NEXT:    vpopcntd 2, 2
24001; PWR9-NEXT:    addi 3, 3, .LCPI190_0@toc@l
24002; PWR9-NEXT:    lxv 35, 0(3)
24003; PWR9-NEXT:    vcmpgtud 2, 2, 3
24004; PWR9-NEXT:    blr
24005  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24006  %3 = icmp ugt <2 x i64> %2, <i64 46, i64 46>
24007  %4 = sext <2 x i1> %3 to <2 x i64>
24008  ret <2 x i64> %4
24009}
24010
24011define <2 x i64> @ult_47_v2i64(<2 x i64> %0) {
24012; PWR5-LABEL: ult_47_v2i64:
24013; PWR5:       # %bb.0:
24014; PWR5-NEXT:    lis 5, 21845
24015; PWR5-NEXT:    lis 6, 13107
24016; PWR5-NEXT:    ori 5, 5, 21845
24017; PWR5-NEXT:    rotldi 8, 4, 63
24018; PWR5-NEXT:    rotldi 9, 3, 63
24019; PWR5-NEXT:    rldimi 5, 5, 32, 0
24020; PWR5-NEXT:    and 8, 8, 5
24021; PWR5-NEXT:    and 5, 9, 5
24022; PWR5-NEXT:    ori 6, 6, 13107
24023; PWR5-NEXT:    sub 3, 3, 5
24024; PWR5-NEXT:    rldimi 6, 6, 32, 0
24025; PWR5-NEXT:    sub 4, 4, 8
24026; PWR5-NEXT:    and 8, 3, 6
24027; PWR5-NEXT:    rotldi 3, 3, 62
24028; PWR5-NEXT:    and 3, 3, 6
24029; PWR5-NEXT:    lis 7, 3855
24030; PWR5-NEXT:    and 5, 4, 6
24031; PWR5-NEXT:    rotldi 4, 4, 62
24032; PWR5-NEXT:    add 3, 8, 3
24033; PWR5-NEXT:    lis 9, 257
24034; PWR5-NEXT:    ori 7, 7, 3855
24035; PWR5-NEXT:    and 4, 4, 6
24036; PWR5-NEXT:    rldicl 6, 3, 60, 4
24037; PWR5-NEXT:    ori 9, 9, 257
24038; PWR5-NEXT:    rldimi 7, 7, 32, 0
24039; PWR5-NEXT:    add 4, 5, 4
24040; PWR5-NEXT:    add 3, 3, 6
24041; PWR5-NEXT:    rldimi 9, 9, 32, 0
24042; PWR5-NEXT:    rldicl 5, 4, 60, 4
24043; PWR5-NEXT:    and 3, 3, 7
24044; PWR5-NEXT:    add 4, 4, 5
24045; PWR5-NEXT:    mulld 3, 3, 9
24046; PWR5-NEXT:    and 4, 4, 7
24047; PWR5-NEXT:    rldicl 3, 3, 8, 56
24048; PWR5-NEXT:    li 5, 47
24049; PWR5-NEXT:    mulld 4, 4, 9
24050; PWR5-NEXT:    subc 6, 3, 5
24051; PWR5-NEXT:    rldicl 4, 4, 8, 56
24052; PWR5-NEXT:    subfe 3, 3, 3
24053; PWR5-NEXT:    subc 5, 4, 5
24054; PWR5-NEXT:    subfe 4, 4, 4
24055; PWR5-NEXT:    blr
24056;
24057; PWR6-LABEL: ult_47_v2i64:
24058; PWR6:       # %bb.0:
24059; PWR6-NEXT:    lis 5, 21845
24060; PWR6-NEXT:    lis 6, 13107
24061; PWR6-NEXT:    ori 5, 5, 21845
24062; PWR6-NEXT:    rotldi 8, 4, 63
24063; PWR6-NEXT:    rotldi 9, 3, 63
24064; PWR6-NEXT:    rldimi 5, 5, 32, 0
24065; PWR6-NEXT:    and 8, 8, 5
24066; PWR6-NEXT:    and 5, 9, 5
24067; PWR6-NEXT:    ori 6, 6, 13107
24068; PWR6-NEXT:    sub 3, 3, 5
24069; PWR6-NEXT:    rldimi 6, 6, 32, 0
24070; PWR6-NEXT:    sub 4, 4, 8
24071; PWR6-NEXT:    and 8, 3, 6
24072; PWR6-NEXT:    rotldi 3, 3, 62
24073; PWR6-NEXT:    and 3, 3, 6
24074; PWR6-NEXT:    lis 7, 3855
24075; PWR6-NEXT:    and 5, 4, 6
24076; PWR6-NEXT:    rotldi 4, 4, 62
24077; PWR6-NEXT:    add 3, 8, 3
24078; PWR6-NEXT:    lis 9, 257
24079; PWR6-NEXT:    ori 7, 7, 3855
24080; PWR6-NEXT:    and 4, 4, 6
24081; PWR6-NEXT:    rldicl 6, 3, 60, 4
24082; PWR6-NEXT:    ori 9, 9, 257
24083; PWR6-NEXT:    rldimi 7, 7, 32, 0
24084; PWR6-NEXT:    add 4, 5, 4
24085; PWR6-NEXT:    add 3, 3, 6
24086; PWR6-NEXT:    rldimi 9, 9, 32, 0
24087; PWR6-NEXT:    rldicl 5, 4, 60, 4
24088; PWR6-NEXT:    and 3, 3, 7
24089; PWR6-NEXT:    add 4, 4, 5
24090; PWR6-NEXT:    mulld 3, 3, 9
24091; PWR6-NEXT:    and 4, 4, 7
24092; PWR6-NEXT:    rldicl 3, 3, 8, 56
24093; PWR6-NEXT:    li 5, 47
24094; PWR6-NEXT:    mulld 4, 4, 9
24095; PWR6-NEXT:    subc 6, 3, 5
24096; PWR6-NEXT:    rldicl 4, 4, 8, 56
24097; PWR6-NEXT:    subfe 3, 3, 3
24098; PWR6-NEXT:    subc 5, 4, 5
24099; PWR6-NEXT:    subfe 4, 4, 4
24100; PWR6-NEXT:    blr
24101;
24102; PWR7-LABEL: ult_47_v2i64:
24103; PWR7:       # %bb.0:
24104; PWR7-NEXT:    addi 3, 1, -32
24105; PWR7-NEXT:    li 5, -1
24106; PWR7-NEXT:    stxvd2x 34, 0, 3
24107; PWR7-NEXT:    ld 4, -24(1)
24108; PWR7-NEXT:    ld 3, -32(1)
24109; PWR7-NEXT:    popcntd 4, 4
24110; PWR7-NEXT:    popcntd 3, 3
24111; PWR7-NEXT:    cmpldi 4, 47
24112; PWR7-NEXT:    li 4, 0
24113; PWR7-NEXT:    isellt 6, 5, 4
24114; PWR7-NEXT:    cmpldi 3, 47
24115; PWR7-NEXT:    isellt 3, 5, 4
24116; PWR7-NEXT:    std 6, -8(1)
24117; PWR7-NEXT:    std 3, -16(1)
24118; PWR7-NEXT:    addi 3, 1, -16
24119; PWR7-NEXT:    lxvd2x 34, 0, 3
24120; PWR7-NEXT:    blr
24121;
24122; PWR8-LABEL: ult_47_v2i64:
24123; PWR8:       # %bb.0:
24124; PWR8-NEXT:    addis 3, 2, .LCPI191_0@toc@ha
24125; PWR8-NEXT:    vpopcntd 2, 2
24126; PWR8-NEXT:    addi 3, 3, .LCPI191_0@toc@l
24127; PWR8-NEXT:    lxvd2x 35, 0, 3
24128; PWR8-NEXT:    vcmpgtud 2, 3, 2
24129; PWR8-NEXT:    blr
24130;
24131; PWR9-LABEL: ult_47_v2i64:
24132; PWR9:       # %bb.0:
24133; PWR9-NEXT:    addis 3, 2, .LCPI191_0@toc@ha
24134; PWR9-NEXT:    vpopcntd 2, 2
24135; PWR9-NEXT:    addi 3, 3, .LCPI191_0@toc@l
24136; PWR9-NEXT:    lxv 35, 0(3)
24137; PWR9-NEXT:    vcmpgtud 2, 3, 2
24138; PWR9-NEXT:    blr
24139  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24140  %3 = icmp ult <2 x i64> %2, <i64 47, i64 47>
24141  %4 = sext <2 x i1> %3 to <2 x i64>
24142  ret <2 x i64> %4
24143}
24144
24145define <2 x i64> @ugt_47_v2i64(<2 x i64> %0) {
24146; PWR5-LABEL: ugt_47_v2i64:
24147; PWR5:       # %bb.0:
24148; PWR5-NEXT:    lis 5, 21845
24149; PWR5-NEXT:    lis 6, 13107
24150; PWR5-NEXT:    ori 5, 5, 21845
24151; PWR5-NEXT:    rotldi 8, 4, 63
24152; PWR5-NEXT:    rotldi 9, 3, 63
24153; PWR5-NEXT:    rldimi 5, 5, 32, 0
24154; PWR5-NEXT:    and 8, 8, 5
24155; PWR5-NEXT:    and 5, 9, 5
24156; PWR5-NEXT:    ori 6, 6, 13107
24157; PWR5-NEXT:    sub 3, 3, 5
24158; PWR5-NEXT:    rldimi 6, 6, 32, 0
24159; PWR5-NEXT:    sub 4, 4, 8
24160; PWR5-NEXT:    and 8, 3, 6
24161; PWR5-NEXT:    rotldi 3, 3, 62
24162; PWR5-NEXT:    and 3, 3, 6
24163; PWR5-NEXT:    lis 7, 3855
24164; PWR5-NEXT:    and 5, 4, 6
24165; PWR5-NEXT:    rotldi 4, 4, 62
24166; PWR5-NEXT:    add 3, 8, 3
24167; PWR5-NEXT:    lis 9, 257
24168; PWR5-NEXT:    ori 7, 7, 3855
24169; PWR5-NEXT:    and 4, 4, 6
24170; PWR5-NEXT:    rldicl 6, 3, 60, 4
24171; PWR5-NEXT:    ori 9, 9, 257
24172; PWR5-NEXT:    rldimi 7, 7, 32, 0
24173; PWR5-NEXT:    add 4, 5, 4
24174; PWR5-NEXT:    add 3, 3, 6
24175; PWR5-NEXT:    rldimi 9, 9, 32, 0
24176; PWR5-NEXT:    rldicl 5, 4, 60, 4
24177; PWR5-NEXT:    and 3, 3, 7
24178; PWR5-NEXT:    add 4, 4, 5
24179; PWR5-NEXT:    mulld 3, 3, 9
24180; PWR5-NEXT:    and 4, 4, 7
24181; PWR5-NEXT:    rldicl 3, 3, 8, 56
24182; PWR5-NEXT:    mulld 4, 4, 9
24183; PWR5-NEXT:    li 5, 47
24184; PWR5-NEXT:    subfic 3, 3, 47
24185; PWR5-NEXT:    rldicl 4, 4, 8, 56
24186; PWR5-NEXT:    subfe 3, 5, 5
24187; PWR5-NEXT:    subfic 4, 4, 47
24188; PWR5-NEXT:    subfe 4, 5, 5
24189; PWR5-NEXT:    blr
24190;
24191; PWR6-LABEL: ugt_47_v2i64:
24192; PWR6:       # %bb.0:
24193; PWR6-NEXT:    lis 5, 21845
24194; PWR6-NEXT:    lis 6, 13107
24195; PWR6-NEXT:    ori 5, 5, 21845
24196; PWR6-NEXT:    rotldi 8, 4, 63
24197; PWR6-NEXT:    rotldi 9, 3, 63
24198; PWR6-NEXT:    rldimi 5, 5, 32, 0
24199; PWR6-NEXT:    and 8, 8, 5
24200; PWR6-NEXT:    and 5, 9, 5
24201; PWR6-NEXT:    ori 6, 6, 13107
24202; PWR6-NEXT:    sub 3, 3, 5
24203; PWR6-NEXT:    rldimi 6, 6, 32, 0
24204; PWR6-NEXT:    sub 4, 4, 8
24205; PWR6-NEXT:    and 8, 3, 6
24206; PWR6-NEXT:    rotldi 3, 3, 62
24207; PWR6-NEXT:    and 3, 3, 6
24208; PWR6-NEXT:    lis 7, 3855
24209; PWR6-NEXT:    and 5, 4, 6
24210; PWR6-NEXT:    rotldi 4, 4, 62
24211; PWR6-NEXT:    add 3, 8, 3
24212; PWR6-NEXT:    lis 9, 257
24213; PWR6-NEXT:    ori 7, 7, 3855
24214; PWR6-NEXT:    and 4, 4, 6
24215; PWR6-NEXT:    rldicl 6, 3, 60, 4
24216; PWR6-NEXT:    ori 9, 9, 257
24217; PWR6-NEXT:    rldimi 7, 7, 32, 0
24218; PWR6-NEXT:    add 4, 5, 4
24219; PWR6-NEXT:    add 3, 3, 6
24220; PWR6-NEXT:    rldimi 9, 9, 32, 0
24221; PWR6-NEXT:    rldicl 5, 4, 60, 4
24222; PWR6-NEXT:    and 3, 3, 7
24223; PWR6-NEXT:    add 4, 4, 5
24224; PWR6-NEXT:    mulld 3, 3, 9
24225; PWR6-NEXT:    and 4, 4, 7
24226; PWR6-NEXT:    rldicl 3, 3, 8, 56
24227; PWR6-NEXT:    mulld 4, 4, 9
24228; PWR6-NEXT:    li 5, 47
24229; PWR6-NEXT:    subfic 3, 3, 47
24230; PWR6-NEXT:    rldicl 4, 4, 8, 56
24231; PWR6-NEXT:    subfe 3, 5, 5
24232; PWR6-NEXT:    subfic 4, 4, 47
24233; PWR6-NEXT:    subfe 4, 5, 5
24234; PWR6-NEXT:    blr
24235;
24236; PWR7-LABEL: ugt_47_v2i64:
24237; PWR7:       # %bb.0:
24238; PWR7-NEXT:    addi 3, 1, -32
24239; PWR7-NEXT:    li 5, -1
24240; PWR7-NEXT:    stxvd2x 34, 0, 3
24241; PWR7-NEXT:    ld 4, -24(1)
24242; PWR7-NEXT:    ld 3, -32(1)
24243; PWR7-NEXT:    popcntd 4, 4
24244; PWR7-NEXT:    popcntd 3, 3
24245; PWR7-NEXT:    cmpldi 4, 47
24246; PWR7-NEXT:    li 4, 0
24247; PWR7-NEXT:    iselgt 6, 5, 4
24248; PWR7-NEXT:    cmpldi 3, 47
24249; PWR7-NEXT:    iselgt 3, 5, 4
24250; PWR7-NEXT:    std 6, -8(1)
24251; PWR7-NEXT:    std 3, -16(1)
24252; PWR7-NEXT:    addi 3, 1, -16
24253; PWR7-NEXT:    lxvd2x 34, 0, 3
24254; PWR7-NEXT:    blr
24255;
24256; PWR8-LABEL: ugt_47_v2i64:
24257; PWR8:       # %bb.0:
24258; PWR8-NEXT:    addis 3, 2, .LCPI192_0@toc@ha
24259; PWR8-NEXT:    vpopcntd 2, 2
24260; PWR8-NEXT:    addi 3, 3, .LCPI192_0@toc@l
24261; PWR8-NEXT:    lxvd2x 35, 0, 3
24262; PWR8-NEXT:    vcmpgtud 2, 2, 3
24263; PWR8-NEXT:    blr
24264;
24265; PWR9-LABEL: ugt_47_v2i64:
24266; PWR9:       # %bb.0:
24267; PWR9-NEXT:    addis 3, 2, .LCPI192_0@toc@ha
24268; PWR9-NEXT:    vpopcntd 2, 2
24269; PWR9-NEXT:    addi 3, 3, .LCPI192_0@toc@l
24270; PWR9-NEXT:    lxv 35, 0(3)
24271; PWR9-NEXT:    vcmpgtud 2, 2, 3
24272; PWR9-NEXT:    blr
24273  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24274  %3 = icmp ugt <2 x i64> %2, <i64 47, i64 47>
24275  %4 = sext <2 x i1> %3 to <2 x i64>
24276  ret <2 x i64> %4
24277}
24278
24279define <2 x i64> @ult_48_v2i64(<2 x i64> %0) {
24280; PWR5-LABEL: ult_48_v2i64:
24281; PWR5:       # %bb.0:
24282; PWR5-NEXT:    lis 5, 21845
24283; PWR5-NEXT:    lis 6, 13107
24284; PWR5-NEXT:    ori 5, 5, 21845
24285; PWR5-NEXT:    rotldi 8, 4, 63
24286; PWR5-NEXT:    rotldi 9, 3, 63
24287; PWR5-NEXT:    rldimi 5, 5, 32, 0
24288; PWR5-NEXT:    and 8, 8, 5
24289; PWR5-NEXT:    and 5, 9, 5
24290; PWR5-NEXT:    ori 6, 6, 13107
24291; PWR5-NEXT:    sub 3, 3, 5
24292; PWR5-NEXT:    rldimi 6, 6, 32, 0
24293; PWR5-NEXT:    sub 4, 4, 8
24294; PWR5-NEXT:    and 8, 3, 6
24295; PWR5-NEXT:    rotldi 3, 3, 62
24296; PWR5-NEXT:    and 3, 3, 6
24297; PWR5-NEXT:    lis 7, 3855
24298; PWR5-NEXT:    and 5, 4, 6
24299; PWR5-NEXT:    rotldi 4, 4, 62
24300; PWR5-NEXT:    add 3, 8, 3
24301; PWR5-NEXT:    lis 9, 257
24302; PWR5-NEXT:    ori 7, 7, 3855
24303; PWR5-NEXT:    and 4, 4, 6
24304; PWR5-NEXT:    rldicl 6, 3, 60, 4
24305; PWR5-NEXT:    ori 9, 9, 257
24306; PWR5-NEXT:    rldimi 7, 7, 32, 0
24307; PWR5-NEXT:    add 4, 5, 4
24308; PWR5-NEXT:    add 3, 3, 6
24309; PWR5-NEXT:    rldimi 9, 9, 32, 0
24310; PWR5-NEXT:    rldicl 5, 4, 60, 4
24311; PWR5-NEXT:    and 3, 3, 7
24312; PWR5-NEXT:    add 4, 4, 5
24313; PWR5-NEXT:    mulld 3, 3, 9
24314; PWR5-NEXT:    and 4, 4, 7
24315; PWR5-NEXT:    rldicl 3, 3, 8, 56
24316; PWR5-NEXT:    li 5, 48
24317; PWR5-NEXT:    mulld 4, 4, 9
24318; PWR5-NEXT:    subc 6, 3, 5
24319; PWR5-NEXT:    rldicl 4, 4, 8, 56
24320; PWR5-NEXT:    subfe 3, 3, 3
24321; PWR5-NEXT:    subc 5, 4, 5
24322; PWR5-NEXT:    subfe 4, 4, 4
24323; PWR5-NEXT:    blr
24324;
24325; PWR6-LABEL: ult_48_v2i64:
24326; PWR6:       # %bb.0:
24327; PWR6-NEXT:    lis 5, 21845
24328; PWR6-NEXT:    lis 6, 13107
24329; PWR6-NEXT:    ori 5, 5, 21845
24330; PWR6-NEXT:    rotldi 8, 4, 63
24331; PWR6-NEXT:    rotldi 9, 3, 63
24332; PWR6-NEXT:    rldimi 5, 5, 32, 0
24333; PWR6-NEXT:    and 8, 8, 5
24334; PWR6-NEXT:    and 5, 9, 5
24335; PWR6-NEXT:    ori 6, 6, 13107
24336; PWR6-NEXT:    sub 3, 3, 5
24337; PWR6-NEXT:    rldimi 6, 6, 32, 0
24338; PWR6-NEXT:    sub 4, 4, 8
24339; PWR6-NEXT:    and 8, 3, 6
24340; PWR6-NEXT:    rotldi 3, 3, 62
24341; PWR6-NEXT:    and 3, 3, 6
24342; PWR6-NEXT:    lis 7, 3855
24343; PWR6-NEXT:    and 5, 4, 6
24344; PWR6-NEXT:    rotldi 4, 4, 62
24345; PWR6-NEXT:    add 3, 8, 3
24346; PWR6-NEXT:    lis 9, 257
24347; PWR6-NEXT:    ori 7, 7, 3855
24348; PWR6-NEXT:    and 4, 4, 6
24349; PWR6-NEXT:    rldicl 6, 3, 60, 4
24350; PWR6-NEXT:    ori 9, 9, 257
24351; PWR6-NEXT:    rldimi 7, 7, 32, 0
24352; PWR6-NEXT:    add 4, 5, 4
24353; PWR6-NEXT:    add 3, 3, 6
24354; PWR6-NEXT:    rldimi 9, 9, 32, 0
24355; PWR6-NEXT:    rldicl 5, 4, 60, 4
24356; PWR6-NEXT:    and 3, 3, 7
24357; PWR6-NEXT:    add 4, 4, 5
24358; PWR6-NEXT:    mulld 3, 3, 9
24359; PWR6-NEXT:    and 4, 4, 7
24360; PWR6-NEXT:    rldicl 3, 3, 8, 56
24361; PWR6-NEXT:    li 5, 48
24362; PWR6-NEXT:    mulld 4, 4, 9
24363; PWR6-NEXT:    subc 6, 3, 5
24364; PWR6-NEXT:    rldicl 4, 4, 8, 56
24365; PWR6-NEXT:    subfe 3, 3, 3
24366; PWR6-NEXT:    subc 5, 4, 5
24367; PWR6-NEXT:    subfe 4, 4, 4
24368; PWR6-NEXT:    blr
24369;
24370; PWR7-LABEL: ult_48_v2i64:
24371; PWR7:       # %bb.0:
24372; PWR7-NEXT:    addi 3, 1, -32
24373; PWR7-NEXT:    li 5, -1
24374; PWR7-NEXT:    stxvd2x 34, 0, 3
24375; PWR7-NEXT:    ld 4, -24(1)
24376; PWR7-NEXT:    ld 3, -32(1)
24377; PWR7-NEXT:    popcntd 4, 4
24378; PWR7-NEXT:    popcntd 3, 3
24379; PWR7-NEXT:    cmpldi 4, 48
24380; PWR7-NEXT:    li 4, 0
24381; PWR7-NEXT:    isellt 6, 5, 4
24382; PWR7-NEXT:    cmpldi 3, 48
24383; PWR7-NEXT:    isellt 3, 5, 4
24384; PWR7-NEXT:    std 6, -8(1)
24385; PWR7-NEXT:    std 3, -16(1)
24386; PWR7-NEXT:    addi 3, 1, -16
24387; PWR7-NEXT:    lxvd2x 34, 0, 3
24388; PWR7-NEXT:    blr
24389;
24390; PWR8-LABEL: ult_48_v2i64:
24391; PWR8:       # %bb.0:
24392; PWR8-NEXT:    addis 3, 2, .LCPI193_0@toc@ha
24393; PWR8-NEXT:    vpopcntd 2, 2
24394; PWR8-NEXT:    addi 3, 3, .LCPI193_0@toc@l
24395; PWR8-NEXT:    lxvd2x 35, 0, 3
24396; PWR8-NEXT:    vcmpgtud 2, 3, 2
24397; PWR8-NEXT:    blr
24398;
24399; PWR9-LABEL: ult_48_v2i64:
24400; PWR9:       # %bb.0:
24401; PWR9-NEXT:    addis 3, 2, .LCPI193_0@toc@ha
24402; PWR9-NEXT:    vpopcntd 2, 2
24403; PWR9-NEXT:    addi 3, 3, .LCPI193_0@toc@l
24404; PWR9-NEXT:    lxv 35, 0(3)
24405; PWR9-NEXT:    vcmpgtud 2, 3, 2
24406; PWR9-NEXT:    blr
24407  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24408  %3 = icmp ult <2 x i64> %2, <i64 48, i64 48>
24409  %4 = sext <2 x i1> %3 to <2 x i64>
24410  ret <2 x i64> %4
24411}
24412
24413define <2 x i64> @ugt_48_v2i64(<2 x i64> %0) {
24414; PWR5-LABEL: ugt_48_v2i64:
24415; PWR5:       # %bb.0:
24416; PWR5-NEXT:    lis 5, 21845
24417; PWR5-NEXT:    lis 6, 13107
24418; PWR5-NEXT:    ori 5, 5, 21845
24419; PWR5-NEXT:    rotldi 8, 4, 63
24420; PWR5-NEXT:    rotldi 9, 3, 63
24421; PWR5-NEXT:    rldimi 5, 5, 32, 0
24422; PWR5-NEXT:    and 8, 8, 5
24423; PWR5-NEXT:    and 5, 9, 5
24424; PWR5-NEXT:    ori 6, 6, 13107
24425; PWR5-NEXT:    sub 3, 3, 5
24426; PWR5-NEXT:    rldimi 6, 6, 32, 0
24427; PWR5-NEXT:    sub 4, 4, 8
24428; PWR5-NEXT:    and 8, 3, 6
24429; PWR5-NEXT:    rotldi 3, 3, 62
24430; PWR5-NEXT:    and 3, 3, 6
24431; PWR5-NEXT:    lis 7, 3855
24432; PWR5-NEXT:    and 5, 4, 6
24433; PWR5-NEXT:    rotldi 4, 4, 62
24434; PWR5-NEXT:    add 3, 8, 3
24435; PWR5-NEXT:    lis 9, 257
24436; PWR5-NEXT:    ori 7, 7, 3855
24437; PWR5-NEXT:    and 4, 4, 6
24438; PWR5-NEXT:    rldicl 6, 3, 60, 4
24439; PWR5-NEXT:    ori 9, 9, 257
24440; PWR5-NEXT:    rldimi 7, 7, 32, 0
24441; PWR5-NEXT:    add 4, 5, 4
24442; PWR5-NEXT:    add 3, 3, 6
24443; PWR5-NEXT:    rldimi 9, 9, 32, 0
24444; PWR5-NEXT:    rldicl 5, 4, 60, 4
24445; PWR5-NEXT:    and 3, 3, 7
24446; PWR5-NEXT:    add 4, 4, 5
24447; PWR5-NEXT:    mulld 3, 3, 9
24448; PWR5-NEXT:    and 4, 4, 7
24449; PWR5-NEXT:    rldicl 3, 3, 8, 56
24450; PWR5-NEXT:    mulld 4, 4, 9
24451; PWR5-NEXT:    li 5, 48
24452; PWR5-NEXT:    subfic 3, 3, 48
24453; PWR5-NEXT:    rldicl 4, 4, 8, 56
24454; PWR5-NEXT:    subfe 3, 5, 5
24455; PWR5-NEXT:    subfic 4, 4, 48
24456; PWR5-NEXT:    subfe 4, 5, 5
24457; PWR5-NEXT:    blr
24458;
24459; PWR6-LABEL: ugt_48_v2i64:
24460; PWR6:       # %bb.0:
24461; PWR6-NEXT:    lis 5, 21845
24462; PWR6-NEXT:    lis 6, 13107
24463; PWR6-NEXT:    ori 5, 5, 21845
24464; PWR6-NEXT:    rotldi 8, 4, 63
24465; PWR6-NEXT:    rotldi 9, 3, 63
24466; PWR6-NEXT:    rldimi 5, 5, 32, 0
24467; PWR6-NEXT:    and 8, 8, 5
24468; PWR6-NEXT:    and 5, 9, 5
24469; PWR6-NEXT:    ori 6, 6, 13107
24470; PWR6-NEXT:    sub 3, 3, 5
24471; PWR6-NEXT:    rldimi 6, 6, 32, 0
24472; PWR6-NEXT:    sub 4, 4, 8
24473; PWR6-NEXT:    and 8, 3, 6
24474; PWR6-NEXT:    rotldi 3, 3, 62
24475; PWR6-NEXT:    and 3, 3, 6
24476; PWR6-NEXT:    lis 7, 3855
24477; PWR6-NEXT:    and 5, 4, 6
24478; PWR6-NEXT:    rotldi 4, 4, 62
24479; PWR6-NEXT:    add 3, 8, 3
24480; PWR6-NEXT:    lis 9, 257
24481; PWR6-NEXT:    ori 7, 7, 3855
24482; PWR6-NEXT:    and 4, 4, 6
24483; PWR6-NEXT:    rldicl 6, 3, 60, 4
24484; PWR6-NEXT:    ori 9, 9, 257
24485; PWR6-NEXT:    rldimi 7, 7, 32, 0
24486; PWR6-NEXT:    add 4, 5, 4
24487; PWR6-NEXT:    add 3, 3, 6
24488; PWR6-NEXT:    rldimi 9, 9, 32, 0
24489; PWR6-NEXT:    rldicl 5, 4, 60, 4
24490; PWR6-NEXT:    and 3, 3, 7
24491; PWR6-NEXT:    add 4, 4, 5
24492; PWR6-NEXT:    mulld 3, 3, 9
24493; PWR6-NEXT:    and 4, 4, 7
24494; PWR6-NEXT:    rldicl 3, 3, 8, 56
24495; PWR6-NEXT:    mulld 4, 4, 9
24496; PWR6-NEXT:    li 5, 48
24497; PWR6-NEXT:    subfic 3, 3, 48
24498; PWR6-NEXT:    rldicl 4, 4, 8, 56
24499; PWR6-NEXT:    subfe 3, 5, 5
24500; PWR6-NEXT:    subfic 4, 4, 48
24501; PWR6-NEXT:    subfe 4, 5, 5
24502; PWR6-NEXT:    blr
24503;
24504; PWR7-LABEL: ugt_48_v2i64:
24505; PWR7:       # %bb.0:
24506; PWR7-NEXT:    addi 3, 1, -32
24507; PWR7-NEXT:    li 5, -1
24508; PWR7-NEXT:    stxvd2x 34, 0, 3
24509; PWR7-NEXT:    ld 4, -24(1)
24510; PWR7-NEXT:    ld 3, -32(1)
24511; PWR7-NEXT:    popcntd 4, 4
24512; PWR7-NEXT:    popcntd 3, 3
24513; PWR7-NEXT:    cmpldi 4, 48
24514; PWR7-NEXT:    li 4, 0
24515; PWR7-NEXT:    iselgt 6, 5, 4
24516; PWR7-NEXT:    cmpldi 3, 48
24517; PWR7-NEXT:    iselgt 3, 5, 4
24518; PWR7-NEXT:    std 6, -8(1)
24519; PWR7-NEXT:    std 3, -16(1)
24520; PWR7-NEXT:    addi 3, 1, -16
24521; PWR7-NEXT:    lxvd2x 34, 0, 3
24522; PWR7-NEXT:    blr
24523;
24524; PWR8-LABEL: ugt_48_v2i64:
24525; PWR8:       # %bb.0:
24526; PWR8-NEXT:    addis 3, 2, .LCPI194_0@toc@ha
24527; PWR8-NEXT:    vpopcntd 2, 2
24528; PWR8-NEXT:    addi 3, 3, .LCPI194_0@toc@l
24529; PWR8-NEXT:    lxvd2x 35, 0, 3
24530; PWR8-NEXT:    vcmpgtud 2, 2, 3
24531; PWR8-NEXT:    blr
24532;
24533; PWR9-LABEL: ugt_48_v2i64:
24534; PWR9:       # %bb.0:
24535; PWR9-NEXT:    addis 3, 2, .LCPI194_0@toc@ha
24536; PWR9-NEXT:    vpopcntd 2, 2
24537; PWR9-NEXT:    addi 3, 3, .LCPI194_0@toc@l
24538; PWR9-NEXT:    lxv 35, 0(3)
24539; PWR9-NEXT:    vcmpgtud 2, 2, 3
24540; PWR9-NEXT:    blr
24541  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24542  %3 = icmp ugt <2 x i64> %2, <i64 48, i64 48>
24543  %4 = sext <2 x i1> %3 to <2 x i64>
24544  ret <2 x i64> %4
24545}
24546
24547define <2 x i64> @ult_49_v2i64(<2 x i64> %0) {
24548; PWR5-LABEL: ult_49_v2i64:
24549; PWR5:       # %bb.0:
24550; PWR5-NEXT:    lis 5, 21845
24551; PWR5-NEXT:    lis 6, 13107
24552; PWR5-NEXT:    ori 5, 5, 21845
24553; PWR5-NEXT:    rotldi 8, 4, 63
24554; PWR5-NEXT:    rotldi 9, 3, 63
24555; PWR5-NEXT:    rldimi 5, 5, 32, 0
24556; PWR5-NEXT:    and 8, 8, 5
24557; PWR5-NEXT:    and 5, 9, 5
24558; PWR5-NEXT:    ori 6, 6, 13107
24559; PWR5-NEXT:    sub 3, 3, 5
24560; PWR5-NEXT:    rldimi 6, 6, 32, 0
24561; PWR5-NEXT:    sub 4, 4, 8
24562; PWR5-NEXT:    and 8, 3, 6
24563; PWR5-NEXT:    rotldi 3, 3, 62
24564; PWR5-NEXT:    and 3, 3, 6
24565; PWR5-NEXT:    lis 7, 3855
24566; PWR5-NEXT:    and 5, 4, 6
24567; PWR5-NEXT:    rotldi 4, 4, 62
24568; PWR5-NEXT:    add 3, 8, 3
24569; PWR5-NEXT:    lis 9, 257
24570; PWR5-NEXT:    ori 7, 7, 3855
24571; PWR5-NEXT:    and 4, 4, 6
24572; PWR5-NEXT:    rldicl 6, 3, 60, 4
24573; PWR5-NEXT:    ori 9, 9, 257
24574; PWR5-NEXT:    rldimi 7, 7, 32, 0
24575; PWR5-NEXT:    add 4, 5, 4
24576; PWR5-NEXT:    add 3, 3, 6
24577; PWR5-NEXT:    rldimi 9, 9, 32, 0
24578; PWR5-NEXT:    rldicl 5, 4, 60, 4
24579; PWR5-NEXT:    and 3, 3, 7
24580; PWR5-NEXT:    add 4, 4, 5
24581; PWR5-NEXT:    mulld 3, 3, 9
24582; PWR5-NEXT:    and 4, 4, 7
24583; PWR5-NEXT:    rldicl 3, 3, 8, 56
24584; PWR5-NEXT:    li 5, 49
24585; PWR5-NEXT:    mulld 4, 4, 9
24586; PWR5-NEXT:    subc 6, 3, 5
24587; PWR5-NEXT:    rldicl 4, 4, 8, 56
24588; PWR5-NEXT:    subfe 3, 3, 3
24589; PWR5-NEXT:    subc 5, 4, 5
24590; PWR5-NEXT:    subfe 4, 4, 4
24591; PWR5-NEXT:    blr
24592;
24593; PWR6-LABEL: ult_49_v2i64:
24594; PWR6:       # %bb.0:
24595; PWR6-NEXT:    lis 5, 21845
24596; PWR6-NEXT:    lis 6, 13107
24597; PWR6-NEXT:    ori 5, 5, 21845
24598; PWR6-NEXT:    rotldi 8, 4, 63
24599; PWR6-NEXT:    rotldi 9, 3, 63
24600; PWR6-NEXT:    rldimi 5, 5, 32, 0
24601; PWR6-NEXT:    and 8, 8, 5
24602; PWR6-NEXT:    and 5, 9, 5
24603; PWR6-NEXT:    ori 6, 6, 13107
24604; PWR6-NEXT:    sub 3, 3, 5
24605; PWR6-NEXT:    rldimi 6, 6, 32, 0
24606; PWR6-NEXT:    sub 4, 4, 8
24607; PWR6-NEXT:    and 8, 3, 6
24608; PWR6-NEXT:    rotldi 3, 3, 62
24609; PWR6-NEXT:    and 3, 3, 6
24610; PWR6-NEXT:    lis 7, 3855
24611; PWR6-NEXT:    and 5, 4, 6
24612; PWR6-NEXT:    rotldi 4, 4, 62
24613; PWR6-NEXT:    add 3, 8, 3
24614; PWR6-NEXT:    lis 9, 257
24615; PWR6-NEXT:    ori 7, 7, 3855
24616; PWR6-NEXT:    and 4, 4, 6
24617; PWR6-NEXT:    rldicl 6, 3, 60, 4
24618; PWR6-NEXT:    ori 9, 9, 257
24619; PWR6-NEXT:    rldimi 7, 7, 32, 0
24620; PWR6-NEXT:    add 4, 5, 4
24621; PWR6-NEXT:    add 3, 3, 6
24622; PWR6-NEXT:    rldimi 9, 9, 32, 0
24623; PWR6-NEXT:    rldicl 5, 4, 60, 4
24624; PWR6-NEXT:    and 3, 3, 7
24625; PWR6-NEXT:    add 4, 4, 5
24626; PWR6-NEXT:    mulld 3, 3, 9
24627; PWR6-NEXT:    and 4, 4, 7
24628; PWR6-NEXT:    rldicl 3, 3, 8, 56
24629; PWR6-NEXT:    li 5, 49
24630; PWR6-NEXT:    mulld 4, 4, 9
24631; PWR6-NEXT:    subc 6, 3, 5
24632; PWR6-NEXT:    rldicl 4, 4, 8, 56
24633; PWR6-NEXT:    subfe 3, 3, 3
24634; PWR6-NEXT:    subc 5, 4, 5
24635; PWR6-NEXT:    subfe 4, 4, 4
24636; PWR6-NEXT:    blr
24637;
24638; PWR7-LABEL: ult_49_v2i64:
24639; PWR7:       # %bb.0:
24640; PWR7-NEXT:    addi 3, 1, -32
24641; PWR7-NEXT:    li 5, -1
24642; PWR7-NEXT:    stxvd2x 34, 0, 3
24643; PWR7-NEXT:    ld 4, -24(1)
24644; PWR7-NEXT:    ld 3, -32(1)
24645; PWR7-NEXT:    popcntd 4, 4
24646; PWR7-NEXT:    popcntd 3, 3
24647; PWR7-NEXT:    cmpldi 4, 49
24648; PWR7-NEXT:    li 4, 0
24649; PWR7-NEXT:    isellt 6, 5, 4
24650; PWR7-NEXT:    cmpldi 3, 49
24651; PWR7-NEXT:    isellt 3, 5, 4
24652; PWR7-NEXT:    std 6, -8(1)
24653; PWR7-NEXT:    std 3, -16(1)
24654; PWR7-NEXT:    addi 3, 1, -16
24655; PWR7-NEXT:    lxvd2x 34, 0, 3
24656; PWR7-NEXT:    blr
24657;
24658; PWR8-LABEL: ult_49_v2i64:
24659; PWR8:       # %bb.0:
24660; PWR8-NEXT:    addis 3, 2, .LCPI195_0@toc@ha
24661; PWR8-NEXT:    vpopcntd 2, 2
24662; PWR8-NEXT:    addi 3, 3, .LCPI195_0@toc@l
24663; PWR8-NEXT:    lxvd2x 35, 0, 3
24664; PWR8-NEXT:    vcmpgtud 2, 3, 2
24665; PWR8-NEXT:    blr
24666;
24667; PWR9-LABEL: ult_49_v2i64:
24668; PWR9:       # %bb.0:
24669; PWR9-NEXT:    addis 3, 2, .LCPI195_0@toc@ha
24670; PWR9-NEXT:    vpopcntd 2, 2
24671; PWR9-NEXT:    addi 3, 3, .LCPI195_0@toc@l
24672; PWR9-NEXT:    lxv 35, 0(3)
24673; PWR9-NEXT:    vcmpgtud 2, 3, 2
24674; PWR9-NEXT:    blr
24675  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24676  %3 = icmp ult <2 x i64> %2, <i64 49, i64 49>
24677  %4 = sext <2 x i1> %3 to <2 x i64>
24678  ret <2 x i64> %4
24679}
24680
24681define <2 x i64> @ugt_49_v2i64(<2 x i64> %0) {
24682; PWR5-LABEL: ugt_49_v2i64:
24683; PWR5:       # %bb.0:
24684; PWR5-NEXT:    lis 5, 21845
24685; PWR5-NEXT:    lis 6, 13107
24686; PWR5-NEXT:    ori 5, 5, 21845
24687; PWR5-NEXT:    rotldi 8, 4, 63
24688; PWR5-NEXT:    rotldi 9, 3, 63
24689; PWR5-NEXT:    rldimi 5, 5, 32, 0
24690; PWR5-NEXT:    and 8, 8, 5
24691; PWR5-NEXT:    and 5, 9, 5
24692; PWR5-NEXT:    ori 6, 6, 13107
24693; PWR5-NEXT:    sub 3, 3, 5
24694; PWR5-NEXT:    rldimi 6, 6, 32, 0
24695; PWR5-NEXT:    sub 4, 4, 8
24696; PWR5-NEXT:    and 8, 3, 6
24697; PWR5-NEXT:    rotldi 3, 3, 62
24698; PWR5-NEXT:    and 3, 3, 6
24699; PWR5-NEXT:    lis 7, 3855
24700; PWR5-NEXT:    and 5, 4, 6
24701; PWR5-NEXT:    rotldi 4, 4, 62
24702; PWR5-NEXT:    add 3, 8, 3
24703; PWR5-NEXT:    lis 9, 257
24704; PWR5-NEXT:    ori 7, 7, 3855
24705; PWR5-NEXT:    and 4, 4, 6
24706; PWR5-NEXT:    rldicl 6, 3, 60, 4
24707; PWR5-NEXT:    ori 9, 9, 257
24708; PWR5-NEXT:    rldimi 7, 7, 32, 0
24709; PWR5-NEXT:    add 4, 5, 4
24710; PWR5-NEXT:    add 3, 3, 6
24711; PWR5-NEXT:    rldimi 9, 9, 32, 0
24712; PWR5-NEXT:    rldicl 5, 4, 60, 4
24713; PWR5-NEXT:    and 3, 3, 7
24714; PWR5-NEXT:    add 4, 4, 5
24715; PWR5-NEXT:    mulld 3, 3, 9
24716; PWR5-NEXT:    and 4, 4, 7
24717; PWR5-NEXT:    rldicl 3, 3, 8, 56
24718; PWR5-NEXT:    mulld 4, 4, 9
24719; PWR5-NEXT:    li 5, 49
24720; PWR5-NEXT:    subfic 3, 3, 49
24721; PWR5-NEXT:    rldicl 4, 4, 8, 56
24722; PWR5-NEXT:    subfe 3, 5, 5
24723; PWR5-NEXT:    subfic 4, 4, 49
24724; PWR5-NEXT:    subfe 4, 5, 5
24725; PWR5-NEXT:    blr
24726;
24727; PWR6-LABEL: ugt_49_v2i64:
24728; PWR6:       # %bb.0:
24729; PWR6-NEXT:    lis 5, 21845
24730; PWR6-NEXT:    lis 6, 13107
24731; PWR6-NEXT:    ori 5, 5, 21845
24732; PWR6-NEXT:    rotldi 8, 4, 63
24733; PWR6-NEXT:    rotldi 9, 3, 63
24734; PWR6-NEXT:    rldimi 5, 5, 32, 0
24735; PWR6-NEXT:    and 8, 8, 5
24736; PWR6-NEXT:    and 5, 9, 5
24737; PWR6-NEXT:    ori 6, 6, 13107
24738; PWR6-NEXT:    sub 3, 3, 5
24739; PWR6-NEXT:    rldimi 6, 6, 32, 0
24740; PWR6-NEXT:    sub 4, 4, 8
24741; PWR6-NEXT:    and 8, 3, 6
24742; PWR6-NEXT:    rotldi 3, 3, 62
24743; PWR6-NEXT:    and 3, 3, 6
24744; PWR6-NEXT:    lis 7, 3855
24745; PWR6-NEXT:    and 5, 4, 6
24746; PWR6-NEXT:    rotldi 4, 4, 62
24747; PWR6-NEXT:    add 3, 8, 3
24748; PWR6-NEXT:    lis 9, 257
24749; PWR6-NEXT:    ori 7, 7, 3855
24750; PWR6-NEXT:    and 4, 4, 6
24751; PWR6-NEXT:    rldicl 6, 3, 60, 4
24752; PWR6-NEXT:    ori 9, 9, 257
24753; PWR6-NEXT:    rldimi 7, 7, 32, 0
24754; PWR6-NEXT:    add 4, 5, 4
24755; PWR6-NEXT:    add 3, 3, 6
24756; PWR6-NEXT:    rldimi 9, 9, 32, 0
24757; PWR6-NEXT:    rldicl 5, 4, 60, 4
24758; PWR6-NEXT:    and 3, 3, 7
24759; PWR6-NEXT:    add 4, 4, 5
24760; PWR6-NEXT:    mulld 3, 3, 9
24761; PWR6-NEXT:    and 4, 4, 7
24762; PWR6-NEXT:    rldicl 3, 3, 8, 56
24763; PWR6-NEXT:    mulld 4, 4, 9
24764; PWR6-NEXT:    li 5, 49
24765; PWR6-NEXT:    subfic 3, 3, 49
24766; PWR6-NEXT:    rldicl 4, 4, 8, 56
24767; PWR6-NEXT:    subfe 3, 5, 5
24768; PWR6-NEXT:    subfic 4, 4, 49
24769; PWR6-NEXT:    subfe 4, 5, 5
24770; PWR6-NEXT:    blr
24771;
24772; PWR7-LABEL: ugt_49_v2i64:
24773; PWR7:       # %bb.0:
24774; PWR7-NEXT:    addi 3, 1, -32
24775; PWR7-NEXT:    li 5, -1
24776; PWR7-NEXT:    stxvd2x 34, 0, 3
24777; PWR7-NEXT:    ld 4, -24(1)
24778; PWR7-NEXT:    ld 3, -32(1)
24779; PWR7-NEXT:    popcntd 4, 4
24780; PWR7-NEXT:    popcntd 3, 3
24781; PWR7-NEXT:    cmpldi 4, 49
24782; PWR7-NEXT:    li 4, 0
24783; PWR7-NEXT:    iselgt 6, 5, 4
24784; PWR7-NEXT:    cmpldi 3, 49
24785; PWR7-NEXT:    iselgt 3, 5, 4
24786; PWR7-NEXT:    std 6, -8(1)
24787; PWR7-NEXT:    std 3, -16(1)
24788; PWR7-NEXT:    addi 3, 1, -16
24789; PWR7-NEXT:    lxvd2x 34, 0, 3
24790; PWR7-NEXT:    blr
24791;
24792; PWR8-LABEL: ugt_49_v2i64:
24793; PWR8:       # %bb.0:
24794; PWR8-NEXT:    addis 3, 2, .LCPI196_0@toc@ha
24795; PWR8-NEXT:    vpopcntd 2, 2
24796; PWR8-NEXT:    addi 3, 3, .LCPI196_0@toc@l
24797; PWR8-NEXT:    lxvd2x 35, 0, 3
24798; PWR8-NEXT:    vcmpgtud 2, 2, 3
24799; PWR8-NEXT:    blr
24800;
24801; PWR9-LABEL: ugt_49_v2i64:
24802; PWR9:       # %bb.0:
24803; PWR9-NEXT:    addis 3, 2, .LCPI196_0@toc@ha
24804; PWR9-NEXT:    vpopcntd 2, 2
24805; PWR9-NEXT:    addi 3, 3, .LCPI196_0@toc@l
24806; PWR9-NEXT:    lxv 35, 0(3)
24807; PWR9-NEXT:    vcmpgtud 2, 2, 3
24808; PWR9-NEXT:    blr
24809  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24810  %3 = icmp ugt <2 x i64> %2, <i64 49, i64 49>
24811  %4 = sext <2 x i1> %3 to <2 x i64>
24812  ret <2 x i64> %4
24813}
24814
24815define <2 x i64> @ult_50_v2i64(<2 x i64> %0) {
24816; PWR5-LABEL: ult_50_v2i64:
24817; PWR5:       # %bb.0:
24818; PWR5-NEXT:    lis 5, 21845
24819; PWR5-NEXT:    lis 6, 13107
24820; PWR5-NEXT:    ori 5, 5, 21845
24821; PWR5-NEXT:    rotldi 8, 4, 63
24822; PWR5-NEXT:    rotldi 9, 3, 63
24823; PWR5-NEXT:    rldimi 5, 5, 32, 0
24824; PWR5-NEXT:    and 8, 8, 5
24825; PWR5-NEXT:    and 5, 9, 5
24826; PWR5-NEXT:    ori 6, 6, 13107
24827; PWR5-NEXT:    sub 3, 3, 5
24828; PWR5-NEXT:    rldimi 6, 6, 32, 0
24829; PWR5-NEXT:    sub 4, 4, 8
24830; PWR5-NEXT:    and 8, 3, 6
24831; PWR5-NEXT:    rotldi 3, 3, 62
24832; PWR5-NEXT:    and 3, 3, 6
24833; PWR5-NEXT:    lis 7, 3855
24834; PWR5-NEXT:    and 5, 4, 6
24835; PWR5-NEXT:    rotldi 4, 4, 62
24836; PWR5-NEXT:    add 3, 8, 3
24837; PWR5-NEXT:    lis 9, 257
24838; PWR5-NEXT:    ori 7, 7, 3855
24839; PWR5-NEXT:    and 4, 4, 6
24840; PWR5-NEXT:    rldicl 6, 3, 60, 4
24841; PWR5-NEXT:    ori 9, 9, 257
24842; PWR5-NEXT:    rldimi 7, 7, 32, 0
24843; PWR5-NEXT:    add 4, 5, 4
24844; PWR5-NEXT:    add 3, 3, 6
24845; PWR5-NEXT:    rldimi 9, 9, 32, 0
24846; PWR5-NEXT:    rldicl 5, 4, 60, 4
24847; PWR5-NEXT:    and 3, 3, 7
24848; PWR5-NEXT:    add 4, 4, 5
24849; PWR5-NEXT:    mulld 3, 3, 9
24850; PWR5-NEXT:    and 4, 4, 7
24851; PWR5-NEXT:    rldicl 3, 3, 8, 56
24852; PWR5-NEXT:    li 5, 50
24853; PWR5-NEXT:    mulld 4, 4, 9
24854; PWR5-NEXT:    subc 6, 3, 5
24855; PWR5-NEXT:    rldicl 4, 4, 8, 56
24856; PWR5-NEXT:    subfe 3, 3, 3
24857; PWR5-NEXT:    subc 5, 4, 5
24858; PWR5-NEXT:    subfe 4, 4, 4
24859; PWR5-NEXT:    blr
24860;
24861; PWR6-LABEL: ult_50_v2i64:
24862; PWR6:       # %bb.0:
24863; PWR6-NEXT:    lis 5, 21845
24864; PWR6-NEXT:    lis 6, 13107
24865; PWR6-NEXT:    ori 5, 5, 21845
24866; PWR6-NEXT:    rotldi 8, 4, 63
24867; PWR6-NEXT:    rotldi 9, 3, 63
24868; PWR6-NEXT:    rldimi 5, 5, 32, 0
24869; PWR6-NEXT:    and 8, 8, 5
24870; PWR6-NEXT:    and 5, 9, 5
24871; PWR6-NEXT:    ori 6, 6, 13107
24872; PWR6-NEXT:    sub 3, 3, 5
24873; PWR6-NEXT:    rldimi 6, 6, 32, 0
24874; PWR6-NEXT:    sub 4, 4, 8
24875; PWR6-NEXT:    and 8, 3, 6
24876; PWR6-NEXT:    rotldi 3, 3, 62
24877; PWR6-NEXT:    and 3, 3, 6
24878; PWR6-NEXT:    lis 7, 3855
24879; PWR6-NEXT:    and 5, 4, 6
24880; PWR6-NEXT:    rotldi 4, 4, 62
24881; PWR6-NEXT:    add 3, 8, 3
24882; PWR6-NEXT:    lis 9, 257
24883; PWR6-NEXT:    ori 7, 7, 3855
24884; PWR6-NEXT:    and 4, 4, 6
24885; PWR6-NEXT:    rldicl 6, 3, 60, 4
24886; PWR6-NEXT:    ori 9, 9, 257
24887; PWR6-NEXT:    rldimi 7, 7, 32, 0
24888; PWR6-NEXT:    add 4, 5, 4
24889; PWR6-NEXT:    add 3, 3, 6
24890; PWR6-NEXT:    rldimi 9, 9, 32, 0
24891; PWR6-NEXT:    rldicl 5, 4, 60, 4
24892; PWR6-NEXT:    and 3, 3, 7
24893; PWR6-NEXT:    add 4, 4, 5
24894; PWR6-NEXT:    mulld 3, 3, 9
24895; PWR6-NEXT:    and 4, 4, 7
24896; PWR6-NEXT:    rldicl 3, 3, 8, 56
24897; PWR6-NEXT:    li 5, 50
24898; PWR6-NEXT:    mulld 4, 4, 9
24899; PWR6-NEXT:    subc 6, 3, 5
24900; PWR6-NEXT:    rldicl 4, 4, 8, 56
24901; PWR6-NEXT:    subfe 3, 3, 3
24902; PWR6-NEXT:    subc 5, 4, 5
24903; PWR6-NEXT:    subfe 4, 4, 4
24904; PWR6-NEXT:    blr
24905;
24906; PWR7-LABEL: ult_50_v2i64:
24907; PWR7:       # %bb.0:
24908; PWR7-NEXT:    addi 3, 1, -32
24909; PWR7-NEXT:    li 5, -1
24910; PWR7-NEXT:    stxvd2x 34, 0, 3
24911; PWR7-NEXT:    ld 4, -24(1)
24912; PWR7-NEXT:    ld 3, -32(1)
24913; PWR7-NEXT:    popcntd 4, 4
24914; PWR7-NEXT:    popcntd 3, 3
24915; PWR7-NEXT:    cmpldi 4, 50
24916; PWR7-NEXT:    li 4, 0
24917; PWR7-NEXT:    isellt 6, 5, 4
24918; PWR7-NEXT:    cmpldi 3, 50
24919; PWR7-NEXT:    isellt 3, 5, 4
24920; PWR7-NEXT:    std 6, -8(1)
24921; PWR7-NEXT:    std 3, -16(1)
24922; PWR7-NEXT:    addi 3, 1, -16
24923; PWR7-NEXT:    lxvd2x 34, 0, 3
24924; PWR7-NEXT:    blr
24925;
24926; PWR8-LABEL: ult_50_v2i64:
24927; PWR8:       # %bb.0:
24928; PWR8-NEXT:    addis 3, 2, .LCPI197_0@toc@ha
24929; PWR8-NEXT:    vpopcntd 2, 2
24930; PWR8-NEXT:    addi 3, 3, .LCPI197_0@toc@l
24931; PWR8-NEXT:    lxvd2x 35, 0, 3
24932; PWR8-NEXT:    vcmpgtud 2, 3, 2
24933; PWR8-NEXT:    blr
24934;
24935; PWR9-LABEL: ult_50_v2i64:
24936; PWR9:       # %bb.0:
24937; PWR9-NEXT:    addis 3, 2, .LCPI197_0@toc@ha
24938; PWR9-NEXT:    vpopcntd 2, 2
24939; PWR9-NEXT:    addi 3, 3, .LCPI197_0@toc@l
24940; PWR9-NEXT:    lxv 35, 0(3)
24941; PWR9-NEXT:    vcmpgtud 2, 3, 2
24942; PWR9-NEXT:    blr
24943  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24944  %3 = icmp ult <2 x i64> %2, <i64 50, i64 50>
24945  %4 = sext <2 x i1> %3 to <2 x i64>
24946  ret <2 x i64> %4
24947}
24948
24949define <2 x i64> @ugt_50_v2i64(<2 x i64> %0) {
24950; PWR5-LABEL: ugt_50_v2i64:
24951; PWR5:       # %bb.0:
24952; PWR5-NEXT:    lis 5, 21845
24953; PWR5-NEXT:    lis 6, 13107
24954; PWR5-NEXT:    ori 5, 5, 21845
24955; PWR5-NEXT:    rotldi 8, 4, 63
24956; PWR5-NEXT:    rotldi 9, 3, 63
24957; PWR5-NEXT:    rldimi 5, 5, 32, 0
24958; PWR5-NEXT:    and 8, 8, 5
24959; PWR5-NEXT:    and 5, 9, 5
24960; PWR5-NEXT:    ori 6, 6, 13107
24961; PWR5-NEXT:    sub 3, 3, 5
24962; PWR5-NEXT:    rldimi 6, 6, 32, 0
24963; PWR5-NEXT:    sub 4, 4, 8
24964; PWR5-NEXT:    and 8, 3, 6
24965; PWR5-NEXT:    rotldi 3, 3, 62
24966; PWR5-NEXT:    and 3, 3, 6
24967; PWR5-NEXT:    lis 7, 3855
24968; PWR5-NEXT:    and 5, 4, 6
24969; PWR5-NEXT:    rotldi 4, 4, 62
24970; PWR5-NEXT:    add 3, 8, 3
24971; PWR5-NEXT:    lis 9, 257
24972; PWR5-NEXT:    ori 7, 7, 3855
24973; PWR5-NEXT:    and 4, 4, 6
24974; PWR5-NEXT:    rldicl 6, 3, 60, 4
24975; PWR5-NEXT:    ori 9, 9, 257
24976; PWR5-NEXT:    rldimi 7, 7, 32, 0
24977; PWR5-NEXT:    add 4, 5, 4
24978; PWR5-NEXT:    add 3, 3, 6
24979; PWR5-NEXT:    rldimi 9, 9, 32, 0
24980; PWR5-NEXT:    rldicl 5, 4, 60, 4
24981; PWR5-NEXT:    and 3, 3, 7
24982; PWR5-NEXT:    add 4, 4, 5
24983; PWR5-NEXT:    mulld 3, 3, 9
24984; PWR5-NEXT:    and 4, 4, 7
24985; PWR5-NEXT:    rldicl 3, 3, 8, 56
24986; PWR5-NEXT:    mulld 4, 4, 9
24987; PWR5-NEXT:    li 5, 50
24988; PWR5-NEXT:    subfic 3, 3, 50
24989; PWR5-NEXT:    rldicl 4, 4, 8, 56
24990; PWR5-NEXT:    subfe 3, 5, 5
24991; PWR5-NEXT:    subfic 4, 4, 50
24992; PWR5-NEXT:    subfe 4, 5, 5
24993; PWR5-NEXT:    blr
24994;
24995; PWR6-LABEL: ugt_50_v2i64:
24996; PWR6:       # %bb.0:
24997; PWR6-NEXT:    lis 5, 21845
24998; PWR6-NEXT:    lis 6, 13107
24999; PWR6-NEXT:    ori 5, 5, 21845
25000; PWR6-NEXT:    rotldi 8, 4, 63
25001; PWR6-NEXT:    rotldi 9, 3, 63
25002; PWR6-NEXT:    rldimi 5, 5, 32, 0
25003; PWR6-NEXT:    and 8, 8, 5
25004; PWR6-NEXT:    and 5, 9, 5
25005; PWR6-NEXT:    ori 6, 6, 13107
25006; PWR6-NEXT:    sub 3, 3, 5
25007; PWR6-NEXT:    rldimi 6, 6, 32, 0
25008; PWR6-NEXT:    sub 4, 4, 8
25009; PWR6-NEXT:    and 8, 3, 6
25010; PWR6-NEXT:    rotldi 3, 3, 62
25011; PWR6-NEXT:    and 3, 3, 6
25012; PWR6-NEXT:    lis 7, 3855
25013; PWR6-NEXT:    and 5, 4, 6
25014; PWR6-NEXT:    rotldi 4, 4, 62
25015; PWR6-NEXT:    add 3, 8, 3
25016; PWR6-NEXT:    lis 9, 257
25017; PWR6-NEXT:    ori 7, 7, 3855
25018; PWR6-NEXT:    and 4, 4, 6
25019; PWR6-NEXT:    rldicl 6, 3, 60, 4
25020; PWR6-NEXT:    ori 9, 9, 257
25021; PWR6-NEXT:    rldimi 7, 7, 32, 0
25022; PWR6-NEXT:    add 4, 5, 4
25023; PWR6-NEXT:    add 3, 3, 6
25024; PWR6-NEXT:    rldimi 9, 9, 32, 0
25025; PWR6-NEXT:    rldicl 5, 4, 60, 4
25026; PWR6-NEXT:    and 3, 3, 7
25027; PWR6-NEXT:    add 4, 4, 5
25028; PWR6-NEXT:    mulld 3, 3, 9
25029; PWR6-NEXT:    and 4, 4, 7
25030; PWR6-NEXT:    rldicl 3, 3, 8, 56
25031; PWR6-NEXT:    mulld 4, 4, 9
25032; PWR6-NEXT:    li 5, 50
25033; PWR6-NEXT:    subfic 3, 3, 50
25034; PWR6-NEXT:    rldicl 4, 4, 8, 56
25035; PWR6-NEXT:    subfe 3, 5, 5
25036; PWR6-NEXT:    subfic 4, 4, 50
25037; PWR6-NEXT:    subfe 4, 5, 5
25038; PWR6-NEXT:    blr
25039;
25040; PWR7-LABEL: ugt_50_v2i64:
25041; PWR7:       # %bb.0:
25042; PWR7-NEXT:    addi 3, 1, -32
25043; PWR7-NEXT:    li 5, -1
25044; PWR7-NEXT:    stxvd2x 34, 0, 3
25045; PWR7-NEXT:    ld 4, -24(1)
25046; PWR7-NEXT:    ld 3, -32(1)
25047; PWR7-NEXT:    popcntd 4, 4
25048; PWR7-NEXT:    popcntd 3, 3
25049; PWR7-NEXT:    cmpldi 4, 50
25050; PWR7-NEXT:    li 4, 0
25051; PWR7-NEXT:    iselgt 6, 5, 4
25052; PWR7-NEXT:    cmpldi 3, 50
25053; PWR7-NEXT:    iselgt 3, 5, 4
25054; PWR7-NEXT:    std 6, -8(1)
25055; PWR7-NEXT:    std 3, -16(1)
25056; PWR7-NEXT:    addi 3, 1, -16
25057; PWR7-NEXT:    lxvd2x 34, 0, 3
25058; PWR7-NEXT:    blr
25059;
25060; PWR8-LABEL: ugt_50_v2i64:
25061; PWR8:       # %bb.0:
25062; PWR8-NEXT:    addis 3, 2, .LCPI198_0@toc@ha
25063; PWR8-NEXT:    vpopcntd 2, 2
25064; PWR8-NEXT:    addi 3, 3, .LCPI198_0@toc@l
25065; PWR8-NEXT:    lxvd2x 35, 0, 3
25066; PWR8-NEXT:    vcmpgtud 2, 2, 3
25067; PWR8-NEXT:    blr
25068;
25069; PWR9-LABEL: ugt_50_v2i64:
25070; PWR9:       # %bb.0:
25071; PWR9-NEXT:    addis 3, 2, .LCPI198_0@toc@ha
25072; PWR9-NEXT:    vpopcntd 2, 2
25073; PWR9-NEXT:    addi 3, 3, .LCPI198_0@toc@l
25074; PWR9-NEXT:    lxv 35, 0(3)
25075; PWR9-NEXT:    vcmpgtud 2, 2, 3
25076; PWR9-NEXT:    blr
25077  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25078  %3 = icmp ugt <2 x i64> %2, <i64 50, i64 50>
25079  %4 = sext <2 x i1> %3 to <2 x i64>
25080  ret <2 x i64> %4
25081}
25082
25083define <2 x i64> @ult_51_v2i64(<2 x i64> %0) {
25084; PWR5-LABEL: ult_51_v2i64:
25085; PWR5:       # %bb.0:
25086; PWR5-NEXT:    lis 5, 21845
25087; PWR5-NEXT:    lis 6, 13107
25088; PWR5-NEXT:    ori 5, 5, 21845
25089; PWR5-NEXT:    rotldi 8, 4, 63
25090; PWR5-NEXT:    rotldi 9, 3, 63
25091; PWR5-NEXT:    rldimi 5, 5, 32, 0
25092; PWR5-NEXT:    and 8, 8, 5
25093; PWR5-NEXT:    and 5, 9, 5
25094; PWR5-NEXT:    ori 6, 6, 13107
25095; PWR5-NEXT:    sub 3, 3, 5
25096; PWR5-NEXT:    rldimi 6, 6, 32, 0
25097; PWR5-NEXT:    sub 4, 4, 8
25098; PWR5-NEXT:    and 8, 3, 6
25099; PWR5-NEXT:    rotldi 3, 3, 62
25100; PWR5-NEXT:    and 3, 3, 6
25101; PWR5-NEXT:    lis 7, 3855
25102; PWR5-NEXT:    and 5, 4, 6
25103; PWR5-NEXT:    rotldi 4, 4, 62
25104; PWR5-NEXT:    add 3, 8, 3
25105; PWR5-NEXT:    lis 9, 257
25106; PWR5-NEXT:    ori 7, 7, 3855
25107; PWR5-NEXT:    and 4, 4, 6
25108; PWR5-NEXT:    rldicl 6, 3, 60, 4
25109; PWR5-NEXT:    ori 9, 9, 257
25110; PWR5-NEXT:    rldimi 7, 7, 32, 0
25111; PWR5-NEXT:    add 4, 5, 4
25112; PWR5-NEXT:    add 3, 3, 6
25113; PWR5-NEXT:    rldimi 9, 9, 32, 0
25114; PWR5-NEXT:    rldicl 5, 4, 60, 4
25115; PWR5-NEXT:    and 3, 3, 7
25116; PWR5-NEXT:    add 4, 4, 5
25117; PWR5-NEXT:    mulld 3, 3, 9
25118; PWR5-NEXT:    and 4, 4, 7
25119; PWR5-NEXT:    rldicl 3, 3, 8, 56
25120; PWR5-NEXT:    li 5, 51
25121; PWR5-NEXT:    mulld 4, 4, 9
25122; PWR5-NEXT:    subc 6, 3, 5
25123; PWR5-NEXT:    rldicl 4, 4, 8, 56
25124; PWR5-NEXT:    subfe 3, 3, 3
25125; PWR5-NEXT:    subc 5, 4, 5
25126; PWR5-NEXT:    subfe 4, 4, 4
25127; PWR5-NEXT:    blr
25128;
25129; PWR6-LABEL: ult_51_v2i64:
25130; PWR6:       # %bb.0:
25131; PWR6-NEXT:    lis 5, 21845
25132; PWR6-NEXT:    lis 6, 13107
25133; PWR6-NEXT:    ori 5, 5, 21845
25134; PWR6-NEXT:    rotldi 8, 4, 63
25135; PWR6-NEXT:    rotldi 9, 3, 63
25136; PWR6-NEXT:    rldimi 5, 5, 32, 0
25137; PWR6-NEXT:    and 8, 8, 5
25138; PWR6-NEXT:    and 5, 9, 5
25139; PWR6-NEXT:    ori 6, 6, 13107
25140; PWR6-NEXT:    sub 3, 3, 5
25141; PWR6-NEXT:    rldimi 6, 6, 32, 0
25142; PWR6-NEXT:    sub 4, 4, 8
25143; PWR6-NEXT:    and 8, 3, 6
25144; PWR6-NEXT:    rotldi 3, 3, 62
25145; PWR6-NEXT:    and 3, 3, 6
25146; PWR6-NEXT:    lis 7, 3855
25147; PWR6-NEXT:    and 5, 4, 6
25148; PWR6-NEXT:    rotldi 4, 4, 62
25149; PWR6-NEXT:    add 3, 8, 3
25150; PWR6-NEXT:    lis 9, 257
25151; PWR6-NEXT:    ori 7, 7, 3855
25152; PWR6-NEXT:    and 4, 4, 6
25153; PWR6-NEXT:    rldicl 6, 3, 60, 4
25154; PWR6-NEXT:    ori 9, 9, 257
25155; PWR6-NEXT:    rldimi 7, 7, 32, 0
25156; PWR6-NEXT:    add 4, 5, 4
25157; PWR6-NEXT:    add 3, 3, 6
25158; PWR6-NEXT:    rldimi 9, 9, 32, 0
25159; PWR6-NEXT:    rldicl 5, 4, 60, 4
25160; PWR6-NEXT:    and 3, 3, 7
25161; PWR6-NEXT:    add 4, 4, 5
25162; PWR6-NEXT:    mulld 3, 3, 9
25163; PWR6-NEXT:    and 4, 4, 7
25164; PWR6-NEXT:    rldicl 3, 3, 8, 56
25165; PWR6-NEXT:    li 5, 51
25166; PWR6-NEXT:    mulld 4, 4, 9
25167; PWR6-NEXT:    subc 6, 3, 5
25168; PWR6-NEXT:    rldicl 4, 4, 8, 56
25169; PWR6-NEXT:    subfe 3, 3, 3
25170; PWR6-NEXT:    subc 5, 4, 5
25171; PWR6-NEXT:    subfe 4, 4, 4
25172; PWR6-NEXT:    blr
25173;
25174; PWR7-LABEL: ult_51_v2i64:
25175; PWR7:       # %bb.0:
25176; PWR7-NEXT:    addi 3, 1, -32
25177; PWR7-NEXT:    li 5, -1
25178; PWR7-NEXT:    stxvd2x 34, 0, 3
25179; PWR7-NEXT:    ld 4, -24(1)
25180; PWR7-NEXT:    ld 3, -32(1)
25181; PWR7-NEXT:    popcntd 4, 4
25182; PWR7-NEXT:    popcntd 3, 3
25183; PWR7-NEXT:    cmpldi 4, 51
25184; PWR7-NEXT:    li 4, 0
25185; PWR7-NEXT:    isellt 6, 5, 4
25186; PWR7-NEXT:    cmpldi 3, 51
25187; PWR7-NEXT:    isellt 3, 5, 4
25188; PWR7-NEXT:    std 6, -8(1)
25189; PWR7-NEXT:    std 3, -16(1)
25190; PWR7-NEXT:    addi 3, 1, -16
25191; PWR7-NEXT:    lxvd2x 34, 0, 3
25192; PWR7-NEXT:    blr
25193;
25194; PWR8-LABEL: ult_51_v2i64:
25195; PWR8:       # %bb.0:
25196; PWR8-NEXT:    addis 3, 2, .LCPI199_0@toc@ha
25197; PWR8-NEXT:    vpopcntd 2, 2
25198; PWR8-NEXT:    addi 3, 3, .LCPI199_0@toc@l
25199; PWR8-NEXT:    lxvd2x 35, 0, 3
25200; PWR8-NEXT:    vcmpgtud 2, 3, 2
25201; PWR8-NEXT:    blr
25202;
25203; PWR9-LABEL: ult_51_v2i64:
25204; PWR9:       # %bb.0:
25205; PWR9-NEXT:    addis 3, 2, .LCPI199_0@toc@ha
25206; PWR9-NEXT:    vpopcntd 2, 2
25207; PWR9-NEXT:    addi 3, 3, .LCPI199_0@toc@l
25208; PWR9-NEXT:    lxv 35, 0(3)
25209; PWR9-NEXT:    vcmpgtud 2, 3, 2
25210; PWR9-NEXT:    blr
25211  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25212  %3 = icmp ult <2 x i64> %2, <i64 51, i64 51>
25213  %4 = sext <2 x i1> %3 to <2 x i64>
25214  ret <2 x i64> %4
25215}
25216
25217define <2 x i64> @ugt_51_v2i64(<2 x i64> %0) {
25218; PWR5-LABEL: ugt_51_v2i64:
25219; PWR5:       # %bb.0:
25220; PWR5-NEXT:    lis 5, 21845
25221; PWR5-NEXT:    lis 6, 13107
25222; PWR5-NEXT:    ori 5, 5, 21845
25223; PWR5-NEXT:    rotldi 8, 4, 63
25224; PWR5-NEXT:    rotldi 9, 3, 63
25225; PWR5-NEXT:    rldimi 5, 5, 32, 0
25226; PWR5-NEXT:    and 8, 8, 5
25227; PWR5-NEXT:    and 5, 9, 5
25228; PWR5-NEXT:    ori 6, 6, 13107
25229; PWR5-NEXT:    sub 3, 3, 5
25230; PWR5-NEXT:    rldimi 6, 6, 32, 0
25231; PWR5-NEXT:    sub 4, 4, 8
25232; PWR5-NEXT:    and 8, 3, 6
25233; PWR5-NEXT:    rotldi 3, 3, 62
25234; PWR5-NEXT:    and 3, 3, 6
25235; PWR5-NEXT:    lis 7, 3855
25236; PWR5-NEXT:    and 5, 4, 6
25237; PWR5-NEXT:    rotldi 4, 4, 62
25238; PWR5-NEXT:    add 3, 8, 3
25239; PWR5-NEXT:    lis 9, 257
25240; PWR5-NEXT:    ori 7, 7, 3855
25241; PWR5-NEXT:    and 4, 4, 6
25242; PWR5-NEXT:    rldicl 6, 3, 60, 4
25243; PWR5-NEXT:    ori 9, 9, 257
25244; PWR5-NEXT:    rldimi 7, 7, 32, 0
25245; PWR5-NEXT:    add 4, 5, 4
25246; PWR5-NEXT:    add 3, 3, 6
25247; PWR5-NEXT:    rldimi 9, 9, 32, 0
25248; PWR5-NEXT:    rldicl 5, 4, 60, 4
25249; PWR5-NEXT:    and 3, 3, 7
25250; PWR5-NEXT:    add 4, 4, 5
25251; PWR5-NEXT:    mulld 3, 3, 9
25252; PWR5-NEXT:    and 4, 4, 7
25253; PWR5-NEXT:    rldicl 3, 3, 8, 56
25254; PWR5-NEXT:    mulld 4, 4, 9
25255; PWR5-NEXT:    li 5, 51
25256; PWR5-NEXT:    subfic 3, 3, 51
25257; PWR5-NEXT:    rldicl 4, 4, 8, 56
25258; PWR5-NEXT:    subfe 3, 5, 5
25259; PWR5-NEXT:    subfic 4, 4, 51
25260; PWR5-NEXT:    subfe 4, 5, 5
25261; PWR5-NEXT:    blr
25262;
25263; PWR6-LABEL: ugt_51_v2i64:
25264; PWR6:       # %bb.0:
25265; PWR6-NEXT:    lis 5, 21845
25266; PWR6-NEXT:    lis 6, 13107
25267; PWR6-NEXT:    ori 5, 5, 21845
25268; PWR6-NEXT:    rotldi 8, 4, 63
25269; PWR6-NEXT:    rotldi 9, 3, 63
25270; PWR6-NEXT:    rldimi 5, 5, 32, 0
25271; PWR6-NEXT:    and 8, 8, 5
25272; PWR6-NEXT:    and 5, 9, 5
25273; PWR6-NEXT:    ori 6, 6, 13107
25274; PWR6-NEXT:    sub 3, 3, 5
25275; PWR6-NEXT:    rldimi 6, 6, 32, 0
25276; PWR6-NEXT:    sub 4, 4, 8
25277; PWR6-NEXT:    and 8, 3, 6
25278; PWR6-NEXT:    rotldi 3, 3, 62
25279; PWR6-NEXT:    and 3, 3, 6
25280; PWR6-NEXT:    lis 7, 3855
25281; PWR6-NEXT:    and 5, 4, 6
25282; PWR6-NEXT:    rotldi 4, 4, 62
25283; PWR6-NEXT:    add 3, 8, 3
25284; PWR6-NEXT:    lis 9, 257
25285; PWR6-NEXT:    ori 7, 7, 3855
25286; PWR6-NEXT:    and 4, 4, 6
25287; PWR6-NEXT:    rldicl 6, 3, 60, 4
25288; PWR6-NEXT:    ori 9, 9, 257
25289; PWR6-NEXT:    rldimi 7, 7, 32, 0
25290; PWR6-NEXT:    add 4, 5, 4
25291; PWR6-NEXT:    add 3, 3, 6
25292; PWR6-NEXT:    rldimi 9, 9, 32, 0
25293; PWR6-NEXT:    rldicl 5, 4, 60, 4
25294; PWR6-NEXT:    and 3, 3, 7
25295; PWR6-NEXT:    add 4, 4, 5
25296; PWR6-NEXT:    mulld 3, 3, 9
25297; PWR6-NEXT:    and 4, 4, 7
25298; PWR6-NEXT:    rldicl 3, 3, 8, 56
25299; PWR6-NEXT:    mulld 4, 4, 9
25300; PWR6-NEXT:    li 5, 51
25301; PWR6-NEXT:    subfic 3, 3, 51
25302; PWR6-NEXT:    rldicl 4, 4, 8, 56
25303; PWR6-NEXT:    subfe 3, 5, 5
25304; PWR6-NEXT:    subfic 4, 4, 51
25305; PWR6-NEXT:    subfe 4, 5, 5
25306; PWR6-NEXT:    blr
25307;
25308; PWR7-LABEL: ugt_51_v2i64:
25309; PWR7:       # %bb.0:
25310; PWR7-NEXT:    addi 3, 1, -32
25311; PWR7-NEXT:    li 5, -1
25312; PWR7-NEXT:    stxvd2x 34, 0, 3
25313; PWR7-NEXT:    ld 4, -24(1)
25314; PWR7-NEXT:    ld 3, -32(1)
25315; PWR7-NEXT:    popcntd 4, 4
25316; PWR7-NEXT:    popcntd 3, 3
25317; PWR7-NEXT:    cmpldi 4, 51
25318; PWR7-NEXT:    li 4, 0
25319; PWR7-NEXT:    iselgt 6, 5, 4
25320; PWR7-NEXT:    cmpldi 3, 51
25321; PWR7-NEXT:    iselgt 3, 5, 4
25322; PWR7-NEXT:    std 6, -8(1)
25323; PWR7-NEXT:    std 3, -16(1)
25324; PWR7-NEXT:    addi 3, 1, -16
25325; PWR7-NEXT:    lxvd2x 34, 0, 3
25326; PWR7-NEXT:    blr
25327;
25328; PWR8-LABEL: ugt_51_v2i64:
25329; PWR8:       # %bb.0:
25330; PWR8-NEXT:    addis 3, 2, .LCPI200_0@toc@ha
25331; PWR8-NEXT:    vpopcntd 2, 2
25332; PWR8-NEXT:    addi 3, 3, .LCPI200_0@toc@l
25333; PWR8-NEXT:    lxvd2x 35, 0, 3
25334; PWR8-NEXT:    vcmpgtud 2, 2, 3
25335; PWR8-NEXT:    blr
25336;
25337; PWR9-LABEL: ugt_51_v2i64:
25338; PWR9:       # %bb.0:
25339; PWR9-NEXT:    addis 3, 2, .LCPI200_0@toc@ha
25340; PWR9-NEXT:    vpopcntd 2, 2
25341; PWR9-NEXT:    addi 3, 3, .LCPI200_0@toc@l
25342; PWR9-NEXT:    lxv 35, 0(3)
25343; PWR9-NEXT:    vcmpgtud 2, 2, 3
25344; PWR9-NEXT:    blr
25345  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25346  %3 = icmp ugt <2 x i64> %2, <i64 51, i64 51>
25347  %4 = sext <2 x i1> %3 to <2 x i64>
25348  ret <2 x i64> %4
25349}
25350
25351define <2 x i64> @ult_52_v2i64(<2 x i64> %0) {
25352; PWR5-LABEL: ult_52_v2i64:
25353; PWR5:       # %bb.0:
25354; PWR5-NEXT:    lis 5, 21845
25355; PWR5-NEXT:    lis 6, 13107
25356; PWR5-NEXT:    ori 5, 5, 21845
25357; PWR5-NEXT:    rotldi 8, 4, 63
25358; PWR5-NEXT:    rotldi 9, 3, 63
25359; PWR5-NEXT:    rldimi 5, 5, 32, 0
25360; PWR5-NEXT:    and 8, 8, 5
25361; PWR5-NEXT:    and 5, 9, 5
25362; PWR5-NEXT:    ori 6, 6, 13107
25363; PWR5-NEXT:    sub 3, 3, 5
25364; PWR5-NEXT:    rldimi 6, 6, 32, 0
25365; PWR5-NEXT:    sub 4, 4, 8
25366; PWR5-NEXT:    and 8, 3, 6
25367; PWR5-NEXT:    rotldi 3, 3, 62
25368; PWR5-NEXT:    and 3, 3, 6
25369; PWR5-NEXT:    lis 7, 3855
25370; PWR5-NEXT:    and 5, 4, 6
25371; PWR5-NEXT:    rotldi 4, 4, 62
25372; PWR5-NEXT:    add 3, 8, 3
25373; PWR5-NEXT:    lis 9, 257
25374; PWR5-NEXT:    ori 7, 7, 3855
25375; PWR5-NEXT:    and 4, 4, 6
25376; PWR5-NEXT:    rldicl 6, 3, 60, 4
25377; PWR5-NEXT:    ori 9, 9, 257
25378; PWR5-NEXT:    rldimi 7, 7, 32, 0
25379; PWR5-NEXT:    add 4, 5, 4
25380; PWR5-NEXT:    add 3, 3, 6
25381; PWR5-NEXT:    rldimi 9, 9, 32, 0
25382; PWR5-NEXT:    rldicl 5, 4, 60, 4
25383; PWR5-NEXT:    and 3, 3, 7
25384; PWR5-NEXT:    add 4, 4, 5
25385; PWR5-NEXT:    mulld 3, 3, 9
25386; PWR5-NEXT:    and 4, 4, 7
25387; PWR5-NEXT:    rldicl 3, 3, 8, 56
25388; PWR5-NEXT:    li 5, 52
25389; PWR5-NEXT:    mulld 4, 4, 9
25390; PWR5-NEXT:    subc 6, 3, 5
25391; PWR5-NEXT:    rldicl 4, 4, 8, 56
25392; PWR5-NEXT:    subfe 3, 3, 3
25393; PWR5-NEXT:    subc 5, 4, 5
25394; PWR5-NEXT:    subfe 4, 4, 4
25395; PWR5-NEXT:    blr
25396;
25397; PWR6-LABEL: ult_52_v2i64:
25398; PWR6:       # %bb.0:
25399; PWR6-NEXT:    lis 5, 21845
25400; PWR6-NEXT:    lis 6, 13107
25401; PWR6-NEXT:    ori 5, 5, 21845
25402; PWR6-NEXT:    rotldi 8, 4, 63
25403; PWR6-NEXT:    rotldi 9, 3, 63
25404; PWR6-NEXT:    rldimi 5, 5, 32, 0
25405; PWR6-NEXT:    and 8, 8, 5
25406; PWR6-NEXT:    and 5, 9, 5
25407; PWR6-NEXT:    ori 6, 6, 13107
25408; PWR6-NEXT:    sub 3, 3, 5
25409; PWR6-NEXT:    rldimi 6, 6, 32, 0
25410; PWR6-NEXT:    sub 4, 4, 8
25411; PWR6-NEXT:    and 8, 3, 6
25412; PWR6-NEXT:    rotldi 3, 3, 62
25413; PWR6-NEXT:    and 3, 3, 6
25414; PWR6-NEXT:    lis 7, 3855
25415; PWR6-NEXT:    and 5, 4, 6
25416; PWR6-NEXT:    rotldi 4, 4, 62
25417; PWR6-NEXT:    add 3, 8, 3
25418; PWR6-NEXT:    lis 9, 257
25419; PWR6-NEXT:    ori 7, 7, 3855
25420; PWR6-NEXT:    and 4, 4, 6
25421; PWR6-NEXT:    rldicl 6, 3, 60, 4
25422; PWR6-NEXT:    ori 9, 9, 257
25423; PWR6-NEXT:    rldimi 7, 7, 32, 0
25424; PWR6-NEXT:    add 4, 5, 4
25425; PWR6-NEXT:    add 3, 3, 6
25426; PWR6-NEXT:    rldimi 9, 9, 32, 0
25427; PWR6-NEXT:    rldicl 5, 4, 60, 4
25428; PWR6-NEXT:    and 3, 3, 7
25429; PWR6-NEXT:    add 4, 4, 5
25430; PWR6-NEXT:    mulld 3, 3, 9
25431; PWR6-NEXT:    and 4, 4, 7
25432; PWR6-NEXT:    rldicl 3, 3, 8, 56
25433; PWR6-NEXT:    li 5, 52
25434; PWR6-NEXT:    mulld 4, 4, 9
25435; PWR6-NEXT:    subc 6, 3, 5
25436; PWR6-NEXT:    rldicl 4, 4, 8, 56
25437; PWR6-NEXT:    subfe 3, 3, 3
25438; PWR6-NEXT:    subc 5, 4, 5
25439; PWR6-NEXT:    subfe 4, 4, 4
25440; PWR6-NEXT:    blr
25441;
25442; PWR7-LABEL: ult_52_v2i64:
25443; PWR7:       # %bb.0:
25444; PWR7-NEXT:    addi 3, 1, -32
25445; PWR7-NEXT:    li 5, -1
25446; PWR7-NEXT:    stxvd2x 34, 0, 3
25447; PWR7-NEXT:    ld 4, -24(1)
25448; PWR7-NEXT:    ld 3, -32(1)
25449; PWR7-NEXT:    popcntd 4, 4
25450; PWR7-NEXT:    popcntd 3, 3
25451; PWR7-NEXT:    cmpldi 4, 52
25452; PWR7-NEXT:    li 4, 0
25453; PWR7-NEXT:    isellt 6, 5, 4
25454; PWR7-NEXT:    cmpldi 3, 52
25455; PWR7-NEXT:    isellt 3, 5, 4
25456; PWR7-NEXT:    std 6, -8(1)
25457; PWR7-NEXT:    std 3, -16(1)
25458; PWR7-NEXT:    addi 3, 1, -16
25459; PWR7-NEXT:    lxvd2x 34, 0, 3
25460; PWR7-NEXT:    blr
25461;
25462; PWR8-LABEL: ult_52_v2i64:
25463; PWR8:       # %bb.0:
25464; PWR8-NEXT:    addis 3, 2, .LCPI201_0@toc@ha
25465; PWR8-NEXT:    vpopcntd 2, 2
25466; PWR8-NEXT:    addi 3, 3, .LCPI201_0@toc@l
25467; PWR8-NEXT:    lxvd2x 35, 0, 3
25468; PWR8-NEXT:    vcmpgtud 2, 3, 2
25469; PWR8-NEXT:    blr
25470;
25471; PWR9-LABEL: ult_52_v2i64:
25472; PWR9:       # %bb.0:
25473; PWR9-NEXT:    addis 3, 2, .LCPI201_0@toc@ha
25474; PWR9-NEXT:    vpopcntd 2, 2
25475; PWR9-NEXT:    addi 3, 3, .LCPI201_0@toc@l
25476; PWR9-NEXT:    lxv 35, 0(3)
25477; PWR9-NEXT:    vcmpgtud 2, 3, 2
25478; PWR9-NEXT:    blr
25479  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25480  %3 = icmp ult <2 x i64> %2, <i64 52, i64 52>
25481  %4 = sext <2 x i1> %3 to <2 x i64>
25482  ret <2 x i64> %4
25483}
25484
25485define <2 x i64> @ugt_52_v2i64(<2 x i64> %0) {
25486; PWR5-LABEL: ugt_52_v2i64:
25487; PWR5:       # %bb.0:
25488; PWR5-NEXT:    lis 5, 21845
25489; PWR5-NEXT:    lis 6, 13107
25490; PWR5-NEXT:    ori 5, 5, 21845
25491; PWR5-NEXT:    rotldi 8, 4, 63
25492; PWR5-NEXT:    rotldi 9, 3, 63
25493; PWR5-NEXT:    rldimi 5, 5, 32, 0
25494; PWR5-NEXT:    and 8, 8, 5
25495; PWR5-NEXT:    and 5, 9, 5
25496; PWR5-NEXT:    ori 6, 6, 13107
25497; PWR5-NEXT:    sub 3, 3, 5
25498; PWR5-NEXT:    rldimi 6, 6, 32, 0
25499; PWR5-NEXT:    sub 4, 4, 8
25500; PWR5-NEXT:    and 8, 3, 6
25501; PWR5-NEXT:    rotldi 3, 3, 62
25502; PWR5-NEXT:    and 3, 3, 6
25503; PWR5-NEXT:    lis 7, 3855
25504; PWR5-NEXT:    and 5, 4, 6
25505; PWR5-NEXT:    rotldi 4, 4, 62
25506; PWR5-NEXT:    add 3, 8, 3
25507; PWR5-NEXT:    lis 9, 257
25508; PWR5-NEXT:    ori 7, 7, 3855
25509; PWR5-NEXT:    and 4, 4, 6
25510; PWR5-NEXT:    rldicl 6, 3, 60, 4
25511; PWR5-NEXT:    ori 9, 9, 257
25512; PWR5-NEXT:    rldimi 7, 7, 32, 0
25513; PWR5-NEXT:    add 4, 5, 4
25514; PWR5-NEXT:    add 3, 3, 6
25515; PWR5-NEXT:    rldimi 9, 9, 32, 0
25516; PWR5-NEXT:    rldicl 5, 4, 60, 4
25517; PWR5-NEXT:    and 3, 3, 7
25518; PWR5-NEXT:    add 4, 4, 5
25519; PWR5-NEXT:    mulld 3, 3, 9
25520; PWR5-NEXT:    and 4, 4, 7
25521; PWR5-NEXT:    rldicl 3, 3, 8, 56
25522; PWR5-NEXT:    mulld 4, 4, 9
25523; PWR5-NEXT:    li 5, 52
25524; PWR5-NEXT:    subfic 3, 3, 52
25525; PWR5-NEXT:    rldicl 4, 4, 8, 56
25526; PWR5-NEXT:    subfe 3, 5, 5
25527; PWR5-NEXT:    subfic 4, 4, 52
25528; PWR5-NEXT:    subfe 4, 5, 5
25529; PWR5-NEXT:    blr
25530;
25531; PWR6-LABEL: ugt_52_v2i64:
25532; PWR6:       # %bb.0:
25533; PWR6-NEXT:    lis 5, 21845
25534; PWR6-NEXT:    lis 6, 13107
25535; PWR6-NEXT:    ori 5, 5, 21845
25536; PWR6-NEXT:    rotldi 8, 4, 63
25537; PWR6-NEXT:    rotldi 9, 3, 63
25538; PWR6-NEXT:    rldimi 5, 5, 32, 0
25539; PWR6-NEXT:    and 8, 8, 5
25540; PWR6-NEXT:    and 5, 9, 5
25541; PWR6-NEXT:    ori 6, 6, 13107
25542; PWR6-NEXT:    sub 3, 3, 5
25543; PWR6-NEXT:    rldimi 6, 6, 32, 0
25544; PWR6-NEXT:    sub 4, 4, 8
25545; PWR6-NEXT:    and 8, 3, 6
25546; PWR6-NEXT:    rotldi 3, 3, 62
25547; PWR6-NEXT:    and 3, 3, 6
25548; PWR6-NEXT:    lis 7, 3855
25549; PWR6-NEXT:    and 5, 4, 6
25550; PWR6-NEXT:    rotldi 4, 4, 62
25551; PWR6-NEXT:    add 3, 8, 3
25552; PWR6-NEXT:    lis 9, 257
25553; PWR6-NEXT:    ori 7, 7, 3855
25554; PWR6-NEXT:    and 4, 4, 6
25555; PWR6-NEXT:    rldicl 6, 3, 60, 4
25556; PWR6-NEXT:    ori 9, 9, 257
25557; PWR6-NEXT:    rldimi 7, 7, 32, 0
25558; PWR6-NEXT:    add 4, 5, 4
25559; PWR6-NEXT:    add 3, 3, 6
25560; PWR6-NEXT:    rldimi 9, 9, 32, 0
25561; PWR6-NEXT:    rldicl 5, 4, 60, 4
25562; PWR6-NEXT:    and 3, 3, 7
25563; PWR6-NEXT:    add 4, 4, 5
25564; PWR6-NEXT:    mulld 3, 3, 9
25565; PWR6-NEXT:    and 4, 4, 7
25566; PWR6-NEXT:    rldicl 3, 3, 8, 56
25567; PWR6-NEXT:    mulld 4, 4, 9
25568; PWR6-NEXT:    li 5, 52
25569; PWR6-NEXT:    subfic 3, 3, 52
25570; PWR6-NEXT:    rldicl 4, 4, 8, 56
25571; PWR6-NEXT:    subfe 3, 5, 5
25572; PWR6-NEXT:    subfic 4, 4, 52
25573; PWR6-NEXT:    subfe 4, 5, 5
25574; PWR6-NEXT:    blr
25575;
25576; PWR7-LABEL: ugt_52_v2i64:
25577; PWR7:       # %bb.0:
25578; PWR7-NEXT:    addi 3, 1, -32
25579; PWR7-NEXT:    li 5, -1
25580; PWR7-NEXT:    stxvd2x 34, 0, 3
25581; PWR7-NEXT:    ld 4, -24(1)
25582; PWR7-NEXT:    ld 3, -32(1)
25583; PWR7-NEXT:    popcntd 4, 4
25584; PWR7-NEXT:    popcntd 3, 3
25585; PWR7-NEXT:    cmpldi 4, 52
25586; PWR7-NEXT:    li 4, 0
25587; PWR7-NEXT:    iselgt 6, 5, 4
25588; PWR7-NEXT:    cmpldi 3, 52
25589; PWR7-NEXT:    iselgt 3, 5, 4
25590; PWR7-NEXT:    std 6, -8(1)
25591; PWR7-NEXT:    std 3, -16(1)
25592; PWR7-NEXT:    addi 3, 1, -16
25593; PWR7-NEXT:    lxvd2x 34, 0, 3
25594; PWR7-NEXT:    blr
25595;
25596; PWR8-LABEL: ugt_52_v2i64:
25597; PWR8:       # %bb.0:
25598; PWR8-NEXT:    addis 3, 2, .LCPI202_0@toc@ha
25599; PWR8-NEXT:    vpopcntd 2, 2
25600; PWR8-NEXT:    addi 3, 3, .LCPI202_0@toc@l
25601; PWR8-NEXT:    lxvd2x 35, 0, 3
25602; PWR8-NEXT:    vcmpgtud 2, 2, 3
25603; PWR8-NEXT:    blr
25604;
25605; PWR9-LABEL: ugt_52_v2i64:
25606; PWR9:       # %bb.0:
25607; PWR9-NEXT:    addis 3, 2, .LCPI202_0@toc@ha
25608; PWR9-NEXT:    vpopcntd 2, 2
25609; PWR9-NEXT:    addi 3, 3, .LCPI202_0@toc@l
25610; PWR9-NEXT:    lxv 35, 0(3)
25611; PWR9-NEXT:    vcmpgtud 2, 2, 3
25612; PWR9-NEXT:    blr
25613  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25614  %3 = icmp ugt <2 x i64> %2, <i64 52, i64 52>
25615  %4 = sext <2 x i1> %3 to <2 x i64>
25616  ret <2 x i64> %4
25617}
25618
25619define <2 x i64> @ult_53_v2i64(<2 x i64> %0) {
25620; PWR5-LABEL: ult_53_v2i64:
25621; PWR5:       # %bb.0:
25622; PWR5-NEXT:    lis 5, 21845
25623; PWR5-NEXT:    lis 6, 13107
25624; PWR5-NEXT:    ori 5, 5, 21845
25625; PWR5-NEXT:    rotldi 8, 4, 63
25626; PWR5-NEXT:    rotldi 9, 3, 63
25627; PWR5-NEXT:    rldimi 5, 5, 32, 0
25628; PWR5-NEXT:    and 8, 8, 5
25629; PWR5-NEXT:    and 5, 9, 5
25630; PWR5-NEXT:    ori 6, 6, 13107
25631; PWR5-NEXT:    sub 3, 3, 5
25632; PWR5-NEXT:    rldimi 6, 6, 32, 0
25633; PWR5-NEXT:    sub 4, 4, 8
25634; PWR5-NEXT:    and 8, 3, 6
25635; PWR5-NEXT:    rotldi 3, 3, 62
25636; PWR5-NEXT:    and 3, 3, 6
25637; PWR5-NEXT:    lis 7, 3855
25638; PWR5-NEXT:    and 5, 4, 6
25639; PWR5-NEXT:    rotldi 4, 4, 62
25640; PWR5-NEXT:    add 3, 8, 3
25641; PWR5-NEXT:    lis 9, 257
25642; PWR5-NEXT:    ori 7, 7, 3855
25643; PWR5-NEXT:    and 4, 4, 6
25644; PWR5-NEXT:    rldicl 6, 3, 60, 4
25645; PWR5-NEXT:    ori 9, 9, 257
25646; PWR5-NEXT:    rldimi 7, 7, 32, 0
25647; PWR5-NEXT:    add 4, 5, 4
25648; PWR5-NEXT:    add 3, 3, 6
25649; PWR5-NEXT:    rldimi 9, 9, 32, 0
25650; PWR5-NEXT:    rldicl 5, 4, 60, 4
25651; PWR5-NEXT:    and 3, 3, 7
25652; PWR5-NEXT:    add 4, 4, 5
25653; PWR5-NEXT:    mulld 3, 3, 9
25654; PWR5-NEXT:    and 4, 4, 7
25655; PWR5-NEXT:    rldicl 3, 3, 8, 56
25656; PWR5-NEXT:    li 5, 53
25657; PWR5-NEXT:    mulld 4, 4, 9
25658; PWR5-NEXT:    subc 6, 3, 5
25659; PWR5-NEXT:    rldicl 4, 4, 8, 56
25660; PWR5-NEXT:    subfe 3, 3, 3
25661; PWR5-NEXT:    subc 5, 4, 5
25662; PWR5-NEXT:    subfe 4, 4, 4
25663; PWR5-NEXT:    blr
25664;
25665; PWR6-LABEL: ult_53_v2i64:
25666; PWR6:       # %bb.0:
25667; PWR6-NEXT:    lis 5, 21845
25668; PWR6-NEXT:    lis 6, 13107
25669; PWR6-NEXT:    ori 5, 5, 21845
25670; PWR6-NEXT:    rotldi 8, 4, 63
25671; PWR6-NEXT:    rotldi 9, 3, 63
25672; PWR6-NEXT:    rldimi 5, 5, 32, 0
25673; PWR6-NEXT:    and 8, 8, 5
25674; PWR6-NEXT:    and 5, 9, 5
25675; PWR6-NEXT:    ori 6, 6, 13107
25676; PWR6-NEXT:    sub 3, 3, 5
25677; PWR6-NEXT:    rldimi 6, 6, 32, 0
25678; PWR6-NEXT:    sub 4, 4, 8
25679; PWR6-NEXT:    and 8, 3, 6
25680; PWR6-NEXT:    rotldi 3, 3, 62
25681; PWR6-NEXT:    and 3, 3, 6
25682; PWR6-NEXT:    lis 7, 3855
25683; PWR6-NEXT:    and 5, 4, 6
25684; PWR6-NEXT:    rotldi 4, 4, 62
25685; PWR6-NEXT:    add 3, 8, 3
25686; PWR6-NEXT:    lis 9, 257
25687; PWR6-NEXT:    ori 7, 7, 3855
25688; PWR6-NEXT:    and 4, 4, 6
25689; PWR6-NEXT:    rldicl 6, 3, 60, 4
25690; PWR6-NEXT:    ori 9, 9, 257
25691; PWR6-NEXT:    rldimi 7, 7, 32, 0
25692; PWR6-NEXT:    add 4, 5, 4
25693; PWR6-NEXT:    add 3, 3, 6
25694; PWR6-NEXT:    rldimi 9, 9, 32, 0
25695; PWR6-NEXT:    rldicl 5, 4, 60, 4
25696; PWR6-NEXT:    and 3, 3, 7
25697; PWR6-NEXT:    add 4, 4, 5
25698; PWR6-NEXT:    mulld 3, 3, 9
25699; PWR6-NEXT:    and 4, 4, 7
25700; PWR6-NEXT:    rldicl 3, 3, 8, 56
25701; PWR6-NEXT:    li 5, 53
25702; PWR6-NEXT:    mulld 4, 4, 9
25703; PWR6-NEXT:    subc 6, 3, 5
25704; PWR6-NEXT:    rldicl 4, 4, 8, 56
25705; PWR6-NEXT:    subfe 3, 3, 3
25706; PWR6-NEXT:    subc 5, 4, 5
25707; PWR6-NEXT:    subfe 4, 4, 4
25708; PWR6-NEXT:    blr
25709;
25710; PWR7-LABEL: ult_53_v2i64:
25711; PWR7:       # %bb.0:
25712; PWR7-NEXT:    addi 3, 1, -32
25713; PWR7-NEXT:    li 5, -1
25714; PWR7-NEXT:    stxvd2x 34, 0, 3
25715; PWR7-NEXT:    ld 4, -24(1)
25716; PWR7-NEXT:    ld 3, -32(1)
25717; PWR7-NEXT:    popcntd 4, 4
25718; PWR7-NEXT:    popcntd 3, 3
25719; PWR7-NEXT:    cmpldi 4, 53
25720; PWR7-NEXT:    li 4, 0
25721; PWR7-NEXT:    isellt 6, 5, 4
25722; PWR7-NEXT:    cmpldi 3, 53
25723; PWR7-NEXT:    isellt 3, 5, 4
25724; PWR7-NEXT:    std 6, -8(1)
25725; PWR7-NEXT:    std 3, -16(1)
25726; PWR7-NEXT:    addi 3, 1, -16
25727; PWR7-NEXT:    lxvd2x 34, 0, 3
25728; PWR7-NEXT:    blr
25729;
25730; PWR8-LABEL: ult_53_v2i64:
25731; PWR8:       # %bb.0:
25732; PWR8-NEXT:    addis 3, 2, .LCPI203_0@toc@ha
25733; PWR8-NEXT:    vpopcntd 2, 2
25734; PWR8-NEXT:    addi 3, 3, .LCPI203_0@toc@l
25735; PWR8-NEXT:    lxvd2x 35, 0, 3
25736; PWR8-NEXT:    vcmpgtud 2, 3, 2
25737; PWR8-NEXT:    blr
25738;
25739; PWR9-LABEL: ult_53_v2i64:
25740; PWR9:       # %bb.0:
25741; PWR9-NEXT:    addis 3, 2, .LCPI203_0@toc@ha
25742; PWR9-NEXT:    vpopcntd 2, 2
25743; PWR9-NEXT:    addi 3, 3, .LCPI203_0@toc@l
25744; PWR9-NEXT:    lxv 35, 0(3)
25745; PWR9-NEXT:    vcmpgtud 2, 3, 2
25746; PWR9-NEXT:    blr
25747  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25748  %3 = icmp ult <2 x i64> %2, <i64 53, i64 53>
25749  %4 = sext <2 x i1> %3 to <2 x i64>
25750  ret <2 x i64> %4
25751}
25752
25753define <2 x i64> @ugt_53_v2i64(<2 x i64> %0) {
25754; PWR5-LABEL: ugt_53_v2i64:
25755; PWR5:       # %bb.0:
25756; PWR5-NEXT:    lis 5, 21845
25757; PWR5-NEXT:    lis 6, 13107
25758; PWR5-NEXT:    ori 5, 5, 21845
25759; PWR5-NEXT:    rotldi 8, 4, 63
25760; PWR5-NEXT:    rotldi 9, 3, 63
25761; PWR5-NEXT:    rldimi 5, 5, 32, 0
25762; PWR5-NEXT:    and 8, 8, 5
25763; PWR5-NEXT:    and 5, 9, 5
25764; PWR5-NEXT:    ori 6, 6, 13107
25765; PWR5-NEXT:    sub 3, 3, 5
25766; PWR5-NEXT:    rldimi 6, 6, 32, 0
25767; PWR5-NEXT:    sub 4, 4, 8
25768; PWR5-NEXT:    and 8, 3, 6
25769; PWR5-NEXT:    rotldi 3, 3, 62
25770; PWR5-NEXT:    and 3, 3, 6
25771; PWR5-NEXT:    lis 7, 3855
25772; PWR5-NEXT:    and 5, 4, 6
25773; PWR5-NEXT:    rotldi 4, 4, 62
25774; PWR5-NEXT:    add 3, 8, 3
25775; PWR5-NEXT:    lis 9, 257
25776; PWR5-NEXT:    ori 7, 7, 3855
25777; PWR5-NEXT:    and 4, 4, 6
25778; PWR5-NEXT:    rldicl 6, 3, 60, 4
25779; PWR5-NEXT:    ori 9, 9, 257
25780; PWR5-NEXT:    rldimi 7, 7, 32, 0
25781; PWR5-NEXT:    add 4, 5, 4
25782; PWR5-NEXT:    add 3, 3, 6
25783; PWR5-NEXT:    rldimi 9, 9, 32, 0
25784; PWR5-NEXT:    rldicl 5, 4, 60, 4
25785; PWR5-NEXT:    and 3, 3, 7
25786; PWR5-NEXT:    add 4, 4, 5
25787; PWR5-NEXT:    mulld 3, 3, 9
25788; PWR5-NEXT:    and 4, 4, 7
25789; PWR5-NEXT:    rldicl 3, 3, 8, 56
25790; PWR5-NEXT:    mulld 4, 4, 9
25791; PWR5-NEXT:    li 5, 53
25792; PWR5-NEXT:    subfic 3, 3, 53
25793; PWR5-NEXT:    rldicl 4, 4, 8, 56
25794; PWR5-NEXT:    subfe 3, 5, 5
25795; PWR5-NEXT:    subfic 4, 4, 53
25796; PWR5-NEXT:    subfe 4, 5, 5
25797; PWR5-NEXT:    blr
25798;
25799; PWR6-LABEL: ugt_53_v2i64:
25800; PWR6:       # %bb.0:
25801; PWR6-NEXT:    lis 5, 21845
25802; PWR6-NEXT:    lis 6, 13107
25803; PWR6-NEXT:    ori 5, 5, 21845
25804; PWR6-NEXT:    rotldi 8, 4, 63
25805; PWR6-NEXT:    rotldi 9, 3, 63
25806; PWR6-NEXT:    rldimi 5, 5, 32, 0
25807; PWR6-NEXT:    and 8, 8, 5
25808; PWR6-NEXT:    and 5, 9, 5
25809; PWR6-NEXT:    ori 6, 6, 13107
25810; PWR6-NEXT:    sub 3, 3, 5
25811; PWR6-NEXT:    rldimi 6, 6, 32, 0
25812; PWR6-NEXT:    sub 4, 4, 8
25813; PWR6-NEXT:    and 8, 3, 6
25814; PWR6-NEXT:    rotldi 3, 3, 62
25815; PWR6-NEXT:    and 3, 3, 6
25816; PWR6-NEXT:    lis 7, 3855
25817; PWR6-NEXT:    and 5, 4, 6
25818; PWR6-NEXT:    rotldi 4, 4, 62
25819; PWR6-NEXT:    add 3, 8, 3
25820; PWR6-NEXT:    lis 9, 257
25821; PWR6-NEXT:    ori 7, 7, 3855
25822; PWR6-NEXT:    and 4, 4, 6
25823; PWR6-NEXT:    rldicl 6, 3, 60, 4
25824; PWR6-NEXT:    ori 9, 9, 257
25825; PWR6-NEXT:    rldimi 7, 7, 32, 0
25826; PWR6-NEXT:    add 4, 5, 4
25827; PWR6-NEXT:    add 3, 3, 6
25828; PWR6-NEXT:    rldimi 9, 9, 32, 0
25829; PWR6-NEXT:    rldicl 5, 4, 60, 4
25830; PWR6-NEXT:    and 3, 3, 7
25831; PWR6-NEXT:    add 4, 4, 5
25832; PWR6-NEXT:    mulld 3, 3, 9
25833; PWR6-NEXT:    and 4, 4, 7
25834; PWR6-NEXT:    rldicl 3, 3, 8, 56
25835; PWR6-NEXT:    mulld 4, 4, 9
25836; PWR6-NEXT:    li 5, 53
25837; PWR6-NEXT:    subfic 3, 3, 53
25838; PWR6-NEXT:    rldicl 4, 4, 8, 56
25839; PWR6-NEXT:    subfe 3, 5, 5
25840; PWR6-NEXT:    subfic 4, 4, 53
25841; PWR6-NEXT:    subfe 4, 5, 5
25842; PWR6-NEXT:    blr
25843;
25844; PWR7-LABEL: ugt_53_v2i64:
25845; PWR7:       # %bb.0:
25846; PWR7-NEXT:    addi 3, 1, -32
25847; PWR7-NEXT:    li 5, -1
25848; PWR7-NEXT:    stxvd2x 34, 0, 3
25849; PWR7-NEXT:    ld 4, -24(1)
25850; PWR7-NEXT:    ld 3, -32(1)
25851; PWR7-NEXT:    popcntd 4, 4
25852; PWR7-NEXT:    popcntd 3, 3
25853; PWR7-NEXT:    cmpldi 4, 53
25854; PWR7-NEXT:    li 4, 0
25855; PWR7-NEXT:    iselgt 6, 5, 4
25856; PWR7-NEXT:    cmpldi 3, 53
25857; PWR7-NEXT:    iselgt 3, 5, 4
25858; PWR7-NEXT:    std 6, -8(1)
25859; PWR7-NEXT:    std 3, -16(1)
25860; PWR7-NEXT:    addi 3, 1, -16
25861; PWR7-NEXT:    lxvd2x 34, 0, 3
25862; PWR7-NEXT:    blr
25863;
25864; PWR8-LABEL: ugt_53_v2i64:
25865; PWR8:       # %bb.0:
25866; PWR8-NEXT:    addis 3, 2, .LCPI204_0@toc@ha
25867; PWR8-NEXT:    vpopcntd 2, 2
25868; PWR8-NEXT:    addi 3, 3, .LCPI204_0@toc@l
25869; PWR8-NEXT:    lxvd2x 35, 0, 3
25870; PWR8-NEXT:    vcmpgtud 2, 2, 3
25871; PWR8-NEXT:    blr
25872;
25873; PWR9-LABEL: ugt_53_v2i64:
25874; PWR9:       # %bb.0:
25875; PWR9-NEXT:    addis 3, 2, .LCPI204_0@toc@ha
25876; PWR9-NEXT:    vpopcntd 2, 2
25877; PWR9-NEXT:    addi 3, 3, .LCPI204_0@toc@l
25878; PWR9-NEXT:    lxv 35, 0(3)
25879; PWR9-NEXT:    vcmpgtud 2, 2, 3
25880; PWR9-NEXT:    blr
25881  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25882  %3 = icmp ugt <2 x i64> %2, <i64 53, i64 53>
25883  %4 = sext <2 x i1> %3 to <2 x i64>
25884  ret <2 x i64> %4
25885}
25886
25887define <2 x i64> @ult_54_v2i64(<2 x i64> %0) {
25888; PWR5-LABEL: ult_54_v2i64:
25889; PWR5:       # %bb.0:
25890; PWR5-NEXT:    lis 5, 21845
25891; PWR5-NEXT:    lis 6, 13107
25892; PWR5-NEXT:    ori 5, 5, 21845
25893; PWR5-NEXT:    rotldi 8, 4, 63
25894; PWR5-NEXT:    rotldi 9, 3, 63
25895; PWR5-NEXT:    rldimi 5, 5, 32, 0
25896; PWR5-NEXT:    and 8, 8, 5
25897; PWR5-NEXT:    and 5, 9, 5
25898; PWR5-NEXT:    ori 6, 6, 13107
25899; PWR5-NEXT:    sub 3, 3, 5
25900; PWR5-NEXT:    rldimi 6, 6, 32, 0
25901; PWR5-NEXT:    sub 4, 4, 8
25902; PWR5-NEXT:    and 8, 3, 6
25903; PWR5-NEXT:    rotldi 3, 3, 62
25904; PWR5-NEXT:    and 3, 3, 6
25905; PWR5-NEXT:    lis 7, 3855
25906; PWR5-NEXT:    and 5, 4, 6
25907; PWR5-NEXT:    rotldi 4, 4, 62
25908; PWR5-NEXT:    add 3, 8, 3
25909; PWR5-NEXT:    lis 9, 257
25910; PWR5-NEXT:    ori 7, 7, 3855
25911; PWR5-NEXT:    and 4, 4, 6
25912; PWR5-NEXT:    rldicl 6, 3, 60, 4
25913; PWR5-NEXT:    ori 9, 9, 257
25914; PWR5-NEXT:    rldimi 7, 7, 32, 0
25915; PWR5-NEXT:    add 4, 5, 4
25916; PWR5-NEXT:    add 3, 3, 6
25917; PWR5-NEXT:    rldimi 9, 9, 32, 0
25918; PWR5-NEXT:    rldicl 5, 4, 60, 4
25919; PWR5-NEXT:    and 3, 3, 7
25920; PWR5-NEXT:    add 4, 4, 5
25921; PWR5-NEXT:    mulld 3, 3, 9
25922; PWR5-NEXT:    and 4, 4, 7
25923; PWR5-NEXT:    rldicl 3, 3, 8, 56
25924; PWR5-NEXT:    li 5, 54
25925; PWR5-NEXT:    mulld 4, 4, 9
25926; PWR5-NEXT:    subc 6, 3, 5
25927; PWR5-NEXT:    rldicl 4, 4, 8, 56
25928; PWR5-NEXT:    subfe 3, 3, 3
25929; PWR5-NEXT:    subc 5, 4, 5
25930; PWR5-NEXT:    subfe 4, 4, 4
25931; PWR5-NEXT:    blr
25932;
25933; PWR6-LABEL: ult_54_v2i64:
25934; PWR6:       # %bb.0:
25935; PWR6-NEXT:    lis 5, 21845
25936; PWR6-NEXT:    lis 6, 13107
25937; PWR6-NEXT:    ori 5, 5, 21845
25938; PWR6-NEXT:    rotldi 8, 4, 63
25939; PWR6-NEXT:    rotldi 9, 3, 63
25940; PWR6-NEXT:    rldimi 5, 5, 32, 0
25941; PWR6-NEXT:    and 8, 8, 5
25942; PWR6-NEXT:    and 5, 9, 5
25943; PWR6-NEXT:    ori 6, 6, 13107
25944; PWR6-NEXT:    sub 3, 3, 5
25945; PWR6-NEXT:    rldimi 6, 6, 32, 0
25946; PWR6-NEXT:    sub 4, 4, 8
25947; PWR6-NEXT:    and 8, 3, 6
25948; PWR6-NEXT:    rotldi 3, 3, 62
25949; PWR6-NEXT:    and 3, 3, 6
25950; PWR6-NEXT:    lis 7, 3855
25951; PWR6-NEXT:    and 5, 4, 6
25952; PWR6-NEXT:    rotldi 4, 4, 62
25953; PWR6-NEXT:    add 3, 8, 3
25954; PWR6-NEXT:    lis 9, 257
25955; PWR6-NEXT:    ori 7, 7, 3855
25956; PWR6-NEXT:    and 4, 4, 6
25957; PWR6-NEXT:    rldicl 6, 3, 60, 4
25958; PWR6-NEXT:    ori 9, 9, 257
25959; PWR6-NEXT:    rldimi 7, 7, 32, 0
25960; PWR6-NEXT:    add 4, 5, 4
25961; PWR6-NEXT:    add 3, 3, 6
25962; PWR6-NEXT:    rldimi 9, 9, 32, 0
25963; PWR6-NEXT:    rldicl 5, 4, 60, 4
25964; PWR6-NEXT:    and 3, 3, 7
25965; PWR6-NEXT:    add 4, 4, 5
25966; PWR6-NEXT:    mulld 3, 3, 9
25967; PWR6-NEXT:    and 4, 4, 7
25968; PWR6-NEXT:    rldicl 3, 3, 8, 56
25969; PWR6-NEXT:    li 5, 54
25970; PWR6-NEXT:    mulld 4, 4, 9
25971; PWR6-NEXT:    subc 6, 3, 5
25972; PWR6-NEXT:    rldicl 4, 4, 8, 56
25973; PWR6-NEXT:    subfe 3, 3, 3
25974; PWR6-NEXT:    subc 5, 4, 5
25975; PWR6-NEXT:    subfe 4, 4, 4
25976; PWR6-NEXT:    blr
25977;
25978; PWR7-LABEL: ult_54_v2i64:
25979; PWR7:       # %bb.0:
25980; PWR7-NEXT:    addi 3, 1, -32
25981; PWR7-NEXT:    li 5, -1
25982; PWR7-NEXT:    stxvd2x 34, 0, 3
25983; PWR7-NEXT:    ld 4, -24(1)
25984; PWR7-NEXT:    ld 3, -32(1)
25985; PWR7-NEXT:    popcntd 4, 4
25986; PWR7-NEXT:    popcntd 3, 3
25987; PWR7-NEXT:    cmpldi 4, 54
25988; PWR7-NEXT:    li 4, 0
25989; PWR7-NEXT:    isellt 6, 5, 4
25990; PWR7-NEXT:    cmpldi 3, 54
25991; PWR7-NEXT:    isellt 3, 5, 4
25992; PWR7-NEXT:    std 6, -8(1)
25993; PWR7-NEXT:    std 3, -16(1)
25994; PWR7-NEXT:    addi 3, 1, -16
25995; PWR7-NEXT:    lxvd2x 34, 0, 3
25996; PWR7-NEXT:    blr
25997;
25998; PWR8-LABEL: ult_54_v2i64:
25999; PWR8:       # %bb.0:
26000; PWR8-NEXT:    addis 3, 2, .LCPI205_0@toc@ha
26001; PWR8-NEXT:    vpopcntd 2, 2
26002; PWR8-NEXT:    addi 3, 3, .LCPI205_0@toc@l
26003; PWR8-NEXT:    lxvd2x 35, 0, 3
26004; PWR8-NEXT:    vcmpgtud 2, 3, 2
26005; PWR8-NEXT:    blr
26006;
26007; PWR9-LABEL: ult_54_v2i64:
26008; PWR9:       # %bb.0:
26009; PWR9-NEXT:    addis 3, 2, .LCPI205_0@toc@ha
26010; PWR9-NEXT:    vpopcntd 2, 2
26011; PWR9-NEXT:    addi 3, 3, .LCPI205_0@toc@l
26012; PWR9-NEXT:    lxv 35, 0(3)
26013; PWR9-NEXT:    vcmpgtud 2, 3, 2
26014; PWR9-NEXT:    blr
26015  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26016  %3 = icmp ult <2 x i64> %2, <i64 54, i64 54>
26017  %4 = sext <2 x i1> %3 to <2 x i64>
26018  ret <2 x i64> %4
26019}
26020
26021define <2 x i64> @ugt_54_v2i64(<2 x i64> %0) {
26022; PWR5-LABEL: ugt_54_v2i64:
26023; PWR5:       # %bb.0:
26024; PWR5-NEXT:    lis 5, 21845
26025; PWR5-NEXT:    lis 6, 13107
26026; PWR5-NEXT:    ori 5, 5, 21845
26027; PWR5-NEXT:    rotldi 8, 4, 63
26028; PWR5-NEXT:    rotldi 9, 3, 63
26029; PWR5-NEXT:    rldimi 5, 5, 32, 0
26030; PWR5-NEXT:    and 8, 8, 5
26031; PWR5-NEXT:    and 5, 9, 5
26032; PWR5-NEXT:    ori 6, 6, 13107
26033; PWR5-NEXT:    sub 3, 3, 5
26034; PWR5-NEXT:    rldimi 6, 6, 32, 0
26035; PWR5-NEXT:    sub 4, 4, 8
26036; PWR5-NEXT:    and 8, 3, 6
26037; PWR5-NEXT:    rotldi 3, 3, 62
26038; PWR5-NEXT:    and 3, 3, 6
26039; PWR5-NEXT:    lis 7, 3855
26040; PWR5-NEXT:    and 5, 4, 6
26041; PWR5-NEXT:    rotldi 4, 4, 62
26042; PWR5-NEXT:    add 3, 8, 3
26043; PWR5-NEXT:    lis 9, 257
26044; PWR5-NEXT:    ori 7, 7, 3855
26045; PWR5-NEXT:    and 4, 4, 6
26046; PWR5-NEXT:    rldicl 6, 3, 60, 4
26047; PWR5-NEXT:    ori 9, 9, 257
26048; PWR5-NEXT:    rldimi 7, 7, 32, 0
26049; PWR5-NEXT:    add 4, 5, 4
26050; PWR5-NEXT:    add 3, 3, 6
26051; PWR5-NEXT:    rldimi 9, 9, 32, 0
26052; PWR5-NEXT:    rldicl 5, 4, 60, 4
26053; PWR5-NEXT:    and 3, 3, 7
26054; PWR5-NEXT:    add 4, 4, 5
26055; PWR5-NEXT:    mulld 3, 3, 9
26056; PWR5-NEXT:    and 4, 4, 7
26057; PWR5-NEXT:    rldicl 3, 3, 8, 56
26058; PWR5-NEXT:    mulld 4, 4, 9
26059; PWR5-NEXT:    li 5, 54
26060; PWR5-NEXT:    subfic 3, 3, 54
26061; PWR5-NEXT:    rldicl 4, 4, 8, 56
26062; PWR5-NEXT:    subfe 3, 5, 5
26063; PWR5-NEXT:    subfic 4, 4, 54
26064; PWR5-NEXT:    subfe 4, 5, 5
26065; PWR5-NEXT:    blr
26066;
26067; PWR6-LABEL: ugt_54_v2i64:
26068; PWR6:       # %bb.0:
26069; PWR6-NEXT:    lis 5, 21845
26070; PWR6-NEXT:    lis 6, 13107
26071; PWR6-NEXT:    ori 5, 5, 21845
26072; PWR6-NEXT:    rotldi 8, 4, 63
26073; PWR6-NEXT:    rotldi 9, 3, 63
26074; PWR6-NEXT:    rldimi 5, 5, 32, 0
26075; PWR6-NEXT:    and 8, 8, 5
26076; PWR6-NEXT:    and 5, 9, 5
26077; PWR6-NEXT:    ori 6, 6, 13107
26078; PWR6-NEXT:    sub 3, 3, 5
26079; PWR6-NEXT:    rldimi 6, 6, 32, 0
26080; PWR6-NEXT:    sub 4, 4, 8
26081; PWR6-NEXT:    and 8, 3, 6
26082; PWR6-NEXT:    rotldi 3, 3, 62
26083; PWR6-NEXT:    and 3, 3, 6
26084; PWR6-NEXT:    lis 7, 3855
26085; PWR6-NEXT:    and 5, 4, 6
26086; PWR6-NEXT:    rotldi 4, 4, 62
26087; PWR6-NEXT:    add 3, 8, 3
26088; PWR6-NEXT:    lis 9, 257
26089; PWR6-NEXT:    ori 7, 7, 3855
26090; PWR6-NEXT:    and 4, 4, 6
26091; PWR6-NEXT:    rldicl 6, 3, 60, 4
26092; PWR6-NEXT:    ori 9, 9, 257
26093; PWR6-NEXT:    rldimi 7, 7, 32, 0
26094; PWR6-NEXT:    add 4, 5, 4
26095; PWR6-NEXT:    add 3, 3, 6
26096; PWR6-NEXT:    rldimi 9, 9, 32, 0
26097; PWR6-NEXT:    rldicl 5, 4, 60, 4
26098; PWR6-NEXT:    and 3, 3, 7
26099; PWR6-NEXT:    add 4, 4, 5
26100; PWR6-NEXT:    mulld 3, 3, 9
26101; PWR6-NEXT:    and 4, 4, 7
26102; PWR6-NEXT:    rldicl 3, 3, 8, 56
26103; PWR6-NEXT:    mulld 4, 4, 9
26104; PWR6-NEXT:    li 5, 54
26105; PWR6-NEXT:    subfic 3, 3, 54
26106; PWR6-NEXT:    rldicl 4, 4, 8, 56
26107; PWR6-NEXT:    subfe 3, 5, 5
26108; PWR6-NEXT:    subfic 4, 4, 54
26109; PWR6-NEXT:    subfe 4, 5, 5
26110; PWR6-NEXT:    blr
26111;
26112; PWR7-LABEL: ugt_54_v2i64:
26113; PWR7:       # %bb.0:
26114; PWR7-NEXT:    addi 3, 1, -32
26115; PWR7-NEXT:    li 5, -1
26116; PWR7-NEXT:    stxvd2x 34, 0, 3
26117; PWR7-NEXT:    ld 4, -24(1)
26118; PWR7-NEXT:    ld 3, -32(1)
26119; PWR7-NEXT:    popcntd 4, 4
26120; PWR7-NEXT:    popcntd 3, 3
26121; PWR7-NEXT:    cmpldi 4, 54
26122; PWR7-NEXT:    li 4, 0
26123; PWR7-NEXT:    iselgt 6, 5, 4
26124; PWR7-NEXT:    cmpldi 3, 54
26125; PWR7-NEXT:    iselgt 3, 5, 4
26126; PWR7-NEXT:    std 6, -8(1)
26127; PWR7-NEXT:    std 3, -16(1)
26128; PWR7-NEXT:    addi 3, 1, -16
26129; PWR7-NEXT:    lxvd2x 34, 0, 3
26130; PWR7-NEXT:    blr
26131;
26132; PWR8-LABEL: ugt_54_v2i64:
26133; PWR8:       # %bb.0:
26134; PWR8-NEXT:    addis 3, 2, .LCPI206_0@toc@ha
26135; PWR8-NEXT:    vpopcntd 2, 2
26136; PWR8-NEXT:    addi 3, 3, .LCPI206_0@toc@l
26137; PWR8-NEXT:    lxvd2x 35, 0, 3
26138; PWR8-NEXT:    vcmpgtud 2, 2, 3
26139; PWR8-NEXT:    blr
26140;
26141; PWR9-LABEL: ugt_54_v2i64:
26142; PWR9:       # %bb.0:
26143; PWR9-NEXT:    addis 3, 2, .LCPI206_0@toc@ha
26144; PWR9-NEXT:    vpopcntd 2, 2
26145; PWR9-NEXT:    addi 3, 3, .LCPI206_0@toc@l
26146; PWR9-NEXT:    lxv 35, 0(3)
26147; PWR9-NEXT:    vcmpgtud 2, 2, 3
26148; PWR9-NEXT:    blr
26149  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26150  %3 = icmp ugt <2 x i64> %2, <i64 54, i64 54>
26151  %4 = sext <2 x i1> %3 to <2 x i64>
26152  ret <2 x i64> %4
26153}
26154
26155define <2 x i64> @ult_55_v2i64(<2 x i64> %0) {
26156; PWR5-LABEL: ult_55_v2i64:
26157; PWR5:       # %bb.0:
26158; PWR5-NEXT:    lis 5, 21845
26159; PWR5-NEXT:    lis 6, 13107
26160; PWR5-NEXT:    ori 5, 5, 21845
26161; PWR5-NEXT:    rotldi 8, 4, 63
26162; PWR5-NEXT:    rotldi 9, 3, 63
26163; PWR5-NEXT:    rldimi 5, 5, 32, 0
26164; PWR5-NEXT:    and 8, 8, 5
26165; PWR5-NEXT:    and 5, 9, 5
26166; PWR5-NEXT:    ori 6, 6, 13107
26167; PWR5-NEXT:    sub 3, 3, 5
26168; PWR5-NEXT:    rldimi 6, 6, 32, 0
26169; PWR5-NEXT:    sub 4, 4, 8
26170; PWR5-NEXT:    and 8, 3, 6
26171; PWR5-NEXT:    rotldi 3, 3, 62
26172; PWR5-NEXT:    and 3, 3, 6
26173; PWR5-NEXT:    lis 7, 3855
26174; PWR5-NEXT:    and 5, 4, 6
26175; PWR5-NEXT:    rotldi 4, 4, 62
26176; PWR5-NEXT:    add 3, 8, 3
26177; PWR5-NEXT:    lis 9, 257
26178; PWR5-NEXT:    ori 7, 7, 3855
26179; PWR5-NEXT:    and 4, 4, 6
26180; PWR5-NEXT:    rldicl 6, 3, 60, 4
26181; PWR5-NEXT:    ori 9, 9, 257
26182; PWR5-NEXT:    rldimi 7, 7, 32, 0
26183; PWR5-NEXT:    add 4, 5, 4
26184; PWR5-NEXT:    add 3, 3, 6
26185; PWR5-NEXT:    rldimi 9, 9, 32, 0
26186; PWR5-NEXT:    rldicl 5, 4, 60, 4
26187; PWR5-NEXT:    and 3, 3, 7
26188; PWR5-NEXT:    add 4, 4, 5
26189; PWR5-NEXT:    mulld 3, 3, 9
26190; PWR5-NEXT:    and 4, 4, 7
26191; PWR5-NEXT:    rldicl 3, 3, 8, 56
26192; PWR5-NEXT:    li 5, 55
26193; PWR5-NEXT:    mulld 4, 4, 9
26194; PWR5-NEXT:    subc 6, 3, 5
26195; PWR5-NEXT:    rldicl 4, 4, 8, 56
26196; PWR5-NEXT:    subfe 3, 3, 3
26197; PWR5-NEXT:    subc 5, 4, 5
26198; PWR5-NEXT:    subfe 4, 4, 4
26199; PWR5-NEXT:    blr
26200;
26201; PWR6-LABEL: ult_55_v2i64:
26202; PWR6:       # %bb.0:
26203; PWR6-NEXT:    lis 5, 21845
26204; PWR6-NEXT:    lis 6, 13107
26205; PWR6-NEXT:    ori 5, 5, 21845
26206; PWR6-NEXT:    rotldi 8, 4, 63
26207; PWR6-NEXT:    rotldi 9, 3, 63
26208; PWR6-NEXT:    rldimi 5, 5, 32, 0
26209; PWR6-NEXT:    and 8, 8, 5
26210; PWR6-NEXT:    and 5, 9, 5
26211; PWR6-NEXT:    ori 6, 6, 13107
26212; PWR6-NEXT:    sub 3, 3, 5
26213; PWR6-NEXT:    rldimi 6, 6, 32, 0
26214; PWR6-NEXT:    sub 4, 4, 8
26215; PWR6-NEXT:    and 8, 3, 6
26216; PWR6-NEXT:    rotldi 3, 3, 62
26217; PWR6-NEXT:    and 3, 3, 6
26218; PWR6-NEXT:    lis 7, 3855
26219; PWR6-NEXT:    and 5, 4, 6
26220; PWR6-NEXT:    rotldi 4, 4, 62
26221; PWR6-NEXT:    add 3, 8, 3
26222; PWR6-NEXT:    lis 9, 257
26223; PWR6-NEXT:    ori 7, 7, 3855
26224; PWR6-NEXT:    and 4, 4, 6
26225; PWR6-NEXT:    rldicl 6, 3, 60, 4
26226; PWR6-NEXT:    ori 9, 9, 257
26227; PWR6-NEXT:    rldimi 7, 7, 32, 0
26228; PWR6-NEXT:    add 4, 5, 4
26229; PWR6-NEXT:    add 3, 3, 6
26230; PWR6-NEXT:    rldimi 9, 9, 32, 0
26231; PWR6-NEXT:    rldicl 5, 4, 60, 4
26232; PWR6-NEXT:    and 3, 3, 7
26233; PWR6-NEXT:    add 4, 4, 5
26234; PWR6-NEXT:    mulld 3, 3, 9
26235; PWR6-NEXT:    and 4, 4, 7
26236; PWR6-NEXT:    rldicl 3, 3, 8, 56
26237; PWR6-NEXT:    li 5, 55
26238; PWR6-NEXT:    mulld 4, 4, 9
26239; PWR6-NEXT:    subc 6, 3, 5
26240; PWR6-NEXT:    rldicl 4, 4, 8, 56
26241; PWR6-NEXT:    subfe 3, 3, 3
26242; PWR6-NEXT:    subc 5, 4, 5
26243; PWR6-NEXT:    subfe 4, 4, 4
26244; PWR6-NEXT:    blr
26245;
26246; PWR7-LABEL: ult_55_v2i64:
26247; PWR7:       # %bb.0:
26248; PWR7-NEXT:    addi 3, 1, -32
26249; PWR7-NEXT:    li 5, -1
26250; PWR7-NEXT:    stxvd2x 34, 0, 3
26251; PWR7-NEXT:    ld 4, -24(1)
26252; PWR7-NEXT:    ld 3, -32(1)
26253; PWR7-NEXT:    popcntd 4, 4
26254; PWR7-NEXT:    popcntd 3, 3
26255; PWR7-NEXT:    cmpldi 4, 55
26256; PWR7-NEXT:    li 4, 0
26257; PWR7-NEXT:    isellt 6, 5, 4
26258; PWR7-NEXT:    cmpldi 3, 55
26259; PWR7-NEXT:    isellt 3, 5, 4
26260; PWR7-NEXT:    std 6, -8(1)
26261; PWR7-NEXT:    std 3, -16(1)
26262; PWR7-NEXT:    addi 3, 1, -16
26263; PWR7-NEXT:    lxvd2x 34, 0, 3
26264; PWR7-NEXT:    blr
26265;
26266; PWR8-LABEL: ult_55_v2i64:
26267; PWR8:       # %bb.0:
26268; PWR8-NEXT:    addis 3, 2, .LCPI207_0@toc@ha
26269; PWR8-NEXT:    vpopcntd 2, 2
26270; PWR8-NEXT:    addi 3, 3, .LCPI207_0@toc@l
26271; PWR8-NEXT:    lxvd2x 35, 0, 3
26272; PWR8-NEXT:    vcmpgtud 2, 3, 2
26273; PWR8-NEXT:    blr
26274;
26275; PWR9-LABEL: ult_55_v2i64:
26276; PWR9:       # %bb.0:
26277; PWR9-NEXT:    addis 3, 2, .LCPI207_0@toc@ha
26278; PWR9-NEXT:    vpopcntd 2, 2
26279; PWR9-NEXT:    addi 3, 3, .LCPI207_0@toc@l
26280; PWR9-NEXT:    lxv 35, 0(3)
26281; PWR9-NEXT:    vcmpgtud 2, 3, 2
26282; PWR9-NEXT:    blr
26283  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26284  %3 = icmp ult <2 x i64> %2, <i64 55, i64 55>
26285  %4 = sext <2 x i1> %3 to <2 x i64>
26286  ret <2 x i64> %4
26287}
26288
26289define <2 x i64> @ugt_55_v2i64(<2 x i64> %0) {
26290; PWR5-LABEL: ugt_55_v2i64:
26291; PWR5:       # %bb.0:
26292; PWR5-NEXT:    lis 5, 21845
26293; PWR5-NEXT:    lis 6, 13107
26294; PWR5-NEXT:    ori 5, 5, 21845
26295; PWR5-NEXT:    rotldi 8, 4, 63
26296; PWR5-NEXT:    rotldi 9, 3, 63
26297; PWR5-NEXT:    rldimi 5, 5, 32, 0
26298; PWR5-NEXT:    and 8, 8, 5
26299; PWR5-NEXT:    and 5, 9, 5
26300; PWR5-NEXT:    ori 6, 6, 13107
26301; PWR5-NEXT:    sub 3, 3, 5
26302; PWR5-NEXT:    rldimi 6, 6, 32, 0
26303; PWR5-NEXT:    sub 4, 4, 8
26304; PWR5-NEXT:    and 8, 3, 6
26305; PWR5-NEXT:    rotldi 3, 3, 62
26306; PWR5-NEXT:    and 3, 3, 6
26307; PWR5-NEXT:    lis 7, 3855
26308; PWR5-NEXT:    and 5, 4, 6
26309; PWR5-NEXT:    rotldi 4, 4, 62
26310; PWR5-NEXT:    add 3, 8, 3
26311; PWR5-NEXT:    lis 9, 257
26312; PWR5-NEXT:    ori 7, 7, 3855
26313; PWR5-NEXT:    and 4, 4, 6
26314; PWR5-NEXT:    rldicl 6, 3, 60, 4
26315; PWR5-NEXT:    ori 9, 9, 257
26316; PWR5-NEXT:    rldimi 7, 7, 32, 0
26317; PWR5-NEXT:    add 4, 5, 4
26318; PWR5-NEXT:    add 3, 3, 6
26319; PWR5-NEXT:    rldimi 9, 9, 32, 0
26320; PWR5-NEXT:    rldicl 5, 4, 60, 4
26321; PWR5-NEXT:    and 3, 3, 7
26322; PWR5-NEXT:    add 4, 4, 5
26323; PWR5-NEXT:    mulld 3, 3, 9
26324; PWR5-NEXT:    and 4, 4, 7
26325; PWR5-NEXT:    rldicl 3, 3, 8, 56
26326; PWR5-NEXT:    mulld 4, 4, 9
26327; PWR5-NEXT:    li 5, 55
26328; PWR5-NEXT:    subfic 3, 3, 55
26329; PWR5-NEXT:    rldicl 4, 4, 8, 56
26330; PWR5-NEXT:    subfe 3, 5, 5
26331; PWR5-NEXT:    subfic 4, 4, 55
26332; PWR5-NEXT:    subfe 4, 5, 5
26333; PWR5-NEXT:    blr
26334;
26335; PWR6-LABEL: ugt_55_v2i64:
26336; PWR6:       # %bb.0:
26337; PWR6-NEXT:    lis 5, 21845
26338; PWR6-NEXT:    lis 6, 13107
26339; PWR6-NEXT:    ori 5, 5, 21845
26340; PWR6-NEXT:    rotldi 8, 4, 63
26341; PWR6-NEXT:    rotldi 9, 3, 63
26342; PWR6-NEXT:    rldimi 5, 5, 32, 0
26343; PWR6-NEXT:    and 8, 8, 5
26344; PWR6-NEXT:    and 5, 9, 5
26345; PWR6-NEXT:    ori 6, 6, 13107
26346; PWR6-NEXT:    sub 3, 3, 5
26347; PWR6-NEXT:    rldimi 6, 6, 32, 0
26348; PWR6-NEXT:    sub 4, 4, 8
26349; PWR6-NEXT:    and 8, 3, 6
26350; PWR6-NEXT:    rotldi 3, 3, 62
26351; PWR6-NEXT:    and 3, 3, 6
26352; PWR6-NEXT:    lis 7, 3855
26353; PWR6-NEXT:    and 5, 4, 6
26354; PWR6-NEXT:    rotldi 4, 4, 62
26355; PWR6-NEXT:    add 3, 8, 3
26356; PWR6-NEXT:    lis 9, 257
26357; PWR6-NEXT:    ori 7, 7, 3855
26358; PWR6-NEXT:    and 4, 4, 6
26359; PWR6-NEXT:    rldicl 6, 3, 60, 4
26360; PWR6-NEXT:    ori 9, 9, 257
26361; PWR6-NEXT:    rldimi 7, 7, 32, 0
26362; PWR6-NEXT:    add 4, 5, 4
26363; PWR6-NEXT:    add 3, 3, 6
26364; PWR6-NEXT:    rldimi 9, 9, 32, 0
26365; PWR6-NEXT:    rldicl 5, 4, 60, 4
26366; PWR6-NEXT:    and 3, 3, 7
26367; PWR6-NEXT:    add 4, 4, 5
26368; PWR6-NEXT:    mulld 3, 3, 9
26369; PWR6-NEXT:    and 4, 4, 7
26370; PWR6-NEXT:    rldicl 3, 3, 8, 56
26371; PWR6-NEXT:    mulld 4, 4, 9
26372; PWR6-NEXT:    li 5, 55
26373; PWR6-NEXT:    subfic 3, 3, 55
26374; PWR6-NEXT:    rldicl 4, 4, 8, 56
26375; PWR6-NEXT:    subfe 3, 5, 5
26376; PWR6-NEXT:    subfic 4, 4, 55
26377; PWR6-NEXT:    subfe 4, 5, 5
26378; PWR6-NEXT:    blr
26379;
26380; PWR7-LABEL: ugt_55_v2i64:
26381; PWR7:       # %bb.0:
26382; PWR7-NEXT:    addi 3, 1, -32
26383; PWR7-NEXT:    li 5, -1
26384; PWR7-NEXT:    stxvd2x 34, 0, 3
26385; PWR7-NEXT:    ld 4, -24(1)
26386; PWR7-NEXT:    ld 3, -32(1)
26387; PWR7-NEXT:    popcntd 4, 4
26388; PWR7-NEXT:    popcntd 3, 3
26389; PWR7-NEXT:    cmpldi 4, 55
26390; PWR7-NEXT:    li 4, 0
26391; PWR7-NEXT:    iselgt 6, 5, 4
26392; PWR7-NEXT:    cmpldi 3, 55
26393; PWR7-NEXT:    iselgt 3, 5, 4
26394; PWR7-NEXT:    std 6, -8(1)
26395; PWR7-NEXT:    std 3, -16(1)
26396; PWR7-NEXT:    addi 3, 1, -16
26397; PWR7-NEXT:    lxvd2x 34, 0, 3
26398; PWR7-NEXT:    blr
26399;
26400; PWR8-LABEL: ugt_55_v2i64:
26401; PWR8:       # %bb.0:
26402; PWR8-NEXT:    addis 3, 2, .LCPI208_0@toc@ha
26403; PWR8-NEXT:    vpopcntd 2, 2
26404; PWR8-NEXT:    addi 3, 3, .LCPI208_0@toc@l
26405; PWR8-NEXT:    lxvd2x 35, 0, 3
26406; PWR8-NEXT:    vcmpgtud 2, 2, 3
26407; PWR8-NEXT:    blr
26408;
26409; PWR9-LABEL: ugt_55_v2i64:
26410; PWR9:       # %bb.0:
26411; PWR9-NEXT:    addis 3, 2, .LCPI208_0@toc@ha
26412; PWR9-NEXT:    vpopcntd 2, 2
26413; PWR9-NEXT:    addi 3, 3, .LCPI208_0@toc@l
26414; PWR9-NEXT:    lxv 35, 0(3)
26415; PWR9-NEXT:    vcmpgtud 2, 2, 3
26416; PWR9-NEXT:    blr
26417  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26418  %3 = icmp ugt <2 x i64> %2, <i64 55, i64 55>
26419  %4 = sext <2 x i1> %3 to <2 x i64>
26420  ret <2 x i64> %4
26421}
26422
26423define <2 x i64> @ult_56_v2i64(<2 x i64> %0) {
26424; PWR5-LABEL: ult_56_v2i64:
26425; PWR5:       # %bb.0:
26426; PWR5-NEXT:    lis 5, 21845
26427; PWR5-NEXT:    lis 6, 13107
26428; PWR5-NEXT:    ori 5, 5, 21845
26429; PWR5-NEXT:    rotldi 8, 4, 63
26430; PWR5-NEXT:    rotldi 9, 3, 63
26431; PWR5-NEXT:    rldimi 5, 5, 32, 0
26432; PWR5-NEXT:    and 8, 8, 5
26433; PWR5-NEXT:    and 5, 9, 5
26434; PWR5-NEXT:    ori 6, 6, 13107
26435; PWR5-NEXT:    sub 3, 3, 5
26436; PWR5-NEXT:    rldimi 6, 6, 32, 0
26437; PWR5-NEXT:    sub 4, 4, 8
26438; PWR5-NEXT:    and 8, 3, 6
26439; PWR5-NEXT:    rotldi 3, 3, 62
26440; PWR5-NEXT:    and 3, 3, 6
26441; PWR5-NEXT:    lis 7, 3855
26442; PWR5-NEXT:    and 5, 4, 6
26443; PWR5-NEXT:    rotldi 4, 4, 62
26444; PWR5-NEXT:    add 3, 8, 3
26445; PWR5-NEXT:    lis 9, 257
26446; PWR5-NEXT:    ori 7, 7, 3855
26447; PWR5-NEXT:    and 4, 4, 6
26448; PWR5-NEXT:    rldicl 6, 3, 60, 4
26449; PWR5-NEXT:    ori 9, 9, 257
26450; PWR5-NEXT:    rldimi 7, 7, 32, 0
26451; PWR5-NEXT:    add 4, 5, 4
26452; PWR5-NEXT:    add 3, 3, 6
26453; PWR5-NEXT:    rldimi 9, 9, 32, 0
26454; PWR5-NEXT:    rldicl 5, 4, 60, 4
26455; PWR5-NEXT:    and 3, 3, 7
26456; PWR5-NEXT:    add 4, 4, 5
26457; PWR5-NEXT:    mulld 3, 3, 9
26458; PWR5-NEXT:    and 4, 4, 7
26459; PWR5-NEXT:    rldicl 3, 3, 8, 56
26460; PWR5-NEXT:    li 5, 56
26461; PWR5-NEXT:    mulld 4, 4, 9
26462; PWR5-NEXT:    subc 6, 3, 5
26463; PWR5-NEXT:    rldicl 4, 4, 8, 56
26464; PWR5-NEXT:    subfe 3, 3, 3
26465; PWR5-NEXT:    subc 5, 4, 5
26466; PWR5-NEXT:    subfe 4, 4, 4
26467; PWR5-NEXT:    blr
26468;
26469; PWR6-LABEL: ult_56_v2i64:
26470; PWR6:       # %bb.0:
26471; PWR6-NEXT:    lis 5, 21845
26472; PWR6-NEXT:    lis 6, 13107
26473; PWR6-NEXT:    ori 5, 5, 21845
26474; PWR6-NEXT:    rotldi 8, 4, 63
26475; PWR6-NEXT:    rotldi 9, 3, 63
26476; PWR6-NEXT:    rldimi 5, 5, 32, 0
26477; PWR6-NEXT:    and 8, 8, 5
26478; PWR6-NEXT:    and 5, 9, 5
26479; PWR6-NEXT:    ori 6, 6, 13107
26480; PWR6-NEXT:    sub 3, 3, 5
26481; PWR6-NEXT:    rldimi 6, 6, 32, 0
26482; PWR6-NEXT:    sub 4, 4, 8
26483; PWR6-NEXT:    and 8, 3, 6
26484; PWR6-NEXT:    rotldi 3, 3, 62
26485; PWR6-NEXT:    and 3, 3, 6
26486; PWR6-NEXT:    lis 7, 3855
26487; PWR6-NEXT:    and 5, 4, 6
26488; PWR6-NEXT:    rotldi 4, 4, 62
26489; PWR6-NEXT:    add 3, 8, 3
26490; PWR6-NEXT:    lis 9, 257
26491; PWR6-NEXT:    ori 7, 7, 3855
26492; PWR6-NEXT:    and 4, 4, 6
26493; PWR6-NEXT:    rldicl 6, 3, 60, 4
26494; PWR6-NEXT:    ori 9, 9, 257
26495; PWR6-NEXT:    rldimi 7, 7, 32, 0
26496; PWR6-NEXT:    add 4, 5, 4
26497; PWR6-NEXT:    add 3, 3, 6
26498; PWR6-NEXT:    rldimi 9, 9, 32, 0
26499; PWR6-NEXT:    rldicl 5, 4, 60, 4
26500; PWR6-NEXT:    and 3, 3, 7
26501; PWR6-NEXT:    add 4, 4, 5
26502; PWR6-NEXT:    mulld 3, 3, 9
26503; PWR6-NEXT:    and 4, 4, 7
26504; PWR6-NEXT:    rldicl 3, 3, 8, 56
26505; PWR6-NEXT:    li 5, 56
26506; PWR6-NEXT:    mulld 4, 4, 9
26507; PWR6-NEXT:    subc 6, 3, 5
26508; PWR6-NEXT:    rldicl 4, 4, 8, 56
26509; PWR6-NEXT:    subfe 3, 3, 3
26510; PWR6-NEXT:    subc 5, 4, 5
26511; PWR6-NEXT:    subfe 4, 4, 4
26512; PWR6-NEXT:    blr
26513;
26514; PWR7-LABEL: ult_56_v2i64:
26515; PWR7:       # %bb.0:
26516; PWR7-NEXT:    addi 3, 1, -32
26517; PWR7-NEXT:    li 5, -1
26518; PWR7-NEXT:    stxvd2x 34, 0, 3
26519; PWR7-NEXT:    ld 4, -24(1)
26520; PWR7-NEXT:    ld 3, -32(1)
26521; PWR7-NEXT:    popcntd 4, 4
26522; PWR7-NEXT:    popcntd 3, 3
26523; PWR7-NEXT:    cmpldi 4, 56
26524; PWR7-NEXT:    li 4, 0
26525; PWR7-NEXT:    isellt 6, 5, 4
26526; PWR7-NEXT:    cmpldi 3, 56
26527; PWR7-NEXT:    isellt 3, 5, 4
26528; PWR7-NEXT:    std 6, -8(1)
26529; PWR7-NEXT:    std 3, -16(1)
26530; PWR7-NEXT:    addi 3, 1, -16
26531; PWR7-NEXT:    lxvd2x 34, 0, 3
26532; PWR7-NEXT:    blr
26533;
26534; PWR8-LABEL: ult_56_v2i64:
26535; PWR8:       # %bb.0:
26536; PWR8-NEXT:    addis 3, 2, .LCPI209_0@toc@ha
26537; PWR8-NEXT:    vpopcntd 2, 2
26538; PWR8-NEXT:    addi 3, 3, .LCPI209_0@toc@l
26539; PWR8-NEXT:    lxvd2x 35, 0, 3
26540; PWR8-NEXT:    vcmpgtud 2, 3, 2
26541; PWR8-NEXT:    blr
26542;
26543; PWR9-LABEL: ult_56_v2i64:
26544; PWR9:       # %bb.0:
26545; PWR9-NEXT:    addis 3, 2, .LCPI209_0@toc@ha
26546; PWR9-NEXT:    vpopcntd 2, 2
26547; PWR9-NEXT:    addi 3, 3, .LCPI209_0@toc@l
26548; PWR9-NEXT:    lxv 35, 0(3)
26549; PWR9-NEXT:    vcmpgtud 2, 3, 2
26550; PWR9-NEXT:    blr
26551  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26552  %3 = icmp ult <2 x i64> %2, <i64 56, i64 56>
26553  %4 = sext <2 x i1> %3 to <2 x i64>
26554  ret <2 x i64> %4
26555}
26556
26557define <2 x i64> @ugt_56_v2i64(<2 x i64> %0) {
26558; PWR5-LABEL: ugt_56_v2i64:
26559; PWR5:       # %bb.0:
26560; PWR5-NEXT:    lis 5, 21845
26561; PWR5-NEXT:    lis 6, 13107
26562; PWR5-NEXT:    ori 5, 5, 21845
26563; PWR5-NEXT:    rotldi 8, 4, 63
26564; PWR5-NEXT:    rotldi 9, 3, 63
26565; PWR5-NEXT:    rldimi 5, 5, 32, 0
26566; PWR5-NEXT:    and 8, 8, 5
26567; PWR5-NEXT:    and 5, 9, 5
26568; PWR5-NEXT:    ori 6, 6, 13107
26569; PWR5-NEXT:    sub 3, 3, 5
26570; PWR5-NEXT:    rldimi 6, 6, 32, 0
26571; PWR5-NEXT:    sub 4, 4, 8
26572; PWR5-NEXT:    and 8, 3, 6
26573; PWR5-NEXT:    rotldi 3, 3, 62
26574; PWR5-NEXT:    and 3, 3, 6
26575; PWR5-NEXT:    lis 7, 3855
26576; PWR5-NEXT:    and 5, 4, 6
26577; PWR5-NEXT:    rotldi 4, 4, 62
26578; PWR5-NEXT:    add 3, 8, 3
26579; PWR5-NEXT:    lis 9, 257
26580; PWR5-NEXT:    ori 7, 7, 3855
26581; PWR5-NEXT:    and 4, 4, 6
26582; PWR5-NEXT:    rldicl 6, 3, 60, 4
26583; PWR5-NEXT:    ori 9, 9, 257
26584; PWR5-NEXT:    rldimi 7, 7, 32, 0
26585; PWR5-NEXT:    add 4, 5, 4
26586; PWR5-NEXT:    add 3, 3, 6
26587; PWR5-NEXT:    rldimi 9, 9, 32, 0
26588; PWR5-NEXT:    rldicl 5, 4, 60, 4
26589; PWR5-NEXT:    and 3, 3, 7
26590; PWR5-NEXT:    add 4, 4, 5
26591; PWR5-NEXT:    mulld 3, 3, 9
26592; PWR5-NEXT:    and 4, 4, 7
26593; PWR5-NEXT:    rldicl 3, 3, 8, 56
26594; PWR5-NEXT:    mulld 4, 4, 9
26595; PWR5-NEXT:    li 5, 56
26596; PWR5-NEXT:    subfic 3, 3, 56
26597; PWR5-NEXT:    rldicl 4, 4, 8, 56
26598; PWR5-NEXT:    subfe 3, 5, 5
26599; PWR5-NEXT:    subfic 4, 4, 56
26600; PWR5-NEXT:    subfe 4, 5, 5
26601; PWR5-NEXT:    blr
26602;
26603; PWR6-LABEL: ugt_56_v2i64:
26604; PWR6:       # %bb.0:
26605; PWR6-NEXT:    lis 5, 21845
26606; PWR6-NEXT:    lis 6, 13107
26607; PWR6-NEXT:    ori 5, 5, 21845
26608; PWR6-NEXT:    rotldi 8, 4, 63
26609; PWR6-NEXT:    rotldi 9, 3, 63
26610; PWR6-NEXT:    rldimi 5, 5, 32, 0
26611; PWR6-NEXT:    and 8, 8, 5
26612; PWR6-NEXT:    and 5, 9, 5
26613; PWR6-NEXT:    ori 6, 6, 13107
26614; PWR6-NEXT:    sub 3, 3, 5
26615; PWR6-NEXT:    rldimi 6, 6, 32, 0
26616; PWR6-NEXT:    sub 4, 4, 8
26617; PWR6-NEXT:    and 8, 3, 6
26618; PWR6-NEXT:    rotldi 3, 3, 62
26619; PWR6-NEXT:    and 3, 3, 6
26620; PWR6-NEXT:    lis 7, 3855
26621; PWR6-NEXT:    and 5, 4, 6
26622; PWR6-NEXT:    rotldi 4, 4, 62
26623; PWR6-NEXT:    add 3, 8, 3
26624; PWR6-NEXT:    lis 9, 257
26625; PWR6-NEXT:    ori 7, 7, 3855
26626; PWR6-NEXT:    and 4, 4, 6
26627; PWR6-NEXT:    rldicl 6, 3, 60, 4
26628; PWR6-NEXT:    ori 9, 9, 257
26629; PWR6-NEXT:    rldimi 7, 7, 32, 0
26630; PWR6-NEXT:    add 4, 5, 4
26631; PWR6-NEXT:    add 3, 3, 6
26632; PWR6-NEXT:    rldimi 9, 9, 32, 0
26633; PWR6-NEXT:    rldicl 5, 4, 60, 4
26634; PWR6-NEXT:    and 3, 3, 7
26635; PWR6-NEXT:    add 4, 4, 5
26636; PWR6-NEXT:    mulld 3, 3, 9
26637; PWR6-NEXT:    and 4, 4, 7
26638; PWR6-NEXT:    rldicl 3, 3, 8, 56
26639; PWR6-NEXT:    mulld 4, 4, 9
26640; PWR6-NEXT:    li 5, 56
26641; PWR6-NEXT:    subfic 3, 3, 56
26642; PWR6-NEXT:    rldicl 4, 4, 8, 56
26643; PWR6-NEXT:    subfe 3, 5, 5
26644; PWR6-NEXT:    subfic 4, 4, 56
26645; PWR6-NEXT:    subfe 4, 5, 5
26646; PWR6-NEXT:    blr
26647;
26648; PWR7-LABEL: ugt_56_v2i64:
26649; PWR7:       # %bb.0:
26650; PWR7-NEXT:    addi 3, 1, -32
26651; PWR7-NEXT:    li 5, -1
26652; PWR7-NEXT:    stxvd2x 34, 0, 3
26653; PWR7-NEXT:    ld 4, -24(1)
26654; PWR7-NEXT:    ld 3, -32(1)
26655; PWR7-NEXT:    popcntd 4, 4
26656; PWR7-NEXT:    popcntd 3, 3
26657; PWR7-NEXT:    cmpldi 4, 56
26658; PWR7-NEXT:    li 4, 0
26659; PWR7-NEXT:    iselgt 6, 5, 4
26660; PWR7-NEXT:    cmpldi 3, 56
26661; PWR7-NEXT:    iselgt 3, 5, 4
26662; PWR7-NEXT:    std 6, -8(1)
26663; PWR7-NEXT:    std 3, -16(1)
26664; PWR7-NEXT:    addi 3, 1, -16
26665; PWR7-NEXT:    lxvd2x 34, 0, 3
26666; PWR7-NEXT:    blr
26667;
26668; PWR8-LABEL: ugt_56_v2i64:
26669; PWR8:       # %bb.0:
26670; PWR8-NEXT:    addis 3, 2, .LCPI210_0@toc@ha
26671; PWR8-NEXT:    vpopcntd 2, 2
26672; PWR8-NEXT:    addi 3, 3, .LCPI210_0@toc@l
26673; PWR8-NEXT:    lxvd2x 35, 0, 3
26674; PWR8-NEXT:    vcmpgtud 2, 2, 3
26675; PWR8-NEXT:    blr
26676;
26677; PWR9-LABEL: ugt_56_v2i64:
26678; PWR9:       # %bb.0:
26679; PWR9-NEXT:    addis 3, 2, .LCPI210_0@toc@ha
26680; PWR9-NEXT:    vpopcntd 2, 2
26681; PWR9-NEXT:    addi 3, 3, .LCPI210_0@toc@l
26682; PWR9-NEXT:    lxv 35, 0(3)
26683; PWR9-NEXT:    vcmpgtud 2, 2, 3
26684; PWR9-NEXT:    blr
26685  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26686  %3 = icmp ugt <2 x i64> %2, <i64 56, i64 56>
26687  %4 = sext <2 x i1> %3 to <2 x i64>
26688  ret <2 x i64> %4
26689}
26690
26691define <2 x i64> @ult_57_v2i64(<2 x i64> %0) {
26692; PWR5-LABEL: ult_57_v2i64:
26693; PWR5:       # %bb.0:
26694; PWR5-NEXT:    lis 5, 21845
26695; PWR5-NEXT:    lis 6, 13107
26696; PWR5-NEXT:    ori 5, 5, 21845
26697; PWR5-NEXT:    rotldi 8, 4, 63
26698; PWR5-NEXT:    rotldi 9, 3, 63
26699; PWR5-NEXT:    rldimi 5, 5, 32, 0
26700; PWR5-NEXT:    and 8, 8, 5
26701; PWR5-NEXT:    and 5, 9, 5
26702; PWR5-NEXT:    ori 6, 6, 13107
26703; PWR5-NEXT:    sub 3, 3, 5
26704; PWR5-NEXT:    rldimi 6, 6, 32, 0
26705; PWR5-NEXT:    sub 4, 4, 8
26706; PWR5-NEXT:    and 8, 3, 6
26707; PWR5-NEXT:    rotldi 3, 3, 62
26708; PWR5-NEXT:    and 3, 3, 6
26709; PWR5-NEXT:    lis 7, 3855
26710; PWR5-NEXT:    and 5, 4, 6
26711; PWR5-NEXT:    rotldi 4, 4, 62
26712; PWR5-NEXT:    add 3, 8, 3
26713; PWR5-NEXT:    lis 9, 257
26714; PWR5-NEXT:    ori 7, 7, 3855
26715; PWR5-NEXT:    and 4, 4, 6
26716; PWR5-NEXT:    rldicl 6, 3, 60, 4
26717; PWR5-NEXT:    ori 9, 9, 257
26718; PWR5-NEXT:    rldimi 7, 7, 32, 0
26719; PWR5-NEXT:    add 4, 5, 4
26720; PWR5-NEXT:    add 3, 3, 6
26721; PWR5-NEXT:    rldimi 9, 9, 32, 0
26722; PWR5-NEXT:    rldicl 5, 4, 60, 4
26723; PWR5-NEXT:    and 3, 3, 7
26724; PWR5-NEXT:    add 4, 4, 5
26725; PWR5-NEXT:    mulld 3, 3, 9
26726; PWR5-NEXT:    and 4, 4, 7
26727; PWR5-NEXT:    rldicl 3, 3, 8, 56
26728; PWR5-NEXT:    li 5, 57
26729; PWR5-NEXT:    mulld 4, 4, 9
26730; PWR5-NEXT:    subc 6, 3, 5
26731; PWR5-NEXT:    rldicl 4, 4, 8, 56
26732; PWR5-NEXT:    subfe 3, 3, 3
26733; PWR5-NEXT:    subc 5, 4, 5
26734; PWR5-NEXT:    subfe 4, 4, 4
26735; PWR5-NEXT:    blr
26736;
26737; PWR6-LABEL: ult_57_v2i64:
26738; PWR6:       # %bb.0:
26739; PWR6-NEXT:    lis 5, 21845
26740; PWR6-NEXT:    lis 6, 13107
26741; PWR6-NEXT:    ori 5, 5, 21845
26742; PWR6-NEXT:    rotldi 8, 4, 63
26743; PWR6-NEXT:    rotldi 9, 3, 63
26744; PWR6-NEXT:    rldimi 5, 5, 32, 0
26745; PWR6-NEXT:    and 8, 8, 5
26746; PWR6-NEXT:    and 5, 9, 5
26747; PWR6-NEXT:    ori 6, 6, 13107
26748; PWR6-NEXT:    sub 3, 3, 5
26749; PWR6-NEXT:    rldimi 6, 6, 32, 0
26750; PWR6-NEXT:    sub 4, 4, 8
26751; PWR6-NEXT:    and 8, 3, 6
26752; PWR6-NEXT:    rotldi 3, 3, 62
26753; PWR6-NEXT:    and 3, 3, 6
26754; PWR6-NEXT:    lis 7, 3855
26755; PWR6-NEXT:    and 5, 4, 6
26756; PWR6-NEXT:    rotldi 4, 4, 62
26757; PWR6-NEXT:    add 3, 8, 3
26758; PWR6-NEXT:    lis 9, 257
26759; PWR6-NEXT:    ori 7, 7, 3855
26760; PWR6-NEXT:    and 4, 4, 6
26761; PWR6-NEXT:    rldicl 6, 3, 60, 4
26762; PWR6-NEXT:    ori 9, 9, 257
26763; PWR6-NEXT:    rldimi 7, 7, 32, 0
26764; PWR6-NEXT:    add 4, 5, 4
26765; PWR6-NEXT:    add 3, 3, 6
26766; PWR6-NEXT:    rldimi 9, 9, 32, 0
26767; PWR6-NEXT:    rldicl 5, 4, 60, 4
26768; PWR6-NEXT:    and 3, 3, 7
26769; PWR6-NEXT:    add 4, 4, 5
26770; PWR6-NEXT:    mulld 3, 3, 9
26771; PWR6-NEXT:    and 4, 4, 7
26772; PWR6-NEXT:    rldicl 3, 3, 8, 56
26773; PWR6-NEXT:    li 5, 57
26774; PWR6-NEXT:    mulld 4, 4, 9
26775; PWR6-NEXT:    subc 6, 3, 5
26776; PWR6-NEXT:    rldicl 4, 4, 8, 56
26777; PWR6-NEXT:    subfe 3, 3, 3
26778; PWR6-NEXT:    subc 5, 4, 5
26779; PWR6-NEXT:    subfe 4, 4, 4
26780; PWR6-NEXT:    blr
26781;
26782; PWR7-LABEL: ult_57_v2i64:
26783; PWR7:       # %bb.0:
26784; PWR7-NEXT:    addi 3, 1, -32
26785; PWR7-NEXT:    li 5, -1
26786; PWR7-NEXT:    stxvd2x 34, 0, 3
26787; PWR7-NEXT:    ld 4, -24(1)
26788; PWR7-NEXT:    ld 3, -32(1)
26789; PWR7-NEXT:    popcntd 4, 4
26790; PWR7-NEXT:    popcntd 3, 3
26791; PWR7-NEXT:    cmpldi 4, 57
26792; PWR7-NEXT:    li 4, 0
26793; PWR7-NEXT:    isellt 6, 5, 4
26794; PWR7-NEXT:    cmpldi 3, 57
26795; PWR7-NEXT:    isellt 3, 5, 4
26796; PWR7-NEXT:    std 6, -8(1)
26797; PWR7-NEXT:    std 3, -16(1)
26798; PWR7-NEXT:    addi 3, 1, -16
26799; PWR7-NEXT:    lxvd2x 34, 0, 3
26800; PWR7-NEXT:    blr
26801;
26802; PWR8-LABEL: ult_57_v2i64:
26803; PWR8:       # %bb.0:
26804; PWR8-NEXT:    addis 3, 2, .LCPI211_0@toc@ha
26805; PWR8-NEXT:    vpopcntd 2, 2
26806; PWR8-NEXT:    addi 3, 3, .LCPI211_0@toc@l
26807; PWR8-NEXT:    lxvd2x 35, 0, 3
26808; PWR8-NEXT:    vcmpgtud 2, 3, 2
26809; PWR8-NEXT:    blr
26810;
26811; PWR9-LABEL: ult_57_v2i64:
26812; PWR9:       # %bb.0:
26813; PWR9-NEXT:    addis 3, 2, .LCPI211_0@toc@ha
26814; PWR9-NEXT:    vpopcntd 2, 2
26815; PWR9-NEXT:    addi 3, 3, .LCPI211_0@toc@l
26816; PWR9-NEXT:    lxv 35, 0(3)
26817; PWR9-NEXT:    vcmpgtud 2, 3, 2
26818; PWR9-NEXT:    blr
26819  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26820  %3 = icmp ult <2 x i64> %2, <i64 57, i64 57>
26821  %4 = sext <2 x i1> %3 to <2 x i64>
26822  ret <2 x i64> %4
26823}
26824
26825define <2 x i64> @ugt_57_v2i64(<2 x i64> %0) {
26826; PWR5-LABEL: ugt_57_v2i64:
26827; PWR5:       # %bb.0:
26828; PWR5-NEXT:    lis 5, 21845
26829; PWR5-NEXT:    lis 6, 13107
26830; PWR5-NEXT:    ori 5, 5, 21845
26831; PWR5-NEXT:    rotldi 8, 4, 63
26832; PWR5-NEXT:    rotldi 9, 3, 63
26833; PWR5-NEXT:    rldimi 5, 5, 32, 0
26834; PWR5-NEXT:    and 8, 8, 5
26835; PWR5-NEXT:    and 5, 9, 5
26836; PWR5-NEXT:    ori 6, 6, 13107
26837; PWR5-NEXT:    sub 3, 3, 5
26838; PWR5-NEXT:    rldimi 6, 6, 32, 0
26839; PWR5-NEXT:    sub 4, 4, 8
26840; PWR5-NEXT:    and 8, 3, 6
26841; PWR5-NEXT:    rotldi 3, 3, 62
26842; PWR5-NEXT:    and 3, 3, 6
26843; PWR5-NEXT:    lis 7, 3855
26844; PWR5-NEXT:    and 5, 4, 6
26845; PWR5-NEXT:    rotldi 4, 4, 62
26846; PWR5-NEXT:    add 3, 8, 3
26847; PWR5-NEXT:    lis 9, 257
26848; PWR5-NEXT:    ori 7, 7, 3855
26849; PWR5-NEXT:    and 4, 4, 6
26850; PWR5-NEXT:    rldicl 6, 3, 60, 4
26851; PWR5-NEXT:    ori 9, 9, 257
26852; PWR5-NEXT:    rldimi 7, 7, 32, 0
26853; PWR5-NEXT:    add 4, 5, 4
26854; PWR5-NEXT:    add 3, 3, 6
26855; PWR5-NEXT:    rldimi 9, 9, 32, 0
26856; PWR5-NEXT:    rldicl 5, 4, 60, 4
26857; PWR5-NEXT:    and 3, 3, 7
26858; PWR5-NEXT:    add 4, 4, 5
26859; PWR5-NEXT:    mulld 3, 3, 9
26860; PWR5-NEXT:    and 4, 4, 7
26861; PWR5-NEXT:    rldicl 3, 3, 8, 56
26862; PWR5-NEXT:    mulld 4, 4, 9
26863; PWR5-NEXT:    li 5, 57
26864; PWR5-NEXT:    subfic 3, 3, 57
26865; PWR5-NEXT:    rldicl 4, 4, 8, 56
26866; PWR5-NEXT:    subfe 3, 5, 5
26867; PWR5-NEXT:    subfic 4, 4, 57
26868; PWR5-NEXT:    subfe 4, 5, 5
26869; PWR5-NEXT:    blr
26870;
26871; PWR6-LABEL: ugt_57_v2i64:
26872; PWR6:       # %bb.0:
26873; PWR6-NEXT:    lis 5, 21845
26874; PWR6-NEXT:    lis 6, 13107
26875; PWR6-NEXT:    ori 5, 5, 21845
26876; PWR6-NEXT:    rotldi 8, 4, 63
26877; PWR6-NEXT:    rotldi 9, 3, 63
26878; PWR6-NEXT:    rldimi 5, 5, 32, 0
26879; PWR6-NEXT:    and 8, 8, 5
26880; PWR6-NEXT:    and 5, 9, 5
26881; PWR6-NEXT:    ori 6, 6, 13107
26882; PWR6-NEXT:    sub 3, 3, 5
26883; PWR6-NEXT:    rldimi 6, 6, 32, 0
26884; PWR6-NEXT:    sub 4, 4, 8
26885; PWR6-NEXT:    and 8, 3, 6
26886; PWR6-NEXT:    rotldi 3, 3, 62
26887; PWR6-NEXT:    and 3, 3, 6
26888; PWR6-NEXT:    lis 7, 3855
26889; PWR6-NEXT:    and 5, 4, 6
26890; PWR6-NEXT:    rotldi 4, 4, 62
26891; PWR6-NEXT:    add 3, 8, 3
26892; PWR6-NEXT:    lis 9, 257
26893; PWR6-NEXT:    ori 7, 7, 3855
26894; PWR6-NEXT:    and 4, 4, 6
26895; PWR6-NEXT:    rldicl 6, 3, 60, 4
26896; PWR6-NEXT:    ori 9, 9, 257
26897; PWR6-NEXT:    rldimi 7, 7, 32, 0
26898; PWR6-NEXT:    add 4, 5, 4
26899; PWR6-NEXT:    add 3, 3, 6
26900; PWR6-NEXT:    rldimi 9, 9, 32, 0
26901; PWR6-NEXT:    rldicl 5, 4, 60, 4
26902; PWR6-NEXT:    and 3, 3, 7
26903; PWR6-NEXT:    add 4, 4, 5
26904; PWR6-NEXT:    mulld 3, 3, 9
26905; PWR6-NEXT:    and 4, 4, 7
26906; PWR6-NEXT:    rldicl 3, 3, 8, 56
26907; PWR6-NEXT:    mulld 4, 4, 9
26908; PWR6-NEXT:    li 5, 57
26909; PWR6-NEXT:    subfic 3, 3, 57
26910; PWR6-NEXT:    rldicl 4, 4, 8, 56
26911; PWR6-NEXT:    subfe 3, 5, 5
26912; PWR6-NEXT:    subfic 4, 4, 57
26913; PWR6-NEXT:    subfe 4, 5, 5
26914; PWR6-NEXT:    blr
26915;
26916; PWR7-LABEL: ugt_57_v2i64:
26917; PWR7:       # %bb.0:
26918; PWR7-NEXT:    addi 3, 1, -32
26919; PWR7-NEXT:    li 5, -1
26920; PWR7-NEXT:    stxvd2x 34, 0, 3
26921; PWR7-NEXT:    ld 4, -24(1)
26922; PWR7-NEXT:    ld 3, -32(1)
26923; PWR7-NEXT:    popcntd 4, 4
26924; PWR7-NEXT:    popcntd 3, 3
26925; PWR7-NEXT:    cmpldi 4, 57
26926; PWR7-NEXT:    li 4, 0
26927; PWR7-NEXT:    iselgt 6, 5, 4
26928; PWR7-NEXT:    cmpldi 3, 57
26929; PWR7-NEXT:    iselgt 3, 5, 4
26930; PWR7-NEXT:    std 6, -8(1)
26931; PWR7-NEXT:    std 3, -16(1)
26932; PWR7-NEXT:    addi 3, 1, -16
26933; PWR7-NEXT:    lxvd2x 34, 0, 3
26934; PWR7-NEXT:    blr
26935;
26936; PWR8-LABEL: ugt_57_v2i64:
26937; PWR8:       # %bb.0:
26938; PWR8-NEXT:    addis 3, 2, .LCPI212_0@toc@ha
26939; PWR8-NEXT:    vpopcntd 2, 2
26940; PWR8-NEXT:    addi 3, 3, .LCPI212_0@toc@l
26941; PWR8-NEXT:    lxvd2x 35, 0, 3
26942; PWR8-NEXT:    vcmpgtud 2, 2, 3
26943; PWR8-NEXT:    blr
26944;
26945; PWR9-LABEL: ugt_57_v2i64:
26946; PWR9:       # %bb.0:
26947; PWR9-NEXT:    addis 3, 2, .LCPI212_0@toc@ha
26948; PWR9-NEXT:    vpopcntd 2, 2
26949; PWR9-NEXT:    addi 3, 3, .LCPI212_0@toc@l
26950; PWR9-NEXT:    lxv 35, 0(3)
26951; PWR9-NEXT:    vcmpgtud 2, 2, 3
26952; PWR9-NEXT:    blr
26953  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26954  %3 = icmp ugt <2 x i64> %2, <i64 57, i64 57>
26955  %4 = sext <2 x i1> %3 to <2 x i64>
26956  ret <2 x i64> %4
26957}
26958
26959define <2 x i64> @ult_58_v2i64(<2 x i64> %0) {
26960; PWR5-LABEL: ult_58_v2i64:
26961; PWR5:       # %bb.0:
26962; PWR5-NEXT:    lis 5, 21845
26963; PWR5-NEXT:    lis 6, 13107
26964; PWR5-NEXT:    ori 5, 5, 21845
26965; PWR5-NEXT:    rotldi 8, 4, 63
26966; PWR5-NEXT:    rotldi 9, 3, 63
26967; PWR5-NEXT:    rldimi 5, 5, 32, 0
26968; PWR5-NEXT:    and 8, 8, 5
26969; PWR5-NEXT:    and 5, 9, 5
26970; PWR5-NEXT:    ori 6, 6, 13107
26971; PWR5-NEXT:    sub 3, 3, 5
26972; PWR5-NEXT:    rldimi 6, 6, 32, 0
26973; PWR5-NEXT:    sub 4, 4, 8
26974; PWR5-NEXT:    and 8, 3, 6
26975; PWR5-NEXT:    rotldi 3, 3, 62
26976; PWR5-NEXT:    and 3, 3, 6
26977; PWR5-NEXT:    lis 7, 3855
26978; PWR5-NEXT:    and 5, 4, 6
26979; PWR5-NEXT:    rotldi 4, 4, 62
26980; PWR5-NEXT:    add 3, 8, 3
26981; PWR5-NEXT:    lis 9, 257
26982; PWR5-NEXT:    ori 7, 7, 3855
26983; PWR5-NEXT:    and 4, 4, 6
26984; PWR5-NEXT:    rldicl 6, 3, 60, 4
26985; PWR5-NEXT:    ori 9, 9, 257
26986; PWR5-NEXT:    rldimi 7, 7, 32, 0
26987; PWR5-NEXT:    add 4, 5, 4
26988; PWR5-NEXT:    add 3, 3, 6
26989; PWR5-NEXT:    rldimi 9, 9, 32, 0
26990; PWR5-NEXT:    rldicl 5, 4, 60, 4
26991; PWR5-NEXT:    and 3, 3, 7
26992; PWR5-NEXT:    add 4, 4, 5
26993; PWR5-NEXT:    mulld 3, 3, 9
26994; PWR5-NEXT:    and 4, 4, 7
26995; PWR5-NEXT:    rldicl 3, 3, 8, 56
26996; PWR5-NEXT:    li 5, 58
26997; PWR5-NEXT:    mulld 4, 4, 9
26998; PWR5-NEXT:    subc 6, 3, 5
26999; PWR5-NEXT:    rldicl 4, 4, 8, 56
27000; PWR5-NEXT:    subfe 3, 3, 3
27001; PWR5-NEXT:    subc 5, 4, 5
27002; PWR5-NEXT:    subfe 4, 4, 4
27003; PWR5-NEXT:    blr
27004;
27005; PWR6-LABEL: ult_58_v2i64:
27006; PWR6:       # %bb.0:
27007; PWR6-NEXT:    lis 5, 21845
27008; PWR6-NEXT:    lis 6, 13107
27009; PWR6-NEXT:    ori 5, 5, 21845
27010; PWR6-NEXT:    rotldi 8, 4, 63
27011; PWR6-NEXT:    rotldi 9, 3, 63
27012; PWR6-NEXT:    rldimi 5, 5, 32, 0
27013; PWR6-NEXT:    and 8, 8, 5
27014; PWR6-NEXT:    and 5, 9, 5
27015; PWR6-NEXT:    ori 6, 6, 13107
27016; PWR6-NEXT:    sub 3, 3, 5
27017; PWR6-NEXT:    rldimi 6, 6, 32, 0
27018; PWR6-NEXT:    sub 4, 4, 8
27019; PWR6-NEXT:    and 8, 3, 6
27020; PWR6-NEXT:    rotldi 3, 3, 62
27021; PWR6-NEXT:    and 3, 3, 6
27022; PWR6-NEXT:    lis 7, 3855
27023; PWR6-NEXT:    and 5, 4, 6
27024; PWR6-NEXT:    rotldi 4, 4, 62
27025; PWR6-NEXT:    add 3, 8, 3
27026; PWR6-NEXT:    lis 9, 257
27027; PWR6-NEXT:    ori 7, 7, 3855
27028; PWR6-NEXT:    and 4, 4, 6
27029; PWR6-NEXT:    rldicl 6, 3, 60, 4
27030; PWR6-NEXT:    ori 9, 9, 257
27031; PWR6-NEXT:    rldimi 7, 7, 32, 0
27032; PWR6-NEXT:    add 4, 5, 4
27033; PWR6-NEXT:    add 3, 3, 6
27034; PWR6-NEXT:    rldimi 9, 9, 32, 0
27035; PWR6-NEXT:    rldicl 5, 4, 60, 4
27036; PWR6-NEXT:    and 3, 3, 7
27037; PWR6-NEXT:    add 4, 4, 5
27038; PWR6-NEXT:    mulld 3, 3, 9
27039; PWR6-NEXT:    and 4, 4, 7
27040; PWR6-NEXT:    rldicl 3, 3, 8, 56
27041; PWR6-NEXT:    li 5, 58
27042; PWR6-NEXT:    mulld 4, 4, 9
27043; PWR6-NEXT:    subc 6, 3, 5
27044; PWR6-NEXT:    rldicl 4, 4, 8, 56
27045; PWR6-NEXT:    subfe 3, 3, 3
27046; PWR6-NEXT:    subc 5, 4, 5
27047; PWR6-NEXT:    subfe 4, 4, 4
27048; PWR6-NEXT:    blr
27049;
27050; PWR7-LABEL: ult_58_v2i64:
27051; PWR7:       # %bb.0:
27052; PWR7-NEXT:    addi 3, 1, -32
27053; PWR7-NEXT:    li 5, -1
27054; PWR7-NEXT:    stxvd2x 34, 0, 3
27055; PWR7-NEXT:    ld 4, -24(1)
27056; PWR7-NEXT:    ld 3, -32(1)
27057; PWR7-NEXT:    popcntd 4, 4
27058; PWR7-NEXT:    popcntd 3, 3
27059; PWR7-NEXT:    cmpldi 4, 58
27060; PWR7-NEXT:    li 4, 0
27061; PWR7-NEXT:    isellt 6, 5, 4
27062; PWR7-NEXT:    cmpldi 3, 58
27063; PWR7-NEXT:    isellt 3, 5, 4
27064; PWR7-NEXT:    std 6, -8(1)
27065; PWR7-NEXT:    std 3, -16(1)
27066; PWR7-NEXT:    addi 3, 1, -16
27067; PWR7-NEXT:    lxvd2x 34, 0, 3
27068; PWR7-NEXT:    blr
27069;
27070; PWR8-LABEL: ult_58_v2i64:
27071; PWR8:       # %bb.0:
27072; PWR8-NEXT:    addis 3, 2, .LCPI213_0@toc@ha
27073; PWR8-NEXT:    vpopcntd 2, 2
27074; PWR8-NEXT:    addi 3, 3, .LCPI213_0@toc@l
27075; PWR8-NEXT:    lxvd2x 35, 0, 3
27076; PWR8-NEXT:    vcmpgtud 2, 3, 2
27077; PWR8-NEXT:    blr
27078;
27079; PWR9-LABEL: ult_58_v2i64:
27080; PWR9:       # %bb.0:
27081; PWR9-NEXT:    addis 3, 2, .LCPI213_0@toc@ha
27082; PWR9-NEXT:    vpopcntd 2, 2
27083; PWR9-NEXT:    addi 3, 3, .LCPI213_0@toc@l
27084; PWR9-NEXT:    lxv 35, 0(3)
27085; PWR9-NEXT:    vcmpgtud 2, 3, 2
27086; PWR9-NEXT:    blr
27087  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27088  %3 = icmp ult <2 x i64> %2, <i64 58, i64 58>
27089  %4 = sext <2 x i1> %3 to <2 x i64>
27090  ret <2 x i64> %4
27091}
27092
27093define <2 x i64> @ugt_58_v2i64(<2 x i64> %0) {
27094; PWR5-LABEL: ugt_58_v2i64:
27095; PWR5:       # %bb.0:
27096; PWR5-NEXT:    lis 5, 21845
27097; PWR5-NEXT:    lis 6, 13107
27098; PWR5-NEXT:    ori 5, 5, 21845
27099; PWR5-NEXT:    rotldi 8, 4, 63
27100; PWR5-NEXT:    rotldi 9, 3, 63
27101; PWR5-NEXT:    rldimi 5, 5, 32, 0
27102; PWR5-NEXT:    and 8, 8, 5
27103; PWR5-NEXT:    and 5, 9, 5
27104; PWR5-NEXT:    ori 6, 6, 13107
27105; PWR5-NEXT:    sub 3, 3, 5
27106; PWR5-NEXT:    rldimi 6, 6, 32, 0
27107; PWR5-NEXT:    sub 4, 4, 8
27108; PWR5-NEXT:    and 8, 3, 6
27109; PWR5-NEXT:    rotldi 3, 3, 62
27110; PWR5-NEXT:    and 3, 3, 6
27111; PWR5-NEXT:    lis 7, 3855
27112; PWR5-NEXT:    and 5, 4, 6
27113; PWR5-NEXT:    rotldi 4, 4, 62
27114; PWR5-NEXT:    add 3, 8, 3
27115; PWR5-NEXT:    lis 9, 257
27116; PWR5-NEXT:    ori 7, 7, 3855
27117; PWR5-NEXT:    and 4, 4, 6
27118; PWR5-NEXT:    rldicl 6, 3, 60, 4
27119; PWR5-NEXT:    ori 9, 9, 257
27120; PWR5-NEXT:    rldimi 7, 7, 32, 0
27121; PWR5-NEXT:    add 4, 5, 4
27122; PWR5-NEXT:    add 3, 3, 6
27123; PWR5-NEXT:    rldimi 9, 9, 32, 0
27124; PWR5-NEXT:    rldicl 5, 4, 60, 4
27125; PWR5-NEXT:    and 3, 3, 7
27126; PWR5-NEXT:    add 4, 4, 5
27127; PWR5-NEXT:    mulld 3, 3, 9
27128; PWR5-NEXT:    and 4, 4, 7
27129; PWR5-NEXT:    rldicl 3, 3, 8, 56
27130; PWR5-NEXT:    mulld 4, 4, 9
27131; PWR5-NEXT:    li 5, 58
27132; PWR5-NEXT:    subfic 3, 3, 58
27133; PWR5-NEXT:    rldicl 4, 4, 8, 56
27134; PWR5-NEXT:    subfe 3, 5, 5
27135; PWR5-NEXT:    subfic 4, 4, 58
27136; PWR5-NEXT:    subfe 4, 5, 5
27137; PWR5-NEXT:    blr
27138;
27139; PWR6-LABEL: ugt_58_v2i64:
27140; PWR6:       # %bb.0:
27141; PWR6-NEXT:    lis 5, 21845
27142; PWR6-NEXT:    lis 6, 13107
27143; PWR6-NEXT:    ori 5, 5, 21845
27144; PWR6-NEXT:    rotldi 8, 4, 63
27145; PWR6-NEXT:    rotldi 9, 3, 63
27146; PWR6-NEXT:    rldimi 5, 5, 32, 0
27147; PWR6-NEXT:    and 8, 8, 5
27148; PWR6-NEXT:    and 5, 9, 5
27149; PWR6-NEXT:    ori 6, 6, 13107
27150; PWR6-NEXT:    sub 3, 3, 5
27151; PWR6-NEXT:    rldimi 6, 6, 32, 0
27152; PWR6-NEXT:    sub 4, 4, 8
27153; PWR6-NEXT:    and 8, 3, 6
27154; PWR6-NEXT:    rotldi 3, 3, 62
27155; PWR6-NEXT:    and 3, 3, 6
27156; PWR6-NEXT:    lis 7, 3855
27157; PWR6-NEXT:    and 5, 4, 6
27158; PWR6-NEXT:    rotldi 4, 4, 62
27159; PWR6-NEXT:    add 3, 8, 3
27160; PWR6-NEXT:    lis 9, 257
27161; PWR6-NEXT:    ori 7, 7, 3855
27162; PWR6-NEXT:    and 4, 4, 6
27163; PWR6-NEXT:    rldicl 6, 3, 60, 4
27164; PWR6-NEXT:    ori 9, 9, 257
27165; PWR6-NEXT:    rldimi 7, 7, 32, 0
27166; PWR6-NEXT:    add 4, 5, 4
27167; PWR6-NEXT:    add 3, 3, 6
27168; PWR6-NEXT:    rldimi 9, 9, 32, 0
27169; PWR6-NEXT:    rldicl 5, 4, 60, 4
27170; PWR6-NEXT:    and 3, 3, 7
27171; PWR6-NEXT:    add 4, 4, 5
27172; PWR6-NEXT:    mulld 3, 3, 9
27173; PWR6-NEXT:    and 4, 4, 7
27174; PWR6-NEXT:    rldicl 3, 3, 8, 56
27175; PWR6-NEXT:    mulld 4, 4, 9
27176; PWR6-NEXT:    li 5, 58
27177; PWR6-NEXT:    subfic 3, 3, 58
27178; PWR6-NEXT:    rldicl 4, 4, 8, 56
27179; PWR6-NEXT:    subfe 3, 5, 5
27180; PWR6-NEXT:    subfic 4, 4, 58
27181; PWR6-NEXT:    subfe 4, 5, 5
27182; PWR6-NEXT:    blr
27183;
27184; PWR7-LABEL: ugt_58_v2i64:
27185; PWR7:       # %bb.0:
27186; PWR7-NEXT:    addi 3, 1, -32
27187; PWR7-NEXT:    li 5, -1
27188; PWR7-NEXT:    stxvd2x 34, 0, 3
27189; PWR7-NEXT:    ld 4, -24(1)
27190; PWR7-NEXT:    ld 3, -32(1)
27191; PWR7-NEXT:    popcntd 4, 4
27192; PWR7-NEXT:    popcntd 3, 3
27193; PWR7-NEXT:    cmpldi 4, 58
27194; PWR7-NEXT:    li 4, 0
27195; PWR7-NEXT:    iselgt 6, 5, 4
27196; PWR7-NEXT:    cmpldi 3, 58
27197; PWR7-NEXT:    iselgt 3, 5, 4
27198; PWR7-NEXT:    std 6, -8(1)
27199; PWR7-NEXT:    std 3, -16(1)
27200; PWR7-NEXT:    addi 3, 1, -16
27201; PWR7-NEXT:    lxvd2x 34, 0, 3
27202; PWR7-NEXT:    blr
27203;
27204; PWR8-LABEL: ugt_58_v2i64:
27205; PWR8:       # %bb.0:
27206; PWR8-NEXT:    addis 3, 2, .LCPI214_0@toc@ha
27207; PWR8-NEXT:    vpopcntd 2, 2
27208; PWR8-NEXT:    addi 3, 3, .LCPI214_0@toc@l
27209; PWR8-NEXT:    lxvd2x 35, 0, 3
27210; PWR8-NEXT:    vcmpgtud 2, 2, 3
27211; PWR8-NEXT:    blr
27212;
27213; PWR9-LABEL: ugt_58_v2i64:
27214; PWR9:       # %bb.0:
27215; PWR9-NEXT:    addis 3, 2, .LCPI214_0@toc@ha
27216; PWR9-NEXT:    vpopcntd 2, 2
27217; PWR9-NEXT:    addi 3, 3, .LCPI214_0@toc@l
27218; PWR9-NEXT:    lxv 35, 0(3)
27219; PWR9-NEXT:    vcmpgtud 2, 2, 3
27220; PWR9-NEXT:    blr
27221  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27222  %3 = icmp ugt <2 x i64> %2, <i64 58, i64 58>
27223  %4 = sext <2 x i1> %3 to <2 x i64>
27224  ret <2 x i64> %4
27225}
27226
27227define <2 x i64> @ult_59_v2i64(<2 x i64> %0) {
27228; PWR5-LABEL: ult_59_v2i64:
27229; PWR5:       # %bb.0:
27230; PWR5-NEXT:    lis 5, 21845
27231; PWR5-NEXT:    lis 6, 13107
27232; PWR5-NEXT:    ori 5, 5, 21845
27233; PWR5-NEXT:    rotldi 8, 4, 63
27234; PWR5-NEXT:    rotldi 9, 3, 63
27235; PWR5-NEXT:    rldimi 5, 5, 32, 0
27236; PWR5-NEXT:    and 8, 8, 5
27237; PWR5-NEXT:    and 5, 9, 5
27238; PWR5-NEXT:    ori 6, 6, 13107
27239; PWR5-NEXT:    sub 3, 3, 5
27240; PWR5-NEXT:    rldimi 6, 6, 32, 0
27241; PWR5-NEXT:    sub 4, 4, 8
27242; PWR5-NEXT:    and 8, 3, 6
27243; PWR5-NEXT:    rotldi 3, 3, 62
27244; PWR5-NEXT:    and 3, 3, 6
27245; PWR5-NEXT:    lis 7, 3855
27246; PWR5-NEXT:    and 5, 4, 6
27247; PWR5-NEXT:    rotldi 4, 4, 62
27248; PWR5-NEXT:    add 3, 8, 3
27249; PWR5-NEXT:    lis 9, 257
27250; PWR5-NEXT:    ori 7, 7, 3855
27251; PWR5-NEXT:    and 4, 4, 6
27252; PWR5-NEXT:    rldicl 6, 3, 60, 4
27253; PWR5-NEXT:    ori 9, 9, 257
27254; PWR5-NEXT:    rldimi 7, 7, 32, 0
27255; PWR5-NEXT:    add 4, 5, 4
27256; PWR5-NEXT:    add 3, 3, 6
27257; PWR5-NEXT:    rldimi 9, 9, 32, 0
27258; PWR5-NEXT:    rldicl 5, 4, 60, 4
27259; PWR5-NEXT:    and 3, 3, 7
27260; PWR5-NEXT:    add 4, 4, 5
27261; PWR5-NEXT:    mulld 3, 3, 9
27262; PWR5-NEXT:    and 4, 4, 7
27263; PWR5-NEXT:    rldicl 3, 3, 8, 56
27264; PWR5-NEXT:    li 5, 59
27265; PWR5-NEXT:    mulld 4, 4, 9
27266; PWR5-NEXT:    subc 6, 3, 5
27267; PWR5-NEXT:    rldicl 4, 4, 8, 56
27268; PWR5-NEXT:    subfe 3, 3, 3
27269; PWR5-NEXT:    subc 5, 4, 5
27270; PWR5-NEXT:    subfe 4, 4, 4
27271; PWR5-NEXT:    blr
27272;
27273; PWR6-LABEL: ult_59_v2i64:
27274; PWR6:       # %bb.0:
27275; PWR6-NEXT:    lis 5, 21845
27276; PWR6-NEXT:    lis 6, 13107
27277; PWR6-NEXT:    ori 5, 5, 21845
27278; PWR6-NEXT:    rotldi 8, 4, 63
27279; PWR6-NEXT:    rotldi 9, 3, 63
27280; PWR6-NEXT:    rldimi 5, 5, 32, 0
27281; PWR6-NEXT:    and 8, 8, 5
27282; PWR6-NEXT:    and 5, 9, 5
27283; PWR6-NEXT:    ori 6, 6, 13107
27284; PWR6-NEXT:    sub 3, 3, 5
27285; PWR6-NEXT:    rldimi 6, 6, 32, 0
27286; PWR6-NEXT:    sub 4, 4, 8
27287; PWR6-NEXT:    and 8, 3, 6
27288; PWR6-NEXT:    rotldi 3, 3, 62
27289; PWR6-NEXT:    and 3, 3, 6
27290; PWR6-NEXT:    lis 7, 3855
27291; PWR6-NEXT:    and 5, 4, 6
27292; PWR6-NEXT:    rotldi 4, 4, 62
27293; PWR6-NEXT:    add 3, 8, 3
27294; PWR6-NEXT:    lis 9, 257
27295; PWR6-NEXT:    ori 7, 7, 3855
27296; PWR6-NEXT:    and 4, 4, 6
27297; PWR6-NEXT:    rldicl 6, 3, 60, 4
27298; PWR6-NEXT:    ori 9, 9, 257
27299; PWR6-NEXT:    rldimi 7, 7, 32, 0
27300; PWR6-NEXT:    add 4, 5, 4
27301; PWR6-NEXT:    add 3, 3, 6
27302; PWR6-NEXT:    rldimi 9, 9, 32, 0
27303; PWR6-NEXT:    rldicl 5, 4, 60, 4
27304; PWR6-NEXT:    and 3, 3, 7
27305; PWR6-NEXT:    add 4, 4, 5
27306; PWR6-NEXT:    mulld 3, 3, 9
27307; PWR6-NEXT:    and 4, 4, 7
27308; PWR6-NEXT:    rldicl 3, 3, 8, 56
27309; PWR6-NEXT:    li 5, 59
27310; PWR6-NEXT:    mulld 4, 4, 9
27311; PWR6-NEXT:    subc 6, 3, 5
27312; PWR6-NEXT:    rldicl 4, 4, 8, 56
27313; PWR6-NEXT:    subfe 3, 3, 3
27314; PWR6-NEXT:    subc 5, 4, 5
27315; PWR6-NEXT:    subfe 4, 4, 4
27316; PWR6-NEXT:    blr
27317;
27318; PWR7-LABEL: ult_59_v2i64:
27319; PWR7:       # %bb.0:
27320; PWR7-NEXT:    addi 3, 1, -32
27321; PWR7-NEXT:    li 5, -1
27322; PWR7-NEXT:    stxvd2x 34, 0, 3
27323; PWR7-NEXT:    ld 4, -24(1)
27324; PWR7-NEXT:    ld 3, -32(1)
27325; PWR7-NEXT:    popcntd 4, 4
27326; PWR7-NEXT:    popcntd 3, 3
27327; PWR7-NEXT:    cmpldi 4, 59
27328; PWR7-NEXT:    li 4, 0
27329; PWR7-NEXT:    isellt 6, 5, 4
27330; PWR7-NEXT:    cmpldi 3, 59
27331; PWR7-NEXT:    isellt 3, 5, 4
27332; PWR7-NEXT:    std 6, -8(1)
27333; PWR7-NEXT:    std 3, -16(1)
27334; PWR7-NEXT:    addi 3, 1, -16
27335; PWR7-NEXT:    lxvd2x 34, 0, 3
27336; PWR7-NEXT:    blr
27337;
27338; PWR8-LABEL: ult_59_v2i64:
27339; PWR8:       # %bb.0:
27340; PWR8-NEXT:    addis 3, 2, .LCPI215_0@toc@ha
27341; PWR8-NEXT:    vpopcntd 2, 2
27342; PWR8-NEXT:    addi 3, 3, .LCPI215_0@toc@l
27343; PWR8-NEXT:    lxvd2x 35, 0, 3
27344; PWR8-NEXT:    vcmpgtud 2, 3, 2
27345; PWR8-NEXT:    blr
27346;
27347; PWR9-LABEL: ult_59_v2i64:
27348; PWR9:       # %bb.0:
27349; PWR9-NEXT:    addis 3, 2, .LCPI215_0@toc@ha
27350; PWR9-NEXT:    vpopcntd 2, 2
27351; PWR9-NEXT:    addi 3, 3, .LCPI215_0@toc@l
27352; PWR9-NEXT:    lxv 35, 0(3)
27353; PWR9-NEXT:    vcmpgtud 2, 3, 2
27354; PWR9-NEXT:    blr
27355  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27356  %3 = icmp ult <2 x i64> %2, <i64 59, i64 59>
27357  %4 = sext <2 x i1> %3 to <2 x i64>
27358  ret <2 x i64> %4
27359}
27360
27361define <2 x i64> @ugt_59_v2i64(<2 x i64> %0) {
27362; PWR5-LABEL: ugt_59_v2i64:
27363; PWR5:       # %bb.0:
27364; PWR5-NEXT:    lis 5, 21845
27365; PWR5-NEXT:    lis 6, 13107
27366; PWR5-NEXT:    ori 5, 5, 21845
27367; PWR5-NEXT:    rotldi 8, 4, 63
27368; PWR5-NEXT:    rotldi 9, 3, 63
27369; PWR5-NEXT:    rldimi 5, 5, 32, 0
27370; PWR5-NEXT:    and 8, 8, 5
27371; PWR5-NEXT:    and 5, 9, 5
27372; PWR5-NEXT:    ori 6, 6, 13107
27373; PWR5-NEXT:    sub 3, 3, 5
27374; PWR5-NEXT:    rldimi 6, 6, 32, 0
27375; PWR5-NEXT:    sub 4, 4, 8
27376; PWR5-NEXT:    and 8, 3, 6
27377; PWR5-NEXT:    rotldi 3, 3, 62
27378; PWR5-NEXT:    and 3, 3, 6
27379; PWR5-NEXT:    lis 7, 3855
27380; PWR5-NEXT:    and 5, 4, 6
27381; PWR5-NEXT:    rotldi 4, 4, 62
27382; PWR5-NEXT:    add 3, 8, 3
27383; PWR5-NEXT:    lis 9, 257
27384; PWR5-NEXT:    ori 7, 7, 3855
27385; PWR5-NEXT:    and 4, 4, 6
27386; PWR5-NEXT:    rldicl 6, 3, 60, 4
27387; PWR5-NEXT:    ori 9, 9, 257
27388; PWR5-NEXT:    rldimi 7, 7, 32, 0
27389; PWR5-NEXT:    add 4, 5, 4
27390; PWR5-NEXT:    add 3, 3, 6
27391; PWR5-NEXT:    rldimi 9, 9, 32, 0
27392; PWR5-NEXT:    rldicl 5, 4, 60, 4
27393; PWR5-NEXT:    and 3, 3, 7
27394; PWR5-NEXT:    add 4, 4, 5
27395; PWR5-NEXT:    mulld 3, 3, 9
27396; PWR5-NEXT:    and 4, 4, 7
27397; PWR5-NEXT:    rldicl 3, 3, 8, 56
27398; PWR5-NEXT:    mulld 4, 4, 9
27399; PWR5-NEXT:    li 5, 59
27400; PWR5-NEXT:    subfic 3, 3, 59
27401; PWR5-NEXT:    rldicl 4, 4, 8, 56
27402; PWR5-NEXT:    subfe 3, 5, 5
27403; PWR5-NEXT:    subfic 4, 4, 59
27404; PWR5-NEXT:    subfe 4, 5, 5
27405; PWR5-NEXT:    blr
27406;
27407; PWR6-LABEL: ugt_59_v2i64:
27408; PWR6:       # %bb.0:
27409; PWR6-NEXT:    lis 5, 21845
27410; PWR6-NEXT:    lis 6, 13107
27411; PWR6-NEXT:    ori 5, 5, 21845
27412; PWR6-NEXT:    rotldi 8, 4, 63
27413; PWR6-NEXT:    rotldi 9, 3, 63
27414; PWR6-NEXT:    rldimi 5, 5, 32, 0
27415; PWR6-NEXT:    and 8, 8, 5
27416; PWR6-NEXT:    and 5, 9, 5
27417; PWR6-NEXT:    ori 6, 6, 13107
27418; PWR6-NEXT:    sub 3, 3, 5
27419; PWR6-NEXT:    rldimi 6, 6, 32, 0
27420; PWR6-NEXT:    sub 4, 4, 8
27421; PWR6-NEXT:    and 8, 3, 6
27422; PWR6-NEXT:    rotldi 3, 3, 62
27423; PWR6-NEXT:    and 3, 3, 6
27424; PWR6-NEXT:    lis 7, 3855
27425; PWR6-NEXT:    and 5, 4, 6
27426; PWR6-NEXT:    rotldi 4, 4, 62
27427; PWR6-NEXT:    add 3, 8, 3
27428; PWR6-NEXT:    lis 9, 257
27429; PWR6-NEXT:    ori 7, 7, 3855
27430; PWR6-NEXT:    and 4, 4, 6
27431; PWR6-NEXT:    rldicl 6, 3, 60, 4
27432; PWR6-NEXT:    ori 9, 9, 257
27433; PWR6-NEXT:    rldimi 7, 7, 32, 0
27434; PWR6-NEXT:    add 4, 5, 4
27435; PWR6-NEXT:    add 3, 3, 6
27436; PWR6-NEXT:    rldimi 9, 9, 32, 0
27437; PWR6-NEXT:    rldicl 5, 4, 60, 4
27438; PWR6-NEXT:    and 3, 3, 7
27439; PWR6-NEXT:    add 4, 4, 5
27440; PWR6-NEXT:    mulld 3, 3, 9
27441; PWR6-NEXT:    and 4, 4, 7
27442; PWR6-NEXT:    rldicl 3, 3, 8, 56
27443; PWR6-NEXT:    mulld 4, 4, 9
27444; PWR6-NEXT:    li 5, 59
27445; PWR6-NEXT:    subfic 3, 3, 59
27446; PWR6-NEXT:    rldicl 4, 4, 8, 56
27447; PWR6-NEXT:    subfe 3, 5, 5
27448; PWR6-NEXT:    subfic 4, 4, 59
27449; PWR6-NEXT:    subfe 4, 5, 5
27450; PWR6-NEXT:    blr
27451;
27452; PWR7-LABEL: ugt_59_v2i64:
27453; PWR7:       # %bb.0:
27454; PWR7-NEXT:    addi 3, 1, -32
27455; PWR7-NEXT:    li 5, -1
27456; PWR7-NEXT:    stxvd2x 34, 0, 3
27457; PWR7-NEXT:    ld 4, -24(1)
27458; PWR7-NEXT:    ld 3, -32(1)
27459; PWR7-NEXT:    popcntd 4, 4
27460; PWR7-NEXT:    popcntd 3, 3
27461; PWR7-NEXT:    cmpldi 4, 59
27462; PWR7-NEXT:    li 4, 0
27463; PWR7-NEXT:    iselgt 6, 5, 4
27464; PWR7-NEXT:    cmpldi 3, 59
27465; PWR7-NEXT:    iselgt 3, 5, 4
27466; PWR7-NEXT:    std 6, -8(1)
27467; PWR7-NEXT:    std 3, -16(1)
27468; PWR7-NEXT:    addi 3, 1, -16
27469; PWR7-NEXT:    lxvd2x 34, 0, 3
27470; PWR7-NEXT:    blr
27471;
27472; PWR8-LABEL: ugt_59_v2i64:
27473; PWR8:       # %bb.0:
27474; PWR8-NEXT:    addis 3, 2, .LCPI216_0@toc@ha
27475; PWR8-NEXT:    vpopcntd 2, 2
27476; PWR8-NEXT:    addi 3, 3, .LCPI216_0@toc@l
27477; PWR8-NEXT:    lxvd2x 35, 0, 3
27478; PWR8-NEXT:    vcmpgtud 2, 2, 3
27479; PWR8-NEXT:    blr
27480;
27481; PWR9-LABEL: ugt_59_v2i64:
27482; PWR9:       # %bb.0:
27483; PWR9-NEXT:    addis 3, 2, .LCPI216_0@toc@ha
27484; PWR9-NEXT:    vpopcntd 2, 2
27485; PWR9-NEXT:    addi 3, 3, .LCPI216_0@toc@l
27486; PWR9-NEXT:    lxv 35, 0(3)
27487; PWR9-NEXT:    vcmpgtud 2, 2, 3
27488; PWR9-NEXT:    blr
27489  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27490  %3 = icmp ugt <2 x i64> %2, <i64 59, i64 59>
27491  %4 = sext <2 x i1> %3 to <2 x i64>
27492  ret <2 x i64> %4
27493}
27494
27495define <2 x i64> @ult_60_v2i64(<2 x i64> %0) {
27496; PWR5-LABEL: ult_60_v2i64:
27497; PWR5:       # %bb.0:
27498; PWR5-NEXT:    lis 5, 21845
27499; PWR5-NEXT:    lis 6, 13107
27500; PWR5-NEXT:    ori 5, 5, 21845
27501; PWR5-NEXT:    rotldi 8, 4, 63
27502; PWR5-NEXT:    rotldi 9, 3, 63
27503; PWR5-NEXT:    rldimi 5, 5, 32, 0
27504; PWR5-NEXT:    and 8, 8, 5
27505; PWR5-NEXT:    and 5, 9, 5
27506; PWR5-NEXT:    ori 6, 6, 13107
27507; PWR5-NEXT:    sub 3, 3, 5
27508; PWR5-NEXT:    rldimi 6, 6, 32, 0
27509; PWR5-NEXT:    sub 4, 4, 8
27510; PWR5-NEXT:    and 8, 3, 6
27511; PWR5-NEXT:    rotldi 3, 3, 62
27512; PWR5-NEXT:    and 3, 3, 6
27513; PWR5-NEXT:    lis 7, 3855
27514; PWR5-NEXT:    and 5, 4, 6
27515; PWR5-NEXT:    rotldi 4, 4, 62
27516; PWR5-NEXT:    add 3, 8, 3
27517; PWR5-NEXT:    lis 9, 257
27518; PWR5-NEXT:    ori 7, 7, 3855
27519; PWR5-NEXT:    and 4, 4, 6
27520; PWR5-NEXT:    rldicl 6, 3, 60, 4
27521; PWR5-NEXT:    ori 9, 9, 257
27522; PWR5-NEXT:    rldimi 7, 7, 32, 0
27523; PWR5-NEXT:    add 4, 5, 4
27524; PWR5-NEXT:    add 3, 3, 6
27525; PWR5-NEXT:    rldimi 9, 9, 32, 0
27526; PWR5-NEXT:    rldicl 5, 4, 60, 4
27527; PWR5-NEXT:    and 3, 3, 7
27528; PWR5-NEXT:    add 4, 4, 5
27529; PWR5-NEXT:    mulld 3, 3, 9
27530; PWR5-NEXT:    and 4, 4, 7
27531; PWR5-NEXT:    rldicl 3, 3, 8, 56
27532; PWR5-NEXT:    li 5, 60
27533; PWR5-NEXT:    mulld 4, 4, 9
27534; PWR5-NEXT:    subc 6, 3, 5
27535; PWR5-NEXT:    rldicl 4, 4, 8, 56
27536; PWR5-NEXT:    subfe 3, 3, 3
27537; PWR5-NEXT:    subc 5, 4, 5
27538; PWR5-NEXT:    subfe 4, 4, 4
27539; PWR5-NEXT:    blr
27540;
27541; PWR6-LABEL: ult_60_v2i64:
27542; PWR6:       # %bb.0:
27543; PWR6-NEXT:    lis 5, 21845
27544; PWR6-NEXT:    lis 6, 13107
27545; PWR6-NEXT:    ori 5, 5, 21845
27546; PWR6-NEXT:    rotldi 8, 4, 63
27547; PWR6-NEXT:    rotldi 9, 3, 63
27548; PWR6-NEXT:    rldimi 5, 5, 32, 0
27549; PWR6-NEXT:    and 8, 8, 5
27550; PWR6-NEXT:    and 5, 9, 5
27551; PWR6-NEXT:    ori 6, 6, 13107
27552; PWR6-NEXT:    sub 3, 3, 5
27553; PWR6-NEXT:    rldimi 6, 6, 32, 0
27554; PWR6-NEXT:    sub 4, 4, 8
27555; PWR6-NEXT:    and 8, 3, 6
27556; PWR6-NEXT:    rotldi 3, 3, 62
27557; PWR6-NEXT:    and 3, 3, 6
27558; PWR6-NEXT:    lis 7, 3855
27559; PWR6-NEXT:    and 5, 4, 6
27560; PWR6-NEXT:    rotldi 4, 4, 62
27561; PWR6-NEXT:    add 3, 8, 3
27562; PWR6-NEXT:    lis 9, 257
27563; PWR6-NEXT:    ori 7, 7, 3855
27564; PWR6-NEXT:    and 4, 4, 6
27565; PWR6-NEXT:    rldicl 6, 3, 60, 4
27566; PWR6-NEXT:    ori 9, 9, 257
27567; PWR6-NEXT:    rldimi 7, 7, 32, 0
27568; PWR6-NEXT:    add 4, 5, 4
27569; PWR6-NEXT:    add 3, 3, 6
27570; PWR6-NEXT:    rldimi 9, 9, 32, 0
27571; PWR6-NEXT:    rldicl 5, 4, 60, 4
27572; PWR6-NEXT:    and 3, 3, 7
27573; PWR6-NEXT:    add 4, 4, 5
27574; PWR6-NEXT:    mulld 3, 3, 9
27575; PWR6-NEXT:    and 4, 4, 7
27576; PWR6-NEXT:    rldicl 3, 3, 8, 56
27577; PWR6-NEXT:    li 5, 60
27578; PWR6-NEXT:    mulld 4, 4, 9
27579; PWR6-NEXT:    subc 6, 3, 5
27580; PWR6-NEXT:    rldicl 4, 4, 8, 56
27581; PWR6-NEXT:    subfe 3, 3, 3
27582; PWR6-NEXT:    subc 5, 4, 5
27583; PWR6-NEXT:    subfe 4, 4, 4
27584; PWR6-NEXT:    blr
27585;
27586; PWR7-LABEL: ult_60_v2i64:
27587; PWR7:       # %bb.0:
27588; PWR7-NEXT:    addi 3, 1, -32
27589; PWR7-NEXT:    li 5, -1
27590; PWR7-NEXT:    stxvd2x 34, 0, 3
27591; PWR7-NEXT:    ld 4, -24(1)
27592; PWR7-NEXT:    ld 3, -32(1)
27593; PWR7-NEXT:    popcntd 4, 4
27594; PWR7-NEXT:    popcntd 3, 3
27595; PWR7-NEXT:    cmpldi 4, 60
27596; PWR7-NEXT:    li 4, 0
27597; PWR7-NEXT:    isellt 6, 5, 4
27598; PWR7-NEXT:    cmpldi 3, 60
27599; PWR7-NEXT:    isellt 3, 5, 4
27600; PWR7-NEXT:    std 6, -8(1)
27601; PWR7-NEXT:    std 3, -16(1)
27602; PWR7-NEXT:    addi 3, 1, -16
27603; PWR7-NEXT:    lxvd2x 34, 0, 3
27604; PWR7-NEXT:    blr
27605;
27606; PWR8-LABEL: ult_60_v2i64:
27607; PWR8:       # %bb.0:
27608; PWR8-NEXT:    addis 3, 2, .LCPI217_0@toc@ha
27609; PWR8-NEXT:    vpopcntd 2, 2
27610; PWR8-NEXT:    addi 3, 3, .LCPI217_0@toc@l
27611; PWR8-NEXT:    lxvd2x 35, 0, 3
27612; PWR8-NEXT:    vcmpgtud 2, 3, 2
27613; PWR8-NEXT:    blr
27614;
27615; PWR9-LABEL: ult_60_v2i64:
27616; PWR9:       # %bb.0:
27617; PWR9-NEXT:    addis 3, 2, .LCPI217_0@toc@ha
27618; PWR9-NEXT:    vpopcntd 2, 2
27619; PWR9-NEXT:    addi 3, 3, .LCPI217_0@toc@l
27620; PWR9-NEXT:    lxv 35, 0(3)
27621; PWR9-NEXT:    vcmpgtud 2, 3, 2
27622; PWR9-NEXT:    blr
27623  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27624  %3 = icmp ult <2 x i64> %2, <i64 60, i64 60>
27625  %4 = sext <2 x i1> %3 to <2 x i64>
27626  ret <2 x i64> %4
27627}
27628
27629define <2 x i64> @ugt_60_v2i64(<2 x i64> %0) {
27630; PWR5-LABEL: ugt_60_v2i64:
27631; PWR5:       # %bb.0:
27632; PWR5-NEXT:    lis 5, 21845
27633; PWR5-NEXT:    lis 6, 13107
27634; PWR5-NEXT:    ori 5, 5, 21845
27635; PWR5-NEXT:    rotldi 8, 4, 63
27636; PWR5-NEXT:    rotldi 9, 3, 63
27637; PWR5-NEXT:    rldimi 5, 5, 32, 0
27638; PWR5-NEXT:    and 8, 8, 5
27639; PWR5-NEXT:    and 5, 9, 5
27640; PWR5-NEXT:    ori 6, 6, 13107
27641; PWR5-NEXT:    sub 3, 3, 5
27642; PWR5-NEXT:    rldimi 6, 6, 32, 0
27643; PWR5-NEXT:    sub 4, 4, 8
27644; PWR5-NEXT:    and 8, 3, 6
27645; PWR5-NEXT:    rotldi 3, 3, 62
27646; PWR5-NEXT:    and 3, 3, 6
27647; PWR5-NEXT:    lis 7, 3855
27648; PWR5-NEXT:    and 5, 4, 6
27649; PWR5-NEXT:    rotldi 4, 4, 62
27650; PWR5-NEXT:    add 3, 8, 3
27651; PWR5-NEXT:    lis 9, 257
27652; PWR5-NEXT:    ori 7, 7, 3855
27653; PWR5-NEXT:    and 4, 4, 6
27654; PWR5-NEXT:    rldicl 6, 3, 60, 4
27655; PWR5-NEXT:    ori 9, 9, 257
27656; PWR5-NEXT:    rldimi 7, 7, 32, 0
27657; PWR5-NEXT:    add 4, 5, 4
27658; PWR5-NEXT:    add 3, 3, 6
27659; PWR5-NEXT:    rldimi 9, 9, 32, 0
27660; PWR5-NEXT:    rldicl 5, 4, 60, 4
27661; PWR5-NEXT:    and 3, 3, 7
27662; PWR5-NEXT:    add 4, 4, 5
27663; PWR5-NEXT:    mulld 3, 3, 9
27664; PWR5-NEXT:    and 4, 4, 7
27665; PWR5-NEXT:    rldicl 3, 3, 8, 56
27666; PWR5-NEXT:    mulld 4, 4, 9
27667; PWR5-NEXT:    li 5, 60
27668; PWR5-NEXT:    subfic 3, 3, 60
27669; PWR5-NEXT:    rldicl 4, 4, 8, 56
27670; PWR5-NEXT:    subfe 3, 5, 5
27671; PWR5-NEXT:    subfic 4, 4, 60
27672; PWR5-NEXT:    subfe 4, 5, 5
27673; PWR5-NEXT:    blr
27674;
27675; PWR6-LABEL: ugt_60_v2i64:
27676; PWR6:       # %bb.0:
27677; PWR6-NEXT:    lis 5, 21845
27678; PWR6-NEXT:    lis 6, 13107
27679; PWR6-NEXT:    ori 5, 5, 21845
27680; PWR6-NEXT:    rotldi 8, 4, 63
27681; PWR6-NEXT:    rotldi 9, 3, 63
27682; PWR6-NEXT:    rldimi 5, 5, 32, 0
27683; PWR6-NEXT:    and 8, 8, 5
27684; PWR6-NEXT:    and 5, 9, 5
27685; PWR6-NEXT:    ori 6, 6, 13107
27686; PWR6-NEXT:    sub 3, 3, 5
27687; PWR6-NEXT:    rldimi 6, 6, 32, 0
27688; PWR6-NEXT:    sub 4, 4, 8
27689; PWR6-NEXT:    and 8, 3, 6
27690; PWR6-NEXT:    rotldi 3, 3, 62
27691; PWR6-NEXT:    and 3, 3, 6
27692; PWR6-NEXT:    lis 7, 3855
27693; PWR6-NEXT:    and 5, 4, 6
27694; PWR6-NEXT:    rotldi 4, 4, 62
27695; PWR6-NEXT:    add 3, 8, 3
27696; PWR6-NEXT:    lis 9, 257
27697; PWR6-NEXT:    ori 7, 7, 3855
27698; PWR6-NEXT:    and 4, 4, 6
27699; PWR6-NEXT:    rldicl 6, 3, 60, 4
27700; PWR6-NEXT:    ori 9, 9, 257
27701; PWR6-NEXT:    rldimi 7, 7, 32, 0
27702; PWR6-NEXT:    add 4, 5, 4
27703; PWR6-NEXT:    add 3, 3, 6
27704; PWR6-NEXT:    rldimi 9, 9, 32, 0
27705; PWR6-NEXT:    rldicl 5, 4, 60, 4
27706; PWR6-NEXT:    and 3, 3, 7
27707; PWR6-NEXT:    add 4, 4, 5
27708; PWR6-NEXT:    mulld 3, 3, 9
27709; PWR6-NEXT:    and 4, 4, 7
27710; PWR6-NEXT:    rldicl 3, 3, 8, 56
27711; PWR6-NEXT:    mulld 4, 4, 9
27712; PWR6-NEXT:    li 5, 60
27713; PWR6-NEXT:    subfic 3, 3, 60
27714; PWR6-NEXT:    rldicl 4, 4, 8, 56
27715; PWR6-NEXT:    subfe 3, 5, 5
27716; PWR6-NEXT:    subfic 4, 4, 60
27717; PWR6-NEXT:    subfe 4, 5, 5
27718; PWR6-NEXT:    blr
27719;
27720; PWR7-LABEL: ugt_60_v2i64:
27721; PWR7:       # %bb.0:
27722; PWR7-NEXT:    addi 3, 1, -32
27723; PWR7-NEXT:    li 5, -1
27724; PWR7-NEXT:    stxvd2x 34, 0, 3
27725; PWR7-NEXT:    ld 4, -24(1)
27726; PWR7-NEXT:    ld 3, -32(1)
27727; PWR7-NEXT:    popcntd 4, 4
27728; PWR7-NEXT:    popcntd 3, 3
27729; PWR7-NEXT:    cmpldi 4, 60
27730; PWR7-NEXT:    li 4, 0
27731; PWR7-NEXT:    iselgt 6, 5, 4
27732; PWR7-NEXT:    cmpldi 3, 60
27733; PWR7-NEXT:    iselgt 3, 5, 4
27734; PWR7-NEXT:    std 6, -8(1)
27735; PWR7-NEXT:    std 3, -16(1)
27736; PWR7-NEXT:    addi 3, 1, -16
27737; PWR7-NEXT:    lxvd2x 34, 0, 3
27738; PWR7-NEXT:    blr
27739;
27740; PWR8-LABEL: ugt_60_v2i64:
27741; PWR8:       # %bb.0:
27742; PWR8-NEXT:    addis 3, 2, .LCPI218_0@toc@ha
27743; PWR8-NEXT:    vpopcntd 2, 2
27744; PWR8-NEXT:    addi 3, 3, .LCPI218_0@toc@l
27745; PWR8-NEXT:    lxvd2x 35, 0, 3
27746; PWR8-NEXT:    vcmpgtud 2, 2, 3
27747; PWR8-NEXT:    blr
27748;
27749; PWR9-LABEL: ugt_60_v2i64:
27750; PWR9:       # %bb.0:
27751; PWR9-NEXT:    addis 3, 2, .LCPI218_0@toc@ha
27752; PWR9-NEXT:    vpopcntd 2, 2
27753; PWR9-NEXT:    addi 3, 3, .LCPI218_0@toc@l
27754; PWR9-NEXT:    lxv 35, 0(3)
27755; PWR9-NEXT:    vcmpgtud 2, 2, 3
27756; PWR9-NEXT:    blr
27757  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27758  %3 = icmp ugt <2 x i64> %2, <i64 60, i64 60>
27759  %4 = sext <2 x i1> %3 to <2 x i64>
27760  ret <2 x i64> %4
27761}
27762
27763define <2 x i64> @ult_61_v2i64(<2 x i64> %0) {
27764; PWR5-LABEL: ult_61_v2i64:
27765; PWR5:       # %bb.0:
27766; PWR5-NEXT:    lis 5, 21845
27767; PWR5-NEXT:    lis 6, 13107
27768; PWR5-NEXT:    ori 5, 5, 21845
27769; PWR5-NEXT:    rotldi 8, 4, 63
27770; PWR5-NEXT:    rotldi 9, 3, 63
27771; PWR5-NEXT:    rldimi 5, 5, 32, 0
27772; PWR5-NEXT:    and 8, 8, 5
27773; PWR5-NEXT:    and 5, 9, 5
27774; PWR5-NEXT:    ori 6, 6, 13107
27775; PWR5-NEXT:    sub 3, 3, 5
27776; PWR5-NEXT:    rldimi 6, 6, 32, 0
27777; PWR5-NEXT:    sub 4, 4, 8
27778; PWR5-NEXT:    and 8, 3, 6
27779; PWR5-NEXT:    rotldi 3, 3, 62
27780; PWR5-NEXT:    and 3, 3, 6
27781; PWR5-NEXT:    lis 7, 3855
27782; PWR5-NEXT:    and 5, 4, 6
27783; PWR5-NEXT:    rotldi 4, 4, 62
27784; PWR5-NEXT:    add 3, 8, 3
27785; PWR5-NEXT:    lis 9, 257
27786; PWR5-NEXT:    ori 7, 7, 3855
27787; PWR5-NEXT:    and 4, 4, 6
27788; PWR5-NEXT:    rldicl 6, 3, 60, 4
27789; PWR5-NEXT:    ori 9, 9, 257
27790; PWR5-NEXT:    rldimi 7, 7, 32, 0
27791; PWR5-NEXT:    add 4, 5, 4
27792; PWR5-NEXT:    add 3, 3, 6
27793; PWR5-NEXT:    rldimi 9, 9, 32, 0
27794; PWR5-NEXT:    rldicl 5, 4, 60, 4
27795; PWR5-NEXT:    and 3, 3, 7
27796; PWR5-NEXT:    add 4, 4, 5
27797; PWR5-NEXT:    mulld 3, 3, 9
27798; PWR5-NEXT:    and 4, 4, 7
27799; PWR5-NEXT:    rldicl 3, 3, 8, 56
27800; PWR5-NEXT:    li 5, 61
27801; PWR5-NEXT:    mulld 4, 4, 9
27802; PWR5-NEXT:    subc 6, 3, 5
27803; PWR5-NEXT:    rldicl 4, 4, 8, 56
27804; PWR5-NEXT:    subfe 3, 3, 3
27805; PWR5-NEXT:    subc 5, 4, 5
27806; PWR5-NEXT:    subfe 4, 4, 4
27807; PWR5-NEXT:    blr
27808;
27809; PWR6-LABEL: ult_61_v2i64:
27810; PWR6:       # %bb.0:
27811; PWR6-NEXT:    lis 5, 21845
27812; PWR6-NEXT:    lis 6, 13107
27813; PWR6-NEXT:    ori 5, 5, 21845
27814; PWR6-NEXT:    rotldi 8, 4, 63
27815; PWR6-NEXT:    rotldi 9, 3, 63
27816; PWR6-NEXT:    rldimi 5, 5, 32, 0
27817; PWR6-NEXT:    and 8, 8, 5
27818; PWR6-NEXT:    and 5, 9, 5
27819; PWR6-NEXT:    ori 6, 6, 13107
27820; PWR6-NEXT:    sub 3, 3, 5
27821; PWR6-NEXT:    rldimi 6, 6, 32, 0
27822; PWR6-NEXT:    sub 4, 4, 8
27823; PWR6-NEXT:    and 8, 3, 6
27824; PWR6-NEXT:    rotldi 3, 3, 62
27825; PWR6-NEXT:    and 3, 3, 6
27826; PWR6-NEXT:    lis 7, 3855
27827; PWR6-NEXT:    and 5, 4, 6
27828; PWR6-NEXT:    rotldi 4, 4, 62
27829; PWR6-NEXT:    add 3, 8, 3
27830; PWR6-NEXT:    lis 9, 257
27831; PWR6-NEXT:    ori 7, 7, 3855
27832; PWR6-NEXT:    and 4, 4, 6
27833; PWR6-NEXT:    rldicl 6, 3, 60, 4
27834; PWR6-NEXT:    ori 9, 9, 257
27835; PWR6-NEXT:    rldimi 7, 7, 32, 0
27836; PWR6-NEXT:    add 4, 5, 4
27837; PWR6-NEXT:    add 3, 3, 6
27838; PWR6-NEXT:    rldimi 9, 9, 32, 0
27839; PWR6-NEXT:    rldicl 5, 4, 60, 4
27840; PWR6-NEXT:    and 3, 3, 7
27841; PWR6-NEXT:    add 4, 4, 5
27842; PWR6-NEXT:    mulld 3, 3, 9
27843; PWR6-NEXT:    and 4, 4, 7
27844; PWR6-NEXT:    rldicl 3, 3, 8, 56
27845; PWR6-NEXT:    li 5, 61
27846; PWR6-NEXT:    mulld 4, 4, 9
27847; PWR6-NEXT:    subc 6, 3, 5
27848; PWR6-NEXT:    rldicl 4, 4, 8, 56
27849; PWR6-NEXT:    subfe 3, 3, 3
27850; PWR6-NEXT:    subc 5, 4, 5
27851; PWR6-NEXT:    subfe 4, 4, 4
27852; PWR6-NEXT:    blr
27853;
27854; PWR7-LABEL: ult_61_v2i64:
27855; PWR7:       # %bb.0:
27856; PWR7-NEXT:    addi 3, 1, -32
27857; PWR7-NEXT:    li 5, -1
27858; PWR7-NEXT:    stxvd2x 34, 0, 3
27859; PWR7-NEXT:    ld 4, -24(1)
27860; PWR7-NEXT:    ld 3, -32(1)
27861; PWR7-NEXT:    popcntd 4, 4
27862; PWR7-NEXT:    popcntd 3, 3
27863; PWR7-NEXT:    cmpldi 4, 61
27864; PWR7-NEXT:    li 4, 0
27865; PWR7-NEXT:    isellt 6, 5, 4
27866; PWR7-NEXT:    cmpldi 3, 61
27867; PWR7-NEXT:    isellt 3, 5, 4
27868; PWR7-NEXT:    std 6, -8(1)
27869; PWR7-NEXT:    std 3, -16(1)
27870; PWR7-NEXT:    addi 3, 1, -16
27871; PWR7-NEXT:    lxvd2x 34, 0, 3
27872; PWR7-NEXT:    blr
27873;
27874; PWR8-LABEL: ult_61_v2i64:
27875; PWR8:       # %bb.0:
27876; PWR8-NEXT:    addis 3, 2, .LCPI219_0@toc@ha
27877; PWR8-NEXT:    vpopcntd 2, 2
27878; PWR8-NEXT:    addi 3, 3, .LCPI219_0@toc@l
27879; PWR8-NEXT:    lxvd2x 35, 0, 3
27880; PWR8-NEXT:    vcmpgtud 2, 3, 2
27881; PWR8-NEXT:    blr
27882;
27883; PWR9-LABEL: ult_61_v2i64:
27884; PWR9:       # %bb.0:
27885; PWR9-NEXT:    addis 3, 2, .LCPI219_0@toc@ha
27886; PWR9-NEXT:    vpopcntd 2, 2
27887; PWR9-NEXT:    addi 3, 3, .LCPI219_0@toc@l
27888; PWR9-NEXT:    lxv 35, 0(3)
27889; PWR9-NEXT:    vcmpgtud 2, 3, 2
27890; PWR9-NEXT:    blr
27891  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27892  %3 = icmp ult <2 x i64> %2, <i64 61, i64 61>
27893  %4 = sext <2 x i1> %3 to <2 x i64>
27894  ret <2 x i64> %4
27895}
27896
27897define <2 x i64> @ugt_61_v2i64(<2 x i64> %0) {
27898; PWR5-LABEL: ugt_61_v2i64:
27899; PWR5:       # %bb.0:
27900; PWR5-NEXT:    lis 5, 21845
27901; PWR5-NEXT:    lis 6, 13107
27902; PWR5-NEXT:    ori 5, 5, 21845
27903; PWR5-NEXT:    rotldi 8, 4, 63
27904; PWR5-NEXT:    rotldi 9, 3, 63
27905; PWR5-NEXT:    rldimi 5, 5, 32, 0
27906; PWR5-NEXT:    and 8, 8, 5
27907; PWR5-NEXT:    and 5, 9, 5
27908; PWR5-NEXT:    ori 6, 6, 13107
27909; PWR5-NEXT:    sub 3, 3, 5
27910; PWR5-NEXT:    rldimi 6, 6, 32, 0
27911; PWR5-NEXT:    sub 4, 4, 8
27912; PWR5-NEXT:    and 8, 3, 6
27913; PWR5-NEXT:    rotldi 3, 3, 62
27914; PWR5-NEXT:    and 3, 3, 6
27915; PWR5-NEXT:    lis 7, 3855
27916; PWR5-NEXT:    and 5, 4, 6
27917; PWR5-NEXT:    rotldi 4, 4, 62
27918; PWR5-NEXT:    add 3, 8, 3
27919; PWR5-NEXT:    lis 9, 257
27920; PWR5-NEXT:    ori 7, 7, 3855
27921; PWR5-NEXT:    and 4, 4, 6
27922; PWR5-NEXT:    rldicl 6, 3, 60, 4
27923; PWR5-NEXT:    ori 9, 9, 257
27924; PWR5-NEXT:    rldimi 7, 7, 32, 0
27925; PWR5-NEXT:    add 4, 5, 4
27926; PWR5-NEXT:    add 3, 3, 6
27927; PWR5-NEXT:    rldimi 9, 9, 32, 0
27928; PWR5-NEXT:    rldicl 5, 4, 60, 4
27929; PWR5-NEXT:    and 3, 3, 7
27930; PWR5-NEXT:    add 4, 4, 5
27931; PWR5-NEXT:    mulld 3, 3, 9
27932; PWR5-NEXT:    and 4, 4, 7
27933; PWR5-NEXT:    rldicl 3, 3, 8, 56
27934; PWR5-NEXT:    mulld 4, 4, 9
27935; PWR5-NEXT:    li 5, 61
27936; PWR5-NEXT:    subfic 3, 3, 61
27937; PWR5-NEXT:    rldicl 4, 4, 8, 56
27938; PWR5-NEXT:    subfe 3, 5, 5
27939; PWR5-NEXT:    subfic 4, 4, 61
27940; PWR5-NEXT:    subfe 4, 5, 5
27941; PWR5-NEXT:    blr
27942;
27943; PWR6-LABEL: ugt_61_v2i64:
27944; PWR6:       # %bb.0:
27945; PWR6-NEXT:    lis 5, 21845
27946; PWR6-NEXT:    lis 6, 13107
27947; PWR6-NEXT:    ori 5, 5, 21845
27948; PWR6-NEXT:    rotldi 8, 4, 63
27949; PWR6-NEXT:    rotldi 9, 3, 63
27950; PWR6-NEXT:    rldimi 5, 5, 32, 0
27951; PWR6-NEXT:    and 8, 8, 5
27952; PWR6-NEXT:    and 5, 9, 5
27953; PWR6-NEXT:    ori 6, 6, 13107
27954; PWR6-NEXT:    sub 3, 3, 5
27955; PWR6-NEXT:    rldimi 6, 6, 32, 0
27956; PWR6-NEXT:    sub 4, 4, 8
27957; PWR6-NEXT:    and 8, 3, 6
27958; PWR6-NEXT:    rotldi 3, 3, 62
27959; PWR6-NEXT:    and 3, 3, 6
27960; PWR6-NEXT:    lis 7, 3855
27961; PWR6-NEXT:    and 5, 4, 6
27962; PWR6-NEXT:    rotldi 4, 4, 62
27963; PWR6-NEXT:    add 3, 8, 3
27964; PWR6-NEXT:    lis 9, 257
27965; PWR6-NEXT:    ori 7, 7, 3855
27966; PWR6-NEXT:    and 4, 4, 6
27967; PWR6-NEXT:    rldicl 6, 3, 60, 4
27968; PWR6-NEXT:    ori 9, 9, 257
27969; PWR6-NEXT:    rldimi 7, 7, 32, 0
27970; PWR6-NEXT:    add 4, 5, 4
27971; PWR6-NEXT:    add 3, 3, 6
27972; PWR6-NEXT:    rldimi 9, 9, 32, 0
27973; PWR6-NEXT:    rldicl 5, 4, 60, 4
27974; PWR6-NEXT:    and 3, 3, 7
27975; PWR6-NEXT:    add 4, 4, 5
27976; PWR6-NEXT:    mulld 3, 3, 9
27977; PWR6-NEXT:    and 4, 4, 7
27978; PWR6-NEXT:    rldicl 3, 3, 8, 56
27979; PWR6-NEXT:    mulld 4, 4, 9
27980; PWR6-NEXT:    li 5, 61
27981; PWR6-NEXT:    subfic 3, 3, 61
27982; PWR6-NEXT:    rldicl 4, 4, 8, 56
27983; PWR6-NEXT:    subfe 3, 5, 5
27984; PWR6-NEXT:    subfic 4, 4, 61
27985; PWR6-NEXT:    subfe 4, 5, 5
27986; PWR6-NEXT:    blr
27987;
27988; PWR7-LABEL: ugt_61_v2i64:
27989; PWR7:       # %bb.0:
27990; PWR7-NEXT:    addi 3, 1, -32
27991; PWR7-NEXT:    li 5, -1
27992; PWR7-NEXT:    stxvd2x 34, 0, 3
27993; PWR7-NEXT:    ld 4, -24(1)
27994; PWR7-NEXT:    ld 3, -32(1)
27995; PWR7-NEXT:    popcntd 4, 4
27996; PWR7-NEXT:    popcntd 3, 3
27997; PWR7-NEXT:    cmpldi 4, 61
27998; PWR7-NEXT:    li 4, 0
27999; PWR7-NEXT:    iselgt 6, 5, 4
28000; PWR7-NEXT:    cmpldi 3, 61
28001; PWR7-NEXT:    iselgt 3, 5, 4
28002; PWR7-NEXT:    std 6, -8(1)
28003; PWR7-NEXT:    std 3, -16(1)
28004; PWR7-NEXT:    addi 3, 1, -16
28005; PWR7-NEXT:    lxvd2x 34, 0, 3
28006; PWR7-NEXT:    blr
28007;
28008; PWR8-LABEL: ugt_61_v2i64:
28009; PWR8:       # %bb.0:
28010; PWR8-NEXT:    addis 3, 2, .LCPI220_0@toc@ha
28011; PWR8-NEXT:    vpopcntd 2, 2
28012; PWR8-NEXT:    addi 3, 3, .LCPI220_0@toc@l
28013; PWR8-NEXT:    lxvd2x 35, 0, 3
28014; PWR8-NEXT:    vcmpgtud 2, 2, 3
28015; PWR8-NEXT:    blr
28016;
28017; PWR9-LABEL: ugt_61_v2i64:
28018; PWR9:       # %bb.0:
28019; PWR9-NEXT:    addis 3, 2, .LCPI220_0@toc@ha
28020; PWR9-NEXT:    vpopcntd 2, 2
28021; PWR9-NEXT:    addi 3, 3, .LCPI220_0@toc@l
28022; PWR9-NEXT:    lxv 35, 0(3)
28023; PWR9-NEXT:    vcmpgtud 2, 2, 3
28024; PWR9-NEXT:    blr
28025  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28026  %3 = icmp ugt <2 x i64> %2, <i64 61, i64 61>
28027  %4 = sext <2 x i1> %3 to <2 x i64>
28028  ret <2 x i64> %4
28029}
28030
28031define <2 x i64> @ult_62_v2i64(<2 x i64> %0) {
28032; PWR5-LABEL: ult_62_v2i64:
28033; PWR5:       # %bb.0:
28034; PWR5-NEXT:    lis 5, 21845
28035; PWR5-NEXT:    lis 6, 13107
28036; PWR5-NEXT:    ori 5, 5, 21845
28037; PWR5-NEXT:    rotldi 8, 4, 63
28038; PWR5-NEXT:    rotldi 9, 3, 63
28039; PWR5-NEXT:    rldimi 5, 5, 32, 0
28040; PWR5-NEXT:    and 8, 8, 5
28041; PWR5-NEXT:    and 5, 9, 5
28042; PWR5-NEXT:    ori 6, 6, 13107
28043; PWR5-NEXT:    sub 3, 3, 5
28044; PWR5-NEXT:    rldimi 6, 6, 32, 0
28045; PWR5-NEXT:    sub 4, 4, 8
28046; PWR5-NEXT:    and 8, 3, 6
28047; PWR5-NEXT:    rotldi 3, 3, 62
28048; PWR5-NEXT:    and 3, 3, 6
28049; PWR5-NEXT:    lis 7, 3855
28050; PWR5-NEXT:    and 5, 4, 6
28051; PWR5-NEXT:    rotldi 4, 4, 62
28052; PWR5-NEXT:    add 3, 8, 3
28053; PWR5-NEXT:    lis 9, 257
28054; PWR5-NEXT:    ori 7, 7, 3855
28055; PWR5-NEXT:    and 4, 4, 6
28056; PWR5-NEXT:    rldicl 6, 3, 60, 4
28057; PWR5-NEXT:    ori 9, 9, 257
28058; PWR5-NEXT:    rldimi 7, 7, 32, 0
28059; PWR5-NEXT:    add 4, 5, 4
28060; PWR5-NEXT:    add 3, 3, 6
28061; PWR5-NEXT:    rldimi 9, 9, 32, 0
28062; PWR5-NEXT:    rldicl 5, 4, 60, 4
28063; PWR5-NEXT:    and 3, 3, 7
28064; PWR5-NEXT:    add 4, 4, 5
28065; PWR5-NEXT:    mulld 3, 3, 9
28066; PWR5-NEXT:    and 4, 4, 7
28067; PWR5-NEXT:    rldicl 3, 3, 8, 56
28068; PWR5-NEXT:    li 5, 62
28069; PWR5-NEXT:    mulld 4, 4, 9
28070; PWR5-NEXT:    subc 6, 3, 5
28071; PWR5-NEXT:    rldicl 4, 4, 8, 56
28072; PWR5-NEXT:    subfe 3, 3, 3
28073; PWR5-NEXT:    subc 5, 4, 5
28074; PWR5-NEXT:    subfe 4, 4, 4
28075; PWR5-NEXT:    blr
28076;
28077; PWR6-LABEL: ult_62_v2i64:
28078; PWR6:       # %bb.0:
28079; PWR6-NEXT:    lis 5, 21845
28080; PWR6-NEXT:    lis 6, 13107
28081; PWR6-NEXT:    ori 5, 5, 21845
28082; PWR6-NEXT:    rotldi 8, 4, 63
28083; PWR6-NEXT:    rotldi 9, 3, 63
28084; PWR6-NEXT:    rldimi 5, 5, 32, 0
28085; PWR6-NEXT:    and 8, 8, 5
28086; PWR6-NEXT:    and 5, 9, 5
28087; PWR6-NEXT:    ori 6, 6, 13107
28088; PWR6-NEXT:    sub 3, 3, 5
28089; PWR6-NEXT:    rldimi 6, 6, 32, 0
28090; PWR6-NEXT:    sub 4, 4, 8
28091; PWR6-NEXT:    and 8, 3, 6
28092; PWR6-NEXT:    rotldi 3, 3, 62
28093; PWR6-NEXT:    and 3, 3, 6
28094; PWR6-NEXT:    lis 7, 3855
28095; PWR6-NEXT:    and 5, 4, 6
28096; PWR6-NEXT:    rotldi 4, 4, 62
28097; PWR6-NEXT:    add 3, 8, 3
28098; PWR6-NEXT:    lis 9, 257
28099; PWR6-NEXT:    ori 7, 7, 3855
28100; PWR6-NEXT:    and 4, 4, 6
28101; PWR6-NEXT:    rldicl 6, 3, 60, 4
28102; PWR6-NEXT:    ori 9, 9, 257
28103; PWR6-NEXT:    rldimi 7, 7, 32, 0
28104; PWR6-NEXT:    add 4, 5, 4
28105; PWR6-NEXT:    add 3, 3, 6
28106; PWR6-NEXT:    rldimi 9, 9, 32, 0
28107; PWR6-NEXT:    rldicl 5, 4, 60, 4
28108; PWR6-NEXT:    and 3, 3, 7
28109; PWR6-NEXT:    add 4, 4, 5
28110; PWR6-NEXT:    mulld 3, 3, 9
28111; PWR6-NEXT:    and 4, 4, 7
28112; PWR6-NEXT:    rldicl 3, 3, 8, 56
28113; PWR6-NEXT:    li 5, 62
28114; PWR6-NEXT:    mulld 4, 4, 9
28115; PWR6-NEXT:    subc 6, 3, 5
28116; PWR6-NEXT:    rldicl 4, 4, 8, 56
28117; PWR6-NEXT:    subfe 3, 3, 3
28118; PWR6-NEXT:    subc 5, 4, 5
28119; PWR6-NEXT:    subfe 4, 4, 4
28120; PWR6-NEXT:    blr
28121;
28122; PWR7-LABEL: ult_62_v2i64:
28123; PWR7:       # %bb.0:
28124; PWR7-NEXT:    addi 3, 1, -32
28125; PWR7-NEXT:    li 5, -1
28126; PWR7-NEXT:    stxvd2x 34, 0, 3
28127; PWR7-NEXT:    ld 4, -24(1)
28128; PWR7-NEXT:    ld 3, -32(1)
28129; PWR7-NEXT:    popcntd 4, 4
28130; PWR7-NEXT:    popcntd 3, 3
28131; PWR7-NEXT:    cmpldi 4, 62
28132; PWR7-NEXT:    li 4, 0
28133; PWR7-NEXT:    isellt 6, 5, 4
28134; PWR7-NEXT:    cmpldi 3, 62
28135; PWR7-NEXT:    isellt 3, 5, 4
28136; PWR7-NEXT:    std 6, -8(1)
28137; PWR7-NEXT:    std 3, -16(1)
28138; PWR7-NEXT:    addi 3, 1, -16
28139; PWR7-NEXT:    lxvd2x 34, 0, 3
28140; PWR7-NEXT:    blr
28141;
28142; PWR8-LABEL: ult_62_v2i64:
28143; PWR8:       # %bb.0:
28144; PWR8-NEXT:    addis 3, 2, .LCPI221_0@toc@ha
28145; PWR8-NEXT:    vpopcntd 2, 2
28146; PWR8-NEXT:    addi 3, 3, .LCPI221_0@toc@l
28147; PWR8-NEXT:    lxvd2x 35, 0, 3
28148; PWR8-NEXT:    vcmpgtud 2, 3, 2
28149; PWR8-NEXT:    blr
28150;
28151; PWR9-LABEL: ult_62_v2i64:
28152; PWR9:       # %bb.0:
28153; PWR9-NEXT:    addis 3, 2, .LCPI221_0@toc@ha
28154; PWR9-NEXT:    vpopcntd 2, 2
28155; PWR9-NEXT:    addi 3, 3, .LCPI221_0@toc@l
28156; PWR9-NEXT:    lxv 35, 0(3)
28157; PWR9-NEXT:    vcmpgtud 2, 3, 2
28158; PWR9-NEXT:    blr
28159  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28160  %3 = icmp ult <2 x i64> %2, <i64 62, i64 62>
28161  %4 = sext <2 x i1> %3 to <2 x i64>
28162  ret <2 x i64> %4
28163}
28164
28165define <2 x i64> @ugt_62_v2i64(<2 x i64> %0) {
28166; PWR5-LABEL: ugt_62_v2i64:
28167; PWR5:       # %bb.0:
28168; PWR5-NEXT:    lis 5, 21845
28169; PWR5-NEXT:    lis 6, 13107
28170; PWR5-NEXT:    ori 5, 5, 21845
28171; PWR5-NEXT:    rotldi 8, 4, 63
28172; PWR5-NEXT:    rotldi 9, 3, 63
28173; PWR5-NEXT:    rldimi 5, 5, 32, 0
28174; PWR5-NEXT:    and 8, 8, 5
28175; PWR5-NEXT:    and 5, 9, 5
28176; PWR5-NEXT:    ori 6, 6, 13107
28177; PWR5-NEXT:    sub 3, 3, 5
28178; PWR5-NEXT:    rldimi 6, 6, 32, 0
28179; PWR5-NEXT:    sub 4, 4, 8
28180; PWR5-NEXT:    and 8, 3, 6
28181; PWR5-NEXT:    rotldi 3, 3, 62
28182; PWR5-NEXT:    and 3, 3, 6
28183; PWR5-NEXT:    lis 7, 3855
28184; PWR5-NEXT:    and 5, 4, 6
28185; PWR5-NEXT:    rotldi 4, 4, 62
28186; PWR5-NEXT:    add 3, 8, 3
28187; PWR5-NEXT:    lis 9, 257
28188; PWR5-NEXT:    ori 7, 7, 3855
28189; PWR5-NEXT:    and 4, 4, 6
28190; PWR5-NEXT:    rldicl 6, 3, 60, 4
28191; PWR5-NEXT:    ori 9, 9, 257
28192; PWR5-NEXT:    rldimi 7, 7, 32, 0
28193; PWR5-NEXT:    add 4, 5, 4
28194; PWR5-NEXT:    add 3, 3, 6
28195; PWR5-NEXT:    rldimi 9, 9, 32, 0
28196; PWR5-NEXT:    rldicl 5, 4, 60, 4
28197; PWR5-NEXT:    and 3, 3, 7
28198; PWR5-NEXT:    add 4, 4, 5
28199; PWR5-NEXT:    mulld 3, 3, 9
28200; PWR5-NEXT:    and 4, 4, 7
28201; PWR5-NEXT:    rldicl 3, 3, 8, 56
28202; PWR5-NEXT:    mulld 4, 4, 9
28203; PWR5-NEXT:    li 5, 62
28204; PWR5-NEXT:    subfic 3, 3, 62
28205; PWR5-NEXT:    rldicl 4, 4, 8, 56
28206; PWR5-NEXT:    subfe 3, 5, 5
28207; PWR5-NEXT:    subfic 4, 4, 62
28208; PWR5-NEXT:    subfe 4, 5, 5
28209; PWR5-NEXT:    blr
28210;
28211; PWR6-LABEL: ugt_62_v2i64:
28212; PWR6:       # %bb.0:
28213; PWR6-NEXT:    lis 5, 21845
28214; PWR6-NEXT:    lis 6, 13107
28215; PWR6-NEXT:    ori 5, 5, 21845
28216; PWR6-NEXT:    rotldi 8, 4, 63
28217; PWR6-NEXT:    rotldi 9, 3, 63
28218; PWR6-NEXT:    rldimi 5, 5, 32, 0
28219; PWR6-NEXT:    and 8, 8, 5
28220; PWR6-NEXT:    and 5, 9, 5
28221; PWR6-NEXT:    ori 6, 6, 13107
28222; PWR6-NEXT:    sub 3, 3, 5
28223; PWR6-NEXT:    rldimi 6, 6, 32, 0
28224; PWR6-NEXT:    sub 4, 4, 8
28225; PWR6-NEXT:    and 8, 3, 6
28226; PWR6-NEXT:    rotldi 3, 3, 62
28227; PWR6-NEXT:    and 3, 3, 6
28228; PWR6-NEXT:    lis 7, 3855
28229; PWR6-NEXT:    and 5, 4, 6
28230; PWR6-NEXT:    rotldi 4, 4, 62
28231; PWR6-NEXT:    add 3, 8, 3
28232; PWR6-NEXT:    lis 9, 257
28233; PWR6-NEXT:    ori 7, 7, 3855
28234; PWR6-NEXT:    and 4, 4, 6
28235; PWR6-NEXT:    rldicl 6, 3, 60, 4
28236; PWR6-NEXT:    ori 9, 9, 257
28237; PWR6-NEXT:    rldimi 7, 7, 32, 0
28238; PWR6-NEXT:    add 4, 5, 4
28239; PWR6-NEXT:    add 3, 3, 6
28240; PWR6-NEXT:    rldimi 9, 9, 32, 0
28241; PWR6-NEXT:    rldicl 5, 4, 60, 4
28242; PWR6-NEXT:    and 3, 3, 7
28243; PWR6-NEXT:    add 4, 4, 5
28244; PWR6-NEXT:    mulld 3, 3, 9
28245; PWR6-NEXT:    and 4, 4, 7
28246; PWR6-NEXT:    rldicl 3, 3, 8, 56
28247; PWR6-NEXT:    mulld 4, 4, 9
28248; PWR6-NEXT:    li 5, 62
28249; PWR6-NEXT:    subfic 3, 3, 62
28250; PWR6-NEXT:    rldicl 4, 4, 8, 56
28251; PWR6-NEXT:    subfe 3, 5, 5
28252; PWR6-NEXT:    subfic 4, 4, 62
28253; PWR6-NEXT:    subfe 4, 5, 5
28254; PWR6-NEXT:    blr
28255;
28256; PWR7-LABEL: ugt_62_v2i64:
28257; PWR7:       # %bb.0:
28258; PWR7-NEXT:    addi 3, 1, -32
28259; PWR7-NEXT:    li 5, -1
28260; PWR7-NEXT:    stxvd2x 34, 0, 3
28261; PWR7-NEXT:    ld 4, -24(1)
28262; PWR7-NEXT:    ld 3, -32(1)
28263; PWR7-NEXT:    popcntd 4, 4
28264; PWR7-NEXT:    popcntd 3, 3
28265; PWR7-NEXT:    cmpldi 4, 62
28266; PWR7-NEXT:    li 4, 0
28267; PWR7-NEXT:    iselgt 6, 5, 4
28268; PWR7-NEXT:    cmpldi 3, 62
28269; PWR7-NEXT:    iselgt 3, 5, 4
28270; PWR7-NEXT:    std 6, -8(1)
28271; PWR7-NEXT:    std 3, -16(1)
28272; PWR7-NEXT:    addi 3, 1, -16
28273; PWR7-NEXT:    lxvd2x 34, 0, 3
28274; PWR7-NEXT:    blr
28275;
28276; PWR8-LABEL: ugt_62_v2i64:
28277; PWR8:       # %bb.0:
28278; PWR8-NEXT:    addis 3, 2, .LCPI222_0@toc@ha
28279; PWR8-NEXT:    vpopcntd 2, 2
28280; PWR8-NEXT:    addi 3, 3, .LCPI222_0@toc@l
28281; PWR8-NEXT:    lxvd2x 35, 0, 3
28282; PWR8-NEXT:    vcmpgtud 2, 2, 3
28283; PWR8-NEXT:    blr
28284;
28285; PWR9-LABEL: ugt_62_v2i64:
28286; PWR9:       # %bb.0:
28287; PWR9-NEXT:    addis 3, 2, .LCPI222_0@toc@ha
28288; PWR9-NEXT:    vpopcntd 2, 2
28289; PWR9-NEXT:    addi 3, 3, .LCPI222_0@toc@l
28290; PWR9-NEXT:    lxv 35, 0(3)
28291; PWR9-NEXT:    vcmpgtud 2, 2, 3
28292; PWR9-NEXT:    blr
28293  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28294  %3 = icmp ugt <2 x i64> %2, <i64 62, i64 62>
28295  %4 = sext <2 x i1> %3 to <2 x i64>
28296  ret <2 x i64> %4
28297}
28298
28299define <2 x i64> @ult_63_v2i64(<2 x i64> %0) {
28300; PWR5-LABEL: ult_63_v2i64:
28301; PWR5:       # %bb.0:
28302; PWR5-NEXT:    lis 5, 21845
28303; PWR5-NEXT:    lis 6, 13107
28304; PWR5-NEXT:    ori 5, 5, 21845
28305; PWR5-NEXT:    rotldi 8, 4, 63
28306; PWR5-NEXT:    rotldi 9, 3, 63
28307; PWR5-NEXT:    rldimi 5, 5, 32, 0
28308; PWR5-NEXT:    and 8, 8, 5
28309; PWR5-NEXT:    and 5, 9, 5
28310; PWR5-NEXT:    ori 6, 6, 13107
28311; PWR5-NEXT:    sub 3, 3, 5
28312; PWR5-NEXT:    rldimi 6, 6, 32, 0
28313; PWR5-NEXT:    sub 4, 4, 8
28314; PWR5-NEXT:    and 8, 3, 6
28315; PWR5-NEXT:    rotldi 3, 3, 62
28316; PWR5-NEXT:    and 3, 3, 6
28317; PWR5-NEXT:    lis 7, 3855
28318; PWR5-NEXT:    and 5, 4, 6
28319; PWR5-NEXT:    rotldi 4, 4, 62
28320; PWR5-NEXT:    add 3, 8, 3
28321; PWR5-NEXT:    lis 9, 257
28322; PWR5-NEXT:    ori 7, 7, 3855
28323; PWR5-NEXT:    and 4, 4, 6
28324; PWR5-NEXT:    rldicl 6, 3, 60, 4
28325; PWR5-NEXT:    ori 9, 9, 257
28326; PWR5-NEXT:    rldimi 7, 7, 32, 0
28327; PWR5-NEXT:    add 4, 5, 4
28328; PWR5-NEXT:    add 3, 3, 6
28329; PWR5-NEXT:    rldimi 9, 9, 32, 0
28330; PWR5-NEXT:    rldicl 5, 4, 60, 4
28331; PWR5-NEXT:    and 3, 3, 7
28332; PWR5-NEXT:    add 4, 4, 5
28333; PWR5-NEXT:    mulld 3, 3, 9
28334; PWR5-NEXT:    and 4, 4, 7
28335; PWR5-NEXT:    rldicl 3, 3, 8, 56
28336; PWR5-NEXT:    li 5, 63
28337; PWR5-NEXT:    mulld 4, 4, 9
28338; PWR5-NEXT:    subc 6, 3, 5
28339; PWR5-NEXT:    rldicl 4, 4, 8, 56
28340; PWR5-NEXT:    subfe 3, 3, 3
28341; PWR5-NEXT:    subc 5, 4, 5
28342; PWR5-NEXT:    subfe 4, 4, 4
28343; PWR5-NEXT:    blr
28344;
28345; PWR6-LABEL: ult_63_v2i64:
28346; PWR6:       # %bb.0:
28347; PWR6-NEXT:    lis 5, 21845
28348; PWR6-NEXT:    lis 6, 13107
28349; PWR6-NEXT:    ori 5, 5, 21845
28350; PWR6-NEXT:    rotldi 8, 4, 63
28351; PWR6-NEXT:    rotldi 9, 3, 63
28352; PWR6-NEXT:    rldimi 5, 5, 32, 0
28353; PWR6-NEXT:    and 8, 8, 5
28354; PWR6-NEXT:    and 5, 9, 5
28355; PWR6-NEXT:    ori 6, 6, 13107
28356; PWR6-NEXT:    sub 3, 3, 5
28357; PWR6-NEXT:    rldimi 6, 6, 32, 0
28358; PWR6-NEXT:    sub 4, 4, 8
28359; PWR6-NEXT:    and 8, 3, 6
28360; PWR6-NEXT:    rotldi 3, 3, 62
28361; PWR6-NEXT:    and 3, 3, 6
28362; PWR6-NEXT:    lis 7, 3855
28363; PWR6-NEXT:    and 5, 4, 6
28364; PWR6-NEXT:    rotldi 4, 4, 62
28365; PWR6-NEXT:    add 3, 8, 3
28366; PWR6-NEXT:    lis 9, 257
28367; PWR6-NEXT:    ori 7, 7, 3855
28368; PWR6-NEXT:    and 4, 4, 6
28369; PWR6-NEXT:    rldicl 6, 3, 60, 4
28370; PWR6-NEXT:    ori 9, 9, 257
28371; PWR6-NEXT:    rldimi 7, 7, 32, 0
28372; PWR6-NEXT:    add 4, 5, 4
28373; PWR6-NEXT:    add 3, 3, 6
28374; PWR6-NEXT:    rldimi 9, 9, 32, 0
28375; PWR6-NEXT:    rldicl 5, 4, 60, 4
28376; PWR6-NEXT:    and 3, 3, 7
28377; PWR6-NEXT:    add 4, 4, 5
28378; PWR6-NEXT:    mulld 3, 3, 9
28379; PWR6-NEXT:    and 4, 4, 7
28380; PWR6-NEXT:    rldicl 3, 3, 8, 56
28381; PWR6-NEXT:    li 5, 63
28382; PWR6-NEXT:    mulld 4, 4, 9
28383; PWR6-NEXT:    subc 6, 3, 5
28384; PWR6-NEXT:    rldicl 4, 4, 8, 56
28385; PWR6-NEXT:    subfe 3, 3, 3
28386; PWR6-NEXT:    subc 5, 4, 5
28387; PWR6-NEXT:    subfe 4, 4, 4
28388; PWR6-NEXT:    blr
28389;
28390; PWR7-LABEL: ult_63_v2i64:
28391; PWR7:       # %bb.0:
28392; PWR7-NEXT:    addi 3, 1, -32
28393; PWR7-NEXT:    li 5, -1
28394; PWR7-NEXT:    stxvd2x 34, 0, 3
28395; PWR7-NEXT:    ld 4, -24(1)
28396; PWR7-NEXT:    ld 3, -32(1)
28397; PWR7-NEXT:    popcntd 4, 4
28398; PWR7-NEXT:    popcntd 3, 3
28399; PWR7-NEXT:    cmpldi 4, 63
28400; PWR7-NEXT:    li 4, 0
28401; PWR7-NEXT:    isellt 6, 5, 4
28402; PWR7-NEXT:    cmpldi 3, 63
28403; PWR7-NEXT:    isellt 3, 5, 4
28404; PWR7-NEXT:    std 6, -8(1)
28405; PWR7-NEXT:    std 3, -16(1)
28406; PWR7-NEXT:    addi 3, 1, -16
28407; PWR7-NEXT:    lxvd2x 34, 0, 3
28408; PWR7-NEXT:    blr
28409;
28410; PWR8-LABEL: ult_63_v2i64:
28411; PWR8:       # %bb.0:
28412; PWR8-NEXT:    addis 3, 2, .LCPI223_0@toc@ha
28413; PWR8-NEXT:    vpopcntd 2, 2
28414; PWR8-NEXT:    addi 3, 3, .LCPI223_0@toc@l
28415; PWR8-NEXT:    lxvd2x 35, 0, 3
28416; PWR8-NEXT:    vcmpgtud 2, 3, 2
28417; PWR8-NEXT:    blr
28418;
28419; PWR9-LABEL: ult_63_v2i64:
28420; PWR9:       # %bb.0:
28421; PWR9-NEXT:    addis 3, 2, .LCPI223_0@toc@ha
28422; PWR9-NEXT:    vpopcntd 2, 2
28423; PWR9-NEXT:    addi 3, 3, .LCPI223_0@toc@l
28424; PWR9-NEXT:    lxv 35, 0(3)
28425; PWR9-NEXT:    vcmpgtud 2, 3, 2
28426; PWR9-NEXT:    blr
28427  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28428  %3 = icmp ult <2 x i64> %2, <i64 63, i64 63>
28429  %4 = sext <2 x i1> %3 to <2 x i64>
28430  ret <2 x i64> %4
28431}
28432
28433declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)
28434declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)
28435declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)
28436declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)
28437